1 //******************************************************************
3 // copyright 2014 intel corporation all rights reserved.
4 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 #include <gtest/gtest.h>
11 #define MOD_NAME ("ocsocket_test")
13 #define TEST_PORT_NUM (8888)
15 unsigned char buf1[] = {
16 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
17 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f, 0x6f, 0x67,
18 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74, 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05,
19 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01
21 unsigned int buf1_len = sizeof(buf1);
24 unsigned char buf2[] = {
25 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
26 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
27 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
28 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
29 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
30 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
31 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
32 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
33 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
34 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
35 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
36 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
37 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
38 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
39 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
40 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
41 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
42 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
43 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
44 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
45 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
46 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
47 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
48 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
49 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
50 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
51 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
52 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
53 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
54 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
55 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
56 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
57 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
58 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
59 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
60 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
61 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
62 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
63 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
64 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
66 unsigned int buf2_len = sizeof(buf2);
68 TEST(BuildIPv4, Positive) {
70 EXPECT_EQ(ERR_SUCCESS, OCBuildIPv4Address(224,0,0,251,5353, &ipaddr));
74 TEST(BuildIPv4, InvalidInput) {
75 EXPECT_EQ(ERR_INVALID_INPUT, OCBuildIPv4Address(24,24,24,24,2424, NULL));
76 EXPECT_EQ(ERR_INVALID_INPUT, OCBuildIPv4Address(-24,24,-24,24,2424, NULL));
79 TEST(DevAddrToIPv4Addr, Positive) {
83 OCBuildIPv4Address(1,2,3,4,5353, &ipaddr);
84 EXPECT_EQ(ERR_SUCCESS, OCDevAddrToIPv4Addr(&ipaddr, &a, &b, &c, &d ));
85 EXPECT_TRUE((a == 1) && (b == 2) && (c == 3) && (d ==4));
86 EXPECT_EQ(ERR_SUCCESS, OCDevAddrToPort(&ipaddr, &port ));
87 EXPECT_TRUE(port == 5353);
91 TEST(DevAddrToIPv4Addr, InvalidInput) {
95 OCBuildIPv4Address(1,2,3,4,5353, &ipaddr);
96 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToIPv4Addr(NULL, &a, &b, &c, &d ));
97 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToIPv4Addr(&ipaddr, NULL, &b, &c, &d ));
98 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToIPv4Addr(NULL, NULL, &b, &c, &d ));
100 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToPort(NULL, &port ));
101 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToPort(&ipaddr, NULL ));
102 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToPort(NULL, NULL ));
108 TEST(GetInterfaceAddress, Positive) {
110 uint8_t ifname[] = "eth0";
111 EXPECT_EQ(ERR_SUCCESS, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr)));
112 printf("IPv4 Address: %s\n", addr);
113 EXPECT_EQ(ERR_SUCCESS, OCGetInterfaceAddress( NULL, 0, AF_INET, addr, sizeof(addr)));
114 printf("IPv4 Address: %s\n", addr);
117 TEST(GetInterfaceAddress, Negative) {
119 uint8_t ifname[] = "ethxx";
120 EXPECT_EQ(ERR_UNKNOWN, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr)));
121 EXPECT_EQ(ERR_INVALID_INPUT, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, NULL, sizeof(addr)));
122 EXPECT_EQ(ERR_UNKNOWN, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, 0));
123 EXPECT_EQ(ERR_INVALID_INPUT, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET6, addr, sizeof(addr)));
126 TEST(InitUDP, Positive) {
130 uint8_t ifname[] = "eth0";
133 OCBuildIPv4Address(0,0,0,0, 0, &ipaddr);
134 EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
137 OCBuildIPv4Address(0,0,0,0, 5678, &ipaddr);
138 EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
141 OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
142 sscanf((const char*)addr, "%d.%d.%d.%d", (int*)&a, (int*)&b, (int*)&c, (int*)&d);
143 OCBuildIPv4Address(a,b,c,d, TEST_PORT_NUM, &ipaddr);
144 EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
149 TEST(InitUDP, Negative) {
153 OCBuildIPv4Address(0,0,0,0, 0, &ipaddr);
154 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDP(NULL, &sockfd));
156 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDP(&ipaddr, NULL));
161 TEST(InitUDPMulticast, Positive) {
165 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr1); //address to which MEMBERSHIP needs to be added
166 EXPECT_EQ(ERR_SUCCESS, OCInitUDPMulticast(&ipaddr1, &sfd));
171 TEST(InitUDPMulticast, Negative) {
175 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr1); //address to which MEMBERSHIP needs to be added
176 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDPMulticast(NULL, &sfd));
177 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDPMulticast(&ipaddr1, NULL));
181 TEST(SendToRecvfromUnicast, Positive) {
182 OCDevAddr ipaddr1, ipaddr2, ipaddr3;
185 uint8_t ifname[] = "eth0";
189 //Create sending socket
190 OCBuildIPv4Address(0,0,0,0, 0, &ipaddr1);
191 OCInitUDP(&ipaddr1, &ssfd);
193 //Create receiving socket...i.e. bind to the specific port
194 OCBuildIPv4Address(0,0,0,0, TEST_PORT_NUM, &ipaddr2);
195 OCInitUDP(&ipaddr2, &rsfd);
197 //Since this is a Unit test, we will attempt to send message to ourself at a specific port
198 OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
199 sscanf((const char*)addr, "%d.%d.%d.%d", (int*)&a, (int*)&b, (int*)&c, (int*)&d);
200 OCBuildIPv4Address(a,b,c,d, TEST_PORT_NUM, &ipaddr2);
202 //Test 1 -- Send 40 bytes
203 //Send the packet to ipaddr2(myself:TEST_PORT_NUM)
204 EXPECT_EQ(buf1_len, OCSendTo(ssfd, buf1, buf1_len, 0, &ipaddr2));
206 ipaddr3.size = sizeof(ipaddr3.addr);
207 EXPECT_EQ(buf1_len, OCRecvFrom(rsfd, tmp1, sizeof(tmp1), 0, &ipaddr3));
208 //Compare the received buffer with send buffer
209 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf1, buf1_len));
211 //Test 2 -- Send 1 byte
212 //Send the packet to ipaddr2(myself:TEST_PORT_NUM)
213 EXPECT_EQ( 1, OCSendTo(ssfd, buf1, 1, 0, &ipaddr2));
215 ipaddr3.size = sizeof(ipaddr3.addr);
216 EXPECT_EQ( 1, OCRecvFrom(rsfd, tmp1, sizeof(tmp1), 0, &ipaddr3));
217 //Compare the received buffer with send buffer
218 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf1, 1));
220 //Test 3 -- Send 320 byte
221 //Send the packet to ipaddr2(myself:TEST_PORT_NUM)
222 EXPECT_EQ(buf2_len, OCSendTo(ssfd, buf2, buf2_len, 0, &ipaddr2));
224 ipaddr3.size = sizeof(ipaddr3.addr);
225 EXPECT_EQ(buf2_len, OCRecvFrom(rsfd, tmp1, sizeof(tmp1), 0, &ipaddr3));
226 //Compare the received buffer with send buffer
227 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf2, buf2_len));
234 TEST(SendToRecvfromMulticast, Positive) {
235 OCDevAddr ipaddr1, ipaddr2, ipaddr3, ipaddr4;
239 //Create sending socket
240 OCBuildIPv4Address(0,0,0,0, 5353, &ipaddr1);
241 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr2); //address to which MEMBERSHIP needs to be added
242 OCInitUDPMulticast(&ipaddr2, &ssfd);
244 //build the multicast address to which we need to send the datagram
245 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr3);
247 //Test 1 -- Send 40 bytes
248 EXPECT_EQ(buf1_len, OCSendTo(ssfd, buf1, buf1_len, 0, &ipaddr3));
250 ipaddr4.size = sizeof(ipaddr4.addr);
251 EXPECT_EQ(buf1_len, OCRecvFrom(ssfd, tmp1, sizeof(tmp1), 0, &ipaddr4));
252 //Compare the received buffer with send buffer
253 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf1, buf1_len));
255 //Test 2 -- Send 1 byte
256 EXPECT_EQ( 1, OCSendTo(ssfd, buf1, 1, 0, &ipaddr3));
258 ipaddr4.size = sizeof(ipaddr4.addr);
259 EXPECT_EQ( 1, OCRecvFrom(ssfd, tmp1, sizeof(tmp1), 0, &ipaddr4));
260 //Compare the received buffer with send buffer
261 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf1, 1));
263 //Test 3 -- Send 320 byte
264 EXPECT_EQ(buf2_len, OCSendTo(ssfd, buf2, buf2_len, 0, &ipaddr3));
266 ipaddr4.size = sizeof(ipaddr4.addr);
267 EXPECT_EQ(buf2_len, OCRecvFrom(ssfd, tmp1, sizeof(tmp1), 0, &ipaddr3));
268 //Compare the received buffer with send buffer
269 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf2, buf2_len));