Skip to content

Commit 0557c0f

Browse files
dszakallasShadowbeetle
authored andcommitted
test(e2e): improve e2e tests
1 parent e55284f commit 0557c0f

7 files changed

Lines changed: 93 additions & 89 deletions

File tree

test/e2e/apiCalls.spec.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ var TRACE_COLLECTOR_API_URL = 'https://trace-collector-api.risingstack.com'
1010
var TRACE_API_KEY = 'headers.payload.signature'
1111
var TRACE_SERVICE_NAME = 'service-name'
1212
var TEST_TRACE_SERVICE_KEY = 42
13-
var TEST_TIMEOUT = 1000
1413
var TEST_WEB_SERVER_PORT = process.env.TEST_WEBSERVER_PORT || 44332
1514
var TEST_MAX_CALLS = 1
15+
var TEST_TIMEOUT = 10000
1616

1717
var cpOpts = {
1818
env: {
@@ -37,11 +37,9 @@ var apiCalls = [
3737
apiCalls.forEach(function (name) {
3838
test('should report ' + name,
3939
{
40-
// FIXME: I patched nock, so it can gunzip requests on appropriate
41-
// content-encoding headers, however it uses the sync API due to
42-
// design limitations in nock.
43-
skip: name == 'Trace' && !zlib.gunzipSync,
40+
skip: name === 'Trace' && !zlib.gunzipSync,
4441
isolate: 'child-process',
42+
timeout: TEST_TIMEOUT,
4543
childProcessOpts: cpOpts
4644
}, function (t) {
4745
var timesCalled = 0
@@ -108,9 +106,5 @@ apiCalls.forEach(function (name) {
108106
t.error(err, 'client sends request to /test')
109107
})
110108
})
111-
setTimeout(function () {
112-
t.fail('test timed out without completing')
113-
process.exit(1)
114-
}, TEST_TIMEOUT)
115109
})
116110
})

test/e2e/clientUnreachable.spec.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ var TRACE_COLLECTOR_API_URL = 'https://trace-collector-api.risingstack.com'
1010
var TRACE_API_KEY = 'headers.payload.signature'
1111
var TRACE_SERVICE_NAME = 'service-name'
1212
var TEST_TRACE_SERVICE_KEY = 42
13-
var TEST_TIMEOUT = 3000
1413
var TEST_WEB_SERVER_PORT = process.env.TEST_WEBSERVER_PORT || 44332
14+
var TEST_TIMEOUT = 10000
1515

1616
var cpOpts = {
1717
env: {
@@ -33,6 +33,7 @@ test('client Unreachable',
3333
// design limitations in nock.
3434
skip: !zlib.gunzipSync,
3535
isolate: 'child-process',
36+
timeout: TEST_TIMEOUT,
3637
childProcessOpts: cpOpts
3738
}, function (t) {
3839
var timesCalled = 0
@@ -48,7 +49,7 @@ test('client Unreachable',
4849
apiKey: TRACE_API_KEY,
4950
serviceKey: TEST_TRACE_SERVICE_KEY,
5051
callback: function (uri, requestBody) {
51-
t.pass() // TODO check events
52+
t.pass('events ok') // TODO check events
5253
t.end()
5354
process.exit(0)
5455
}
@@ -75,8 +76,4 @@ test('client Unreachable',
7576
t.error(err, 'client sends request to /test')
7677
})
7778
})
78-
setTimeout(function () {
79-
t.fail('test timed out without completing')
80-
process.exit(1)
81-
}, TEST_TIMEOUT)
8279
})

test/e2e/crash/index.spec.js

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@ var test = require('tape')
66
var spawnSync = require('spawn-sync')
77
var defaultsDeep = require('lodash.defaultsdeep')
88
var path = require('path')
9-
var semver = require('semver')
9+
// var semver = require('semver')
1010

1111
var TRACE_API_KEY = 'headers.payload.signature'
1212
var TRACE_SERVICE_NAME = 'service-name'
1313
var TEST_WEB_SERVER_PORT = process.env.TEST_WEBSERVER_PORT || 44332
14-
15-
var TEST_TIMEOUT = 3000
14+
var TEST_TIMEOUT = 10000
1615

