1
1
let test = require ( 'tape' )
2
2
let http = require ( 'http' )
3
- let { existsSync, mkdirSync, readFileSync, rmSync, statSync } = require ( 'fs' )
3
+ let { existsSync, mkdirSync, readFileSync, rmSync } = require ( 'fs' )
4
4
let { join } = require ( 'path' )
5
+ let chokidar = require ( 'chokidar' )
5
6
let sandbox = require ( '../../src' )
6
7
let mock = join ( process . cwd ( ) , 'test' , 'mock' )
7
8
let tmp = join ( mock , 'tmp' )
8
9
let { run, startup, shutdown } = require ( '../utils' )
9
10
let eventsPort = 4444
11
+ let ohno = 10000
10
12
let arc
11
13
12
14
// 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) {
25
27
delete process . env . ARC_SANDBOX
26
28
}
27
29
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
31
34
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
+ } )
51
59
}
52
60
53
61
test ( 'Set up env' , t => {
@@ -71,40 +79,26 @@ function runTests (runType, t) {
71
79
} )
72
80
73
81
t . test ( `${ mode } arc.events.publish (normal)` , t => {
74
- t . plan ( 5 )
82
+ t . plan ( 4 )
75
83
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)' ,
89
90
} )
90
91
} )
91
92
92
93
t . test ( `${ mode } arc.events.publish (custom)` , t => {
93
- t . plan ( 5 )
94
+ t . plan ( 4 )
94
95
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)' ,
108
102
} )
109
103
} )
110
104
@@ -144,40 +138,26 @@ function runTests (runType, t) {
144
138
} )
145
139
146
140
t . test ( `${ mode } arc.queues.publish (normal)` , t => {
147
- t . plan ( 5 )
141
+ t . plan ( 4 )
148
142
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)' ,
162
149
} )
163
150
} )
164
151
165
152
t . test ( `${ mode } arc.queues.publish (custom)` , t => {
166
- t . plan ( 5 )
153
+ t . plan ( 4 )
167
154
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)' ,
181
161
} )
182
162
} )
183
163
0 commit comments