@urateam/core 0.1.56 → 0.1.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/audit-immutability.test.js +8 -0
- package/dist/__tests__/audit-immutability.test.js.map +1 -1
- package/dist/__tests__/auth-check.test.js +130 -16
- package/dist/__tests__/auth-check.test.js.map +1 -1
- package/dist/__tests__/auth-monitor.test.js +127 -103
- package/dist/__tests__/auth-monitor.test.js.map +1 -1
- package/dist/__tests__/circuit-breaker-config.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-config.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-config.test.js +32 -0
- package/dist/__tests__/circuit-breaker-config.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-events.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-events.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-events.test.js +53 -0
- package/dist/__tests__/circuit-breaker-events.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-integration.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-integration.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-integration.test.js +192 -0
- package/dist/__tests__/circuit-breaker-integration.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-probe.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-probe.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-probe.test.js +124 -0
- package/dist/__tests__/circuit-breaker-probe.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-recover.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-recover.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-recover.test.js +52 -0
- package/dist/__tests__/circuit-breaker-recover.test.js.map +1 -0
- package/dist/__tests__/circuit-breaker-sweep.test.d.ts +2 -0
- package/dist/__tests__/circuit-breaker-sweep.test.d.ts.map +1 -0
- package/dist/__tests__/circuit-breaker-sweep.test.js +118 -0
- package/dist/__tests__/circuit-breaker-sweep.test.js.map +1 -0
- package/dist/__tests__/execute-stage-session-opts.test.js +1 -1
- package/dist/__tests__/execute-stage-session-opts.test.js.map +1 -1
- package/dist/__tests__/executor-issue-id.test.js +1 -1
- package/dist/__tests__/executor-issue-id.test.js.map +1 -1
- package/dist/__tests__/pm-audit-retention-step.test.js +3 -0
- package/dist/__tests__/pm-audit-retention-step.test.js.map +1 -1
- package/dist/__tests__/pm-budget-alerts.test.d.ts +14 -0
- package/dist/__tests__/pm-budget-alerts.test.d.ts.map +1 -1
- package/dist/__tests__/pm-budget-alerts.test.js +90 -18
- package/dist/__tests__/pm-budget-alerts.test.js.map +1 -1
- package/dist/__tests__/pm-budget-refused-event.test.js +2 -0
- package/dist/__tests__/pm-budget-refused-event.test.js.map +1 -1
- package/dist/__tests__/pm-budget-utc-boundary.test.d.ts +2 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.d.ts.map +1 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.js +128 -0
- package/dist/__tests__/pm-budget-utc-boundary.test.js.map +1 -0
- package/dist/__tests__/pm-cost-rollup-step.test.js +2 -0
- package/dist/__tests__/pm-cost-rollup-step.test.js.map +1 -1
- package/dist/__tests__/pm-promote.test.js +111 -0
- package/dist/__tests__/pm-promote.test.js.map +1 -1
- package/dist/__tests__/pm-scheduler.test.js +1 -0
- package/dist/__tests__/pm-scheduler.test.js.map +1 -1
- package/dist/__tests__/pm-sso-prune-step.test.js +2 -0
- package/dist/__tests__/pm-sso-prune-step.test.js.map +1 -1
- package/dist/__tests__/release-manager-slack-handler.test.js +66 -0
- package/dist/__tests__/release-manager-slack-handler.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js +1 -0
- package/dist/__tests__/reproduce-bec113-pagination-warning.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec62.test.js +1 -0
- package/dist/__tests__/reproduce-bec62.test.js.map +1 -1
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js +2 -0
- package/dist/__tests__/reproduce-bec91-stuck-in-progress.test.js.map +1 -1
- package/dist/__tests__/resolve-claude-auth.test.js +10 -8
- package/dist/__tests__/resolve-claude-auth.test.js.map +1 -1
- package/dist/__tests__/session-lazy-creation.test.js +1 -1
- package/dist/__tests__/session-lazy-creation.test.js.map +1 -1
- package/dist/__tests__/session-resume-fallback.test.js +1 -1
- package/dist/__tests__/session-resume-fallback.test.js.map +1 -1
- package/dist/__tests__/stage-models.test.js +2 -2
- package/dist/__tests__/stage-models.test.js.map +1 -1
- package/dist/__tests__/start-todo.test.js +29 -0
- package/dist/__tests__/start-todo.test.js.map +1 -1
- package/dist/__tests__/triage-preserve-acs.test.d.ts +2 -0
- package/dist/__tests__/triage-preserve-acs.test.d.ts.map +1 -0
- package/dist/__tests__/triage-preserve-acs.test.js +240 -0
- package/dist/__tests__/triage-preserve-acs.test.js.map +1 -0
- package/dist/audit/events.d.ts +29 -0
- package/dist/audit/events.d.ts.map +1 -1
- package/dist/audit/events.js +44 -0
- package/dist/audit/events.js.map +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +10 -0
- package/dist/db/client.js.map +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema.d.ts +88 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +15 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/executor/auth-check.d.ts +30 -7
- package/dist/executor/auth-check.d.ts.map +1 -1
- package/dist/executor/auth-check.js +66 -16
- package/dist/executor/auth-check.js.map +1 -1
- package/dist/executor/auth-monitor.d.ts.map +1 -1
- package/dist/executor/auth-monitor.js +12 -12
- package/dist/executor/auth-monitor.js.map +1 -1
- package/dist/executor/executor.js +1 -1
- package/dist/executor/executor.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/pm/actions/circuit-breaker-config.d.ts +13 -0
- package/dist/pm/actions/circuit-breaker-config.d.ts.map +1 -0
- package/dist/pm/actions/circuit-breaker-config.js +23 -0
- package/dist/pm/actions/circuit-breaker-config.js.map +1 -0
- package/dist/pm/actions/db-queries.d.ts +21 -0
- package/dist/pm/actions/db-queries.d.ts.map +1 -1
- package/dist/pm/actions/db-queries.js +84 -2
- package/dist/pm/actions/db-queries.js.map +1 -1
- package/dist/pm/actions/promote.d.ts +7 -0
- package/dist/pm/actions/promote.d.ts.map +1 -1
- package/dist/pm/actions/promote.js +17 -1
- package/dist/pm/actions/promote.js.map +1 -1
- package/dist/pm/actions/recover-circuit-breaker.d.ts +21 -0
- package/dist/pm/actions/recover-circuit-breaker.d.ts.map +1 -0
- package/dist/pm/actions/recover-circuit-breaker.js +47 -0
- package/dist/pm/actions/recover-circuit-breaker.js.map +1 -0
- package/dist/pm/actions/select-probe-candidates.d.ts +21 -0
- package/dist/pm/actions/select-probe-candidates.d.ts.map +1 -0
- package/dist/pm/actions/select-probe-candidates.js +81 -0
- package/dist/pm/actions/select-probe-candidates.js.map +1 -0
- package/dist/pm/actions/start-todo.d.ts +7 -0
- package/dist/pm/actions/start-todo.d.ts.map +1 -1
- package/dist/pm/actions/start-todo.js +2 -1
- package/dist/pm/actions/start-todo.js.map +1 -1
- package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts +28 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.d.ts.map +1 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.js +47 -0
- package/dist/pm/actions/sweep-recovered-circuit-breakers.js.map +1 -0
- package/dist/pm/actions/triage-prompt.d.ts +14 -0
- package/dist/pm/actions/triage-prompt.d.ts.map +1 -1
- package/dist/pm/actions/triage-prompt.js +52 -9
- package/dist/pm/actions/triage-prompt.js.map +1 -1
- package/dist/pm/actions/triage.d.ts.map +1 -1
- package/dist/pm/actions/triage.js +37 -24
- package/dist/pm/actions/triage.js.map +1 -1
- package/dist/pm/scheduler.d.ts +3 -0
- package/dist/pm/scheduler.d.ts.map +1 -1
- package/dist/pm/scheduler.js +40 -1
- package/dist/pm/scheduler.js.map +1 -1
- package/dist/release-manager/slack-handler.d.ts +6 -0
- package/dist/release-manager/slack-handler.d.ts.map +1 -1
- package/dist/release-manager/slack-handler.js +76 -1
- package/dist/release-manager/slack-handler.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tests for AuthMonitor (BEC-207 / BEC-237
|
|
2
|
+
* Tests for AuthMonitor (BEC-207 / BEC-237 / BEC-244).
|
|
3
3
|
*
|
|
4
4
|
* Covers:
|
|
5
5
|
* - Returns early ONLY when ANTHROPIC_API_KEY is set and CLAUDE_CODE_OAUTH_TOKEN is NOT set.
|
|
6
|
-
* - When CLAUDE_CODE_OAUTH_TOKEN is set, runs the
|
|
7
|
-
* - Runs
|
|
8
|
-
* - On expiry: sends Slack alert
|
|
9
|
-
*
|
|
6
|
+
* - When CLAUDE_CODE_OAUTH_TOKEN is set, runs the real-API probe regardless of ANTHROPIC_API_KEY.
|
|
7
|
+
* - Runs the real-API probe when neither env var is set (mounted-session path).
|
|
8
|
+
* - On auth expiry (probe returns auth error): sends Slack alert + writes claude.auth_expired event.
|
|
9
|
+
* - On network error: probe returns { valid: true } (fail-open) — no alert, no audit event.
|
|
10
10
|
* - 6-hour throttle: skips check if interval has not elapsed.
|
|
11
11
|
* - createAuthMonitor stateful wrapper manages lastCheckTime across calls.
|
|
12
12
|
*/
|
|
13
13
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
|
-
// Mocks —
|
|
15
|
+
// Mocks — declared before any imports that use the mocked modules.
|
|
16
16
|
// vi.mock() is hoisted by vitest, so these run before module initialisation.
|
|
17
17
|
// ---------------------------------------------------------------------------
|
|
18
|
-
// Mock
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
// Mock probeClaudeAuth (and other exports) from auth-check.js.
|
|
19
|
+
// auth-monitor.ts imports probeClaudeAuth from there; mocking at module level
|
|
20
|
+
// lets each test control the probe outcome cleanly.
|
|
21
|
+
vi.mock("../executor/auth-check.js", () => ({
|
|
22
|
+
resetAuthCheckCache: vi.fn(),
|
|
23
|
+
resolveClaudeAuth: vi.fn(() => ({ method: "mounted-session" })),
|
|
24
|
+
isClaudeAuthValid: vi.fn().mockResolvedValue(true),
|
|
25
|
+
probeClaudeAuth: vi.fn(),
|
|
21
26
|
}));
|
|
22
27
|
// Mock postSlackMessage
|
|
23
28
|
vi.mock("../pm/slack-helpers.js", () => ({
|
|
@@ -27,38 +32,32 @@ vi.mock("../pm/slack-helpers.js", () => ({
|
|
|
27
32
|
vi.mock("../audit/writer.js", () => ({
|
|
28
33
|
logAuditEventUnchecked: vi.fn().mockResolvedValue(undefined),
|
|
29
34
|
}));
|
|
30
|
-
// Mock resetAuthCheckCache (auth-monitor calls this to bypass the 5-min cache)
|
|
31
|
-
vi.mock("../executor/auth-check.js", () => ({
|
|
32
|
-
resetAuthCheckCache: vi.fn(),
|
|
33
|
-
resolveClaudeAuth: vi.fn(() => ({ method: "session" })),
|
|
34
|
-
isClaudeAuthValid: vi.fn().mockResolvedValue(true),
|
|
35
|
-
}));
|
|
36
35
|
// ---------------------------------------------------------------------------
|
|
37
36
|
// Static imports (mocks are in place due to hoisting)
|
|
38
37
|
// ---------------------------------------------------------------------------
|
|
39
|
-
import { execFile } from "node:child_process";
|
|
40
38
|
import { postSlackMessage } from "../pm/slack-helpers.js";
|
|
41
39
|
import { logAuditEventUnchecked } from "../audit/writer.js";
|
|
40
|
+
import { probeClaudeAuth } from "../executor/auth-check.js";
|
|
42
41
|
import { runAuthMonitorCheck, createAuthMonitor } from "../executor/auth-monitor.js";
|
|
43
|
-
const
|
|
42
|
+
const mockProbeClaudeAuth = vi.mocked(probeClaudeAuth);
|
|
44
43
|
const mockPostSlackMessage = vi.mocked(postSlackMessage);
|
|
45
44
|
const mockLogAuditEvent = vi.mocked(logAuditEventUnchecked);
|
|
46
45
|
// ---------------------------------------------------------------------------
|
|
47
46
|
// Helpers
|
|
48
47
|
// ---------------------------------------------------------------------------
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
cb(null);
|
|
52
|
-
return {};
|
|
53
|
-
});
|
|
48
|
+
function simulateProbeSuccess() {
|
|
49
|
+
mockProbeClaudeAuth.mockResolvedValue({ valid: true });
|
|
54
50
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
/** Auth failure — probe detects a 401 from the API. */
|
|
52
|
+
function simulateProbeAuthFailure() {
|
|
53
|
+
mockProbeClaudeAuth.mockResolvedValue({ valid: false, reason: "auth" });
|
|
54
|
+
}
|
|
55
|
+
/** Network / transient error — probe fails open (no alert should fire). */
|
|
56
|
+
function simulateProbeNetworkError() {
|
|
57
|
+
// Fail-open: probeClaudeAuth returns { valid: true } on network errors
|
|
58
|
+
mockProbeClaudeAuth.mockResolvedValue({ valid: true });
|
|
60
59
|
}
|
|
61
|
-
const SMALL_INTERVAL = 100; // 100 ms — always elapsed unless we
|
|
60
|
+
const SMALL_INTERVAL = 100; // 100 ms — always elapsed unless we pass a very recent timestamp
|
|
62
61
|
// ---------------------------------------------------------------------------
|
|
63
62
|
// Tests: runAuthMonitorCheck
|
|
64
63
|
// ---------------------------------------------------------------------------
|
|
@@ -66,72 +65,70 @@ describe("runAuthMonitorCheck", () => {
|
|
|
66
65
|
let savedOauthToken;
|
|
67
66
|
let savedApiKey;
|
|
68
67
|
beforeEach(() => {
|
|
69
|
-
|
|
68
|
+
mockProbeClaudeAuth.mockReset();
|
|
70
69
|
mockPostSlackMessage.mockReset().mockResolvedValue({ ok: true });
|
|
71
70
|
mockLogAuditEvent.mockReset().mockResolvedValue(undefined);
|
|
72
|
-
// Save and clear env vars so each test starts with a clean slate
|
|
73
71
|
savedOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
74
72
|
savedApiKey = process.env.ANTHROPIC_API_KEY;
|
|
75
73
|
delete process.env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
76
74
|
delete process.env.ANTHROPIC_API_KEY;
|
|
77
75
|
});
|
|
78
76
|
afterEach(() => {
|
|
79
|
-
if (savedOauthToken === undefined)
|
|
77
|
+
if (savedOauthToken === undefined)
|
|
80
78
|
delete process.env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
81
|
-
|
|
82
|
-
else {
|
|
79
|
+
else
|
|
83
80
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = savedOauthToken;
|
|
84
|
-
|
|
85
|
-
if (savedApiKey === undefined) {
|
|
81
|
+
if (savedApiKey === undefined)
|
|
86
82
|
delete process.env.ANTHROPIC_API_KEY;
|
|
87
|
-
|
|
88
|
-
else {
|
|
83
|
+
else
|
|
89
84
|
process.env.ANTHROPIC_API_KEY = savedApiKey;
|
|
90
|
-
}
|
|
91
85
|
});
|
|
92
86
|
// --- Throttle ---
|
|
93
87
|
it("skips check when interval has not elapsed (lastCheckTime is recent)", async () => {
|
|
94
|
-
const recentTime = Date.now();
|
|
95
|
-
await runAuthMonitorCheck(recentTime, {}, 60_000);
|
|
96
|
-
|
|
97
|
-
expect(mockExecFile).not.toHaveBeenCalled();
|
|
88
|
+
const recentTime = Date.now();
|
|
89
|
+
await runAuthMonitorCheck(recentTime, {}, 60_000);
|
|
90
|
+
expect(mockProbeClaudeAuth).not.toHaveBeenCalled();
|
|
98
91
|
});
|
|
99
92
|
it("runs check when interval has elapsed (lastCheckTime = 0 = never)", async () => {
|
|
100
|
-
|
|
93
|
+
simulateProbeSuccess();
|
|
101
94
|
await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
|
|
102
|
-
expect(
|
|
95
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
103
96
|
});
|
|
104
97
|
// --- Env-var skip logic (BEC-237) ---
|
|
105
|
-
it("skips
|
|
98
|
+
it("skips probe when ANTHROPIC_API_KEY is set and CLAUDE_CODE_OAUTH_TOKEN is NOT set", async () => {
|
|
106
99
|
process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
|
|
107
100
|
await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
|
|
108
|
-
expect(
|
|
101
|
+
expect(mockProbeClaudeAuth).not.toHaveBeenCalled();
|
|
109
102
|
expect(mockPostSlackMessage).not.toHaveBeenCalled();
|
|
110
103
|
expect(mockLogAuditEvent).not.toHaveBeenCalled();
|
|
111
104
|
});
|
|
112
105
|
it("runs the auth probe when CLAUDE_CODE_OAUTH_TOKEN is set (OAuth tokens can expire)", async () => {
|
|
113
106
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
114
|
-
|
|
107
|
+
simulateProbeSuccess();
|
|
115
108
|
await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
|
|
116
|
-
expect(
|
|
109
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
117
110
|
});
|
|
118
111
|
it("runs the auth probe when both CLAUDE_CODE_OAUTH_TOKEN and ANTHROPIC_API_KEY are set", async () => {
|
|
119
|
-
// CLAUDE_CODE_OAUTH_TOKEN takes precedence — it can expire even if ANTHROPIC_API_KEY is also set
|
|
120
112
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
121
113
|
process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
|
|
122
|
-
|
|
114
|
+
simulateProbeSuccess();
|
|
123
115
|
await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
|
|
124
|
-
expect(
|
|
116
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
125
117
|
});
|
|
126
118
|
it("runs the auth probe when neither env var is set (mounted-session path)", async () => {
|
|
127
|
-
|
|
119
|
+
simulateProbeSuccess();
|
|
120
|
+
await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
|
|
121
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
122
|
+
});
|
|
123
|
+
it("passes 15-second timeout to probeClaudeAuth", async () => {
|
|
124
|
+
simulateProbeSuccess();
|
|
128
125
|
await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
|
|
129
|
-
expect(
|
|
126
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledWith(15_000);
|
|
130
127
|
});
|
|
131
|
-
// ---
|
|
128
|
+
// --- Probe success → no alert ---
|
|
132
129
|
it("does not alert when CLAUDE_CODE_OAUTH_TOKEN probe succeeds", async () => {
|
|
133
130
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
134
|
-
|
|
131
|
+
simulateProbeSuccess();
|
|
135
132
|
await runAuthMonitorCheck(0, {
|
|
136
133
|
slackBotToken: "xoxb-test",
|
|
137
134
|
slackErrorChannel: "CTEST",
|
|
@@ -139,10 +136,10 @@ describe("runAuthMonitorCheck", () => {
|
|
|
139
136
|
expect(mockPostSlackMessage).not.toHaveBeenCalled();
|
|
140
137
|
expect(mockLogAuditEvent).not.toHaveBeenCalled();
|
|
141
138
|
});
|
|
142
|
-
// ---
|
|
143
|
-
it("sends Slack alert with oauth-token instructions when CLAUDE_CODE_OAUTH_TOKEN probe
|
|
139
|
+
// --- Probe auth failure (BEC-244 core scenario) ---
|
|
140
|
+
it("sends Slack alert with oauth-token instructions when CLAUDE_CODE_OAUTH_TOKEN probe detects auth failure", async () => {
|
|
144
141
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
145
|
-
|
|
142
|
+
simulateProbeAuthFailure();
|
|
146
143
|
await runAuthMonitorCheck(0, {
|
|
147
144
|
slackBotToken: "xoxb-bot-token",
|
|
148
145
|
slackErrorChannel: "CERROR",
|
|
@@ -151,13 +148,12 @@ describe("runAuthMonitorCheck", () => {
|
|
|
151
148
|
const [calledToken, calledPayload] = mockPostSlackMessage.mock.calls[0];
|
|
152
149
|
expect(calledToken).toBe("xoxb-bot-token");
|
|
153
150
|
expect(calledPayload.channel).toBe("CERROR");
|
|
154
|
-
// Alert text should mention setup-token, not claude login
|
|
155
151
|
expect(calledPayload.text).toContain("setup-token");
|
|
156
152
|
expect(calledPayload.text).not.toContain("claude login");
|
|
157
153
|
});
|
|
158
|
-
it("logs claude.auth_expired with authMethod=oauth-token when CLAUDE_CODE_OAUTH_TOKEN probe
|
|
154
|
+
it("logs claude.auth_expired with authMethod=oauth-token when CLAUDE_CODE_OAUTH_TOKEN probe detects auth failure", async () => {
|
|
159
155
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
160
|
-
|
|
156
|
+
simulateProbeAuthFailure();
|
|
161
157
|
const fakeDb = {};
|
|
162
158
|
await runAuthMonitorCheck(0, { db: fakeDb }, SMALL_INTERVAL);
|
|
163
159
|
expect(mockLogAuditEvent).toHaveBeenCalledTimes(1);
|
|
@@ -170,10 +166,10 @@ describe("runAuthMonitorCheck", () => {
|
|
|
170
166
|
authMethod: "oauth-token",
|
|
171
167
|
});
|
|
172
168
|
});
|
|
173
|
-
it("sends oauth-token Slack alert when both env vars set and probe
|
|
169
|
+
it("sends oauth-token Slack alert when both env vars set and probe detects auth failure", async () => {
|
|
174
170
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
175
171
|
process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
|
|
176
|
-
|
|
172
|
+
simulateProbeAuthFailure();
|
|
177
173
|
const fakeDb = {};
|
|
178
174
|
await runAuthMonitorCheck(0, {
|
|
179
175
|
slackBotToken: "xoxb-test",
|
|
@@ -185,20 +181,39 @@ describe("runAuthMonitorCheck", () => {
|
|
|
185
181
|
const [, calledEvent] = mockLogAuditEvent.mock.calls[0];
|
|
186
182
|
expect(calledEvent.payload.authMethod).toBe("oauth-token");
|
|
187
183
|
});
|
|
184
|
+
// --- Probe network error → fail-open (BEC-244 AC) ---
|
|
185
|
+
it("does NOT fire an alert when probe encounters a network error (fail-open)", async () => {
|
|
186
|
+
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
187
|
+
// probeClaudeAuth returns { valid: true } for network/transient errors
|
|
188
|
+
simulateProbeNetworkError();
|
|
189
|
+
await runAuthMonitorCheck(0, {
|
|
190
|
+
slackBotToken: "xoxb-test",
|
|
191
|
+
slackErrorChannel: "CTEST",
|
|
192
|
+
db: {},
|
|
193
|
+
}, SMALL_INTERVAL);
|
|
194
|
+
expect(mockPostSlackMessage).not.toHaveBeenCalled();
|
|
195
|
+
expect(mockLogAuditEvent).not.toHaveBeenCalled();
|
|
196
|
+
});
|
|
197
|
+
it("does NOT fire an audit event when probe encounters a network error (fail-open)", async () => {
|
|
198
|
+
simulateProbeNetworkError();
|
|
199
|
+
const fakeDb = {};
|
|
200
|
+
await runAuthMonitorCheck(0, { db: fakeDb }, SMALL_INTERVAL);
|
|
201
|
+
expect(mockLogAuditEvent).not.toHaveBeenCalled();
|
|
202
|
+
});
|
|
188
203
|
// --- Session valid ---
|
|
189
|
-
it("runs
|
|
190
|
-
|
|
204
|
+
it("runs probe and skips alerts when mounted session is valid", async () => {
|
|
205
|
+
simulateProbeSuccess();
|
|
191
206
|
await runAuthMonitorCheck(0, {
|
|
192
207
|
slackBotToken: "xoxb-test",
|
|
193
208
|
slackErrorChannel: "CTEST",
|
|
194
209
|
}, SMALL_INTERVAL);
|
|
195
|
-
expect(
|
|
210
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
196
211
|
expect(mockPostSlackMessage).not.toHaveBeenCalled();
|
|
197
212
|
expect(mockLogAuditEvent).not.toHaveBeenCalled();
|
|
198
213
|
});
|
|
199
|
-
// --- Mounted session expired
|
|
200
|
-
it("sends Slack alert to configured channel when mounted session
|
|
201
|
-
|
|
214
|
+
// --- Mounted session expired ---
|
|
215
|
+
it("sends Slack alert to configured channel when mounted session probe detects auth failure", async () => {
|
|
216
|
+
simulateProbeAuthFailure();
|
|
202
217
|
await runAuthMonitorCheck(0, {
|
|
203
218
|
slackBotToken: "xoxb-bot-token",
|
|
204
219
|
slackErrorChannel: "CERROR",
|
|
@@ -206,8 +221,8 @@ describe("runAuthMonitorCheck", () => {
|
|
|
206
221
|
expect(mockPostSlackMessage).toHaveBeenCalledTimes(1);
|
|
207
222
|
expect(mockPostSlackMessage).toHaveBeenCalledWith("xoxb-bot-token", expect.objectContaining({ channel: "CERROR" }));
|
|
208
223
|
});
|
|
209
|
-
it("Slack alert for mounted-session
|
|
210
|
-
|
|
224
|
+
it("Slack alert for mounted-session auth failure mentions claude login, not setup-token", async () => {
|
|
225
|
+
simulateProbeAuthFailure();
|
|
211
226
|
await runAuthMonitorCheck(0, {
|
|
212
227
|
slackBotToken: "xoxb-test",
|
|
213
228
|
slackErrorChannel: "CTEST",
|
|
@@ -215,8 +230,8 @@ describe("runAuthMonitorCheck", () => {
|
|
|
215
230
|
const text = mockPostSlackMessage.mock.calls[0][1].text;
|
|
216
231
|
expect(text).toContain("claude login");
|
|
217
232
|
});
|
|
218
|
-
it("logs claude.auth_expired audit event with authMethod=mounted-session when session
|
|
219
|
-
|
|
233
|
+
it("logs claude.auth_expired audit event with authMethod=mounted-session when session probe detects auth failure", async () => {
|
|
234
|
+
simulateProbeAuthFailure();
|
|
220
235
|
const fakeDb = {};
|
|
221
236
|
await runAuthMonitorCheck(0, { db: fakeDb }, SMALL_INTERVAL);
|
|
222
237
|
expect(mockLogAuditEvent).toHaveBeenCalledTimes(1);
|
|
@@ -230,7 +245,7 @@ describe("runAuthMonitorCheck", () => {
|
|
|
230
245
|
});
|
|
231
246
|
});
|
|
232
247
|
it("does not throw when Slack post fails", async () => {
|
|
233
|
-
|
|
248
|
+
simulateProbeAuthFailure();
|
|
234
249
|
mockPostSlackMessage.mockRejectedValue(new Error("network error"));
|
|
235
250
|
await expect(runAuthMonitorCheck(0, {
|
|
236
251
|
slackBotToken: "xoxb-test",
|
|
@@ -238,18 +253,18 @@ describe("runAuthMonitorCheck", () => {
|
|
|
238
253
|
}, SMALL_INTERVAL)).resolves.not.toThrow();
|
|
239
254
|
});
|
|
240
255
|
it("skips Slack when no slackBotToken configured", async () => {
|
|
241
|
-
|
|
256
|
+
simulateProbeAuthFailure();
|
|
242
257
|
await runAuthMonitorCheck(0, { slackErrorChannel: "CTEST" }, SMALL_INTERVAL);
|
|
243
258
|
expect(mockPostSlackMessage).not.toHaveBeenCalled();
|
|
244
259
|
});
|
|
245
260
|
it("skips Slack when no slackErrorChannel configured", async () => {
|
|
246
|
-
|
|
261
|
+
simulateProbeAuthFailure();
|
|
247
262
|
await runAuthMonitorCheck(0, { slackBotToken: "xoxb-test" }, SMALL_INTERVAL);
|
|
248
263
|
expect(mockPostSlackMessage).not.toHaveBeenCalled();
|
|
249
264
|
});
|
|
250
|
-
// --- Return value
|
|
265
|
+
// --- Return value ---
|
|
251
266
|
it("returns updated timestamp after running", async () => {
|
|
252
|
-
|
|
267
|
+
simulateProbeSuccess();
|
|
253
268
|
const before = Date.now();
|
|
254
269
|
const returned = await runAuthMonitorCheck(0, {}, SMALL_INTERVAL);
|
|
255
270
|
const after = Date.now();
|
|
@@ -269,7 +284,7 @@ describe("createAuthMonitor", () => {
|
|
|
269
284
|
let savedOauthToken;
|
|
270
285
|
let savedApiKey;
|
|
271
286
|
beforeEach(() => {
|
|
272
|
-
|
|
287
|
+
mockProbeClaudeAuth.mockReset();
|
|
273
288
|
mockPostSlackMessage.mockReset().mockResolvedValue({ ok: true });
|
|
274
289
|
mockLogAuditEvent.mockReset().mockResolvedValue(undefined);
|
|
275
290
|
savedOauthToken = process.env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
@@ -278,48 +293,57 @@ describe("createAuthMonitor", () => {
|
|
|
278
293
|
delete process.env.ANTHROPIC_API_KEY;
|
|
279
294
|
});
|
|
280
295
|
afterEach(() => {
|
|
281
|
-
if (savedOauthToken === undefined)
|
|
296
|
+
if (savedOauthToken === undefined)
|
|
282
297
|
delete process.env.CLAUDE_CODE_OAUTH_TOKEN;
|
|
283
|
-
|
|
284
|
-
else {
|
|
298
|
+
else
|
|
285
299
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = savedOauthToken;
|
|
286
|
-
|
|
287
|
-
if (savedApiKey === undefined) {
|
|
300
|
+
if (savedApiKey === undefined)
|
|
288
301
|
delete process.env.ANTHROPIC_API_KEY;
|
|
289
|
-
|
|
290
|
-
else {
|
|
302
|
+
else
|
|
291
303
|
process.env.ANTHROPIC_API_KEY = savedApiKey;
|
|
292
|
-
}
|
|
293
304
|
});
|
|
294
|
-
it("tick() runs the
|
|
295
|
-
|
|
305
|
+
it("tick() runs the probe and handles errors gracefully", async () => {
|
|
306
|
+
simulateProbeSuccess();
|
|
296
307
|
const monitor = createAuthMonitor({}, SMALL_INTERVAL);
|
|
297
308
|
await expect(monitor.tick()).resolves.not.toThrow();
|
|
298
|
-
expect(
|
|
309
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
299
310
|
});
|
|
300
311
|
it("tick() is throttled — second call immediately after first is a no-op", async () => {
|
|
301
|
-
|
|
302
|
-
const monitor = createAuthMonitor({}, 60_000);
|
|
303
|
-
await monitor.tick();
|
|
304
|
-
await monitor.tick();
|
|
305
|
-
expect(
|
|
312
|
+
simulateProbeSuccess();
|
|
313
|
+
const monitor = createAuthMonitor({}, 60_000);
|
|
314
|
+
await monitor.tick();
|
|
315
|
+
await monitor.tick();
|
|
316
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
306
317
|
});
|
|
307
|
-
it("tick() skips
|
|
318
|
+
it("tick() skips probe when only ANTHROPIC_API_KEY is set (static key, never expires)", async () => {
|
|
308
319
|
process.env.ANTHROPIC_API_KEY = "sk-ant-api03-test";
|
|
309
320
|
const monitor = createAuthMonitor({}, SMALL_INTERVAL);
|
|
310
321
|
await monitor.tick();
|
|
311
|
-
expect(
|
|
322
|
+
expect(mockProbeClaudeAuth).not.toHaveBeenCalled();
|
|
312
323
|
});
|
|
313
324
|
it("tick() runs probe when CLAUDE_CODE_OAUTH_TOKEN is set (OAuth tokens can expire)", async () => {
|
|
314
325
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
315
|
-
|
|
326
|
+
simulateProbeSuccess();
|
|
316
327
|
const monitor = createAuthMonitor({}, SMALL_INTERVAL);
|
|
317
328
|
await monitor.tick();
|
|
318
|
-
expect(
|
|
329
|
+
expect(mockProbeClaudeAuth).toHaveBeenCalledTimes(1);
|
|
330
|
+
});
|
|
331
|
+
it("tick() does NOT alert when probe returns network error (fail-open)", async () => {
|
|
332
|
+
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
333
|
+
simulateProbeNetworkError();
|
|
334
|
+
const fakeDb = {};
|
|
335
|
+
const monitor = createAuthMonitor({
|
|
336
|
+
slackBotToken: "xoxb-test",
|
|
337
|
+
slackErrorChannel: "CALERTS",
|
|
338
|
+
db: fakeDb,
|
|
339
|
+
}, SMALL_INTERVAL);
|
|
340
|
+
await monitor.tick();
|
|
341
|
+
expect(mockPostSlackMessage).not.toHaveBeenCalled();
|
|
342
|
+
expect(mockLogAuditEvent).not.toHaveBeenCalled();
|
|
319
343
|
});
|
|
320
|
-
it("tick() sends alert on
|
|
344
|
+
it("tick() sends alert on auth-failed OAuth token and logs audit event with authMethod=oauth-token", async () => {
|
|
321
345
|
process.env.CLAUDE_CODE_OAUTH_TOKEN = "sk-ant-oat-test";
|
|
322
|
-
|
|
346
|
+
simulateProbeAuthFailure();
|
|
323
347
|
const fakeDb = {};
|
|
324
348
|
const monitor = createAuthMonitor({
|
|
325
349
|
slackBotToken: "xoxb-test",
|
|
@@ -333,8 +357,8 @@ describe("createAuthMonitor", () => {
|
|
|
333
357
|
expect(calledEvent.eventType).toBe("claude.auth_expired");
|
|
334
358
|
expect(calledEvent.payload.authMethod).toBe("oauth-token");
|
|
335
359
|
});
|
|
336
|
-
it("tick() sends alert on
|
|
337
|
-
|
|
360
|
+
it("tick() sends alert on auth-failed mounted session and logs audit event with authMethod=mounted-session", async () => {
|
|
361
|
+
simulateProbeAuthFailure();
|
|
338
362
|
const fakeDb = {};
|
|
339
363
|
const monitor = createAuthMonitor({
|
|
340
364
|
slackBotToken: "xoxb-test",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-monitor.test.js","sourceRoot":"","sources":["../../src/__tests__/auth-monitor.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth-monitor.test.js","sourceRoot":"","sources":["../../src/__tests__/auth-monitor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker-config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { getCircuitBreakerProbeConfig } from "../pm/actions/circuit-breaker-config.js";
|
|
3
|
+
describe("getCircuitBreakerProbeConfig", () => {
|
|
4
|
+
it("returns defaults when env is empty", () => {
|
|
5
|
+
expect(getCircuitBreakerProbeConfig({})).toEqual({
|
|
6
|
+
disabled: false,
|
|
7
|
+
cooldownMs: 120 * 60 * 1000,
|
|
8
|
+
maxProbesPerTick: 2,
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
it("disabled is true ONLY for strict 'true'", () => {
|
|
12
|
+
expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "true" }).disabled).toBe(true);
|
|
13
|
+
expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "1" }).disabled).toBe(false);
|
|
14
|
+
expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "yes" }).disabled).toBe(false);
|
|
15
|
+
expect(getCircuitBreakerProbeConfig({ PM_DISABLE_CIRCUIT_BREAKER_PROBE: "TRUE" }).disabled).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
it("parses PM_CIRCUIT_BREAKER_PROBE_AGE_MIN as minutes", () => {
|
|
18
|
+
expect(getCircuitBreakerProbeConfig({ PM_CIRCUIT_BREAKER_PROBE_AGE_MIN: "30" }).cooldownMs).toBe(30 * 60 * 1000);
|
|
19
|
+
});
|
|
20
|
+
it("parses PM_CIRCUIT_BREAKER_MAX_PROBES_PER_TICK", () => {
|
|
21
|
+
expect(getCircuitBreakerProbeConfig({ PM_CIRCUIT_BREAKER_MAX_PROBES_PER_TICK: "5" }).maxProbesPerTick).toBe(5);
|
|
22
|
+
});
|
|
23
|
+
it("falls back to defaults on non-integer values", () => {
|
|
24
|
+
const cfg = getCircuitBreakerProbeConfig({
|
|
25
|
+
PM_CIRCUIT_BREAKER_PROBE_AGE_MIN: "abc",
|
|
26
|
+
PM_CIRCUIT_BREAKER_MAX_PROBES_PER_TICK: "-1",
|
|
27
|
+
});
|
|
28
|
+
expect(cfg.cooldownMs).toBe(120 * 60 * 1000);
|
|
29
|
+
expect(cfg.maxProbesPerTick).toBe(2);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=circuit-breaker-config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker-config.test.js","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAEvF,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/C,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI;YAC3B,gBAAgB,EAAE,CAAC;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvG,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrG,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvG,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,4BAA4B,CAAC,EAAE,gCAAgC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,4BAA4B,CAAC,EAAE,sCAAsC,EAAE,GAAG,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,4BAA4B,CAAC;YACvC,gCAAgC,EAAE,KAAK;YACvC,sCAAsC,EAAE,IAAI;SAC7C,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker-events.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-events.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { pmCircuitBreakerProbeEvent, pmCircuitBreakerRecoveredEvent, pmCircuitBreakerResetManualEvent, } from "../audit/events.js";
|
|
3
|
+
describe("circuit-breaker audit event constructors", () => {
|
|
4
|
+
it("pmCircuitBreakerProbeEvent returns correct shape", () => {
|
|
5
|
+
const ev = pmCircuitBreakerProbeEvent({
|
|
6
|
+
issueId: "BEC-1",
|
|
7
|
+
consecutiveFailures: 4,
|
|
8
|
+
lastProbeAgeMin: 90,
|
|
9
|
+
probeAttempts: 1,
|
|
10
|
+
});
|
|
11
|
+
expect(ev.eventType).toBe("pm.circuit_breaker_probe");
|
|
12
|
+
expect(ev.actorType).toBe("pm-agent");
|
|
13
|
+
expect(ev.issueId).toBe("BEC-1");
|
|
14
|
+
expect(ev.payload).toMatchObject({
|
|
15
|
+
consecutiveFailures: 4,
|
|
16
|
+
lastProbeAgeMin: 90,
|
|
17
|
+
probeAttempts: 1,
|
|
18
|
+
});
|
|
19
|
+
expect(ev.id).toMatch(/^evt_/);
|
|
20
|
+
expect(ev.timestamp).toBeInstanceOf(Date);
|
|
21
|
+
});
|
|
22
|
+
it("pmCircuitBreakerRecoveredEvent returns correct shape", () => {
|
|
23
|
+
const ev = pmCircuitBreakerRecoveredEvent({
|
|
24
|
+
issueId: "BEC-2",
|
|
25
|
+
probeAttempts: 2,
|
|
26
|
+
});
|
|
27
|
+
expect(ev.eventType).toBe("pm.circuit_breaker_recovered");
|
|
28
|
+
expect(ev.actorType).toBe("pm-agent");
|
|
29
|
+
expect(ev.issueId).toBe("BEC-2");
|
|
30
|
+
expect(ev.payload).toMatchObject({
|
|
31
|
+
probeAttempts: 2,
|
|
32
|
+
});
|
|
33
|
+
expect(ev.id).toMatch(/^evt_/);
|
|
34
|
+
expect(ev.timestamp).toBeInstanceOf(Date);
|
|
35
|
+
});
|
|
36
|
+
it("pmCircuitBreakerResetManualEvent returns correct shape", () => {
|
|
37
|
+
const ev = pmCircuitBreakerResetManualEvent({
|
|
38
|
+
issueId: "BEC-3",
|
|
39
|
+
scope: "single",
|
|
40
|
+
failedRunsDeleted: 3,
|
|
41
|
+
});
|
|
42
|
+
expect(ev.eventType).toBe("pm.circuit_breaker_reset_manual");
|
|
43
|
+
expect(ev.actorType).toBe("cli");
|
|
44
|
+
expect(ev.issueId).toBe("BEC-3");
|
|
45
|
+
expect(ev.payload).toMatchObject({
|
|
46
|
+
scope: "single",
|
|
47
|
+
failedRunsDeleted: 3,
|
|
48
|
+
});
|
|
49
|
+
expect(ev.id).toMatch(/^evt_/);
|
|
50
|
+
expect(ev.timestamp).toBeInstanceOf(Date);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=circuit-breaker-events.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker-events.test.js","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-events.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAE5B,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,GAAG,0BAA0B,CAAC;YACpC,OAAO,EAAE,OAAO;YAChB,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;YAC/B,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,EAAE,GAAG,8BAA8B,CAAC;YACxC,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;YAC/B,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,EAAE,GAAG,gCAAgC,CAAC;YAC1C,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,QAAQ;YACf,iBAAiB,EAAE,CAAC;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC7D,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;YAC/B,KAAK,EAAE,QAAQ;YACf,iBAAiB,EAAE,CAAC;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker-integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/circuit-breaker-integration.test.ts"],"names":[],"mappings":""}
|