Historical Access Read Raw



Questions? Contact us
Generated: 21/11/2021 at 17:21:20 p.m.
Historical Access Read Raw - 47 Test Cases
Test Case Id Test Type Keywords Test Case Description Test Requirements Expected Result

001

CTT Browse()  HistoryRead()  HistoryUpdate()  Test timestamps to return are observed Server Timestamp may [or may not] be supported so the test must accommodate both outcomes.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='10'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='11 -> 6.4.3.2 Para 1 Sen 1.; 11 -> 6.4.3.2 Para 4 Sen 1.; 11 -> 6.4.3.2 Para 8.'.

Receives valid data including Values; StatusCodes and Timestamps matching CTT expectations and not including the boundaries. A continuation point is expected. Each record contains the timestamps requested.

2

Parameter Details: TimestampsToReturn='Server'. OperationLevelResults='Good or BadTimestampNotSupported'.

3

Parameter Details: TimestampsToReturn='Both'. OperationLevelResults='Good'.

The ServerTimestamp may return a DateTime.Min if it is not supported.

002

CTT Browse()  HistoryRead()  HistoryUpdate()  Test 'Start' and 'End' dates while varying the number of nodes per request – checking dates; ordering; and 2 of 3 in the request. If a Continuation Point is returned then use it to continue reading data until either EOF or TestEOF is complete. The test should only execute if more than 10 records exist between <timestamp1> and <timestampX>. Otherwise; skip the test citing that not enough records exist.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestamp1'. NumValuesPerNode=''. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='11 -> 6.4.3.2 Para 2 Sen 1, 2, 3, 4, and 6.; 11 -> 6.4.3.2 Para 3 Sen 1.; 11 -> 6.4.3.2 Para 4 Sen 2'.

Receives valid data matching CTT expectations and not including the boundaries. A continuation point is expected until EOF. When both dates match then only 1 record should be received.

2

Parameter Details: startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'.

Data flows forwards

3

Parameter Details: startTime='timestampX'. endTime='timestamp1'.

Data flows backwards

4

Parameter Details: startTime='timestampX'. endTime='timestampX'.

When both dates match then only 1 record should be received. The # of records received match the request expectations.

5

Parameter Details: startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='10'.

If more records exist than are requested; then a ContinuationPoint is returned.

6

Parameter Details: startTime='timestamp1'. endTime='DateTime.Min'.

Data flows backwards

7

Parameter Details: startTime='DateTime.Min'. endTime='timestampX'.

Data flows forwards

003

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify Start and End dates where one or both dates do not contain data in the history database. endInvalid is calculated based on the 10th record from <timestamp1> and then gently increase that timestamp so that it doesn’t correspond to a value in the history. startInvalid is the same as endInvalid except going backwards in time.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='endInvalid'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='11 -> 6.4.3.2 Para 2 Sen 3, 5.; 11 -> 6.4.3.2 Para 4 Sen 1'.

Records received start at the startTime; and end before the endTime. The last record received is the last record before the invalid timestamp.

2

Parameter Details: startTime='startInvalid'. endTime='timestampX'.

The first record received is the closest record to the invalid timestamp; and ends at the last valid timestamp (endTime parameter).

3

Parameter Details: startTime='startInvalid'. endTime='endInvalid'.

The first record is after the startTime (parameter) and the last record is before the endTime (parameter).

004

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify Start and End dates where one or both dates do not contain data in the history database requesting the Boundary values. endInvalid is calculated based on the 10th record from timestamp1 and then gently increase that timestamp so that it doesn’t correspond to a value in the history. startInvalid is the same as endInvalid except going backwards in time.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='endBad1'. NumValuesPerNode='0'. ReturnBounds='TRUE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='11 -> 6.4.3.2 Para 6'.

Records received start at the startTime with the last valid record being one before the endTime. The last record received is the last record is the endTime (parameter) but with StatusCode BadBoundNotFound.

2

Parameter Details: startTime='startBad1'. endTime='timestampX'. NumValuesPerNode='0'.

The first record has the startTime (parameter) with StatusCode BadBoundNotFound. The last record matches the endTime (parameter).

3

Parameter Details: startTime='startBad1'. endTime='endBad1'. NumValuesPerNode='0'.

