Exemplo n.º 1
0
        public static void WriteEncodedValue_IndefiniteLengthByteString_HappyPath()
        {
            using var writer = new CborWriter();

            writer.WriteStartByteStringIndefiniteLength();
            writer.WriteByteString(new byte[] { 1, 1, 1 });
            writer.WriteEncodedValue("43020202".HexToByteArray());
            writer.WriteEndByteStringIndefiniteLength();

            byte[] encoding = writer.ToArray();
            Assert.Equal("5f4301010143020202ff", encoding.ByteArrayToHex().ToLower());
        }
Exemplo n.º 2
0
        public static void EndWriteMap_DefiniteLengthNotMet_ShouldThrowInvalidOperationException(int definiteLength)
        {
            using var writer = new CborWriter();
            writer.WriteStartMap(definiteLength);
            for (int i = 1; i < definiteLength; i++)
            {
                writer.WriteTextString($"key_{i}");
                writer.WriteInt64(i);
            }

            Assert.Throws <InvalidOperationException>(() => writer.WriteEndMap());
        }
Exemplo n.º 3
0
        public static void WriteEncodedValue_IndefiniteLengthTextString_HappyPath()
        {
            using var writer = new CborWriter();

            writer.WriteStartTextStringIndefiniteLength();
            writer.WriteTextString("foo");
            writer.WriteEncodedValue("63626172".HexToByteArray());
            writer.WriteEndTextStringIndefiniteLength();

            byte[] encoding = writer.ToArray();
            Assert.Equal("7f63666f6f63626172ff", encoding.ByteArrayToHex().ToLower());
        }
Exemplo n.º 4
0
        public static void Roundtrip_ByteString(string?hexInput)
        {
            byte[]? input = hexInput?.HexToByteArray();
#endif
            using var writer = new CborWriter();
            writer.WriteByteString(input);
            byte[] encoding = writer.GetEncoding();

            var    reader = new CborReader(encoding);
            byte[] result = reader.ReadByteString();
            AssertHelper.HexEqual(input ?? Array.Empty <byte>(), result);
        }
