import ftplib import os from io import StringIO from unittest import skip from django.conf import settings as djsettings from orchestra.contrib.orchestration.models import Server, Route from orchestra.contrib.systemusers.backends import UNIXUserController from orchestra.utils.tests import BaseLiveServerTestCase, random_ascii, snapshot_on_error, save_response_on_error from ... import backends class WebAppMixin(object): MASTER_SERVER = os.environ.get('ORCHESTRA_MASTER_SERVER', 'localhost') DEPENDENCIES = ( 'orchestra.contrib.orchestration', 'orchestra.contrib.systemusers', 'orchestra.contrib.webapps', ) def setUp(self): super(WebAppMixin, self).setUp() self.add_route() djsettings.DEBUG = True def add_route(self): server, __ = Server.objects.get_or_create(name=self.MASTER_SERVER) backend = UNIXUserController.get_name() Route.objects.get_or_create(backend=backend, match=True, host=server) backend = self.backend.get_name() match = 'webapp.type == "%s"' % self.type_value Route.objects.create(backend=backend, match=match, host=server) def upload_webapp(self, name): try: ftp = ftplib.FTP(self.MASTER_SERVER) ftp.login(user=self.account.username, passwd=self.account_password) ftp.cwd('webapps/%s' % name) index = StringIO() index.write(self.page[1]) index.seek(0) ftp.storbinary('STOR %s' % self.page[0], index) index.close() finally: ftp.close() @skip("Skip because not exists get_auth_token in orm.api.Api") def test_add(self): name = '%s_%s_webapp' % (random_ascii(10), self.type_value) self.add_webapp(name) self.addCleanup(self.delete_webapp, name) self.upload_webapp(name) class StaticWebAppMixin(object): backend = backends.static.StaticController type_value = 'static' token = random_ascii(100) page = ( 'index.html', 'Hello World! %s \n' % token, 'Hello World! %s \n' % token, ) class PHPFcidWebAppMixin(StaticWebAppMixin): # TODO we don't have phpfcgid # backend = backends.phpfcgid.PHPFcgidBackend type_value = 'php5.2' token = random_ascii(100) page = ( 'index.php', '\n' % token, 'Hello World! %s' % token, ) class PHPFPMWebAppMixin(PHPFcidWebAppMixin): # TODO we don't have phpfpm # backend = backends.phpfpm.PHPFPMBackend type_value = 'php5.5' class RESTWebAppMixin(object): def setUp(self): super(RESTWebAppMixin, self).setUp() # TODO @cayo not exists get_auth_token in orm.api.Api # self.rest_login() # create main user # self.save_systemuser() @save_response_on_error def save_systemuser(self): systemuser = self.rest.systemusers.retrieve().get() systemuser.update(is_active=True) @save_response_on_error def add_webapp(self, name, options=[]): self.rest.webapps.create(name=name, type=self.type_value, options=options) @save_response_on_error def delete_webapp(self, name): self.rest.webapps.retrieve(name=name).delete() class AdminWebAppMixin(WebAppMixin): def setUp(self): super(AdminWebAppMixin, self).setUp() self.admin_login() # create main user self.save_systemuser() @snapshot_on_error def save_systemuser(self): url = '' @snapshot_on_error def add(self, name, password, admin_email): pass class StaticRESTWebAppTest(StaticWebAppMixin, RESTWebAppMixin, WebAppMixin, BaseLiveServerTestCase): pass class PHPFcidRESTWebAppTest(PHPFcidWebAppMixin, RESTWebAppMixin, WebAppMixin, BaseLiveServerTestCase): pass class PHPFPMRESTWebAppTest(PHPFPMWebAppMixin, RESTWebAppMixin, WebAppMixin, BaseLiveServerTestCase): pass #class AdminWebAppTest(AdminWebAppMixin, BaseLiveServerTestCase): # pass