The first record has the startTime (parameter) with StatusCode BadBoundNotFound. The last record has the startTime (parameter) with StatusCode BadBoundNotFound. The records in-between the startTime and endTime (parameters) contains valid data.

005

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify Start and End dates where one or both dates go beyond the time-bounds of the data in the history database. A CTT setting will define the official date where history begins within the database.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='oldest-1h'. endTime='oldest+1h'. NumValuesPerNode='10'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='11 -> 6.3.4.2 Para 3 Sen 4.; 11 -> 6.2.2 Table 17'.

The server does NOT return BadArgumentInvalid. The first 10-records in History are received, or less if fewer records exist. The date order is oldest-to-newest.

2

Parameter Details: startTime='oldest-2h'. endTime='oldest-1h'. OperationLevelResults='GoodNoData'.

No records returned.

3

Parameter Details: endTime='DateTime.Min'. OperationLevelResults='Good'.

The first record in history is received.

4

Parameter Details: startTime='oldest+1h'. endTime='oldest-1h'.

The 10 records in history are received, or less if fewer records exist; in reverse-chronological order.

5

Parameter Details: startTime='now-1h'. endTime='now+1h'.

10 records are returned and their timestamps are from the time when the request was made until now.

6

Parameter Details: startTime='now+1h'. endTime='now+2h'. OperationLevelResults='GoodNoData'.

No records returned.

7

Parameter Details: startTime='now+1h'. endTime='DateTime.Min'. OperationLevelResults='Good'.

No records returned.

006

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify Start and End dates where there is no data between the start and end timestamps in the history database while varying the timestamp ordering and bounds requested. timestamp1 is a valid timestamp but there is no data. timestampX is newer than timestamp1 and also has no data. There is no data between timestamp1 and timestampX.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='GoodNoData'. SpecLink=11 -> 6.4.3.2 Para 1 Sen 4; 11 -> 6.4.3.2 Para 6 Sen 1, 2.; 11 -> 6.4.3.2 Para 7 Sen 1.; 11 -> 6.4.3.2 Para 7 Sen 2.; 11 -> 6.2.2 Table 17'.

2

Parameter Details: ReturnBounds='TRUE'. OperationLevelResults='Good'.

The bounding values received are outside of the range. The start value is the first record that exists before the startTime. The end value is the first value after the endTime. The time flow is forward.

3

Parameter Details: startTime='timestampX'. endTime='timestamp1'. ReturnBounds='FALSE'. OperationLevelResults='GoodNoData'.

4

Parameter Details: ReturnBounds='TRUE'. OperationLevelResults='Good'.

The bounding values received are outside of the range. The start value is the first record that exists after the startTime. The end value is the first value before the endTime. The time flow is reversed.

007

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify Start and End dates where there is no data between the start and end timestamps in the history database; but data exists for either the Start or End date. Verify the timestamp ordering and bounds requested. timestamp1 is a valid timestamp and has a data value. timestampX is newer than timestamp1 and has no data. There is no data between timestamp1 and timestampX.
Step #
Action
Expected Result(s)

1

Parameter Details: startTime='timestamp1'. endTime='timestampX'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'.

timestamp1 is returned.

2

Parameter Details: ReturnBounds='TRUE'. OperationLevelResults='Good'.

timestamp1 is the start Bound.

3

Parameter Details: startTime='timestampX'. endTime='timestamp1'. ReturnBounds='FALSE'. OperationLevelResults='GoodNoData'.

0 records returned.

4

Parameter Details: ReturnBounds='TRUE'. OperationLevelResults='Good'.

timestamp1 is the end bound.

5

TestRequirements='timestamp1 is a valid timestamp but there is no data value. timestampX is newer than timestamp1 and has a data value. There is no data between timestamp1 and timestampX.'. startTime='timestamp1'. endTime='timestampX'. Parameter Details: ReturnBounds='FALSE'. OperationLevelResults='GoodNoData'.

0 records returned.

6

Parameter Details: ReturnBounds='TRUE'. OperationLevelResults='Good'.

timestampX is the end bound

7

Parameter Details: startTime='timestampX'. endTime='timestamp1'. ReturnBounds='FALSE'.

timestampX is returned.

8

