Attribute Client Read Base

Use the Read Service to read one or more Attributes of one or more Nodes. This includes use of an IndexRange to select a single element or a range of elements when the Attribute value is an array. Clients shall use bulk operations whenever possible to reduce the number of Service invocations.


Questions? Contact us
Generated: 31/20/2020 at 15:31:31 p.m.
Attribute Client Read Base - 54 Test Cases
Test Case Id Test Type Keywords Test Case Description Test Requirements Expected Result

001

Lab Monitor method call and analyze passed parameters for correctness and adherence to the specifications. Reading a single item.
Client correctly receives and processes the results correctly while also checking quality codes.

002

Lab Read a single valid node, while requesting data with a MaxAge set to 0.
Verify the call is made correctly with the results being processed correctly by the client.

003

Lab If client allows end-user to specify a MaxAge, then end-user specifies a value of say 5 seconds while reading one valid node.
Verify client correctly specifies the end-user supplied value to the server into the correct number of msec.

004

Lab If client allows end-user to specify a MaxAge, attempt to enter MaxAge < 0
Client is expected to send a valid MaxAge.
Note: Client may override the MaxAge with a default value. Likewise, it may simply reject the user-input and not issue the Read.

005

Lab If client allows end-user to specify a MaxAge, attempt to enter MaxAge > Int32 while reading a single node value.
Client is expected to send a valid MaxAge.
Note: Client may override the MaxAge with a default value. Likewise, it may simply reject the user-input and not issue the Read.

006

Lab If Client physically able to specify NaN as the value?
Client is expected to send a valid MaxAge.
Note: Client may override the MaxAge with a default value. Likewise, it may simply reject the user-input and not issue the Read.

007

Lab Perform a read of many valid nodes (for example 20+) in a single call, with MaxAge=0.
Verify the Client issues one Read call containing all 20 Nodes.

008

Lab If client allows end-user to specify a MaxAge, then end-user specifies a value of say 5 seconds while reading many valid nodes (20+)
Verify client correctly specifies the end-user supplied value to the server into the correct duration and that one Read call is made.

009

Lab If client allows end-user to specify a MaxAge, attempt to enter MaxAge > Int32 while reading many valid nodes (20+)
Client is expected to send a valid MaxAge, and that one Read call is made.

010

Lab If client allows end-user to specify a MaxAge, then end-user specifies a `fractional` value of say 5.75 msecs while reading many valid nodes (20+)
Verify client correctly specifies the end-user supplied value to the server into the correct duration and that one Read call is made.

011

Lab If Client allows the end-user to choose the TimestampsToReturn, then read 1 Node and test with each possible value i.e.:
a. SOURCE_0
b. SERVER_1
c. BOTH_2
d. NEITHER_3
Check that client sends the correct (as picked from a Client user interface) TimestampsToReturn. For the settings made, verify that the timestamp received by the client and shown to the user matches what was passed up from the server - either the server value or the source.
If the client has the ability to display BOTH timestamps then both values are verified and compared against what was sent by the Server.

012

Lab If Client allows the end-user to choose the TimestampsToReturn, then while reading many valid nodes (20+) set TimestampsToReturn =
a. SOURCE_0
b. SERVER_1
c. BOTH_2
d. NEITHER_3
Check that client sends the correct (as picked from a Client user interface) TimestampsToReturn. For the settings made, verify that for all Nodes the timestamps received by the client and shown to the user matches what was passed up from the server - either the server value or the source.
If the client has the ability to display BOTH timestamps then both values are verified and compared against what was sent by the Server, for all Nodes.

013

Lab If the Client permits the end-user to manually enter a NodeId (versus being required to pick a Node from a Browser dialog) then the end-user specifies invalid NodeIds, as in:
* An empty string
* Invalid string representation of a NodeId.
* If NodeId is GUID, specify a non GUID value and/or invalid GUID syntax and/or incorrect GUID (id not known).
* If NodeId is numeric, specify a negative number.
Ideally, the client will detect any anomalies in the NodeId syntax and will report an error.
The Client should be prepared to handle and report any errors returned by the Server.

014

