Commit 8e05a091 authored by Thomas Gambier's avatar Thomas Gambier 🚴🏼

Fix errors in python3

See merge request nexedi/slapos.core!403
parents a6c5469b 35d7014b
Pipeline #22747 passed with stage
in 0 seconds
......@@ -227,7 +227,8 @@ def slapconfig(conf):
if os.path.dirname(directory) == directory:
break
# Do "chmod g+xro+xr"
os.chmod(directory, os.stat(directory).st_mode | stat.S_IXGRP | stat.S_IRGRP | stat.S_IXOTH | stat.S_IROTH)
if (os.stat(directory).st_mode & (stat.S_IXGRP | stat.S_IRGRP | stat.S_IXOTH | stat.S_IROTH) != stat.S_IXGRP | stat.S_IRGRP | stat.S_IXOTH | stat.S_IROTH):
os.chmod(directory, os.stat(directory).st_mode | stat.S_IXGRP | stat.S_IRGRP | stat.S_IXOTH | stat.S_IROTH)
directory = os.path.dirname(directory)
if not os.path.exists(slap_conf_dir):
......@@ -250,7 +251,6 @@ def slapconfig(conf):
with open(dst, 'w') as destination:
destination.write(''.join(src))
os.chmod(dst, 0o600)
os.chown(dst, 0, 0)
certificate_repository_path = os.path.join(slap_conf_dir, 'ssl', 'partition_pki')
if not os.path.exists(certificate_repository_path):
......@@ -282,7 +282,7 @@ def slapconfig(conf):
cfg = re.sub('\n\\s*%s\\s*=.*' % key, '\n%s = %s' % (key, value), cfg)
if not dry_run:
with open(config_path, 'w') as fout:
with open(config_path, 'wb') as fout:
fout.write(cfg.encode('utf8'))
conf.logger.info('SlapOS configuration written to %s', config_path)
......
......@@ -509,7 +509,7 @@ class Partition(object):
else:
self.logger.info('Changed %s content. Updating %r' % (name, path))
with os.fdopen(os.open(path, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o400), 'wb') as fout:
with os.fdopen(os.open(path, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o400), 'w') as fout:
fout.write(new_content)
os.chown(path, uid, gid)
......
......@@ -160,7 +160,7 @@ def upload_network_cached(software_root, software_url, cached_key,
os=distribution_tuple(),
)
f = open(path, 'r')
f = open(path, 'rb')
# convert '' into None in order to call nc nicely
if not signature_private_key_file:
signature_private_key_file = None
......
......@@ -25,28 +25,119 @@
#
##############################################################################
import httmock
import mock
import os
import random
import shutil
import string
import tempfile
import unittest
import slapos.cli.register
from argparse import Namespace
from six.moves.urllib import parse
import slapos.slap
from slapos.cli.register import RegisterCommand, RegisterConfig, fetch_configuration_template, do_register
from slapos.cli.entry import SlapOSApp
class TestRegister(unittest.TestCase):
""" Tests for slapos.cli.register
XXX There is a lack of tests for register, so include more.
XXX There is a lack of tests for register, so include more.
"""
def setUp(self):
self.slap = slapos.slap.slap()
self.app = SlapOSApp()
self.temp_dir = tempfile.mkdtemp()
self.computer_id = 'COMP-%s' % random.randrange(10000)
self.certificate = 'CN=%s/emailAddress=admin@vifib.org' % self.computer_id
self.key = 'key_test_%s' % ''.join(random.choice(string.ascii_lowercase) for i in range(64))
self.default_args=[
'test-computer',
'--token', 'token-test'
]
def tearDown(self):
if os.path.exists(self.temp_dir):
shutil.rmtree(self.temp_dir)
def request_handler(self, url, req):
"""
Define _callback.
Will register global sequence of message, sequence by partition
and error and error message by partition
"""
#self.sequence.append(url.path)
if req.method == 'GET':
qs = parse.parse_qs(url.query)
else:
qs = parse.parse_qs(req.body)
print("DEBUG THOMAS")
print(url)
print(req)
if url.path == '/Person_requestComputer':
return {
'status_code': 200,
'content': {'certificate': self.certificate, 'key': self.key}
}
def getConf(self, args):
cmd = RegisterCommand(self.app, Namespace())
cmd_parser = cmd.get_parser("slapos node register for test")
parsed_args = cmd_parser.parse_args(args)
conf = RegisterConfig(logger=self.app.log)
conf.setConfig(parsed_args)
return conf
def test_fetch_configuration(self):
""" Simple test to Fetch the configuration template
""" Simple test to Fetch the configuration template
"""
template = slapos.cli.register.fetch_configuration_template()
template = fetch_configuration_template()
self.assertNotEqual("", template)
for entry in ['computer_id',
'master_url',
'key_file',
'cert_file',
'certificate_repository_path',
'interface_name',
'ipv4_local_network',
'partition_amount',
'create_tap']:
'master_url',
'key_file',
'cert_file',
'certificate_repository_path',
'interface_name',
'ipv4_local_network',
'partition_amount',
'create_tap']:
self.assertTrue(entry in template, "%s is not in template (%s)" % (entry, template))
def test_default_token_rejected(self):
""" Make sure that the token for test if rejected by default
"""
conf = self.getConf(self.default_args)
with self.assertRaises(SystemExit) as cm:
do_register(conf)
self.assertEqual(cm.exception.code, 1)
def test_write_configuration(self):
""" Simple test to see if we can write the configuration file
"""
conf = self.getConf(self.default_args)
# we manually set the parameters below because we mock the function COMPConfig
# indeed, we don't want to put the config file in '/etc/opt/slapos'
conf.slapos_configuration = self.temp_dir
conf.computer_id = self.computer_id
conf.certificate = self.certificate
conf.key = self.key
with httmock.HTTMock(self.request_handler), \
mock.patch.object(RegisterConfig, 'COMPConfig') as COMPConfigMock, \
mock.patch('slapos.cli.register.save_former_config') as save_former_config_mock:
return_code = do_register(conf)
COMPConfigMock.assert_called_with(
slapos_configuration = '/etc/opt/slapos/',
computer_id = self.computer_id,
certificate = self.certificate,
key = self.key)
save_former_config_mock.assert_called()
self.assertEquals(0, return_code)
self.assertTrue(
os.path.exists('%s/slapos.cfg' % self.temp_dir))
config_content = open('%s/slapos.cfg' % self.temp_dir).read()
self.assertIn('computer_id = %s' % self.computer_id, config_content)
......@@ -181,6 +181,9 @@ class BasicMixin(object):
'supervisord')
self.usage_report_periodicity = 1
self.buildout = None
self.certificate_repository_path = os.path.join(self._tempdir, 'partition_pki');
if not os.path.isdir(self.certificate_repository_path):
os.mkdir(self.certificate_repository_path)
self.grid = slapgrid.Slapgrid(self.software_root,
self.instance_root,
self.master_url,
......@@ -189,7 +192,8 @@ class BasicMixin(object):
develop=develop,
logger=logging.getLogger(),
shared_part_list=self.shared_parts_root,
force_stop=force_stop)
force_stop=force_stop,
certificate_repository_path=self.certificate_repository_path)
self.grid._manager_list = self.manager_list
# monkey patch buildout bootstrap
......@@ -430,6 +434,11 @@ class ComputerForTest(object):
'status_code': 200,
'content': dumps(ip_address_list)
}
elif url.path == '/getComputerPartitionCertificate':
return {
'status_code': 200,
'content': dumps({'certificate': 'SLAPOS_cert', 'key': 'SLAPOS_key'})
}
if req.method == 'POST' and 'computer_partition_id' in qs:
instance = self.instance_list[int(qs['computer_partition_id'][0])]
instance.sequence.append(url.path)
......@@ -727,7 +736,10 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition'])
self.assertEqual(open(os.path.join(self.certificate_repository_path, '0.crt')).read(), 'SLAPOS_cert')
self.assertEqual(open(os.path.join(self.certificate_repository_path, '0.key')).read(), 'SLAPOS_key')
def test_one_partition_instance_cfg(self):
"""
......@@ -745,6 +757,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition'])
def test_one_free_partition(self):
......@@ -779,6 +792,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [partition.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(partition.state, 'started')
......@@ -798,6 +812,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [partition.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(partition.state, 'started')
......@@ -813,8 +828,12 @@ exit 1
'.slapos-retention-lock-delay', '.slapgrid-0-error.log'])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/startedComputerPartition', '/getHateoasUrl',
'/getFullComputerInformation', '/softwareInstanceError'])
'/getComputerPartitionCertificate',
'/startedComputerPartition',
'/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/softwareInstanceError'])
self.assertEqual(instance.state, 'started')
def test_one_partition_started_stopped(self):
......@@ -853,6 +872,7 @@ chmod 755 etc/run/wrapper
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(instance.state, 'started')
......@@ -865,7 +885,9 @@ chmod 755 etc/run/wrapper
'etc', 'software_release', 'worked', '.slapos-retention-lock-delay'])
self.assertLogContent(wrapper_log, 'Signal handler called with signal 15')
self.assertEqual(computer.sequence,
['/getHateoasUrl', '/getFullComputerInformation',
['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition'])
self.assertEqual(instance.state, 'stopped')
......@@ -911,6 +933,7 @@ chmod 755 etc/run/wrapper
[instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(instance.state, 'started')
......@@ -927,7 +950,9 @@ exit 1
'.slapos-retention-lock-delay', '.slapgrid-0-error.log'])
self.assertLogContent(wrapper_log, 'Signal handler called with signal 15')
self.assertEqual(computer.sequence,
['/getHateoasUrl', '/getFullComputerInformation',
['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/softwareInstanceError'])
self.assertEqual(instance.state, 'started')
......@@ -947,6 +972,7 @@ exit 1
[instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition'])
self.assertEqual('stopped', instance.state)
......@@ -963,7 +989,9 @@ exit 1
wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log')
self.assertLogContent(wrapper_log, 'Working')
self.assertEqual(computer.sequence,
['/getHateoasUrl', '/getFullComputerInformation',
['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual('started', instance.state)
......@@ -989,6 +1017,7 @@ exit 1
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition'])
self.assertEqual('stopped', instance.state)
......@@ -1442,9 +1471,12 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase):
self.assertEqual(computer.sequence,
['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition',
'/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition',
'/getHateoasUrl', '/getFullComputerInformation',
'/stoppedComputerPartition',
'/getHateoasUrl',
'/getFullComputerInformation'])
......@@ -1467,9 +1499,12 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase):
self.assertEqual(computer.sequence,
['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition',
'/getHateoasUrl', '/getFullComputerInformation',
'/stoppedComputerPartition'])
'/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition'])
def test_partition_periodicity_remove_timestamp(self):
"""
......@@ -1868,7 +1903,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(instance.state, 'started')
......@@ -1887,6 +1922,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition',
'/destroyedComputerPartition'])
self.assertEqual(instance.state, 'destroyed')
......@@ -1918,7 +1954,10 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
self.assertEqual(
computer.sequence,
['/getFullComputerInformation', '/stoppedComputerPartition', '/destroyedComputerPartition'])
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition',
'/destroyedComputerPartition'])
def test_slapgrid_not_destroy_bad_instance(self):
"""
......@@ -1939,7 +1978,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual('started', instance.state)
......@@ -2812,6 +2851,7 @@ exit 0
'etc', 'software_release', 'worked', '.slapos-retention-lock-delay'])
self.assertEqual(computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(partition.state, 'started')
manager_list = slapmanager.from_config({'manager_list': 'prerm'})
......@@ -3059,6 +3099,7 @@ class TestSlapgridWithPortRedirection(MasterMixin, unittest.TestCase):
self.assertEqual(self.computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(self.partition.state, 'started')
......@@ -3134,7 +3175,10 @@ class TestSlapgridWithPortRedirection(MasterMixin, unittest.TestCase):
self.assertEqual(self.computer.sequence,
['/getFullComputerInformation',
'/startedComputerPartition', '/startedComputerPartition'])
'/getComputerPartitionCertificate',
'/startedComputerPartition',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(self.partition.state, 'started')
# Check the socat command
......@@ -3721,6 +3765,7 @@ class TestSlapgridManagerLifecycle(MasterMixin, unittest.TestCase):
self.assertEqual(self.computer.sequence,
['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(partition.state, 'started')
......
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