/// <inheritdoc />
 public override void DecodeBinaryModeEventData(ReadOnlyMemory <byte> body, CloudEvent cloudEvent)
 {
     Validation.CheckNotNull(cloudEvent, nameof(cloudEvent));
     if (cloudEvent.DataContentType is string dataContentType && dataContentType.StartsWith("text/"))
     {
         Encoding encoding = MimeUtilities.GetEncoding(new ContentType(dataContentType));
         cloudEvent.Data = BinaryDataUtilities.GetString(body, encoding);
     }
        public void EncodeBinaryModeEventData_TextType_String()
        {
            var cloudEvent = new CloudEvent().PopulateRequiredAttributes();

            cloudEvent.Data            = "some text";
            cloudEvent.DataContentType = "text/anything";
            var bytes = new JsonEventFormatter().EncodeBinaryModeEventData(cloudEvent);

            Assert.Equal("some text", BinaryDataUtilities.GetString(bytes, Encoding.UTF8));
        }
        private static T ParseJsonImpl <T>(ReadOnlyMemory <byte> data)
        {
            string text       = BinaryDataUtilities.GetString(data, Encoding.UTF8);
            var    serializer = new JsonSerializer
            {
                DateParseHandling = DateParseHandling.None
            };

            return(serializer.Deserialize <T>(new JsonTextReader(new StringReader(text))) !);
        }
        public void EncodeBinaryModeEventData_JsonDataType_JToken()
        {
            // This would definitely be an odd thing to do, admittedly...
            var cloudEvent = new CloudEvent().PopulateRequiredAttributes();

            cloudEvent.Data            = new JValue(100);
            cloudEvent.DataContentType = "application/json";
            var bytes = new JsonEventFormatter().EncodeBinaryModeEventData(cloudEvent);

            Assert.Equal("100", BinaryDataUtilities.GetString(bytes, Encoding.UTF8));
        }
        public void EncodeBinaryModeEventData_NoContentType_ConvertsStringToJson()
        {
            var cloudEvent = new CloudEvent
            {
                Data = "some text"
            }.PopulateRequiredAttributes();

            // EncodeBinaryModeEventData doesn't actually populate the content type of the CloudEvent,
            // but treat the data as if we'd explicitly specified application/json.
            var    data = new JsonEventFormatter().EncodeBinaryModeEventData(cloudEvent);
            string text = BinaryDataUtilities.GetString(data, Encoding.UTF8);

            Assert.Equal("\"some text\"", text);
        }
Exemple #6
0
        public async Task ToCloudEvent_Invalid()
        {
            var cloudEvent   = new CloudEvent().PopulateRequiredAttributes();
            var formatter    = new JsonEventFormatter();
            var contentBytes = formatter.EncodeStructuredModeMessage(cloudEvent, out var contentType);
            // Remove the required 'id' attribute
            var obj = JObject.Parse(BinaryDataUtilities.GetString(contentBytes, Encoding.UTF8));

            obj.Remove("id");
            contentBytes = Encoding.UTF8.GetBytes(obj.ToString());

            await Assert.ThrowsAsync <ArgumentException>(() => CreateRequestMessage(contentBytes, contentType).ToCloudEventAsync(formatter));

            await Assert.ThrowsAsync <ArgumentException>(() => CreateResponseMessage(contentBytes, contentType).ToCloudEventAsync(formatter));
        }