Exemplo n.º 5
0
        public static void ByteString_Encoding_ShouldContainInputBytes(string?hexInput)
        {
            byte[]? input = hexInput?.HexToByteArray();
#endif
            using var writer = new CborWriter();
            writer.WriteByteString(input);
            byte[] encoding = writer.GetEncoding();

            int length = input?.Length ?? 0;
            int lengthEncodingLength = GetLengthEncodingLength(length);

            Assert.Equal(lengthEncodingLength + length, encoding.Length);
            AssertHelper.HexEqual(input ?? Array.Empty <byte>(), encoding.Skip(lengthEncodingLength).ToArray());
Exemplo n.º 6
0
        public static void WriteEndArray_DefiniteLengthNotMet_WithNestedData_ShouldThrowInvalidOperationException(int definiteLength)
        {
            using var writer = new CborWriter();
            writer.WriteStartArray(definiteLength);
            for (int i = 1; i < definiteLength; i++)
            {
                writer.WriteStartArray(definiteLength: 1);
                writer.WriteInt64(i);
                writer.WriteEndArray();
            }

            Assert.Throws <InvalidOperationException>(() => writer.WriteEndArray());
        }
Exemplo n.º 7
0
        public static void GetEncoding_MultipleRootLevelValuesAllowed_PartialRootValue_ShouldThrowInvalidOperationException()
        {
            using var writer = new CborWriter(allowMultipleRootLevelValues: true);

            writer.WriteStartArray(1);
            writer.WriteDouble(3.14);
            writer.WriteEndArray();
            writer.WriteStartArray(1);
            writer.WriteDouble(3.14);
            // misses writer.WriteEndArray();

            Assert.Throws <InvalidOperationException>(() => writer.GetEncoding());
        }
Exemplo n.º 8
0
        public static void WriteTag_NoValue_ShouldThrowInvalidOperationException(ulong[] tags)
        {
            using var writer = new CborWriter();

            foreach (ulong tag in tags)
            {
                writer.WriteTag((CborTag)tag);
            }

            InvalidOperationException exn = Assert.Throws <InvalidOperationException>(() => writer.GetEncoding());

            Assert.Equal("Buffer contains incomplete CBOR document.", exn.Message);
        }
Exemplo n.º 9
0
        public static void TryWriteEncoding_HappyPath(object value)
        {
            using var writer = new CborWriter();
            Helpers.WriteValue(writer, value);

            byte[] encoding = writer.GetEncoding();
            byte[] target   = new byte[encoding.Length];

            bool result = writer.TryWriteEncoding(target, out int bytesWritten);

            Assert.True(result);
            Assert.Equal(encoding.Length, bytesWritten);
            Assert.Equal(encoding, target);
        }
Exemplo n.º 10
0
        public static void TryWriteEncoding_DestinationTooSmall_ShouldReturnFalse(object value)
        {
            using var writer = new CborWriter();
            Helpers.WriteValue(writer, value);

            byte[] encoding = writer.GetEncoding();
            byte[] target   = new byte[encoding.Length - 1];

            bool result = writer.TryWriteEncoding(target, out int bytesWritten);

            Assert.False(result);
            Assert.Equal(0, bytesWritten);
            Assert.All(target, b => Assert.Equal(0, b));
        }
Exemplo n.º 11
0
        public static void WriteEncodedValue_NestedValue_HappyPath(string hexEncodedValue)
        {
            byte[] encodedValue = hexEncodedValue.HexToByteArray();

            using var writer = new CborWriter();
            writer.WriteStartArray(3);
            writer.WriteInt64(1);
            writer.WriteEncodedValue(encodedValue);
            writer.WriteTextString("");
            writer.WriteEndArray();

            string hexResult = writer.GetEncoding().ByteArrayToHex();

            Assert.Equal("8301" + hexEncodedValue + "60", hexResult.ToLower());
        }
Exemplo n.º 12
0
        public static void EndWriteMap_IndefiniteLength_EvenItems_ShouldThrowInvalidOperationException(int length)
        {
            using var writer = new CborWriter();
            writer.WriteStartMapIndefiniteLength();

            for (int i = 1; i < length; i++)
            {
                writer.WriteTextString($"key_{i}");
                writer.WriteInt64(i);
            }

            writer.WriteInt64(0);

            Assert.Throws <InvalidOperationException>(() => writer.WriteEndMap());
        }
Exemplo n.º 13
0
            public static void WriteMap(CborWriter writer, params object[] keyValuePairs)
            {
                if (!IsCborMapRepresentation(keyValuePairs))
                {
                    throw new ArgumentException($"CBOR map representation must contain odd number of elements prepended with a '{MapPrefixIdentifier}' constant.");
                }

                writer.WriteStartMap(keyValuePairs.Length / 2);

                foreach (object value in keyValuePairs.Skip(1))
                {
                    WriteValue(writer, value);
                }

                writer.WriteEndMap();
            }
Exemplo n.º 14
0
            public static void WriteArray(CborWriter writer, object[] values, bool useDefiniteLengthCollections = true)
            {
                if (useDefiniteLengthCollections)
                {
                    writer.WriteStartArray(values.Length);
                }
                else
                {
                    writer.WriteStartArrayIndefiniteLength();
                }

                foreach (object value in values)
                {
                    WriteValue(writer, value, useDefiniteLengthCollections);
                }

                writer.WriteEndArray();
            }
Exemplo n.º 15
0
        public static void WriteEndArray_AfterStartMap_ShouldThrowInvalidOperationException(int depth)
        {
            using var writer = new CborWriter();

            for (int i = 0; i < depth; i++)
            {
                if (i % 2 == 0)
                {
                    writer.WriteStartArray(1);
                }
                else
                {
                    writer.WriteStartMap(1);
                }
            }

            writer.WriteStartMap(definiteLength: 0);
            Assert.Throws <InvalidOperationException>(() => writer.WriteEndArray());
        }
Exemplo n.º 16
0
        public static void WriteArray(CborWriter writer, params object[] values)
        {
            writer.WriteStartArray(values.Length);
            foreach (object value in values)
            {
                switch (value)
                {
                case int i: writer.WriteInt64(i); break;

                case string s: writer.WriteTextString(s); break;

                case byte[] b: writer.WriteByteString(b); break;

                case object[] nested: ArrayWriterHelper.WriteArray(writer, nested); break;

                default: throw new ArgumentException($"Unrecognized argument type {value.GetType()}");
                }
                ;
            }
            writer.WriteEndArray();
        }
Exemplo n.º 17
0
            public static void WriteValue(CborWriter writer, object value, bool useDefiniteLengthCollections = true)
            {
                switch (value)
                {
                case null: writer.WriteNull(); break;

                case bool b: writer.WriteBoolean(b); break;

                case int i: writer.WriteInt64(i); break;

                case long i: writer.WriteInt64(i); break;

                case ulong i: writer.WriteUInt64(i); break;

                case float f: writer.WriteSingle(f); break;

                case double d: writer.WriteDouble(d); break;

                case string s: writer.WriteTextString(s); break;

                case byte[] b: writer.WriteByteString(b); break;

                case byte[][] chunks: WriteChunkedByteString(writer, chunks); break;

                case string[] chunks: WriteChunkedTextString(writer, chunks); break;

                case object[] nested when IsCborMapRepresentation(nested): WriteMap(writer, nested, useDefiniteLengthCollections); break;

                case object[] nested when IsEncodedValueRepresentation(nested):
                    byte[]    encodedValue = ((string)nested[1]).HexToByteArray();

                    writer.WriteEncodedValue(encodedValue);
                    break;

                case object[] nested: WriteArray(writer, nested, useDefiniteLengthCollections); break;

                default: throw new ArgumentException($"Unrecognized argument type {value.GetType()}");
                }
                ;
            }
Exemplo n.º 18
0
            public static void WriteValue(CborWriter writer, object value)
            {
                switch (value)
                {
                case int i: writer.WriteInt64(i); break;

                case long i: writer.WriteInt64(i); break;

                case ulong i: writer.WriteUInt64(i); break;

                case string s: writer.WriteTextString(s); break;

                case byte[] b: writer.WriteByteString(b); break;

                case object[] nested when IsCborMapRepresentation(nested): WriteMap(writer, nested); break;

                case object[] nested: WriteArray(writer, nested); break;

                default: throw new ArgumentException($"Unrecognized argument type {value.GetType()}");
                }
                ;
            }
Exemplo n.º 19
0
            public static void WriteMap(CborWriter writer, object[] keyValuePairs, bool useDefiniteLengthCollections = true)
            {
                if (!IsCborMapRepresentation(keyValuePairs))
                {
                    throw new ArgumentException($"CBOR map representation must contain odd number of elements prepended with a '{MapPrefixIdentifier}' constant.");
                }

                if (useDefiniteLengthCollections)
                {
                    writer.WriteStartMap(keyValuePairs.Length / 2);
                }
                else
                {
                    writer.WriteStartMapIndefiniteLength();
                }

                foreach (object value in keyValuePairs.Skip(1))
                {
                    WriteValue(writer, value, useDefiniteLengthCollections);
                }

                writer.WriteEndMap();
            }
Exemplo n.º 20
0
 public static void ConformanceLevel_DefaultValue_ShouldEqualLax()
 {
     using var writer = new CborWriter();
     Assert.Equal(CborConformanceLevel.Lax, writer.ConformanceLevel);
 }
Exemplo n.º 21
0
 public static void CborWriter_WritingTwoPrimitiveValues_ShouldThrowInvalidOperationException()
 {
     using var writer = new CborWriter();
     writer.WriteInt64(42);
     Assert.Throws <InvalidOperationException>(() => writer.WriteTextString("lorem ipsum"));
 }
Exemplo n.º 22
0
 public static void GetEncoding_OnInCompleteValue_ShouldThrowInvalidOperationExceptoin()
 {
     using var writer = new CborWriter();
     Assert.Throws <InvalidOperationException>(() => writer.GetEncoding());
 }
Exemplo n.º 23
0
 public static void WriteEncodedValue_ValidPayloadWithTrailingBytes_ShouldThrowArgumentException()
 {
     using var writer = new CborWriter();
     Assert.Throws <ArgumentException>(() => writer.WriteEncodedValue(new byte[] { 0x01, 0x01 }));
 }
Exemplo n.º 24
0
 public static void WriteEncodedValue_InvalidCbor_ShouldThrowArgumentException(string hexEncodedInput)
 {
     byte[] encodedInput = hexEncodedInput.HexToByteArray();
     using var writer = new CborWriter();
     Assert.Throws <ArgumentException>(() => writer.WriteEncodedValue(encodedInput));
 }
Exemplo n.º 25
0
 public static void WriteEncodedValue_AtEndOfDefiniteLengthCollection_ShouldThrowInvalidOperationException()
 {
     using var writer = new CborWriter();
     writer.WriteInt64(0);
     Assert.Throws <InvalidOperationException>(() => writer.WriteEncodedValue(new byte[] { 0x01 }));
 }
Exemplo n.º 26
0
 public static void WriteEncodedValue_BadIndefiniteLengthStringValue_ShouldThrowInvalidOperationException()
 {
     using var writer = new CborWriter();
     writer.WriteStartTextString();
     Assert.Throws <InvalidOperationException>(() => writer.WriteEncodedValue(new byte[] { 0x01 }));
 }
Exemplo n.º 27
0
 public static void WriteByteString_IndefiniteLength_ImbalancedWrites_ShouldThrowInvalidOperationException(string opName)
 {
     using var writer = new CborWriter();
     writer.WriteStartByteString();
     Assert.Throws <InvalidOperationException>(() => Helpers.ExecOperation(writer, opName));
 }
Exemplo n.º 28
0
 public static void WriteUnixTimeSeconds_Double_InvalidInput_ShouldThrowArgumentException(double value)
 {
     using var writer = new CborWriter();
     Assert.Throws <ArgumentException>(() => writer.WriteUnixTimeSeconds(value));
 }
Exemplo n.º 29
0
 internal static void WriteTaggedValue_UnsupportedConformance_ShouldThrowInvalidOperationException(CborConformanceLevel level, object value)
 {
     using var writer = new CborWriter(level);
     Assert.Throws <InvalidOperationException>(() => Helpers.WriteValue(writer, value));
     Assert.Equal(0, writer.BytesWritten);
 }
Exemplo n.º 30
0
 internal static void WriteTaggedValue_SupportedConformance_ShouldSucceed(CborConformanceLevel level, object value)
 {
     using var writer = new CborWriter(level);
     Helpers.WriteValue(writer, value);
 }