Lab Read the value of every attribute for any given node.
Note: Ideally the Read will be a single call containing all requests. If not possible, then several Read calls would be acceptable.
Verify the Client does read ALL attributes of the selected node.
Verify the values displayed/logged by the Client match what the Server sent.

015

CTT Return the minimum value for each data type. To achieve this, configure the server with at least one item of each data type and perform a read call for each of those items.
- Bool
- Byte
- SByte
- ByteString
- DateTime
- Double
- Float
- Int16
- UInt16
- Int32
- UInt32
- Int64
- UInt64
- String
Client must display/handle all data types that it supports correctly.
Verify the values shown/logged by the Client match what the Server sent.

016

CTT Return the maximum value for each data type. To achieve this, configure the server with at least one item of each data type and perform a read call for each of those items.
- Bool
- Byte
- SByte
- DateTime
- Double
- Float
- Int16
- UInt16
- Int32
- UInt32
- Int64
- UInt64
Client must display/handle all data types that it supports correctly.
Verify the values shown/logged by the Client match what the Server sent.

017

Lab Array  Return a value (Value attribute) of each possible array data type supported by the client. To achieve this configure the server with at least one item of each data type and perform a read call for each of those items.
Bool, Byte, SByte, ByteString, DateTime, Double, Float, Guid, Int16, UInt16, Int32, UInt32, Int64, UInt64, String
Client must display/handle all data types that it supports correctly.
Verify the values shown/logged by the Client match what the Server sent.

018

CTT Array  Read a single node of each type that is an array. Return the max number of values (array elements) that a Client supports. If the Client has no limit then exercise a value of 1000, otherwise use the largest size supported by the Client.
Bool, Byte, SByte, ByteString, DateTime, Double, Float, Guid, Int16, UInt16, Int32, UInt32, Int64, UInt64, String.
Client is able to consume the maximum number of values for each data-type listed.

019

Lab Array  Read multiple nodes where each is an array of each data-type supported by the Client:
Bool, Byte, SByte, ByteString, DateTime, Double, Float, Guid, Int16, UInt16, Int32, UInt32, Int64, UInt64, String.

Note: This test may include reading all data-types in one call, or multiple data-types in one call. But all supported types must be covered.
Values displayed/reported in client match those sent by the server.

020

Lab Array  Read a node specifying a single element ONLY within the array, e.g. IndexRange = `4`. Do this for each supported data-type:
Bool, Byte, SByte, ByteString, DateTime, Double, Float, Guid, Int16, UInt16, Int32, UInt32, Int64, UInt64, String.
Client correctly requests the element within the array. Verify the value shown/logged by the Client matches the value sent by the Server.

021

Lab Array  Read a range of values within an array, e.g. IndexRange = `3:5`. Do this for each supported data-type:
Bool, Byte, SByte, ByteString, DateTime, Double, Float, Guid, Int16, UInt16, Int32, UInt32, Int64, UInt64, String.
Client correctly requests the elements within the array. Verify the values shown/logged by the Client match what the Server sent.

022

Lab Array  Read an entire 2-d array. Do this for each supported data-type:
Bool, Byte, SByte, ByteString, DateTime, Double, Float, Guid, Int16, UInt16, Int32, UInt32, Int64, UInt64, String.
Verify the values shown/logged by the Client match what the Server sent.

023

Lab Array  Read a range of elements within 2-d array, e.g. IndexRange = `2:3,2:3` Do this for each supported data-type:
Bool, Byte, SByte, ByteString, DateTime, Double, Float, Guid, Int16, UInt16, Int32, UInt32, Int64, UInt64, String, XMLElement.
Client correctly requests the elements within the array. Verify the values shown/logged by the Client match what the Server sent.

024

Lab Diagnostics  Client can vary the level of diagnostics requested from the Server.
Note: Invoke Reads that will cause an error.
Client reports the diagnostics information that it receives from the Server.

025

CTT ServiceResult is Good.
Operation level result is a Good code which includes the lower 16-bits set to a `sub-value`.
Client detects the code is still good and uses it.

Err-001

Lab Read  Randomly inject one of the following ServiceResult codes.
Repeat this test several times each tmie varying the result.

