1
1
#! /usr/bin/env node
2
2
/* eslint-disable-next-line no-unused-vars */
3
3
import serve from "./server.mjs" ;
4
- import { Builder , Capabilities } from "selenium-webdriver" ;
4
+ import { Builder , Capabilities , Browser , logging } from "selenium-webdriver" ;
5
5
import commandLineArgs from "command-line-args" ;
6
6
import commandLineUsage from "command-line-usage" ;
7
7
import assert from "assert" ;
@@ -64,7 +64,6 @@ switch (BROWSER) {
64
64
printHelp ( `Invalid browser "${ BROWSER } ", choices are: "safari", "firefox", "chrome", "edge"` ) ;
65
65
}
66
66
}
67
-
68
67
process . on ( "unhandledRejection" , ( err ) => {
69
68
console . error ( err ) ;
70
69
process . exit ( 1 ) ;
@@ -78,28 +77,75 @@ const PORT = options.port;
78
77
const server = await serve ( PORT ) ;
79
78
80
79
async function testEnd2End ( ) {
81
- const driver = await new Builder ( ) . withCapabilities ( capabilities ) . build ( ) ;
80
+ var pref = new logging . Preferences ( ) ;
81
+ pref . setLevel ( 'browser' , logging . Level . ALL ) ;
82
+ pref . setLevel ( 'driver' , logging . Level . ALL ) ;
83
+ pref . setLevel ( 'performance' , logging . Level . ALL ) ;
84
+ const driver = await new Builder ( )
85
+ . withCapabilities ( capabilities )
86
+ . setLoggingPrefs ( pref )
87
+ . build ( ) ;
82
88
let results ;
83
89
try {
90
+ console . log ( "Preparing JetStream" ) ;
84
91
await driver . get ( `http://localhost:${ PORT } /index.html?worstCaseCount=2&iterationCount=3` ) ;
85
92
await driver . executeAsyncScript ( ( callback ) => {
86
- globalThis . addEventListener ( "JetStreamReady" , callback ) ;
93
+ globalThis . addEventListener ( "JetStreamReady" , ( ) => callback ( ) ) ;
87
94
// We might not get a chance to install the on-ready listener, thus
88
95
// we also check if the runner is ready synchronously.
89
96
if ( globalThis ?. JetStream ?. isReady )
90
97
callback ( )
91
98
} ) ;
92
- await driver . manage ( ) . setTimeouts ( { script : 60_000 } ) ;
93
- results = await driver . executeAsyncScript ( ( callback ) => {
94
- globalThis . addEventListener ( "JetStreamDone" , event => callback ( event . detail ) ) ;
95
- JetStream . start ( ) ;
96
- } ) ;
99
+ results = await benchmarkResults ( driver )
97
100
} finally {
98
101
console . log ( "\nTests complete!" ) ;
99
- console . log ( results )
100
102
driver . quit ( ) ;
101
103
server . close ( ) ;
102
104
}
103
105
}
104
106
107
+ async function benchmarkResults ( driver ) {
108
+ console . log ( "Starting JetStream" ) ;
109
+ await driver . manage ( ) . setTimeouts ( { script : 60_000 } ) ;
110
+ await driver . executeScript ( ( ) => {
111
+ globalThis . JetStreamDone = false ;
112
+ globalThis . JetStreamResults = [ ] ;
113
+ globalThis . addEventListener ( "JetStreamDone" , event => {
114
+ globalThis . JetStreamDone = true ;
115
+ } ) ;
116
+ globalThis . addEventListener ( "JetStreamBenchmarkDone" , event => {
117
+ globalThis . JetStreamResults . push ( event . detail ) ;
118
+ } ) ;
119
+ JetStream . start ( ) ;
120
+ } ) ;
121
+
122
+ await new Promise ( resolve => pollIncrementalResults ( driver , resolve ) ) ;
123
+ const resultString = await driver . executeScript ( ( ) => {
124
+ if ( globalThis . JetStreamDone )
125
+ return JSON . stringify ( JetStream . resultsObject ( ) ) ;
126
+ } ) ;
127
+ return JSON . parse ( resultString ) ;
128
+ }
129
+
130
+ const UPDATE_INTERVAL = 250 ;
131
+ async function pollIncrementalResults ( driver , resolve ) {
132
+ const internalId = setInterval ( async function logResult ( ) {
133
+ const { done, results} = await driver . executeAsyncScript ( ( callback ) => {
134
+ callback ( {
135
+ done : globalThis . JetStreamDone ,
136
+ results : JSON . stringify ( globalThis . JetStreamResults . splice ( 0 , Infinity ) )
137
+ } ) ;
138
+ } ) ;
139
+ JSON . parse ( results ) . forEach ( logBenchmarkResult ) ;
140
+ if ( done ) {
141
+ clearInterval ( internalId ) ;
142
+ resolve ( )
143
+ }
144
+ } , UPDATE_INTERVAL )
145
+ }
146
+
147
+ function logBenchmarkResult ( benchmarkResult ) {
148
+ console . log ( benchmarkResult . name , benchmarkResult . results )
149
+ }
150
+
105
151
setImmediate ( testEnd2End ) ;
0 commit comments