359f945170
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
- Python: fix wire protocol test method names (bool_val -> bool, etc.) - Python: make integration tests and example fully async with pytest-asyncio - Rust: add tokio dev-dependency and convert integration tests to async/await - Rust: update ping_test example to async - Nim: remove committed ELF build artifact - Docker: add BARADB_HOST/BARADB_PORT env vars to test containers - Docker: fix docker-compose.test.yml usage (remove --abort-on-container-exit) - Add scripts/test-clients.sh for sequential client test runs - Remove docker-compose.test.yml from .gitignore so it is tracked - Fix repository URLs in Python and Rust READMEs
122 lines
3.5 KiB
Nim
122 lines
3.5 KiB
Nim
## BaraDB Nim Client — Integration Tests
|
|
## Requires a running BaraDB server.
|
|
## Set BARADB_HOST / BARADB_PORT env vars to override defaults.
|
|
|
|
import std/unittest
|
|
import std/asyncdispatch
|
|
import std/asyncnet
|
|
import std/strutils
|
|
import std/os
|
|
import baradb/client
|
|
|
|
const
|
|
TestHost = getEnv("BARADB_HOST", "127.0.0.1")
|
|
TestPort = parseInt(getEnv("BARADB_PORT", "9472"))
|
|
|
|
proc serverAvailable(): bool =
|
|
try:
|
|
var socket = newAsyncSocket()
|
|
waitFor socket.connect(TestHost, Port(TestPort))
|
|
socket.close()
|
|
return true
|
|
except:
|
|
return false
|
|
|
|
let hasServer = serverAvailable()
|
|
|
|
suite "Integration: Connection":
|
|
test "Connect and close":
|
|
if not hasServer:
|
|
skip()
|
|
var client = newClient(ClientConfig(host: TestHost, port: TestPort))
|
|
check not client.isConnected
|
|
waitFor client.connect()
|
|
check client.isConnected
|
|
client.close()
|
|
check not client.isConnected
|
|
|
|
test "Ping":
|
|
if not hasServer:
|
|
skip()
|
|
var client = newClient(ClientConfig(host: TestHost, port: TestPort))
|
|
waitFor client.connect()
|
|
check (waitFor client.ping()) == true
|
|
client.close()
|
|
|
|
suite "Integration: Query":
|
|
test "Simple SELECT":
|
|
if not hasServer:
|
|
skip()
|
|
var client = newClient(ClientConfig(host: TestHost, port: TestPort))
|
|
waitFor client.connect()
|
|
let result = waitFor client.query("SELECT 1 as one")
|
|
check result.rowCount >= 0
|
|
client.close()
|
|
|
|
test "Parameterized query":
|
|
if not hasServer:
|
|
skip()
|
|
var client = newClient(ClientConfig(host: TestHost, port: TestPort))
|
|
waitFor client.connect()
|
|
let result = waitFor client.query(
|
|
"SELECT $1 as num, $2 as txt",
|
|
@[WireValue(kind: fkInt64, int64Val: 42), WireValue(kind: fkString, strVal: "hello")]
|
|
)
|
|
check result.rowCount >= 0
|
|
client.close()
|
|
|
|
suite "Integration: DDL & DML":
|
|
test "Create table, insert, select, drop":
|
|
if not hasServer:
|
|
skip()
|
|
var client = newClient(ClientConfig(host: TestHost, port: TestPort))
|
|
waitFor client.connect()
|
|
|
|
try:
|
|
discard waitFor client.exec("DROP TABLE IF EXISTS nim_test_users")
|
|
except:
|
|
discard
|
|
|
|
discard waitFor client.exec("CREATE TABLE nim_test_users (id INT PRIMARY KEY, name STRING, age INT)")
|
|
let affected = waitFor client.exec("INSERT INTO nim_test_users (id, name, age) VALUES (1, 'Alice', 30)")
|
|
check affected >= 0
|
|
|
|
let result = waitFor client.query("SELECT name, age FROM nim_test_users WHERE id = 1")
|
|
check result.rowCount == 1
|
|
client.close()
|
|
|
|
suite "Integration: QueryBuilder":
|
|
test "Builder exec":
|
|
if not hasServer:
|
|
skip()
|
|
var client = newClient(ClientConfig(host: TestHost, port: TestPort))
|
|
waitFor client.connect()
|
|
|
|
try:
|
|
discard waitFor client.exec("DROP TABLE IF EXISTS nim_test_products")
|
|
except:
|
|
discard
|
|
|
|
discard waitFor client.exec("CREATE TABLE nim_test_products (id INT PRIMARY KEY, name STRING, price FLOAT)")
|
|
discard waitFor client.exec("INSERT INTO nim_test_products (id, name, price) VALUES (1, 'Widget', 9.99)")
|
|
|
|
let result = waitFor newQueryBuilder(client)
|
|
.select("name", "price")
|
|
.from("nim_test_products")
|
|
.where("id = 1")
|
|
.exec()
|
|
check result.rowCount == 1
|
|
|
|
discard waitFor client.exec("DROP TABLE nim_test_products")
|
|
client.close()
|
|
|
|
suite "Integration: SyncClient":
|
|
test "Sync query":
|
|
if not hasServer:
|
|
skip()
|
|
var client = newSyncClient(ClientConfig(host: TestHost, port: TestPort))
|
|
client.connect()
|
|
let result = client.query("SELECT 1 as one")
|
|
check result.rowCount >= 0
|
|
client.close()
|