public static void SkipValue_NestedValue_HappyPath(string hexEncoding) { byte[] encoding = $"8301{hexEncoding}03".HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); reader.ReadInt64(); reader.SkipValue(); reader.ReadInt64(); reader.ReadEndArray(); Assert.Equal(CborReaderState.Finished, reader.Peek()); }
public static void ReadEndMap_ImbalancedCall_ShouldThrowInvalidOperationException(string hexEncoding, int depth) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); for (int i = 0; i < depth; i++) { reader.ReadStartArray(); } Assert.Throws <InvalidOperationException>(() => reader.ReadEndMap()); }
public static void ReadEncodedValue_NestedValue_HappyPath(string hexEncoding) { byte[] encoding = $"8301{hexEncoding}60".HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); reader.ReadInt64(); byte[] encodedValue = reader.ReadEncodedValue().ToArray(); Assert.Equal(hexEncoding, encodedValue.ByteArrayToHex().ToLower()); }
public static void ReadTag_CallingEndReadArrayPrematurely_ShouldThrowInvalidOperationException(string hexEncoding) { // encoding is valid CBOR, so should not throw FormatException byte[] data = hexEncoding.HexToByteArray(); var reader = new CborReader(data); reader.ReadStartArray(); reader.ReadInt64(); reader.ReadTag(); Assert.Equal(CborReaderState.UnsignedInteger, reader.Peek()); Assert.Throws <InvalidOperationException>(() => reader.ReadEndArray()); }
public static void SkipValue_NotAtValue_ShouldThrowInvalidOperationException() { byte[] encoding = "80".HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); int bytesRemaining = reader.BytesRemaining; Assert.Throws <InvalidOperationException>(() => reader.SkipValue()); Assert.Equal(bytesRemaining, reader.BytesRemaining); }
public static void ReadArray_IndefiniteLength_PrematureEndArrayCall_ShouldThrowInvalidOperationException(string hexEncoding, int length) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); for (int i = 1; i < length; i++) { reader.ReadInt64(); } Assert.Throws <InvalidOperationException>(() => reader.ReadEndArray()); }
public static void EndReadArray_DefiniteLengthNotMet_WithNestedData_ShouldThrowInvalidOperationException(string hexEncoding, int expectedLength) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); int?length = reader.ReadStartArray(); Assert.Equal(expectedLength, (int)length !.Value); for (int i = 1; i < expectedLength; i++) { int?nestedLength = reader.ReadStartArray(); Assert.Equal(1, nestedLength !.Value); reader.ReadInt64(); reader.ReadEndArray(); } int bytesRemaining = reader.BytesRemaining; Assert.Throws <InvalidOperationException>(() => reader.ReadEndArray()); Assert.Equal(bytesRemaining, reader.BytesRemaining); }
public static void ReadArray_IncorrectDefiniteLength_NestedValues_ShouldThrowFormatException(string hexEncoding, int expectedLength, int actualLength) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); int?length = reader.ReadStartArray(); Assert.Equal(expectedLength, (int)length !.Value); for (int i = 0; i < actualLength; i++) { int?innerLength = reader.ReadStartArray(); Assert.Equal(1, innerLength !.Value); reader.ReadInt64(); reader.ReadEndArray(); } int bytesRemaining = reader.BytesRemaining; Assert.Throws <FormatException>(() => reader.ReadInt64()); Assert.Equal(bytesRemaining, reader.BytesRemaining); }
public static void ReadArray_IndefiniteLength_MissingBreakByte_ShouldReportEndOfData(string hexEncoding) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); while (reader.Peek() == CborReaderState.UnsignedInteger) { reader.ReadInt64(); } Assert.Equal(CborReaderState.EndOfData, reader.Peek()); }
public static void VerifyArray(CborReader reader, params object[] expectedValues) { Assert.Equal(CborReaderState.StartArray, reader.Peek()); ulong?length = reader.ReadStartArray(); Assert.NotNull(length); Assert.Equal(expectedValues.Length, (int)length !.Value); foreach (object value in expectedValues) { switch (value) { case int expected: if (expected >= 0) { Assert.Equal(CborReaderState.UnsignedInteger, reader.Peek()); } else { Assert.Equal(CborReaderState.NegativeInteger, reader.Peek()); } long i = reader.ReadInt64(); Assert.Equal(expected, (int)i); break; case string expected: Assert.Equal(CborReaderState.TextString, reader.Peek()); string s = reader.ReadTextString(); Assert.Equal(expected, s); break; case byte[] expected: Assert.Equal(CborReaderState.ByteString, reader.Peek()); byte[] b = reader.ReadByteString(); Assert.Equal(expected, b); break; case object[] nested: VerifyArray(reader, nested); break; default: throw new ArgumentException($"Unrecognized argument type {value.GetType()}"); } } Assert.Equal(CborReaderState.EndArray, reader.Peek()); reader.ReadEndArray(); }
public static void ReadBigInteger_InvalidTagPayload_ShouldRollbackToInitialState(string hexEncoding) { var reader = new CborReader(hexEncoding.HexToByteArray()); reader.ReadStartArray(); int bytesRead = reader.BytesRead; int bytesRemaining = reader.BytesRemaining; Assert.Throws <FormatException>(() => reader.ReadBigInteger()); Assert.Equal(bytesRead, reader.BytesRead); Assert.Equal(bytesRemaining, reader.BytesRemaining); Assert.Equal(CborReaderState.Tag, reader.PeekState()); }
public static void ReadTag_NestedTagWithMissingPayload_ShouldThrowFormatException() { byte[] encoding = "9fc2ff".HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); reader.ReadTag(); int bytesRemaining = reader.BytesRemaining; Assert.Equal(CborReaderState.FormatError, reader.PeekState()); Assert.Throws <FormatException>(() => reader.ReadEndArray()); Assert.Equal(bytesRemaining, reader.BytesRemaining); }
public static void ReadUnixTimeSeconds_InvalidFormat_ShouldRollbackToInitialState(string hexEncoding) { var reader = new CborReader(hexEncoding.HexToByteArray()); reader.ReadStartArray(); int bytesRead = reader.BytesRead; int bytesRemaining = reader.BytesRemaining; Assert.Throws <FormatException>(() => reader.ReadUnixTimeSeconds()); Assert.Equal(bytesRead, reader.BytesRead); Assert.Equal(bytesRemaining, reader.BytesRemaining); Assert.Equal(CborReaderState.Tag, reader.PeekState()); Assert.Equal(CborTag.UnixTimeSeconds, reader.ReadTag()); }
public static void ReadArray_DefiniteLengthExceeded_ShouldThrowInvalidOperationException(string hexEncoding, int expectedLength) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); ulong?length = reader.ReadStartArray(); Assert.Equal(expectedLength, (int)length !.Value); for (int i = 0; i < expectedLength; i++) { reader.ReadInt64(); } Assert.Throws <InvalidOperationException>(() => reader.ReadInt64()); }
public static void ReadArray_IncorrectDefiniteLength_ShouldThrowFormatException(string hexEncoding, int expectedLength, int actualLength) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); ulong?length = reader.ReadStartArray(); Assert.Equal(expectedLength, (int)length !.Value); for (int i = 0; i < actualLength; i++) { reader.ReadInt64(); } Assert.Throws <FormatException>(() => reader.ReadInt64()); }
public static void CborReader_MultipleRootValuesAllowed_ReadingBeyondEndOfBuffer_ShouldThrowInvalidOperationException() { string hexEncoding = "810102"; var reader = new CborReader(hexEncoding.HexToByteArray(), allowMultipleRootLevelValues: true); Assert.Equal(CborReaderState.StartArray, reader.PeekState()); reader.ReadStartArray(); reader.ReadInt32(); reader.ReadEndArray(); Assert.Equal(CborReaderState.UnsignedInteger, reader.PeekState()); reader.ReadInt32(); Assert.Equal(CborReaderState.Finished, reader.PeekState()); Assert.Throws <InvalidOperationException>(() => reader.ReadInt32()); }
public static void VerifyArray(CborReader reader, params object[] expectedValues) { Assert.Equal(CborReaderState.StartArray, reader.Peek()); ulong?length = reader.ReadStartArray(); Assert.NotNull(length); Assert.Equal(expectedValues.Length, (int)length !.Value); foreach (object value in expectedValues) { VerifyValue(reader, value); } Assert.Equal(CborReaderState.EndArray, reader.Peek()); reader.ReadEndArray(); }
public static void VerifyArray(CborReader reader, object[] expectedValues, bool expectDefiniteLengthCollections = true) { Assert.Equal(CborReaderState.StartArray, reader.Peek()); ulong?length = reader.ReadStartArray(); if (expectDefiniteLengthCollections) { Assert.NotNull(length); Assert.Equal(expectedValues.Length, (int)length !.Value); } else { Assert.Null(length); } foreach (object value in expectedValues) { VerifyValue(reader, value); } Assert.Equal(CborReaderState.EndArray, reader.Peek()); reader.ReadEndArray(); }