public async Task CanSendStructuredCloudEvent_WithContentType() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/register-user") { Content = new StringContent( JsonSerializer.Serialize( new { data = new { name = "jimmy", }, datacontenttype = "text/json", }), Encoding.UTF8) }; request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/cloudevents+json"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var userInfo = await JsonSerializer.DeserializeAsync <UserInfo>(await response.Content.ReadAsStreamAsync(), this.options); userInfo.Name.Should().Be("jimmy"); } }
public async Task SubscribeEndpoint_ReportsTopics() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/dapr/subscribe"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); using (var stream = await response.Content.ReadAsStreamAsync()) { var json = await JsonSerializer.DeserializeAsync <JsonElement>(stream); json.ValueKind.Should().Be(JsonValueKind.Array); json.GetArrayLength().Should().Be(3); var topics = new List <string>(); var routes = new List <string>(); foreach (var element in json.EnumerateArray()) { topics.Add(element.GetProperty("topic").GetString()); routes.Add(element.GetProperty("route").GetString()); } topics.Should().Contain("A"); topics.Should().Contain("B"); topics.Should().Contain("register-user"); routes.Should().Contain("B"); routes.Should().Contain("topic-a"); routes.Should().Contain("register-user"); } } }
public async Task CanSendStructuredCloudEvent_WithNonJsonContentType() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/register-user-plaintext") { Content = new StringContent( JsonSerializer.Serialize( new { data = "jimmy \"the cool guy\" smith", datacontenttype = "text/plain", }), Encoding.UTF8) }; request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/cloudevents+json"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var user = await response.Content.ReadAsStringAsync(); user.Should().Be("jimmy \"the cool guy\" smith"); } }
public async Task SubscribeEndpoint_ReportsTopics() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/dapr/subscribe"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); using (var stream = await response.Content.ReadAsStreamAsync()) { var json = await JsonSerializer.DeserializeAsync <JsonElement>(stream); json.ValueKind.Should().Be(JsonValueKind.Array); json.GetArrayLength().Should().Be(5); var metadata = new List <(string PubsubName, string Topic, string Route)>(); foreach (var element in json.EnumerateArray()) { var pubsubName = element.GetProperty("pubsubName").GetString(); var topic = element.GetProperty("topic").GetString(); var route = element.GetProperty("route").GetString(); metadata.Add((pubsubName, topic, route)); } metadata.Should().Contain(("testpubsub", "A", "topic-a")); metadata.Should().Contain(("pubsub", "B", "B")); metadata.Should().Contain(("custom-pubsub", "custom-C", "C")); metadata.Should().Contain(("pubsub", "register-user", "register-user")); metadata.Should().Contain(("pubsub", "register-user-plaintext", "register-user-plaintext")); } } }
public async Task ModelBinder_CanGetOutOfTheWayWhenTheresNoBinding() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var daprClient = factory.DaprClient; var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/echo-user?name=jimmy"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); } }
public async Task CanSendEmptyStructuredCloudEvent() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/B"); request.Content = new StringContent("{}", Encoding.UTF8); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/cloudevents+json"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); } }
public async Task ModelBinder_GetFromStateEntryWithKeyNotInStateStore_ReturnsNull() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var daprClient = factory.DaprClient; var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/controllerwithoutstateentry/test"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); var responseWidget = JsonConvert.DeserializeObject <Widget>(responseContent); Assert.Null(responseWidget); } }
public async Task CanSendEmptyFormURLEncodedPost() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/formurlencoded") { Content = new StringContent("", Encoding.UTF8) }; request.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaTypeHeaderValue); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); } }
public async Task InvalidToken_ShouldBeUnauthorized() { using (var factory = new AppWebApplicationFactory()) { var userInfo = new UserInfo { Name = "jimmy" }; var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/requires-api-token") { Content = new StringContent(JsonConvert.SerializeObject(userInfo), Encoding.UTF8, "application/json") }; request.Headers.Add("Dapr-Api-Token", "asdfgh"); var response = await httpClient.SendAsync(request); response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } }
public async Task StateClient_CanBindFromState() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var stateClient = factory.StateClient; await stateClient.SaveStateAsync("testStore", "test", new Widget() { Size = "small", Count = 17, }); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/routingwithstateentry/test"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var widget = await stateClient.GetStateAsync <Widget>("testStore", "test"); widget.Count.Should().Be(18); } }
public async Task ModelBinder_CanBindFromState_WithStateEntryAndCustomKey() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var daprClient = factory.DaprClient; await daprClient.SaveStateAsync("testStore", "test", new Widget() { Size = "small", Count = 17, }); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/controllerwithstateentryandcustomkey/test"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var widget = await daprClient.GetStateAsync <Widget>("testStore", "test"); widget.Count.Should().Be(18); } }
public async Task CanSendVoiceRequestFromTwilio() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/formurlencoded") { Content = new StringContent(formURLEncodedContent, Encoding.UTF8) }; request.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaTypeHeaderValue); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var widget = await JsonSerializer.DeserializeAsync <FormURLEncodingPayload>(await response.Content.ReadAsStreamAsync(), this.options); widget.FieldA.Should().Be("stringInfoA"); widget.FieldB.Should().Be("stringInfoB"); widget.FieldC.Should().Be("stringInfoC"); } }
public async Task ValidToken_ShouldBeAuthenticatedAndAuthorized() { using (var factory = new AppWebApplicationFactory()) { var userInfo = new UserInfo { Name = "jimmy" }; var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/requires-api-token") { Content = new StringContent(JsonConvert.SerializeObject(userInfo), Encoding.UTF8, "application/json") }; request.Headers.Add("Dapr-Api-Token", "abcdefg"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); var responseUserInfo = JsonConvert.DeserializeObject <UserInfo>(responseContent); responseUserInfo.Name.Should().Be(userInfo.Name); } }
public async Task ModelBinder_GetFromStateEntryWithKeyPresentInStateStore_ReturnsStateValue() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var daprClient = factory.DaprClient; var widget = new Widget() { Size = "small", Count = 17, }; await daprClient.SaveStateAsync("testStore", "test", widget); var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/controllerwithoutstateentry/test"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); var responseWidget = JsonConvert.DeserializeObject <Widget>(responseContent); responseWidget.Size.Should().Be(widget.Size); responseWidget.Count.Should().Be(widget.Count); } }
public async Task SubscribeEndpoint_ReportsTopics() { using (var factory = new AppWebApplicationFactory()) { var httpClient = factory.CreateClient(); var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/dapr/subscribe"); var response = await httpClient.SendAsync(request); response.EnsureSuccessStatusCode(); using (var stream = await response.Content.ReadAsStreamAsync()) { var json = await JsonSerializer.DeserializeAsync <JsonElement>(stream); json.ValueKind.Should().Be(JsonValueKind.Array); json.GetArrayLength().Should().Be(12); var subscriptions = new List <(string PubsubName, string Topic, string Route, string rawPayload, string match)>(); foreach (var element in json.EnumerateArray()) { var pubsubName = element.GetProperty("pubsubName").GetString(); var topic = element.GetProperty("topic").GetString(); var rawPayload = string.Empty; if (element.TryGetProperty("metadata", out JsonElement metadata)) { rawPayload = metadata.GetProperty("rawPayload").GetString(); } if (element.TryGetProperty("route", out JsonElement route)) { subscriptions.Add((pubsubName, topic, route.GetString(), rawPayload, string.Empty)); } else if (element.TryGetProperty("routes", out JsonElement routes)) { if (routes.TryGetProperty("rules", out JsonElement rules)) { foreach (var rule in rules.EnumerateArray()) { var match = rule.GetProperty("match").GetString(); var path = rule.GetProperty("path").GetString(); subscriptions.Add((pubsubName, topic, path, rawPayload, match)); } } if (routes.TryGetProperty("default", out JsonElement defaultProperty)) { subscriptions.Add((pubsubName, topic, defaultProperty.GetString(), rawPayload, string.Empty)); } } } subscriptions.Should().Contain(("testpubsub", "A", "topic-a", string.Empty, string.Empty)); subscriptions.Should().Contain(("testpubsub", "A.1", "topic-a", string.Empty, string.Empty)); subscriptions.Should().Contain(("pubsub", "B", "B", string.Empty, string.Empty)); subscriptions.Should().Contain(("custom-pubsub", "custom-C", "C", string.Empty, string.Empty)); subscriptions.Should().Contain(("pubsub", "register-user", "register-user", string.Empty, string.Empty)); subscriptions.Should().Contain(("pubsub", "register-user-plaintext", "register-user-plaintext", string.Empty, string.Empty)); subscriptions.Should().Contain(("pubsub", "D", "D", "true", string.Empty)); subscriptions.Should().Contain(("pubsub", "E", "E", string.Empty, string.Empty)); subscriptions.Should().Contain(("pubsub", "E", "E-Critical", string.Empty, "event.type == \"critical\"")); subscriptions.Should().Contain(("pubsub", "E", "E-Important", string.Empty, "event.type == \"important\"")); subscriptions.Should().Contain(("pubsub", "F", "multiTopicAttr", string.Empty, string.Empty)); subscriptions.Should().Contain(("pubsub", "F.1", "multiTopicAttr", "true", string.Empty)); subscriptions.Should().Contain(("pubsub", "splitTopicBuilder", "splitTopics", string.Empty, string.Empty)); subscriptions.Should().Contain(("pubsub", "splitTopicAttr", "splitTopics", "true", string.Empty)); // Test priority route sorting var eTopic = subscriptions.FindAll(e => e.Topic == "E"); eTopic.Count.Should().Be(3); eTopic[0].Route.Should().Be("E-Critical"); eTopic[1].Route.Should().Be("E-Important"); eTopic[2].Route.Should().Be("E"); } } }