| '''Проверки регистрации сервиса без удаления других сервисов терминала.'''
|
|
|
| import tempfile
|
| import unittest
|
| from pathlib import Path
|
|
|
| from deploy_service import services_ini_update, write_services_ini
|
|
|
|
|
| class ServicesIniTests(unittest.TestCase):
|
| def setUp(self):
|
| self.temp = tempfile.TemporaryDirectory()
|
| self.root = Path(self.temp.name)
|
| self.template = Path(__file__).resolve().parent.parent / 'static/services.ini'
|
|
|
| def tearDown(self):
|
| self.temp.cleanup()
|
|
|
| def test_missing_configuration_is_created_as_utf16_and_is_idempotent(self):
|
| target, text, changed = services_ini_update(self.root, self.template, 'custom.sqlite')
|
| self.assertTrue(changed)
|
| write_services_ini(target, text)
|
| self.assertTrue(target.read_bytes().startswith(b'\xff\xfe'))
|
| self.assertIn('enabled=1', text)
|
| self.assertIn('path=Services\\Shared Projects\\mt5-manager\\ServiceStateWriter.ex5', text)
|
| self.assertIn('InpDatabase=custom.sqlite', text)
|
| self.assertNotIn('\r\r\n', target.read_bytes().decode('utf-16'))
|
| self.assertFalse(services_ini_update(self.root, self.template, 'custom.sqlite')[2])
|
|
|
| def test_repair_preserves_other_services_and_custom_parameters(self):
|
| other = '<service>\nname=OtherService\npath=Services\\Other.ex5\nenabled=1\n</service>'
|
| ours = self.template.read_text(encoding='utf-16').strip()
|
| ours = ours.replace('enabled=1', 'enabled=0').replace('InpIntervalSec=2', 'InpIntervalSec=30')
|
| ours = ours.replace('path=Services\\Shared Projects\\mt5-manager\\ServiceStateWriter.ex5',
|
| 'path=Services\\old-location.ex5')
|
| target = self.root / 'config/services.ini'
|
| target.parent.mkdir()
|
| target.write_text(other + '\n' + ours + '\n', encoding='utf-16')
|
| _, text, changed = services_ini_update(self.root, self.template, 'updated.sqlite')
|
| self.assertTrue(changed)
|
| self.assertIn(other, text)
|
| self.assertIn('InpIntervalSec=30', text)
|
| self.assertIn('InpDatabase=updated.sqlite', text)
|
| self.assertIn('path=Services\\Shared Projects\\mt5-manager\\ServiceStateWriter.ex5', text)
|
| self.assertNotIn('enabled=0', text)
|
|
|
| def test_existing_unrelated_service_is_kept_when_adding_ours(self):
|
| target = self.root / 'config/services.ini'
|
| target.parent.mkdir()
|
| other = '<service>\nname=Other\npath=Services\\Other.ex5\nenabled=1\n</service>\n'
|
| target.write_text(other, encoding='utf-16')
|
| _, text, changed = services_ini_update(self.root, self.template, 'custom.sqlite')
|
| self.assertTrue(changed)
|
| self.assertIn(other, text)
|
| self.assertEqual(text.count('<service>'), 2)
|
|
|
| def test_malformed_configuration_is_not_overwritten(self):
|
| target = self.root / 'config/services.ini'
|
| target.parent.mkdir()
|
| target.write_text('<service>\nname=Other\n', encoding='utf-16')
|
| original = target.read_bytes()
|
| with self.assertRaises(ValueError):
|
| services_ini_update(self.root, self.template, 'custom.sqlite')
|
| self.assertEqual(target.read_bytes(), original)
|
|
|
| def test_malformed_inputs_are_not_overwritten(self):
|
| target = self.root / 'config/services.ini'
|
| target.parent.mkdir()
|
| target.write_text('<service>\nname=ServiceStateWriter\n<inputs>\n</service>', encoding='utf-16')
|
| original = target.read_bytes()
|
| with self.assertRaises(ValueError):
|
| services_ini_update(self.root, self.template, 'custom.sqlite')
|
| self.assertEqual(target.read_bytes(), original)
|
|
|
|
|
| if __name__ == '__main__':
|
| unittest.main()
|