Compare commits

...

10 Commits

Author SHA1 Message Date
Girish Ramakrishnan
a28bca9bd6 Version 0.6.0-2 2020-04-09 23:56:14 -07:00
Girish Ramakrishnan
27e270ada5 Update screenshots 2020-04-09 23:56:02 -07:00
Girish Ramakrishnan
606cd9d4cc don't use logo in screenshot 2020-04-09 23:51:14 -07:00
Girish Ramakrishnan
62c69c156b Version 0.6.0-1 2020-04-09 23:36:17 -07:00
Girish Ramakrishnan
f2ac369762 multiple tags 2020-04-09 23:35:54 -07:00
Girish Ramakrishnan
ed5ccef86c Version 0.6.0 2020-04-09 23:31:53 -07:00
Girish Ramakrishnan
d67738a588 Fix title 2020-04-09 23:31:34 -07:00
Girish Ramakrishnan
9deeef98ab rename dir 2020-04-09 19:24:46 -07:00
Girish Ramakrishnan
2ee1d46abc Finish tests 2020-04-09 19:18:16 -07:00
Girish Ramakrishnan
2dc1259813 add test template 2020-04-09 14:00:07 -07:00
7 changed files with 1718 additions and 6 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
node_modules/

View File

@@ -101,3 +101,6 @@
[0.5.0] [0.5.0]
* New reworked app * New reworked app
[0.6.0]
* Fix title

View File

@@ -1,11 +1,11 @@
{ {
"id": "org.matrix.synapse", "id": "org.matrix.synapse",
"title": "An Open network for secure, decentralized communication", "title": "Matrix Synapse",
"author": "Matrix synapse authors", "author": "Matrix synapse authors",
"description": "file://DESCRIPTION.md", "description": "file://DESCRIPTION.md",
"changelog": "file://CHANGELOG", "changelog": "file://CHANGELOG",
"tagline": "Matrix homeserver", "tagline": "Secure & decentralized communication",
"version": "0.5.0", "version": "0.6.0-2",
"healthCheckPath": "/", "healthCheckPath": "/",
"httpPort": 8008, "httpPort": 8008,
"memoryLimit": 536870912, "memoryLimit": 536870912,
@@ -24,9 +24,9 @@
"im", "collaboration", "voip", "videochat", "chat" "im", "collaboration", "voip", "videochat", "chat"
], ],
"mediaLinks": [ "mediaLinks": [
"https://cloudron-app-screenshots.s3.amazonaws.com/org.matrix.synapse/924b87f40eacc15e444cd45cc93d2ead0aa440c2/1.png", "https://cloudron-app-screenshots.s3.amazonaws.com/org.matrix.synapse/606cd9d4ccc3bee11a49f91444a2dad8947cbc7c/1.png",
"https://cloudron-app-screenshots.s3.amazonaws.com/org.matrix.synapse/924b87f40eacc15e444cd45cc93d2ead0aa440c2/2.png", "https://cloudron-app-screenshots.s3.amazonaws.com/org.matrix.synapse/606cd9d4ccc3bee11a49f91444a2dad8947cbc7c/2.png",
"https://cloudron-app-screenshots.s3.amazonaws.com/org.matrix.synapse/924b87f40eacc15e444cd45cc93d2ead0aa440c2/3.png" "https://cloudron-app-screenshots.s3.amazonaws.com/org.matrix.synapse/606cd9d4ccc3bee11a49f91444a2dad8947cbc7c/3.png"
], ],
"changelog": "file://CHANGELOG", "changelog": "file://CHANGELOG",
"postInstallMessage": "file://POSTINSTALL.md", "postInstallMessage": "file://POSTINSTALL.md",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 193 KiB

1501
test/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

22
test/package.json Normal file
View File

@@ -0,0 +1,22 @@
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"chromedriver": "^80.0.2",
"ejs": "^3.0.2",
"expect.js": "^0.3.1",
"mkdirp": "^1.0.4",
"mocha": "^7.1.1",
"rimraf": "^3.0.2",
"selenium-server-standalone-jar": "^3.141.59",
"selenium-webdriver": "^3.6.0",
"superagent": "^5.2.2"
}
}

184
test/test.js Normal file
View File

