@@ -97,9 +97,51 @@ TEST(events_common, send_recv)
9797 zmq_ctx_term (zmq_ctx);
9898}
9999
100+ TEST (events_common, send_recv_control_character)
101+ {
102+ #if 0
103+ {
104+ /* Direct log messages to stdout */
105+ string dummy, op("STDOUT");
106+ swss::Logger::swssOutputNotify(dummy, op);
107+ swss::Logger::setMinPrio(swss::Logger::SWSS_DEBUG);
108+ }
109+ #endif
100110
111+ char *path = " tcp://127.0.0.1:5570" ;
112+ void *zmq_ctx = zmq_ctx_new ();
113+ void *sock_p0 = zmq_socket (zmq_ctx, ZMQ_PAIR);
114+ EXPECT_EQ (0 , zmq_connect (sock_p0, path));
101115
116+ void *sock_p1 = zmq_socket (zmq_ctx, ZMQ_PAIR);
117+ EXPECT_EQ (0 , zmq_bind (sock_p1, path));
102118
119+ string source;
120+ map<string, string> m;
121+
122+ // Subscription based control character test
123+ zmq_msg_t sub_msg;
124+ zmq_msg_init_size (&sub_msg, 1 );
125+ *(char *)zmq_msg_data (&sub_msg) = 0x01 ;
126+ EXPECT_EQ (1 , zmq_msg_send (&sub_msg, sock_p0, 0 ));
127+ zmq_msg_close (&sub_msg);
128+ // First part will be read only and will return as 0, but will not be deserialized event
129+ EXPECT_EQ (0 , zmq_message_read (sock_p1, 0 , source, m));
130+ EXPECT_EQ (" " , source);
131+ EXPECT_EQ (0 , m.size ());
132+
133+ // Non-subscription based control character test
134+ zmq_msg_t ctrl_msg;
135+ zmq_msg_init_size (&ctrl_msg, 1 );
136+ *(char *)zmq_msg_data (&ctrl_msg) = 0x07 ;
137+ EXPECT_EQ (1 , zmq_msg_send (&ctrl_msg, sock_p0, 0 ));
138+ zmq_msg_close (&ctrl_msg);
139+ // First part will be read only and will return as 0, but will not be deserialized event
140+ EXPECT_EQ (0 , zmq_message_read (sock_p1, 0 , source, m));
141+ EXPECT_EQ (" " , source);
142+ EXPECT_EQ (0 , m.size ());
103143
104-
105-
144+ zmq_close (sock_p0);
145+ zmq_close (sock_p1);
146+ zmq_ctx_term (zmq_ctx);
147+ }
0 commit comments