]> git.meshlink.io Git - utcp/blobdiff - selftest.c
Fix buffer resizing logic in buffer_put_at().
[utcp] / selftest.c
index c1df40f486481f1ff5ca1839617de3e673b1c95b..8abf4cc6fdd56e3081ac0762c6bef78116ab489a 100644 (file)
@@ -10,7 +10,7 @@ struct utcp *a;
 struct utcp *b;
 struct utcp_connection *c;
 
-int do_recv(struct utcp_connection *x, void *data, size_t len) {
+ssize_t do_recv(struct utcp_connection *x, const void *data, size_t len) {
        if(!len) {
                if(errno)
                        fprintf(stderr, "%p Error: %s\n", x->utcp, strerror(errno));
@@ -24,26 +24,24 @@ int do_recv(struct utcp_connection *x, void *data, size_t len) {
        }
 
        if(x == c)
-               write(0, data, len);
+               return write(0, data, len);
        else
-               utcp_send(x, data, len);
-
-       return 0;
+               return utcp_send(x, data, len);
 }
 
-bool do_pre_accept(struct utcp *utcp, void *data, size_t len) {
+bool do_pre_accept(struct utcp *utcp, uint16_t port) {
        fprintf(stderr, "pre-accept\n");
-       if(len != 2 || strncmp(data, "oi", 2))
+       if(port != 7)
                return false;
        return true;
 }
 
-void do_accept(struct utcp_connection *c, void *data, size_t len) {
+void do_accept(struct utcp_connection *c, uint16_t port) {
        fprintf(stderr, "accept\n");
        utcp_accept(c, do_recv, NULL);
 }
 
-int do_send(struct utcp *utcp, void *data, size_t len) {
+ssize_t do_send(struct utcp *utcp, const void *data, size_t len) {
        static int count = 0;
        if(++count > 1000) {
                fprintf(stderr, "Too many packets!\n");
@@ -56,7 +54,6 @@ int do_send(struct utcp *utcp, void *data, size_t len) {
                return utcp_recv(a, data, len);
 }
 
-
 int main(int argc, char *argv[]) {
        srand(time(NULL));
 
@@ -64,28 +61,59 @@ int main(int argc, char *argv[]) {
        b = utcp_init(NULL, NULL, do_send, NULL);
 
        fprintf(stderr, "Testing connection to closed port\n\n");
-       c = utcp_connect(b, "zomg", 4, do_recv, NULL);
+       c = utcp_connect(b, 6, do_recv, NULL);
 
        fprintf(stderr, "\nTesting conection to non-listening side\n\n");
-       c = utcp_connect(a, "oi", 2, do_recv, NULL);
+       c = utcp_connect(a, 7, do_recv, NULL);
 
        fprintf(stderr, "\nTesting connection to open port, close\n\n");
-       c = utcp_connect(b, "oi", 2, do_recv, NULL);
+       c = utcp_connect(b, 7, do_recv, NULL);
        fprintf(stderr, "closing...\n");
        utcp_close(c);
 
        fprintf(stderr, "\nTesting connection to open port, abort\n\n");
-       c = utcp_connect(b, "oi", 2, do_recv, NULL);
+       c = utcp_connect(b, 7, do_recv, NULL);
        fprintf(stderr, "aborting...\n");
        utcp_abort(c);
 
        fprintf(stderr, "\nTesting connection with data transfer\n\n");
 
-       c = utcp_connect(b, "oi", 2, do_recv, NULL);
-       utcp_send(c, "Hello world!\n", 13);
-       utcp_send(c, "This is a test.\n", 16);
+       c = utcp_connect(b, 7, do_recv, NULL);
+       ssize_t len = utcp_send(c, "Hello world!\n", 13);
+
+       if(len != 13) {
+               if(len == -1)
+                       fprintf(stderr, "Error: %s\n", strerror(errno));
+               else
+                       fprintf(stderr, "Short write %zd!\n", len);
+       }
+       len = utcp_send(c, "This is a test.\n", 16);
+
+       if(len != 16) {
+               if(len == -1)
+                       fprintf(stderr, "Error: %s\n", strerror(errno));
+               else
+                       fprintf(stderr, "Short write %zd!\n", len);
+       }
+
+       fprintf(stderr, "closing...\n");
+       utcp_close(c);
+
+       fprintf(stderr, "\nTesting connection with huge data transfer\n\n");
+
+       c = utcp_connect(b, 7, do_recv, NULL);
+       utcp_set_sndbuf(c, 10240);
+       char buf[20480] = "buf";
+
+       len = utcp_send(c, buf, sizeof buf);
+       if(len != 10240)
+               fprintf(stderr, "Error: utcp_send() returned %zd, expected 10240\n", len);
+
        fprintf(stderr, "closing...\n");
        utcp_close(c);
 
+       utcp_exit(a);
+       utcp_exit(b);
+
        return 0;
 }