void test_metadata () { char my_endpoint[MAX_SOCKET_STRING]; setup_test_context (); // Spawn ZAP handler // We create and bind ZAP socket in main thread to avoid case // where child thread does not start up fast enough. void *handler = zmq_socket (get_test_context (), ZMQ_REP); TEST_ASSERT_NOT_NULL (handler); TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (handler, "inproc://zeromq.zap.01")); void *zap_thread = zmq_threadstart (&zap_handler, handler); void *server = test_context_socket (ZMQ_DEALER); void *client = test_context_socket (ZMQ_DEALER); TEST_ASSERT_SUCCESS_ERRNO ( zmq_setsockopt (server, ZMQ_ZAP_DOMAIN, "DOMAIN", 6)); bind_loopback_ipv4 (server, my_endpoint, sizeof (my_endpoint)); TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (client, my_endpoint)); s_send (client, "This is a message"); zmq_msg_t msg; zmq_msg_init (&msg); TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, server, 0)); TEST_ASSERT_EQUAL_STRING ("World", zmq_msg_gets (&msg, "Hello")); TEST_ASSERT_EQUAL_STRING ("DEALER", zmq_msg_gets (&msg, "Socket-Type")); TEST_ASSERT_EQUAL_STRING ("anonymous", zmq_msg_gets (&msg, "User-Id")); TEST_ASSERT_EQUAL_STRING ("127.0.0.1", zmq_msg_gets (&msg, "Peer-Address")); TEST_ASSERT_NULL (zmq_msg_gets (&msg, "No Such")); TEST_ASSERT_EQUAL_INT (EINVAL, zmq_errno ()); zmq_msg_close (&msg); test_context_socket_close_zero_linger (client); test_context_socket_close_zero_linger (server); // Shutdown teardown_test_context (); // Wait until ZAP handler terminates zmq_threadclose (zap_thread); }
void test_plain_wrong_credentials_fails () { // Check PLAIN security -- failed authentication void *client = test_context_socket (ZMQ_DEALER); const char username[] = "wronguser"; const char password[] = "wrongpass"; TEST_ASSERT_SUCCESS_ERRNO ( zmq_setsockopt (client, ZMQ_PLAIN_USERNAME, username, strlen (username))); TEST_ASSERT_SUCCESS_ERRNO ( zmq_setsockopt (client, ZMQ_PLAIN_PASSWORD, password, strlen (password))); TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (client, my_endpoint)); expect_bounce_fail (server, client); test_context_socket_close_zero_linger (client); }
void test_plain_client_as_server_fails () { // Check PLAIN security with badly configured client (as_server) // This will be caught by the plain_server class, not passed to ZAP void *client = test_context_socket (ZMQ_DEALER); TEST_ASSERT_SUCCESS_ERRNO ( zmq_setsockopt (client, ZMQ_ZAP_DOMAIN, domain, strlen (domain))); const int as_server = 1; TEST_ASSERT_SUCCESS_ERRNO ( zmq_setsockopt (client, ZMQ_PLAIN_SERVER, &as_server, sizeof (int))); TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (client, my_endpoint)); expect_bounce_fail (server, client); test_context_socket_close_zero_linger (client); }