Startup local HTTP server for testing

Change loader tests to use local HTTP server.

Add missing test scripts (i.e. storage) to unittest runs.
This commit is contained in:
Karl Seguin
2025-02-09 10:38:54 +08:00
parent 62805cdf1d
commit 6e58b98b3d
2 changed files with 68 additions and 28 deletions

View File

@@ -79,13 +79,19 @@ pub const Loader = struct {
} }
}; };
test "basic url get" { test "loader: get" {
const alloc = std.testing.allocator; const alloc = std.testing.allocator;
var loader = Loader.init(alloc); var loader = Loader.init(alloc);
defer loader.deinit(); defer loader.deinit();
var result = try loader.get(alloc, "https://en.wikipedia.org/wiki/Main_Page"); const uri = try std.Uri.parse("http://localhost:9582/loader");
var result = try loader.get(alloc, uri);
defer result.deinit(); defer result.deinit();
try std.testing.expect(result.req.response.status == std.http.Status.ok); try std.testing.expectEqual(.ok, result.req.response.status);
var res: [128]u8 = undefined;
const size = try result.req.readAll(&res);
try std.testing.expectEqual(6, size);
try std.testing.expectEqualStrings("Hello!", res[0..6]);
} }

View File

@@ -21,6 +21,10 @@ const builtin = @import("builtin");
const Allocator = std.mem.Allocator; const Allocator = std.mem.Allocator;
pub const std_options = std.Options{
.http_disable_tls = true,
};
const BORDER = "=" ** 80; const BORDER = "=" ** 80;
// use in custom panic handler // use in custom panic handler
@@ -43,6 +47,12 @@ pub fn main() !void {
var skip: usize = 0; var skip: usize = 0;
var leak: usize = 0; var leak: usize = 0;
const address = try std.net.Address.parseIp("127.0.0.1", 9582);
var listener = try address.listen(.{.reuse_address = true});
defer listener.deinit();
const http_thread = try std.Thread.spawn(.{}, serverHTTP, .{&listener});
defer http_thread.join();
const printer = Printer.init(); const printer = Printer.init();
printer.fmt("\r\x1b[0K", .{}); // beginning of line and clear to end of line printer.fmt("\r\x1b[0K", .{}); // beginning of line and clear to end of line
@@ -314,31 +324,55 @@ fn isTeardown(t: std.builtin.TestFn) bool {
return std.mem.endsWith(u8, t.name, "tests:afterAll"); return std.mem.endsWith(u8, t.name, "tests:afterAll");
} }
test { fn serverHTTP(listener: *std.net.Server) !void {
const msgTest = @import("msg.zig"); var read_buffer: [1024]u8 = undefined;
std.testing.refAllDecls(msgTest); ACCEPT: while (true) {
var conn = try listener.accept();
defer conn.stream.close();
var server = std.http.Server.init(conn, &read_buffer);
const dumpTest = @import("browser/dump.zig"); while (server.state == .ready) {
std.testing.refAllDecls(dumpTest); var request = server.receiveHead() catch |err| switch (err) {
error.HttpConnectionClosing => continue :ACCEPT,
else => {
std.debug.print("Test HTTP Server error: {}\n", .{err});
return err;
}
};
const mimeTest = @import("browser/mime.zig"); const path = request.head.target;
std.testing.refAllDecls(mimeTest); if (std.mem.eql(u8, path, "/loader")) {
try writeResponse(&request, .{
const cssTest = @import("css/css.zig"); .body = "Hello!",
std.testing.refAllDecls(cssTest); });
}
const cssParserTest = @import("css/parser.zig"); }
std.testing.refAllDecls(cssParserTest); }
}
const cssMatchTest = @import("css/match_test.zig");
std.testing.refAllDecls(cssMatchTest); const Response = struct {
body: []const u8 = "",
const cssLibdomTest = @import("css/libdom_test.zig"); status: std.http.Status = .ok,
std.testing.refAllDecls(cssLibdomTest); };
const queryTest = @import("url/query.zig"); fn writeResponse(req: *std.http.Server.Request, res: Response) !void {
std.testing.refAllDecls(queryTest); try req.respond(res.body, .{
.status = res.status
std.testing.refAllDecls(@import("generate.zig")); });
std.testing.refAllDecls(@import("cdp/msg.zig")); }
test {
std.testing.refAllDecls( @import("url/query.zig"));
std.testing.refAllDecls(@import("browser/dump.zig"));
std.testing.refAllDecls(@import("browser/loader.zig"));
std.testing.refAllDecls(@import("browser/mime.zig"));
std.testing.refAllDecls(@import("cdp/msg.zig"));
std.testing.refAllDecls(@import("css/css.zig"));
std.testing.refAllDecls(@import("css/libdom_test.zig"));
std.testing.refAllDecls(@import("css/match_test.zig"));
std.testing.refAllDecls(@import("css/parser.zig"));
std.testing.refAllDecls(@import("generate.zig"));
std.testing.refAllDecls(@import("http/Client.zig"));
std.testing.refAllDecls(@import("msg.zig"));
std.testing.refAllDecls(@import("storage/storage.zig"));
} }