check_securechannel.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. /* This Source Code Form is subject to the terms of the Mozilla Public
  2. * License, v. 2.0. If a copy of the MPL was not distributed with this
  3. * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include "testing_policy.h"
  7. #include "ua_securechannel.h"
  8. #include "check.h"
  9. #define UA_BYTESTRING_STATIC(s) {sizeof(s)-1, (UA_Byte*)s}
  10. UA_SecureChannel testChannel;
  11. UA_ByteString dummyCertificate = UA_BYTESTRING_STATIC("DUMMY CERTIFICATE DUMMY CERTIFICATE DUMMY CERTIFICATE");
  12. UA_SecurityPolicy dummyPolicy;
  13. funcs_called fCalled;
  14. static void
  15. setup_secureChannel(void) {
  16. TestingPolicy(&dummyPolicy, dummyCertificate, &fCalled);
  17. UA_SecureChannel_init(&testChannel, &dummyPolicy, &dummyCertificate);
  18. }
  19. static void
  20. teardown_secureChannel(void) {
  21. UA_SecureChannel_deleteMembersCleanup(&testChannel);
  22. dummyPolicy.deleteMembers(&dummyPolicy);
  23. }
  24. static void
  25. setup_funcs_called(void) {
  26. memset(&fCalled, 0, sizeof(struct funcs_called));
  27. }
  28. static void
  29. teardown_funcs_called(void) {
  30. memset(&fCalled, 0, sizeof(struct funcs_called));
  31. }
  32. /*
  33. static void
  34. setup_dummyPolicy(void) {
  35. TestingPolicy(&dummyPolicy, dummyCertificate, &fCalled);
  36. }
  37. static void
  38. teardown_dummyPolicy(void) {
  39. dummyPolicy.deleteMembers(&dummyPolicy);
  40. }*/
  41. START_TEST(SecureChannel_initAndDelete)
  42. {
  43. TestingPolicy(&dummyPolicy, dummyCertificate, &fCalled);
  44. UA_StatusCode retval;
  45. UA_SecureChannel channel;
  46. retval = UA_SecureChannel_init(&channel, &dummyPolicy, &dummyCertificate);
  47. ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected StatusCode to be good");
  48. ck_assert_msg(channel.state == UA_SECURECHANNELSTATE_FRESH, "Expected state to be fresh");
  49. ck_assert_msg(fCalled.newContext, "Expected newContext to have been called");
  50. ck_assert_msg(fCalled.makeCertificateThumbprint, "Expected makeCertificateThumbprint to have been called");
  51. ck_assert_msg(channel.securityPolicy == &dummyPolicy, "SecurityPolicy not set correctly");
  52. UA_SecureChannel_deleteMembersCleanup(&channel);
  53. ck_assert_msg(fCalled.deleteContext, "Expected deleteContext to have been called");
  54. }
  55. END_TEST
  56. START_TEST(SecureChannel_initAndDelete_invalidParameters)
  57. {
  58. UA_StatusCode retval = UA_SecureChannel_init(NULL, NULL, NULL);
  59. ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected init to fail");
  60. UA_SecureChannel channel;
  61. retval = UA_SecureChannel_init(&channel, &dummyPolicy, NULL);
  62. ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected init to fail");
  63. retval = UA_SecureChannel_init(&channel, NULL, &dummyCertificate);
  64. ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected init to fail");
  65. retval = UA_SecureChannel_init(NULL, &dummyPolicy, &dummyCertificate);
  66. ck_assert_msg(retval != UA_STATUSCODE_GOOD, "Expected init to fail");
  67. UA_SecureChannel_deleteMembersCleanup(NULL);
  68. }
  69. END_TEST
  70. START_TEST(SecureChannel_generateNewKeys)
  71. {
  72. UA_StatusCode retval = UA_SecureChannel_generateNewKeys(&testChannel);
  73. ck_assert_msg(retval == UA_STATUSCODE_GOOD, "Expected Statuscode to be good");
  74. ck_assert_msg(fCalled.generateKey, "Expected generateKey to have been called");
  75. ck_assert_msg(fCalled.setLocalSymEncryptingKey, "Expected setLocalSymEncryptingKey to have been called");
  76. ck_assert_msg(fCalled.setLocalSymSigningKey, "Expected setLocalSymSigningKey to have been called");
  77. ck_assert_msg(fCalled.setLocalSymIv, "Expected setLocalSymIv to have been called");
  78. ck_assert_msg(fCalled.setRemoteSymEncryptingKey, "Expected setRemoteSymEncryptingKey to have been called");
  79. ck_assert_msg(fCalled.setRemoteSymSigningKey, "Expected setRemoteSymSigningKey to have been called");
  80. ck_assert_msg(fCalled.setRemoteSymIv, "Expected setRemoteSymIv to have been called");
  81. }
  82. END_TEST
  83. static Suite *
  84. testSuite_SecureChannel(void) {
  85. Suite *s = suite_create("SecureChannel");
  86. TCase *tc_initAndDelete = tcase_create("Initialize and delete Securechannel");
  87. tcase_add_checked_fixture(tc_initAndDelete, setup_funcs_called, teardown_funcs_called);
  88. tcase_add_test(tc_initAndDelete, SecureChannel_initAndDelete);
  89. tcase_add_test(tc_initAndDelete, SecureChannel_initAndDelete_invalidParameters);
  90. suite_add_tcase(s, tc_initAndDelete);
  91. TCase *tc_generateNewKeys = tcase_create("Test generateNewKeys function");
  92. tcase_add_checked_fixture(tc_generateNewKeys, setup_funcs_called, teardown_funcs_called);
  93. tcase_add_checked_fixture(tc_generateNewKeys, setup_secureChannel, teardown_secureChannel);
  94. tcase_add_test(tc_generateNewKeys, SecureChannel_generateNewKeys);
  95. suite_add_tcase(s, tc_generateNewKeys);
  96. return s;
  97. }
  98. int
  99. main(void) {
  100. Suite *s = testSuite_SecureChannel();
  101. SRunner *sr = srunner_create(s);
  102. srunner_set_fork_status(sr, CK_NOFORK);
  103. srunner_run_all(sr, CK_VERBOSE);
  104. int number_failed = srunner_ntests_failed(sr);
  105. srunner_free(sr);
  106. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  107. }