Skip to content

Commit

Permalink
Add a unit test to test for unknown node ids on create monitored items
Browse files Browse the repository at this point in the history
  • Loading branch information
locka99 committed Nov 24, 2019
1 parent 6421377 commit fed08b2
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
4 changes: 4 additions & 0 deletions server/src/subscriptions/subscription.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,10 @@ impl Subscription {
if !address_space.node_exists(&item_to_create.item_to_monitor.node_id) {
Self::monitored_item_create_error(StatusCode::BadNodeIdUnknown)
} else {

// TODO validate the attribute id for the type of node
// TODO validate the index range for the node

// Create a monitored item, if possible
let monitored_item_id = self.next_monitored_item_id;
match MonitoredItem::new(now, monitored_item_id, timestamps_to_return, item_to_create) {
Expand Down
24 changes: 24 additions & 0 deletions server/src/tests/services/monitored_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,30 @@ fn monitored_item_event_filter() {
assert_eq!(monitored_item.tick(&now, &address_space, false, false), TickResult::NoChange);
}

/// Test to ensure create monitored items returns an error for an unknown node id
#[test]
fn unknown_node_id() {
do_subscription_service_test(|server_state, session, address_space, ss: SubscriptionService, mis: MonitoredItemService| {
// Create subscription
let subscription_id = {
let request = create_subscription_request(0, 0);
let response: CreateSubscriptionResponse = supported_message_as!(ss.create_subscription(server_state, session, &request).unwrap(), CreateSubscriptionResponse);
response.subscription_id
};

let request = create_monitored_items_request(subscription_id, vec![
NodeId::new(1, var_name(1)),
NodeId::new(99, "Doesn't exist")
]);

let response: CreateMonitoredItemsResponse = supported_message_as!(mis.create_monitored_items(server_state, session, &address_space, &request).unwrap(), CreateMonitoredItemsResponse);
let results = response.results.unwrap();
assert_eq!(results.len(), 2);
assert_eq!(results.get(0).as_ref().unwrap().status_code, StatusCode::Good);
assert_eq!(results.get(1).as_ref().unwrap().status_code, StatusCode::BadNodeIdUnknown);
});
}

#[test]
fn monitored_item_triggers() {
do_subscription_service_test(|server_state, session, address_space, ss: SubscriptionService, mis: MonitoredItemService| {
Expand Down

0 comments on commit fed08b2

Please sign in to comment.