check_server_binary_messages.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 <stdlib.h>
  5. #include <stdio.h>
  6. #include "check.h"
  7. #include "ua_server.h"
  8. #include "ua_server_internal.h"
  9. #include "ua_config_default.h"
  10. #include "ua_log_stdout.h"
  11. #include "testing_networklayers.h"
  12. size_t files;
  13. char **filenames;
  14. UA_ByteString sentData;
  15. static UA_ByteString readFile(char *filename) {
  16. UA_ByteString buf = UA_BYTESTRING_NULL;
  17. size_t length;
  18. FILE *f = NULL;
  19. #ifdef WIN32
  20. fopen_s(&f, filename,"r");
  21. #else
  22. f = fopen(filename,"r");
  23. #endif
  24. if(f) {
  25. fseek(f, 0, SEEK_END);
  26. length = ftell(f);
  27. rewind(f);
  28. buf.data = (UA_Byte*)UA_malloc(length);
  29. fread(buf.data, sizeof(char), length, f);
  30. buf.length = length;
  31. fclose(f);
  32. }
  33. return buf;
  34. }
  35. START_TEST(processMessage) {
  36. UA_Connection c = createDummyConnection(&sentData);
  37. UA_ServerConfig *config = UA_ServerConfig_new_default();
  38. UA_Server *server = UA_Server_new(config);
  39. for(size_t i = 0; i < files; i++) {
  40. UA_ByteString msg = readFile(filenames[i]);
  41. UA_Server_processBinaryMessage(server, &c, &msg);
  42. UA_ByteString_deleteMembers(&msg);
  43. }
  44. UA_Server_run_shutdown(server);
  45. UA_Server_delete(server);
  46. UA_ServerConfig_delete(config);
  47. UA_Connection_deleteMembers(&c);
  48. }
  49. END_TEST
  50. static Suite *testSuite_binaryMessages(void) {
  51. Suite *s = suite_create("Test server with messages stored in text files");
  52. TCase *tc_messages = tcase_create("binary messages");
  53. tcase_add_test(tc_messages, processMessage);
  54. suite_add_tcase(s, tc_messages);
  55. return s;
  56. }
  57. int main(int argc, char **argv) {
  58. if(argc < 2)
  59. return EXIT_FAILURE;
  60. filenames = &argv[1];
  61. files = argc - 1;
  62. int number_failed = 0;
  63. Suite *s;
  64. SRunner *sr;
  65. s = testSuite_binaryMessages();
  66. sr = srunner_create(s);
  67. srunner_set_fork_status(sr, CK_NOFORK);
  68. srunner_run_all(sr, CK_NORMAL);
  69. number_failed += srunner_ntests_failed(sr);
  70. srunner_free(sr);
  71. return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  72. }