public async Task BeforeRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, new { name = "laojiu", birthDay = DateTime.Parse("2010-10-10") }); context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new JsonContentAttribute() { CharSet = "utf-16" }; await attr.OnRequestAsync(new ApiParameterContext(context, 0)); var body = await context.HttpContext.RequestMessage.Content.ReadAsUtf8ByteArrayAsync(); var options = context.HttpContext.HttpApiOptions.JsonSerializeOptions; using var buffer = new RecyclableBufferWriter <byte>(); JsonBufferSerializer.Serialize(buffer, context.Arguments[0], options); var target = buffer.WrittenSpan.ToArray(); Assert.True(body.SequenceEqual(target)); }
public async Task OnRequestAsync_Parameter_Timespan_Test() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, 5); var attr = new TimeoutAttribute(); var parameterContext = new ApiParameterContext(context, 0); await attr.OnRequestAsync(parameterContext); await Task.Delay(20); var canceled = context.HttpContext.CancellationTokens[0].IsCancellationRequested; Assert.True(canceled); context.Arguments[0] = Guid.NewGuid(); await Assert.ThrowsAsync <ApiInvalidConfigException>(() => attr.OnRequestAsync(parameterContext)); context.Arguments[0] = null; await attr.OnRequestAsync(parameterContext); Assert.True(context.HttpContext.CancellationTokens.Count == 1); }
public async Task OnRequestAsyncRelativeTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, "http://www.baidu.com"); var attr = new UriAttribute(); await attr.OnRequestAsync(new ApiParameterContext(context, 0)); Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com")); context.Arguments[0] = "/login"; await attr.OnRequestAsync(new ApiParameterContext(context, 0)); Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com/login")); context.Arguments[0] = "/login/login2"; await attr.OnRequestAsync(new ApiParameterContext(context, 0)); Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com/login/login2")); context.Arguments[0] = "login3"; await attr.OnRequestAsync(new ApiParameterContext(context, 0)); Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com/login/login3")); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, new { @class = 123, xx_yy = "xxyy" }); var attr = new HeadersAttribute(); context.HttpContext.RequestMessage.Headers.Clear(); await attr.OnRequestAsync(new ApiParameterContext(context, 0)); context.HttpContext.RequestMessage.Headers.TryGetValues("xx-yy", out IEnumerable <string> values); Assert.Equal("xxyy", values.FirstOrDefault()); context.HttpContext.RequestMessage.Headers.TryGetValues("class", out IEnumerable <string> cValues); Assert.Equal("123", cValues.FirstOrDefault()); attr.UnderlineToMinus = false; context.HttpContext.RequestMessage.Headers.Clear(); await attr.OnRequestAsync(new ApiParameterContext(context, 0)); context.HttpContext.RequestMessage.Headers.TryGetValues("xx_yy", out IEnumerable <string> values2); Assert.Equal("xxyy", values2.FirstOrDefault()); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, string.Empty); context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new HttpPutAttribute(); await attr.OnRequestAsync(context); Assert.True(context.HttpContext.RequestMessage.Method == HttpMethod.Put); var attr2 = new HttpPutAttribute("/login"); await attr2.OnRequestAsync(context); Assert.True(context.HttpContext.RequestMessage.Method == HttpMethod.Put); Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.webapi.com/login")); var attr3 = new HttpPutAttribute("http://www.baidu.com"); await attr3.OnRequestAsync(context); Assert.True(context.HttpContext.RequestMessage.Method == HttpMethod.Put); Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.baidu.com")); }
public async Task OnRequestAsync() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, string.Empty); var attr = new HeaderAttribute("MyHeader", "laojiu"); await attr.OnRequestAsync(context); context.HttpContext.RequestMessage.Headers.TryGetValues("MyHeader", out IEnumerable <string> values); Assert.Equal("laojiu", values.First()); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, string.Empty); var attr = new BasicAuthAttribute("laojiu", "123456"); await attr.OnRequestAsync(context); var auth = Convert.ToBase64String(Encoding.ASCII.GetBytes("laojiu:123456")); Assert.True(context.HttpContext.RequestMessage.Headers.Authorization.Scheme == "Basic"); Assert.True(context.HttpContext.RequestMessage.Headers.Authorization.Parameter == auth); }
public void CtorTest() { var m = typeof(IDescriptorApi).GetMethod("Get1"); var d = new DefaultApiActionDescriptor(m); Assert.True(d.Attributes.Count == 3); Assert.True(d.FilterAttributes.Count == 1); Assert.True(d.Parameters.Count == 2); Assert.True(d.Name == m.Name); Assert.True(d.Member == m); Assert.True(d.Return.Attributes.Count == 1); Assert.True(d.Return.ReturnType == m.ReturnType); }
public async Task StringResultTest() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("StringAsync")); var context = new TestRequestContext(apiAction, "laojiu"); var responseContext = new ApiResponseContext(context); context.HttpContext.RequestMessage.Method = HttpMethod.Post; context.HttpContext.ResponseMessage.Content = new StringContent("laojiu", Encoding.UTF8); var attr = new RawReturnAttribute(); await attr.OnResponseAsync(responseContext); Assert.True(responseContext.Result?.ToString() == "laojiu"); }
public async Task OnRequestAsync() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, string.Empty); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new FormFieldAttribute("value", "laojiu"); await attr.OnRequestAsync(context); var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync(); Assert.Equal("value=laojiu", body); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, string.Empty); Assert.Throws <ArgumentNullException>(() => new HttpHostAttribute(null)); Assert.Throws <UriFormatException>(() => new HttpHostAttribute("/")); context.HttpContext.RequestMessage.RequestUri = null; var attr = new HttpHostAttribute("http://www.webapiclient.com"); await attr.OnRequestAsync(context); Assert.True(context.HttpContext.RequestMessage.RequestUri == new Uri("http://www.webapiclient.com")); }
public async Task OnRequestAsync() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, 10); var attr = new TimeoutAttribute(50); await attr.OnRequestAsync(context); await Task.Delay(100); var canceled = context.HttpContext.CancellationTokens[0].IsCancellationRequested; Assert.True(canceled); }
public async Task OnRequestAsync_Parameter() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, "laojiu"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var parameterContext = new ApiParameterContext(context, 0); var attr = new FormDataTextAttribute(); await attr.OnRequestAsync(parameterContext); var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync(); Assert.Contains(get("value", "laojiu"), body); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, new StringContent("laojiu")); context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.mywebapi.com"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new HttpContentTypeAttribute(); await attr.OnRequestAsync(new ApiParameterContext(context, 0)); var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync(); Assert.True(body == "laojiu"); }
public async Task EnsureSuccessStatusCodeTest() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("JsonXmlAsync")); var context = new TestRequestContext(apiAction, "laojiu"); var responseContext = new ApiResponseContext(context); context.HttpContext.RequestMessage.Method = HttpMethod.Post; context.HttpContext.ResponseMessage.Content = new JsonContent(); context.HttpContext.ResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError; await Assert.ThrowsAsync <ApiResponseStatusException>(async() => { var attr = new JsonReturnAttribute() { EnsureSuccessStatusCode = true }; await attr.OnResponseAsync(responseContext); }); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, new { name = "laojiu", birthDay = DateTime.Parse("2010-10-10") }); context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new PathQueryAttribute(); await attr.OnRequestAsync(new ApiParameterContext(context, 0)); var birthday = KeyValueSerializer.Serialize("time", DateTime.Parse("2010-10-10"), null)[0].Value; var target = new Uri("http://www.webapi.com?name=laojiu&birthDay=" + Uri.EscapeDataString(birthday)); Assert.True(context.HttpContext.RequestMessage.RequestUri == target); }
public async Task XmlResultTest() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("JsonXmlAsync")); var context = new TestRequestContext(apiAction, "laojiu"); var responseContext = new ApiResponseContext(context); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var model = new TestModel(); var xml = XmlSerializer.Serialize(model, null); context.HttpContext.ResponseMessage.Content = new XmlContent(xml, Encoding.UTF8); var attr = new XmlReturnAttribute(); await attr.OnResponseAsync(responseContext); var result = responseContext.Result as TestModel; Assert.True(model.Name == result.Name && model.Age == result.Age); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, new Model { name = "laojiu", birthDay = DateTime.Parse("2010-10-10") }); context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new XmlContentAttribute(); await attr.OnRequestAsync(new ApiParameterContext(context, 0)); var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync(); var target = XmlSerializer.Serialize(context.Arguments[0], null); Assert.True(body == target); }
public async Task OnRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, new { name = "老 九", birthDay = DateTime.Parse("2010-10-10") }); context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.mywebapi.com"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new FormContentAttribute(); await attr.OnRequestAsync(new ApiParameterContext(context, 0)); var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync(); var time = KeyValueSerializer.Serialize("time", DateTime.Parse("2010-10-10"), null); var target = $"name={HttpUtility.UrlEncode("老 九", Encoding.UTF8)}&birthDay={HttpUtility.UrlEncode(time[0].Value, Encoding.UTF8)}"; Assert.True(body.ToUpper() == target.ToUpper()); }
public async Task OnRequestAsync() { var doc = new JsonPatchDocument <Model>(); doc.Replace(item => item.Name, "33"); doc.Replace(item => item.Age, 10); var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, string.Empty); context.HttpContext.RequestMessage.Method = new System.Net.Http.HttpMethod("Patch"); await doc.OnRequestAsync(new ApiParameterContext(context, 0)); var body = await context.HttpContext.RequestMessage.Content.ReadAsStringAsync(); var ops = System.Text.Json.JsonSerializer.Deserialize <Op[]>(body); Assert.Equal(2, ops.Length); Assert.Equal("replace", ops[0].op); Assert.Equal("/name", ops[0].path); Assert.Equal("33", ops[0].value.ToString()); }