ReviewOS

also looking at this

zig-utils/zig-test-framework

Add deterministic test sharding for distributed CI

#22
Merged glennmichael123 wants to merge codex/issue-4-deterministic-sharding into main
10 files +322 -5
tests/cli_test.zigmodified+23-0
Changes to tests/cli_test.zig
@@ -24,12 +24,33 @@ test "CLI rejects missing and invalid values" {
2424 try std.testing.expectError(ztf.cli.CLIError.InvalidArgument, invalid.parse(&.{ "zig-test", "--jobs", "0" }));
2525}
2626
27test "CLI parses and validates one-based sharding" {
28 var cli = ztf.CLI.init(std.testing.allocator);
29 try cli.parse(&.{ "zig-test", "--shard-index", "2", "--shard-count", "4" });
30 try std.testing.expectEqual(@as(?usize, 2), cli.options.shard_index);
31 try std.testing.expectEqual(@as(?usize, 4), cli.options.shard_count);
32
33 var missing_count = ztf.CLI.init(std.testing.allocator);
34 try std.testing.expectError(
35 ztf.cli.CLIError.InvalidArgument,
36 missing_count.parse(&.{ "zig-test", "--shard-index", "1" }),
37 );
38
39 var out_of_range = ztf.CLI.init(std.testing.allocator);
40 try std.testing.expectError(
41 ztf.cli.CLIError.InvalidArgument,
42 out_of_range.parse(&.{ "zig-test", "--shard-index", "3", "--shard-count", "2" }),
43 );
44}
45
2746test "CLI flags override configuration defaults" {
2847 var cli = ztf.CLI.init(std.testing.allocator);
2948 var config = ztf.TestConfig{};
3049 config.test_options.test_dir = "configured-tests";
3150 config.test_options.filter = "configured-filter";
3251 config.test_options.recursive = false;
52 config.sharding.index = 1;
53 config.sharding.count = 3;
3354 config.reporter.verbose = true;
3455
3556 try cli.applyConfig(config);
@@ -39,4 +60,6 @@ test "CLI flags override configuration defaults" {
3960 try std.testing.expectEqualStrings("cli-filter", cli.options.filter.?);
4061 try std.testing.expect(cli.options.no_recursive);
4162 try std.testing.expect(cli.options.verbose);
63 try std.testing.expectEqual(@as(?usize, 1), cli.options.shard_index);
64 try std.testing.expectEqual(@as(?usize, 3), cli.options.shard_count);
4265}