summaryrefslogtreecommitdiff
path: root/tests/std/test_net.zc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/std/test_net.zc')
-rw-r--r--tests/std/test_net.zc74
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";
+}