Parameter Details: ReturnBounds='TRUE'.

timestampX is the start bound

008

CTT Browse()  HistoryRead()  HistoryUpdate()  Test the continuation points are maintained. In each test iteration the ContinuationPoint issued will be the last one received. The test will continue advancing through the record set until EOF. The raw data must be acquired before this test starts.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty initially'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='1'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='11 -> 6.4.3.2 Para 4 Sen 1,2'.

Receives valid historical data. Each value received matches the “next” value as cached from our initial reading (see test-requirements). A continuation point is received on each successive call until EOF or max test count reached.

2

TestRequirements='This step will be repeated until end of data.'. Parameter Details: ContinuationPoint='Value received'.

As above. Continuation point returned until EOF.

009

CTT Browse()  HistoryRead()  HistoryUpdate()  Test the continuation points are maintained. In each test iteration the ContinuationPoint issued will be the one last received. The test will continue advancing through the record set until EOF. The raw data must be acquired before this test starts.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty initially'. IsReadModified='FALSE'. startTime='timestampX'. endTime='timestamp1'. NumValuesPerNode='1'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'.

Receives valid historical data. Data ordered newest first. Each value received matches the “next” value as cached from our initial reading (see test-requirements). A continuation point is received on each successive call until EOF.

2

TestRequirements='This step will be repeated until EOF.'. Parameter Details: ContinuationPoint='Value received'.

As above. Continuation point returned until EOF.

010

CTT Browse()  HistoryRead()  HistoryUpdate()  Test receiving Bounds while specifying Start and End dates – checking dates; ordering and 2 of 3 in the request. The CTT may adjust timestamp1 and timstampX to facilitate a smaller time-frame in order to conduct this test more efficiently. When a continuation point is received; use it in the next call to obtain more history until the end of the history is reached.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestamp1'. NumValuesPerNode='1'. ReturnBounds='TRUE'. ServiceResult='Good'. OperationLevelResults='BadBoundNotFound or Good if found'.

The start bound is received. Receives valid History data in the chronological order determined by the dates requested. Eventually; the end bound will be received.

2

Parameter Details: endTime='timestampX'.

3

Parameter Details: startTime='timestampX'. endTime='timestamp1'.

4

Parameter Details: endTime='timestampX'.

011

CTT Browse()  HistoryRead()  HistoryUpdate()  Test the IndexRange parameter on any/all array-based nodes (e.g. int32[]; float[]; uint64[]; string; byteString etc.) Read the entire array value before the test. For each Node determine bounds of array first. Size of arrays must exceed the ranges specified to avoid requesting “5:7” on array of 3-elements.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='valid'. IndexRange='1'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'.

Receives valid historical data. Values received are the specified subset of an array as compared to the CTT expectations (CTT determines what should be received from the cached raw values). Values are ordered oldest first.

2

Parameter Details: IndexRange='1:2'.

3

Parameter Details: IndexRange='2:4'.

4

Parameter Details: IndexRange='Last 3'.

012

CTT Browse()  HistoryRead()  HistoryUpdate()  Test the IndexRange parameter on any/all array-based nodes (e.g. int32[]; float[]; uint64[]; string; byteString etc.) but specify a range that exceeds the dimensions of the array(s).Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='valid'. IndexRange='value exceeding range e.g. “99”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadIndexRangeNoData'. For each Node determine bounds of array first. No data returned.

013

CTT Browse()  HistoryRead()  HistoryUpdate()  Test the two-dimensional IndexRange parameter on on any/all array-based nodes (e.g. int32[;]; float[;]; uint64[;]; string[]; byteString[] etc.) Read the entire array value before the test. For each Node determine bounds of array first.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='valid'. IndexRange='“1:3,1:3”'. DataEncoding=<none>. ContinuationPoint='Null'. IsReadModified='Empty initially'. startTime='FALSE'. endTime='timestamp1'. NumValuesPerNode='timestampX'. ReturnBounds='0'. ServiceResult='FALSE'. OperationLevelResults='Good'. SpecLink='All are Good'.

Values received are the specified subset of an array as compared to the CTT expectations (CTT determines what should be received from the cached raw values). The order of the data matches the request dates.

2

Parameter Details: IndexRange='“1:3,2:4”'.