@@ -0,0 +1,184 @@
#!/usr/bin/env node
/* jslint node:true */
/* global it:false */
/* global xit:false */
/* global describe:false */
/* global before:false */
/* global after:false */
'use strict';
require('chromedriver');
var execSync = require('child_process').execSync,
expect = require('expect.js'),
path = require('path'),
superagent = require('superagent'),
webdriver = require('selenium-webdriver');
var by = require('selenium-webdriver').By,
until = require('selenium-webdriver').until,
Key = require('selenium-webdriver').Key;
describe('Application life cycle test', function () {
this.timeout(0);
var server, browser = new webdriver.Builder().forBrowser('chrome').build();
var LOCATION = 'test';
var app;
var username = process.env.USERNAME;
var password = process.env.PASSWORD;
var TIMEOUT = process.env.TIMEOUT | 30000;
var token, roomId;
before(function (done) {
if (!process.env.USERNAME) return done(new Error('USERNAME env var not set'));
if (!process.env.PASSWORD) return done(new Error('PASSWORD env var not set'));
var seleniumJar= require('selenium-server-standalone-jar');
var SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;
server = new SeleniumServer(seleniumJar.path, { port: 4444 });
server.start();
done();
});
after(function (done) {
browser.quit();
server.stop();
done();
});
function checkLandingPage(done) {
browser.get('https://' + app.fqdn).then(function () {
return browser.wait(until.elementLocated(by.xpath('//h1[contains(text(),"Synapse is running")]')), TIMEOUT);
}).then(function () {
done();
});
}
// https://matrix.org/docs/spec/client_server/latest
function checkLogin(done) {
superagent.post('https://' + app.fqdn + '/_matrix/client/r0/login').send({
type: 'm.login.password',
user: username,
password: password
}).end(function (error, result) {
if (error) return done(error);
if (result.statusCode !== 200) return done(new Error('Login failed with status ' + result.statusCode));
token = result.body.access_token;
if (!token) return done(new Error('No token'));
done();
});
}
function createRoom(done) {
superagent.post('https://' + app.fqdn + '/_matrix/client/r0/createRoom?access_token=' + token).send({
room_alias_name: 'discuss'
}).end(function (error, result) {
if (error) return done(error);
if (result.statusCode !== 200) return done(new Error('Room creation failed with status ' + result.statusCode));
roomId = result.body.room_id;
if (!roomId) return done(new Error('No room id'));
done();
});
}
function checkRoom(done) {
superagent.get('https://' + app.fqdn + '/_matrix/client/r0/joined_rooms?access_token=' + token).end(function (error, result) {
if (error) return done(error);
if (result.statusCode !== 200) return done(new Error('Room listing failed with status ' + result.statusCode));
if (!result.body.joined_rooms.includes(roomId)) return done(new Error('No room in list: ' + JSON.stringify(result.body)));
done();
});
}
xit('build app', function () {
execSync('cloudron build', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('install app', function () {
execSync('cloudron install --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('can get app information', function () {
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
});
it('check landing page', checkLandingPage);
it('can login', checkLogin);
it('create room', createRoom);
it('check room', checkRoom);
it('can restart app', function (done) {
execSync('cloudron restart');
done();
});
it('check landing page', checkLandingPage);
it('check room', checkRoom);
it('backup app', function () {
execSync('cloudron backup create --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('check landing page', checkLandingPage);
it('check room', checkRoom);
it('restore app', function () {
execSync('cloudron restore --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('check landing page', checkLandingPage);
it('check room', checkRoom);
it('move to different location', function () {
browser.manage().deleteAllCookies();
execSync('cloudron configure --location ' + LOCATION + '2', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION + '2'; })[0];
expect(app).to.be.an('object');
});
it('check landing page', checkLandingPage);
it('check room', checkRoom);
it('uninstall app', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
// test update
it('can install app', function () {
execSync('cloudron install --appstore-id org.matrix.synapse --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
var inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location === LOCATION; })[0];
expect(app).to.be.an('object');
});
it('check landing page', checkLandingPage);
it('can login', checkLogin);
it('create room', createRoom);
it('check room', checkRoom);
it('can update', function () {
execSync('cloudron update --app ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
it('check landing page', checkLandingPage);
it('check room', checkRoom);
it('uninstall app', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
});
});