ci: test basic application response of the docker build

Note by muxator:
This commit introduced a copied & modified version of the testing files
loadSettings.js and pad.js.

It's Christmas night, and we want to shipt this feature, so I merged it anyway,
adding a note in both the original and copied files so that hopefully someone
in the distant future is going to merge them back again.
This commit is contained in:
Pierre Prinetti 2019-12-03 23:14:00 +01:00 committed by muxator
parent 69fd393708
commit 92f07a544b
6 changed files with 91 additions and 4 deletions

View File

@ -21,8 +21,12 @@ jobs:
script:
- "tests/frontend/travis/runner.sh"
- name: "Test the Dockerfile"
install:
- "cd src && npm install && cd -"
script:
- "docker build ."
- "docker build -t etherpad:test ."
- "docker run -d -p 9001:9001 etherpad:test && sleep 3"
- "cd src && npm run test-container"
notifications:
irc:

View File

@ -82,7 +82,8 @@
"url": "https://github.com/ether/etherpad-lite.git"
},
"scripts": {
"test": "nyc mocha --timeout 5000 ../tests/backend/specs/api"
"test": "nyc mocha --timeout 5000 ../tests/backend/specs/api",
"test-container": "nyc mocha --timeout 5000 ../tests/container/specs/api"
},
"version": "1.8.0",
"license": "Apache-2.0"

View File

@ -1,3 +1,10 @@
/*
* ACHTUNG: there is a copied & modified version of this file in
* <basedir>/tests/container/loadSettings.js
*
* TODO: unify those two files, and merge in a single one.
*/
var jsonminify = require(__dirname+"/../../src/node_modules/jsonminify");
const fs = require('fs');

View File

@ -1,3 +1,10 @@
/*
* ACHTUNG: there is a copied & modified version of this file in
* <basedir>/tests/container/spacs/api/pad.js
*
* TODO: unify those two files, and merge in a single one.
*/
const assert = require('assert');
const supertest = require(__dirname+'/../../../../src/node_modules/supertest');
const fs = require('fs');
@ -204,7 +211,7 @@ describe('getText', function(){
api.get(endPoint('getText')+"&padID="+testPadId)
.expect(function(res){
if(res.body.data.text !== "testText\n") throw new Error("Pad Creation with text")
})
})
.expect('Content-Type', /json/)
.expect(200, done)
});
@ -573,7 +580,7 @@ describe('createPad', function(){
it('errors if pad can be created', function(done) {
var badUrlChars = ["/", "%23", "%3F", "%26"];
async.map(
badUrlChars,
badUrlChars,
function (badUrlChar, cb) {
api.get(endPoint('createPad')+"&padID="+badUrlChar)
.expect(function(res){

View File

@ -0,0 +1,30 @@
/*
* ACHTUNG: this file was copied & modified from the analogous
* <basedir>/tests/backend/loadSettings.js
*
* TODO: unify those two files, and merge in a single one.
*/
var jsonminify = require(__dirname+"/../../src/node_modules/jsonminify");
const fs = require('fs');
function loadSettings(){
var settingsStr = fs.readFileSync(__dirname+"/../../settings.json.docker").toString();
// try to parse the settings
try {
if(settingsStr) {
settingsStr = jsonminify(settingsStr).replace(",]","]").replace(",}","}");
var settings = JSON.parse(settingsStr);
// custom settings for running in a container
settings.ip = 'localhost';
settings.port = '9001';
return settings;
}
}catch(e){
console.error("whoops something is bad with settings");
}
}
exports.loadSettings = loadSettings;

View File

@ -0,0 +1,38 @@
/*
* ACHTUNG: this file was copied & modified from the analogous
* <basedir>/tests/backend/specs/api/pad.js
*
* TODO: unify those two files, and merge in a single one.
*/
const supertest = require(__dirname+'/../../../../src/node_modules/supertest');
const settings = require(__dirname+'/../../loadSettings').loadSettings();
const api = supertest('http://'+settings.ip+":"+settings.port);
var apiVersion = 1;
describe('Connectivity', function(){
it('can connect', function(done) {
api.get('/api/')
.expect('Content-Type', /json/)
.expect(200, done)
});
})
describe('API Versioning', function(){
it('finds the version tag', function(done) {
api.get('/api/')
.expect(function(res){
if (!res.body.currentVersion) throw new Error("No version set in API");
return;
})
.expect(200, done)
});
})
describe('Permission', function(){
it('errors with invalid APIKey', function(done) {
api.get('/api/'+apiVersion+'/createPad?apikey=wrong_password&padID=test')
.expect(401, done)
});
})