Commit 3853b94e authored by Thomas Gambier's avatar Thomas Gambier 🚴🏼 Committed by Thomas Gambier

slapgrid: fix _updateCertificate in python3

Traceback (most recent call last):
  File "/opt/slapos/eggs/slapos.core-1.7.10-py3.7.egg/slapos/grid/slapgrid.py", line 1435, in processComputerPartitionList
    self.processComputerPartition(computer_partition)
  File "/opt/slapos/eggs/slapos.core-1.7.10-py3.7.egg/slapos/grid/slapgrid.py", line 1329, in processComputerPartition
    raise e
  File "/opt/slapos/eggs/slapos.core-1.7.10-py3.7.egg/slapos/grid/slapgrid.py", line 1254, in processComputerPartition
    local_partition._updateCertificate()
  File "/opt/slapos/eggs/slapos.core-1.7.10-py3.7.egg/slapos/grid/SlapObject.py", line 513, in _updateCertificate
    fout.write(new_content)
TypeError: a bytes-like object is required, not 'str'

Also add test for the failure.
parent 23854306
...@@ -509,7 +509,7 @@ class Partition(object): ...@@ -509,7 +509,7 @@ class Partition(object):
else: else:
self.logger.info('Changed %s content. Updating %r' % (name, path)) 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) fout.write(new_content)
os.chown(path, uid, gid) os.chown(path, uid, gid)
......
...@@ -181,6 +181,9 @@ class BasicMixin(object): ...@@ -181,6 +181,9 @@ class BasicMixin(object):
'supervisord') 'supervisord')
self.usage_report_periodicity = 1 self.usage_report_periodicity = 1
self.buildout = None 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.grid = slapgrid.Slapgrid(self.software_root,
self.instance_root, self.instance_root,
self.master_url, self.master_url,
...@@ -189,7 +192,8 @@ class BasicMixin(object): ...@@ -189,7 +192,8 @@ class BasicMixin(object):
develop=develop, develop=develop,
logger=logging.getLogger(), logger=logging.getLogger(),
shared_part_list=self.shared_parts_root, 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 self.grid._manager_list = self.manager_list
# monkey patch buildout bootstrap # monkey patch buildout bootstrap
...@@ -430,6 +434,11 @@ class ComputerForTest(object): ...@@ -430,6 +434,11 @@ class ComputerForTest(object):
'status_code': 200, 'status_code': 200,
'content': dumps(ip_address_list) '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: if req.method == 'POST' and 'computer_partition_id' in qs:
instance = self.instance_list[int(qs['computer_partition_id'][0])] instance = self.instance_list[int(qs['computer_partition_id'][0])]
instance.sequence.append(url.path) instance.sequence.append(url.path)
...@@ -727,7 +736,10 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase): ...@@ -727,7 +736,10 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition']) '/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): def test_one_partition_instance_cfg(self):
""" """
...@@ -745,6 +757,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase): ...@@ -745,6 +757,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition']) '/stoppedComputerPartition'])
def test_one_free_partition(self): def test_one_free_partition(self):
...@@ -779,6 +792,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase): ...@@ -779,6 +792,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [partition.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [partition.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(partition.state, 'started') self.assertEqual(partition.state, 'started')
...@@ -798,6 +812,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase): ...@@ -798,6 +812,7 @@ class TestSlapgridCPWithMaster(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [partition.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [partition.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(partition.state, 'started') self.assertEqual(partition.state, 'started')
...@@ -813,8 +828,12 @@ exit 1 ...@@ -813,8 +828,12 @@ exit 1
'.slapos-retention-lock-delay', '.slapgrid-0-error.log']) '.slapos-retention-lock-delay', '.slapgrid-0-error.log'])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/startedComputerPartition', '/getHateoasUrl', '/getComputerPartitionCertificate',
'/getFullComputerInformation', '/softwareInstanceError']) '/startedComputerPartition',
'/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/softwareInstanceError'])
self.assertEqual(instance.state, 'started') self.assertEqual(instance.state, 'started')
def test_one_partition_started_stopped(self): def test_one_partition_started_stopped(self):
...@@ -853,6 +872,7 @@ chmod 755 etc/run/wrapper ...@@ -853,6 +872,7 @@ chmod 755 etc/run/wrapper
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(instance.state, 'started') self.assertEqual(instance.state, 'started')
...@@ -865,7 +885,9 @@ chmod 755 etc/run/wrapper ...@@ -865,7 +885,9 @@ chmod 755 etc/run/wrapper
'etc', 'software_release', 'worked', '.slapos-retention-lock-delay']) 'etc', 'software_release', 'worked', '.slapos-retention-lock-delay'])
self.assertLogContent(wrapper_log, 'Signal handler called with signal 15') self.assertLogContent(wrapper_log, 'Signal handler called with signal 15')
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getHateoasUrl', '/getFullComputerInformation', ['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition']) '/stoppedComputerPartition'])
self.assertEqual(instance.state, 'stopped') self.assertEqual(instance.state, 'stopped')
...@@ -911,6 +933,7 @@ chmod 755 etc/run/wrapper ...@@ -911,6 +933,7 @@ chmod 755 etc/run/wrapper
[instance.software.software_hash]) [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(instance.state, 'started') self.assertEqual(instance.state, 'started')
...@@ -927,7 +950,9 @@ exit 1 ...@@ -927,7 +950,9 @@ exit 1
'.slapos-retention-lock-delay', '.slapgrid-0-error.log']) '.slapos-retention-lock-delay', '.slapgrid-0-error.log'])
self.assertLogContent(wrapper_log, 'Signal handler called with signal 15') self.assertLogContent(wrapper_log, 'Signal handler called with signal 15')
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getHateoasUrl', '/getFullComputerInformation', ['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/softwareInstanceError']) '/softwareInstanceError'])
self.assertEqual(instance.state, 'started') self.assertEqual(instance.state, 'started')
...@@ -947,6 +972,7 @@ exit 1 ...@@ -947,6 +972,7 @@ exit 1
[instance.software.software_hash]) [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition']) '/stoppedComputerPartition'])
self.assertEqual('stopped', instance.state) self.assertEqual('stopped', instance.state)
...@@ -963,7 +989,9 @@ exit 1 ...@@ -963,7 +989,9 @@ exit 1
wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log') wrapper_log = os.path.join(instance.partition_path, '.0_wrapper.log')
self.assertLogContent(wrapper_log, 'Working') self.assertLogContent(wrapper_log, 'Working')
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getHateoasUrl', '/getFullComputerInformation', ['/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual('started', instance.state) self.assertEqual('started', instance.state)
...@@ -989,6 +1017,7 @@ exit 1 ...@@ -989,6 +1017,7 @@ exit 1
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition']) '/stoppedComputerPartition'])
self.assertEqual('stopped', instance.state) self.assertEqual('stopped', instance.state)
...@@ -1442,9 +1471,12 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): ...@@ -1442,9 +1471,12 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase):
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getHateoasUrl', ['/getHateoasUrl',
'/getFullComputerInformation', '/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition',
'/getHateoasUrl',
'/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition', '/stoppedComputerPartition',
'/getHateoasUrl', '/getFullComputerInformation',
'/stoppedComputerPartition',
'/getHateoasUrl', '/getHateoasUrl',
'/getFullComputerInformation']) '/getFullComputerInformation'])
...@@ -1467,9 +1499,12 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase): ...@@ -1467,9 +1499,12 @@ class TestSlapgridCPPartitionProcessing(MasterMixin, unittest.TestCase):
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getHateoasUrl', ['/getHateoasUrl',
'/getFullComputerInformation', '/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition', '/stoppedComputerPartition',
'/getHateoasUrl', '/getFullComputerInformation', '/getHateoasUrl',
'/stoppedComputerPartition']) '/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition'])
def test_partition_periodicity_remove_timestamp(self): def test_partition_periodicity_remove_timestamp(self):
""" """
...@@ -1868,7 +1903,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase): ...@@ -1868,7 +1903,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(instance.state, 'started') self.assertEqual(instance.state, 'started')
...@@ -1887,6 +1922,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase): ...@@ -1887,6 +1922,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition', '/stoppedComputerPartition',
'/destroyedComputerPartition']) '/destroyedComputerPartition'])
self.assertEqual(instance.state, 'destroyed') self.assertEqual(instance.state, 'destroyed')
...@@ -1918,7 +1954,10 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase): ...@@ -1918,7 +1954,10 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
self.assertEqual( self.assertEqual(
computer.sequence, computer.sequence,
['/getFullComputerInformation', '/stoppedComputerPartition', '/destroyedComputerPartition']) ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/stoppedComputerPartition',
'/destroyedComputerPartition'])
def test_slapgrid_not_destroy_bad_instance(self): def test_slapgrid_not_destroy_bad_instance(self):
""" """
...@@ -1939,7 +1978,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase): ...@@ -1939,7 +1978,7 @@ class TestSlapgridUsageReport(MasterMixin, unittest.TestCase):
six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash]) six.assertCountEqual(self, os.listdir(self.software_root), [instance.software.software_hash])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual('started', instance.state) self.assertEqual('started', instance.state)
...@@ -2812,6 +2851,7 @@ exit 0 ...@@ -2812,6 +2851,7 @@ exit 0
'etc', 'software_release', 'worked', '.slapos-retention-lock-delay']) 'etc', 'software_release', 'worked', '.slapos-retention-lock-delay'])
self.assertEqual(computer.sequence, self.assertEqual(computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(partition.state, 'started') self.assertEqual(partition.state, 'started')
manager_list = slapmanager.from_config({'manager_list': 'prerm'}) manager_list = slapmanager.from_config({'manager_list': 'prerm'})
...@@ -3059,6 +3099,7 @@ class TestSlapgridWithPortRedirection(MasterMixin, unittest.TestCase): ...@@ -3059,6 +3099,7 @@ class TestSlapgridWithPortRedirection(MasterMixin, unittest.TestCase):
self.assertEqual(self.computer.sequence, self.assertEqual(self.computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(self.partition.state, 'started') self.assertEqual(self.partition.state, 'started')
...@@ -3134,7 +3175,10 @@ class TestSlapgridWithPortRedirection(MasterMixin, unittest.TestCase): ...@@ -3134,7 +3175,10 @@ class TestSlapgridWithPortRedirection(MasterMixin, unittest.TestCase):
self.assertEqual(self.computer.sequence, self.assertEqual(self.computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/startedComputerPartition', '/startedComputerPartition']) '/getComputerPartitionCertificate',
'/startedComputerPartition',
'/getComputerPartitionCertificate',
'/startedComputerPartition'])
self.assertEqual(self.partition.state, 'started') self.assertEqual(self.partition.state, 'started')
# Check the socat command # Check the socat command
...@@ -3721,6 +3765,7 @@ class TestSlapgridManagerLifecycle(MasterMixin, unittest.TestCase): ...@@ -3721,6 +3765,7 @@ class TestSlapgridManagerLifecycle(MasterMixin, unittest.TestCase):
self.assertEqual(self.computer.sequence, self.assertEqual(self.computer.sequence,
['/getFullComputerInformation', ['/getFullComputerInformation',
'/getComputerPartitionCertificate',
'/startedComputerPartition']) '/startedComputerPartition'])
self.assertEqual(partition.state, 'started') 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