add files for ci
This commit is contained in:
5
.gitlab-ci.yml
Normal file
5
.gitlab-ci.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
include:
|
||||||
|
- project: devops/pipeline-components
|
||||||
|
ref: main
|
||||||
|
file: cloudron-app.gitlab-ci.yml
|
||||||
|
|
||||||
43
test/test.js
43
test/test.js
@@ -1,11 +1,7 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
/* jshint esversion: 8 */
|
/* jshint esversion: 8 */
|
||||||
/* global it:false */
|
/* global it, xit, describe, before, after, afterEach */
|
||||||
/* global xit:false */
|
|
||||||
/* global describe:false */
|
|
||||||
/* global before:false */
|
|
||||||
/* global after:false */
|
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
@@ -13,11 +9,11 @@ require('chromedriver');
|
|||||||
|
|
||||||
const execSync = require('child_process').execSync,
|
const execSync = require('child_process').execSync,
|
||||||
expect = require('expect.js'),
|
expect = require('expect.js'),
|
||||||
|
fs = require('fs'),
|
||||||
path = require('path'),
|
path = require('path'),
|
||||||
{ Builder, By, Key, until } = require('selenium-webdriver'),
|
{ Builder, By, Key, until } = require('selenium-webdriver'),
|
||||||
{ Options } = require('selenium-webdriver/chrome');
|
{ Options } = require('selenium-webdriver/chrome');
|
||||||
|
|
||||||
|
|
||||||
if (!process.env.USERNAME || !process.env.PASSWORD) {
|
if (!process.env.USERNAME || !process.env.PASSWORD) {
|
||||||
console.log('USERNAME and PASSWORD env vars need to be set');
|
console.log('USERNAME and PASSWORD env vars need to be set');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
@@ -27,7 +23,7 @@ describe('Application life cycle test', function () {
|
|||||||
this.timeout(0);
|
this.timeout(0);
|
||||||
|
|
||||||
const ELEMENT_LOCATION = 'element-test';
|
const ELEMENT_LOCATION = 'element-test';
|
||||||
const LOCATION = 'test';
|
const LOCATION = process.env.LOCATION || 'test';
|
||||||
const TEST_TIMEOUT = parseInt(process.env.TIMEOUT, 10) || 10000;
|
const TEST_TIMEOUT = parseInt(process.env.TIMEOUT, 10) || 10000;
|
||||||
const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
|
const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
|
||||||
const USERNAME = process.env.USERNAME;
|
const USERNAME = process.env.USERNAME;
|
||||||
@@ -40,19 +36,26 @@ describe('Application life cycle test', function () {
|
|||||||
let athenticated_by_oidc = false;
|
let athenticated_by_oidc = false;
|
||||||
|
|
||||||
before(function () {
|
before(function () {
|
||||||
const options = new Options().windowSize({ width: 1280, height: 1024 });
|
const chromeOptions = new Options().windowSize({ width: 1280, height: 1024 });
|
||||||
if (process.env.HEADLESS) options.addArguments('headless');
|
if (process.env.CI) chromeOptions.addArguments('no-sandbox', 'disable-dev-shm-usage', 'headless');
|
||||||
|
browser = new Builder().forBrowser('chrome').setChromeOptions(chromeOptions).build();
|
||||||
browser = new Builder().forBrowser('chrome').setChromeOptions(options).build();
|
if (!fs.existsSync('./screenshots')) fs.mkdirSync('./screenshots');
|
||||||
});
|
});
|
||||||
|
|
||||||
after(function () {
|
after(function () {
|
||||||
browser.quit();
|
browser.quit();
|
||||||
});
|
});
|
||||||
|
|
||||||
function sleep(millis) {
|
afterEach(async function () {
|
||||||
return new Promise(resolve => setTimeout(resolve, millis));
|
if (!process.env.CI || !app) return;
|
||||||
}
|
|
||||||
|
const currentUrl = await browser.getCurrentUrl();
|
||||||
|
if (!currentUrl.includes(app.domain)) return;
|
||||||
|
expect(this.currentTest.title).to.be.a('string');
|
||||||
|
|
||||||
|
const screenshotData = await browser.takeScreenshot();
|
||||||
|
fs.writeFileSync(`./screenshots/${new Date().getTime()}-${this.currentTest.title.replaceAll(' ', '_')}.png`, screenshotData, 'base64');
|
||||||
|
});
|
||||||
|
|
||||||
async function waitForElement(elem) {
|
async function waitForElement(elem) {
|
||||||
await browser.wait(until.elementLocated(elem), TEST_TIMEOUT);
|
await browser.wait(until.elementLocated(elem), TEST_TIMEOUT);
|
||||||
@@ -80,7 +83,7 @@ describe('Application life cycle test', function () {
|
|||||||
execSync(`cloudron exec --app ${ELEMENT_LOCATION} -- bash -c "jq '.default_server_config[\\"m.homeserver\\"].base_url = \\"https://${app.fqdn}\\"' /app/data/config.json | sponge /app/data/config.json"`);
|
execSync(`cloudron exec --app ${ELEMENT_LOCATION} -- bash -c "jq '.default_server_config[\\"m.homeserver\\"].base_url = \\"https://${app.fqdn}\\"' /app/data/config.json | sponge /app/data/config.json"`);
|
||||||
execSync(`cloudron restart --app ${ELEMENT_LOCATION}`);
|
execSync(`cloudron restart --app ${ELEMENT_LOCATION}`);
|
||||||
// wait when all services are up and running
|
// wait when all services are up and running
|
||||||
await sleep(15000);
|
await browser.sleep(15000);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkLandingPage() {
|
async function checkLandingPage() {
|
||||||
@@ -130,10 +133,6 @@ describe('Application life cycle test', function () {
|
|||||||
await browser.findElement(By.xpath('//a[contains(., "Continue")]')).click();
|
await browser.findElement(By.xpath('//a[contains(., "Continue")]')).click();
|
||||||
await browser.sleep(2000);
|
await browser.sleep(2000);
|
||||||
|
|
||||||
//if (await browser.findElements(By.xpath('//div[@aria-label="Skip verification for now"]')).then(found => !!found.length)) {
|
|
||||||
// await skipVerification();
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (await browser.findElements(By.xpath('//div[text()="Proceed with reset"]')).then(found => !!found.length)) {
|
if (await browser.findElements(By.xpath('//div[text()="Proceed with reset"]')).then(found => !!found.length)) {
|
||||||
await browser.findElement(By.xpath('//div[text()="Proceed with reset"]')).click();
|
await browser.findElement(By.xpath('//div[text()="Proceed with reset"]')).click();
|
||||||
|
|
||||||
@@ -323,8 +322,7 @@ describe('Application life cycle test', function () {
|
|||||||
|
|
||||||
execSync(`cloudron configure --location ${LOCATION}2`, EXEC_ARGS);
|
execSync(`cloudron configure --location ${LOCATION}2`, EXEC_ARGS);
|
||||||
getAppInfo();
|
getAppInfo();
|
||||||
// wait when all services are up and running
|
await browser.sleep(15000);
|
||||||
await sleep(15000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('update element-app config', updateSynapseConfig);
|
it('update element-app config', updateSynapseConfig);
|
||||||
@@ -361,8 +359,7 @@ describe('Application life cycle test', function () {
|
|||||||
it('can update', async function () {
|
it('can update', async function () {
|
||||||
await browser.get('about:blank');
|
await browser.get('about:blank');
|
||||||
execSync(`cloudron update --app ${app.id}`, EXEC_ARGS);
|
execSync(`cloudron update --app ${app.id}`, EXEC_ARGS);
|
||||||
// wait when all services are up and running
|
await browser.sleep(15000);
|
||||||
await sleep(15000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('can get Element app info', getElementAppInfo);
|
it('can get Element app info', getElementAppInfo);
|
||||||
|
|||||||
Reference in New Issue
Block a user