encaptest.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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 "ciptypes.h"
  11. #include "encap.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(
  30. incoming_message, sizeof(incoming_message), &receive_data);
  31. EncapsulateListIdentityResponseMessage(&receive_data, &outgoing_message);
  32. }
  33. TEST(EncapsulationProtocol, AnswerListServicesRequest) {
  34. CipOctet incoming_message[] =
  35. "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdd\x00\x00"
  36. "\x00\x00\x00\x00\x00\x00\x00\x00";
  37. CipOctet expected_outgoing_message[] =
  38. "\x04\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdd\x00\x00"
  39. "\x00\x00\x00\x00\x00\x00\x00\x00";
  40. ENIPMessage outgoing_message;
  41. InitializeENIPMessage(&outgoing_message);
  42. EncapsulationData recieved_data = { 0 };
  43. CreateEncapsulationStructure(
  44. incoming_message, sizeof(incoming_message), &recieved_data);
  45. HandleReceivedListServicesCommand(&recieved_data, &outgoing_message);
  46. }
  47. TEST(EncapsulationProtocol, AnswerListInterfacesRequest) {
  48. CipOctet incoming_message[] = "";
  49. CipOctet expected_outgoing_message[] = "";
  50. ENIPMessage outgoing_message;
  51. InitializeENIPMessage(&outgoing_message);
  52. EncapsulationData received_data = { 0 };
  53. CreateEncapsulationStructure(
  54. incoming_message, sizeof(incoming_message), &received_data);
  55. HandleReceivedListInterfacesCommand(&received_data, &outgoing_message);
  56. }
  57. TEST(EncapsulationProtocol, AnswerRegisterSessionRequestWrongProtocolVersion) {
  58. CipOctet incoming_message[] =
  59. "\x65\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x88\x00\x00"
  60. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  61. CipOctet expected_outgoing_message[] = "";
  62. ENIPMessage outgoing_message;
  63. InitializeENIPMessage(&outgoing_message);
  64. EncapsulationData received_data = { 0 };
  65. CreateEncapsulationStructure(
  66. incoming_message, sizeof(incoming_message), &received_data);
  67. HandleReceivedRegisterSessionCommand(0, &received_data, &outgoing_message);
  68. }
  69. TEST(EncapsulationProtocol, SendRRData) {
  70. CipOctet incoming_message[] =
  71. "\x6f\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\x00\xf0\xdd\x00\x00"
  72. "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00"
  73. "\x01\x00\x00\x00";
  74. CipOctet expected_outgoing_message[] = "";
  75. ENIPMessage outgoing_message = { 0 };
  76. InitializeENIPMessage(&outgoing_message);
  77. EncapsulationData received_data = { 0 };
  78. CreateEncapsulationStructure(
  79. incoming_message, sizeof(incoming_message), &received_data);
  80. struct sockaddr_in fake_originator = { 0 };
  81. struct sockaddr* fake_originator_pointer = (struct sockaddr*)&fake_originator;
  82. HandleReceivedSendRequestResponseDataCommand(
  83. &received_data, fake_originator_pointer, &outgoing_message);
  84. }