|
@@ -35,6 +35,19 @@ static UA_Server* makeTestSequence(void) {
|
|
UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
|
|
UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId,
|
|
parentReferenceNodeId, myIntegerName,
|
|
parentReferenceNodeId, myIntegerName,
|
|
UA_NODEID_NULL, vattr, NULL);
|
|
UA_NODEID_NULL, vattr, NULL);
|
|
|
|
+
|
|
|
|
+ /* DataSource VariableNode */
|
|
|
|
+ UA_VariableAttributes_init(&vattr);
|
|
|
|
+ UA_DataSource temperatureDataSource = (UA_DataSource) {
|
|
|
|
+ .handle = NULL, .read = NULL, .write = NULL};
|
|
|
|
+ vattr.description = UA_LOCALIZEDTEXT("en_US","temperature");
|
|
|
|
+ vattr.displayName = UA_LOCALIZEDTEXT("en_US","temperature");
|
|
|
|
+ UA_Server_addDataSourceVariableNode(server, UA_NODEID_STRING(1, "cpu.temperature"),
|
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
|
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
|
|
|
|
+ UA_QUALIFIEDNAME(1, "cpu temperature"),
|
|
|
|
+ UA_NODEID_NULL, vattr, temperatureDataSource, NULL);
|
|
|
|
+
|
|
|
|
|
|
/* VariableNode with array */
|
|
/* VariableNode with array */
|
|
UA_VariableAttributes_init(&vattr);
|
|
UA_VariableAttributes_init(&vattr);
|
|
@@ -579,6 +592,23 @@ START_TEST(ReadSingleAttributeUserExecutableWithoutTimestamp) {
|
|
#endif
|
|
#endif
|
|
} END_TEST
|
|
} END_TEST
|
|
|
|
|
|
|
|
+START_TEST(ReadSingleDataSourceAttributeValueWithoutTimestamp) {
|
|
|
|
+ UA_Server *server = makeTestSequence();
|
|
|
|
+ UA_DataValue resp;
|
|
|
|
+ UA_DataValue_init(&resp);
|
|
|
|
+ UA_ReadRequest rReq;
|
|
|
|
+ UA_ReadRequest_init(&rReq);
|
|
|
|
+ rReq.nodesToRead = UA_ReadValueId_new();
|
|
|
|
+ rReq.nodesToReadSize = 1;
|
|
|
|
+ rReq.nodesToRead[0].nodeId = UA_NODEID_STRING_ALLOC(1, "cpu.temperature");
|
|
|
|
+ rReq.nodesToRead[0].attributeId = UA_ATTRIBUTEID_VALUE;
|
|
|
|
+ Service_Read_single(server, &adminSession, UA_TIMESTAMPSTORETURN_NEITHER, &rReq.nodesToRead[0], &resp);
|
|
|
|
+ ck_assert_int_eq(UA_STATUSCODE_BADINTERNALERROR, resp.status);
|
|
|
|
+ UA_Server_delete(server);
|
|
|
|
+ UA_ReadRequest_deleteMembers(&rReq);
|
|
|
|
+ UA_DataValue_deleteMembers(&resp);
|
|
|
|
+} END_TEST
|
|
|
|
+
|
|
/* Tests for writeValue method */
|
|
/* Tests for writeValue method */
|
|
|
|
|
|
START_TEST(WriteSingleAttributeNodeId) {
|
|
START_TEST(WriteSingleAttributeNodeId) {
|
|
@@ -908,6 +938,20 @@ START_TEST(WriteSingleAttributeUserExecutable) {
|
|
UA_Server_delete(server);
|
|
UA_Server_delete(server);
|
|
} END_TEST
|
|
} END_TEST
|
|
|
|
|
|
|
|
+START_TEST(WriteSingleDataSourceAttributeValue) {
|
|
|
|
+ UA_Server *server = makeTestSequence();
|
|
|
|
+ UA_WriteValue wValue;
|
|
|
|
+ UA_WriteValue_init(&wValue);
|
|
|
|
+ UA_Int32 testValue = 0;
|
|
|
|
+ UA_Variant_setScalar(&wValue.value.value, &testValue, &UA_TYPES[UA_TYPES_INT32]);
|
|
|
|
+ wValue.nodeId = UA_NODEID_STRING(1, "cpu.temperature");
|
|
|
|
+ wValue.attributeId = UA_ATTRIBUTEID_VALUE;
|
|
|
|
+ wValue.value.hasValue = UA_TRUE;
|
|
|
|
+ UA_StatusCode retval = Service_Write_single(server, &adminSession, &wValue);
|
|
|
|
+ ck_assert_int_eq(retval, UA_STATUSCODE_BADWRITENOTSUPPORTED);
|
|
|
|
+ UA_Server_delete(server);
|
|
|
|
+} END_TEST
|
|
|
|
+
|
|
START_TEST(numericRange) {
|
|
START_TEST(numericRange) {
|
|
UA_NumericRange range;
|
|
UA_NumericRange range;
|
|
const UA_String str = (UA_String){9, (UA_Byte*)"1:2,0:3,5"};
|
|
const UA_String str = (UA_String){9, (UA_Byte*)"1:2,0:3,5"};
|
|
@@ -950,6 +994,7 @@ static Suite * testSuite_services_attributes(void) {
|
|
tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeHistorizingWithoutTimestamp);
|
|
tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeHistorizingWithoutTimestamp);
|
|
tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeExecutableWithoutTimestamp);
|
|
tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeExecutableWithoutTimestamp);
|
|
tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeUserExecutableWithoutTimestamp);
|
|
tcase_add_test(tc_readSingleAttributes, ReadSingleAttributeUserExecutableWithoutTimestamp);
|
|
|
|
+ tcase_add_test(tc_readSingleAttributes, ReadSingleDataSourceAttributeValueWithoutTimestamp);
|
|
|
|
|
|
suite_add_tcase(s, tc_readSingleAttributes);
|
|
suite_add_tcase(s, tc_readSingleAttributes);
|
|
|
|
|
|
@@ -976,6 +1021,7 @@ static Suite * testSuite_services_attributes(void) {
|
|
tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeHistorizing);
|
|
tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeHistorizing);
|
|
tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeExecutable);
|
|
tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeExecutable);
|
|
tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeUserExecutable);
|
|
tcase_add_test(tc_writeSingleAttributes, WriteSingleAttributeUserExecutable);
|
|
|
|
+ tcase_add_test(tc_writeSingleAttributes, WriteSingleDataSourceAttributeValue);
|
|
|
|
|
|
suite_add_tcase(s, tc_writeSingleAttributes);
|
|
suite_add_tcase(s, tc_writeSingleAttributes);
|
|
|
|
|