encaptest.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*******************************************************************************
  2. * Copyright (c) 2018, Rockwell Automation, Inc.
  3. * All rights reserved.
  4. *
  5. ******************************************************************************/
  6. #include <CppUTest/TestHarness.h>
  7. #include <stdint.h>
  8. #include <string.h>
  9. extern "C" {
  10. #include "encap.h"
  11. #include "ciptypes.h"
  12. #include "enipmessage.h"
  13. }
  14. TEST_GROUP(EncapsulationProtocol) {
  15. };
  16. TEST(EncapsulationProtocol, AnswerListIdentityRequest) {
  17. CipOctet incoming_message[] =
  18. "\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xdd\x00\x00" \
  19. "\x00\x00\x00\x00\x00\x00\x00\x00";
  20. CipOctet expected_outgoing_message[] =
  21. "\x63\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xdd\x00\x00" \
  22. "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x0c\x00\x2b\x00\x01\x00" \
  23. "\x00\x02\xaf\x12\xc0\xa8\x38\x65\x00\x00\x00\x00\x00\x00\x00\x00" \
  24. "\x01\x00\x0c\x00\xe9\xfd\x02\x01\x00\x00\x15\xcd\x5b\x07\x09\x4f" \
  25. "\x70\x45\x4e\x65\x72\x20\x50\x43\xff";
  26. ENIPMessage outgoing_message;
  27. InitializeENIPMessage(&outgoing_message);
  28. EncapsulationData receive_data;
  29. CreateEncapsulationStructure(incoming_message,
  30. sizeof(incoming_message),
  31. &receive_data);
  32. EncapsulateListIdentityResponseMessage(&receive_data, &outgoing_message);
  33. }
  34. TEST(EncapsulationProtocol, AnswerListServicesRequest) {
  35. CipOctet incoming_message[] =
  36. "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdd\x00\x00" \
  37. "\x00\x00\x00\x00\x00\x00\x00\x00";
  38. CipOctet expected_outgoing_message[] =
  39. "\x04\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdd\x00\x00" \
  40. "\x00\x00\x00\x00\x00\x00\x00\x00";
  41. ENIPMessage outgoing_message;
  42. InitializeENIPMessage(&outgoing_message);
  43. EncapsulationData recieved_data = {0};
  44. CreateEncapsulationStructure(incoming_message,
  45. sizeof(incoming_message),
  46. &recieved_data);
  47. HandleReceivedListServicesCommand(&recieved_data, &outgoing_message);
  48. }
  49. TEST(EncapsulationProtocol, AnswerListInterfacesRequest) {
  50. CipOctet incoming_message[] = "";
  51. CipOctet expected_outgoing_message[] = "";
  52. ENIPMessage outgoing_message;
  53. InitializeENIPMessage(&outgoing_message);
  54. EncapsulationData received_data = {0};
  55. CreateEncapsulationStructure(incoming_message,
  56. sizeof(incoming_message),
  57. &received_data);
  58. HandleReceivedListInterfacesCommand(&received_data, &outgoing_message);
  59. }
  60. TEST(EncapsulationProtocol, AnswerRegisterSessionRequestWrongProtocolVersion) {
  61. CipOctet incoming_message[] =
  62. "\x65\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x88\x00\x00" \
  63. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  64. CipOctet expected_outgoing_message[] = "";
  65. ENIPMessage outgoing_message;
  66. InitializeENIPMessage(&outgoing_message);
  67. EncapsulationData received_data = {0};
  68. CreateEncapsulationStructure(incoming_message,
  69. sizeof(incoming_message),
  70. &received_data);
  71. HandleReceivedRegisterSessionCommand(0, &received_data, &outgoing_message);
  72. }
  73. TEST(EncapsulationProtocol, SendRRData) {
  74. CipOctet incoming_message[] =
  75. "\x6f\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\x00\xf0\xdd\x00\x00" \
  76. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" \
  77. "\x01\x00\x00\x00";
  78. CipOctet expected_outgoing_message[] = "";
  79. ENIPMessage outgoing_message = {0};
  80. InitializeENIPMessage(&outgoing_message);
  81. EncapsulationData received_data = {0};
  82. CreateEncapsulationStructure(incoming_message,
  83. sizeof(incoming_message),
  84. &received_data);
  85. struct sockaddr_in fake_originator = {0};
  86. struct sockaddr *fake_originator_pointer =
  87. (struct sockaddr *)&fake_originator;
  88. HandleReceivedSendRequestResponseDataCommand(&received_data,
  89. fake_originator_pointer,
  90. &outgoing_message);
  91. }