|
1 | 1 | package writ_test |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "os" |
| 5 | + "path/filepath" |
4 | 6 | "testing" |
5 | 7 | "time" |
6 | 8 |
|
7 | 9 | "github.com/opskernel-io/writ" |
8 | 10 | ) |
9 | 11 |
|
| 12 | +// testConfig creates a minimal writ.Config backed by a temp directory. |
| 13 | +func testConfig(t *testing.T) writ.Config { |
| 14 | + t.Helper() |
| 15 | + dir := t.TempDir() |
| 16 | + policyPath := filepath.Join(dir, "policy") |
| 17 | + if err := os.MkdirAll(policyPath, 0o700); err != nil { |
| 18 | + t.Fatalf("mkdir policy: %v", err) |
| 19 | + } |
| 20 | + const policy = "package writ.gate\nimport rego.v1\ndefault allow := true\ndefault tier := 2\ndefault denial_reason := \"\"" |
| 21 | + if err := os.WriteFile(filepath.Join(policyPath, "writ.rego"), []byte(policy), 0o600); err != nil { |
| 22 | + t.Fatalf("write test policy: %v", err) |
| 23 | + } |
| 24 | + return writ.Config{ |
| 25 | + PolicyPath: policyPath, |
| 26 | + AuditPath: filepath.Join(dir, "audit.chain"), |
| 27 | + CallerID: "test-agent", |
| 28 | + } |
| 29 | +} |
| 30 | + |
10 | 31 | func TestMemoryStoreAppendAndVerify(t *testing.T) { |
11 | 32 | store := writ.NewMemoryStore() |
12 | 33 |
|
@@ -58,3 +79,45 @@ func TestDenialErrorMessage(t *testing.T) { |
58 | 79 | t.Fatal("DenialError.Error() returned empty string") |
59 | 80 | } |
60 | 81 | } |
| 82 | + |
| 83 | +// PR 1: AllowedCallers and ChainProtected tests. |
| 84 | + |
| 85 | +func TestAllowedCallersPermitsKnownCaller(t *testing.T) { |
| 86 | + cfg := testConfig(t) |
| 87 | + cfg.AllowedCallers = []string{"test-agent", "other-agent"} |
| 88 | + c, err := writ.New(cfg) |
| 89 | + if err != nil { |
| 90 | + t.Fatalf("want success for known caller, got: %v", err) |
| 91 | + } |
| 92 | + _ = c |
| 93 | +} |
| 94 | + |
| 95 | +func TestAllowedCallersDeniesUnknownCaller(t *testing.T) { |
| 96 | + cfg := testConfig(t) |
| 97 | + cfg.AllowedCallers = []string{"allowed-agent"} |
| 98 | + cfg.CallerID = "unknown-agent" |
| 99 | + if _, err := writ.New(cfg); err == nil { |
| 100 | + t.Fatal("want error for unknown caller, got nil") |
| 101 | + } |
| 102 | +} |
| 103 | + |
| 104 | +func TestAllowedCallersNilPermitsAnyCaller(t *testing.T) { |
| 105 | + cfg := testConfig(t) |
| 106 | + cfg.AllowedCallers = nil |
| 107 | + cfg.CallerID = "any-agent" |
| 108 | + c, err := writ.New(cfg) |
| 109 | + if err != nil { |
| 110 | + t.Fatalf("want success for nil allowlist, got: %v", err) |
| 111 | + } |
| 112 | + _ = c |
| 113 | +} |
| 114 | + |
| 115 | +func TestChainProtectedReturnsBool(t *testing.T) { |
| 116 | + cfg := testConfig(t) |
| 117 | + c, err := writ.New(cfg) |
| 118 | + if err != nil { |
| 119 | + t.Fatalf("New: %v", err) |
| 120 | + } |
| 121 | + // Return value is platform/filesystem-dependent; just verify the call succeeds. |
| 122 | + _ = c.ChainProtected() |
| 123 | +} |
0 commit comments