1 /* ****************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
21 #include "platform_features.h"
22 #include "gtest/gtest.h"
23 #include "cainterface.h"
24 #include "cautilinterface.h"
26 #include "oic_string.h"
27 #include "oic_malloc.h"
28 #include "cafragmentation.h"
29 #include "caleinterface.h"
31 #define CA_TRANSPORT_ADAPTER_SCOPE 1000
32 #define CA_BLE_FIRST_SEGMENT_PAYLOAD_SIZE (((CA_DEFAULT_BLE_MTU_SIZE) - (CA_BLE_HEADER_SIZE)) \
33 - (CA_BLE_LENGTH_HEADER_SIZE))
36 class CATests : public testing::Test {
40 CAInitialize(CA_DEFAULT_ADAPTER);
43 virtual void TearDown()
49 void request_handler(CAEndpoint_t* object, CARequestInfo_t* requestInfo);
50 void response_handler(CAEndpoint_t* object, CAResponseInfo_t* responseInfo);
51 void error_handler(const CAEndpoint_t *object, const CAErrorInfo_t* errorInfo);
52 void adapter_handler(CATransportAdapter_t adapter, bool enabled);
53 void connection_handler(CATransportAdapter_t adapter, const char *remote_address, bool connected);
54 CAResult_t checkSelectNetwork();
56 void request_handler(const CAEndpoint_t * /*object*/,
57 const CARequestInfo_t * /*requestInfo*/)
62 void response_handler(const CAEndpoint_t * /*object*/,
63 const CAResponseInfo_t * /*responseInfo*/)
68 void error_handler(const CAEndpoint_t *object, const CAErrorInfo_t* errorInfo)
70 if(!object || !errorInfo)
75 //error handling shall be added
79 void adapter_handler(CATransportAdapter_t /*adapter*/,
84 void connection_handler(const CAEndpoint_t * /*endpoint*/,
89 static char* addr = NULL;
90 static CAEndpoint_t* tempRep = NULL;
91 static CARequestInfo_t requestInfo;
92 static CAInfo_t requestData;
93 static CAInfo_t responseData;
94 static CAResponseInfo_t responseInfo;
95 static CAToken_t tempToken = NULL;
96 static uint8_t tokenLength = CA_MAX_TOKEN_LEN;
97 static const char ADDRESS[] = "10.11.12.13";
98 static const uint16_t PORT = 4545;
100 static const char NORMAL_INFO_DATA[] =
101 "{\"oc\":[{\"href\":\"%s\",\"prop\":{\"rt\":[\"core.led\"],"
102 "\"if\":[\"oc.mi.def\"],\"obs\":1}}]}";
106 // Iotivity Device Identity.
107 const unsigned char IDENTITY[] = ("1111111111111111");
109 // PSK between this device and peer device.
110 const unsigned char RS_CLIENT_PSK[] = ("AAAAAAAAAAAAAAAA");
112 // Internal API. Invoked by CA stack to retrieve credentials from this module
113 int32_t CAGetDtlsPskCredentials( CADtlsPskCredType_t type,
114 const unsigned char *desc, size_t desc_len,
115 unsigned char *result, size_t result_length)
117 printf("CAGetDtlsPskCredentials IN\n");
128 case CA_DTLS_PSK_HINT:
129 case CA_DTLS_PSK_IDENTITY:
131 if (result_length < sizeof(IDENTITY))
133 printf("ERROR : Wrong value for result for storing IDENTITY");
137 memcpy(result, IDENTITY, sizeof(IDENTITY));
138 ret = sizeof(IDENTITY);
141 case CA_DTLS_PSK_KEY:
143 if ((desc_len == sizeof(IDENTITY)) &&
144 memcmp(desc, IDENTITY, sizeof(IDENTITY)) == 0)
146 if (result_length < sizeof(RS_CLIENT_PSK))
148 printf("ERROR : Wrong value for result for storing RS_CLIENT_PSK");
152 memcpy(result, RS_CLIENT_PSK, sizeof(RS_CLIENT_PSK));
153 ret = sizeof(RS_CLIENT_PSK);
159 printf("Wrong value passed for PSK_CRED_TYPE.");
164 printf("CAGetDtlsPskCredentials OUT\n");
167 #endif //__WITH_DTLS__
170 TEST(InitializeTest, CAInitializeTest)
172 EXPECT_EQ(CA_STATUS_OK, CAInitialize(CA_DEFAULT_ADAPTER));
177 TEST_F(CATests, TerminateTest)
181 char* check = (char *) "terminate success";
182 EXPECT_STREQ(check, "terminate success");
184 CAInitialize(CA_DEFAULT_ADAPTER);
187 // CAStartListeningServer TC
188 TEST_F(CATests, StartListeningServerTestWithNonSelect)
190 EXPECT_EQ(CA_STATUS_FAILED, CAStartListeningServer());
193 // CAStartListeningServer TC
194 TEST_F(CATests, StartListeningServerTest)
196 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_IP));
197 EXPECT_EQ(CA_STATUS_OK, CAStartListeningServer());
200 // CAStopListeningServer TC
201 TEST_F(CATests, CAStopListeningServerTestWithNonSelect)
203 EXPECT_EQ(CA_STATUS_FAILED, CAStopListeningServer());
206 // CAStopListeningServer TC
207 TEST_F(CATests, CAStopListeningServerTest)
209 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_IP));
210 EXPECT_EQ(CA_STATUS_OK, CAStopListeningServer());
213 // CARegisterHandlerTest TC
214 TEST_F(CATests, RegisterHandlerTest)
216 CARegisterHandler(request_handler, response_handler, error_handler);
217 char* check = (char *) "registerHandler success";
218 EXPECT_STREQ(check, "registerHandler success");
221 // CACreateRemoteEndpoint TC
222 TEST_F(CATests, CreateRemoteEndpointTestGood)
224 addr = (char *) ADDRESS;
226 EXPECT_EQ(CA_STATUS_OK, CACreateEndpoint(CA_DEFAULT_FLAGS, CA_ADAPTER_IP, addr,
229 CADestroyEndpoint(tempRep);
233 // check remoteEndpoint and values of remoteEndpoint
234 TEST_F(CATests, CreateRemoteEndpointTestValues)
236 addr = (char *) ADDRESS;
238 CACreateEndpoint(CA_DEFAULT_FLAGS, CA_ADAPTER_IP, addr, PORT, &tempRep);
240 EXPECT_TRUE(tempRep != NULL);
242 CADestroyEndpoint(tempRep);
247 TEST_F(CATests, GenerateTokenTestGood)
249 EXPECT_EQ(CA_STATUS_OK, CAGenerateToken(&tempToken, tokenLength));
251 CADestroyToken(tempToken);
254 // check return value when CAGenerateToken is passed a NULL instead a valid pointer
255 TEST_F(CATests, GenerateTokenTestBad)
257 EXPECT_EQ(CA_STATUS_INVALID_PARAM, CAGenerateToken(NULL, tokenLength));
261 // check destroyed token
262 TEST_F(CATests, DestroyTokenTest)
264 CAGenerateToken(&tempToken, tokenLength);
265 CADestroyToken(tempToken);
267 char * check = (char *) "destroy success";
268 EXPECT_STREQ(check, "destroy success");
271 TEST_F(CATests, SendRequestTestWithInvalidAddress)
273 CARegisterHandler(request_handler, response_handler, error_handler);
275 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_IP));
276 CACreateEndpoint(CA_DEFAULT_FLAGS, CA_ADAPTER_IP, "10.11.13.13.14", PORT, &tempRep);
278 memset(&requestData, 0, sizeof(CAInfo_t));
279 CAGenerateToken(&tempToken, tokenLength);
280 requestData.token = tempToken;
281 requestData.tokenLength = tokenLength;
282 requestData.type = CA_MSG_CONFIRM;
284 memset(&requestInfo, 0, sizeof(CARequestInfo_t));
285 requestInfo.method = CA_GET;
286 requestInfo.info = requestData;
288 EXPECT_EQ(CA_STATUS_OK, CASendRequest(tempRep, &requestInfo));
290 CADestroyToken(tempToken);
291 CADestroyEndpoint(tempRep);
292 free(requestData.payload);
297 // check return value when a NULL is passed instead of a valid CARequestInfo_t address
298 TEST_F(CATests, SendRequestTestWithNullAddr)
300 addr = (char *) ADDRESS;
301 CACreateEndpoint(CA_DEFAULT_FLAGS, CA_ADAPTER_IP, addr, PORT, &tempRep);
303 EXPECT_EQ(CA_STATUS_INVALID_PARAM, CASendRequest(tempRep, NULL));
305 CADestroyEndpoint(tempRep);
310 TEST_F(CATests, SendResponseTestWithInvalidCode)
312 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_IP));
314 addr = (char *) ADDRESS;
315 CACreateEndpoint(CA_DEFAULT_FLAGS, CA_ADAPTER_IP, addr, PORT, &tempRep);
317 memset(&responseData, 0, sizeof(CAInfo_t));
318 responseData.type = CA_MSG_RESET;
319 responseData.messageId = 1;
320 responseData.payload = (CAPayload_t)OICMalloc(sizeof("response payload"));
321 responseData.dataType = CA_RESPONSE_DATA;
323 EXPECT_TRUE(responseData.payload != NULL);
325 if (responseData.payload)
327 CAGenerateToken(&tempToken, tokenLength);
328 requestData.token = tempToken;
329 requestData.tokenLength = tokenLength;
331 memset(&responseInfo, 0, sizeof(CAResponseInfo_t));
332 responseInfo.result = CA_CONTENT;
333 responseInfo.info = responseData;
335 EXPECT_EQ(CA_STATUS_OK, CASendResponse(tempRep, &responseInfo));
337 CADestroyToken(tempToken);
338 CADestroyEndpoint(tempRep);
339 OICFree(responseData.payload);
344 // check return value NULL is passed instead of a valid CAResponseInfo_t address
345 TEST_F(CATests, SendResponseTest)
347 addr = (char *) ADDRESS;
348 CACreateEndpoint(CA_DEFAULT_FLAGS, CA_ADAPTER_IP, addr, PORT, &tempRep);
350 EXPECT_EQ(CA_STATUS_INVALID_PARAM, CASendResponse(tempRep, NULL));
352 CADestroyEndpoint(tempRep);
356 // CASelectNewwork TC
357 TEST_F(CATests, SelectNetworkTestGood)
359 EXPECT_EQ(CA_STATUS_OK, checkSelectNetwork());
362 CAResult_t checkSelectNetwork()
364 CAResult_t res = CASelectNetwork(CA_ADAPTER_IP);
366 if (CA_STATUS_OK == res)
368 EXPECT_EQ(CA_STATUS_OK, CAUnSelectNetwork(CA_ADAPTER_IP));
371 if (CA_NOT_SUPPORTED == res)
373 EXPECT_EQ(CA_STATUS_FAILED, CAUnSelectNetwork(CA_ADAPTER_IP));
380 // check return value when selected network is disable
381 TEST_F(CATests, SelectNetworkTestBad)
383 //Select disable network
384 EXPECT_EQ(CA_NOT_SUPPORTED, CASelectNetwork((CATransportAdapter_t)
385 CA_TRANSPORT_ADAPTER_SCOPE));
388 // check return value when selected network is disable
389 TEST_F(CATests, UnSelectNetworkTest)
391 //UnSelect disable network
392 EXPECT_EQ(CA_STATUS_FAILED, CAUnSelectNetwork((CATransportAdapter_t)
393 CA_TRANSPORT_ADAPTER_SCOPE));
396 // CAHandlerRequestResponse TC
397 TEST_F(CATests, HandlerRequestResponseTest)
399 EXPECT_EQ(CA_STATUS_OK, CAHandleRequestResponse());
402 // CAGetNetworkInformation TC
403 TEST_F (CATests, GetNetworkInformationTest)
406 CAEndpoint_t *tempInfo = NULL;
408 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_IP));
409 EXPECT_EQ(CA_STATUS_OK, CAGetNetworkInformation(&tempInfo, &tempSize));
411 // @todo: if this api is supported on windows platform, it should be changed.
413 for (size_t index = 0; index < tempSize; index++)
415 EXPECT_TRUE(tempInfo[index].adapter != 0);
416 EXPECT_TRUE(strlen(tempInfo[index].addr) != 0);
423 TEST_F(CATests, GetSelectecNetwork)
425 CATransportAdapter_t SelectedNetwork = CA_DEFAULT_ADAPTER;
428 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork | CA_ADAPTER_IP) ;
429 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_IP));
430 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
433 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork | CA_ADAPTER_GATT_BTLE);
434 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_GATT_BTLE));
435 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
438 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork | CA_ADAPTER_RFCOMM_BTEDR);
439 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_RFCOMM_BTEDR));
440 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
443 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork | CA_ADAPTER_TCP);
444 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_TCP));
445 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
448 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork | CA_ADAPTER_NFC);
449 EXPECT_EQ(CA_STATUS_OK, CASelectNetwork(CA_ADAPTER_NFC));
450 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
454 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork & ~CA_ADAPTER_IP) ;
455 EXPECT_EQ(CA_STATUS_OK, CAUnSelectNetwork(CA_ADAPTER_IP));
456 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
459 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork & ~CA_ADAPTER_GATT_BTLE);
460 EXPECT_EQ(CA_STATUS_OK, CAUnSelectNetwork(CA_ADAPTER_GATT_BTLE));
461 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
464 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork & ~CA_ADAPTER_RFCOMM_BTEDR);
465 EXPECT_EQ(CA_STATUS_OK, CAUnSelectNetwork(CA_ADAPTER_RFCOMM_BTEDR));
466 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
469 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork & ~CA_ADAPTER_TCP);
470 EXPECT_EQ(CA_STATUS_OK, CAUnSelectNetwork(CA_ADAPTER_TCP));
471 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
474 SelectedNetwork = (CATransportAdapter_t)(SelectedNetwork & ~CA_ADAPTER_NFC);
475 EXPECT_EQ(CA_STATUS_OK, CAUnSelectNetwork(CA_ADAPTER_NFC));
476 EXPECT_EQ(SelectedNetwork, CAGetSelectedNetwork());
480 TEST_F(CATests, RegisterDTLSCredentialsHandlerTest)
483 EXPECT_EQ(CA_STATUS_OK, CAregisterPskCredentialsHandler(CAGetDtlsPskCredentials));
487 // CARegisterNetworkMonitorHandler TC
488 TEST_F(CATests, RegisterNetworkMonitorHandler)
490 EXPECT_EQ(CA_STATUS_OK, CARegisterNetworkMonitorHandler(adapter_handler,
491 connection_handler));
494 // CASetAutoConnectionDeviceInfo TC
495 TEST_F(CATests, SetAutoConnectionDeviceInfo)
497 addr = (char *) ADDRESS;
499 #if defined(__ANDROID__) && defined(LE_ADAPTER)
500 EXPECT_EQ(CA_STATUS_OK, CASetAutoConnectionDeviceInfo(addr));
502 EXPECT_EQ(CA_NOT_SUPPORTED, CASetAutoConnectionDeviceInfo(addr));
506 // CAUnsetAutoConnectionDeviceInfo TC
507 TEST_F(CATests, UnsetAutoConnectionDeviceInfo)
509 addr = (char *) ADDRESS;
511 #if defined(__ANDROID__) && defined(LE_ADAPTER)
512 EXPECT_EQ(CA_STATUS_OK, CAUnsetAutoConnectionDeviceInfo(addr));
514 EXPECT_EQ(CA_NOT_SUPPORTED, CAUnsetAutoConnectionDeviceInfo(addr));
518 TEST(CASetPortNumberTest, CASetPortNumberToAssign)
520 EXPECT_EQ(CA_STATUS_OK, CASetPortNumberToAssign(CA_ADAPTER_IP, CA_IPV4, 5683));
521 EXPECT_EQ(CA_STATUS_OK, CASetPortNumberToAssign(CA_ADAPTER_IP, CA_IPV6, 5683));
522 EXPECT_EQ(CA_STATUS_OK,
523 CASetPortNumberToAssign(CA_ADAPTER_IP,
524 static_cast<CATransportFlags_t>(CA_IPV4|CA_SECURE), 5683));
525 EXPECT_EQ(CA_STATUS_OK,
526 CASetPortNumberToAssign(CA_ADAPTER_IP,
527 static_cast<CATransportFlags_t>(CA_IPV6|CA_SECURE), 5683));
530 EXPECT_EQ(CA_STATUS_OK, CASetPortNumberToAssign(CA_ADAPTER_TCP, CA_IPV4, 5683));
531 EXPECT_EQ(CA_STATUS_OK, CASetPortNumberToAssign(CA_ADAPTER_TCP, CA_IPV6, 5683));
535 TEST(CAGetPortNumberTest, CAGetPortNumberToAssign)
537 ASSERT_EQ(static_cast<uint16_t>(0),
538 CAGetAssignedPortNumber(CA_ADAPTER_IP, CA_IPV4));
539 ASSERT_EQ(static_cast<uint16_t>(0),
540 CAGetAssignedPortNumber(CA_ADAPTER_IP, CA_IPV6));
541 ASSERT_EQ(static_cast<uint16_t>(0),
542 CAGetAssignedPortNumber(CA_ADAPTER_IP,
543 static_cast<CATransportFlags_t>(CA_IPV4|CA_SECURE)));
544 ASSERT_EQ(static_cast<uint16_t>(0),
545 CAGetAssignedPortNumber(CA_ADAPTER_IP,
546 static_cast<CATransportFlags_t>(CA_IPV6|CA_SECURE)));
548 ASSERT_EQ(static_cast<uint16_t>(0), CAGetAssignedPortNumber(CA_ADAPTER_TCP, CA_IPV4));
549 ASSERT_EQ(static_cast<uint16_t>(0), CAGetAssignedPortNumber(CA_ADAPTER_TCP, CA_IPV6));
553 TEST(CAfragmentationTest, FragmentTest)
555 #if defined(LE_ADAPTER)
556 const size_t dataLen = 30;
557 uint8_t *data = (uint8_t *) malloc(dataLen*sizeof(uint8_t));
558 memset(data, 'a', dataLen);
560 uint32_t midPacketCount = 0;
561 size_t remainingLen = 0;
562 size_t totalLength = 0;
564 EXPECT_EQ(CA_STATUS_OK, CAGenerateVariableForFragmentation(dataLen,
568 CA_DEFAULT_BLE_MTU_SIZE));
570 uint8_t dataHeader[CA_BLE_HEADER_SIZE] = {0};
571 const uint8_t tmpSourcePort = 1;
572 const uint8_t tmpDestPort = 1;
574 EXPECT_EQ(CA_STATUS_OK, CAGenerateHeader(dataHeader,
577 CA_BLE_PACKET_NON_SECURE,
579 EXPECT_TRUE(dataHeader != NULL);
581 uint8_t lengthHeader[CA_BLE_LENGTH_HEADER_SIZE] = {0};
583 EXPECT_EQ(CA_STATUS_OK, CAGenerateHeaderPayloadLength(lengthHeader,
584 CA_BLE_LENGTH_HEADER_SIZE,
586 EXPECT_TRUE(lengthHeader != NULL);
588 uint8_t dataSegment[CA_SUPPORTED_BLE_MTU_SIZE] = {0};
590 EXPECT_EQ(CA_STATUS_OK, CAMakeFirstDataSegment(dataSegment,
592 CA_BLE_FIRST_SEGMENT_PAYLOAD_SIZE,
595 EXPECT_TRUE(dataSegment != NULL);
597 EXPECT_EQ(CA_STATUS_OK, CAGenerateHeader(dataHeader,
598 CA_BLE_PACKET_NOT_START,
600 CA_BLE_PACKET_NON_SECURE,
602 EXPECT_TRUE(dataHeader != NULL);
604 EXPECT_EQ(CA_STATUS_OK, CAMakeRemainDataSegment(dataSegment,
610 CA_DEFAULT_BLE_MTU_SIZE));
611 EXPECT_TRUE(dataSegment != NULL);
617 TEST(CAfragmentationTest, DefragmentTest)
619 #if defined(LE_ADAPTER)
620 const size_t dataLen = 30;
621 uint8_t *data = (uint8_t *) malloc(dataLen*sizeof(uint8_t));
622 memset(data, 'a', dataLen);
624 uint32_t midPacketCount = 0;
625 size_t remainingLen = 0;
626 size_t totalLength = 0;
628 EXPECT_EQ(CA_STATUS_OK, CAGenerateVariableForFragmentation(dataLen,
632 CA_SUPPORTED_BLE_MTU_SIZE));
634 uint8_t dataHeader[CA_BLE_HEADER_SIZE] = {0};
635 const uint8_t tmpSourcePort = 1;
636 const uint8_t tmpDestPort = 1;
638 EXPECT_EQ(CA_STATUS_OK, CAGenerateHeader(dataHeader,
641 CA_BLE_PACKET_NON_SECURE,
643 EXPECT_TRUE(dataHeader != NULL);
645 uint8_t lengthHeader[CA_BLE_LENGTH_HEADER_SIZE] = {0};
647 EXPECT_EQ(CA_STATUS_OK, CAGenerateHeaderPayloadLength(lengthHeader,
648 CA_BLE_LENGTH_HEADER_SIZE,
650 EXPECT_TRUE(lengthHeader != NULL);
652 uint8_t dataSegment[CA_SUPPORTED_BLE_MTU_SIZE] = {0};
654 EXPECT_EQ(CA_STATUS_OK, CAMakeFirstDataSegment(dataSegment,
656 CA_BLE_FIRST_SEGMENT_PAYLOAD_SIZE,
659 EXPECT_TRUE(dataSegment != NULL);
661 CABLEPacketStart_t startFlag = CA_BLE_PACKET_NOT_START;
662 CABLEPacketSecure_t secureFlag = CA_BLE_PACKET_NON_SECURE;
663 uint16_t sourcePort = 0;
664 uint16_t destPort = 0;
666 EXPECT_EQ(CA_STATUS_OK, CAParseHeader(dataSegment,
672 uint32_t parseDataLength = 0;
674 EXPECT_EQ(CA_STATUS_OK, CAParseHeaderPayloadLength(dataSegment,
675 CA_BLE_LENGTH_HEADER_SIZE,
682 TEST(Ipv6ScopeLevel, getMulticastScope)
685 const char interfaceLocalStart[] = "ff01::";
686 const char linkLocalStart[] = "ff02::";
687 const char realmLocalStart[] = "ff03::";
688 const char adminLocalStart[] = "ff04::";
689 const char siteLocalStart[] = "ff05::";
690 const char orgLocalStart[] = "ff08::";
691 const char globalStart[] = "ff0e::";
693 const char interfaceLocalMid[] = "ff81:0000:0000:f000:0000:0000:0000:0000";
694 const char linkLocalMid[] = "ff82:0000:0000:f000:0000:0000:0000:0000";
695 const char realmLocalMid[] = "ff83:0000:0000:f000:0000:0000:0000:0000";
696 const char adminLocalMid[] = "ff84:0000:0000:f000:0000:0000:0000:0000";
697 const char siteLocalMid[] = "ff85:0000:0000:f000:0000:0000:0000:0000";
698 const char orgLocalMid[] = "ff88:0000:0000:f000:0000:0000:0000:0000";
699 const char globalMid[] = "ff8e:0000:0000:f000:0000:0000:0000:0000";
701 const char interfaceLocalEnd[] = "fff1:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
702 const char linkLocalEnd[] = "fff2:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
703 const char realmLocalEnd[] = "fff3:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
704 const char adminLocalEnd[] = "fff4:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
705 const char siteLocalEnd[] = "fff5:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
706 const char orgLocalEnd[] = "fff8:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
707 const char globalEnd[] = "fffe:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
710 CATransportFlags_t scopeLevel = CA_DEFAULT_FLAGS;
711 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(interfaceLocalStart, &scopeLevel));
712 EXPECT_EQ(CA_SCOPE_INTERFACE, scopeLevel);
713 scopeLevel = CA_DEFAULT_FLAGS;
715 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(linkLocalStart, &scopeLevel));
716 EXPECT_EQ(CA_SCOPE_LINK, scopeLevel);
717 scopeLevel = CA_DEFAULT_FLAGS;
719 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(realmLocalStart, &scopeLevel));
720 EXPECT_EQ(CA_SCOPE_REALM, scopeLevel);
721 scopeLevel = CA_DEFAULT_FLAGS;
723 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(adminLocalStart, &scopeLevel));
724 EXPECT_EQ(CA_SCOPE_ADMIN, scopeLevel);
725 scopeLevel = CA_DEFAULT_FLAGS;
727 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(siteLocalStart, &scopeLevel));
728 EXPECT_EQ(CA_SCOPE_SITE, scopeLevel);
729 scopeLevel = CA_DEFAULT_FLAGS;
731 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(orgLocalStart, &scopeLevel));
732 EXPECT_EQ(CA_SCOPE_ORG, scopeLevel);
733 scopeLevel = CA_DEFAULT_FLAGS;
735 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(globalStart, &scopeLevel));
736 EXPECT_EQ(CA_SCOPE_GLOBAL, scopeLevel);
737 scopeLevel = CA_DEFAULT_FLAGS;
740 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(interfaceLocalMid, &scopeLevel));
741 EXPECT_EQ(CA_SCOPE_INTERFACE, scopeLevel);
742 scopeLevel = CA_DEFAULT_FLAGS;
744 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(linkLocalMid, &scopeLevel));
745 EXPECT_EQ(CA_SCOPE_LINK, scopeLevel);
746 scopeLevel = CA_DEFAULT_FLAGS;
748 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(realmLocalMid, &scopeLevel));
749 EXPECT_EQ(CA_SCOPE_REALM, scopeLevel);
750 scopeLevel = CA_DEFAULT_FLAGS;
752 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(adminLocalMid, &scopeLevel));
753 EXPECT_EQ(CA_SCOPE_ADMIN, scopeLevel);
754 scopeLevel = CA_DEFAULT_FLAGS;
756 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(siteLocalMid, &scopeLevel));
757 EXPECT_EQ(CA_SCOPE_SITE, scopeLevel);
758 scopeLevel = CA_DEFAULT_FLAGS;
760 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(orgLocalMid, &scopeLevel));
761 EXPECT_EQ(CA_SCOPE_ORG, scopeLevel);
762 scopeLevel = CA_DEFAULT_FLAGS;
764 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(globalMid, &scopeLevel));
765 EXPECT_EQ(CA_SCOPE_GLOBAL, scopeLevel);
766 scopeLevel = CA_DEFAULT_FLAGS;
769 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(interfaceLocalEnd, &scopeLevel));
770 EXPECT_EQ(CA_SCOPE_INTERFACE, scopeLevel);
771 scopeLevel = CA_DEFAULT_FLAGS;
773 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(linkLocalEnd, &scopeLevel));
774 EXPECT_EQ(CA_SCOPE_LINK, scopeLevel);
775 scopeLevel = CA_DEFAULT_FLAGS;
777 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(realmLocalEnd, &scopeLevel));
778 EXPECT_EQ(CA_SCOPE_REALM, scopeLevel);
779 scopeLevel = CA_DEFAULT_FLAGS;
781 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(adminLocalEnd, &scopeLevel));
782 EXPECT_EQ(CA_SCOPE_ADMIN, scopeLevel);
783 scopeLevel = CA_DEFAULT_FLAGS;
785 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(siteLocalEnd, &scopeLevel));
786 EXPECT_EQ(CA_SCOPE_SITE, scopeLevel);
787 scopeLevel = CA_DEFAULT_FLAGS;
789 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(orgLocalEnd, &scopeLevel));
790 EXPECT_EQ(CA_SCOPE_ORG, scopeLevel);
791 scopeLevel = CA_DEFAULT_FLAGS;
793 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(globalEnd, &scopeLevel));
794 EXPECT_EQ(CA_SCOPE_GLOBAL, scopeLevel);
795 scopeLevel = CA_DEFAULT_FLAGS;
798 TEST(Ipv6ScopeLevel, getUnicastScope)
800 const char linkLocalLoopBack[] = "::1";
802 const char linkLocalStart[] = "fe80::";
803 const char linkLocalMid[] = "fe80:0000:0000:0000:0f00:0000:0000:0000";
804 const char linkLocalEnd[] = "febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
806 const char siteLocalStart[] = "fec0::";
807 const char siteLocalMid[] = "fec0:0000:0000:0000:0f00:0000:0000:0000";
808 const char siteLocalEnd[] = "feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
810 const char globalStart[] = "2000:0000:0000:0000:0000:0000:0000:0000";
811 const char globalMid[] = "2000:0000:0000:0f00:0000:0000:0000:0000";
812 const char globalEnd[] = "3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
815 CATransportFlags_t scopeLevel = CA_DEFAULT_FLAGS;
816 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(linkLocalLoopBack, &scopeLevel));
817 EXPECT_EQ(CA_SCOPE_LINK, scopeLevel);
818 scopeLevel = CA_DEFAULT_FLAGS;
821 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(linkLocalStart, &scopeLevel));
822 EXPECT_EQ(CA_SCOPE_LINK, scopeLevel);
823 scopeLevel = CA_DEFAULT_FLAGS;
825 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(linkLocalMid, &scopeLevel));
826 EXPECT_EQ(CA_SCOPE_LINK, scopeLevel);
827 scopeLevel = CA_DEFAULT_FLAGS;
829 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(linkLocalEnd, &scopeLevel));
830 EXPECT_EQ(CA_SCOPE_LINK, scopeLevel);
831 scopeLevel = CA_DEFAULT_FLAGS;
834 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(siteLocalStart, &scopeLevel));
835 EXPECT_EQ(CA_SCOPE_SITE, scopeLevel);
836 scopeLevel = CA_DEFAULT_FLAGS;
838 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(siteLocalMid, &scopeLevel));
839 EXPECT_EQ(CA_SCOPE_SITE, scopeLevel);
840 scopeLevel = CA_DEFAULT_FLAGS;
842 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(siteLocalEnd, &scopeLevel));
843 EXPECT_EQ(CA_SCOPE_SITE, scopeLevel);
844 scopeLevel = CA_DEFAULT_FLAGS;
847 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(globalStart, &scopeLevel));
848 EXPECT_EQ(CA_SCOPE_GLOBAL, scopeLevel);
849 scopeLevel = CA_DEFAULT_FLAGS;
851 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(globalMid, &scopeLevel));
852 EXPECT_EQ(CA_SCOPE_GLOBAL, scopeLevel);
853 scopeLevel = CA_DEFAULT_FLAGS;
855 EXPECT_EQ(CA_STATUS_OK, CAGetIpv6AddrScope(globalEnd, &scopeLevel));
856 EXPECT_EQ(CA_SCOPE_GLOBAL, scopeLevel);
857 scopeLevel = CA_DEFAULT_FLAGS;
860 TEST(Ipv6ScopeLevel, invalidAddressTest)
862 const char invalidAddr1[] = "qqqq";
863 const char invalidAddr2[] = "ffx7:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
864 const char invalidAddr3[] = "ffx7::::::::::dsds";
865 const char invalidAddr4[] = "ffx7:ffff:ffff:ff@f:ffff:ffff:ffff:ffff";
867 CATransportFlags_t scopeLevel = CA_DEFAULT_FLAGS;
868 EXPECT_EQ(CA_STATUS_FAILED, CAGetIpv6AddrScope(invalidAddr1, &scopeLevel));
869 EXPECT_EQ(CA_STATUS_FAILED, CAGetIpv6AddrScope(invalidAddr2, &scopeLevel));
870 EXPECT_EQ(CA_STATUS_FAILED, CAGetIpv6AddrScope(invalidAddr3, &scopeLevel));
871 EXPECT_EQ(CA_STATUS_FAILED, CAGetIpv6AddrScope(invalidAddr4, &scopeLevel));