Skip to content

Commit e11f8d7

Browse files
committed
Improve events integration test reliability for Windows
1 parent 233952a commit e11f8d7

File tree

1 file changed

+59
-79
lines changed

1 file changed

+59
-79
lines changed

test/integration/events-test.js

Lines changed: 59 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
let test = require('tape')
22
let http = require('http')
3-
let { existsSync, mkdirSync, readFileSync, rmSync, statSync } = require('fs')
3+
let { existsSync, mkdirSync, readFileSync, rmSync } = require('fs')
44
let { join } = require('path')
5+
let chokidar = require('chokidar')
56
let sandbox = require('../../src')
67
let mock = join(process.cwd(), 'test', 'mock')
78
let tmp = join(mock, 'tmp')
89
let { run, startup, shutdown } = require('../utils')
910
let eventsPort = 4444
11+
let ohno = 10000
1012
let arc
1113

1214
// Because these tests are firing Arc Functions events, that module needs a `ARC_EVENTS_PORT` env var to run locally
@@ -25,29 +27,35 @@ function teardown (t) {
2527
delete process.env.ARC_SANDBOX
2628
}
2729

28-
// Check for the event artifact up to 10 times over 1 second or fail
29-
function checkFile (t, file, message) {
30-
let found = false
30+
// Wait for the event artifact to appear or fail after 10 seconds
31+
function verifyPublish ({ t, pragma, event, file, message }) {
32+
let filename = join(tmp, file)
33+
let timer
3134
let now = new Date()
32-
for (let i = 0; i < 10; i++) {
33-
setTimeout(() => {
34-
let exists = existsSync(file)
35-
if (i === 9 && !found && !exists) {
36-
t.fail('Failed to find file proving event ran')
37-
}
38-
else if (found) return
39-
else if (exists) {
40-
let stats = statSync(file)
41-
if (stats.size > 0) {
42-
found = true
43-
t.pass('Found file proving event ran')
44-
let contents = readFileSync(file).toString()
45-
t.equal(contents, message, `Found correct file contents in ${new Date() - now}ms`)
46-
teardown(t)
47-
}
48-
}
49-
}, i * 100)
50-
}
35+
let watcher = chokidar.watch(tmp)
36+
watcher.on('add', function (added) {
37+
if (added === filename) {
38+
clearTimeout(timer)
39+
watcher.close().then(() => {
40+
let contents = readFileSync(filename).toString()
41+
t.equal(contents, message, `Found correct file contents in ${new Date() - now}ms`)
42+
teardown(t)
43+
})
44+
}
45+
})
46+
47+
arc[pragma].publish({
48+
name: event,
49+
payload: { filename: file, message },
50+
}, function done (err) {
51+
if (err) t.fail(err)
52+
else {
53+
t.pass('Successfully published event')
54+
timer = setTimeout(() => {
55+
t.fail(`Did not write file in ${ohno}ms, sigh`)
56+
}, ohno)
57+
}
58+
})
5159
}
5260

5361
test('Set up env', t => {
@@ -71,40 +79,26 @@ function runTests (runType, t) {
7179
})
7280

7381
t.test(`${mode} arc.events.publish (normal)`, t => {
74-
t.plan(5)
82+
t.plan(4)
7583
setup(t)
76-
let filename = 'event-file-normal'
77-
let message = 'Event completed (normal)'
78-
arc.events.publish({
79-
name: 'event-normal',
80-
payload: { filename, message }
81-
},
82-
function done (err) {
83-
if (err) t.fail(err)
84-
else {
85-
t.pass('Successfully published event')
86-
let file = join(tmp, filename)
87-
checkFile(t, file, message)
88-
}
84+
verifyPublish({
85+
t,
86+
pragma: 'events',
87+
event: 'event-normal',
88+
file: 'event-file-normal',
89+
message: 'Event completed (normal)',
8990
})
9091
})
9192

9293
t.test(`${mode} arc.events.publish (custom)`, t => {
93-
t.plan(5)
94+
t.plan(4)
9495
setup(t)
95-
let filename = 'event-file-custom'
96-
let message = 'Event completed (custom)'
97-
arc.events.publish({
98-
name: 'event-custom',
99-
payload: { filename, message }
100-
},
101-
function done (err) {
102-
if (err) t.fail(err)
103-
else {
104-
t.pass('Successfully published event')
105-
let file = join(tmp, filename)
106-
checkFile(t, file, message)
107-
}
96+
verifyPublish({
97+
t,
98+
pragma: 'events',
99+
event: 'event-custom',
100+
file: 'event-file-custom',
101+
message: 'Event completed (custom)',
108102
})
109103
})
110104

@@ -144,40 +138,26 @@ function runTests (runType, t) {
144138
})
145139

146140
t.test(`${mode} arc.queues.publish (normal)`, t => {
147-
t.plan(5)
141+
t.plan(4)
148142
setup(t)
149-
let filename = 'queue-file-normal'
150-
let message = 'Queue completed (normal)'
151-
arc.queues.publish({
152-
name: 'queue-normal',
153-
payload: { filename, message }
154-
},
155-
function done (err) {
156-
if (err) t.fail(err)
157-
else {
158-
t.pass('Successfully published queue')
159-
let file = join(tmp, filename)
160-
checkFile(t, file, message)
161-
}
143+
verifyPublish({
144+
t,
145+
pragma: 'queues',
146+
event: 'queue-normal',
147+
file: 'event-file-normal',
148+
message: 'Queue completed (normal)',
162149
})
163150
})
164151

165152
t.test(`${mode} arc.queues.publish (custom)`, t => {
166-
t.plan(5)
153+
t.plan(4)
167154
setup(t)
168-
let filename = 'queue-file-custom'
169-
let message = 'Queue completed (custom)'
170-
arc.queues.publish({
171-
name: 'queue-custom',
172-
payload: { filename, message }
173-
},
174-
function done (err) {
175-
if (err) t.fail(err)
176-
else {
177-
t.pass('Successfully published queue')
178-
let file = join(tmp, filename)
179-
checkFile(t, file, message)
180-
}
155+
verifyPublish({
156+
t,
157+
pragma: 'queues',
158+
event: 'queue-custom',
159+
file: 'queue-file-custom',
160+
message: 'Queue completed (custom)',
181161
})
182162
})
183163

0 commit comments

Comments
 (0)