From 4144d39976ce847b4a7b4c7e96bb389a078d9b57 Mon Sep 17 00:00:00 2001 From: Manali Latkar <manalil@thoughtworks.com> Date: Thu, 6 Mar 2014 11:11:06 +0530 Subject: [PATCH] Making the type and null check for os_distro optional according to import image_type --- stacktach/image_type.py | 4 +++- stacktach/models.py | 3 +++ tests/unit/test_nova_verifier.py | 22 ++++++++++++++++++++++ verifier/nova_verifier.py | 11 +++++++---- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/stacktach/image_type.py b/stacktach/image_type.py index 236a0f2..663a825 100644 --- a/stacktach/image_type.py +++ b/stacktach/image_type.py @@ -3,6 +3,7 @@ from operator import itemgetter BASE_IMAGE = 0x1 SNAPSHOT_IMAGE = 0x2 +IMPORT_IMAGE = 0x3 LINUX_IMAGE = 0x10 WINDOWS_IMAGE = 0x20 @@ -48,7 +49,8 @@ def get_numeric_code(payload, default=0): num |= BASE_IMAGE if image_type == 'snapshot': num |= SNAPSHOT_IMAGE - + if image_type == 'import': + num |= IMPORT_IMAGE os_type = meta.get('os_type', payload.get('os_type', '')) if os_type == 'linux': num |= LINUX_IMAGE diff --git a/stacktach/models.py b/stacktach/models.py index d9afe35..4a1ae9d 100644 --- a/stacktach/models.py +++ b/stacktach/models.py @@ -338,6 +338,9 @@ class InstanceExists(models.Model): def update_status(self, new_status): self.status = new_status + def is_image_type_import(self): + return (self.raw.image_type & 0xf) == 3 + @staticmethod def mark_exists_as_sent_unverified(message_ids): absent_exists = [] diff --git a/tests/unit/test_nova_verifier.py b/tests/unit/test_nova_verifier.py index 0f189f7..a7a2867 100644 --- a/tests/unit/test_nova_verifier.py +++ b/tests/unit/test_nova_verifier.py @@ -1184,6 +1184,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.rax_options = 'a' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(WrongTypeException) as wt: @@ -1207,6 +1208,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.rax_options = '' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(NullFieldException) as nf: @@ -1230,6 +1232,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.os_architecture = 'x64,' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(WrongTypeException) as wt: @@ -1252,6 +1255,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.os_architecture = '' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(NullFieldException) as nf: @@ -1275,6 +1279,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.os_distro = 'com.microsoft.server,' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(WrongTypeException) as wt: @@ -1299,6 +1304,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.os_distro = '' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(NullFieldException) as nf: @@ -1322,6 +1328,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.os_version = '2008.2,' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(WrongTypeException) as wt: @@ -1345,6 +1352,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.os_version = '' + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() with self.assertRaises(NullFieldException) as nf: @@ -1363,6 +1371,7 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): config.flavor_field_name().AndReturn('dummy_flavor_field_name') exist = self._create_mock_exist() + exist.is_image_type_import().AndReturn(False) self.mox.ReplayAll() nova_verifier._verify_validity(exist, 'all') @@ -1397,6 +1406,19 @@ class NovaVerifierValidityTestCase(StacktachBaseTestCase): exist = self._create_mock_exist() exist.deleted_at = None + exist.is_image_type_import().AndReturn(False) + self.mox.ReplayAll() + + nova_verifier._verify_validity(exist, 'all') + self.mox.VerifyAll() + + def test_should_verify_null_os_distro_if_image_type_is_import(self): + self.mox.StubOutWithMock(config, 'flavor_field_name') + config.flavor_field_name().AndReturn('dummy_flavor_field_name') + + exist = self._create_mock_exist() + exist.os_distro = "" + exist.is_image_type_import().AndReturn(True) self.mox.ReplayAll() nova_verifier._verify_validity(exist, 'all') diff --git a/verifier/nova_verifier.py b/verifier/nova_verifier.py index f88afe8..18187d9 100644 --- a/verifier/nova_verifier.py +++ b/verifier/nova_verifier.py @@ -176,10 +176,12 @@ def _verify_basic_validity(exist): def _verify_optional_validity(exist): + is_image_type_import = exist.is_image_type_import() fields = {exist.rax_options: 'rax_options', exist.os_architecture: 'os_architecture', - exist.os_version: 'os_version', - exist.os_distro: 'os_distro'} + exist.os_version: 'os_version'} + if not is_image_type_import: + fields.update({exist.os_distro: 'os_distro'}) for (field_value, field_name) in fields.items(): if field_value == '': raise NullFieldException(field_name, exist.id, exist.instance) @@ -187,8 +189,9 @@ def _verify_optional_validity(exist): 'rax_options', exist.rax_options, exist.id, exist.instance) base_verifier._is_alphanumeric( 'os_architecture', exist.os_architecture, exist.id, exist.instance) - base_verifier._is_alphanumeric( - 'os_distro', exist.os_distro, exist.id, exist.instance) + if not is_image_type_import: + base_verifier._is_alphanumeric( + 'os_distro', exist.os_distro, exist.id, exist.instance) base_verifier._is_alphanumeric( 'os_version', exist.os_version, exist.id, exist.instance)