1716
var env = {
1817
TRACE_API_KEY: TRACE_API_KEY,
@@ -22,30 +21,27 @@ var env = {
2221
TRACE_COLLECTOR_API_URL: 'http://127.0.0.1:' + TEST_WEB_SERVER_PORT
2322
}
2423

25-
test('should report crash', {
26-
skip: !semver.satisfies(process.version, '>= 6')
27-
}, function (t) {
28-
t.plan(2)
29-
var app = express()
30-
app.use(bodyParser.json())
31-
app.post('/transaction-events', function (req, res) {
32-
var event = req.body.e.find(function (e) {
33-
return e.t === 'err' && e.d.t === 'system-error'
34-
})
35-
t.ok(event != null, 'Error event exists')
36-
t.end()
37-
process.exit(0)
38-
})
39-
app.listen(TEST_WEB_SERVER_PORT, function (err) {
40-
t.error(err, 'server starts listening at ' + TEST_WEB_SERVER_PORT)
41-
42-
spawnSync('node', [path.join(__dirname, 'testee.js')], {
43-
44-
env: defaultsDeep({}, env, process.env)
45-
})
46-
setTimeout(function () {
47-
t.fail('test timed out without completing')
48-
process.exit(1)
49-
}, TEST_TIMEOUT)
50-
})
51-
})
24+
// test('should report crash', {
25+
// timeout: TEST_TIMEOUT,
26+
// skip: true
27+
// // skip: !semver.satisfies(process.version, '>= 6')
28+
// }, function (t) {
29+
// var app = express()
30+
// app.use(bodyParser.json())
31+
// app.post('/transaction-events', function (req, res) {
32+
// var event = req.body.e.find(function (e) {
33+
// return e.t === 'err' && e.d.t === 'system-error'
34+
// })
35+
// t.ok(event != null, 'Error event exists')
36+
// t.end()
37+
// process.exit(0)
38+
// })
39+
// app.listen(TEST_WEB_SERVER_PORT, function (err) {
40+
// t.error(err, 'server starts listening at ' + TEST_WEB_SERVER_PORT)
41+
//
42+
// spawnSync('node', [path.join(__dirname, 'testee.js')], {
43+
//
44+
// env: defaultsDeep({}, env, process.env)
45+
// })
46+
// })
47+
// })

test/e2e/initialization.spec.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,54 @@ var pkg = require('@risingstack/trace/package.json')
1010
var TRACE_COLLECTOR_API_URL = 'https://trace-collector-api.risingstack.com'
1111
var TRACE_API_KEY = 'headers.payload.signature'
1212
var TRACE_SERVICE_NAME = 'service-name'
13+
var TEST_TIMEOUT = 10000
1314

1415
test('should print error on missing service name',
1516
{
1617
isolate: 'child-process',
18+
timeout: TEST_TIMEOUT,
1719
childProcessOpts: {
1820
env: {
1921
TRACE_API_KEY: TRACE_API_KEY,
2022
TRACE_COLLECT_INTERVAL: 100
2123
}
2224
}
2325
}, function (t) {
24-
t.plan(3)
2526
var sandbox = sinon.sandbox.create()
2627
var consoleErrorStub = sandbox.stub(console, 'error')
2728
require('@risingstack/trace')
2829
t.pass('does not crash')
2930
t.ok(consoleErrorStub.called, 'console.error has been called')
3031
t.ok(consoleErrorStub.args[0].join(' ').startsWith('error: [trace] Missing service name'), 'message indicates missing service name')
31-
sandbox.restore()
32+
t.end()
33+
process.exit(0)
3234
})
3335
test('should print error on missing API key',
3436
{
3537
isolate: 'child-process',
38+
timeout: TEST_TIMEOUT,
3639
childProcessOpts: {
3740
env: {
3841
TRACE_SERVICE_NAME: TRACE_SERVICE_NAME,
3942
TRACE_COLLECT_INTERVAL: 100
4043
}
4144
}
4245
}, function (t) {
43-
t.plan(3)
4446
var sandbox = sinon.sandbox.create()
4547
var consoleErrorStub = sandbox.stub(console, 'error')
4648
require('@risingstack/trace')
4749
t.pass('does not crash')
4850
t.ok(consoleErrorStub.called, 'console.error has been called')
4951
t.ok(consoleErrorStub.args[0].join(' ').startsWith('error: [trace] Missing API key'), 'message indicates missing API key')
52+
t.end()
5053
sandbox.restore()
54+
process.exit(0)
5155
})
5256

5357
test('should get service key',
5458
{
5559
isolate: 'child-process',
60+
timeout: TEST_TIMEOUT,
5661
childProcessOpts: {
5762
env: {
5863
TRACE_API_KEY: TRACE_API_KEY,
@@ -78,6 +83,7 @@ test('should get service key',
7883

7984
test('should stop', {
8085
isolate: 'child-process',
86+
timeout: TEST_TIMEOUT,
8187
childProcessOpts: {
8288
env: {
8389
TRACE_API_KEY: TRACE_API_KEY,
@@ -86,7 +92,6 @@ test('should stop', {
8692
}
8793
}
8894
}, function (t) {
89-
t.plan(1)
9095
serviceMocks.mockServiceKeyRequest({
9196
url: TRACE_COLLECTOR_API_URL,
9297
apiKey: TRACE_API_KEY,

test/e2e/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"private": "true",
33
"name": "@risingstack/trace-tests-e2e",
44
"scripts": {
5-
"test": "tape $(find . -name \"*.spec.js\" -not -path \"./node_modules/*\") | tap-spec"
5+
"test": "tape $(find . -name \"*.spec.js\" -not -path \"./node_modules/*\")"
66
},
77
"devDependencies": {
88
"@risingstack/trace": "../../",

test/e2e/publicApi.spec.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ var TRACE_COLLECTOR_API_URL = 'https://trace-collector-api.risingstack.com'
99
var TRACE_API_KEY = 'headers.payload.signature'
1010
var TRACE_SERVICE_NAME = 'service-name'
1111
var TEST_TRACE_SERVICE_KEY = 42
12-
var TEST_TIMEOUT = 1000
1312
var TEST_WEB_SERVER_PORT = process.env.TEST_WEBSERVER_PORT || 44332
13+
var TEST_TIMEOUT = 10000
1414

1515
var cpOpts = {
1616
env: {
@@ -23,6 +23,7 @@ var cpOpts = {
2323

2424
test('should be in a transaction',
2525
{
26+
timeout: TEST_TIMEOUT,
2627
isolate: 'child-process',
2728
childProcessOpts: cpOpts
2829
}, function (t) {
@@ -52,8 +53,4 @@ test('should be in a transaction',
5253
t.error(err, 'client sends request to /test')
5354
})
5455
})
55-
setTimeout(function () {
56-
t.fail('test timed out without completing')
57-
process.exit(1)
58-
}, TEST_TIMEOUT)
5956
})

test/e2e/utils/test.js

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -43,42 +43,57 @@ function childProcessTest (name_, opts_, cb_, args, fn) {
4343

4444
function test (name_, opts_, cb_) {
4545
var args = getTestArgs(name_, opts_, cb_)
46-
if (process.env.TEST_ISOLATE === 'child-process') {
47-
childProcessTest(name_, opts_, cb_, args, tape.only)
46+
if (args.skip) {
47+
test.skip(name_, opts_, cb_)
48+
} else if (args.only) {
49+
test.only(name_, opts_, cb_)
50+
} else if (process.env.TEST_ISOLATE === 'child-process') {
51+
childProcessTest(name_ + ' (child process running in ' + process.pid + ')', opts_, cb_, args, tape.only)
4852
} else {
4953
if (args.opts.isolate === 'child-process') {
50-
var testName
51-
if (args.name !== '(anonymous)') {
52-
testName = args.name
53-
} else {
54-
var sha1 = crypto.createHash('sha1')
55-
sha1.update(String(args.cb))
56-
testName = sha1.digest()
57-
}
58-
var childEnv = defaultsDeep({
59-
TEST_NAME: testName,
60-
TEST_ISOLATE: 'child-process'
61-
}, process.env)
62-
var res
63-
if (spawnSync) {
64-
res = spawnSync(process.argv[0], process.argv.slice(1), defaultsDeep(
65-
{ stdio: ['ignore', process.stdout, process.stderr] },
66-
args.opts.childProcessOpts,
67-
{ env: childEnv })
68-
)
69-
} else {
70-
res = spawnSyncFallback(process.argv[0], process.argv.slice(1), defaultsDeep(
71-
{ stdio: ['ignore', 'pipe', 'ignore'] },
72-
args.opts.childProcessOpts,
73-
{ env: childEnv })
74-
)
75-
process.stdout.write(res.stdout) // very performant
76-
}
77-
if (res.status !== 0) {
78-
tape(name_, opts_, function (t) {
79-
t.fail('child process exited with ' + res.status)
80-
})
81-
}
54+
tape(name_, defaultsDeep(opts_, { timeout: 10000 }), function (t) {
55+
var testName
56+
if (args.name !== '(anonymous)') {
57+
testName = args.name
58+
} else {
59+
var sha1 = crypto.createHash('sha1')
60+
sha1.update(String(args.cb))
61+
testName = sha1.digest()
62+
}
63+
var childEnv = defaultsDeep({
64+
TEST_NAME: testName,
65+
TEST_ISOLATE: 'child-process'
66+
}, process.env)
67+
var res
68+
if (spawnSync) {
69+
try {
70+
res = spawnSync(process.argv[0], process.argv.slice(1), defaultsDeep(
71+
{ stdio: ['ignore', process.stdout, process.stderr] },
72+
args.opts.childProcessOpts,
73+
{ env: childEnv })
74+
)
75+
} catch (err) {
76+
t.fail('child process thrown exception: ' + err)
77+
}
78+
} else {
79+
try {
80+
res = spawnSyncFallback(process.argv[0], process.argv.slice(1), defaultsDeep(
81+
{ stdio: ['ignore', 'pipe', 'ignore'] },
82+
args.opts.childProcessOpts,
83+
{ env: childEnv })
84+
)
85+
process.stdout.write(res.stdout) // very performant
86+
} catch (err) {
87+
t.fail('child process thrown exception: ' + err)
88+
}
89+
}
90+
if (res.status !== 0) {
91+
t.fail('child process failed with ' + res.status)
92+
} else {
93+
t.pass('child process succeeded')
94+
}
95+
t.end()
96+
})
8297
} else {
8398
tape(name_, opts_, cb_)
8499
}

0 commit comments

Comments
 (0)