From 8566ad549cf0331f79bc37c1dd1ca32727f53790 Mon Sep 17 00:00:00 2001 From: Lukas Bezdicka Date: Mon, 13 Mar 2017 14:20:39 +0100 Subject: [PATCH] Don't fail on non-valid json in cache files Resolves: rhbz#1438096 Closes-Bug: #1678328 Change-Id: Iee1bb4a7769568cfd3bad8b23c9dff440679ac16 Co-Authored-By: Alex Schultz --- os_collect_config/ec2.py | 6 +++++- os_collect_config/tests/test_ec2.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/os_collect_config/ec2.py b/os_collect_config/ec2.py index 1fee674..d174eec 100644 --- a/os_collect_config/ec2.py +++ b/os_collect_config/ec2.py @@ -68,7 +68,11 @@ class Collector(object): cache_path = cache.get_path('ec2') if os.path.exists(cache_path): with open(cache_path) as f: - metadata = json.load(f) + try: + metadata = json.load(f) + except ValueError as e: + log.getLogger(__name__).warn(e) + metadata = None if metadata: return [('ec2', metadata)] diff --git a/os_collect_config/tests/test_ec2.py b/os_collect_config/tests/test_ec2.py index a3d1fd8..8ff7c58 100644 --- a/os_collect_config/tests/test_ec2.py +++ b/os_collect_config/tests/test_ec2.py @@ -133,6 +133,20 @@ class TestEc2(testtools.TestCase): self.assertRaises(exc.Ec2MetadataNotAvailable, collect_ec2.collect) self.assertIn('Forbidden', self.log.output) + @mock.patch.object(config_drive, 'config_drive') + def test_collect_ec2_invalid_cache(self, cd): + cd.return_value = None + collect.setup_conf() + cache_dir = self.useFixture(fixtures.TempDir()) + self.addCleanup(cfg.CONF.reset) + cfg.CONF.set_override('cachedir', cache_dir.path) + ec2_path = os.path.join(cache_dir.path, 'ec2.json') + with open(ec2_path, 'w') as f: + f.write('') + + ec2_md = ec2.Collector(requests_impl=FakeRequests).collect() + self.assertEqual([('ec2', META_DATA_RESOLVED)], ec2_md) + @mock.patch.object(config_drive, 'config_drive') def test_collect_ec2_collected(self, cd): cd.return_value = None