3

Parameter Details: IndexRange='“2:4,1:3”'.

014

CTT Browse()  HistoryRead()  HistoryUpdate()  Test receiving the Start or End Bound while specifying a Start or End dates and only 1 node per request – checking only the bound(s) are received. The intent of this test is to make one call to determine if the bound; or bound and first value are received. The continuation point should be released at the end of the test.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='1'. ReturnBounds='TRUE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='11 -> 6.3 Para 2 Sen 2; 11 -> 6.4.3.2 Para 5 Sen 1,2,3'.

Receives valid history data. The number of records received matches NumValuesPerNode. The bound received is determined based on the date order specified. When numValuesPerNode is 1 then only the bound value is returned. Otherwise the bound and the first value are returned.

2

Parameter Details: NumValuesPerNode='2'.

3

Parameter Details: endTime='DateTime.Min'. NumValuesPerNode='1'.

4

Parameter Details: NumValuesPerNode='2'.

5

Parameter Details: startTime='DateTime.Min'. endTime='timestampX'. NumValuesPerNode='1'.

6

Parameter Details: NumValuesPerNode='2'.

7

Parameter Details: startTime='timestampX'. endTime='timestamp1'. NumValuesPerNode='1'.

8

Parameter Details: NumValuesPerNode='2'.

015

CTT Browse()  HistoryRead()  HistoryUpdate()  Test receiving Bounds while specifying Start and End dates where some do not exist in the historian; while varying the number of nodes per request – checking dates; ordering; and 2 of 3 required parameters in the request. Example: The CTT caches a time-range such as 1pm to 2pm; and the test requests bounds of 1:00:01pm to 1:59:59pm. The timestamp ranges; even though are partially invalid; must be defined around data that does exist; e.g. <invalid>; time1; time2; <invalid>; time3 etc. CTT must allow for a bounding value to be calculated in either direction as part 11 clause 4.4 paragraph 2 states “how far back or forward to look in history for bounding values is server dependent”.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='beforeHistory'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='TRUE'. ServiceResult='Good'. OperationLevelResults='BadBoundNotFound'.

The first record received contains the startTime timestamp specified and BadBoundNotFound. Bounding values are received with the nearest bounding value being used where no exact match exists.

2

TestRequirements='Make sure <timestamp1> is fairly close to the <newest> record; e.g. within 50 records or 5-minutes etc.'. Parameter Details: startTime='timestamp1'. endTime='future'.

016

CTT Browse()  HistoryRead()  HistoryUpdate()  Request history with a max of 5 values per node; for a startTime where history is known to exist; and there are 5 or more records available. Request boundary values.Parameter Details: startTime='timestamp1'. endTime='DateTime.Min'. NumValuesPerNode='5'. ReturnBounds='TRUE'. ServiceResult='Good'. OperationLevelResults='Good'. Find a period of time where there are 4 values. The start bound is received along with the first four records. The end bound is NOT returned.

017

CTT Browse()  HistoryRead()  HistoryUpdate()  Request a range of data that contains bad quality data.Parameter Details: IsReadModified='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. The dataset must be searched first to locate records of non-good quality. The server returns the data and the quality of the data matches the CTT expectations.

018

CTT Browse()  HistoryRead()  HistoryUpdate()  Request a range of data that contains uncertain quality data.Parameter Details: IsReadModified='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. The dataset must be searched first to locate records of non-good Quality. The server returns the data and the quality of the data matches the CTT expectations.

019

CTT Browse()  HistoryRead()  HistoryUpdate()  Request history with a max of 5 values per node; for a startTime where history is known to exist; and there are 5 or more records available. Request boundary values.Parameter Details: StartTime='DateTime.Min'. EndTime='timestamp1'. NumValuesPerNode='5'. ReturnBounds='TRUE'. ServiceREsult='Good'. OperationLevelResults='Good'. Find a period of time where there are 4 values. There is no start bound, but the end bound is received along with the last four records. Service and Operation results are 'Good'.

020

CTT Browse()  HistoryRead()  HistoryUpdate()  Initiate multiple HistoryRead requests where each request is consuming a ContinuationPoint. Issue another call which should exceed the number of supported ContinuationPoints. For the first HistoryRead issue a continuing read using the received continuationPoint.

