Skip to content

Commit f194c81

Browse files
committed
Added specs for server logs for console.log and test progress/errors
1 parent 81b0e2e commit f194c81

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed

tests/behaviour/server.js

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
'use strict';
2+
3+
var assert = require('assert'),
4+
sinon = require('sinon'),
5+
path = require('path'),
6+
http = require('http'),
7+
chalk = require('chalk'),
8+
serverPort = 8888,
9+
browserStackRunnerServer = require('../../lib/server.js');
10+
11+
var getBaseConfig = function() {
12+
return {
13+
username: 'BROWSERSTACK_USER',
14+
key: 'BROWSERSTACK_KEY',
15+
test_framework: 'qunit',
16+
test_path: path.resolve(__dirname, 'resources', 'qunit_sample.html'),
17+
build: 'BrowserStack Runner Behaviour Tests',
18+
browsers: [ {
19+
browser: 'firefox',
20+
browser_version: '47.0',
21+
os: 'Windows',
22+
os_version: '7'
23+
} ]
24+
}
25+
};
26+
27+
var requestServer = function(path, requestBody, appendHeaders, callback) {
28+
var headers = {
29+
'Content-Length': Buffer.byteLength(requestBody)
30+
}
31+
var request = http.request({
32+
hostname: 'localhost',
33+
port: serverPort,
34+
path: path,
35+
method: 'POST',
36+
headers: Object.assign(headers, appendHeaders),
37+
}, (res) => {
38+
var responseData = '';
39+
40+
res.on('data', (data) => {
41+
responseData += data.toString();
42+
});
43+
res.on('end', () => {
44+
callback(null, responseData, res.statusCode);
45+
});
46+
}).on('error', (e) => {
47+
callback(e);
48+
});
49+
request.write(requestBody);
50+
request.end();
51+
};
52+
53+
describe('Server Assertions', function() {
54+
describe('Assert logs from the browserstack-runner server', function() {
55+
var sandBox, bsClient, infoLoggerStub, server, reports, workers = {};
56+
57+
beforeEach(function() {
58+
sandBox = sinon.sandbox.create();
59+
bsClient = sandBox.stub();
60+
infoLoggerStub = sandBox.stub(browserStackRunnerServer.logger, 'info');
61+
62+
server = browserStackRunnerServer.Server(bsClient, workers, getBaseConfig(), function(error, reports) {
63+
console.log('Dude!', reports);
64+
});
65+
server.listen(serverPort);
66+
});
67+
68+
afterEach(function() {
69+
sandBox.restore();
70+
server.close();
71+
});
72+
73+
it('logs', function(done) {
74+
var browserString = 'OS X Chrome 54'
75+
requestServer('/_log', '{"arguments":["Random String"]}', {
76+
'x-browser-string': browserString
77+
}, function(error) {
78+
if(error) done(error);
79+
assert.equal(infoLoggerStub.called, true);
80+
assert.equal(infoLoggerStub.callCount, 1);
81+
assert.equal(infoLoggerStub.getCalls()[0].args, '[' + browserString + '] ' + 'Random String');
82+
83+
requestServer('/_log', '{"arguments":["Invalid Random String', {
84+
'x-browser-string': browserString
85+
}, function(error) {
86+
if(error) done(error);
87+
assert.equal(infoLoggerStub.callCount, 2);
88+
assert.equal(infoLoggerStub.getCalls()[1].args, '[' + browserString + '] ' + '{"arguments":["Invalid Random String');
89+
done();
90+
});
91+
});
92+
});
93+
94+
it('test errors', function(done) {
95+
this.timeout(0);
96+
var browserUUIDString = 'abcd-efgh-1234-5678',
97+
browserInfoString = 'browserInfo';
98+
99+
workers[browserUUIDString] = {
100+
getTestBrowserInfo: sandBox.stub().returns(browserInfoString),
101+
string: 'workerString'
102+
};
103+
var requestBodyObject = {
104+
test: {
105+
errors: [{
106+
message: "failedTestMessage",
107+
actual: "ActualValue",
108+
expected: "expectedValue",
109+
source: "LongStackTrace"
110+
}],
111+
name:"customTestName",
112+
suiteName:"customSuiteName"
113+
}
114+
};
115+
116+
requestServer('/_progress', JSON.stringify(requestBodyObject), {
117+
'x-worker-uuid': browserUUIDString
118+
}, function(error) {
119+
if(error) done(error);
120+
assert.equal(infoLoggerStub.called, true);
121+
assert.equal(infoLoggerStub.callCount, 1);
122+
assert.equal(infoLoggerStub.getCalls()[0].args.length, 3);
123+
assert.equal(infoLoggerStub.getCalls()[0].args[0], '[%s] ' + chalk.red('Error:'));
124+
assert.equal(infoLoggerStub.getCalls()[0].args[1], browserInfoString);
125+
assert.equal(infoLoggerStub.getCalls()[0].args[2],
126+
'"customTestName" failed, failedTestMessage\n' + chalk.blue('Expected: ') + 'expectedValue' +
127+
'\n' + chalk.blue(' Actual: ') + 'ActualValue' +
128+
'\n' + chalk.blue(' Source: ') + 'LongStackTrace'
129+
);
130+
131+
requestServer('/_progress', '{"arguments":["Invalid Random String', {
132+
'x-worker-uuid': browserUUIDString
133+
}, function(error) {
134+
if(error) done(error);
135+
assert.equal(infoLoggerStub.callCount, 3);
136+
assert.equal(infoLoggerStub.getCalls()[1].args.length, 2);
137+
assert.equal(infoLoggerStub.getCalls()[1].args[0], '[%s] Exception in parsing log');
138+
assert.equal(infoLoggerStub.getCalls()[1].args[1], 'workerString');
139+
140+
assert.equal(infoLoggerStub.getCalls()[2].args.length, 2);
141+
assert.equal(infoLoggerStub.getCalls()[2].args[0], '[%s] Log: undefined');
142+
assert.equal(infoLoggerStub.getCalls()[2].args[1], 'workerString');
143+
done();
144+
});
145+
});
146+
});
147+
});
148+
});

0 commit comments

Comments
 (0)