Added tests for the generateNonce function

This commit is contained in:
Mark 2017-11-20 18:12:16 +01:00 committed by Julius Pfrommer
parent fdd5efcd64
commit b0a358d4c5
4 changed files with 55 additions and 57 deletions

View File

@ -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>)

View File

@ -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;
}

View File

@ -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;
}

View File

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