Skip to content

Commit

Permalink
Add deployment tests. Closes #21.
Browse files Browse the repository at this point in the history
  • Loading branch information
jmdobry committed Nov 5, 2015
1 parent 5469269 commit e8abf99
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 16 deletions.
6 changes: 6 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,16 @@ before_install:
printf '\ny\n\ny\ny\n' | ./google-cloud-sdk/install.sh &&
cd $TRAVIS_BUILD_DIR;
fi
- gcloud components update -q
- gcloud components update preview -q
- openssl aes-256-cbc -K $encrypted_95e832a36b06_key -iv $encrypted_95e832a36b06_iv -in nodejs-docs-samples.json.enc -out nodejs-docs-samples.json -d
- if [ -a nodejs-docs-samples.json ]; then
gcloud auth activate-service-account --key-file nodejs-docs-samples.json;
fi
- openssl aes-256-cbc -K $encrypted_4e84c7c7ab67_key -iv $encrypted_4e84c7c7ab67_iv -in test/encrypted/express-demo.json.enc -out test/encrypted/express-demo.json -d
- if [ -a test/encrypted/express-demo.json ]; then
gcloud auth activate-service-account --key-file test/encrypted/express-demo.json;
fi

install:
#Add app specific setup here
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"googleapis": "~2.1.3"
},
"devDependencies": {
"async": "^1.5.0",
"coveralls": "^2.11.4",
"istanbul": "^0.4.0",
"jshint": "~2.8.0",
Expand Down
100 changes: 84 additions & 16 deletions test/appengine/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
'use strict';

var spawn = require('child_process').spawn;
var exec = require('child_process').exec;
var request = require('request');
var async = require('async');

var cwd = process.cwd();

Expand All @@ -25,6 +27,7 @@ function getPath(dir) {
var sampleTests = [
{
dir: 'express',
projectId: 'express-demo',
cmd: 'node',
arg1: './bin/www',
msg: 'Hello World! Express.js on Google App Engine.'
Expand Down Expand Up @@ -93,6 +96,27 @@ if (process.env.TRAVIS_NODE_VERSION !== 'stable') {
});
}

function end(timeoutId, intervalId, proc) {
clearTimeout(timeoutId);
clearInterval(intervalId);
proc.kill('SIGKILL');
}

function testRequest(url, sample, cb) {
request(url, function (err, res, body) {
if (err) {
cb(err, false);
} else {
if (body && body.indexOf(sample.msg) !== -1 &&
(res.statusCode === 200 || res.statusCode === sample.code)) {
cb(null, true);
} else {
cb(null, false);
}
}
});
}

describe('appengine/', function () {
sampleTests.forEach(function (sample) {
it(sample.dir + ': dependencies should install', function (done) {
Expand Down Expand Up @@ -166,24 +190,68 @@ describe('appengine/', function () {
}
});

timeoutId = setTimeout(end, 5000);
intervalId = setInterval(testRequest, 1000);

function end() {
clearTimeout(timeoutId);
clearInterval(intervalId);
proc.kill('SIGKILL');
}

function testRequest() {
request('http://localhost:8080', function (err, res, body) {
if (body && body.indexOf(sample.msg) !== -1 &&
(res.statusCode === 200 || res.statusCode === sample.code)) {
success = true;
end();
timeoutId = setTimeout(function () {
end(timeoutId, intervalId, proc);
}, 5000);
intervalId = setInterval(function () {
testRequest('http://localhost:8080', sample, function (err, _success) {
if (err) {
console.log(err);
} else {
success = _success;
}
end(timeoutId, intervalId, proc);
});
}
}, 1000);
});
});

if (!process.env.TRAVIS) {
return;
}

it('should deploy all samples', function (done) {
this.timeout(10 * 60 * 1000); // 10 minutes
async.parallel(sampleTests.map(function (sample) {
if (sample.projectId) {
return function (cb) {
var calledDone = false;
var timeoutId;
var intervalId;
var proc = spawn('npm', ['run', 'deploy'], {
cwd: getPath(sample.dir)
});

proc.stderr.on('data', function (data) {
console.log(sample.projectId + ' stderr: ' + data);
});
proc.stdout.on('data', function (data) {
console.log(sample.projectId + ' stdout: ' + data);
});
proc.on('error', function (err) {
if (!calledDone) {
calledDone = true;
done(err);
}
});
proc.on('exit', function (code, signal) {
var url = 'http://' + sample.projectId + '.appspot.com';
return testRequest(url, sample, function (err, result) {
if (err) {
console.log(err);
}
if (!calledDone) {
calledDone = true;
if (!err && !result) {
err = new Error(sample.dir + ': failed verification!');
}
done(err, result);
}
});
});
};
}
return function (cb) { cb(); };
}), done);
});
});
7 changes: 7 additions & 0 deletions test/encrypted/express-demo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"private_key_id": "86afabe11b39d5451f9e324a18295fc1dcdc0b67",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDdkLGvD5y49ESR\nTnPLSGOlV3Cy304Rz81z3JTFqGKsN0POupF/mK+nHxEH9UoKAkuChdUR750qH21P\njvBBEcDI9hUqh9oisYXbOFZpelune+6QQ9v7BJZgeJ5hcVCpUASA4d6V087OgP1o\nLlR4IbHOO9GP7ra7tudQ2xDuDgBz9LgGKern1y+1WBOop6zL0f0NCOlutFirZOa9\n1RRRM4C7cQMHW6bbFb5PtvmEhfeLXjMeXal5lxS2wrucNcJHpi/jVbHGC3+57uFr\nPpi06tjJu/Tr1RPHt6Hd4pwCoetjXaVQTFcbEoPL3dYzj6E32WpEqRCKa6ZMTegD\nSaI0Iq6PAgMBAAECggEAJmtEpDpszpVsnlWgNoui27TB0gJuoyAJXCHPmkaMdZhP\npbUsLZfoPW5hoaOi5wFm3oceXzHRatBwP+9lMaNGbpJdMTbFWGa38z9dnISfB/ex\nckqSBoDRIoFH1VW0yucZINAJrKlBnwU266287+fH0R8GQ5L9FKeujJKv6Nd8tJ5U\nAlCLAv9Fw3EbQpbi8poQdL31dycwuqinzmY9suwih/zsv2U9PZTC2fNJOstiweDe\nd5Zvlabbw0H8ER2gVCnKppFcC6sMde7bCya3hmvihaBfLJJKORL885GNK8dW+nsv\nyV1Rh1a4Q5BUASEJqOHRaFWIhIjjyXblUkNfMgFSoQKBgQDuvx++7+CHbw/ySTd0\nuHcen+I/36Pmq2euH24qvuBl/2uxohUJQfI2aUuTtj0VAFOVPSnHU/YIXJd4gR6s\nt8lpDViQjcesDMsumlPaDrALXfnSPDiOtgSezEwPZBOwPFtnJyGBwgOmomvjriec\nJRBKsyUkQydU+W6l4UhlI1bfUwKBgQDtk7XMu88sIhVWi0XsWbUW3I/FG3CBGLzq\n90soFMLlqEyT45BmkW82eHAxIpzr+eJUhUViGZbslg1ccl4l1NaV/RiN3kQvNH+t\ni2c3GX4XuhaMuSFHFqDDqhYgjG6hea4es0eaZtbTMs2ZGZzCzMhZ0g6r++dobcEZ\nYJ10c6JYVQKBgAa11HyXXWYxFu+mYyqirKZts/w7mu22z5kzRPNqnf//59T8Sz8R\nXW9uEjO6oYjfk3nUWEJD99xQTemTJ3uPRtfvChg2A/CwA13x9H1igEwxff4Mt0I7\nl3GnKFQeafdAGwmRLf3pqBSc6A9kK7TVzdlro5WbVZWr1RJQfKprDdwFAoGAGkoC\nEAmoPyX2XoFC14iFtWXqstD6fg6SuR1sP58sgeVBtAu2auMk/04MfCNsYeBg3yFw\nMA7M2JkyGUy+hkkrBaXgFbLGsMKKblXCsiIsBcwduqyxtgAXAg/MKwXfKBci4VrN\nTZSbqPsyLQLcieHHOck4vmc9kBy1BW3ffoddK5ECgYEAx8zQuR9nx/nwFayxmCC3\ntqQQo5bphwh5BVzOM39QwcLRLqY/j7WNcPcwItBf1E3OZr16hRmklMdWFn2WSqqq\nG58j6gkIzaflsYmT+i/R0uWi8EZ69NUz5lvwbPBsuy+rLXSw0qkB5JqQag9Zjd6O\nukcH/qn8yIcIZOB3yGrcryI\u003d\n-----END PRIVATE KEY-----\n",
"client_email": "331060524961-5tu4fsd2sej6cdc6iv6kuvv5p0chri0i@developer.gserviceaccount.com",
"client_id": "331060524961-5tu4fsd2sej6cdc6iv6kuvv5p0chri0i.apps.googleusercontent.com",
"type": "service_account"
}
Binary file added test/encrypted/express-demo.json.enc
Binary file not shown.

0 comments on commit e8abf99

Please sign in to comment.