From bf1dbfe84b0037d2a46fb2232cb8e15b3812a8e4 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Fri, 1 Apr 2016 21:40:48 -0700 Subject: [PATCH] Test ams3 updates --- parallel_test.sh | 2 +- test/cloudron-update-ams3-test.js | 130 ++++++++++++++++++ ...e-test.js => cloudron-update-sfo1-test.js} | 0 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 test/cloudron-update-ams3-test.js rename test/{cloudron-update-test.js => cloudron-update-sfo1-test.js} (100%) diff --git a/parallel_test.sh b/parallel_test.sh index 8e1ef21..c659f02 100755 --- a/parallel_test.sh +++ b/parallel_test.sh @@ -18,7 +18,7 @@ if ! ./node_modules/.bin/mocha --bail test/before.js > "logs/before.log" 2>&1; t fi # run tests -readonly tests=(app-flow-test cloudron-user-test new-user-test cloudron-backup-test custom-domain-test cloudron-update-test) +readonly tests=(app-flow-test cloudron-user-test new-user-test cloudron-backup-test custom-domain-test cloudron-update-sfo1-test cloudron-update-ams3-test) for t in "${tests[@]}"; do ./node_modules/.bin/mocha --bail "test/${t}.js" > "logs/${t}.log" 2>&1 & test_pids+=("$!") diff --git a/test/cloudron-update-ams3-test.js b/test/cloudron-update-ams3-test.js new file mode 100644 index 0000000..44ce053 --- /dev/null +++ b/test/cloudron-update-ams3-test.js @@ -0,0 +1,130 @@ +#!/usr/bin/env node + +/* + * This tests a flow for the cloudron owner updating a cloudron. + * It checks if an existing installed app retains it's data after + * an update. It then check if the cloudron can be updated to + * the next (unreleased) version. + */ + +'use strict'; + +var AppStore = require('../appstore.js'), + assert = require('assert'), + Cloudron = require('../cloudron.js'), + common = require('../common.js'), + request = require('superagent-sync'), + semver = require('semver'), + sleep = require('sleep').sleep; + +require('colors'); + +process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; + +var BOX_VERSION = process.env.BOX_VERSION; + +describe('Cloudron update testing', function () { + this.timeout(0); + + var appStore = new AppStore('https://api.staging.cloudron.io'); + + var owner = common.getOwner(); + var admin = common.getAdmin(); + var res, fromVersion, toVersion, cloudron, appId, box, nextVersion; + + it('can query versions', function () { + res = request.get('https://s3.amazonaws.com/staging-cloudron-releases/versions.json').end(); + common.verifyResponse2xx(res); + var boxVersions = Object.keys(common.stripUnreachable(res.body)).sort(semver.rcompare); + fromVersion = boxVersions[2]; // we released a new version in before.js + toVersion = boxVersions[1]; + assert.strictEqual(toVersion, BOX_VERSION); + nextVersion = boxVersions[0]; + + console.log('Will test update from %s to %s and then %s', fromVersion.yellow, toVersion.yellow, nextVersion.yellow); + }); + + it('can login to the store', function () { + var accessToken = appStore.getAccessToken(owner); + appStore.setCredentials(owner.password, accessToken); + + var adminAccessToken = appStore.getAccessToken(admin); + appStore.setAdminCredentials(admin.password, adminAccessToken); + }); + + it('can create a cloudron', function () { + box = appStore.createCloudron({ + domain: common.cloudronDomain(__filename), + region: 'ams3', + size: '1gb', + version: fromVersion + }); + box = appStore.waitForCloudron(box.id); + cloudron = new Cloudron(box); + }); + + it('can activate the box', function () { + cloudron.activate(owner); + }); + + it('can login to the box', function () { + var token = cloudron.getOauthToken(owner); + cloudron.setCredentials(owner.password, token); + }); + + var location = 'test' + (Math.random() * 10000).toFixed(); + it('can install app', function () { + var manifest = appStore.getManifest(common.TESTAPP_ID, common.PREV_TESTAPP_VERSION); + appId = cloudron.installApp(location, manifest, fromVersion); + }); + + it('can populate the addons', function () { + var res = request.post('https://' + location + '-' + box.domain + '/populate_addons').end(); + assert.strictEqual(res.statusCode, 200); + assert.strictEqual(res.body.mysql, 'OK'); + assert.strictEqual(res.body.postgresql, 'OK'); + assert.strictEqual(res.body.mongodb, 'OK'); + assert.strictEqual(res.body.localstorage, 'OK'); + assert.strictEqual(res.body.redis, 'OK'); + }); + + it('can check the addons', function () { + cloudron.checkAddons(location, owner); + }); + + it('can update the box', function () { + cloudron.update(toVersion); + }); + + it('runs the app', function () { + cloudron.waitForApp(appId); + }); + + it('can check the addons', function () { + cloudron.checkAddons(location, owner); + }); + + it('can update to new version', function () { + console.log('Wait for cloudron to get the update'); + sleep(60 * 2); + cloudron.update(nextVersion); + }); + + it('runs the app', function () { + cloudron.waitForApp(appId); + }); + + it('can check the addons', function () { + cloudron.checkAddons(location, owner); + }); + + it('can uninstall app', function () { + cloudron.uninstallApp(appId); + }); + + it('can delete the cloudron', function () { + appStore.deleteCloudron(box); + }); + +}); + diff --git a/test/cloudron-update-test.js b/test/cloudron-update-sfo1-test.js similarity index 100% rename from test/cloudron-update-test.js rename to test/cloudron-update-sfo1-test.js