From c446ec389bc7a805a3b864547f1db88926b61073 Mon Sep 17 00:00:00 2001 From: Michal Arbet Date: Fri, 31 Jan 2020 19:52:02 +0100 Subject: [PATCH] Fix parsing config file for freezer job Config parsers do not guess datatypes of values in configuration files, always storing them internally as strings. So, we need to test if action_v is not NoneType, and if it is not, retype to String. Retype is needed if we get boolean value. Change-Id: I2ddade105a9825a82e18aaf27650d769aedee4cf --- freezer/scheduler/scheduler_job.py | 3 ++- .../unit/scheduler/test_scheduler_job.py | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/freezer/scheduler/scheduler_job.py b/freezer/scheduler/scheduler_job.py index 1ddf0524..d640608b 100644 --- a/freezer/scheduler/scheduler_job.py +++ b/freezer/scheduler/scheduler_job.py @@ -209,7 +209,8 @@ class Job(object): parser = configparser.ConfigParser() parser.add_section('action') for action_k, action_v in action.items(): - parser.set('action', action_k, action_v) + if action_v is not None: + parser.set('action', action_k, str(action_v)) parser.write(f) f.seek(0) diff --git a/freezer/tests/unit/scheduler/test_scheduler_job.py b/freezer/tests/unit/scheduler/test_scheduler_job.py index e063223e..cac5d4b8 100644 --- a/freezer/tests/unit/scheduler/test_scheduler_job.py +++ b/freezer/tests/unit/scheduler/test_scheduler_job.py @@ -12,10 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os +import tempfile import unittest from freezer.scheduler import scheduler_job +action = {"action": "backup", "storage": "local", + "mode": "fs", "backup_name": "test", + "container": "/tmp/backuped", + "path_to_backup": "/tmp/to_backup"} + class TestSchedulerJob(unittest.TestCase): def setUp(self): @@ -23,3 +30,23 @@ class TestSchedulerJob(unittest.TestCase): def test(self): scheduler_job.RunningState.stop(self.job, {}) + + def test_save_action_to_disk(self): + with tempfile.NamedTemporaryFile(mode='w', + delete=False) as config_file: + self.job.save_action_to_file(action, config_file) + self.assertTrue(os.path.exists(config_file.name)) + + def test_save_action_with_none_value_to_disk(self): + action.update({"log_file": None}) + with tempfile.NamedTemporaryFile(mode='w', + delete=False) as config_file: + self.job.save_action_to_file(action, config_file) + self.assertTrue(os.path.exists(config_file.name)) + + def test_save_action_with_bool_value_to_disk(self): + action.update({"no_incremental": False}) + with tempfile.NamedTemporaryFile(mode='w', + delete=False) as config_file: + self.job.save_action_to_file(action, config_file) + self.assertTrue(os.path.exists(config_file.name))