-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsimbank-test.js
More file actions
170 lines (141 loc) · 4.88 KB
/
simbank-test.js
File metadata and controls
170 lines (141 loc) · 4.88 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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
// SimBank integration test with banking transactions
// Start SimBank: cd simplatform && ./run-locally.sh --server
// Run: ./k6 run examples/simbank-test.js
import { TN3270 } from 'k6/x/tn3270';
import { check, sleep } from 'k6';
export const options = {
vus: 1,
iterations: 1,
};
const SIMBANK_HOST = __ENV.SIMBANK_HOST || 'localhost';
const SIMBANK_PORT = parseInt(__ENV.SIMBANK_PORT || '2023');
// Test accounts seeded in SimBank
const ACCOUNT_1 = '123456789';
const ACCOUNT_2 = '987654321';
export default function () {
const tn = TN3270();
console.log(`Connecting to SimBank at ${SIMBANK_HOST}:${SIMBANK_PORT}...`);
try {
// Connect and login
tn.connect(SIMBANK_HOST, SIMBANK_PORT, 30);
tn.waitForField();
let screen = tn.getScreenText();
check(screen, {
'logon screen displayed': (s) => s.includes('SIMPLATFORM') && s.includes('Userid'),
});
tn.type('IBMUSER');
tn.tab();
tn.type('SYS1');
tn.enter();
tn.waitForField();
screen = tn.getScreenText();
check(screen, {
'main menu displayed': (s) => s.includes('SIMPLATFORM MAIN MENU'),
});
console.log('Logged in to main menu');
// Navigate to BANK application: PF1 -> CICS -> CLEAR -> type BANK
tn.pf(1);
sleep(0.5);
tn.clear();
sleep(0.5);
tn.type('BANK');
tn.enter();
sleep(0.5);
screen = tn.getScreenText();
console.log('Bank main menu:');
console.log(screen);
check(screen, {
'bank menu displayed': (s) => s.includes('SIMBANK MAIN MENU'),
'browse option available': (s) => s.includes('BROWSE'),
'transfer option available': (s) => s.includes('TRANSF'),
});
// Test 1: Account Inquiry (PF1 = BROWSE)
console.log('\n=== Test 1: Account Inquiry ===');
tn.pf(1);
sleep(0.5);
screen = tn.getScreenText();
check(screen, {
'account screen displayed': (s) => s.includes('SIMBANK ACCOUNT MENU'),
});
// Query first account
tn.type(ACCOUNT_1);
tn.enter();
sleep(0.5);
screen = tn.getScreenText();
console.log(`Account ${ACCOUNT_1}:`);
console.log(screen);
check(screen, {
'account 1 found': (s) => s.includes('Account Found'),
'account number displayed': (s) => s.includes(ACCOUNT_1),
'sort code displayed': (s) => s.includes('11-01-45'),
'balance displayed': (s) => s.includes('Balance'),
});
// Return to bank menu (PF3)
tn.pf(3);
sleep(0.5);
// Query second account
tn.pf(1);
sleep(0.5);
tn.type(ACCOUNT_2);
tn.enter();
sleep(0.5);
screen = tn.getScreenText();
console.log(`Account ${ACCOUNT_2}:`);
console.log(screen);
check(screen, {
'account 2 found': (s) => s.includes('Account Found'),
'account 2 number displayed': (s) => s.includes(ACCOUNT_2),
});
tn.pf(3);
sleep(0.5);
// Test 2: Transfer between accounts (PF4 = TRANSF)
console.log('\n=== Test 2: Fund Transfer ===');
tn.pf(4);
sleep(0.5);
screen = tn.getScreenText();
console.log('Transfer screen:');
console.log(screen);
check(screen, {
'transfer screen displayed': (s) => s.includes('SIMBANK TRANSFER MENU'),
});
// Transfer $10 from account 2 to account 1
tn.type(ACCOUNT_2); // From account
tn.tab();
tn.type(ACCOUNT_1); // To account
tn.tab();
tn.type('10.00'); // Amount
tn.enter();
sleep(0.5);
screen = tn.getScreenText();
console.log('After transfer:');
console.log(screen);
check(screen, {
'transfer successful': (s) => s.includes('Transfer Successful'),
});
// Verify balance changed - go back and check account 1
tn.pf(3);
sleep(0.5);
tn.pf(1);
sleep(0.5);
tn.type(ACCOUNT_1);
tn.enter();
sleep(0.5);
screen = tn.getScreenText();
console.log(`Account ${ACCOUNT_1} after transfer:`);
console.log(screen);
// Extract and verify balance increased (original was 56.72, should now be 66.72)
const balanceMatch = screen.match(/Balance\s+(\d+\.\d+)/);
if (balanceMatch) {
const balance = parseFloat(balanceMatch[1]);
check(balance, {
'balance increased after transfer': (b) => b > 56.72,
});
console.log(`New balance: ${balance}`);
}
console.log('\n=== All SimBank tests completed successfully ===');
} catch (err) {
console.log(`Error: ${err}`);
} finally {
tn.disconnect();
}
}