Ejemplo n.º 1
0
        public async Task Controller_WithValidCloudEvent_NoContent_DeserializesUsingPipeline(ContentMode contentMode)
        {
            // Arrange
            var expectedExtensionKey   = "comexampleextension1";
            var expectedExtensionValue = Guid.NewGuid().ToString();
            var cloudEvent             = new CloudEvent
            {
                Type                   = "test-type-æøå",
                Source                 = new Uri("urn:integration-tests"),
                Id                     = Guid.NewGuid().ToString(),
                DataContentType        = "application/json",
                Data                   = new { key1 = "value1" },
                [expectedExtensionKey] = expectedExtensionValue
            };

            var httpContent = new CloudEventHttpContent(cloudEvent, contentMode, new JsonEventFormatter());

            // Act
            var result = await _factory.CreateClient().PostAsync("/api/events/receive", httpContent);

            // Assert
            string resultContent = await result.Content.ReadAsStringAsync();

            Assert.Equal(HttpStatusCode.OK, result.StatusCode);
            Assert.Contains(cloudEvent.Id, resultContent);
            Assert.Contains(cloudEvent.Type, resultContent);
            Assert.Contains($"\"{expectedExtensionKey}\": \"{expectedExtensionValue}\"", resultContent);
        }
Ejemplo n.º 2
0
        public void NoContentType_NoContent()
        {
            var cloudEvent = CreateEmptyCloudEvent();
            var content    = new CloudEventHttpContent(cloudEvent, ContentMode.Binary, new JsonEventFormatter());

            Assert.Null(content.Headers.ContentType);
        }
Ejemplo n.º 3
0
        public void ContentType_FromCloudEvent_BinaryMode()
        {
            var cloudEvent = CreateEmptyCloudEvent();

            cloudEvent.DataContentType = "text/plain";
            var content             = new CloudEventHttpContent(cloudEvent, ContentMode.Binary, new JsonEventFormatter());
            var expectedContentType = new MediaTypeHeaderValue("text/plain");

            Assert.Equal(expectedContentType, content.Headers.ContentType);
        }
