treevault/test/server_test.gleam

58 lines
2.0 KiB
Gleam

import gleam/erlang/process
import gleeunit
import gleeunit/should
import mug
import treevault
pub fn main() {
gleeunit.main()
}
pub fn server_test() {
process.start(fn() { treevault.init("non-existent-file.json") }, True)
process.sleep(2000)
let assert Ok(socket) =
mug.new("localhost", port: 8080)
|> mug.timeout(milliseconds: 500)
|> mug.connect()
let assert Ok(Nil) = mug.send(socket, <<"set root.a 2":utf8>>)
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
packet |> should.equal(<<"Ok":utf8>>)
let assert Ok(Nil) = mug.send(socket, <<"get root.a":utf8>>)
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
packet |> should.equal(<<"2":utf8>>)
let assert Ok(Nil) = mug.send(socket, <<"foo root.a":utf8>>)
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
packet |> should.equal(<<"QueryError(\"Wrong query format.\")":utf8>>)
let assert Ok(Nil) = mug.send(socket, <<"set root.b \"foo\"":utf8>>)
let assert Ok(_) = mug.receive(socket, timeout_milliseconds: 100)
let assert Ok(Nil) = mug.send(socket, <<"get root":utf8>>)
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
packet |> should.equal(<<"{\"a\":2,\"b\":\"foo\"}":utf8>>)
let assert Ok(Nil) =
mug.send(socket, <<
"set root.c {\"a\":{\"b\":{\"c\":{\"d\":{\"e\":{\"f\":true}}}}}}":utf8,
>>)
let assert Ok(_) = mug.receive(socket, timeout_milliseconds: 100)
let assert Ok(Nil) = mug.send(socket, <<"get root.c":utf8>>)
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
packet
|> should.equal(<<
"{\"a\":{\"b\":{\"c\":{\"d\":{\"e\":{\"f\":true}}}}}}":utf8,
>>)
let assert Ok(Nil) = mug.send(socket, <<"set root.a {\"baz\":\"bar\"}":utf8>>)
let assert Ok(_) = mug.receive(socket, timeout_milliseconds: 100)
let assert Ok(Nil) = mug.send(socket, <<"get root.a":utf8>>)
let assert Ok(packet) = mug.receive(socket, timeout_milliseconds: 100)
packet
|> should.equal(<<"{\"baz\":\"bar\"}":utf8>>)
}