diff options
| author | Garrett D'Amore <garrett@damore.org> | 2021-01-01 11:30:03 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2021-01-01 12:46:17 -0800 |
| commit | ed542ac45e00c9b2faa0b41f3c00de6e291e5678 (patch) | |
| tree | 673924ff077d468e6756529c2c204698d3faa47c /src/transport/ipc/ipc_test.c | |
| parent | 1413b2421a82cd9b9cde178d44fb60c7893176b0 (diff) | |
| download | nng-ed542ac45e00c9b2faa0b41f3c00de6e291e5678.tar.gz nng-ed542ac45e00c9b2faa0b41f3c00de6e291e5678.tar.bz2 nng-ed542ac45e00c9b2faa0b41f3c00de6e291e5678.zip | |
fixes #1345 Restructure the source tree
This is not quite complete, but it sets the stage for other
protocols (such as zmq or mqtt) to be added to the project.
Diffstat (limited to 'src/transport/ipc/ipc_test.c')
| -rw-r--r-- | src/transport/ipc/ipc_test.c | 395 |
1 files changed, 0 insertions, 395 deletions
diff --git a/src/transport/ipc/ipc_test.c b/src/transport/ipc/ipc_test.c deleted file mode 100644 index 2fb4afa3..00000000 --- a/src/transport/ipc/ipc_test.c +++ /dev/null @@ -1,395 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> -// Copyright 2018 Cody Piersall <cody.piersall@gmail.com> -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#include <nuts.h> - -#ifdef NNG_PLATFORM_POSIX -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> -#endif - -void -test_path_too_long(void) -{ - nng_socket s1; - char addr[256]; - - // All our names have to be less than 128 bytes. - memset(addr, 'a', 255); - addr[255] = 0; - memcpy(addr, "ipc://", strlen("ipc://")); - - NUTS_ASSERT(strlen(addr) == 255); - NUTS_OPEN(s1); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - NUTS_FAIL(nng_listen(s1, addr, NULL, 0), NNG_EADDRINVAL); - NUTS_FAIL(nng_dial(s1, addr, NULL, NNG_FLAG_NONBLOCK), NNG_EADDRINVAL); - - NUTS_CLOSE(s1); -} - -void -test_ipc_dialer_perms(void) -{ - nng_socket s; - nng_dialer d; - char * addr; - - NUTS_ADDR(addr, "ipc"); - NUTS_OPEN(s); - NUTS_PASS(nng_dialer_create(&d, s, addr)); - NUTS_FAIL( - nng_dialer_set_int(d, NNG_OPT_IPC_PERMISSIONS, 0444), NNG_ENOTSUP); - NUTS_CLOSE(s); -} - -void -test_ipc_dialer_properties(void) -{ - nng_socket s; - nng_dialer d; - nng_sockaddr sa; - size_t z; - char *addr; - - NUTS_ADDR(addr, "ipc"); - NUTS_OPEN(s); - NUTS_PASS(nng_dial(s, addr, &d, NNG_FLAG_NONBLOCK)); - // Dialers don't have local addresses. - NUTS_FAIL(nng_dialer_get_addr(d, NNG_OPT_LOCADDR, &sa), NNG_ENOTSUP); - - NUTS_FAIL( - nng_dialer_set(d, NNG_OPT_LOCADDR, &sa, sizeof(sa)), NNG_ENOTSUP); - - z = 8192; - NUTS_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, z)); - z = 0; - NUTS_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &z)); - NUTS_TRUE(z == 8192); - NUTS_FAIL(nng_dialer_set_bool(d, NNG_OPT_RAW, true), NNG_ENOTSUP); - NUTS_CLOSE(s); -} - -void -test_ipc_listener_perms(void) -{ - nng_socket s; - nng_listener l; - char *addr; - -#ifndef _WIN32 - char * path; - struct stat st; -#endif - - NUTS_ADDR(addr, "ipc"); - NUTS_OPEN(s); - NUTS_PASS(nng_listener_create(&l, s, addr)); - -#ifdef _WIN32 - NUTS_FAIL(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0444), - NNG_ENOTSUP); -#else - path = &addr[strlen("ipc://")]; - - // Attempt to set invalid permissions fails. - NUTS_FAIL(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, S_IFREG), - NNG_EINVAL); - - NUTS_PASS(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0444)); - NUTS_PASS(nng_listener_start(l, 0)); - NUTS_TRUE(stat(path, &st) == 0); - NUTS_TRUE((st.st_mode & 0777) == 0444); - - // Now that it's running, we cannot set it. - NUTS_FAIL( - nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0644), NNG_EBUSY); -#endif - - NUTS_CLOSE(s); -} - -void -test_ipc_listener_properties(void) -{ - nng_socket s; - nng_listener l; - nng_sockaddr sa; - size_t z; - char *addr; - - NUTS_ADDR(addr, "ipc"); - NUTS_OPEN(s); - NUTS_PASS(nng_listen(s, addr, &l, 0)); - NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); - NUTS_TRUE(sa.s_ipc.sa_family == NNG_AF_IPC); - NUTS_MATCH(sa.s_ipc.sa_path, addr + strlen("ipc://")); - - NUTS_FAIL(nng_listener_set(l, NNG_OPT_LOCADDR, &sa, sizeof(sa)), - NNG_EREADONLY); - z = 8192; - NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, z)); - z = 0; - NUTS_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &z)); - NUTS_TRUE(z == 8192); - NUTS_FAIL(nng_listener_set_bool(l, NNG_OPT_RAW, true), NNG_ENOTSUP); - NUTS_CLOSE(s); -} - -void -test_ipc_recv_max(void) -{ - char msg[256]; - char rcvbuf[256]; - nng_socket s0; - nng_socket s1; - nng_listener l; - size_t sz; - char *addr; - - NUTS_ADDR(addr, "ipc"); - NUTS_OPEN(s0); - NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100)); - NUTS_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200)); - NUTS_PASS(nng_listener_create(&l, s0, addr)); - NUTS_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz)); - NUTS_TRUE(sz == 200); - NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100)); - NUTS_PASS(nng_listener_start(l, 0)); - - NUTS_OPEN(s1); - NUTS_PASS(nng_dial(s1, addr, NULL, 0)); - NUTS_PASS(nng_send(s1, msg, 95, 0)); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); - NUTS_PASS(nng_recv(s0, rcvbuf, &sz, 0)); - NUTS_TRUE(sz == 95); - NUTS_PASS(nng_send(s1, msg, 150, 0)); - NUTS_FAIL(nng_recv(s0, rcvbuf, &sz, 0), NNG_ETIMEDOUT); - NUTS_CLOSE(s0); - NUTS_CLOSE(s1); -} - -void -test_abstract_sockets(void) -{ -#ifdef NNG_HAVE_ABSTRACT_SOCKETS - nng_socket s1; - nng_socket s2; - char *addr; - nng_pipe p1; - nng_pipe p2; - nng_sockaddr sa1; - nng_sockaddr sa2; - char * prefix = "abstract://"; - - NUTS_ADDR(addr, "abstract"); - NUTS_OPEN(s1); - NUTS_OPEN(s2); - NUTS_MARRY_EX(s1, s2, addr, &p1, &p2); - NUTS_PASS(nng_pipe_get_addr(p1, NNG_OPT_REMADDR, &sa1)); - NUTS_PASS(nng_pipe_get_addr(p2, NNG_OPT_LOCADDR, &sa2)); - NUTS_TRUE(sa1.s_family == sa2.s_family); - NUTS_TRUE(sa1.s_family == NNG_AF_ABSTRACT); - NUTS_TRUE(sa1.s_abstract.sa_len == strlen(addr) - strlen(prefix)); - NUTS_TRUE(sa2.s_abstract.sa_len == strlen(addr) - strlen(prefix)); - NUTS_SEND(s1, "ping"); - NUTS_RECV(s2, "ping"); - NUTS_CLOSE(s1); - NUTS_CLOSE(s2); -#endif -} - -void -test_abstract_auto_bind(void) -{ -#ifdef NNG_HAVE_ABSTRACT_SOCKETS - nng_socket s1; - nng_socket s2; - char addr[40]; - char name[12]; - nng_sockaddr sa; - nng_listener l; - size_t len; - - snprintf(addr, sizeof(addr), "abstract://"); - - NUTS_OPEN(s1); - NUTS_OPEN(s2); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); - NUTS_PASS(nng_listen(s1, addr, &l, 0)); - - NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); - // Under linux there are either 8 or 5 hex characters. - NUTS_TRUE(sa.s_family == NNG_AF_ABSTRACT); - NUTS_TRUE(sa.s_abstract.sa_len < 10); - - len = sa.s_abstract.sa_len; - memcpy(name, sa.s_abstract.sa_name, len); - name[len] = '\0'; - NUTS_TRUE(strlen(name) == len); - - (void) snprintf(addr, sizeof(addr), "abstract://%s", name); - NUTS_PASS(nng_dial(s2, addr, NULL, 0)); - - // first send the ping - NUTS_SEND(s1, "ping"); - NUTS_RECV(s2, "ping"); - - NUTS_SEND(s2, "pong"); - NUTS_RECV(s1, "pong"); - - NUTS_CLOSE(s1); - NUTS_CLOSE(s2); -#endif -} - -void -test_abstract_too_long(void) -{ -#ifdef NNG_HAVE_ABSTRACT_SOCKETS - nng_socket s1; - char addr[256]; - - // All our names have to be less than 128 bytes. - memset(addr, 'a', 255); - addr[255] = 0; - memcpy(addr, "abstract://", strlen("abstract://")); - - NUTS_ASSERT(strlen(addr) == 255); - NUTS_OPEN(s1); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - NUTS_FAIL(nng_listen(s1, addr, NULL, 0), NNG_EADDRINVAL); - NUTS_FAIL(nng_dial(s1, addr, NULL, NNG_FLAG_NONBLOCK), NNG_EADDRINVAL); - - NUTS_CLOSE(s1); -#endif -} - -void -test_abstract_null(void) -{ -#ifdef NNG_HAVE_ABSTRACT_SOCKETS - nng_socket s1; - nng_socket s2; - char addr[64]; - char name[40]; - char rng[20]; - - nng_sockaddr sa; - nng_listener l; - size_t len; - - snprintf(rng, sizeof(rng), "%08x%08x", nng_random(), nng_random()); - snprintf(name, sizeof(name), "a%%00b_%s", rng); - snprintf(addr, sizeof(addr), "abstract://%s", name); - - NUTS_OPEN(s1); - NUTS_OPEN(s2); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); - NUTS_PASS(nng_listen(s1, addr, &l, 0)); - - NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); - // Under linux there are either 8 or 5 hex characters. - NUTS_TRUE(sa.s_family == NNG_AF_ABSTRACT); - NUTS_TRUE(sa.s_abstract.sa_len < 32); - len = sa.s_abstract.sa_len; - NUTS_TRUE(len == 20); - NUTS_TRUE(sa.s_abstract.sa_name[0] == 'a'); - NUTS_TRUE(sa.s_abstract.sa_name[1] == '\0'); - NUTS_TRUE(sa.s_abstract.sa_name[2] == 'b'); - NUTS_TRUE(sa.s_abstract.sa_name[3] == '_'); - NUTS_TRUE(memcmp(&sa.s_abstract.sa_name[4], rng, 16) == 0); - - NUTS_PASS(nng_dial(s2, addr, NULL, 0)); - - // first send the ping - NUTS_SEND(s1, "1234"); - NUTS_RECV(s2, "1234"); - - NUTS_SEND(s2, "5678"); - NUTS_RECV(s1, "5678"); - - NUTS_CLOSE(s1); - NUTS_CLOSE(s2); -#endif -} - -void -test_unix_alias(void) -{ -#ifdef NNG_PLATFORM_POSIX - nng_socket s1; - nng_socket s2; - char addr1[32]; - char addr2[32]; - char rng[20]; - nng_sockaddr sa1; - nng_sockaddr sa2; - nng_msg * msg; - nng_pipe p; - - // Presumes /tmp. - - (void) snprintf( - rng, sizeof(rng), "%08x%08x", nng_random(), nng_random()); - snprintf(addr1, sizeof(addr1), "ipc:///tmp/%s", rng); - snprintf(addr2, sizeof(addr2), "unix:///tmp/%s", rng); - - NUTS_OPEN(s1); - NUTS_OPEN(s2); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); - NUTS_PASS(nng_listen(s1, addr1, NULL, 0)); - NUTS_PASS(nng_dial(s2, addr2, NULL, 0)); - - // first send the ping - NUTS_SEND(s1, "ping"); - NUTS_PASS(nng_recvmsg(s2, &msg, 0)); - NUTS_ASSERT(msg != NULL); - NUTS_TRUE(nng_msg_len(msg) == 5); - NUTS_MATCH(nng_msg_body(msg), "ping"); - p = nng_msg_get_pipe(msg); - NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa1)); - NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa2)); - NUTS_TRUE(sa1.s_family == sa2.s_family); - NUTS_TRUE(sa1.s_family == NNG_AF_IPC); - NUTS_MATCH(sa1.s_ipc.sa_path, sa2.s_ipc.sa_path); - nng_msg_free(msg); - - NUTS_CLOSE(s1); - NUTS_CLOSE(s2); -#endif -} - -TEST_LIST = { - { "ipc path too long", test_path_too_long }, - { "ipc dialer perms", test_ipc_dialer_perms }, - { "ipc dialer props", test_ipc_dialer_properties }, - { "ipc listener perms", test_ipc_listener_perms }, - { "ipc listener props", test_ipc_listener_properties }, - { "ipc recv max", test_ipc_recv_max }, - { "ipc abstract sockets", test_abstract_sockets }, - { "ipc abstract auto bind", test_abstract_auto_bind }, - { "ipc abstract name too long", test_abstract_too_long }, - { "ipc abstract embedded null", test_abstract_null }, - { "ipc unix alias", test_unix_alias }, - { NULL, NULL }, -};
\ No newline at end of file |
