public void ArraySubRangeIndexRangeValidationTest() { // Test with String array WriteValue writeValue = new WriteValue() { AttributeId = Attributes.Value, NodeId = new NodeId(4000, 8), Value = new DataValue(new Variant(new string[] { "ha" })), IndexRange = "0,1:2" }; Assert.AreEqual(BuiltInType.String, writeValue.Value.WrappedValue.TypeInfo.BuiltInType); Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); // Test with ByteString array writeValue.Value = new DataValue(new Variant(new byte[][] { new byte[] { 0x22, 0x21 } })); Assert.AreEqual(BuiltInType.ByteString, writeValue.Value.WrappedValue.TypeInfo.BuiltInType); Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); // Negative test with Int32 array writeValue.Value = new DataValue(new Variant(new int[] { 1, 2 })); Assert.AreEqual(BuiltInType.Int32, writeValue.Value.WrappedValue.TypeInfo.BuiltInType); ServiceResult validateResult = WriteValue.Validate(writeValue); Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Good"); Assert.AreEqual(new StatusCode(StatusCodes.BadTypeMismatch), validateResult.StatusCode); }
public void ArrayIndexRangeValidationTest() { // Positive test WriteValue writeValue = new WriteValue() { AttributeId = Attributes.Value, NodeId = new NodeId(4000, 8), Value = new DataValue(new Variant(new int[] { 1, 2, 3, 4, 5 })), IndexRange = "0:4" }; Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); // Test with range that does not match the length of the array writeValue.IndexRange = "0:5"; ServiceResult validateResult = WriteValue.Validate(writeValue); Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Bad"); Assert.AreEqual(new StatusCode(StatusCodes.BadIndexRangeNoData), validateResult.StatusCode); }
public void MatrixIndexRangeValidationTest() { int[,] int3x3Matrix = new int[, ] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, }; Matrix matrix = new Matrix(int3x3Matrix, BuiltInType.Int32); // Positive test WriteValue writeValue = new WriteValue() { AttributeId = Attributes.Value, NodeId = new NodeId(4000, 8), Value = new DataValue(new Variant(matrix)), IndexRange = "1,1" }; Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); // Test that Matrix value is not allowed when IndexRange is for one-dimensional array writeValue.IndexRange = "1"; ServiceResult validateResult = WriteValue.Validate(writeValue); Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Bad"); Assert.AreEqual(new StatusCode(StatusCodes.BadTypeMismatch), validateResult.StatusCode); // Test that Matrix value is allowed when IndexRange is not specified writeValue.IndexRange = null; Assert.True(ServiceResult.IsGood(WriteValue.Validate(writeValue)), "WriteValue.Validate result was not Good"); // Test that multidimensional IndexRange is not allowed for scalar variable writeValue.Value = new DataValue(new Variant(1)); writeValue.IndexRange = "1,1"; validateResult = WriteValue.Validate(writeValue); Assert.True(ServiceResult.IsBad(validateResult), "WriteValue.Validate result was not Bad"); Assert.AreEqual(new StatusCode(StatusCodes.BadTypeMismatch), validateResult.StatusCode); }