Ver código fonte

Adds tests for parts of the ethernet encapsulation layer

capxilinx 10 anos atrás
pai
commit
ae86e239a1

+ 2 - 0
source/tests/CMakeLists.txt

@@ -14,6 +14,7 @@ add_test_includes()
 configure_file( CTestCustom.cmake ${PROJECT_BINARY_DIR}/CTestCustom.cmake )
 
 add_subdirectory( utils )
+add_subdirectory( enet_encap )
 add_executable( OpENer_Tests OpENerTests.cpp )
 
 find_library ( CPPUTEST_LIBRARY CppUTest ${CPPUTEST_HOME}/cpputest_build/lib )
@@ -21,6 +22,7 @@ find_library ( CPPUTESTEXT_LIBRARY CppUTestExt ${CPPUTEST_HOME}/cpputest_build/l
 
 target_link_libraries( OpENer_Tests gcov ${CPPUTEST_LIBRARY} ${CPPUTESTEXT_LIBRARY} )
 target_link_libraries( OpENer_Tests UtilsTest Utils ) 
+target_link_libraries( OpENer_Tests EthernetEncapsulationTest ENET_ENCAP )
 
 ########################################
 # Adds test to CTest environment       #

+ 1 - 0
source/tests/OpENerTests.h

@@ -2,3 +2,4 @@
 
 IMPORT_TEST_GROUP(RandomClass);
 IMPORT_TEST_GROUP(XorShiftRandom);
+IMPORT_TEST_GROUP(EndianConversion);

+ 8 - 0
source/tests/enet_encap/CMakeLists.txt

@@ -0,0 +1,8 @@
+
+opener_common_includes()
+
+set( EthernetEncapsulationTestSrc endianconvtest.cpp )
+
+include_directories( ${SRC_DIR}/enet_encap )
+
+add_library( EthernetEncapsulationTest ${EthernetEncapsulationTestSrc} )

+ 115 - 0
source/tests/enet_encap/endianconvtest.cpp

@@ -0,0 +1,115 @@
+/*******************************************************************************
+ * Copyright (c) 2009, Rockwell Automation, Inc.
+ * All rights reserved.
+ *
+ ******************************************************************************/
+
+#include <CppUTest/TestHarness.h>
+#include <stdint.h>
+
+
+extern "C" {
+
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+#include "endianconv.h"
+
+#include "ciptypes.h"
+}
+
+TEST_GROUP(EndianConversion) {
+
+};
+
+TEST(EndianConversion, GetIntFromMessage) {
+  CipOctet test_message[] = { 8, 60 };
+  CipOctet *message = test_message;
+  EipUint16 returned_value = GetIntFromMessage(&message);
+
+  LONGS_EQUAL(15368, returned_value);
+  POINTERS_EQUAL(test_message + 2, message);
+}
+
+TEST(EndianConversion, GetDintFromMessage) {
+  CipOctet test_message[] = { 28, 53, 41, 37 };
+  CipOctet *message = test_message;
+  EipUint32 returned_value = GetDintFromMessage(&message);
+
+  LONGS_EQUAL(623457564, returned_value);
+  POINTERS_EQUAL(test_message + 4, message);
+}
+
+TEST(EndianConversion, GetLintFromMessage) {
+  CipOctet test_message[] = { 81, 126, 166, 15, 70, 97, 208, 236 };
+  CipOctet *message = test_message;
+  EipUint64 returned_value = GetLintFromMessage(&message);
+
+  LONGS_EQUAL(5872313548673241324, returned_value);
+  POINTERS_EQUAL(test_message + 8, message);
+}
+
+TEST(EndianConversion, AddIntToMessage) {
+  CipUint value_to_add_to_message = 0x5499;
+  CipOctet message[2];
+  CipOctet *message_pointer = message;
+
+  AddIntToMessage(value_to_add_to_message, &message_pointer);
+
+  BYTES_EQUAL(0x99, message[0]);
+  BYTES_EQUAL(0x54, message[1]);
+
+  POINTERS_EQUAL(message + 2, message_pointer)
+}
+
+TEST(EndianConversion, AddDintToMessage) {
+  CipUdint value_to_add_to_message = 0x25E0C459;
+  CipOctet message[4];
+  CipOctet *message_pointer = message;
+
+  AddDintToMessage(value_to_add_to_message, &message_pointer);
+
+  BYTES_EQUAL(0x59, message[0]);
+  BYTES_EQUAL(0xC4, message[1]);
+  BYTES_EQUAL(0xE0, message[2]);
+  BYTES_EQUAL(0x25, message[3]);
+
+  POINTERS_EQUAL(message + 4, message_pointer)
+}
+
+TEST(EndianConversion, AddLintToMessage) {
+  CipLint value_to_add_to_message = 0x2D2AEF0B84095230;
+  CipOctet message[8];
+  CipOctet *message_pointer = message;
+
+  AddLintToMessage(value_to_add_to_message, &message_pointer);
+
+  BYTES_EQUAL(0x2D, message[0]);
+  BYTES_EQUAL(0x2A, message[1]);
+  BYTES_EQUAL(0xEF, message[2]);
+  BYTES_EQUAL(0x0B, message[3]);
+  BYTES_EQUAL(0x84, message[4]);
+  BYTES_EQUAL(0x09, message[5]);
+  BYTES_EQUAL(0x52, message[6]);
+  BYTES_EQUAL(0x30, message[7]);
+
+  POINTERS_EQUAL(message + 8, message_pointer)
+}
+
+TEST(EndianConversion, EncapsulateIpAddressCommonPaketFormat) {
+  CipOctet ip_message[8];
+  CipOctet *ip_message_ponter = ip_message;
+
+  DetermineEndianess();
+
+  EncapsulateIpAddressCommonPaketFormat(0xAF12, 0x25E0C459, ip_message_ponter);
+
+  BYTES_EQUAL(AF_INET >> 8, ip_message[0]);
+  BYTES_EQUAL(AF_INET, ip_message[1]);
+  BYTES_EQUAL(0x12, ip_message[2]);
+  BYTES_EQUAL(0xAF, ip_message[3]);
+  BYTES_EQUAL(0x59, ip_message[4]);
+  BYTES_EQUAL(0xC4, ip_message[5]);
+  BYTES_EQUAL(0xE0, ip_message[6]);
+  BYTES_EQUAL(0x25, ip_message[7]);
+}