Update module to 2016-11-18 Gateway release
This commit is contained in:
Родитель
109edf94f3
Коммит
b68d8a3eba
|
@ -6,10 +6,10 @@ Using this module, developers can build Azure IoT Gateway solutions with Modbus
|
|||
Visit http://azure.com/iotdev to learn more about developing applications for Azure IoT.
|
||||
|
||||
## Azure IoT Gateway SDK compatibility
|
||||
Current version of the module is targeted for the Azure IoT Gateway SDK 2016-11-02 version.
|
||||
Current version of the module is targeted for the Azure IoT Gateway SDK 2016-11-18 version.
|
||||
Use the following script to download the compatible version Azure IoT Gateway SDK.
|
||||
```
|
||||
git clone -b "2016-11-02" --recursive https://github.com/Azure/azure-iot-gateway-sdk.git
|
||||
git clone -b "2016-11-18" --recursive https://github.com/Azure/azure-iot-gateway-sdk.git
|
||||
```
|
||||
|
||||
## Operating system compatibility
|
||||
|
|
|
@ -86,9 +86,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "logger",
|
||||
"loading args": {
|
||||
"module path": "../../modules/logger/liblogger.so"
|
||||
"name": "logger",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/logger/liblogger.so"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"filename": "log.txt"
|
||||
|
@ -100,9 +103,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "modbus_read",
|
||||
"loading args": {
|
||||
"module path": "../../modules/modbus_read/libmodbus_read.so"
|
||||
"name": "modbus_read",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/modbus_read/libmodbus_read.so"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
@ -127,9 +133,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "IoTHub",
|
||||
"loading args": {
|
||||
"module path": "../../modules/iothub/libiothub.so"
|
||||
"name": "IoTHub",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/iothub/libiothub.so"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"IoTHubName": "YOUR IOT HUB NAME",
|
||||
|
@ -143,9 +152,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "mapping",
|
||||
"loading args": {
|
||||
"module path": "../../modules/identitymap/libidentity_map.so"
|
||||
"name": "mapping",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/identitymap/libidentity_map.so"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
@ -163,9 +175,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "logger",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\logger\\Debug\\logger.dll"
|
||||
"name": "logger",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\logger\\Debug\\logger.dll"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"filename": "log.txt"
|
||||
|
@ -177,9 +192,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "modbus_read",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\modbus_read\\Debug\\modbus_read.dll"
|
||||
"name": "modbus_read",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\modbus_read\\Debug\\modbus_read.dll"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
@ -204,9 +222,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "IoTHub",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\iothub\\Debug\\iothub.dll"
|
||||
"name": "IoTHub",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\iothub\\Debug\\iothub.dll"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"IoTHubName": "YOUR IOT HUB NAME",
|
||||
|
@ -220,9 +241,12 @@ of this sample.
|
|||
|
||||
```json
|
||||
{
|
||||
"module name": "mapping",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\identitymap\\Debug\\identity_map.dll"
|
||||
"name": "mapping",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\identitymap\\Debug\\identity_map.dll"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
|
|
@ -26,11 +26,11 @@ typedef struct MODBUS_READ_CONFIG_TAG
|
|||
int time_check;
|
||||
}MODBUS_READ_CONFIG;
|
||||
```
|
||||
## ModbusRead_CreateFromJson
|
||||
## ModbusRead_ParseConfigurationFromJson
|
||||
```c
|
||||
MODULE_HANDLE ModbusRead_CreateFromJson(BROKER_HANDLE broker, const void* configuration);
|
||||
void* ModbusRead_ParseConfigurationFromJson(const void* configuration);
|
||||
```
|
||||
Creates a new MODBUS_READ module instance. `configuration` is a pointer to a `const char*` that contains a json object as supplied by `Gateway_CreateFromJson`.
|
||||
Creates a new configuration for MODBUS_READ module instance from a JSON string.`configuration` is a pointer to a `const char*` that contains a json object as supplied by `Gateway_CreateFromJson`.
|
||||
By convention the json object should contain the target modbus server and related read operation settings.
|
||||
|
||||
### Expected Arguments
|
||||
|
@ -59,9 +59,12 @@ The following Gateway config file describes an instance of the "modbus_read" mod
|
|||
"modules" :
|
||||
[
|
||||
{
|
||||
"module name" : "modbus_read",
|
||||
"loading args": {
|
||||
"module path": "modbus_read.dll"
|
||||
"name" : "modbus_read",
|
||||
"loader": {
|
||||
"type": "native",
|
||||
"entrypoint": {
|
||||
"module path" : "modbus_read.dll"
|
||||
}
|
||||
},
|
||||
"args" :
|
||||
{
|
||||
|
@ -83,6 +86,7 @@ The following Gateway config file describes an instance of the "modbus_read" mod
|
|||
}
|
||||
```
|
||||
|
||||
|
||||
**SRS_MODBUS_READ_JSON_99_021: [** If `broker` is NULL then `ModbusRead_CreateFromJson` shall fail and return NULL. **]**
|
||||
|
||||
**SRS_MODBUS_READ_JSON_99_023: [** If `configuration` is NULL then `ModbusRead_CreateFromJson` shall fail and return NULL. **]**
|
||||
|
@ -125,6 +129,7 @@ The following Gateway config file describes an instance of the "modbus_read" mod
|
|||
|
||||
**SRS_MODBUS_READ_JSON_99_045: [** `ModbusRead_CreateFromJson` shall walk through each object of the array. **]**
|
||||
|
||||
|
||||
## ModbusRead_Create
|
||||
```c
|
||||
MODULE_HANDLE ModbusRead_Create(BROKER_HANDLE broker, const void* configuration);
|
||||
|
@ -139,11 +144,13 @@ Creates a new `MODBUS_READ` instance. `configuration` is a pointer to a `MODBUS_
|
|||
|
||||
**SRS_MODBUS_READ_99_008: [**Otherwise `ModbusRead_Create` shall return a non-NULL pointer.**]**
|
||||
|
||||
|
||||
## ModbusRead_Receive
|
||||
```c
|
||||
void ModbusRead_Receive(MODULE_HANDLE moduleHandle, MESSAGE_HANDLE messageHandle);
|
||||
```
|
||||
|
||||
|
||||
**SRS_MODBUS_READ_99_009: [**If `moduleHandle` is NULL then `ModbusRead_Receive` shall fail and return.**]**
|
||||
|
||||
**SRS_MODBUS_READ_99_010: [**If `messageHandle` is NULL then `ModbusRead_Receive` shall fail and return.**]**
|
||||
|
@ -159,6 +166,13 @@ void ModbusRead_Receive(MODULE_HANDLE moduleHandle, MESSAGE_HANDLE messageHandle
|
|||
**SRS_MODBUS_READ_99_018: [**If content of `messageHandle` is not a JSON value, then `ModbusRead_Receive` shall fail and return NULL.**]**
|
||||
|
||||
|
||||
## ModbusRead_FreeConfiguration
|
||||
```c
|
||||
void ModbusRead_FreeConfiguration(void* configuration);
|
||||
```
|
||||
**SRS_MODBUS_READ_99_006: [**`ModbusRead_FreeConfiguration` shall do nothing, cleanup is done in `ModbusRead_Destroy`.**]**
|
||||
|
||||
|
||||
## ModbusRead_Destroy
|
||||
```c
|
||||
void ModbusRead_Destroy(MODULE_HANDLE moduleHandle);
|
||||
|
|
|
@ -51,6 +51,68 @@ static void modbus_config_cleanup(MODBUS_READ_CONFIG * config)
|
|||
free(temp_config);
|
||||
}
|
||||
}
|
||||
static bool isValidMac(char* mac)
|
||||
{
|
||||
//format XX:XX:XX:XX:XX:XX
|
||||
bool ret = true;
|
||||
int len = strlen(mac);
|
||||
|
||||
if (len != MACSTRLEN)
|
||||
{
|
||||
LogError("invalid mac length: %d", len);
|
||||
ret = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int mac_char = 0; mac_char < MACSTRLEN; mac_char++)
|
||||
{
|
||||
if (((mac_char + 1) % 3 == 0))
|
||||
{
|
||||
if (mac[mac_char] != ':')
|
||||
{
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!((mac[mac_char] >= '0' && mac[mac_char] <= '9') || (mac[mac_char] >= 'a' && mac[mac_char] <= 'f') || (mac[mac_char] >= 'A' && mac[mac_char] <= 'F')))
|
||||
{
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool isValidServer(char* server)
|
||||
{
|
||||
//ipv4 format XXX.XXX.XXX.XXX
|
||||
//serial port format COMX
|
||||
bool ret = true;
|
||||
|
||||
if (memcmp(server, "COM", 3) == 0)
|
||||
{
|
||||
if (0 > atoi(server + 3))
|
||||
{
|
||||
LogError("invalid COM port: %s", server);
|
||||
ret = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (inet_addr(server) == INADDR_NONE)
|
||||
{
|
||||
LogError("invalid ipv4: %s", server);
|
||||
ret = false;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static bool addOneOperation(MODBUS_READ_OPERATION * operation, JSON_Object * operation_obj)
|
||||
{
|
||||
|
@ -106,13 +168,13 @@ static bool addOneServer(MODBUS_READ_CONFIG * config, JSON_Object * arg_obj)
|
|||
const char* mac_address = json_object_get_string(arg_obj, "macAddress");
|
||||
const char* interval = json_object_get_string(arg_obj, "interval");
|
||||
const char* device_type = json_object_get_string(arg_obj, "deviceType");
|
||||
if (server_str == NULL)
|
||||
if (server_str == NULL || !isValidServer(server_str))
|
||||
{
|
||||
/*Codes_SRS_MODBUS_READ_JSON_99_034: [ If the `args` object does not contain a value named "serverConnectionString" then ModbusRead_CreateFromJson shall fail and return NULL. ]*/
|
||||
LogError("Did not find expected %s configuration", "serverConnectionString");
|
||||
result = false;
|
||||
}
|
||||
else if (mac_address == NULL)
|
||||
else if (mac_address == NULL || !isValidMac(mac_address))
|
||||
{
|
||||
/*Codes_SRS_MODBUS_READ_JSON_99_035: [ If the `args` object does not contain a value named "macAddress" then ModbusRead_CreateFromJson shall fail and return NULL. ]*/
|
||||
LogError("Did not find expected %s configuration", "macAddress");
|
||||
|
@ -150,68 +212,6 @@ static bool addOneServer(MODBUS_READ_CONFIG * config, JSON_Object * arg_obj)
|
|||
return result;
|
||||
}
|
||||
|
||||
static bool isValidMac(char* mac)
|
||||
{
|
||||
//format XX:XX:XX:XX:XX:XX
|
||||
bool ret = true;
|
||||
int len = strlen(mac);
|
||||
|
||||
if (len != MACSTRLEN)
|
||||
{
|
||||
LogError("invalid mac length: %d", len);
|
||||
ret = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int mac_char = 0; mac_char < MACSTRLEN; mac_char++)
|
||||
{
|
||||
if (((mac_char + 1) % 3 == 0) )
|
||||
{
|
||||
if (mac[mac_char] != ':')
|
||||
{
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!((mac[mac_char] >= '0' && mac[mac_char] <= '9') || (mac[mac_char] >= 'a' && mac[mac_char] <= 'f') || (mac[mac_char] >= 'A' && mac[mac_char] <= 'F')))
|
||||
{
|
||||
ret = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static bool isValidServer(char* server)
|
||||
{
|
||||
//ipv4 format XXX.XXX.XXX.XXX
|
||||
//serial port format COMX
|
||||
bool ret = true;
|
||||
|
||||
if (memcmp(server, "COM", 3) == 0)
|
||||
{
|
||||
if (0 > atoi(server + 3))
|
||||
{
|
||||
LogError("invalid COM port: %s", server);
|
||||
ret = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (inet_addr(server) == INADDR_NONE)
|
||||
{
|
||||
LogError("invalid ipv4: %s", server);
|
||||
ret = false;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int get_crc(unsigned char * message, int length, unsigned short * out)//refer to J.J. Lee's code
|
||||
{
|
||||
unsigned short crcFull = 0xFFFF;
|
||||
|
@ -806,58 +806,38 @@ static MODULE_HANDLE ModbusRead_Create(BROKER_HANDLE broker, const void* configu
|
|||
|
||||
MODBUS_READ_CONFIG *cur_config = (MODBUS_READ_CONFIG *)configuration;
|
||||
|
||||
while (cur_config)
|
||||
result = malloc(sizeof(MODBUSREAD_HANDLE_DATA));
|
||||
if (result == NULL)
|
||||
{
|
||||
if (!isValidMac(cur_config->mac_address))
|
||||
{
|
||||
LogError("invalid mac: %s", cur_config->mac_address);
|
||||
isValidConfig = false;
|
||||
break;
|
||||
}
|
||||
if (!isValidServer(cur_config->server_str))
|
||||
{
|
||||
LogError("invalid server: %s", cur_config->server_str);
|
||||
isValidConfig = false;
|
||||
break;
|
||||
}
|
||||
cur_config = cur_config->p_next;
|
||||
/*Codes_SRS_MODBUS_READ_99_007: [If ModbusRead_Create encounters any errors while creating the MODBUSREAD_HANDLE_DATA then it shall fail and return NULL.]*/
|
||||
LogError("unable to malloc");
|
||||
}
|
||||
|
||||
if (isValidConfig)
|
||||
else
|
||||
{
|
||||
result = malloc(sizeof(MODBUSREAD_HANDLE_DATA));
|
||||
if (result == NULL)
|
||||
result->lockHandle = Lock_Init();
|
||||
if (result->lockHandle == NULL)
|
||||
{
|
||||
/*Codes_SRS_MODBUS_READ_99_007: [If ModbusRead_Create encounters any errors while creating the MODBUSREAD_HANDLE_DATA then it shall fail and return NULL.]*/
|
||||
LogError("unable to malloc");
|
||||
LogError("unable to Lock_Init");
|
||||
free(result);
|
||||
result = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
result->lockHandle = Lock_Init();
|
||||
if (result->lockHandle == NULL)
|
||||
result->stopThread = 0;
|
||||
result->broker = broker;
|
||||
result->config = (MODBUS_READ_CONFIG *)configuration;
|
||||
if (ThreadAPI_Create(&result->threadHandle, modbusReadThread, result) != THREADAPI_OK)
|
||||
{
|
||||
LogError("unable to Lock_Init");
|
||||
LogError("failed to spawn a thread");
|
||||
(void)Lock_Deinit(result->lockHandle);
|
||||
free(result);
|
||||
result = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
result->stopThread = 0;
|
||||
result->broker = broker;
|
||||
result->config = (MODBUS_READ_CONFIG *)configuration;
|
||||
if (ThreadAPI_Create(&result->threadHandle, modbusReadThread, result) != THREADAPI_OK)
|
||||
{
|
||||
LogError("failed to spawn a thread");
|
||||
(void)Lock_Deinit(result->lockHandle);
|
||||
free(result);
|
||||
result = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*all is fine apparently*/
|
||||
}
|
||||
/*Codes_SRS_MODBUS_READ_99_008: [Otherwise ModbusRead_Create shall return a non - NULL pointer.]*/
|
||||
/*all is fine apparently*/
|
||||
}
|
||||
/*Codes_SRS_MODBUS_READ_99_008: [Otherwise ModbusRead_Create shall return a non - NULL pointer.]*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -984,18 +964,16 @@ static void ModbusRead_Receive(MODULE_HANDLE moduleHandle, MESSAGE_HANDLE messag
|
|||
/*Codes_SRS_MODBUS_READ_99_017 : [ModbusRead_Receive shall return.]*/
|
||||
}
|
||||
|
||||
static MODULE_HANDLE ModbusRead_CreateFromJson(BROKER_HANDLE broker, const void* configuration)
|
||||
static void* ModbusRead_ParseConfigurationFromJson(const void* configuration)
|
||||
{
|
||||
|
||||
MODULE_HANDLE result = NULL;
|
||||
/*Codes_SRS_MODBUS_READ_JSON_99_021: [ If broker is NULL then ModbusRead_CreateFromJson shall fail and return NULL. ]*/
|
||||
MODBUS_READ_CONFIG * result = NULL;
|
||||
/*Codes_SRS_MODBUS_READ_JSON_99_023: [ If configuration is NULL then ModbusRead_CreateFromJson shall fail and return NULL. ]*/
|
||||
if (
|
||||
(broker == NULL) ||
|
||||
(configuration == NULL)
|
||||
)
|
||||
{
|
||||
LogError("NULL parameter detected broker=%p configuration=%p", broker, configuration);
|
||||
LogError("NULL parameter detected configuration=%p", configuration);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1093,20 +1071,9 @@ static MODULE_HANDLE ModbusRead_CreateFromJson(BROKER_HANDLE broker, const void*
|
|||
if (!parse_fail)
|
||||
{
|
||||
/*Codes_SRS_MODBUS_READ_JSON_99_025: [ ModbusRead_CreateFromJson shall pass broker and the entire config to ModbusRead_Create. ]*/
|
||||
result = ModbusRead_Create(broker, prev_config);
|
||||
if (result == NULL)
|
||||
{
|
||||
/*Codes_SRS_MODBUS_READ_JSON_99_027: [ If ModbusRead_Create fails then ModbusRead_CreateFromJson shall fail and return NULL. ]*/
|
||||
/*return result "as is" - that is - NULL*/
|
||||
LogError("unable to Module_Create MODBUSREAD static");
|
||||
}
|
||||
else
|
||||
{
|
||||
/*Codes_SRS_MODBUS_READ_JSON_99_026: [ If ModbusRead_Create succeeds then ModbusRead_CreateFromJson shall succeed and return a non-NULL value. ]*/
|
||||
/*return result "as is" - that is - not NULL*/
|
||||
}
|
||||
result = prev_config;/*return result "as is" - that is - not NULL*/
|
||||
}
|
||||
if (result == NULL)
|
||||
else
|
||||
modbus_config_cleanup(prev_config);
|
||||
}
|
||||
json_value_free(json);
|
||||
|
@ -1115,11 +1082,16 @@ static MODULE_HANDLE ModbusRead_CreateFromJson(BROKER_HANDLE broker, const void*
|
|||
return result;
|
||||
}
|
||||
|
||||
static void ModbusRead_FreeConfiguration(void* configuration)
|
||||
{
|
||||
/*Codes_SRS_MODBUS_READ_99_006: [ ModbusRead_FreeConfiguration shall do nothing, cleanup is done in ModbusRead_Destroy. ]*/
|
||||
}
|
||||
static const MODULE_API_1 moduleInterface =
|
||||
{
|
||||
{MODULE_API_VERSION_1},
|
||||
|
||||
ModbusRead_CreateFromJson,
|
||||
ModbusRead_ParseConfigurationFromJson,
|
||||
ModbusRead_FreeConfiguration,
|
||||
ModbusRead_Create,
|
||||
ModbusRead_Destroy,
|
||||
ModbusRead_Receive,
|
||||
|
|
|
@ -57,7 +57,8 @@ static MICROMOCK_MUTEX_HANDLE g_testByTest;
|
|||
static MICROMOCK_GLOBAL_SEMAPHORE_HANDLE g_dllByDll;
|
||||
|
||||
/*these are simple cached variables*/
|
||||
static pfModule_CreateFromJson Module_CreateFromJson = NULL; /*gets assigned in TEST_SUITE_INITIALIZE*/
|
||||
static pfModule_ParseConfigurationFromJson Module_ParseConfigurationFromJson = NULL; /*gets assigned in TEST_SUITE_INITIALIZE*/
|
||||
static pfModule_FreeConfiguration Module_FreeConfiguration = NULL; /*gets assigned in TEST_SUITE_INITIALIZE*/
|
||||
static pfModule_Create Module_Create = NULL; /*gets assigned in TEST_SUITE_INITIALIZE*/
|
||||
static pfModule_Destroy Module_Destroy = NULL; /*gets assigned in TEST_SUITE_INITIALIZE*/
|
||||
static pfModule_Receive Module_Receive = NULL; /*gets assigned in TEST_SUITE_INITIALIZE*/
|
||||
|
@ -458,7 +459,8 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
ASSERT_IS_NOT_NULL(g_testByTest);
|
||||
|
||||
const MODULE_API* apis = Module_GetApi(MODULE_API_VERSION_1);
|
||||
Module_CreateFromJson = MODULE_CREATE_FROM_JSON(apis);
|
||||
Module_ParseConfigurationFromJson = MODULE_PARSE_CONFIGURATION_FROM_JSON(apis);
|
||||
Module_FreeConfiguration = MODULE_FREE_CONFIGURATION(apis);
|
||||
Module_Create = MODULE_CREATE(apis);
|
||||
Module_Destroy = MODULE_DESTROY(apis);
|
||||
Module_Receive = MODULE_RECEIVE(apis);
|
||||
|
@ -498,34 +500,20 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
///Act
|
||||
const MODULE_API* apis = Module_GetApi(MODULE_API_VERSION_1);
|
||||
|
||||
///assert
|
||||
ASSERT_IS_NOT_NULL(apis);
|
||||
///Assert
|
||||
ASSERT_IS_NOT_NULL(MODULE_CREATE_FROM_JSON(apis));
|
||||
ASSERT_IS_NOT_NULL(MODULE_CREATE(apis));
|
||||
ASSERT_IS_NOT_NULL(MODULE_DESTROY(apis));
|
||||
ASSERT_IS_NOT_NULL(MODULE_RECEIVE(apis));
|
||||
ASSERT_IS_TRUE(MODULE_PARSE_CONFIGURATION_FROM_JSON(apis) != NULL);
|
||||
ASSERT_IS_TRUE(MODULE_FREE_CONFIGURATION(apis) != NULL);
|
||||
ASSERT_IS_TRUE(MODULE_CREATE(apis));
|
||||
ASSERT_IS_TRUE(MODULE_DESTROY(apis));
|
||||
ASSERT_IS_TRUE(MODULE_RECEIVE(apis));
|
||||
|
||||
///Ablution
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_021: [ If broker is NULL then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_Bus_Null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
BROKER_HANDLE broker = NULL;
|
||||
char config;
|
||||
|
||||
///Act
|
||||
auto n = Module_CreateFromJson(broker, &config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
|
||||
///Ablution
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_023: [ If configuration is NULL then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_Config_Null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_023: [ If configuration is NULL then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_Config_Null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -534,7 +522,7 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
char* config = NULL;
|
||||
|
||||
///Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
|
@ -542,11 +530,11 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
///Ablution
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_025: [** `ModbusRead_CreateFromJson` shall pass `broker` and the entire config to `ModbusRead_Create`. ]
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_026: [** If `ModbusRead_Create` succeeds then `ModbusRead_CreateFromJson` shall succeed and return a non - NULL value. ]
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_041: [** `ModbusRead_CreateFromJson` shall use "serverConnectionString", "macAddress", and "interval" values as the fields for an MODBUS_READ_CONFIG structure and add this element to the link list. ]
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_042: [** `ModbusRead_CreateFromJson` shall use "unitId", "functionCode", "startingAddress" and "length" values as the fields for an MODBUS_READ_OPERATION structure and add this element to the link list. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_Success)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_025: [** `ModbusRead_ParseConfigurationFromJson` shall pass `broker` and the entire config to `ModbusRead_Create`. ]
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_026: [** If `ModbusRead_Create` succeeds then `ModbusRead_ParseConfigurationFromJson` shall succeed and return a non - NULL value. ]
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_041: [** `ModbusRead_ParseConfigurationFromJson` shall use "serverConnectionString", "macAddress", and "interval" values as the fields for an MODBUS_READ_CONFIG structure and add this element to the link list. ]
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_042: [** `ModbusRead_ParseConfigurationFromJson` shall use "unitId", "functionCode", "startingAddress" and "length" values as the fields for an MODBUS_READ_OPERATION structure and add this element to the link list. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_Success)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -597,28 +585,19 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "length"))
|
||||
.IgnoreArgument(1);
|
||||
|
||||
// ModbusRead_Create
|
||||
STRICT_EXPECTED_CALL(mocks, gballoc_malloc(IGNORED_NUM_ARG))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, Lock_Init());
|
||||
STRICT_EXPECTED_CALL(mocks, ThreadAPI_Create(IGNORED_PTR_ARG, IGNORED_PTR_ARG, IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2)
|
||||
.IgnoreArgument(3);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NOT_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
auto handle = Module_Create(broker, n);
|
||||
Module_Destroy(handle);
|
||||
}
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_045: [ ModbusRead_CreateFromJson shall walk through each object of the array. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_Success_with_2x2_element_array)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_045: [ ModbusRead_ParseConfigurationFromJson shall walk through each object of the array. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_Success_with_2x2_element_array)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -736,17 +715,8 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
}
|
||||
}
|
||||
|
||||
// ModbusRead_Create
|
||||
STRICT_EXPECTED_CALL(mocks, gballoc_malloc(IGNORED_NUM_ARG))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, Lock_Init());
|
||||
STRICT_EXPECTED_CALL(mocks, ThreadAPI_Create(IGNORED_PTR_ARG, IGNORED_PTR_ARG, IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2)
|
||||
.IgnoreArgument(3);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NOT_NULL(n);
|
||||
|
@ -754,79 +724,12 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
auto handle = Module_Create(broker, n);
|
||||
Module_Destroy(handle);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_027: [ If ModbusRead_Create fails then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_Create_failed_returns_null)
|
||||
{
|
||||
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
unsigned char fake;
|
||||
BROKER_HANDLE broker = (BROKER_HANDLE)&fake;
|
||||
const char* config = "pretend this is a valid JSON string";
|
||||
|
||||
STRICT_EXPECTED_CALL(mocks, json_parse_string(config));
|
||||
STRICT_EXPECTED_CALL(mocks, json_value_free(IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1);
|
||||
|
||||
STRICT_EXPECTED_CALL(mocks, json_value_get_array(IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_array_get_count(IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn((size_t)1);
|
||||
STRICT_EXPECTED_CALL(mocks, gballoc_malloc(IGNORED_NUM_ARG))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
.IgnoreArgument(1);
|
||||
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_array(IGNORED_PTR_ARG, "operations"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_array_get_count(IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn((size_t)1);
|
||||
STRICT_EXPECTED_CALL(mocks, gballoc_malloc(IGNORED_NUM_ARG))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "unitId"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "functionCode"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "startingAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "length"))
|
||||
.IgnoreArgument(1);
|
||||
|
||||
// ModbusRead_Create will fail because earlier serverConnectionString is malformed
|
||||
STRICT_EXPECTED_CALL(mocks, gballoc_free(IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, gballoc_free(IGNORED_PTR_ARG))
|
||||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_043: [ If the 'malloc' for `config` fail, ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_malloc_config_failed_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_043: [ If the 'malloc' for `config` fail, ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_malloc_config_failed_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -847,19 +750,16 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1)
|
||||
.SetFailReturn((void*)NULL);
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_044: [ If the 'malloc' for `operation` fail, ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_malloc_operation_failed_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_044: [ If the 'malloc' for `operation` fail, ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_malloc_operation_failed_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -881,10 +781,12 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -900,19 +802,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1)
|
||||
.SetFailReturn((void*)NULL);
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_034: [ If the `args` object does not contain a value named "serverConnectionString" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_server_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_034: [ If the `args` object does not contain a value named "serverConnectionString" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_server_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -938,7 +838,8 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1)
|
||||
.SetFailReturn((const char*)NULL);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -947,19 +848,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_035: [ If the `args` object does not contain a value named "macAddress" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_macaddress_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_035: [ If the `args` object does not contain a value named "macAddress" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_macaddress_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -982,7 +881,8 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1)
|
||||
.SetFailReturn((const char*)NULL);
|
||||
|
@ -994,19 +894,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_036: [ If the `args` object does not contain a value named "interval" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_interval_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_036: [ If the `args` object does not contain a value named "interval" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_interval_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1028,10 +926,12 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1)
|
||||
.SetFailReturn((const char*)NULL);
|
||||
|
@ -1041,19 +941,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_046: [ If the `args` object does not contain a value named "deviceType" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_devicetype_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_046: [ If the `args` object does not contain a value named "deviceType" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_devicetype_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1075,10 +973,12 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -1088,19 +988,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_037 : [** If the `operations` object does not contain a value named "unitId" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_unitid_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_037 : [** If the `operations` object does not contain a value named "unitId" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_unitid_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1122,10 +1020,12 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -1155,19 +1055,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_038 : [** If the `operations` object does not contain a value named "functionCode" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_functioncode_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_038 : [** If the `operations` object does not contain a value named "functionCode" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_functioncode_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1189,10 +1087,12 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -1222,19 +1122,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_039 : [** If the `operations` object does not contain a value named "startingAddress" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_startaddress_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_039 : [** If the `operations` object does not contain a value named "startingAddress" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_startaddress_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1257,9 +1155,11 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -1289,19 +1189,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_040 : [** If the `operations` object does not contain a value named "length" then ModbusRead_CreateFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_length_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_040 : [** If the `operations` object does not contain a value named "length" then ModbusRead_ParseConfigurationFromJson shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_length_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1324,9 +1222,11 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -1356,19 +1256,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.IgnoreArgument(1);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_032: [ If the JSON value does not contain `args` array then `ModbusRead_CreateFromJson` shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_args_array_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_032: [ If the JSON value does not contain `args` array then `ModbusRead_ParseConfigurationFromJson` shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_args_array_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1385,19 +1283,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.SetFailReturn((JSON_Array*)NULL);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_033: [ If the JSON object of `args` array does not contain `operations` array then `ModbusRead_CreateFromJson` shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_no_operations_array_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_033: [ If the JSON object of `args` array does not contain `operations` array then `ModbusRead_ParseConfigurationFromJson` shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_no_operations_array_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1420,10 +1316,12 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
STRICT_EXPECTED_CALL(mocks, json_array_get_object(IGNORED_PTR_ARG, 0))
|
||||
.IgnoreArgument(1)
|
||||
.IgnoreArgument(2);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "serverConnectionString"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("COM1");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "macAddress"))
|
||||
.IgnoreArgument(1)
|
||||
.SetReturn("00:00:00:00:00:00");
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "interval"))
|
||||
.IgnoreArgument(1);
|
||||
STRICT_EXPECTED_CALL(mocks, json_object_get_string(IGNORED_PTR_ARG, "deviceType"))
|
||||
|
@ -1435,19 +1333,17 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.SetFailReturn((JSON_Array*)NULL);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
mocks.AssertActualAndExpectedCalls();
|
||||
|
||||
///Cleanup
|
||||
|
||||
Module_Destroy(n);
|
||||
}
|
||||
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_031: [ If configuration is not a JSON object, then `ModbusRead_CreateFromJson` shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_CreateFromJson_parse_fails_returns_null)
|
||||
//Tests_SRS_MODBUS_READ_JSON_99_031: [ If configuration is not a JSON object, then `ModbusRead_ParseConfigurationFromJson` shall fail and return NULL. ]
|
||||
TEST_FUNCTION(ModbusRead_ParseConfigurationFromJson_parse_fails_returns_null)
|
||||
{
|
||||
///Arrange
|
||||
CModbusreadMocks mocks;
|
||||
|
@ -1459,7 +1355,7 @@ BEGIN_TEST_SUITE(modbus_read_unittests)
|
|||
.SetFailReturn((JSON_Value*)NULL);
|
||||
|
||||
//Act
|
||||
auto n = Module_CreateFromJson(broker, config);
|
||||
auto n = Module_ParseConfigurationFromJson(config);
|
||||
|
||||
///Assert
|
||||
ASSERT_IS_NULL(n);
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
{
|
||||
"modules": [
|
||||
{
|
||||
"module name": "IoTHub",
|
||||
"loading args": {
|
||||
"module path": "../../modules/iothub/libiothub.so"
|
||||
"name": "IoTHub",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/iothub/libiothub.so"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"IoTHubName": "YOUR IOT HUB NAME",
|
||||
|
@ -12,9 +15,12 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"module name": "mapping",
|
||||
"loading args": {
|
||||
"module path": "../../modules/identitymap/libidentity_map.so"
|
||||
"name": "mapping",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/identitymap/libidentity_map.so"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
@ -25,18 +31,24 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"module name": "logger",
|
||||
"loading args": {
|
||||
"module path": "../../modules/logger/liblogger.so"
|
||||
"name": "logger",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/logger/liblogger.so"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"filename": "log.txt"
|
||||
}
|
||||
},
|
||||
{
|
||||
"module name": "modbus_read",
|
||||
"loading args": {
|
||||
"module path": "../../modules/modbus_read/libmodbus_read.so"
|
||||
"name": "modbus_read",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "../../modules/modbus_read/libmodbus_read.so"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
{
|
||||
"modules": [
|
||||
{
|
||||
"module name": "IoTHub",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\iothub\\Debug\\iothub.dll"
|
||||
"name": "IoTHub",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\iothub\\Debug\\iothub.dll"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"IoTHubName": "YOUR IOT HUB NAME",
|
||||
|
@ -12,9 +15,12 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"module name": "mapping",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\identitymap\\Debug\\identity_map.dll"
|
||||
"name": "mapping",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\identitymap\\Debug\\identity_map.dll"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
@ -25,18 +31,24 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"module name": "logger",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\logger\\Debug\\logger.dll"
|
||||
"name": "logger",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\logger\\Debug\\logger.dll"
|
||||
}
|
||||
},
|
||||
"args": {
|
||||
"filename": "log.txt"
|
||||
}
|
||||
},
|
||||
{
|
||||
"module name": "modbus_read",
|
||||
"loading args": {
|
||||
"module path": "..\\..\\..\\modules\\modbus_read\\Debug\\modbus_read.dll"
|
||||
"name": "modbus_read",
|
||||
"loader": {
|
||||
"name": "native",
|
||||
"entrypoint": {
|
||||
"module.path": "..\\..\\..\\modules\\modbus_read\\Debug\\modbus_read.dll"
|
||||
}
|
||||
},
|
||||
"args": [
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче