2015-06-16 17:40:50 +00:00
/ *
* This tests an app flow on the cloudron . User installs
* an app , tries to configure and then uninstall it .
* /
2015-06-16 03:50:33 +00:00
'use strict' ;
var AppStore = require ( '../appstore.js' ) ,
assert = require ( 'assert' ) ,
Cloudron = require ( '../cloudron.js' ) ,
2015-06-17 02:13:17 +00:00
common = require ( '../common.js' ) ,
2016-05-05 22:14:46 +00:00
net = require ( 'net' ) ;
2015-06-16 03:50:33 +00:00
require ( 'colors' ) ;
process . env . NODE _TLS _REJECT _UNAUTHORIZED = '0' ;
2015-11-19 18:28:43 +00:00
var BOX _VERSION = process . env . BOX _VERSION ;
2015-06-16 03:50:33 +00:00
describe ( 'Application flow test' , function ( ) {
this . timeout ( 0 ) ;
var appStore = new AppStore ( 'https://api.staging.cloudron.io' ) ;
2015-07-23 21:05:52 +00:00
var owner = common . getOwner ( ) ;
2015-11-29 16:41:28 +00:00
var admin = common . getAdmin ( ) ;
2015-11-19 18:28:43 +00:00
var cloudron , appId , box ;
2015-06-16 03:50:33 +00:00
it ( 'can login to the store' , function ( ) {
var accessToken = appStore . getAccessToken ( owner ) ;
appStore . setCredentials ( owner . password , accessToken ) ;
2015-11-29 16:41:28 +00:00
var adminAccessToken = appStore . getAccessToken ( admin ) ;
2015-12-18 16:31:22 +00:00
appStore . setAdminCredentials ( admin . password , adminAccessToken ) ;
2015-06-16 03:50:33 +00:00
} ) ;
it ( 'can create a cloudron' , function ( ) {
box = appStore . createCloudron ( {
2015-06-20 18:47:59 +00:00
domain : common . cloudronDomain ( _ _filename ) ,
2015-06-16 03:50:33 +00:00
region : 'sfo1' ,
2016-01-19 10:28:27 +00:00
size : '1gb' ,
2015-11-19 18:28:43 +00:00
version : BOX _VERSION
2015-06-16 03:50:33 +00:00
} ) ;
2015-09-29 04:02:27 +00:00
box = appStore . waitForCloudron ( box . id ) ;
2015-06-16 03:50:33 +00:00
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 ) ;
} ) ;
2016-09-02 06:08:38 +00:00
it ( 'can enable email' , function ( ) {
cloudron . setEmailEnabled ( true ) ;
} ) ;
2015-06-16 03:50:33 +00:00
var location = 'test' + ( Math . random ( ) * 10000 ) . toFixed ( ) ;
it ( 'can install app' , function ( ) {
2015-06-17 02:13:17 +00:00
var manifest = appStore . getManifest ( common . TESTAPP _ID , common . TESTAPP _VERSION ) ;
2016-05-05 22:55:38 +00:00
appId = cloudron . installApp ( location , manifest , { ECHO _SERVER _PORT : 5151 } ) ;
2015-06-16 03:50:33 +00:00
} ) ;
2015-06-16 04:30:07 +00:00
it ( 'can populate the addons' , function ( ) {
2016-04-26 17:11:03 +00:00
cloudron . populateAddons ( cloudron . appFqdn ( location ) ) ;
2015-06-16 04:30:07 +00:00
} ) ;
it ( 'can check the addons' , function ( ) {
2016-04-26 17:11:03 +00:00
cloudron . checkAddons ( cloudron . appFqdn ( location ) , owner ) ;
2015-06-16 04:30:07 +00:00
} ) ;
2017-01-13 03:18:12 +00:00
it ( 'can check dnsbl' , function ( ) {
cloudron . checkDnsbl ( cloudron . appFqdn ( location ) ) ;
} ) ;
2016-10-03 21:13:03 +00:00
function checkExposedPort ( port , done ) {
2016-05-05 22:14:46 +00:00
var client = new net . Socket ( ) ;
var data = [ ] ;
2016-10-03 21:13:03 +00:00
client . connect ( port , cloudron . appFqdn ( location ) , function ( ) {
console . log ( 'connected to ' + port ) ;
2016-05-05 22:14:46 +00:00
} ) ;
client . on ( 'data' , function ( chunk ) { data . push ( chunk ) ; } ) ;
client . on ( 'close' , function ( ) {
var response = Buffer . concat ( data ) . toString ( 'utf8' ) ;
2016-10-03 21:13:03 +00:00
if ( response === 'ECHO_SERVER_PORT=' + port ) return done ( ) ;
2016-05-05 22:14:46 +00:00
console . log ( 'unexpected response:' , response ) ;
done ( new Error ( 'bad response' ) ) ;
} ) ;
client . on ( 'error' , done ) ;
2016-05-05 23:15:27 +00:00
}
it ( 'can access exposed port' , function ( done ) {
2016-10-03 21:13:03 +00:00
checkExposedPort ( 5151 , done ) ;
2016-05-05 22:14:46 +00:00
} ) ;
2016-04-06 01:33:11 +00:00
it ( 'displays app graphs' , function ( ) {
2016-04-06 01:43:30 +00:00
cloudron . checkAppGraphs ( appId ) ;
2016-04-06 01:33:11 +00:00
} ) ;
2015-06-16 03:50:33 +00:00
it ( 'can configure app' , function ( ) {
2015-06-16 16:59:22 +00:00
location = location + 'x' ;
2016-05-05 23:53:39 +00:00
cloudron . configureApp ( appId , location , null /* altDomain */ , { ECHO _SERVER _PORT : 5151 } ) ;
2015-06-16 03:50:33 +00:00
} ) ;
2015-06-16 04:30:07 +00:00
it ( 'can check the addons' , function ( ) {
2016-04-26 17:34:26 +00:00
cloudron . checkAddons ( cloudron . appFqdn ( location ) , owner ) ;
2015-06-16 04:30:07 +00:00
} ) ;
2017-01-13 03:18:12 +00:00
it ( 'can check dnsbl' , function ( ) {
cloudron . checkDnsbl ( cloudron . appFqdn ( location ) ) ;
} ) ;
2016-05-05 23:15:27 +00:00
it ( 'can access exposed port' , function ( done ) {
2016-10-03 21:13:03 +00:00
checkExposedPort ( 5151 , done ) ;
2016-05-05 23:15:27 +00:00
} ) ;
2015-08-31 04:48:33 +00:00
it ( 'can reboot the cloudron' , function ( ) {
cloudron . reboot ( ) ;
} ) ;
it ( 'can check the addons' , function ( ) {
2016-04-26 17:34:26 +00:00
cloudron . checkAddons ( cloudron . appFqdn ( location ) , owner ) ;
2015-08-31 04:48:33 +00:00
} ) ;
2017-01-13 03:50:02 +00:00
it ( 'can check dnsbl' , function ( ) {
cloudron . checkDnsbl ( cloudron . appFqdn ( location ) ) ;
} ) ;
2016-05-05 23:15:27 +00:00
it ( 'can access exposed port' , function ( done ) {
2016-10-03 21:13:03 +00:00
checkExposedPort ( 5151 , done ) ;
} ) ;
2016-10-03 21:30:47 +00:00
// clone requires a backup to work with
it ( 'can backup app' , function ( ) {
cloudron . backupApp ( appId ) ;
} ) ;
2016-10-03 21:13:03 +00:00
var cloneLocation ;
it ( 'can clone app' , function ( ) {
cloneLocation = location + 'clone' ;
cloudron . cloneApp ( appId , location + 'clone' , { ECHO _SERVER _PORT : 5252 } ) ;
} ) ;
it ( 'can check the addons' , function ( ) {
cloudron . checkAddons ( cloudron . appFqdn ( cloneLocation ) , owner ) ;
} ) ;
it ( 'can access exposed port' , function ( done ) {
checkExposedPort ( 5252 , done ) ;
2016-05-05 23:15:27 +00:00
} ) ;
2017-03-31 03:57:09 +00:00
// do this last because mysql blocks the app after conn fails (ER_HOST_IS_BLOCKED: Host is blocked because of many connection errors; unblock with mysqladmin flush-hosts)
it ( 'can check the app ratelimit' , function ( ) {
cloudron . checkAppRateLimit ( cloudron . appFqdn ( location ) ) ;
} ) ;
2015-06-16 03:50:33 +00:00
it ( 'can uninstall app' , function ( ) {
cloudron . uninstallApp ( appId ) ;
} ) ;
it ( 'can delete the cloudron' , function ( ) {
appStore . deleteCloudron ( box ) ;
} ) ;
} ) ;