def test_raise_exception_when_plugin_overlap_release_component(self):
        release = self.env.create_release(
            version='2015.1-8.1',
            operating_system='Ubuntu',
            modes=[consts.CLUSTER_MODES.ha_compact],
            components_metadata=self.env.get_default_components())

        self.env.create_plugin(
            name='plugin_with_components',
            package_version='4.0.0',
            fuel_version=['8.0'],
            releases=[{
                'repository_path': 'repositories/ubuntu',
                'version': '2015.1-8.1', 'os': 'ubuntu',
                'mode': ['ha'],
                'deployment_scripts_path': 'deployment_scripts/'}],
            components_metadata=self.env.get_default_components())

        expected_message = (
            'Plugin plugin_with_components is overlapping with release '
            'by introducing the same component with name '
            '"hypervisor:test_hypervisor"')

        with self.assertRaisesRegexp(errors.AlreadyExists,
                                     expected_message):
            PluginManager.get_components_metadata(release)
Exemple #2
0
    def test_raise_exception_when_plugin_overlap_release_component(self):
        release = self.env.create_release(
            version='2015.1-8.1',
            operating_system='Ubuntu',
            modes=[consts.CLUSTER_MODES.ha_compact],
            components_metadata=self.env.get_default_components())

        self.env.create_plugin(
            name='plugin_with_components',
            package_version='4.0.0',
            fuel_version=['8.0'],
            releases=[{
                'repository_path': 'repositories/ubuntu',
                'version': '2015.1-8.1',
                'os': 'ubuntu',
                'mode': ['ha'],
                'deployment_scripts_path': 'deployment_scripts/'
            }],
            components_metadata=self.env.get_default_components())

        expected_message = (
            'Plugin plugin_with_components is overlapping with release '
            'by introducing the same component with name '
            '"hypervisor:test_hypervisor"')

        with self.assertRaisesRegexp(errors.AlreadyExists, expected_message):
            PluginManager.get_components_metadata(release)
    def get_all_components(cls, instance):
        """Get all components related to release

        Due to components architecture compatible/incompatible are duplex
        relations. So if some component is compatible/incompatible with another
        the last one also should have such relation.

        :param instance: Release instance
        :type instance: Release DB instance
        :returns: list -- list of all components
        """
        plugin_components = PluginManager.get_components_metadata(instance)
        components = copy.deepcopy(
            instance.components_metadata + plugin_components)
        # we should provide commutative property for compatible/incompatible
        # relations between components
        for comp_i, comp_j in itertools.permutations(components, 2):
            if cls._check_relation(comp_j, comp_i, 'incompatible'):
                comp_i.setdefault('incompatible', []).append({
                    'name': comp_j['name'],
                    'message': "Not compatible with {0}".format(
                        comp_j.get('label') or comp_j.get('name'))})
            if cls._check_relation(comp_j, comp_i, 'compatible'):
                comp_i.setdefault('compatible', []).append({
                    'name': comp_j['name']})

        return components
Exemple #4
0
    def get_all_components(cls, instance):
        """Get all components related to release

        Due to components architecture compatible/incompatible are duplex
        relations. So if some component is compatible/incompatible with another
        the last one also should have such relation.

        :param instance: Release instance
        :type instance: Release DB instance
        :returns: list -- list of all components
        """
        plugin_components = PluginManager.get_components_metadata(instance)
        components = copy.deepcopy(instance.components_metadata +
                                   plugin_components)
        # we should provide commutative property for compatible/incompatible
        # relations between components
        for comp_i, comp_j in itertools.permutations(components, 2):
            if cls._check_relation(comp_j, comp_i, 'incompatible'):
                comp_i.setdefault('incompatible', []).append({
                    'name':
                    comp_j['name'],
                    'message':
                    "Not compatible with {0}".format(
                        comp_j.get('label') or comp_j.get('name'))
                })
            if cls._check_relation(comp_j, comp_i, 'compatible'):
                comp_i.setdefault('compatible',
                                  []).append({'name': comp_j['name']})

        return components
Exemple #5
0
    def get_all_components(cls, instance):
        """Get all components related to release

        :param instance: Release instance
        :type instance: Release DB instance
        :returns: list -- list of all components
        """
        plugin_components = PluginManager.get_components_metadata(instance)
        return instance.components_metadata + plugin_components
Exemple #6
0
    def get_all_components(cls, instance):
        """Get all components related to release

        :param instance: Release instance
        :type instance: Release DB instance
        :returns: list -- list of all components
        """
        plugin_components = PluginManager.get_components_metadata(instance)
        return instance.components_metadata + plugin_components
Exemple #7
0
    def test_raise_exception_when_plugin_overlap_another_component(self):
        self.env.create_plugin(
            name='plugin_with_components_1',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        self.env.create_plugin(
            name='plugin_with_components_2',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        expected_message = (
            'Plugin plugin_with_components_2 is overlapping with '
            'plugin_with_components_1 by introducing the same component '
            'with name "hypervisor:test_hypervisor"')

        with self.assertRaisesRegexp(errors.AlreadyExists, expected_message):
            PluginManager.get_components_metadata(self.release)
Exemple #8
0
    def test_get_components(self):
        self.env.create_plugin(
            name='plugin_with_components',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        components_metadata = PluginManager.get_components_metadata(
            self.release)
        self.assertEqual(components_metadata,
                         self.env.get_default_components())
    def test_get_components(self):
        self.env.create_plugin(
            name='plugin_with_components',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        components_metadata = PluginManager.get_components_metadata(
            self.release)
        self.assertEqual(
            components_metadata, self.env.get_default_components())
    def test_raise_exception_when_plugin_overlap_another_component(self):
        self.env.create_plugin(
            name='plugin_with_components_1',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        self.env.create_plugin(
            name='plugin_with_components_2',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        expected_message = (
            'Plugin plugin_with_components_2 is overlapping with '
            'plugin_with_components_1 by introducing the same component '
            'with name "hypervisor:test_hypervisor"')

        with self.assertRaisesRegexp(errors.AlreadyExists,
                                     expected_message):
            PluginManager.get_components_metadata(self.release)
Exemple #11
0
    def test_get_components_for_same_plugins_with_different_verions(self):
        self.env.create_plugin(
            name='plugin_with_components_to_test_verions',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        self.env.create_plugin(
            name='plugin_with_components_to_test_verions',
            version='1.0.0',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        # PluginManager should return only one component for same plugin
        # but different versions
        components_metadata = PluginManager.get_components_metadata(
            self.release)
        self.assertEqual(components_metadata,
                         self.env.get_default_components())
    def test_get_components_for_same_plugins_with_different_verions(self):
        self.env.create_plugin(
            name='plugin_with_components_to_test_verions',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        self.env.create_plugin(
            name='plugin_with_components_to_test_verions',
            version='1.0.0',
            package_version='4.0.0',
            fuel_version=['8.0'],
            components_metadata=self.env.get_default_components())

        # PluginManager should return only one component for same plugin
        # but different versions
        components_metadata = PluginManager.get_components_metadata(
            self.release)
        self.assertEqual(
            components_metadata, self.env.get_default_components())