|
@@ -120,6 +120,66 @@ START_TEST(EndpointUrl_split) {
|
|
|
}
|
|
|
END_TEST
|
|
|
|
|
|
+START_TEST(EndpointUrl_ethernet) {
|
|
|
+ UA_String target;
|
|
|
+ UA_UInt16 vid = 0;
|
|
|
+ UA_Byte pcp = 0;
|
|
|
+ UA_String expected;
|
|
|
+
|
|
|
+ // check for too short url
|
|
|
+ UA_String endPointUrl = UA_STRING("inv.ali:/");
|
|
|
+ ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
|
|
|
+ UA_STATUSCODE_BADINTERNALERROR);
|
|
|
+ ck_assert_uint_eq(vid, 0);
|
|
|
+ ck_assert_uint_eq(pcp, 0);
|
|
|
+
|
|
|
+ // valid without vid and pcp but leading ':'
|
|
|
+ endPointUrl = UA_STRING("opc.eth://target:");
|
|
|
+ ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
|
|
|
+ UA_STATUSCODE_BADINTERNALERROR);
|
|
|
+ ck_assert_uint_eq(vid, 0);
|
|
|
+ ck_assert_uint_eq(pcp, 0);
|
|
|
+
|
|
|
+ // without pcp and vid as non decimal
|
|
|
+ endPointUrl = UA_STRING("opc.eth://target:abc");
|
|
|
+ ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
|
|
|
+ UA_STATUSCODE_BADINTERNALERROR);
|
|
|
+ ck_assert_uint_eq(vid, 0);
|
|
|
+ ck_assert_uint_eq(pcp, 0);
|
|
|
+
|
|
|
+ // pcp as non decimal
|
|
|
+ endPointUrl = UA_STRING("opc.eth://target:100.abc");
|
|
|
+ ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
|
|
|
+ UA_STATUSCODE_BADINTERNALERROR);
|
|
|
+ ck_assert_uint_eq(vid, 100);
|
|
|
+ ck_assert_uint_eq(pcp, 0);
|
|
|
+
|
|
|
+ // valid without pcp but leading '.'
|
|
|
+ endPointUrl = UA_STRING("opc.eth://target:100.");
|
|
|
+ ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
|
|
|
+ UA_STATUSCODE_BADINTERNALERROR);
|
|
|
+ ck_assert_uint_eq(vid, 100);
|
|
|
+ ck_assert_uint_eq(pcp, 0);
|
|
|
+
|
|
|
+ // valid without pcp
|
|
|
+ endPointUrl = UA_STRING("opc.eth://target:100");
|
|
|
+ ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
|
|
|
+ UA_STATUSCODE_GOOD);
|
|
|
+ expected = UA_STRING("target");
|
|
|
+ ck_assert(UA_String_equal(&target, &expected));
|
|
|
+ ck_assert_uint_eq(vid, 100);
|
|
|
+ ck_assert_uint_eq(pcp, 0);
|
|
|
+
|
|
|
+ // valid
|
|
|
+ endPointUrl = UA_STRING("opc.eth://target:100.7");
|
|
|
+ ck_assert_uint_eq(UA_parseEndpointUrlEthernet(&endPointUrl, &target, &vid, &pcp),
|
|
|
+ UA_STATUSCODE_GOOD);
|
|
|
+ expected = UA_STRING("target");
|
|
|
+ ck_assert(UA_String_equal(&target, &expected));
|
|
|
+ ck_assert_uint_eq(vid, 100);
|
|
|
+ ck_assert_uint_eq(pcp, 7);
|
|
|
+}
|
|
|
+END_TEST
|
|
|
|
|
|
START_TEST(readNumber) {
|
|
|
UA_UInt32 result;
|
|
@@ -133,6 +193,24 @@ START_TEST(readNumber) {
|
|
|
}
|
|
|
END_TEST
|
|
|
|
|
|
+START_TEST(readNumberWithBase) {
|
|
|
+ UA_UInt32 result;
|
|
|
+ ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"g", 1, &result, 16), 0);
|
|
|
+
|
|
|
+ ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"f", 1, &result, 16), 1);
|
|
|
+ ck_assert_uint_eq(result, 15);
|
|
|
+
|
|
|
+ ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"1x", 2, &result, 16), 1);
|
|
|
+ ck_assert_uint_eq(result, 1);
|
|
|
+
|
|
|
+ ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"12345678", 9, &result, 16), 8);
|
|
|
+ ck_assert_uint_eq(result, 0x12345678);
|
|
|
+
|
|
|
+ ck_assert_uint_eq(UA_readNumberWithBase((UA_Byte*)"123456789", 9, &result, 8), 7);
|
|
|
+ ck_assert_uint_eq(result, 01234567);
|
|
|
+}
|
|
|
+END_TEST
|
|
|
+
|
|
|
|
|
|
START_TEST(StatusCode_msg) {
|
|
|
#ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS
|
|
@@ -304,8 +382,12 @@ static Suite* testSuite_Utils(void) {
|
|
|
TCase *tc_endpointUrl_split = tcase_create("EndpointUrl_split");
|
|
|
tcase_add_test(tc_endpointUrl_split, EndpointUrl_split);
|
|
|
suite_add_tcase(s,tc_endpointUrl_split);
|
|
|
+ TCase *tc_endpointUrl_ethernet = tcase_create("EndpointUrl_ethernet");
|
|
|
+ tcase_add_test(tc_endpointUrl_ethernet, EndpointUrl_ethernet);
|
|
|
+ suite_add_tcase(s,tc_endpointUrl_ethernet);
|
|
|
TCase *tc_utils = tcase_create("Utils");
|
|
|
tcase_add_test(tc_utils, readNumber);
|
|
|
+ tcase_add_test(tc_utils, readNumberWithBase);
|
|
|
tcase_add_test(tc_utils, StatusCode_msg);
|
|
|
suite_add_tcase(s,tc_utils);
|
|
|
|