1 //******************************************************************
3 // copyright 2014 intel corporation all rights reserved.
4 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 #include <gtest/gtest.h>
11 #define MOD_NAME ("ocsocket_test")
12 #define TEST_PORT_NUM (8888)
14 unsigned char buf1[] = {
15 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
16 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f, 0x6f, 0x67,
17 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74, 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05,
18 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01
20 unsigned int buf1_len = sizeof(buf1);
23 unsigned char buf2[] = {
24 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
25 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
26 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
27 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
28 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
29 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
30 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
31 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
32 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
33 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
34 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
35 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
36 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
37 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
38 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
39 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
40 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
41 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
42 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
43 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
45 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
46 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
47 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
48 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
49 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
50 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
51 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
52 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
53 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
54 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
55 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
56 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
57 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
58 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
60 0x00, 0x00, 0x00, 0x00, 0x0b, 0x5f, 0x67, 0x6f,
61 0x6f, 0x67, 0x6c, 0x65, 0x63, 0x61, 0x73, 0x74,
62 0x04, 0x5f, 0x74, 0x63, 0x70, 0x05, 0x6c, 0x6f,
63 0x63, 0x61, 0x6c, 0x00, 0x00, 0x0c, 0x00, 0x01,
66 unsigned int buf2_len = sizeof(buf2);
69 TEST(BuildIPv4, Positive) {
71 EXPECT_EQ(ERR_SUCCESS, OCBuildIPv4Address(224,0,0,251,5353, &ipaddr));
75 TEST(BuildIPv4, InvalidInput) {
76 EXPECT_EQ(ERR_INVALID_INPUT, OCBuildIPv4Address(24,24,24,24,2424, NULL));
77 EXPECT_EQ(ERR_INVALID_INPUT, OCBuildIPv4Address(-24,24,-24,24,2424, NULL));
81 TEST(DevAddrToIPv4Addr, Positive) {
85 OCBuildIPv4Address(1,2,3,4,5353, &ipaddr);
86 EXPECT_EQ(ERR_SUCCESS, OCDevAddrToIPv4Addr(&ipaddr, &a, &b, &c, &d ));
87 EXPECT_TRUE((a == 1) && (b == 2) && (c == 3) && (d ==4));
88 EXPECT_EQ(ERR_SUCCESS, OCDevAddrToPort(&ipaddr, &port ));
89 EXPECT_TRUE(port == 5353);
93 TEST(DevAddrToIPv4Addr, InvalidInput) {
97 OCBuildIPv4Address(1,2,3,4,5353, &ipaddr);
98 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToIPv4Addr(NULL, &a, &b, &c, &d ));
99 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToIPv4Addr(&ipaddr, NULL, &b, &c, &d ));
100 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToIPv4Addr(NULL, NULL, &b, &c, &d ));
102 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToPort(NULL, &port ));
103 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToPort(&ipaddr, NULL ));
104 EXPECT_EQ(ERR_INVALID_INPUT, OCDevAddrToPort(NULL, NULL ));
108 TEST(GetInterfaceAddress, Positive) {
110 uint8_t ifname[] = "wlan0";
111 EXPECT_EQ(ERR_SUCCESS, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr)));
112 OC_LOG_V(INFO, MOD_NAME, "IPv4 Address: %s\n", addr);
113 //On Android, it is MUST to provide interface name
114 //EXPECT_EQ(0, get_ipv4addr( NULL, 0, addr, sizeof(addr)));
117 TEST(GetInterfaceAddress, Negative) {
119 uint8_t ifname[] = "ethxx";
120 EXPECT_EQ(ERR_INVALID_INPUT, OCGetInterfaceAddress( NULL, 0, AF_INET, addr, sizeof(addr)));
121 EXPECT_EQ(ERR_UNKNOWN, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr)));
122 EXPECT_EQ(ERR_INVALID_INPUT, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, NULL, sizeof(addr)));
123 EXPECT_EQ(ERR_UNKNOWN, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, 0));
124 EXPECT_EQ(ERR_INVALID_INPUT, OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET6, addr, sizeof(addr)));
127 TEST(InitUDP, Positive) {
131 uint8_t ifname[] = "wlan0";
134 OCBuildIPv4Address(0,0,0,0, 0, &ipaddr);
135 EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
138 OCBuildIPv4Address(0,0,0,0, 5678, &ipaddr);
139 EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
142 OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
143 sscanf((const char*)addr, "%d.%d.%d.%d", (int*)&a, (int*)&b, (int*)&c, (int*)&d);
144 OCBuildIPv4Address(a,b,c,d, TEST_PORT_NUM, &ipaddr);
145 EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
150 TEST(InitUDP, Negative) {
154 OCBuildIPv4Address(0,0,0,0, 0, &ipaddr);
155 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDP(NULL, &sockfd));
157 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDP(&ipaddr, NULL));
162 TEST(InitUDPMulticast, Positive) {
166 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr1); //address to which MEMBERSHIP needs to be added
167 EXPECT_EQ(ERR_SUCCESS, OCInitUDPMulticast(&ipaddr1, &sfd));
172 TEST(InitUDPMulticast, Negative) {
176 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr1); //address to which MEMBERSHIP needs to be added
177 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDPMulticast(NULL, &sfd));
178 EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDPMulticast(&ipaddr1, NULL));
182 TEST(SendToRecvfromUnicast, Positive) {
183 OCDevAddr ipaddr1, ipaddr2, ipaddr3;
186 uint8_t ifname[] = "wlan0";
191 OCGetInterfaceAddress( ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
192 sscanf((const char*)addr, "%d.%d.%d.%d", (int*)&a, (int*)&b, (int*)&c, (int*)&d);
194 //Create sending socket
195 OCBuildIPv4Address(a, b, c, d, 0, &ipaddr1);
196 OCInitUDP(&ipaddr1, &ssfd);
198 //Create receiving socket...i.e. bind to the specific port
199 OCBuildIPv4Address(a,b,c, d+1, TEST_PORT_NUM, &ipaddr2);
200 OCInitUDP(&ipaddr2, &rsfd);
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));
235 TEST(SendToRecvfromMulticast, Positive) {
236 OCDevAddr ipaddr1, ipaddr2, ipaddr3, ipaddr4;
240 //Create sending socket
241 OCBuildIPv4Address(0,0,0,0, 5353, &ipaddr1);
242 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr2); //address to which MEMBERSHIP needs to be added
243 OCInitUDPMulticast(&ipaddr2, &ssfd);
245 //build the multicast address to which we need to send the datagram
246 OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr3);
248 //Test 1 -- Send 40 bytes
249 EXPECT_EQ(buf1_len, OCSendTo(ssfd, buf1, buf1_len, 0, &ipaddr3));
251 ipaddr4.size = sizeof(ipaddr4.addr);
252 EXPECT_EQ(buf1_len, OCRecvFrom(ssfd, tmp1, sizeof(tmp1), 0, &ipaddr4));
253 //Compare the received buffer with send buffer
254 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf1, buf1_len));
256 //Test 2 -- Send 1 byte
257 EXPECT_EQ( 1, OCSendTo(ssfd, buf1, 1, 0, &ipaddr3));
259 ipaddr4.size = sizeof(ipaddr4.addr);
260 EXPECT_EQ( 1, OCRecvFrom(ssfd, tmp1, sizeof(tmp1), 0, &ipaddr4));
261 //Compare the received buffer with send buffer
262 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf1, 1));
264 //Test 3 -- Send 320 byte
265 EXPECT_EQ(buf2_len, OCSendTo(ssfd, buf2, buf2_len, 0, &ipaddr3));
267 ipaddr4.size = sizeof(ipaddr4.addr);
268 EXPECT_EQ(buf2_len, OCRecvFrom(ssfd, tmp1, sizeof(tmp1), 0, &ipaddr3));
269 //Compare the received buffer with send buffer
270 EXPECT_EQ(ERR_SUCCESS, memcmp(tmp1, buf2, buf2_len));