OpENeruCPort/OrginalSourceRepo/OpENer-master/source/tests/cip/cipelectronickeyformattest.cpp

181 lines
5.5 KiB
C++

/*******************************************************************************
* Copyright (c) 2016, Rockwell Automation, Inc.
* All rights reserved.
*
******************************************************************************/
#include <CppUTest/TestHarness.h>
#include <stdint.h>
#include <string.h>
extern "C" {
#include "cipepath.h"
#include "cipelectronickey.h"
}
TEST_GROUP(CipElectronicKeyFormat) {
ElectronicKeyFormat4 *key;
void setup() {
key = ElectronicKeyFormat4New();
}
void teardown() {
ElectronicKeyFormat4Delete (&key);
}
};
TEST(CipElectronicKeyFormat, CreateElectronicKey) {
CipOctet dummyArea[kElectronicKeyFormat4Size];
memset(dummyArea, 0, sizeof(dummyArea) );
MEMCMP_EQUAL(dummyArea, key, kElectronicKeyFormat4Size);
};
TEST(CipElectronicKeyFormat, DeleteElectronicKey) {
ElectronicKeyFormat4Delete(&key);
POINTERS_EQUAL(NULL, key);
}
TEST(CipElectronicKeyFormat, SetVendorID) {
CipOctet demoArea[kElectronicKeyFormat4Size];
memset(demoArea, 0, sizeof(demoArea) );
CipUint *vendor_id = (CipUint *)demoArea;
*vendor_id = 1;
ElectronicKeyFormat4SetVendorId(key, 1);
MEMCMP_EQUAL(demoArea, key, kElectronicKeyFormat4Size);
}
TEST(CipElectronicKeyFormat, GetVendorID) {
CipUint expected_vendor_id = 1;
CipUint *vendor_id_data = (CipUint *)key;
*vendor_id_data = expected_vendor_id;
CipUint vendor_id = ElectronicKeyFormat4GetVendorId(key);
CHECK_EQUAL(expected_vendor_id, vendor_id);
}
TEST(CipElectronicKeyFormat, SetDeviceType) {
CipOctet demoArea[kElectronicKeyFormat4Size];
memset(demoArea, 0, sizeof(demoArea) );
CipUint *device_type = (CipUint *)demoArea + 1;
*device_type = 1;
ElectronicKeyFormat4SetDeviceType(key, 1);
MEMCMP_EQUAL(demoArea, key, kElectronicKeyFormat4Size);
}
TEST(CipElectronicKeyFormat, GetDeviceType) {
CipUint expected_device_type = 1;
CipUint *device_type_data = (CipUint *)key + 1;
*device_type_data = expected_device_type;
CipUint device_type = ElectronicKeyFormat4GetDeviceType(key);
CHECK_EQUAL(expected_device_type, device_type);
}
TEST(CipElectronicKeyFormat, SetProductCode) {
CipOctet demoArea[kElectronicKeyFormat4Size];
memset(demoArea, 0, sizeof(demoArea) );
CipUint *product_code = (CipUint *)demoArea + 2;
*product_code = 1;
ElectronicKeyFormat4SetProductCode(key, 1);
MEMCMP_EQUAL(demoArea, key, kElectronicKeyFormat4Size);
}
TEST(CipElectronicKeyFormat, GetProductCode) {
CipUint expected_product_code = 1;
CipUint *product_code_data = (CipUint *)key + 2;
*product_code_data = expected_product_code;
CipUint product_code = ElectronicKeyFormat4GetProductCode(key);
CHECK_EQUAL(expected_product_code, product_code);
}
TEST(CipElectronicKeyFormat, SetMajorRevisionCompatibility) {
CipOctet demoArea[kElectronicKeyFormat4Size];
memset(demoArea, 0, sizeof(demoArea) );
CipByte *major_revision_compatiblitiy = (CipByte *)demoArea + 6;
*major_revision_compatiblitiy = 0x81;
ElectronicKeyFormat4SetMajorRevisionCompatibility(key, 0x81);
MEMCMP_EQUAL(demoArea, key, kElectronicKeyFormat4Size);
}
TEST(CipElectronicKeyFormat, GetMajorRevision) {
const CipUsint expected_major_revision = 0x1;
CipUsint set_major_revision = 0x1;
CipByte *expected_major_data = (CipByte *)key + 6;
*expected_major_data = set_major_revision;
CipUint product_code = ElectronicKeyFormat4GetMajorRevision(key);
CHECK_EQUAL(expected_major_revision, product_code);
}
TEST(CipElectronicKeyFormat, GetMajorRevisionCompatibility) {
const CipUsint expected_major_revision = 0x81;
CipByte *expected_major_data = (CipByte *)key + 6;
*expected_major_data = expected_major_revision;
bool compatibility = ElectronicKeyFormat4GetMajorRevisionCompatibility(key);
CHECK_TEXT(compatibility, "Compatibility flag not working");
}
TEST(CipElectronicKeyFormat, SetMinorRevision) {
CipOctet demoArea[kElectronicKeyFormat4Size];
memset(demoArea, 0, sizeof(demoArea) );
CipByte *minor_revision_compatiblitiy = (CipByte *)demoArea + 7;
*minor_revision_compatiblitiy = 0x81;
ElectronicKeyFormat4SetMinorRevision(key, 0x81);
MEMCMP_EQUAL(demoArea, key, kElectronicKeyFormat4Size);
}
TEST(CipElectronicKeyFormat, GetMinorRevision) {
CipUsint expected_minor_revision = 0x1;
CipByte *expected_minor_data = (CipByte *)key + 7;
*expected_minor_data = expected_minor_revision;
CipUint product_code = ElectronicKeyFormat4GetMinorRevision(key);
CHECK_EQUAL(expected_minor_revision, product_code);
}
TEST(CipElectronicKeyFormat, ParseElectronicKeyTest) {
/* Size of an electronic key is 1 + 1 + 8 (Segment, Key format, Key) */
const CipOctet message[] =
{ 0x34, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x84, 0x05};
const CipOctet *message_buffer = message;
GetElectronicKeyFormat4FromMessage(&message_buffer, key);
message_buffer = message;
CHECK_EQUAL( 256, ElectronicKeyFormat4GetVendorId(key) );
CHECK_EQUAL( 512, ElectronicKeyFormat4GetDeviceType(key) );
CHECK_EQUAL( 768, ElectronicKeyFormat4GetProductCode(key) );
CHECK_TRUE( ElectronicKeyFormat4GetMajorRevisionCompatibility(key) );
CHECK_EQUAL( 0x04, ElectronicKeyFormat4GetMajorRevision(key) );
CHECK_EQUAL( 0x05, ElectronicKeyFormat4GetMinorRevision(key) );
MEMCMP_EQUAL(message_buffer + 2, key, 8);
}
//TEST(CipElectronicKeyFormat, CheckElectronicKeyWrongVendorId) {
// const CipOctet message [] = "\x34\x04\x02\x00\x0c\x00\xe9\xfd\x01\x02";
// const CipOctet *message_buffer = message;
// EipUint16 *extended_status = 0;
//
// GetElectronicKeyFormat4FromMessage((const CipOctet**)&message_buffer, key);
//
// CheckElectronicKeyData(4, key_data, extended_status);
//
//}