Просмотр исходного кода

Fixes CipEpathSetLogicalValue and adds tests

Signed-off-by: Martin Melik Merkumians <melik-merkumians@acin.tuwien.ac.at>
Martin Melik Merkumians 5 лет назад
Родитель
Сommit
17a1a37a8a
2 измененных файлов с 41 добавлено и 3 удалено
  1. 3 3
      source/src/cip/cipepath.c
  2. 38 0
      source/tests/cip/cipepathtest.cpp

+ 3 - 3
source/src/cip/cipepath.c

@@ -307,17 +307,17 @@ CipDword CipEpathGetLogicalValue(const EipUint8 **message) {
 void CipEpathSetLogicalValue(const CipDword logical_value,
                              const LogicalSegmentLogicalFormat logical_format,
                              CipMessageRouterResponse *const message) {
-  switch(logical_value) {
+  switch(logical_format) {
     case kLogicalSegmentLogicalFormatEightBit:
       AddSintToMessage(logical_value, &message->message);
       break;
     case kLogicalSegmentLogicalFormatSixteenBit:
       MoveMessageNOctets(1, &message->message); /* Needed for padding */
-      AddIntToMessage(logical_value, message);
+      AddIntToMessage(logical_value, &message->message);
       break;
     case kLogicalSegmentLogicalFormatThirtyTwoBit:
       MoveMessageNOctets(1, &message->message); /* Needed for padding */
-      AddDintToMessage(logical_value, message);
+      AddDintToMessage(logical_value, &message->message);
       break;
     default:
       OPENER_ASSERT(false); /* This should never happen! */

+ 38 - 0
source/tests/cip/cipepathtest.cpp

@@ -382,6 +382,44 @@ TEST(CipEpath, GetLogicalValue32Bit) {
   free(original_address);
 }
 
+TEST(CipEpath, SetLogicalValue8Bit) {
+  const CipUsint value = 54;
+  CipMessageRouterResponse response = {0};
+  response.message.current_message_position = response.message.message_buffer;
+  CipEpathSetLogicalValue(value, kLogicalSegmentLogicalFormatEightBit,
+                          &response);
+  CHECK_EQUAL(value, *response.message.message_buffer);
+}
+
+TEST(CipEpath, SetLogicalValue16Bit) {
+  const CipUsint value = 54;
+  CipMessageRouterResponse response = {0};
+  response.message.current_message_position = response.message.message_buffer;
+  CipEpathSetLogicalValue(value,
+                          kLogicalSegmentLogicalFormatSixteenBit,
+                          &response);
+  CHECK_EQUAL(value, *(response.message.message_buffer + 1) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 2) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 3) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 4) );
+}
+
+TEST(CipEpath, SetLogicalValue32Bit) {
+  const CipUsint value = 54;
+  CipMessageRouterResponse response = {0};
+  response.message.current_message_position = response.message.message_buffer;
+  CipEpathSetLogicalValue(value,
+                          kLogicalSegmentLogicalFormatThirtyTwoBit,
+                          &response);
+  CHECK_EQUAL(value, *(response.message.message_buffer + 1) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 2) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 3) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 4) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 5) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 6) );
+  CHECK_EQUAL(0, *(response.message.message_buffer + 7) );
+}
+
 TEST(CipEpath, GetLogicalSegmentExtendedLogicalTypeReserved) {
   const unsigned char message[] = {0x3C, 0x00};
   const LogicalSegmentExtendedLogicalType extended_type =