Ejemplo n.º 4
0
        private async Task OnExecuteAsync()
        {
            var cloudEvent = new CloudEvent
            {
                Type            = Type,
                Source          = new Uri(Source),
                DataContentType = MediaTypeNames.Application.Json,
                Data            = JsonConvert.SerializeObject("hey there!")
            };

            var content = new CloudEventHttpContent(cloudEvent, ContentMode.Structured, new JsonEventFormatter());

            var httpClient = new HttpClient();
            // your application remains in charge of adding any further headers or
            // other information required to authenticate/authorize or otherwise
            // dispatch the call at the server.
            var result = (await httpClient.PostAsync(this.Url, content));

            Console.WriteLine(result.StatusCode);
        }
        public async Task HttpBinaryClientSendTest()
        {
            var cloudEvent = new CloudEvent
            {
                Type                     = "com.github.pull.create",
                Source                   = new Uri("https://github.com/cloudevents/spec/pull/123"),
                Id                       = "A234-1234-1234",
                Time                     = SampleTimestamp,
                DataContentType          = MediaTypeNames.Text.Xml,
                Data                     = "<much wow=\"xml\"/>",
                ["comexampleextension1"] = "value",
                ["utf8examplevalue"]     = "æøå"
            };

            string ctx     = Guid.NewGuid().ToString();
            var    content = new CloudEventHttpContent(cloudEvent, ContentMode.Binary, new JsonEventFormatter());

            content.Headers.Add(TestContextHeader, ctx);

            PendingRequests.TryAdd(ctx, context =>
            {
                try
                {
                    Assert.True(context.Request.IsCloudEvent());

                    var receivedCloudEvent = context.Request.ToCloudEvent(new JsonEventFormatter());

                    Assert.Equal(CloudEventsSpecVersion.V1_0, receivedCloudEvent.SpecVersion);
                    Assert.Equal("com.github.pull.create", receivedCloudEvent.Type);
                    Assert.Equal(new Uri("https://github.com/cloudevents/spec/pull/123"), receivedCloudEvent.Source);
                    Assert.Equal("A234-1234-1234", receivedCloudEvent.Id);
                    AssertTimestampsEqual(SampleTimestamp, cloudEvent.Time.Value);
                    Assert.Equal(MediaTypeNames.Text.Xml, receivedCloudEvent.DataContentType);

                    // The non-ASCII attribute value should have been URL-encoded using UTF-8 for the header.
                    Assert.True(content.Headers.TryGetValues("ce-utf8examplevalue", out var utf8ExampleValues));
                    Assert.Equal("%C3%A6%C3%B8%C3%A5", utf8ExampleValues.Single());
                    Assert.Equal("<much wow=\"xml\"/>", receivedCloudEvent.Data);

                    Assert.Equal("value", receivedCloudEvent["comexampleextension1"]);
                    // The non-ASCII attribute value should have been correctly URL-decoded.
                    Assert.Equal("æøå", receivedCloudEvent["utf8examplevalue"]);
                    context.Response.StatusCode = (int)HttpStatusCode.NoContent;
                }
                catch (Exception e)
                {
                    using (var sw = new StreamWriter(context.Response.OutputStream))
                    {
                        sw.Write(e.ToString());
                        context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    }
                }

                context.Response.Close();
                return(Task.CompletedTask);
            });

            var httpClient = new HttpClient();
            var result     = await httpClient.PostAsync(new Uri(ListenerAddress + "ep"), content);

            if (result.StatusCode != HttpStatusCode.NoContent)
            {
                throw new InvalidOperationException(result.Content.ReadAsStringAsync().GetAwaiter().GetResult());
            }
        }
        public async Task HttpStructuredClientSendTest()
        {
            var cloudEvent = new CloudEvent
            {
                Type                     = "com.github.pull.create",
                Source                   = new Uri("https://github.com/cloudevents/spec/pull/123"),
                Id                       = "A234-1234-1234",
                Time                     = SampleTimestamp,
                DataContentType          = MediaTypeNames.Text.Xml,
                Data                     = "<much wow=\"xml\"/>",
                ["comexampleextension1"] = "value",
                ["utf8examplevalue"]     = "æøå"
            };

            string ctx     = Guid.NewGuid().ToString();
            var    content = new CloudEventHttpContent(cloudEvent, ContentMode.Structured, new JsonEventFormatter());

            content.Headers.Add(TestContextHeader, ctx);

            PendingRequests.TryAdd(ctx, context =>
            {
                try
                {
                    // Structured events contain a copy of the CloudEvent attributes as HTTP headers.
                    var headers = context.Request.Headers;
                    Assert.Equal("1.0", headers["ce-specversion"]);
                    Assert.Equal("com.github.pull.create", headers["ce-type"]);
                    Assert.Equal("https://github.com/cloudevents/spec/pull/123", headers["ce-source"]);
                    Assert.Equal("A234-1234-1234", headers["ce-id"]);
                    Assert.Equal("2018-04-05T17:31:00Z", headers["ce-time"]);
                    // Note that datacontenttype is mapped in this case, but would not be included in binary mode.
                    Assert.Equal("text/xml", headers["ce-datacontenttype"]);
                    Assert.Equal("application/cloudevents+json; charset=utf-8", context.Request.ContentType);
                    Assert.Equal("value", headers["ce-comexampleextension1"]);
                    // The non-ASCII attribute value should have been URL-encoded using UTF-8 for the header.
                    Assert.Equal("%C3%A6%C3%B8%C3%A5", headers["ce-utf8examplevalue"]);

                    var receivedCloudEvent = context.Request.ToCloudEvent(new JsonEventFormatter());

                    Assert.Equal(CloudEventsSpecVersion.V1_0, receivedCloudEvent.SpecVersion);
                    Assert.Equal("com.github.pull.create", receivedCloudEvent.Type);
                    Assert.Equal(new Uri("https://github.com/cloudevents/spec/pull/123"), receivedCloudEvent.Source);
                    Assert.Equal("A234-1234-1234", receivedCloudEvent.Id);
                    AssertTimestampsEqual(SampleTimestamp, cloudEvent.Time.Value);
                    Assert.Equal(MediaTypeNames.Text.Xml, receivedCloudEvent.DataContentType);
                    Assert.Equal("<much wow=\"xml\"/>", receivedCloudEvent.Data);

                    Assert.Equal("value", receivedCloudEvent["comexampleextension1"]);
                    Assert.Equal("æøå", receivedCloudEvent["utf8examplevalue"]);
                    context.Response.StatusCode = (int)HttpStatusCode.NoContent;
                }
                catch (Exception e)
                {
                    using (var sw = new StreamWriter(context.Response.OutputStream))
                    {
                        sw.Write(e.ToString());
                        context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                    }
                }

                context.Response.Close();
                return(Task.CompletedTask);
            });

            var httpClient = new HttpClient();
            var result     = (await httpClient.PostAsync(new Uri(ListenerAddress + "ep"), content));

            if (result.StatusCode != HttpStatusCode.NoContent)
            {
                throw new InvalidOperationException(result.Content.ReadAsStringAsync().GetAwaiter().GetResult());
            }
        }