1. ServiceResult = Good and Results are empty.
2. ServiceResult = Bad_InternalError
3. ServiceResult = Bad_InvalidArgument
4. ServiceResult = Bad_InvalidState
5. ServiceResult = Bad_NothingToDo
6. ServiceResult = Bad_OutOfMemory
7. ServiceResult = Bad_RequestTooLarge
8. ServiceResult = Bad_ResourceUnavailable
9. ServiceResult = Bad_Shutdown
10. ServiceResult = Bad_Timeout
11. ServiceResult = Bad_TooManyOperations
12. ServiceResult = Bad_UnexpectedError
13. ServiceResult = Bad_UnknownResponse
14. ServiceResult = Bad_UserAccessDenied
15. ServiceResult = Bad_MaxAgeInvalid
16. ServiceResult = Bad_TimestampstoReturnInvalid
17. ServiceResult = Bad_NodeIdUnknown
18. ServiceResult = Bad_NodeIdInvalid
Client logs and/or displays an error that it has received invalid information.

State the results tested, and your observations for the how the client behaved.

Err-002

Lab Read  Inject one of the following Operation Level Results into the first returned item:

1. Bad_Timeout
2. Bad_AttributeIdInvalid
3. Bad_DataEncodingInvalid
4. Bad_IndexRangeNoData
5. Bad_NodeIdUnknown
6. Bad_NodeIdInvalid
7. Bad_NotReadable
8. Bad_UserAccessDenied
9. Reserved

Err-003

Lab Read  For all results, inject one of the following error Status Code; repeat this test numerous times each time varying the status code:

1. Bad_Timeout
2. Bad
3. Bad_UserAccessDenied
4. Good

Err-004

CTT ServiceResult = Good and set error in StatusCode to Bad which includes the lower 16-bits set to a `sub-value` for the 1st item.
Example: ServiceResult = Good.
StatusCode = Bad_NotConnected for 1st item
Client detects the code is still Bad and does not use it, or uses it in the same context that it would for a standard Bad quality code.
Client continues to process remaining items.

Err-005

CTT ServiceResult = Good and set error in StatusCode to Bad which includes the lower 16-bits set to a `sub-value` for all items.
Example: ServiceResult = Good.
StatusCode = Bad_DeviceFailure for all items.
Client detects the code is still Bad and does not use it, or uses it in the same context that it would for a standard Bad quality code.

Err-006

CTT ServiceResult = Bad.
StatusCode = GOOD for all items.
Client must indicate the Read for all items failed!

Err-007

CTT Read 3 or more nodes in a single call.
The CTT returns ServiceResult = Good.
* Results[0 ]= Bad
* Results[1] = Uncertain
* Results[2] = Reserved
The affected items must show some indication of the non-good values.

Err-024

CTT Return float and Double data with NaN values.
The client might indicate that it received invalid data, likewise it might also accept the NaN values.

Err-008

CTT Return fewer Results than the number of nodes specified in the nodesToRead parameter.
Client should log and/or notify the end-user of the error.
The client does not use the data received.

Err-009

CTT Client issues a Read and requests both timestamps, where MaxAge = 2 seconds.
Return GOOD and set Server timestamp to current time &ndash; 2 x MaxAge for all items.
Note: The MaxAge value can be varied for this test.
Client reports an error that it has received stale data.
In addition, the Client might choose to:
* Ignore the data
* Display data with a warning
* Accept the data if it is within the acceptable tolerance area

Err-010

CTT Client issues a Read and requests both timestamps, where MaxAge = 2 seconds.
Return GOOD and all set timestamp to current time &ndash; 1 day.
Client reports an error that it has received stale data.
In addition, the Client might choose to:
* Ignore the data
* Display data with a warning
Accept the data if it is within the acceptable tolerance area

Err-011

CTT Hold back the service response (delay is MaxAge * 2).
If MaxAge == 2 then set MaxAge = 2000;
Client detects the stale timestamp and indicates a problem with this item by reporting Bad_InvalidTimestamp.

Err-012

CTT Return GOOD set timestamp to current time + 25 hours for all items.
If a client does not display the time then the value should be flagged to indicate an issue. For non interactive clients that store or use the value, the value should not be used and an error should be generated. A proxy UA server that is a pass-through would be an exception to this.

