Commit e1e605bd authored by Jérome Perrin's avatar Jérome Perrin

nextcloud/test: use slapos.testing

also drop test_nextcloud_promises as promises are now checked by
framework.

/reviewed-on nexedi/slapos!636
parent 5a6b64aa
...@@ -31,35 +31,43 @@ import json ...@@ -31,35 +31,43 @@ import json
import glob import glob
import re import re
import utils
from slapos.recipe.librecipe import generateHashFromFiles from slapos.recipe.librecipe import generateHashFromFiles
from slapos.testing.testcase import makeModuleSetUpAndTestCaseClass
# for development: debugging logs and install Ctrl+C handler
if os.environ.get('SLAPOS_TEST_DEBUG'):
import logging
logging.basicConfig(level=logging.DEBUG)
import unittest
unittest.installHandler()
def subprocess_status_output(*args, **kwargs): setUpModule, InstanceTestCase = makeModuleSetUpAndTestCaseClass(
prc = subprocess.Popen( os.path.abspath(
stdout=subprocess.PIPE, os.path.join(os.path.dirname(__file__), '..', 'software.cfg')))
stderr=subprocess.STDOUT,
*args,
**kwargs)
out, err = prc.communicate()
return prc.returncode, out
class InstanceTestCase(utils.SlapOSInstanceTestCase):
@classmethod
def getSoftwareURLList(cls):
return (os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'software.cfg')), )
def getNextcloudConfig(self, config_dict={}): class NextCloudTestCase(InstanceTestCase):
# calculated in setUp
partition_dir = None
nextcloud_path = None
def setUp(self):
# we want full diff when assertions fail
self.maxDiff = None self.maxDiff = None
# lookup the partition in which nextcloud was installed
partition_path_list = glob.glob(os.path.join(
self.slap.instance_directory, '*'))
for partition_path in partition_path_list:
path = os.path.join(partition_path, 'srv/www')
if os.path.exists(path):
self.nextcloud_path = path
self.instance_folder = partition_path
break
self.assertTrue(
self.nextcloud_path,
"Nextcloud path not found in %r" % (partition_path_list,))
def getNextcloudConfig(self, config_dict={}):
data_dict = dict( data_dict = dict(
datadirectory=self.partition_dir + "/srv/data", datadirectory=self.partition_dir + "/srv/data",
dbhost="%s:2099" % self.config['ipv4_address'], dbhost="%s:2099" % self._ipv4_address,
dbname="nextcloud", dbname="nextcloud",
dbpassword="insecure", dbpassword="insecure",
dbport="", dbport="",
...@@ -72,9 +80,9 @@ class InstanceTestCase(utils.SlapOSInstanceTestCase): ...@@ -72,9 +80,9 @@ class InstanceTestCase(utils.SlapOSInstanceTestCase):
mail_smtpport="587", mail_smtpport="587",
mail_smtppassword="", mail_smtppassword="",
mail_smtpname="", mail_smtpname="",
cli_url="https://[%s]:9988/" % self.config['ipv6_address'], cli_url="https://[%s]:9988/" % self._ipv6_address,
partition_dir=self.partition_dir, partition_dir=self.partition_dir,
trusted_domain_list=json.dumps(["[%s]:9988" % self.config['ipv6_address']]), trusted_domain_list=json.dumps(["[%s]:9988" % self._ipv6_address]),
trusted_proxy_list=[], trusted_proxy_list=[],
) )
data_dict.update(config_dict) data_dict.update(config_dict)
...@@ -165,7 +173,7 @@ class InstanceTestCase(utils.SlapOSInstanceTestCase): ...@@ -165,7 +173,7 @@ class InstanceTestCase(utils.SlapOSInstanceTestCase):
return json.loads(template % data_dict) return json.loads(template % data_dict)
class ServicesTestCase(InstanceTestCase): class TestServices(NextCloudTestCase):
def test_process_list(self): def test_process_list(self):
hash_list = [ hash_list = [
...@@ -185,7 +193,7 @@ class ServicesTestCase(InstanceTestCase): ...@@ -185,7 +193,7 @@ class ServicesTestCase(InstanceTestCase):
'redis-on-watch', 'redis-on-watch',
] ]
supervisor = self.getSupervisorRPCServer().supervisor with self.slap.instance_supervisor_rpc as supervisor:
process_name_list = [process['name'] process_name_list = [process['name']
for process in supervisor.getAllProcessInfo()] for process in supervisor.getAllProcessInfo()]
...@@ -199,24 +207,16 @@ class ServicesTestCase(InstanceTestCase): ...@@ -199,24 +207,16 @@ class ServicesTestCase(InstanceTestCase):
self.assertIn(expected_process_name, process_name_list) self.assertIn(expected_process_name, process_name_list)
def test_nextcloud_installation(self): def test_nextcloud_installation(self):
partition_path_list = glob.glob(os.path.join(self.instance_path, '*')) can_install_path = os.path.join(self.nextcloud_path, 'config/CAN_INSTALL')
nextcloud_path = None
for partition_path in partition_path_list:
path = os.path.join(partition_path, 'srv/www')
if os.path.exists(path):
nextcloud_path = path
instance_folder = partition_path
break
can_install_path = os.path.join(nextcloud_path, 'config/CAN_INSTALL')
self.assertTrue(os.path.exists(nextcloud_path)) self.assertTrue(os.path.exists(self.nextcloud_path))
self.assertFalse(os.path.exists(can_install_path)) self.assertFalse(os.path.exists(can_install_path))
self.assertTrue(os.path.exists(os.path.join(nextcloud_path, 'config/config.php'))) self.assertTrue(os.path.exists(os.path.join(self.nextcloud_path, 'config/config.php')))
php_bin = os.path.join(instance_folder, 'bin/php') php_bin = os.path.join(self.partition_dir, 'bin/php')
nextcloud_status = subprocess.check_output([ nextcloud_status = subprocess.check_output([
php_bin, php_bin,
os.path.join(nextcloud_path, 'occ'), os.path.join(self.nextcloud_path, 'occ'),
'status', 'status',
'--output', '--output',
'json']) 'json'])
...@@ -224,22 +224,13 @@ class ServicesTestCase(InstanceTestCase): ...@@ -224,22 +224,13 @@ class ServicesTestCase(InstanceTestCase):
self.assertTrue(json_status['installed'], True) self.assertTrue(json_status['installed'], True)
def test_nextcloud_config(self): def test_nextcloud_config(self):
partition_path_list = glob.glob(os.path.join(self.instance_path, '*')) config_file = os.path.join(self.nextcloud_path, 'config/config.php')
nextcloud_path = None php_script = os.path.join(self.partition_dir, 'test.php')
for partition_path in partition_path_list:
path = os.path.join(partition_path, 'srv/www')
if os.path.exists(path):
nextcloud_path = path
instance_folder = partition_path
break
config_file = os.path.join(nextcloud_path, 'config/config.php')
php_script = os.path.join(instance_folder, 'test.php')
with open(php_script, 'w') as f: with open(php_script, 'w') as f:
f.write("<?php include('%s'); echo json_encode($CONFIG); ?>" % config_file) f.write("<?php include('%s'); echo json_encode($CONFIG); ?>" % config_file)
self.partition_dir = instance_folder php_bin = os.path.join(self.partition_dir, 'bin/php')
php_bin = os.path.join(instance_folder, 'bin/php') occ = os.path.join(self.nextcloud_path, 'occ')
occ = os.path.join(nextcloud_path, 'occ')
config_result = subprocess.check_output([ config_result = subprocess.check_output([
php_bin, php_bin,
'-f', '-f',
...@@ -277,7 +268,7 @@ class ServicesTestCase(InstanceTestCase): ...@@ -277,7 +268,7 @@ class ServicesTestCase(InstanceTestCase):
"turn_servers" "turn_servers"
]) ])
self.assertEqual(turn_config.strip(), '[{"server":"","secret":"","protocols":"udp,tcp"}]') self.assertEqual(turn_config.strip(), '[{"server":"","secret":"","protocols":"udp,tcp"}]')
news_config_file = os.path.join(instance_folder, 'srv/data/news/config/config.ini') news_config_file = os.path.join(self.instance_folder, 'srv/data/news/config/config.ini')
with open(news_config_file) as f: with open(news_config_file) as f:
config = f.read() config = f.read()
regex = r"(useCronUpdates\s+=\s+false)" regex = r"(useCronUpdates\s+=\s+false)"
...@@ -285,64 +276,8 @@ class ServicesTestCase(InstanceTestCase): ...@@ -285,64 +276,8 @@ class ServicesTestCase(InstanceTestCase):
self.assertNotEqual(result, None) self.assertNotEqual(result, None)
def test_nextcloud_promises(self):
partition_path_list = glob.glob(os.path.join(self.instance_path, '*'))
nextcloud_path = None
for partition_path in partition_path_list:
path = os.path.join(partition_path, 'srv/www')
if os.path.exists(path):
nextcloud_path = path
instance_folder = partition_path
break
promise_path_list = glob.glob(os.path.join(instance_folder, 'etc/plugin/*.py'))
promise_name_list = [x for x in
os.listdir(os.path.join(instance_folder, 'etc/plugin'))
if not x.endswith('.pyc')]
partition_name = os.path.basename(instance_folder.rstrip('/'))
self.assertEqual(sorted(promise_name_list),
sorted([
"__init__.py",
"check-free-disk-space.py",
"monitor-http-frontend.py",
"apache-httpd-port-listening.py",
"buildout-%s-status.py" % partition_name,
"monitor-bootstrap-status.py",
"monitor-httpd-listening-on-tcp.py"
]))
ignored_plugin_list = [ class TestNextCloudParameters(NextCloudTestCase):
'__init__.py',
'monitor-http-frontend.py',
]
runpromise_bin = os.path.join(
self.software_path, 'bin', 'monitor.runpromise')
monitor_conf = os.path.join(instance_folder, 'etc', 'monitor.conf')
msg = []
status = 0
for plugin_path in promise_path_list:
plugin_name = os.path.basename(plugin_path)
if plugin_name in ignored_plugin_list:
continue
plugin_status, plugin_result = subprocess_status_output([
runpromise_bin,
'-c', monitor_conf,
'--run-only', plugin_name,
'--force',
'--check-anomaly'
])
status += plugin_status
if plugin_status == 1:
msg.append(plugin_result)
# sanity check
if 'Checking promise %s' % plugin_name not in plugin_result:
plugin_status = 1
msg.append(plugin_result)
msg = ''.join(msg).strip()
self.assertEqual(status, 0, msg)
class ParametersTestCase(InstanceTestCase):
@classmethod @classmethod
def getInstanceParameterDict(cls): def getInstanceParameterDict(cls):
return { return {
...@@ -365,22 +300,13 @@ class ParametersTestCase(InstanceTestCase): ...@@ -365,22 +300,13 @@ class ParametersTestCase(InstanceTestCase):
} }
def test_nextcloud_config_with_parameters(self): def test_nextcloud_config_with_parameters(self):
partition_path_list = glob.glob(os.path.join(self.instance_path, '*')) config_file = os.path.join(self.nextcloud_path, 'config/config.php')
nextcloud_path = None php_script = os.path.join(self.partition_dir, 'test.php')
for partition_path in partition_path_list:
path = os.path.join(partition_path, 'srv/www')
if os.path.exists(path):
nextcloud_path = path
instance_folder = partition_path
break
config_file = os.path.join(nextcloud_path, 'config/config.php')
php_script = os.path.join(instance_folder, 'test.php')
with open(php_script, 'w') as f: with open(php_script, 'w') as f:
f.write("<?php include('%s'); echo json_encode($CONFIG); ?>" % config_file) f.write("<?php include('%s'); echo json_encode($CONFIG); ?>" % config_file)
self.partition_dir = instance_folder php_bin = os.path.join(self.partition_dir, 'bin/php')
php_bin = os.path.join(instance_folder, 'bin/php') occ = os.path.join(self.nextcloud_path, 'occ')
occ = os.path.join(nextcloud_path, 'occ')
config_result = subprocess.check_output([ config_result = subprocess.check_output([
php_bin, php_bin,
'-f', '-f',
...@@ -404,7 +330,7 @@ class ParametersTestCase(InstanceTestCase): ...@@ -404,7 +330,7 @@ class ParametersTestCase(InstanceTestCase):
cli_url="nextcloud.example.com", cli_url="nextcloud.example.com",
partition_dir=self.partition_dir, partition_dir=self.partition_dir,
trusted_domain_list=json.dumps([ trusted_domain_list=json.dumps([
"[%s]:9988" % self.config['ipv6_address'], "[%s]:9988" % self._ipv6_address,
"nextcloud.example.com", "nextcloud.example.com",
"nextcloud.proxy.com" "nextcloud.proxy.com"
]), ]),
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment