queen-mq 0.12.1 โ 0.12.3
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/client-v2/Queen.js +32 -6
- package/client-v2/http/HttpClient.js +7 -2
- package/client-v2/utils/defaults.js +3 -1
- package/package.json +1 -1
- package/test-v2/bootstrap.js +316 -0
- package/test-v2/run.js +4 -15
- package/test-v2/AI_TEST_SUMMARY.md +0 -226
- package/test-v2/GETTING_STARTED.md +0 -181
- package/test-v2/MAINTENANCE_TEST.md +0 -148
- package/test-v2/README_SUBSCRIPTION_TESTS.md +0 -201
- package/test-v2/ai_buffering.js +0 -194
- package/test-v2/ai_error_handling.js +0 -223
- package/test-v2/ai_lease_renewal.js +0 -206
- package/test-v2/ai_mixed_scenarios.js +0 -278
- package/test-v2/ai_priority.js +0 -169
- package/test-v2/ai_resources.js +0 -217
- package/test-v2/ai_ttl_retention.js +0 -170
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
# AI-Generated Test Coverage Summary
|
|
2
|
-
|
|
3
|
-
This document describes the additional test files created to improve test coverage for the Queen Message Queue client v2.
|
|
4
|
-
|
|
5
|
-
## New Test Files Created
|
|
6
|
-
|
|
7
|
-
### 1. `ai_error_handling.js` - Error Handling & Edge Cases
|
|
8
|
-
|
|
9
|
-
Tests various error conditions and edge cases to ensure the system handles failures gracefully.
|
|
10
|
-
|
|
11
|
-
**Tests:**
|
|
12
|
-
- `testInvalidQueueName` - Empty queue name validation
|
|
13
|
-
- `testInvalidConfiguration` - Invalid config values (negative lease times, etc.)
|
|
14
|
-
- `testInvalidMessageFormat` - Messages with incorrect structure
|
|
15
|
-
- `testPushEmptyArray` - Pushing empty message arrays
|
|
16
|
-
- `testAckWithoutPartitionId` - Acknowledgment without required partitionId
|
|
17
|
-
- `testPopFromNonExistentQueue` - Handling non-existent queues
|
|
18
|
-
- `testMultiplePushesWithSameTransactionId` - Duplicate detection across multiple pushes
|
|
19
|
-
- `testAckExpiredLease` - Attempting to ack after lease expiration
|
|
20
|
-
- `testBatchAckMixedResults` - Batch acknowledgment with some expired leases
|
|
21
|
-
- `testVeryLargePayload` - Testing system limits with very large messages
|
|
22
|
-
|
|
23
|
-
**Purpose:** Ensure robust error handling and proper validation of inputs.
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
### 2. `ai_lease_renewal.js` - Lease Extension Management
|
|
28
|
-
|
|
29
|
-
Tests manual lease renewal functionality to keep messages locked during long-running operations.
|
|
30
|
-
|
|
31
|
-
**Tests:**
|
|
32
|
-
- `testManualLeaseRenewal` - Basic lease renewal with `client.renew()`
|
|
33
|
-
- `testBatchLeaseRenewal` - Renewing multiple message leases at once
|
|
34
|
-
- `testRenewalWithLeaseId` - Renewing using just the leaseId string
|
|
35
|
-
- `testRenewalOfExpiredLease` - Attempting to renew an already-expired lease
|
|
36
|
-
- `testMultipleRenewals` - Renewing the same message multiple times
|
|
37
|
-
|
|
38
|
-
**Purpose:** Validate that lease renewal prevents messages from being re-delivered during long processing.
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
### 3. `ai_resources.js` - Resource & Status APIs
|
|
43
|
-
|
|
44
|
-
Tests the administrative and monitoring APIs for querying system state.
|
|
45
|
-
|
|
46
|
-
**Tests:**
|
|
47
|
-
- `testListQueues` - List all queues in the system
|
|
48
|
-
- `testGetQueueDetails` - Get details for a specific queue
|
|
49
|
-
- `testGetNamespaces` - List all namespaces
|
|
50
|
-
- `testGetTasks` - List all tasks
|
|
51
|
-
- `testGetMessages` - Query messages with filters
|
|
52
|
-
- `testSystemOverview` - Get system-wide statistics
|
|
53
|
-
- `testHealthCheck` - Health check endpoint
|
|
54
|
-
- `testDeleteQueue` - Delete a queue and verify removal
|
|
55
|
-
|
|
56
|
-
**Purpose:** Ensure monitoring and administrative APIs work correctly.
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
### 4. `ai_buffering.js` - Client-Side Buffering Management
|
|
61
|
-
|
|
62
|
-
Tests client-side message buffering features for high-throughput scenarios.
|
|
63
|
-
|
|
64
|
-
**Tests:**
|
|
65
|
-
- `testBufferStatistics` - Getting buffer statistics via `getBufferStats()`
|
|
66
|
-
- `testManualBufferFlush` - Manual flush with `flushAllBuffers()`
|
|
67
|
-
- `testBufferTimeThreshold` - Time-based buffer flushing
|
|
68
|
-
- `testBufferCountThreshold` - Count-based buffer flushing
|
|
69
|
-
- `testMultipleBuffers` - Multiple queues with independent buffers
|
|
70
|
-
- `testBufferWithPartition` - Buffering with specific partitions
|
|
71
|
-
|
|
72
|
-
**Purpose:** Validate client-side buffering behavior for batch optimization.
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
### 5. `ai_priority.js` - Priority Queue Testing
|
|
77
|
-
|
|
78
|
-
Tests message priority handling to ensure high-priority messages are processed first.
|
|
79
|
-
|
|
80
|
-
**Tests:**
|
|
81
|
-
- `testBasicPriority` - Queues with different priority levels
|
|
82
|
-
- `testPriorityWithNamespace` - Priority ordering within a namespace
|
|
83
|
-
- `testPriorityWithTask` - Priority ordering within a task
|
|
84
|
-
- `testDynamicPriorityChange` - Reconfiguring queue priority
|
|
85
|
-
|
|
86
|
-
**Purpose:** Ensure priority-based message processing works correctly.
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
### 6. `ai_ttl_retention.js` - TTL and Retention Policies
|
|
91
|
-
|
|
92
|
-
Tests message time-to-live and retention features.
|
|
93
|
-
|
|
94
|
-
**Tests:**
|
|
95
|
-
- `testMessageTTL` - Messages expiring based on TTL configuration
|
|
96
|
-
- `testRetentionEnabled` - Retention of pending messages
|
|
97
|
-
- `testCompletedRetention` - Retention of completed messages
|
|
98
|
-
- `testNoRetention` - Immediate deletion without retention
|
|
99
|
-
- `testMaxWaitTimeDLQ` - Messages moving to DLQ based on max wait time
|
|
100
|
-
|
|
101
|
-
**Purpose:** Validate message lifecycle and retention policies.
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
### 7. `ai_mixed_scenarios.js` - Complex Integration Tests
|
|
106
|
-
|
|
107
|
-
Tests complex scenarios combining multiple features.
|
|
108
|
-
|
|
109
|
-
**Tests:**
|
|
110
|
-
- `testMultipleQueuesSimultaneous` - Multiple queues with different configurations
|
|
111
|
-
- `testCrossQueueWorkflow` - 3-stage processing pipeline across queues
|
|
112
|
-
- `testPartitionWithConsumerGroupAndRetries` - Complex partition + group + retry scenario
|
|
113
|
-
- `testBufferedPushWithTransactionConsume` - Buffering combined with transactional consumption
|
|
114
|
-
- `testNamespaceWithMultipleQueues` - Multiple queues in same namespace
|
|
115
|
-
- `testEncryptedWithPartitionAndGroup` - Encryption + partition + consumer group
|
|
116
|
-
- `testHighConcurrencyMixedOperations` - High concurrency with mixed operations
|
|
117
|
-
|
|
118
|
-
**Purpose:** Validate that multiple features work correctly when combined.
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Test Coverage Summary
|
|
123
|
-
|
|
124
|
-
### Before AI Tests
|
|
125
|
-
- โ
Queue creation/deletion/configuration
|
|
126
|
-
- โ
Basic push/pop operations
|
|
127
|
-
- โ
Consumer operations
|
|
128
|
-
- โ
Transactions
|
|
129
|
-
- โ
DLQ functionality
|
|
130
|
-
- โ
Load testing
|
|
131
|
-
|
|
132
|
-
### After AI Tests (New Coverage)
|
|
133
|
-
- โ
**Error handling and edge cases**
|
|
134
|
-
- โ
**Lease renewal API**
|
|
135
|
-
- โ
**Resource/Status APIs**
|
|
136
|
-
- โ
**Client-side buffering management**
|
|
137
|
-
- โ
**Priority queue behavior**
|
|
138
|
-
- โ
**TTL and retention policies**
|
|
139
|
-
- โ
**Complex multi-feature scenarios**
|
|
140
|
-
|
|
141
|
-
## Running the Tests
|
|
142
|
-
|
|
143
|
-
### Run Only AI-Generated Tests (45 tests)
|
|
144
|
-
```bash
|
|
145
|
-
cd /Users/alice/Work/queen/client-js/test-v2
|
|
146
|
-
node run.js ai
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### Run Only Human-Written Tests (49 tests)
|
|
150
|
-
```bash
|
|
151
|
-
node run.js human
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### Run All Tests (94 tests)
|
|
155
|
-
```bash
|
|
156
|
-
node run.js
|
|
157
|
-
# or
|
|
158
|
-
node run.js all
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
### Run Specific Test
|
|
162
|
-
```bash
|
|
163
|
-
# AI test examples
|
|
164
|
-
node run.js testManualLeaseRenewal
|
|
165
|
-
node run.js testInvalidQueueName
|
|
166
|
-
node run.js testListQueues
|
|
167
|
-
|
|
168
|
-
# Human test examples
|
|
169
|
-
node run.js pushMessage
|
|
170
|
-
node run.js testConsumer
|
|
171
|
-
node run.js transactionBasicPushAck
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
### List All Available Tests
|
|
175
|
-
```bash
|
|
176
|
-
# Show help with categorized test list
|
|
177
|
-
node run.js help
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## Total Test Count
|
|
181
|
-
|
|
182
|
-
| Category | Original Tests | AI-Generated Tests | Total |
|
|
183
|
-
|----------|---------------|-------------------|-------|
|
|
184
|
-
| Queue Operations | 3 | 0 | 3 |
|
|
185
|
-
| Push Operations | 13 | 0 | 13 |
|
|
186
|
-
| Pop Operations | 5 | 0 | 5 |
|
|
187
|
-
| Consumer Operations | 12 | 0 | 12 |
|
|
188
|
-
| Load Tests | 3 | 0 | 3 |
|
|
189
|
-
| DLQ Tests | 1 | 0 | 1 |
|
|
190
|
-
| Transaction Tests | 11 | 0 | 11 |
|
|
191
|
-
| Complete Workflow | 1 | 0 | 1 |
|
|
192
|
-
| **Error Handling** | **0** | **10** | **10** |
|
|
193
|
-
| **Lease Renewal** | **0** | **5** | **5** |
|
|
194
|
-
| **Resources/Status** | **0** | **8** | **8** |
|
|
195
|
-
| **Buffering** | **0** | **6** | **6** |
|
|
196
|
-
| **Priority** | **0** | **4** | **4** |
|
|
197
|
-
| **TTL/Retention** | **0** | **5** | **5** |
|
|
198
|
-
| **Mixed Scenarios** | **0** | **7** | **7** |
|
|
199
|
-
| **TOTAL** | **49** | **45** | **94** |
|
|
200
|
-
|
|
201
|
-
## Notable Test Features
|
|
202
|
-
|
|
203
|
-
1. **Comprehensive Error Coverage**: Tests handle various failure modes including network errors, invalid inputs, and expired leases.
|
|
204
|
-
|
|
205
|
-
2. **Real-World Scenarios**: Mixed scenario tests simulate actual production use cases like multi-stage pipelines and cross-queue workflows.
|
|
206
|
-
|
|
207
|
-
3. **Administrative Testing**: Resource API tests enable validation of monitoring and management features.
|
|
208
|
-
|
|
209
|
-
4. **Performance Features**: Buffering and priority tests ensure high-throughput and prioritization work correctly.
|
|
210
|
-
|
|
211
|
-
5. **Data Lifecycle**: TTL and retention tests validate complete message lifecycle management.
|
|
212
|
-
|
|
213
|
-
## Test Dependencies
|
|
214
|
-
|
|
215
|
-
All tests require:
|
|
216
|
-
- Queen server running on `http://localhost:6632`
|
|
217
|
-
- PostgreSQL database accessible
|
|
218
|
-
- Node.js with ES modules support
|
|
219
|
-
|
|
220
|
-
## Notes
|
|
221
|
-
|
|
222
|
-
- Tests prefixed with `ai_*` are AI-generated
|
|
223
|
-
- All tests are non-destructive and use isolated test queues
|
|
224
|
-
- Tests clean up after themselves where possible
|
|
225
|
-
- Some tests intentionally trigger errors to validate error handling
|
|
226
|
-
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
# Getting Started with AI-Generated Tests
|
|
2
|
-
|
|
3
|
-
## Quick Start
|
|
4
|
-
|
|
5
|
-
The AI has identified and created tests for **7 major gaps** in your test coverage:
|
|
6
|
-
|
|
7
|
-
### 1. **Error Handling** (`ai_error_handling.js`) - 10 tests
|
|
8
|
-
Critical edge cases like invalid inputs, expired leases, and system limits.
|
|
9
|
-
|
|
10
|
-
### 2. **Lease Renewal** (`ai_lease_renewal.js`) - 5 tests
|
|
11
|
-
Manual lease extension API for long-running message processing.
|
|
12
|
-
|
|
13
|
-
### 3. **Resources/Status** (`ai_resources.js`) - 8 tests
|
|
14
|
-
Administrative APIs for monitoring queues, namespaces, tasks, and system health.
|
|
15
|
-
|
|
16
|
-
### 4. **Client Buffering** (`ai_buffering.js`) - 6 tests
|
|
17
|
-
Client-side message buffering for high-throughput scenarios.
|
|
18
|
-
|
|
19
|
-
### 5. **Priority Queues** (`ai_priority.js`) - 4 tests
|
|
20
|
-
Message priority handling across queues, namespaces, and tasks.
|
|
21
|
-
|
|
22
|
-
### 6. **TTL & Retention** (`ai_ttl_retention.js`) - 5 tests
|
|
23
|
-
Message expiration, retention policies, and DLQ based on wait time.
|
|
24
|
-
|
|
25
|
-
### 7. **Mixed Scenarios** (`ai_mixed_scenarios.js`) - 7 tests
|
|
26
|
-
Complex real-world scenarios combining multiple features.
|
|
27
|
-
|
|
28
|
-
## Running the New Tests
|
|
29
|
-
|
|
30
|
-
### Run ONLY AI-generated tests:
|
|
31
|
-
```bash
|
|
32
|
-
cd client-js/test-v2
|
|
33
|
-
node run.js ai
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### Run ONLY human-written tests:
|
|
37
|
-
```bash
|
|
38
|
-
node run.js human
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Run all tests (both AI and human):
|
|
42
|
-
```bash
|
|
43
|
-
node run.js
|
|
44
|
-
# or
|
|
45
|
-
node run.js all
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Run a specific test:
|
|
49
|
-
```bash
|
|
50
|
-
node run.js testManualLeaseRenewal
|
|
51
|
-
node run.js testInvalidQueueName
|
|
52
|
-
node run.js testListQueues
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### List all available tests:
|
|
56
|
-
```bash
|
|
57
|
-
# Run with invalid argument to see help
|
|
58
|
-
node run.js help
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## What Was Missing Before?
|
|
62
|
-
|
|
63
|
-
| Area | Status Before | Status Now |
|
|
64
|
-
|------|--------------|------------|
|
|
65
|
-
| Error Handling | โ No coverage | โ
10 tests |
|
|
66
|
-
| Lease Renewal API | โ Only auto-renewal | โ
Manual renewal covered |
|
|
67
|
-
| Resource APIs | โ Not tested | โ
All endpoints covered |
|
|
68
|
-
| Buffer Management | โ Basic buffering only | โ
Full coverage |
|
|
69
|
-
| Priority Queues | โ Config only | โ
Behavior validated |
|
|
70
|
-
| TTL/Retention | โ Not tested | โ
Complete lifecycle |
|
|
71
|
-
| Complex Scenarios | โ ๏ธ Partial | โ
Real-world workflows |
|
|
72
|
-
|
|
73
|
-
## Key Test Highlights
|
|
74
|
-
|
|
75
|
-
### Most Important Tests
|
|
76
|
-
|
|
77
|
-
1. **`testManualLeaseRenewal`** - Essential for long-running tasks
|
|
78
|
-
2. **`testAckExpiredLease`** - Prevents data loss from expired leases
|
|
79
|
-
3. **`testCrossQueueWorkflow`** - Validates transactional pipelines
|
|
80
|
-
4. **`testBufferStatistics`** - Monitors client-side batching
|
|
81
|
-
5. **`testPriorityWithNamespace`** - Ensures priority ordering works
|
|
82
|
-
|
|
83
|
-
### Production-Critical Tests
|
|
84
|
-
|
|
85
|
-
- `testAckWithoutPartitionId` - Prevents acknowledging wrong messages
|
|
86
|
-
- `testBatchAckMixedResults` - Handles partial batch failures
|
|
87
|
-
- `testHighConcurrencyMixedOperations` - Validates concurrency handling
|
|
88
|
-
- `testEncryptedWithPartitionAndGroup` - Complex security scenario
|
|
89
|
-
|
|
90
|
-
## File Structure
|
|
91
|
-
|
|
92
|
-
```
|
|
93
|
-
test-v2/
|
|
94
|
-
โโโ queue.js # Original: Queue CRUD
|
|
95
|
-
โโโ push.js # Original: Push operations
|
|
96
|
-
โโโ pop.js # Original: Pop operations
|
|
97
|
-
โโโ consume.js # Original: Consumer patterns
|
|
98
|
-
โโโ load.js # Original: Load testing
|
|
99
|
-
โโโ dlq.js # Original: Dead letter queue
|
|
100
|
-
โโโ complete.js # Original: Workflows
|
|
101
|
-
โโโ transaction.js # Original: Transactions
|
|
102
|
-
โโโ ai_error_handling.js # NEW: Error & edge cases
|
|
103
|
-
โโโ ai_lease_renewal.js # NEW: Lease management
|
|
104
|
-
โโโ ai_resources.js # NEW: Admin APIs
|
|
105
|
-
โโโ ai_buffering.js # NEW: Buffer management
|
|
106
|
-
โโโ ai_priority.js # NEW: Priority behavior
|
|
107
|
-
โโโ ai_ttl_retention.js # NEW: Message lifecycle
|
|
108
|
-
โโโ ai_mixed_scenarios.js # NEW: Complex scenarios
|
|
109
|
-
โโโ run.js # Test runner (updated)
|
|
110
|
-
โโโ AI_TEST_SUMMARY.md # Detailed documentation
|
|
111
|
-
โโโ GETTING_STARTED.md # This file
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Before Running Tests
|
|
115
|
-
|
|
116
|
-
Make sure:
|
|
117
|
-
1. โ
Queen server is running on `http://localhost:6632`
|
|
118
|
-
2. โ
PostgreSQL database is accessible
|
|
119
|
-
3. โ
Environment variables are set (if needed)
|
|
120
|
-
4. โ
No production data in test database
|
|
121
|
-
|
|
122
|
-
## Testing with Different Server Configurations
|
|
123
|
-
|
|
124
|
-
### Standard Configuration (Default)
|
|
125
|
-
|
|
126
|
-
Run server with default settings:
|
|
127
|
-
```bash
|
|
128
|
-
./bin/queen-server
|
|
129
|
-
node test-v2/run.js
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
**Expected:** Consumer groups without explicit `.subscriptionMode()` process all historical messages.
|
|
133
|
-
|
|
134
|
-
### With DEFAULT_SUBSCRIPTION_MODE="new"
|
|
135
|
-
|
|
136
|
-
Run server with "new" as default:
|
|
137
|
-
```bash
|
|
138
|
-
DEFAULT_SUBSCRIPTION_MODE="new" ./bin/queen-server
|
|
139
|
-
node test-v2/run.js
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**Expected:**
|
|
143
|
-
- Tests with explicit `.subscriptionMode('new')` work the same
|
|
144
|
-
- Tests without explicit mode will skip historical messages
|
|
145
|
-
- `subscriptionModeServerDefault` test detects and reports server default
|
|
146
|
-
|
|
147
|
-
**All tests pass with both configurations!** The tests are designed to be agnostic to server defaults.
|
|
148
|
-
|
|
149
|
-
## Test Philosophy
|
|
150
|
-
|
|
151
|
-
The AI-generated tests follow these principles:
|
|
152
|
-
|
|
153
|
-
1. **Isolated** - Each test uses unique queue names
|
|
154
|
-
2. **Self-contained** - Tests don't depend on each other
|
|
155
|
-
3. **Realistic** - Tests mirror production scenarios
|
|
156
|
-
4. **Defensive** - Tests validate error conditions
|
|
157
|
-
5. **Complete** - Tests cover happy path and edge cases
|
|
158
|
-
|
|
159
|
-
## Next Steps
|
|
160
|
-
|
|
161
|
-
1. Review the tests in each file
|
|
162
|
-
2. Run the full test suite: `node run.js`
|
|
163
|
-
3. Check for any failures specific to your environment
|
|
164
|
-
4. Adjust configuration if needed (ports, timeouts, etc.)
|
|
165
|
-
5. Integrate into your CI/CD pipeline
|
|
166
|
-
|
|
167
|
-
## Need Help?
|
|
168
|
-
|
|
169
|
-
- **See all tests**: `node run.js` (no arguments)
|
|
170
|
-
- **Run specific test**: `node run.js <testName>`
|
|
171
|
-
- **Read detailed docs**: See `AI_TEST_SUMMARY.md`
|
|
172
|
-
- **Check original tests**: Files without `ai_` prefix
|
|
173
|
-
|
|
174
|
-
## Test Count Summary
|
|
175
|
-
|
|
176
|
-
- **Original tests**: 49
|
|
177
|
-
- **AI-generated tests**: 45
|
|
178
|
-
- **Total coverage**: 94 tests
|
|
179
|
-
|
|
180
|
-
You've nearly **doubled your test coverage** with these additions! ๐
|
|
181
|
-
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
# Maintenance Mode Test
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
Comprehensive test for the maintenance mode feature with file buffer.
|
|
6
|
-
|
|
7
|
-
## Test Scenario
|
|
8
|
-
|
|
9
|
-
1. **Start consumer** - Begins consuming messages from queue
|
|
10
|
-
2. **Start producer** - Produces 10 messages/second
|
|
11
|
-
3. **Enable maintenance** - Triggers maintenance mode via API
|
|
12
|
-
4. **Verify buffering** - Consumer stops receiving (messages go to file buffer)
|
|
13
|
-
5. **Continue producing** - Producer keeps running for 10 seconds during maintenance
|
|
14
|
-
6. **Disable maintenance** - Deactivates maintenance mode via API
|
|
15
|
-
7. **Verify drain** - Consumer resumes receiving messages
|
|
16
|
-
8. **Stop producer** - Halts message production
|
|
17
|
-
9. **Wait for completion** - Waits 10 seconds for file buffer to drain
|
|
18
|
-
10. **Verify counts** - Ensures all produced messages were received
|
|
19
|
-
|
|
20
|
-
## Running the Test
|
|
21
|
-
|
|
22
|
-
### Standalone
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
cd /Users/alice/Work/queen/client-js/test-v2
|
|
26
|
-
node maintenance.js
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Via Test Runner
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
# Run just this test
|
|
33
|
-
node run.js test_maintenance_mode
|
|
34
|
-
|
|
35
|
-
# Run all human tests (includes this one)
|
|
36
|
-
node run.js human
|
|
37
|
-
|
|
38
|
-
# Run all tests
|
|
39
|
-
node run.js
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Expected Output
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
๐งช Testing Maintenance Mode with File Buffer
|
|
46
|
-
|
|
47
|
-
๐ Step 1: Configuring queue "test-maintenance-queue"...
|
|
48
|
-
โ
Queue configured
|
|
49
|
-
|
|
50
|
-
๐ฅ Step 2: Starting consumer...
|
|
51
|
-
โ
Consumer started
|
|
52
|
-
|
|
53
|
-
๐ค Step 3: Starting producer (10 msgs/sec)...
|
|
54
|
-
โ
Producer started
|
|
55
|
-
|
|
56
|
-
โฑ๏ธ Step 4: Waiting 3 seconds for normal message flow...
|
|
57
|
-
๐จ Received 10 messages (total: 10)
|
|
58
|
-
๐จ Received 10 messages (total: 20)
|
|
59
|
-
๐จ Received 10 messages (total: 30)
|
|
60
|
-
Produced: 30, Received: 30
|
|
61
|
-
|
|
62
|
-
๐ง Step 5: Enabling MAINTENANCE MODE...
|
|
63
|
-
Response: { maintenanceMode: true, bufferedMessages: 0, ... }
|
|
64
|
-
โ
Maintenance mode enabled
|
|
65
|
-
|
|
66
|
-
โฑ๏ธ Step 6: Waiting 2 seconds - consumer should stop receiving...
|
|
67
|
-
Messages received during maintenance: 0
|
|
68
|
-
Total: Produced=50, Received=30
|
|
69
|
-
|
|
70
|
-
โฑ๏ธ Step 7: Producing during maintenance for 10 seconds...
|
|
71
|
-
(Messages should go to file buffer)
|
|
72
|
-
|
|
73
|
-
Maintenance period complete:
|
|
74
|
-
- Total produced: 150
|
|
75
|
-
- Total received: 30
|
|
76
|
-
- Buffered (should be ~100): 120
|
|
77
|
-
|
|
78
|
-
๐ Step 8: Checking maintenance status...
|
|
79
|
-
Status: { maintenanceMode: true, bufferedMessages: 120, ... }
|
|
80
|
-
|
|
81
|
-
โ
Step 9: Disabling MAINTENANCE MODE...
|
|
82
|
-
Response: { maintenanceMode: false, bufferedMessages: 120, ... }
|
|
83
|
-
(File buffer should start draining to database)
|
|
84
|
-
|
|
85
|
-
โฑ๏ธ Step 10: Waiting for messages to resume...
|
|
86
|
-
๐จ Received 10 messages (total: 40)
|
|
87
|
-
Messages received after resuming: 10
|
|
88
|
-
โ
Messages are flowing again!
|
|
89
|
-
|
|
90
|
-
๐ Step 11: Stopping producer...
|
|
91
|
-
Final produced count: 150
|
|
92
|
-
|
|
93
|
-
โฑ๏ธ Step 12: Waiting 10 seconds for file buffer to drain...
|
|
94
|
-
1s - Received: 50/150 (33.3%)
|
|
95
|
-
๐จ Received 10 messages (total: 60)
|
|
96
|
-
2s - Received: 70/150 (46.7%)
|
|
97
|
-
๐จ Received 10 messages (total: 80)
|
|
98
|
-
3s - Received: 90/150 (60.0%)
|
|
99
|
-
๐จ Received 10 messages (total: 100)
|
|
100
|
-
4s - Received: 110/150 (73.3%)
|
|
101
|
-
๐จ Received 10 messages (total: 120)
|
|
102
|
-
5s - Received: 130/150 (86.7%)
|
|
103
|
-
๐จ Received 10 messages (total: 140)
|
|
104
|
-
6s - Received: 150/150 (100.0%)
|
|
105
|
-
โ
All messages received!
|
|
106
|
-
|
|
107
|
-
๐ Step 13: Stopping consumer...
|
|
108
|
-
โ
Consumer stopped
|
|
109
|
-
|
|
110
|
-
๐ Final Verification:
|
|
111
|
-
|
|
112
|
-
Total Produced: 150
|
|
113
|
-
Total Received: 150
|
|
114
|
-
Difference: 0
|
|
115
|
-
|
|
116
|
-
โ
SUCCESS: All messages accounted for!
|
|
117
|
-
Maintenance mode works correctly with file buffer.
|
|
118
|
-
|
|
119
|
-
๐ Queen client closed
|
|
120
|
-
|
|
121
|
-
โ
All tests passed!
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
## What It Tests
|
|
125
|
-
|
|
126
|
-
โ
**Maintenance mode activation** - API responds correctly
|
|
127
|
-
โ
**Message buffering** - Messages go to file buffer (consumer stops receiving)
|
|
128
|
-
โ
**Continued production** - Can push messages during maintenance
|
|
129
|
-
โ
**Maintenance mode deactivation** - API responds correctly
|
|
130
|
-
โ
**Automatic drain** - File buffer drains to database
|
|
131
|
-
โ
**Message ordering** - All messages received in order (FIFO)
|
|
132
|
-
โ
**No message loss** - Produced count == Received count
|
|
133
|
-
โ
**Multi-instance support** - Uses database for state (works across restarts)
|
|
134
|
-
|
|
135
|
-
## Success Criteria
|
|
136
|
-
|
|
137
|
-
- All produced messages are eventually received
|
|
138
|
-
- Consumer stops receiving during maintenance
|
|
139
|
-
- Consumer resumes receiving after maintenance is disabled
|
|
140
|
-
- No duplicates or lost messages
|
|
141
|
-
- Drain completes within 10 seconds
|
|
142
|
-
|
|
143
|
-
## Notes
|
|
144
|
-
|
|
145
|
-
- Uses `axios` for direct API calls (maintenance endpoints)
|
|
146
|
-
- Uses Queen client for queue operations (push/pop/ack)
|
|
147
|
-
- Test takes ~25 seconds total (3s warmup + 10s maintenance + 10s drain)
|
|
148
|
-
|