Note: This is session-specific.Parameter Details: ServiceResult='Good'. OperationLevelResults='Good'.
Obtain the max # of supported continuationPoints from the ServerCapabilities.MaxHistoryContinuationPoints. All continuation points are consumed successfully.

021

Lab HistoryRead()  Invoke a generic HistoryRead request in an area of the Server's address space which contains a massive quantity of nodes, while employing a relatively short timeout.
Client timeout settings must be configurable. The Server's address space will need to be large with a single folder containing hundreds or thousands of nodes.
Step #
Action
Expected Result(s)

1

<p> If the Server is unable to process the request before the timeout, then it responds with a Good/empty response and a continuation point.</p>

2

<p> If a continuation point is received then pass it into a HistoryRead function.</p>

<p> Will accept:<br /> Results=0; ContinuationPoint=provided<br /> Results=&gt;0; No ContinuationPoint<br /> Results=&gt;0; ContinuationPoint=provided.<br /> <br /> Not acceptable:<br /> Results=0; No ContinuationPoint and no error.</p>

Err-001

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify an empty/invalid request Header.Parameter Details: RequestHeader='default'. TimestampsToReturn='Both'. ReleaseContinuationPoints='FALSE'. NodeId='null'. IndexRange='""'. DataEncoding='null'. ContinuationPoint='empty'. IsReadModified='false'. startTime='DateTime.Min'. endTime='DateTime.Min'. NumValuesPerNode='0'. ReturnBounds='false'. ServiceResult='BadNothingToDo or BadHistoryOperationInvalid or BadTimestampsToReturnInvalid'. SpecLink='4 -> Table 53'. The server's order of verification will determine which of the listed status codes are returned.

Err-002

CTT Browse()  HistoryRead()  HistoryUpdate()  Invalid TimestampsToReturn request.Parameter Details: RequestHeader='default'. TimestampsToReturn='NEITHER_3'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='BadInvalidTimestampArgument '. SpecLink='4 -> Table 53; 11 -> 4.3; 11 -> 6.4.3.2 Para 8 Sen 1.'. No results returned; results = empty.

Err-003

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify an invalid TimestampsToReturn value.Parameter Details: RequestHeader='default'. TimestampsToReturn='value outside of the enumeration (e.g., 10).'. ReleaseContinuationPoints='false'. NodeId='valid'. IndexRange='""'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='BadTimestampsToReturnInvalid'. OperationLevelResults='None'. SpecLink='4 -> Table 53; 11 -> 6.4.3.2 Para 8 Sen 1.'.

Err-004

CTT Browse()  HistoryRead()  HistoryUpdate()  Request Server timestampsToReturn; which is optional and might not be supported.Parameter Details: RequestHeader='Default'. TimestampsToReturn='SERVER'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good or BadTimestampNotSupported'. SpecLink='11 -> 4.3'. If service result is Good then data is returned etc. Otherwise; no data is returned.

Err-005

CTT Browse()  HistoryRead()  HistoryUpdate()  Request both timestamps.Parameter Details: RequestHeader='Default'. TimestampsToReturn='Both'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good or BadTimestampsToReturnInvalid'. SpecLink='11 -> 4.3'. If service result is Good then data is returned etc. Otherwise; no data is returned.

Err-006

CTT Browse()  HistoryRead()  HistoryUpdate()  Do not populate the ReadRawModifiedDetails structure.Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='DateTime.Min'. endTime='DateTime.Min'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good', OperationLevelResult='BadHistoryOperationInvalid or BadInvalidTimestampArgument'. SpecLink='4 -> Table 53'. All parameters except the HistoryDetails parameter are valid; therefore according to the error code description (part 4 table 166) the error code applies.

Err-007

CTT Browse()  HistoryRead()  HistoryUpdate()  Request history for a node whose NodeId is invalid; e.g. ns=0; s=.Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Invalid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadNodeIdInvalid'. SpecLink='4 -> Table 54'.

Err-008

CTT Browse()  HistoryRead()  HistoryUpdate()  Request history for a node that does not exist (but the NodeId is syntactically valid)
Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Unknown'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadNodeIdUnknown'. SpecLink='4 -> Table 54'.

Err-009

