-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Expand file tree
/
Copy pathTestServer.cs
More file actions
86 lines (66 loc) · 3.13 KB
/
TestServer.cs
File metadata and controls
86 lines (66 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using RestSharp.Tests.Integrated.Server.Handlers;
using RestSharp.Tests.Shared.Extensions;
// ReSharper disable ConvertClosureToMethodGroup
namespace RestSharp.Tests.Integrated.Server;
public sealed class HttpServer {
readonly WebApplication _app;
const string Address = "http://localhost:5151";
public const string ContentResource = "content";
public const string TimeoutResource = "timeout";
public HttpServer(ITestOutputHelper? output = null) {
var builder = WebApplication.CreateBuilder();
if (output != null) builder.Logging.AddXunit(output, LogLevel.Debug);
builder.Services.AddControllers().AddApplicationPart(typeof(UploadController).Assembly);
builder.WebHost.UseUrls(Address);
_app = builder.Build();
_app.MapControllers();
_app.MapGet("success", () => new TestResponse { Message = "Works!" });
_app.MapGet("echo", (string msg) => msg);
_app.MapGet(TimeoutResource, async () => await Task.Delay(2000));
_app.MapPut(TimeoutResource, async () => await Task.Delay(2000));
_app.MapGet("status", (int code) => Results.StatusCode(code));
_app.MapGet("headers", HeaderHandlers.HandleHeaders);
_app.MapGet("request-echo", async context => await context.Request.BodyReader.AsStream().CopyToAsync(context.Response.BodyWriter.AsStream()));
_app.MapDelete("delete", () => new TestResponse { Message = "Works!" });
_app.MapGet("redirect", () => Results.Redirect("/success", false, true));
// Cookies
_app.MapGet("get-cookies", CookieHandlers.HandleCookies);
_app.MapGet("set-cookies", CookieHandlers.HandleSetCookies);
_app.MapGet(
"get-cookies-redirect",
(HttpContext ctx) => {
ctx.Response.Cookies.Append("redirectCookie", "value1");
return Results.Redirect("/get-cookies", false, true);
}
);
// PUT
_app.MapPut(
ContentResource,
async context => {
var content = await context.Request.Body.StreamToStringAsync();
await context.Response.WriteAsync(content);
}
);
// Upload file
// var assetPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Assets");
// _app.MapPost("/upload", ctx => FileHandlers.HandleUpload(assetPath, ctx.Request));
// POST
_app.MapPost("/post/json", (TestRequest request) => new TestResponse { Message = request.Data });
_app.MapPost(
"/post/form",
(HttpContext context) => new TestResponse { Message = $"Works! Length: {context.Request.Form["big_string"].ToString().Length}" }
);
_app.MapPost("/post/data", FormRequestHandler.HandleForm);
}
public Uri Url => new(Address);
public Task Start() => _app.StartAsync();
public async Task Stop() {
await _app.StopAsync();
await _app.DisposeAsync();
}
}