-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathcli-workflow.test.ts
More file actions
109 lines (101 loc) · 3.39 KB
/
cli-workflow.test.ts
File metadata and controls
109 lines (101 loc) · 3.39 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import { runMainWorkflow, WorkflowDependencies } from './cli-workflow';
import { WrapperConfig } from './types';
const baseConfig: WrapperConfig = {
allowedDomains: ['github.com'],
agentCommand: 'echo "hello"',
logLevel: 'info',
keepContainers: false,
workDir: '/tmp/awf-test',
imageRegistry: 'registry',
imageTag: 'latest',
buildLocal: false,
};
const createLogger = () => ({
info: jest.fn(),
success: jest.fn(),
warn: jest.fn(),
});
describe('runMainWorkflow', () => {
it('executes workflow steps in order and logs success for zero exit code', async () => {
const callOrder: string[] = [];
const dependencies: WorkflowDependencies = {
ensureFirewallNetwork: jest.fn().mockImplementation(async () => {
callOrder.push('ensureFirewallNetwork');
return { squidIp: '172.30.0.10' };
}),
setupHostIptables: jest.fn().mockImplementation(async () => {
callOrder.push('setupHostIptables');
}),
writeConfigs: jest.fn().mockImplementation(async () => {
callOrder.push('writeConfigs');
}),
startContainers: jest.fn().mockImplementation(async () => {
callOrder.push('startContainers');
}),
runAgentCommand: jest.fn().mockImplementation(async () => {
callOrder.push('runAgentCommand');
return { exitCode: 0 };
}),
};
const performCleanup = jest.fn().mockImplementation(async () => {
callOrder.push('performCleanup');
});
const logger = createLogger();
const exitCode = await runMainWorkflow(baseConfig, dependencies, {
logger,
performCleanup,
});
expect(callOrder).toEqual([
'ensureFirewallNetwork',
'setupHostIptables',
'writeConfigs',
'startContainers',
'runAgentCommand',
'performCleanup',
]);
expect(exitCode).toBe(0);
expect(logger.success).toHaveBeenCalledWith('Command completed successfully');
expect(logger.warn).not.toHaveBeenCalled();
});
it('logs warning with exit code when command fails', async () => {
const callOrder: string[] = [];
const dependencies: WorkflowDependencies = {
ensureFirewallNetwork: jest.fn().mockImplementation(async () => {
callOrder.push('ensureFirewallNetwork');
return { squidIp: '172.30.0.10' };
}),
setupHostIptables: jest.fn().mockImplementation(async () => {
callOrder.push('setupHostIptables');
}),
writeConfigs: jest.fn().mockImplementation(async () => {
callOrder.push('writeConfigs');
}),
startContainers: jest.fn().mockImplementation(async () => {
callOrder.push('startContainers');
}),
runAgentCommand: jest.fn().mockImplementation(async () => {
callOrder.push('runAgentCommand');
return { exitCode: 42 };
}),
};
const performCleanup = jest.fn().mockImplementation(async () => {
callOrder.push('performCleanup');
});
const logger = createLogger();
const exitCode = await runMainWorkflow(baseConfig, dependencies, {
logger,
performCleanup,
});
expect(exitCode).toBe(42);
expect(callOrder).toEqual([
'ensureFirewallNetwork',
'setupHostIptables',
'writeConfigs',
'startContainers',
'runAgentCommand',
'performCleanup',
]);
expect(logger.warn).toHaveBeenCalledWith('Command completed with exit code: 42');
expect(logger.success).not.toHaveBeenCalled();
});
});