Initial merge-commit of the OIC code. Should successfully do discovery for single...
[platform/upstream/iotivity.git] / csdk / ocsocket / test / android / ocsocket_gtest.cpp
1 //******************************************************************
2 //
3 // copyright 2014 intel corporation all rights reserved.
4 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5
6
7 #include <gtest/gtest.h>
8 #include <ocsocket.h>
9 #include <logger.h>
10
11 #define MOD_NAME ("ocsocket_test")
12 #define TEST_PORT_NUM (8888)
13
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
19 };
20 unsigned int buf1_len = sizeof(buf1);
21
22
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,
64 };
65
66 unsigned int buf2_len = sizeof(buf2);
67
68
69 TEST(BuildIPv4, Positive) {
70     OCDevAddr ipaddr;
71     EXPECT_EQ(ERR_SUCCESS, OCBuildIPv4Address(224,0,0,251,5353, &ipaddr));
72 }
73
74
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));
78 }
79
80
81 TEST(DevAddrToIPv4Addr, Positive) {
82     OCDevAddr ipaddr;
83     uint8_t  a,b,c,d;
84     uint16_t port;
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);
90 }
91
92
93 TEST(DevAddrToIPv4Addr, InvalidInput) {
94     OCDevAddr ipaddr;
95     uint8_t  a,b,c,d;
96     uint16_t port;
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 ));
101
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 ));
105 }
106
107
108 TEST(GetInterfaceAddress, Positive) {
109     uint8_t addr[20];
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)));
115 }
116
117 TEST(GetInterfaceAddress, Negative) {
118     uint8_t addr[20];
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)));
125 }
126
127 TEST(InitUDP, Positive) {
128     OCDevAddr ipaddr;
129     int32_t  sockfd;
130     uint8_t addr[20];
131     uint8_t ifname[] = "wlan0";
132     uint8_t a,b,c,d;
133
134     OCBuildIPv4Address(0,0,0,0, 0, &ipaddr);
135     EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
136     OCClose(sockfd);
137
138     OCBuildIPv4Address(0,0,0,0, 5678, &ipaddr);
139     EXPECT_EQ(ERR_SUCCESS, OCInitUDP(&ipaddr, &sockfd));
140     OCClose(sockfd);
141
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));
146     OCClose(sockfd);
147 }
148
149
150 TEST(InitUDP, Negative) {
151     OCDevAddr ipaddr;
152     int32_t  sockfd;
153
154     OCBuildIPv4Address(0,0,0,0, 0, &ipaddr);
155     EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDP(NULL, &sockfd));
156
157     EXPECT_EQ(ERR_INVALID_INPUT, OCInitUDP(&ipaddr, NULL));
158 }
159
160
161
162 TEST(InitUDPMulticast, Positive) {
163     OCDevAddr ipaddr1;
164     int32_t sfd;
165
166     OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr1); //address to which MEMBERSHIP needs to be added
167     EXPECT_EQ(ERR_SUCCESS, OCInitUDPMulticast(&ipaddr1, &sfd));
168     OCClose(sfd);
169 }
170
171
172 TEST(InitUDPMulticast, Negative) {
173     OCDevAddr ipaddr1;
174     int32_t sfd;
175
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));
179 }
180
181
182 TEST(SendToRecvfromUnicast, Positive) {
183     OCDevAddr ipaddr1, ipaddr2, ipaddr3;
184     int32_t  ssfd, rsfd;
185     uint8_t addr[20];
186     uint8_t ifname[] = "wlan0";
187     uint8_t a,b,c,d;
188     //uint8_t tmp1[512];
189
190
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);
193
194     //Create sending socket
195     OCBuildIPv4Address(a, b, c, d, 0, &ipaddr1);
196     OCInitUDP(&ipaddr1, &ssfd);
197
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);
201
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));
205     //Receive the packet
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));
210
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));
214     //Receive the packet
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));
219
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));
223     //Receive the packet
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));
228
229     OCClose(ssfd);
230     OCClose(rsfd);
231 }
232
233
234
235 TEST(SendToRecvfromMulticast, Positive) {
236     OCDevAddr ipaddr1, ipaddr2, ipaddr3, ipaddr4;
237     int32_t  ssfd;
238     uint8_t tmp1[512];
239
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);
244
245     //build the multicast address to which we need to send the datagram
246     OCBuildIPv4Address(224, 0, 0, 251, 5353, &ipaddr3);
247
248     //Test 1 -- Send 40 bytes
249     EXPECT_EQ(buf1_len, OCSendTo(ssfd, buf1, buf1_len, 0, &ipaddr3));
250     //Receive the packet
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));
255
256     //Test 2 -- Send 1 byte
257     EXPECT_EQ( 1, OCSendTo(ssfd, buf1, 1, 0, &ipaddr3));
258     //Receive the packet
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));
263
264     //Test 3 -- Send 320 byte
265     EXPECT_EQ(buf2_len, OCSendTo(ssfd, buf2, buf2_len, 0, &ipaddr3));
266     //Receive the packet
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));
271
272     OCClose(ssfd);
273 }
274