CTT Browse()  HistoryRead()  HistoryUpdate()  Request an IndexRange for a node that is not of type Array; e.g. UInt16 etc.

Parameter Details: TestRequirements='Exclude Strings and ByteString'. RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='valid'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadIndexRangeNoData or BadIndexRangeInvalid'.
Step #
Action
Expected Result(s)

1

Parameter Details: IndexRange='“3:1”'.

2

Parameter Details: IndexRange='“3:3”'.

3

Parameter Details: IndexRange='“1:A”'.

4

Parameter Details: IndexRange='“A:1”'.

5

Parameter Details: IndexRange='“1-3'.

6

Parameter Details: IndexRange='"1:3,3:1"'.

7

Parameter Details: IndexRange='"1:3,3:3"'.

8

Parameter Details: IndexRange='"1:3,3:A"'

Err-010

CTT Browse()  HistoryRead()  HistoryUpdate()  Request a syntactically incorrect IndexRange for any/all nodes of type Array.

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='valid'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadIndexRangeInvalid.'. SpecLink='4 -> Table 54'.
Step #
Action
Expected Result(s)

1

Parameter Details: IndexRange='“3:1”'.

2

Parameter Details: IndexRange='"3:3"

3

Parameter Details: IndexRange='“1:A”'.

4

Parameter Details: IndexRange='“1-3”'.

5

Parameter Details: IndexRange='“?:1”'.

6

Parameter Details: IndexRange='“ 1:3”'.

7

Parameter Details: IndexRange='“\t1:3”'.

8

Parameter Details: IndexRange='“\n1:3”'.

9

Parameter Details: IndexRange='“1:3,3:1”'.

10

Parameter Details: IndexRange='“1:3,3:3”'.

11

Parameter Details: IndexRange='“1:3,3:A”'.

Err-011

CTT Browse()  HistoryRead()  HistoryUpdate()  Request an unknown encoding value.

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='unknown'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadDataEncodingInvalid'. SpecLink='4 -> Table 54'.

Err-012

CTT Browse()  HistoryRead()  HistoryUpdate()  Request the raw values for a node which is not accessible to the current user/session (we want to be denied access in this test case):

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='None'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadUserAccessDenied'. SpecLink='4 -> Table 54'.
Skip the test if no secured nodes are available.

Err-013

CTT Browse()  HistoryRead()  HistoryUpdate()  While iteratively reading through history and using ContinuationPoints successfully; reuse a previously used ContinuationPoint (to force the error).
We want a broad amount of history to read so as to ensure receiving a ContinuationPoint.
Step #
Action
Expected Result(s)

1

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Valid'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='1'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='Good'. SpecLink='4 -> Table 54'.

The initial data is received and it is valid.

2

Parameter Details: ContinuationPoint='Received CP'.

More data is received and it is valid.

3

Parameter Details: ContinuationPoint='Prev. received CP'. OperationLevelResults='BadContinuationPointInvalid'. SpecLink='11 -> 6.3 Para 4'.

Err-014

CTT Browse()  HistoryRead()  HistoryUpdate()  Use a Browse to get a CP and then issue that CP in the History call.

Parameter Details: ServiceResult='Good'. OperationLevelResults='BadContinuationPointInvalid'. SpecLink='4 -> Table 54'.

Err-015

CTT Browse()  HistoryRead()  HistoryUpdate()  Read the history to get a CP and then release it. Then issue the read again while specifying the CP that was previously released.

Parameter Details: ServiceResult='Good'. OperationLevelResults='BadContinuationPointInvalid'. SpecLink='11 -> 6.3 Para 4'.

Err-016

CTT Browse()  HistoryRead()  HistoryUpdate()  Request a Timestamp format that is not supported by the Node.

Parameter Details: RequestHeader='default'. TimestampsToReturn='Server'. ReleaseContinuationPoints='FALSE'. NodeId='Valid'. IndexRange='“”'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadTimestampNotSupported.'. SpecLink='11 -> 6.4.3 Para 8.'.
Requires a node which does not support ServerTimestamp etc.

Err-017

