Преглед на файлове

Add additional unit tests for subscription

Stefan Profanter преди 7 години
родител
ревизия
6c1672ea22
променени са 1 файла, в които са добавени 209 реда и са изтрити 1 реда
  1. 209 1
      tests/check_services_subscriptions.c

+ 209 - 1
tests/check_services_subscriptions.c

@@ -23,6 +23,9 @@ static void teardown(void) {
     UA_Server_delete(server);
 }
 
+UA_UInt32 subscriptionId;
+UA_UInt32 monitoredItemId;
+
 START_TEST(Server_createSubscription) {
     /* Create a subscription */
     UA_CreateSubscriptionRequest request;
@@ -34,10 +37,89 @@ START_TEST(Server_createSubscription) {
 
     Service_CreateSubscription(server, &adminSession, &request, &response);
     ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
-    UA_UInt32 subscriptionId = response.subscriptionId;
+    subscriptionId = response.subscriptionId;
 
     UA_CreateSubscriptionResponse_deleteMembers(&response);
+}
+END_TEST
+
+START_TEST(Server_modifySubscription) {
+    UA_ModifySubscriptionRequest request;
+    UA_ModifySubscriptionRequest_init(&request);
+    request.subscriptionId = subscriptionId;
+    // just some arbitrary numbers to test. They have no specific reason
+    request.requestedPublishingInterval = 100; // in ms
+    request.requestedLifetimeCount = 1000;
+    request.requestedMaxKeepAliveCount = 1000;
+    request.maxNotificationsPerPublish = 1;
+    request.priority = 10;
+        
+
+    UA_ModifySubscriptionResponse response;
+    UA_ModifySubscriptionResponse_init(&response);
+
+    Service_ModifySubscription(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
+
+    UA_ModifySubscriptionResponse_deleteMembers(&response);
+}
+END_TEST
+
+START_TEST(Server_setPublishingMode) {
+    UA_SetPublishingModeRequest request;
+    UA_SetPublishingModeRequest_init(&request);
+    request.publishingEnabled = UA_TRUE;
+    request.subscriptionIdsSize = 1;
+    request.subscriptionIds = &subscriptionId;
+
+    UA_SetPublishingModeResponse response;
+    UA_SetPublishingModeResponse_init(&response);
+
+    Service_SetPublishingMode(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
+    ck_assert_uint_eq(response.resultsSize, 1);
+    ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
+
+    UA_SetPublishingModeResponse_deleteMembers(&response);
+}
+END_TEST
+
+START_TEST(Server_republish) {
+    UA_RepublishRequest request;
+    UA_RepublishRequest_init(&request);
+    request.subscriptionId = subscriptionId;
+    request.retransmitSequenceNumber = 0;
 
+    UA_RepublishResponse response;
+    UA_RepublishResponse_init(&response);
+
+    Service_Republish(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_BADMESSAGENOTAVAILABLE);
+
+    UA_RepublishResponse_deleteMembers(&response);
+
+}
+END_TEST
+
+
+START_TEST(Server_republish_invalid) {
+    UA_RepublishRequest request;
+    UA_RepublishRequest_init(&request);
+    request.subscriptionId = subscriptionId;
+    request.retransmitSequenceNumber = 0;
+
+    UA_RepublishResponse response;
+    UA_RepublishResponse_init(&response);
+
+    Service_Republish(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID);
+
+    UA_RepublishResponse_deleteMembers(&response);
+
+}
+END_TEST
+
+START_TEST(Server_deleteSubscription) {
     /* Remove the subscription */
     UA_DeleteSubscriptionsRequest del_request;
     UA_DeleteSubscriptionsRequest_init(&del_request);
@@ -108,6 +190,7 @@ START_TEST(Server_publishCallback) {
     UA_DeleteSubscriptionsResponse_init(&del_response);
 
     Service_DeleteSubscriptions(server, &adminSession, &del_request, &del_response);
+    ck_assert_uint_eq(del_response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(del_response.resultsSize, 2);
     ck_assert_uint_eq(del_response.results[0], UA_STATUSCODE_GOOD);
     ck_assert_uint_eq(del_response.results[1], UA_STATUSCODE_GOOD);
@@ -116,13 +199,138 @@ START_TEST(Server_publishCallback) {
 }
 END_TEST
 
+START_TEST(Server_createMonitoredItems) {
+
+    UA_CreateMonitoredItemsRequest request;
+    UA_CreateMonitoredItemsRequest_init(&request);
+    request.subscriptionId = subscriptionId;
+    request.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
+    UA_MonitoredItemCreateRequest item;
+    UA_MonitoredItemCreateRequest_init(&item);
+    UA_ReadValueId rvi;
+    UA_ReadValueId_init(&rvi);
+    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
+    rvi.attributeId = UA_ATTRIBUTEID_BROWSENAME;
+    rvi.indexRange = UA_STRING_NULL;
+    item.itemToMonitor = rvi;
+    item.monitoringMode = UA_MONITORINGMODE_REPORTING;
+    UA_MonitoringParameters params;
+    UA_MonitoringParameters_init(&params);
+    item.requestedParameters = params;
+    request.itemsToCreateSize = 1;
+    request.itemsToCreate = &item;
+
+
+    UA_CreateMonitoredItemsResponse response;
+    UA_CreateMonitoredItemsResponse_init(&response);
+
+    Service_CreateMonitoredItems(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
+    ck_assert_uint_eq(response.resultsSize, 1);
+    ck_assert_uint_eq(response.results[0].statusCode, UA_STATUSCODE_GOOD);
+
+    monitoredItemId = response.results[0].monitoredItemId;
+
+    UA_MonitoredItemCreateRequest_deleteMembers(&item);
+
+    UA_CreateMonitoredItemsResponse_deleteMembers(&response);
+}
+END_TEST
+
+START_TEST(Server_modifyMonitoredItems) {
+    UA_ModifyMonitoredItemsRequest request;
+    UA_ModifyMonitoredItemsRequest_init(&request);
+    request.subscriptionId = subscriptionId;
+    request.timestampsToReturn = UA_TIMESTAMPSTORETURN_SERVER;
+    UA_MonitoredItemModifyRequest item;
+    UA_MonitoredItemModifyRequest_init(&item);
+    UA_ReadValueId rvi;
+    UA_ReadValueId_init(&rvi);
+    rvi.nodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER);
+    rvi.attributeId = UA_ATTRIBUTEID_DESCRIPTION;
+    rvi.indexRange = UA_STRING_NULL;
+    item.monitoredItemId = monitoredItemId;
+    UA_MonitoringParameters params;
+    UA_MonitoringParameters_init(&params);
+    item.requestedParameters = params;
+    request.itemsToModifySize = 1;
+    request.itemsToModify = &item;
+
+
+    UA_ModifyMonitoredItemsResponse response;
+    UA_ModifyMonitoredItemsResponse_init(&response);
+
+    Service_ModifyMonitoredItems(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
+    ck_assert_uint_eq(response.resultsSize, 1);
+    ck_assert_uint_eq(response.results[0].statusCode, UA_STATUSCODE_GOOD);
+
+    UA_MonitoredItemModifyRequest_deleteMembers(&item);
+
+    UA_ModifyMonitoredItemsResponse_deleteMembers(&response);
+}
+END_TEST
+
+START_TEST(Server_setMonitoringMode) {
+    UA_SetMonitoringModeRequest request;
+    UA_SetMonitoringModeRequest_init(&request);
+    request.subscriptionId = subscriptionId;
+    request.monitoringMode = UA_MONITORINGMODE_DISABLED;
+    request.monitoredItemIdsSize = 1;
+    request.monitoredItemIds = &monitoredItemId;
+
+    UA_SetMonitoringModeResponse response;
+    UA_SetMonitoringModeResponse_init(&response);
+
+    Service_SetMonitoringMode(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
+    ck_assert_uint_eq(response.resultsSize, 1);
+    ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
+
+
+    UA_SetMonitoringModeResponse_deleteMembers(&response);
+}
+END_TEST
+
+START_TEST(Server_deleteMonitoredItems) {
+    UA_DeleteMonitoredItemsRequest request;
+    UA_DeleteMonitoredItemsRequest_init(&request);
+    request.subscriptionId = subscriptionId;
+    request.monitoredItemIdsSize = 1;
+    request.monitoredItemIds = &monitoredItemId;
+
+    UA_DeleteMonitoredItemsResponse response;
+    UA_DeleteMonitoredItemsResponse_init(&response);
+
+    Service_DeleteMonitoredItems(server, &adminSession, &request, &response);
+    ck_assert_uint_eq(response.responseHeader.serviceResult, UA_STATUSCODE_GOOD);
+    ck_assert_uint_eq(response.resultsSize, 1);
+    ck_assert_uint_eq(response.results[0], UA_STATUSCODE_GOOD);
+
+
+    UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
+
+}
+END_TEST
+
+
 static Suite* testSuite_Client(void) {
     Suite *s = suite_create("Server Subscription");
     TCase *tc_server = tcase_create("Server Subscription Basic");
     tcase_add_checked_fixture(tc_server, setup, teardown);
     tcase_add_test(tc_server, Server_createSubscription);
+    tcase_add_test(tc_server, Server_modifySubscription);
+    tcase_add_test(tc_server, Server_setPublishingMode);
+    tcase_add_test(tc_server, Server_createMonitoredItems);
+    tcase_add_test(tc_server, Server_modifyMonitoredItems);
+    tcase_add_test(tc_server, Server_setMonitoringMode);
+    tcase_add_test(tc_server, Server_deleteMonitoredItems);
+    tcase_add_test(tc_server, Server_republish);
+    tcase_add_test(tc_server, Server_deleteSubscription);
+    tcase_add_test(tc_server, Server_republish_invalid);
     tcase_add_test(tc_server, Server_publishCallback);
     suite_add_tcase(s, tc_server);
+
     return s;
 }