UDMI / Docs / Specs / Sequences / Generated
These are the exact sequences being checked by the sequence tool. They are programmatically generated so maybe a bit cryptic, but they accurately represent the specific steps required for each test.
- bad_point_ref: Error handling for badly formed gateway point ref Test skipped: Not a proxied device
- bad_target_address: Error handling for badly formed gateway target address Test skipped: Not a proxied device
- bad_target_family: Error handling for badly formed gateway target family Test skipped: Not a proxied device
- broken_config: Check that the device correctly handles a broken (non-json) config message.
- config_logging: Check that the device publishes minimum required log entries when receiving config
- device_config_acked: Check that the device MQTT-acknowledges a sent config.
- endpoint_connection_bad_alternate: Failed connection never uses alternate registry.
- endpoint_connection_bad_hash: Failed connection because of bad hash.
- endpoint_connection_error: Push endpoint config message to device that results in a connection error.
- endpoint_connection_retry: Check repeated endpoint with same information gets retried.
- endpoint_connection_success_alternate: Check connection to an alternate project.
- endpoint_connection_success_reconnect: Check a successful reconnect to the same endpoint.
- endpoint_failure_and_restart
- endpoint_redirect_and_restart
- enumerate_families: Check enumeration of network families
- enumerate_features: Check enumeration of device features
- enumerate_multi: Check enumeration of multiple categories
- enumerate_nothing: Check enumeration of nothing at all
- enumerate_pointset: Check enumeration of device points
- extra_config: Check that the device correctly handles an extra out-of-schema field
- family_ether_addr
- family_ipv4_addr
- family_ipv6_addr: Test skipped: No ipv6 address defined in metadata
- gateway_proxy_events: Check that a gateway proxies pointset events for indicated devices Test skipped: Not a gateway
- gateway_proxy_state: Check that a gateway proxies state updates for indicated devices Test skipped: Not a gateway
- pointset_publish: Check that a device publishes pointset events
- pointset_publish_interval: Check handling of sample_rate_sec and sample_limit_sec
- pointset_remove_point: Check that pointset state does not report an unconfigured point
- pointset_request_extraneous: Check error when pointset configuration contains extraneous point
- scan_periodic_now_enumerate: Check periodic scan on a fixed schedule and enumeration
- scan_single_future: Check results of a single scan scheduled soon
- scan_single_now: Check results of a single scan scheduled in the recent past including enumeration
- scan_single_past: Check that a scan scheduled in the past never starts
- state_make_model: Check that a device publishes correct make and model information in state messages
- state_software: Check that a device publishes correct software information in state messages
- system_last_update: Check that last_update state is correctly set in response to a config update.
- system_mode_restart: Restart and connect to same endpoint and expect it returns.
- valid_serial_no
Error handling for badly formed gateway point ref
Test skipped: Not a proxied device
Error handling for badly formed gateway target address
Test skipped: Not a proxied device
Error handling for badly formed gateway target family
Test skipped: Not a proxied device
Check that the device correctly handles a broken (non-json) config message.
- Update config to enable debug logging
- Set
system.min_loglevel=100
- Set
- logging Wait until system logs level
NOTICEcategorysystem.config.apply - Update config to force broken (invalid JSON) configuration
- status Wait until system status level is >=
WARNING(400) - status Check that status level is exactly
ERROR(500) - status Check that category matches
system.config.parse - Check that device state
last_confighas not been updated - logging Wait until system logs level
DEBUGcategorysystem.config.receive - logging Wait until system logs level
ERRORcategorysystem.config.parse - logging Check that log level
NOTICE(or greater) categorysystem.config.applywas not logged - Reset config to clean version
- (Log level is implicitly set to
INFOthrough config reset) - status Wait until system status level is not >=
WARNING(400) - logging Wait until system logs level
NOTICEcategorysystem.config.apply - logging Check that log level
DEBUG(or greater) categorysystem.config.receivewas not logged - logging Check that log level
DEBUG(or greater) categorysystem.config.parsewas not logged - Check that device state
last_confighas been updated
Test passed.
Check that the device publishes minimum required log entries when receiving config
- Force config update to resend config to device
- Wait until system logs level
DEBUGcategorysystem.config.receive - Wait until system logs level
DEBUGcategorysystem.config.parse - Wait until system logs level
NOTICEcategorysystem.config.apply
Test passed.
Check that the device MQTT-acknowledges a sent config.
- Wait for config acked
Test passed.
Failed connection never uses alternate registry.
- Wait until initial last_config matches config timestamp
- Update config before blobset phase is final and stateStatus is not null
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset phase is final and stateStatus is not null
- Wait for blobset phase is final and stateStatus is not null
- Wait until alternate client connect delay
- Wait for blobset phase is final and stateStatus is null
- Wait until restored last_config matches config timestamp
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
Test passed.
Failed connection because of bad hash.
- Update config before blobset status is ERROR
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":invalid blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset status is ERROR
Test passed.
Push endpoint config message to device that results in a connection error.
- Update config before blobset entry config status is error
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset entry config status is error
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
Test passed.
Check repeated endpoint with same information gets retried.
- Update config before blobset entry config status is error
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset entry config status is error
- Update config before blobset entry config status is error
- Set
blobset.blobs._iot_endpoint_config.generation=new generation
- Set
- Wait for blobset entry config status is error
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
Test passed.
Check connection to an alternate project.
- Wait until initial last_config matches config timestamp
- Update config mirroring config false
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset phase is apply and stateStatus is null
- Wait for blobset phase is final and stateStatus is null
- Wait until alternate last_config matches config timestamp
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
- Update config mirroring config true
- Add
blobset.blobs._iot_endpoint_config= { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data}
- Add
- Wait for blobset phase is apply and stateStatus is null
- Wait for blobset phase is final and stateStatus is null
- Wait until restored last_config matches config timestamp
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
Test passed.
Check a successful reconnect to the same endpoint.
- Update config before blobset phase is final and stateStatus is null
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset phase is final and stateStatus is null
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
Test passed.
- Update config before blobset entry config status is error
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset entry config status is error
- Wait for last_start is not zero
- Check that initial count is greater than 0
- Update config before system mode is ACTIVE
- Add
system.operation.mode=active
- Add
- Wait for system mode is ACTIVE
- Update config before system mode is INITIAL
- Set
system.operation.mode=restart
- Set
- Wait for system mode is INITIAL
- Check that restart count increased by one
- Update config before system mode is ACTIVE
- Set
system.operation.mode=active
- Set
- Wait for system mode is ACTIVE
- Wait for last_config is newer than previous last_config before abort
- Wait for last_config is newer than previous last_config after abort
- Wait for last_start is newer than previous last_start
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
Test passed.
- Wait until initial last_config matches config timestamp
- Update config mirroring config false
- Add
blobset= { "blobs": { "_iot_endpoint_config": { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data} } }
- Add
- Wait for blobset phase is apply and stateStatus is null
- Wait for blobset phase is final and stateStatus is null
- Wait until alternate last_config matches config timestamp
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
- Wait for last_start is not zero
- Check that initial count is greater than 0
- Update config before system mode is ACTIVE
- Add
system.operation.mode=active
- Add
- Wait for system mode is ACTIVE
- Update config before system mode is INITIAL
- Set
system.operation.mode=restart
- Set
- Wait for system mode is INITIAL
- Check that restart count increased by one
- Update config before system mode is ACTIVE
- Set
system.operation.mode=active
- Set
- Wait for system mode is ACTIVE
- Wait for last_config is newer than previous last_config before abort
- Wait for last_config is newer than previous last_config after abort
- Wait for last_start is newer than previous last_start
- Update config mirroring config true
- Add
blobset.blobs._iot_endpoint_config= { "phase":final, "generation":blob generation, "sha256":blob data hash, "url":endpoint data}
- Add
- Wait for blobset phase is apply and stateStatus is null
- Wait for blobset phase is final and stateStatus is null
- Wait until restored last_config matches config timestamp
- Update config before endpoint config blobset state not defined
- Remove
blobset.blobs._iot_endpoint_config
- Remove
- Wait for endpoint config blobset state not defined
Test passed.
Check enumeration of network families
- Update config before enumeration not active
- Add
discovery.enumerations= { "families":entries}
- Add
- Wait for enumeration not active
- Update config before matching enumeration generation
- Add
discovery.generation=generation start time
- Add
- Wait for matching enumeration generation
- Update config before cleared enumeration generation
- Remove
discovery.generation
- Remove
- Wait for cleared enumeration generation
- Check that family enumeration size matches
- Check that no feature enumeration exists
- Check that no point enumeration exists
Test passed.
Check enumeration of device features
- Update config before enumeration not active
- Add
discovery.enumerations= { "features":entries}
- Add
- Wait for enumeration not active
- Update config before matching enumeration generation
- Add
discovery.generation=generation start time
- Add
- Wait for matching enumeration generation
- Update config before cleared enumeration generation
- Remove
discovery.generation
- Remove
- Wait for cleared enumeration generation
- Check that no family enumeration exists
- Check that feature enumeration matches metadata
- Check that all enumerated features are official buckets
- Check that no point enumeration exists
Test passed.
Check enumeration of multiple categories
- Update config before enumeration not active
- Add
discovery.enumerations= { "features":details, "families":details, "points":details}
- Add
- Wait for enumeration not active
- Update config before matching enumeration generation
- Add
discovery.generation=generation start time
- Add
- Wait for matching enumeration generation
- Update config before cleared enumeration generation
- Remove
discovery.generation
- Remove
- Wait for cleared enumeration generation
- Check that family enumeration size matches
- Check that feature enumeration matches metadata
- Check that all enumerated features are official buckets
- Check that enumerated point count matches
Test passed.
Check enumeration of nothing at all
- Update config before enumeration not active
- Add
discovery.enumerations= { }
- Add
- Wait for enumeration not active
- Update config before matching enumeration generation
- Add
discovery.generation=generation start time
- Add
- Wait for matching enumeration generation
- Update config before cleared enumeration generation
- Remove
discovery.generation
- Remove
- Wait for cleared enumeration generation
- Check that no family enumeration exists
- Check that no feature enumeration exists
- Check that no point enumeration exists
Test passed.
Check enumeration of device points
- Update config before enumeration not active
- Add
discovery.enumerations= { "points":entries}
- Add
- Wait for enumeration not active
- Update config before matching enumeration generation
- Add
discovery.generation=generation start time
- Add
- Wait for matching enumeration generation
- Update config before cleared enumeration generation
- Remove
discovery.generation
- Remove
- Wait for cleared enumeration generation
- Check that no family enumeration exists
- Check that no feature enumeration exists
- Check that enumerated point count matches
Test passed.
Check that the device correctly handles an extra out-of-schema field
- Wait for last_config not null
- Wait for system operational
- Check that system status level is not >=
WARNING(400) - Update config before system logs level
DEBUGcategorysystem.config.receive - Wait until system logs level
DEBUGcategorysystem.config.receive - Wait until last_config updated
- Wait for system operational
- Check that system status level is not >=
WARNING(400) - Wait until system logs level
DEBUGcategorysystem.config.parse - Wait until system logs level
NOTICEcategorysystem.config.apply - Update config before system logs level
DEBUGcategorysystem.config.receive - Wait until system logs level
DEBUGcategorysystem.config.receive - Wait for last_config updated again
- Wait for system operational
- Wait until system logs level
DEBUGcategorysystem.config.parse - Wait until system logs level
NOTICEcategorysystem.config.apply
Test passed.
- Wait until device state localnet family ether is available
- Check that family ether address matches
Test passed.
- Wait until device state localnet family ipv4 is available
- Check that family ipv4 address matches
Test passed.
Test skipped: No ipv6 address defined in metadata
Check that a gateway proxies pointset events for indicated devices
Test skipped: Not a gateway
Check that a gateway proxies state updates for indicated devices
Test skipped: Not a gateway
Check that a device publishes pointset events
- Update config before receive a pointset event
- Set
pointset.sample_rate_sec=10
- Set
- Wait for receive a pointset event
Test passed.
Check handling of sample_rate_sec and sample_limit_sec
- Update config before receive at least 4 pointset events
- Set
pointset.sample_rate_sec=8 - Add
pointset.sample_limit_sec=5
- Set
- Wait for receive at least 4 pointset events
- Check that time period between successive pointset events is between 5 and 8 seconds
- Update config before receive at least 4 pointset events
- Set
pointset.sample_rate_sec=18 - Set
pointset.sample_limit_sec=15
- Set
- Wait for receive at least 4 pointset events
- Check that time period between successive pointset events is between 15 and 18 seconds
Test passed.
Check that pointset state does not report an unconfigured point
- Update config before pointset state matches config
- Set
pointset.sample_rate_sec=10
- Set
- Wait until pointset state matches config
- Wait until pointset event contains correct points
- Update config before pointset state does not contain removed point
- Remove
pointset.points[random_point]
- Remove
- Wait for pointset state does not contain removed point
- Wait until pointset state matches config
- Wait until pointset event contains correct points
- Update config before pointset state contains restored point
- Add
pointset.points[random_point]= point configuration
- Add
- Wait for pointset state contains restored point
- Wait until pointset state matches config
- Wait until pointset event contains correct points
Test passed.
Check error when pointset configuration contains extraneous point
- Update config before pointset state matches config
- Set
pointset.sample_rate_sec=10
- Set
- Wait until pointset state matches config
- Wait until pointset event contains correct points
- Update config before pointset state contains extraneous point error
- Add
pointset.points[extraneous_point]= point configuration
- Add
- Wait for pointset state contains extraneous point error
- Wait until pointset state matches config
- Wait until pointset event contains correct points
- Update config before pointset state removes extraneous point error
- Remove
pointset.points[extraneous_point]
- Remove
- Wait for pointset state removes extraneous point error
- Wait until pointset state matches config
- Wait until pointset event contains correct points
Test passed.
Check periodic scan on a fixed schedule and enumeration
- Update config before discovery families defined
- Remove
discovery.families.vendor - Remove
discovery.families.bacnet
- Remove
- Wait for discovery families defined
- Wait until discovery family keys match
- Wait for no scans active
- Update config before scan iterations
- Add
discovery.families.vendor= { "generation":family generation, "scan_interval_sec":20, "depth":details, "scan_duration_sec":20}
- Add
- Wait for scan iterations
- Check that scan did not terminate prematurely
- Check that all events have matching refs
Test passed.
Check results of a single scan scheduled soon
- Update config before discovery families defined
- Remove
discovery.families.vendor - Remove
discovery.families.bacnet
- Remove
- Wait for discovery families defined
- Wait until discovery family keys match
- Wait for no scans active
- Update config before scheduled scan pending
- Add
discovery.families.vendor= { "generation":family generation, "scan_duration_sec":10}
- Add
- Wait until scheduled scan pending
- Wait until scheduled scan active
- Check that scan started at time
- Wait until scheduled scan complete
- Check that scan completed at time
- Check that received expected number of discovery events
- Check that no events have discovered refs
- Check that discovery events were valid
- Check that received all unique event numbers
- Check that received proper discovery start event
- Check that received proper last discovery event
- Check that received proper discovery termination event
- Check that all scan addresses are unique
- Check that all expected addresses were found
- Check that all expected networks were found
Test passed.
Check results of a single scan scheduled in the recent past including enumeration
- Update config before discovery families defined
- Remove
discovery.families.vendor - Remove
discovery.families.bacnet
- Remove
- Wait for discovery families defined
- Wait until discovery family keys match
- Wait for no scans active
- Update config before scheduled scan active
- Add
discovery.families.vendor= { "generation":family generation, "depth":details, "scan_duration_sec":10}
- Add
- Wait until scheduled scan active
- Check that scan started at time
- Wait until scheduled scan complete
- Check that scan completed at time
- Check that received expected number of discovery events
- Check that all events have matching refs
- Check that discovery events were valid
- Check that received all unique event numbers
- Check that received proper discovery start event
- Check that received proper last discovery event
- Check that received proper discovery termination event
- Check that all scan addresses are unique
- Check that all expected addresses were found
- Check that all expected networks were found
Test passed.
Check that a scan scheduled in the past never starts
- Update config before discovery families defined
- Remove
discovery.families.vendor - Remove
discovery.families.bacnet
- Remove
- Wait for discovery families defined
- Wait until discovery family keys match
- Wait for no scans active
- Update config before scan schedule initially not active
- Add
discovery.families.vendor= { "generation":family generation, "scan_duration_sec":10}
- Add
- Wait until scan schedule initially not active
- Wait until scan schedule still not active
- Check that there were no received discovery events
Test passed.
Check that a device publishes correct make and model information in state messages
- Check that make and model in state matches make in metadata
Test passed.
Check that a device publishes correct software information in state messages
- Check that software in metadata matches state
Test passed.
Check that last_update state is correctly set in response to a config update.
- Wait until state last_config matches config timestamp
- subblocks Wait until state update complete
- Force config update to trigger another config update
- Wait until state last_config matches config timestamp
- subblocks Wait until state update complete
- Force config update to trigger another config update
- Wait until state last_config matches config timestamp
- subblocks Wait until state update complete
Test passed.
Restart and connect to same endpoint and expect it returns.
- Wait for last_start is not zero
- Check that initial count is greater than 0
- Update config before system mode is ACTIVE
- Add
system.operation.mode=active
- Add
- Wait for system mode is ACTIVE
- Update config before system mode is INITIAL
- Set
system.operation.mode=restart
- Set
- Wait for system mode is INITIAL
- Check that restart count increased by one
- Update config before system mode is ACTIVE
- Set
system.operation.mode=active
- Set
- Wait for system mode is ACTIVE
- Wait for last_config is newer than previous last_config before abort
- Wait for last_config is newer than previous last_config after abort
- Wait for last_start is newer than previous last_start
Test passed.
- Wait for received serial number matches
Test passed.