diff options
Diffstat (limited to 'tests/std/test_net.zc')
| -rw-r--r-- | tests/std/test_net.zc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/std/test_net.zc b/tests/std/test_net.zc new file mode 100644 index 0000000..98ba32f --- /dev/null +++ b/tests/std/test_net.zc @@ -0,0 +1,74 @@ + +//> link: -lpthread + +import "std/net.zc" +import "std/fs.zc" +import "std/thread.zc" +import "std/result.zc" + +test "test_net" { + "Testing Networking..."; + + var t = Thread::spawn(fn() { + var listener = TcpListener::bind("127.0.0.1", 9090); + if (listener.is_err()) { + !"Server bind failed"; + return; + } + + var l = listener.unwrap(); + + var client_res = l.accept(); + if (client_res.is_err()) { + !"Accept failed"; + l.close(); + return; + } + + var client = client_res.unwrap(); + + var buf: char* = malloc(100); + var n_res = client.read(buf, 100); + + if (n_res.is_ok()) { + var n = n_res.unwrap(); + buf[n] = 0; + if (strcmp(buf, "Ping") == 0) { + client.write("Pong", 4); + } + } + + free(buf); + client.close(); + l.close(); + }); + + if (t.is_err()) { + !"Thread spawn failed"; + exit(1); + } + + sleep_ms(100); + + var stream_res = TcpStream::connect("127.0.0.1", 9090); + if (stream_res.is_err()) { + !"Client connect failed"; + exit(1); + } + + var stream = stream_res.unwrap(); + stream.write("Ping", 4); + + var buf2: char* = malloc(100); + var n2_res = stream.read(buf2, 100); + + if (n2_res.is_ok()) { + buf2[n2_res.unwrap()] = 0; + "Client Received: {buf2}"; + } + free(buf2); + + stream.close(); + + "Net Test Done"; +} |