Err-013

CTT Have client specify TimestampsToReturn = NEITHER_3 but return only ONE timestamp (either server or source)
None.

Err-014

CTT Have client specify TimestampsToReturn = NEITHER_3 but return BOTH source and server timestamps
None.

Err-015

CTT Have client specify TimestampsToReturn = BOTH_2 but return only ONE timestamp.
Client reports the error.
If the Client needs to use the timestamp (for further processing or analysis) then the data is ignored. Alternatively, the Client may perform a different action like using a default value (e.g. use `Now`) as based on configuration or as documented.

Err-016

CTT Have client specify TimestampsToReturn = BOTH_2 but return NO timestamps.
Client reports the error.
If the Client needs to use the timestamp (for further processing or analysis) then the data is ignored. Alternatively, the Client may perform a different action like using a default value (e.g. use `Now`) as based on configuration or as documented.

Err-017

CTT Have client specify TimestampsToReturn = SOURCE_0 but return Server timestamp only.
Client reports the error.
If the Client needs to use the timestamp (for further processing or analysis) then the data is ignored. Alternatively, the Client may perform a different action like using a default value (e.g. use `Now`) as based on configuration or as documented.

Err-018

CTT Have client specify TimestampsToReturn = SERVER_1 but return Source timestamp only.
Client reports the error.
If the Client needs to use the timestamp (for further processing or analysis) then the data is ignored. Alternatively, the Client may perform a different action like using a default value (e.g. use `Now`) as based on configuration or as documented.

Err-019

CTT Array  Read a node of type Array, the data-type can be anything.
The received values are of a different type.
E.g. read an Int32[] but receive: string[].
Client reports an error if it is unable to process the data; otherwise the Client may use the data if it has the capability to do so.

Err-020

CTT Array  Read a node of type Array.
The values are all empty, e.g. the length of each array is 0 (zero).
The client indicates that there are no values returned.

Err-021

CTT Array  Read a node of each type that is an array. Return the max number of values (array elements) that a Client supports PLUS 1 more. If the Client has no limit, then exercise a value of 1001.
Note: CTT Settings may be needed to specify the Client`s limitation.
The Client warns that it received more data than it can consume.
The Client processes the elements that it can support.

Err-022

CTT Diagnostics  Request Diagnostics information from server in Request Header but return EMPTY for the result.
Client reports that no diagnostics were returned even though they were requested.

Err-023

CTT Diagnostics  Request Diagnostics information from server in Request Header but return:
1. More diagnostic entries than nodes requested in NodesToRead
2. Fewer diagnostic entries than nodes requested in NodesToRead
Client reports the mismatched # of entries returned. Client does not process the diagnostic info, or if it does then a clear message is present that the information cannot be trusted.

Err-025

Unavailable  Client issues a Read.
UACTT modifies the response so that a difference number of results are returned, e.g. less than requested, or more than requested.
Client reports the mismatched # of entries returned.
Client does not process the results, or if it does then a clear message is present that the data cannot be trusted.
Client should provide a way for the user to know (if desired) that the Read was successful.
Writing an event to a log for every Read is probably not practical since could potentially generate 1000`s of duplicate entries.

Err-026

Unavailable  For an Asynchronous Read, hold back the callback for different time spans, e.g.:
* 5-seconds
* 10-seconds
* Session timeout &ndash; 1 second
Client might indicate a problem if it is expecting a faster response.
Client may also `timeout` the request if the time being taken is longer than a configured tolerance level.

Err-027

Unavailable  For an Asynchronous Read, don`t send callback at all.
Client will eventually report that an asynchronous callback was not received.
Client might re-initiate the write or even re-negotiate the connection, but these are not requirements.

Err-028

CTT Randomly inject one of the following ServerState codes. Repeat this test several times each tmie varying the result.

1. Running_0
2. Failed_1
3. No_Configuration
4. Suspended
5. Shutdown
6. Test
7. Communication_Fault
8. Unknown

Err-029

CTT Read  Return float and Double data with NaN values.
Expectation: The client might indicate that it received invalid data, likewise it might also accept the NaN values.