endianconvtest.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /*******************************************************************************
  2. * Copyright (c) 2009, Rockwell Automation, Inc.
  3. * All rights reserved.
  4. *
  5. ******************************************************************************/
  6. #include <CppUTest/TestHarness.h>
  7. #include <stdint.h>
  8. extern "C" {
  9. #include <sys/socket.h>
  10. #include <arpa/inet.h>
  11. #include "endianconv.h"
  12. #include "ciptypes.h"
  13. }
  14. TEST_GROUP(EndianConversion) {
  15. };
  16. TEST(EndianConversion, GetIntFromMessage) {
  17. CipOctet test_message[] = { 8, 60 };
  18. CipOctet *message = test_message;
  19. EipUint16 returned_value = GetIntFromMessage(&message);
  20. LONGS_EQUAL(15368, returned_value);
  21. POINTERS_EQUAL(test_message + 2, message);
  22. }
  23. TEST(EndianConversion, GetDintFromMessage) {
  24. CipOctet test_message[] = { 28, 53, 41, 37 };
  25. CipOctet *message = test_message;
  26. EipUint32 returned_value = GetDintFromMessage(&message);
  27. LONGS_EQUAL(623457564, returned_value);
  28. POINTERS_EQUAL(test_message + 4, message);
  29. }
  30. TEST(EndianConversion, GetLintFromMessage) {
  31. CipOctet test_message[] = { 81, 126, 166, 15, 70, 97, 208, 236 };
  32. CipOctet *message = test_message;
  33. EipUint64 returned_value = GetLintFromMessage(&message);
  34. LONGS_EQUAL(5872313548673241324, returned_value);
  35. POINTERS_EQUAL(test_message + 8, message);
  36. }
  37. TEST(EndianConversion, AddIntToMessage) {
  38. CipUint value_to_add_to_message = 0x5499;
  39. CipOctet message[2];
  40. CipOctet *message_pointer = message;
  41. AddIntToMessage(value_to_add_to_message, &message_pointer);
  42. BYTES_EQUAL(0x99, message[0]);
  43. BYTES_EQUAL(0x54, message[1]);
  44. POINTERS_EQUAL(message + 2, message_pointer)
  45. }
  46. TEST(EndianConversion, AddDintToMessage) {
  47. CipUdint value_to_add_to_message = 0x25E0C459;
  48. CipOctet message[4];
  49. CipOctet *message_pointer = message;
  50. AddDintToMessage(value_to_add_to_message, &message_pointer);
  51. BYTES_EQUAL(0x59, message[0]);
  52. BYTES_EQUAL(0xC4, message[1]);
  53. BYTES_EQUAL(0xE0, message[2]);
  54. BYTES_EQUAL(0x25, message[3]);
  55. POINTERS_EQUAL(message + 4, message_pointer)
  56. }
  57. TEST(EndianConversion, AddLintToMessage) {
  58. CipLint value_to_add_to_message = 0x2D2AEF0B84095230;
  59. CipOctet message[8];
  60. CipOctet *message_pointer = message;
  61. AddLintToMessage(value_to_add_to_message, &message_pointer);
  62. /* Expected message from highest to lowest byte [30][52][09][84][0B][EF][2A][2D] */
  63. BYTES_EQUAL(0x2D, message[0]);
  64. BYTES_EQUAL(0x2A, message[1]);
  65. BYTES_EQUAL(0xEF, message[2]);
  66. BYTES_EQUAL(0x0B, message[3]);
  67. BYTES_EQUAL(0x84, message[4]);
  68. BYTES_EQUAL(0x09, message[5]);
  69. BYTES_EQUAL(0x52, message[6]);
  70. BYTES_EQUAL(0x30, message[7]);
  71. POINTERS_EQUAL(message + 8, message_pointer)
  72. }
  73. TEST(EndianConversion, EncapsulateIpAddress) {
  74. CipOctet ip_message[8];
  75. CipOctet *ip_message_ponter = ip_message;
  76. DetermineEndianess();
  77. EncapsulateIpAddress(0xAF12, 0x25E0C459, &ip_message_ponter);
  78. BYTES_EQUAL(AF_INET >> 8, ip_message[0]);
  79. BYTES_EQUAL(AF_INET, ip_message[1]);
  80. BYTES_EQUAL(0x12, ip_message[2]);
  81. BYTES_EQUAL(0xAF, ip_message[3]);
  82. BYTES_EQUAL(0x59, ip_message[4]);
  83. BYTES_EQUAL(0xC4, ip_message[5]);
  84. BYTES_EQUAL(0xE0, ip_message[6]);
  85. BYTES_EQUAL(0x25, ip_message[7]);
  86. }
  87. TEST(EndianConversion, MoveMessageNOctets) {
  88. CipOctet message[8];
  89. CipOctet *message_runner = message;
  90. MoveMessageNOctets(&message_runner, 4);
  91. POINTERS_EQUAL(message + 4, message_runner);
  92. }