Browse Source

Added tests for the generateNonce function

Mark 7 years ago
parent
commit
b0a358d4c5

+ 0 - 49
tests/CMakeLists.txt

@@ -162,55 +162,6 @@ add_executable(check_server_readspeed server/check_server_readspeed.c $<TARGET_O
 target_link_libraries(check_server_readspeed ${LIBS})
 add_test_valgrind(check_server_readspeed ${TESTS_BINARY_DIR}/check_server_readspeed)
 
-# Test server with network dumps from files
-
-add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/client_HELOPN.bin
-                          ${CMAKE_CURRENT_BINARY_DIR}/client_CLO.bin
-                          ${CMAKE_CURRENT_BINARY_DIR}/client_CreateActivateSession.bin
-                          ${CMAKE_CURRENT_BINARY_DIR}/client_Browse.bin
-                          ${CMAKE_CURRENT_BINARY_DIR}/client_Read.bin
-                          ${CMAKE_CURRENT_BINARY_DIR}/client_Write.bin
-                  PRE_BUILD
-                  COMMAND python ${PROJECT_SOURCE_DIR}/tools/hex2bin.py
-                                 ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_HELOPN.hex
-                                 ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_CLO.hex
-                                 ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_CreateActivateSession.hex
-                                 ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_Browse.hex
-                                 ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_Read.hex
-                                 ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_Write.hex
-                  DEPENDS ${PROJECT_SOURCE_DIR}/tools/hex2bin.py
-                          ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_HELOPN.hex
-                          ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_CLO.hex
-                          ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_CreateActivateSession.hex
-                          ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_Browse.hex
-                          ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_Read.hex
-                          ${CMAKE_CURRENT_SOURCE_DIR}/dumps/client_Write.hex)
-add_custom_target(client_HELOPN.bin DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/client_HELOPN.bin")
-add_custom_target(client_CreateActivateSession.bin DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/client_CreateActivateSession.bin")
-
-add_executable(check_server_binary_messages server/check_server_binary_messages.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)
-target_include_directories(check_server_binary_messages PRIVATE ${PROJECT_SOURCE_DIR}/src/server)
-target_link_libraries(check_server_binary_messages ${LIBS})
-add_dependencies(check_server_binary_messages client_HELOPN.bin)
-
-add_test_valgrind(check_server_binary_messages_browse ${TESTS_BINARY_DIR}/check_server_binary_messages
-                                             ${CMAKE_CURRENT_BINARY_DIR}/client_HELOPN.bin
-                                             ${CMAKE_CURRENT_BINARY_DIR}/client_CreateActivateSession.bin
-                                             ${CMAKE_CURRENT_BINARY_DIR}/client_Browse.bin
-                                             ${CMAKE_CURRENT_BINARY_DIR}/client_CLO.bin)
-
-add_test_valgrind(check_server_binary_messages_read ${TESTS_BINARY_DIR}/check_server_binary_messages
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_HELOPN.bin
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_CreateActivateSession.bin
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_Read.bin
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_CLO.bin)
-
-add_test_valgrind(check_server_binary_messages_write ${TESTS_BINARY_DIR}/check_server_binary_messages
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_HELOPN.bin
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_CreateActivateSession.bin
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_Write.bin
-                                           ${CMAKE_CURRENT_BINARY_DIR}/client_CLO.bin)
-
 # Test Client
 
 add_executable(check_client client/check_client.c $<TARGET_OBJECTS:open62541-object> $<TARGET_OBJECTS:open62541-testplugins>)

+ 46 - 0
tests/check_securechannel.c

@@ -452,6 +452,45 @@ START_TEST(Securechannel_sendAsymmetricOPNMessage_extraPaddingPresentWhenKeyLarg
     }
 END_TEST
 
+START_TEST(SecureChannel_generateNonce)
+    {
+        UA_ByteString myNonce;
+        UA_ByteString_init(&myNonce);
+
+        for(size_t i = 0; i < 129; ++i) {
+            i = (i == 128) ? 65536 : i; // large edge case
+
+            UA_StatusCode retval = UA_SecureChannel_generateNonce(&testChannel, i, &myNonce);
+
+            ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected retval to be good");
+            ck_assert_msg(myNonce.length == i, "Expected nonce length to be %i but was %i", i, myNonce.length);
+            if(i != 0)
+                ck_assert_msg(fCalled.generateNonce, "Expected generateNonce to have been called");
+            else
+                if(fCalled.generateNonce)
+                    printf("generateNonce was called with nonceLength = 0. Could possibly be avoided");
+        }
+
+        UA_ByteString_deleteMembers(&myNonce);
+    }
+END_TEST
+
+START_TEST(SecureChannel_generateNonce_invalidParameters)
+    {
+        UA_ByteString myNonce;
+        UA_ByteString_init(&myNonce);
+
+        UA_StatusCode retval = UA_SecureChannel_generateNonce(NULL, 42, NULL);
+        ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
+
+        retval = UA_SecureChannel_generateNonce(NULL, 42, &myNonce);
+        ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
+
+        retval = UA_SecureChannel_generateNonce(&testChannel, 42, NULL);
+        ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected failure");
+    }
+END_TEST
+
 static Suite *
 testSuite_SecureChannel(void) {
     Suite *s = suite_create("SecureChannel");
@@ -492,6 +531,13 @@ testSuite_SecureChannel(void) {
                    Securechannel_sendAsymmetricOPNMessage_extraPaddingPresentWhenKeyLargerThan2048Bits);
     suite_add_tcase(s, tc_sendAsymmetricOPNMessage);
 
+    TCase *tc_generateNonce = tcase_create("Test generateNonce function");
+    tcase_add_checked_fixture(tc_generateNonce, setup_funcs_called, teardown_funcs_called);
+    tcase_add_checked_fixture(tc_generateNonce, setup_key_sizes, teardown_key_sizes);
+    tcase_add_checked_fixture(tc_generateNonce, setup_secureChannel, teardown_secureChannel);
+    tcase_add_test(tc_generateNonce, SecureChannel_generateNonce);
+    tcase_add_test(tc_generateNonce, SecureChannel_generateNonce_invalidParameters);
+    suite_add_tcase(s, tc_generateNonce);
 
     return s;
 }

+ 8 - 8
tests/testing-plugins/testing_policy.c

@@ -2,8 +2,7 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-/* This work is licensed under a Creative Commons CCZero 1.0 Universal License.
- * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */
+#ifndef __clang_analyzer__
 
 #include <ua_types.h>
 #include <ua_plugin_securitypolicy.h>
@@ -11,7 +10,6 @@
 #include "testing_policy.h"
 #include "check.h"
 
-#ifndef __clang_analyzer__
 #define SET_CALLED(func) funcsCalled->func = true
 
 static funcs_called *funcsCalled;
@@ -197,11 +195,13 @@ generateKey_testing(const UA_SecurityPolicy *securityPolicy,
 static UA_StatusCode
 generateNonce_testing(const UA_SecurityPolicy *securityPolicy,
                       UA_ByteString *out) {
-    out->data = UA_Byte_new();
-    if(!out->data)
-        return UA_STATUSCODE_BADOUTOFMEMORY;
-    out->length = 1;
-    out->data[0] = 'a';
+    ck_assert(securityPolicy != NULL);
+    ck_assert(out != NULL);
+    ck_assert(out->data != NULL);
+
+    memset(out->data, 'N', out->length);
+
+    SET_CALLED(generateNonce);
     return UA_STATUSCODE_GOOD;
 }
 

+ 1 - 0
tests/testing-plugins/testing_policy.h

@@ -30,6 +30,7 @@ typedef struct funcs_called {
 
     bool makeCertificateThumbprint;
     bool generateKey;
+    bool generateNonce;
 
     bool setLocalSymEncryptingKey;
     bool setLocalSymSigningKey;