CTT Browse()  HistoryRead()  HistoryUpdate()  Read modified values while specifying returnBounds=TRUE

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='valid'. DataEncoding='null'. ContinuationPoint='Empty'. IsReadModified='TRUE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='TRUE'. ServiceResult='Good'. OperationLevelResults='BadInvalidArgument'. SpecLink='11 -> 6.4.3.3. para 2.'.

Err-018

CTT Browse()  HistoryRead()  HistoryUpdate()  Read raw values for a timespan where there are no records.

Parameter Details: TestRequirements='A timespan where there are no records.'. ReturnBounds='FALSE'. OperationLevelResults='BadNoData'. SpecLink='11 -> 6.2.2 Table 16'.

Err-019

CTT Browse()  HistoryRead()  HistoryUpdate()  Read raw values for a timespan where the start/end dates do not exist.

before history / after history
Step #
Action
Expected Result(s)

1

Date is before history. Parameter Details: IsReadModified='FALSE'. startTime='oldest-100years'. endTime='oldest-99years'. NumValuesPerNode='0'. ReturnBounds='TRUE'. OperationLevelResults=BadBoundNotFound or Bad BoundNotSupported'. Spec Link: '11 -> 6.2.2 Table 16'

No data returned.

2

Date is after history. Parameter Details: startTime='newest+99years'. endTime='newest+100years'. OperationLevelResults=BadBoundNotFound or Bad BoundNotSupported'. Spec Link: '11 -> 6.2.2 Table 16'

Err-021

CTT Browse()  HistoryRead()  HistoryUpdate()  Read raw history while the server is not collecting data.
Parameter Details: OperationLevelResults='BadDataLost'. SpecLink='11 -> 6.2.2 Table 16'.
No data returned

Err-022

CTT Browse()  HistoryRead()  HistoryUpdate()  If possible; take the historian's data-store (e.g. database; underlying device etc.) offline and then attempt to read raw data.
Parameter Details: OperationLevelResults='BadDataUnavailable'. SpecLink='11 -> 6.2.2 Table 16'.
No data returned.

Err-023

CTT Browse()  HistoryRead()  HistoryUpdate()  Request an IndexRange for a node that is not of type Array; e.g. UInt16 etc.

Parameter Details: RequestHeader='default'. TimestampsToReturn='Source'. ReleaseContinuationPoints='FALSE'. NodeId='valid'. IndexRange='1'. DataEncoding='Null'. ContinuationPoint='Empty'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='Good'. OperationLevelResults='BadIndexRangeNoData or BadIndexRangeInvalid'.
Step #
Action
Expected Result(s)

1

Parameter Details: IndexRange='1:3'.

2

Parameter Details: IndexRange='2:3'.

3

Parameter Details: IndexRange='last 3'.

4

Parameter Details: IndexRange='middle two'.

Err-024

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify a randomly generated ContinuationPoint in a HistoryRead request.

Parameter Details: OperationLevelResults='BadContinuationPointInvalid'. SpecLink='11 -> 6.3 Para 5 Sen 2'.

Err-025

CTT Browse()  HistoryRead()  HistoryUpdate()  Request history for a valid node; but that node does not contain history (Historizing attribute = FALSE and AccessLevel contains HistoryRead)
Parameter Details: NodeId='valid'.
OperationLevelResults='BadNotSupported'.
No data returned.

Err-026

CTT Browse()  HistoryRead()  HistoryUpdate()  Specify an empty/invalid request header

Parameter Details: RequestHeader='default'. TimestampsToReturn='Both'. ReleaseContinuationPoints='FALSE'. NodeId='null'. IndexRange='null'. DataEncoding='null'. ContinuationPoint='null'. IsReadModified='FALSE'. startTime='timestamp1'. endTime='timestampX'. NumValuesPerNode='0'. ReturnBounds='FALSE'. ServiceResult='BadNothingToDo'. SpecLink='4 -> Table 53'.

Err-027

CTT Unavailable  HistoryRead()  Do not specify 2 of 3 required Parameters.
Step #
Action
Expected Result(s)

1

Parameter Details: startTime='timestamp1'. endTime='DateTime.Min'. NumValuesPerNode='0'. ServiceResult='BadHistoryOperationInvalid'.

2

Parameter Details: startTime='DateTime.Min'. endTime='timestampX'. NumValuesPerNode='0'. ServiceResult='BadHistoryOperationInvalid'.