Ejemplo n.º 1
0
 def setUp(self, mock_parent_open_file_handle):
     self.context = PackageXMLFileContext('/foo')
     self.context.metadata_file_handle = StringIO()
     self.context._open_metadata_file_handle()
Ejemplo n.º 2
0
 def setUp(self, mock_parent_open_file_handle):
     self.context = PackageXMLFileContext('/foo')
     self.context.metadata_file_handle = StringIO()
     self.context._open_metadata_file_handle()
Ejemplo n.º 3
0
class TestPackageXMLFileContext(unittest.TestCase):
    """
    Test correct generation of comps.xml file
    """
    @mock.patch(
        'pulp.plugins.util.metadata_writer.MetadataFileContext._open_metadata_file_handle'
    )
    def setUp(self, mock_parent_open_file_handle):
        self.context = PackageXMLFileContext('/foo')
        self.context.metadata_file_handle = StringIO()
        self.context._open_metadata_file_handle()

    def _generate_group_unit(self, name):
        """
        Generate package group unit.

        display_order is omitted on purpose, to check its default value

        :param name: name of the unit
        :type  name: str
        """
        unit_data = {
            'package_group_id': name,
            'repo_id': 'repo1',
            'user_visible': True,
            'default': True,
            'name': name,
            'description': name + u'description',
            'mandatory_package_names': [],
            'default_package_names': [],
            'optional_package_names': [],
            'conditional_package_names': {}
        }
        return models.PackageGroup(**unit_data)

    def _generate_category_unit(self, name):
        """
        Generate package category unit.

        :param name: name of the unit
        :type  name: str
        """
        unit_data = {
            'package_category_id': name,
            'display_order': 0,
            'name': name,
            'description': name + u' – description',
            'packagegroupids': []
        }
        return models.PackageCategory(**unit_data)

    def _generate_environment_unit(self, name):
        """
        Generate package environment unit.

        :param name: name of the unit
        :type  name: str
        """
        unit_data = {
            'package_environment_id': name,
            'display_order': 0,
            'name': name,
            'description': name + u' – description',
            'group_ids': [],
            'options': []
        }
        return models.PackageEnvironment(**unit_data)

    def _generate_langpacks_unit(self):
        """
        Generate package langpacks unit.
        """
        unit_data = {'matches': []}
        return models.PackageLangpacks(**unit_data)

    @mock.patch(
        'pulp.plugins.util.metadata_writer.MetadataFileContext._open_metadata_file_handle'
    )
    def test__open_metadata_file_handle(self, mock_parent_open_file_handle):
        """
        Test that parent method for opening file is called and the XML generator is instantiated.
        """
        self.context._open_metadata_file_handle()
        mock_parent_open_file_handle.assert_called_once_with()
        self.assertTrue(isinstance(self.context.xml_generator, XMLWriter))

    def test__write_file_header(self):
        """
        Test that the correct header is written.
        """
        self.context._write_file_header()
        expected_xml = '<?xml version="1.0" encoding="utf-8"?>\n' \
            '<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">\n' \
            '<comps'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_group_unit_metadata_minimal(self):
        """
        Test the generation of minimal package group unit.
        """
        group_unit = self._generate_group_unit('foo')
        self.context.add_package_group_unit_metadata(group_unit)
        expected_xml = '<group>\n' \
                       '  <id>foo</id>\n' \
                       '  <default>true</default>\n' \
                       '  <uservisible>true</uservisible>\n' \
                       '  <display_order>1024</display_order>\n' \
                       '  <name>foo</name>\n' \
                       '  <description>foodescription</description>\n' \
                       '  <packagelist />\n' \
                       '</group>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_group_unit_metadata_complex(self):
        """
        Test the generation of complex package group unit.
        """
        group_unit = self._generate_group_unit('foo')
        group_unit.translated_name = {u'af': u'af_name', u'ze': u'ze_name'}
        group_unit.default = False
        group_unit.langonly = u'bar'
        group_unit.translated_description = {
            u'af': u'af_desc',
            u'ze': u'ze_desc'
        }
        group_unit.mandatory_package_names = [
            u'package2', u'package1', u'package3'
        ]
        group_unit.default_package_names = [
            u'package6', u'package5', u'package4'
        ]
        group_unit.optional_package_names = [
            u'package9', u'package8', u'package7'
        ]
        group_unit.conditional_package_names = [(u'package10', u'foo,bar,baz')]
        self.context.add_package_group_unit_metadata(group_unit)
        expected_xml = '<group>\n' \
                       '  <id>foo</id>\n' \
                       '  <default>false</default>\n' \
                       '  <uservisible>true</uservisible>\n' \
                       '  <display_order>1024</display_order>\n' \
                       '  <langonly>bar</langonly>\n' \
                       '  <name>foo</name>\n' \
                       '  <name xml:lang="af">af_name</name>\n' \
                       '  <name xml:lang="ze">ze_name</name>\n' \
                       '  <description>foodescription</description>\n' \
                       '  <description xml:lang="af">af_desc</description>\n' \
                       '  <description xml:lang="ze">ze_desc</description>\n' \
                       '  <packagelist>\n' \
                       '    <packagereq type="mandatory">package1</packagereq>\n' \
                       '    <packagereq type="mandatory">package2</packagereq>\n' \
                       '    <packagereq type="mandatory">package3</packagereq>\n' \
                       '    <packagereq type="default">package4</packagereq>\n' \
                       '    <packagereq type="default">package5</packagereq>\n' \
                       '    <packagereq type="default">package6</packagereq>\n' \
                       '    <packagereq type="optional">package7</packagereq>\n' \
                       '    <packagereq type="optional">package8</packagereq>\n' \
                       '    <packagereq type="optional">package9</packagereq>\n' \
                       '    <packagereq requires="foo,bar,baz" type="conditional">'\
                       'package10</packagereq>\n' \
                       '  </packagelist>\n' \
                       '</group>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_category_unit_metadata_minimal(self):
        """
        Test the generation of minimal package category unit.
        """
        category_unit = self._generate_category_unit('category_name')
        self.context.add_package_category_unit_metadata(category_unit)
        expected_xml = '<category>\n' \
                       '  <id>category_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>category_name</name>\n' \
                       '  <description>category_name – description</description>\n' \
                       '  <grouplist />\n' \
                       '</category>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_category_unit_metadata_complex(self):
        """
        Test the generation of complex package category unit.
        """
        unit = self._generate_category_unit('category_name')
        unit.translated_name = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.translated_description = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.packagegroupids = [u'package2', u'package1']
        self.context.add_package_category_unit_metadata(unit)
        expected_xml = '<category>\n' \
                       '  <id>category_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>category_name</name>\n' \
                       '  <name xml:lang="af">af_name</name>\n' \
                       '  <name xml:lang="ze">ze_name</name>\n' \
                       '  <description>category_name – description</description>\n' \
                       '  <description xml:lang="af">af_desc</description>\n' \
                       '  <description xml:lang="ze">ze_desc</description>\n' \
                       '  <grouplist>\n' \
                       '    <groupid>package1</groupid>\n' \
                       '    <groupid>package2</groupid>\n' \
                       '  </grouplist>\n' \
                       '</category>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_environment_unit_metadata_simple(self):
        """
        Test the generation of simple package environment unit.
        """
        unit = self._generate_environment_unit('environment_name')
        self.context.add_package_environment_unit_metadata(unit)
        expected_xml = '<environment>\n' \
                       '  <id>environment_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>environment_name</name>\n' \
                       '  <description>environment_name – description</description>\n' \
                       '  <grouplist />\n' \
                       '  <optionlist />\n' \
                       '</environment>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_environment_unit_metadata_complex(self):
        """
        Test the generation of complex package environment unit.
        """
        unit = self._generate_environment_unit('environment_name')
        unit.translated_name = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.translated_description = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.group_ids = [u'package2', u'package1']
        unit.options = [{
            'group': 'package3',
            'default': False
        }, {
            'group': u'package4',
            'default': True
        }]
        self.context.add_package_environment_unit_metadata(unit)
        expected_xml = '<environment>\n' \
                       '  <id>environment_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>environment_name</name>\n' \
                       '  <name xml:lang="af">af_name</name>\n' \
                       '  <name xml:lang="ze">ze_name</name>\n' \
                       '  <description>environment_name – description</description>\n' \
                       '  <description xml:lang="af">af_desc</description>\n' \
                       '  <description xml:lang="ze">ze_desc</description>\n' \
                       '  <grouplist>\n' \
                       '    <groupid>package1</groupid>\n' \
                       '    <groupid>package2</groupid>\n' \
                       '  </grouplist>\n' \
                       '  <optionlist>\n' \
                       '    <groupid>package3</groupid>\n' \
                       '    <groupid default="true">package4</groupid>\n' \
                       '  </optionlist>\n' \
                       '</environment>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_langpacks_unit_metadata_simple(self):
        """
        Test the generation of simple package langpacks unit.
        """
        unit = self._generate_langpacks_unit()
        self.context.add_package_langpacks_unit_metadata(unit)
        expected_xml = '<langpacks />\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_langpacks_unit_metadata_complex(self):
        """
        Test the generation of complex package langpacks unit.
        """
        unit = self._generate_langpacks_unit()
        unit.matches = [{'install': 'package-%s', 'name': 'package-en'}]
        self.context.add_package_langpacks_unit_metadata(unit)
        expected_xml = '<langpacks>\n' \
                       '  <match name="package-en" install="package-%s" />\n' \
                       '</langpacks>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)
Ejemplo n.º 4
0
class TestPackageXMLFileContext(unittest.TestCase):
    """
    Test correct generation of comps.xml file
    """
    @mock.patch('pulp.plugins.util.metadata_writer.MetadataFileContext._open_metadata_file_handle')
    def setUp(self, mock_parent_open_file_handle):
        self.context = PackageXMLFileContext('/foo')
        self.context.metadata_file_handle = StringIO()
        self.context._open_metadata_file_handle()

    def _generate_group_unit(self, name):
        """
        Generate package group unit.

        display_order is omitted on purpose, to check its default value

        :param name: name of the unit
        :type  name: str
        """
        unit_data = {'package_group_id': name,
                     'repo_id': 'repo1',
                     'user_visible': True,
                     'default': True,
                     'name': name,
                     'description': name + u'description',
                     'mandatory_package_names': [],
                     'default_package_names': [],
                     'optional_package_names': [],
                     'conditional_package_names': {}}
        return models.PackageGroup(**unit_data)

    def _generate_category_unit(self, name):
        """
        Generate package category unit.

        :param name: name of the unit
        :type  name: str
        """
        unit_data = {'package_category_id': name,
                     'display_order': 0,
                     'name': name,
                     'description': name + u' – description',
                     'packagegroupids': []}
        return models.PackageCategory(**unit_data)

    def _generate_environment_unit(self, name):
        """
        Generate package environment unit.

        :param name: name of the unit
        :type  name: str
        """
        unit_data = {'package_environment_id': name,
                     'display_order': 0,
                     'name': name,
                     'description': name + u' – description',
                     'group_ids': [],
                     'options': []}
        return models.PackageEnvironment(**unit_data)

    def _generate_langpacks_unit(self):
        """
        Generate package langpacks unit.
        """
        unit_data = {'matches': []}
        return models.PackageLangpacks(**unit_data)

    @mock.patch('pulp.plugins.util.metadata_writer.MetadataFileContext._open_metadata_file_handle')
    def test__open_metadata_file_handle(self, mock_parent_open_file_handle):
        """
        Test that parent method for opening file is called and the XML generator is instantiated.
        """
        self.context._open_metadata_file_handle()
        mock_parent_open_file_handle.assert_called_once_with()
        self.assertTrue(isinstance(self.context.xml_generator, XMLWriter))

    def test__write_file_header(self):
        """
        Test that the correct header is written.
        """
        self.context._write_file_header()
        expected_xml = '<?xml version="1.0" encoding="utf-8"?>\n' \
            '<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">\n' \
            '<comps'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_group_unit_metadata_minimal(self):
        """
        Test the generation of minimal package group unit.
        """
        group_unit = self._generate_group_unit('foo')
        self.context.add_package_group_unit_metadata(group_unit)
        expected_xml = '<group>\n' \
                       '  <id>foo</id>\n' \
                       '  <default>true</default>\n' \
                       '  <uservisible>true</uservisible>\n' \
                       '  <display_order>1024</display_order>\n' \
                       '  <name>foo</name>\n' \
                       '  <description>foodescription</description>\n' \
                       '  <packagelist />\n' \
                       '</group>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_group_unit_metadata_complex(self):
        """
        Test the generation of complex package group unit.
        """
        group_unit = self._generate_group_unit('foo')
        group_unit.translated_name = {u'af': u'af_name', u'ze': u'ze_name'}
        group_unit.default = False
        group_unit.langonly = u'bar'
        group_unit.translated_description = {u'af': u'af_desc', u'ze': u'ze_desc'}
        group_unit.mandatory_package_names = [u'package2', u'package1', u'package3']
        group_unit.default_package_names = [u'package6', u'package5', u'package4']
        group_unit.optional_package_names = [u'package9', u'package8', u'package7']
        group_unit.conditional_package_names = [(u'package10', u'foo,bar,baz')]
        self.context.add_package_group_unit_metadata(group_unit)
        expected_xml = '<group>\n' \
                       '  <id>foo</id>\n' \
                       '  <default>false</default>\n' \
                       '  <uservisible>true</uservisible>\n' \
                       '  <display_order>1024</display_order>\n' \
                       '  <langonly>bar</langonly>\n' \
                       '  <name>foo</name>\n' \
                       '  <name xml:lang="af">af_name</name>\n' \
                       '  <name xml:lang="ze">ze_name</name>\n' \
                       '  <description>foodescription</description>\n' \
                       '  <description xml:lang="af">af_desc</description>\n' \
                       '  <description xml:lang="ze">ze_desc</description>\n' \
                       '  <packagelist>\n' \
                       '    <packagereq type="mandatory">package1</packagereq>\n' \
                       '    <packagereq type="mandatory">package2</packagereq>\n' \
                       '    <packagereq type="mandatory">package3</packagereq>\n' \
                       '    <packagereq type="default">package4</packagereq>\n' \
                       '    <packagereq type="default">package5</packagereq>\n' \
                       '    <packagereq type="default">package6</packagereq>\n' \
                       '    <packagereq type="optional">package7</packagereq>\n' \
                       '    <packagereq type="optional">package8</packagereq>\n' \
                       '    <packagereq type="optional">package9</packagereq>\n' \
                       '    <packagereq requires="foo,bar,baz" type="conditional">'\
                       'package10</packagereq>\n' \
                       '  </packagelist>\n' \
                       '</group>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_category_unit_metadata_minimal(self):
        """
        Test the generation of minimal package category unit.
        """
        category_unit = self._generate_category_unit('category_name')
        self.context.add_package_category_unit_metadata(category_unit)
        expected_xml = '<category>\n' \
                       '  <id>category_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>category_name</name>\n' \
                       '  <description>category_name – description</description>\n' \
                       '  <grouplist />\n' \
                       '</category>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_category_unit_metadata_complex(self):
        """
        Test the generation of complex package category unit.
        """
        unit = self._generate_category_unit('category_name')
        unit.translated_name = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.translated_description = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.packagegroupids = [u'package2', u'package1']
        self.context.add_package_category_unit_metadata(unit)
        expected_xml = '<category>\n' \
                       '  <id>category_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>category_name</name>\n' \
                       '  <name xml:lang="af">af_name</name>\n' \
                       '  <name xml:lang="ze">ze_name</name>\n' \
                       '  <description>category_name – description</description>\n' \
                       '  <description xml:lang="af">af_desc</description>\n' \
                       '  <description xml:lang="ze">ze_desc</description>\n' \
                       '  <grouplist>\n' \
                       '    <groupid>package1</groupid>\n' \
                       '    <groupid>package2</groupid>\n' \
                       '  </grouplist>\n' \
                       '</category>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_environment_unit_metadata_simple(self):
        """
        Test the generation of simple package environment unit.
        """
        unit = self._generate_environment_unit('environment_name')
        self.context.add_package_environment_unit_metadata(unit)
        expected_xml = '<environment>\n' \
                       '  <id>environment_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>environment_name</name>\n' \
                       '  <description>environment_name – description</description>\n' \
                       '  <grouplist />\n' \
                       '  <optionlist />\n' \
                       '</environment>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_environment_unit_metadata_complex(self):
        """
        Test the generation of complex package environment unit.
        """
        unit = self._generate_environment_unit('environment_name')
        unit.translated_name = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.translated_description = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.group_ids = [u'package2', u'package1']
        unit.options = [{'group': 'package3', 'default': False},
                        {'group': u'package4', 'default': True}]
        self.context.add_package_environment_unit_metadata(unit)
        expected_xml = '<environment>\n' \
                       '  <id>environment_name</id>\n' \
                       '  <display_order>0</display_order>\n' \
                       '  <name>environment_name</name>\n' \
                       '  <name xml:lang="af">af_name</name>\n' \
                       '  <name xml:lang="ze">ze_name</name>\n' \
                       '  <description>environment_name – description</description>\n' \
                       '  <description xml:lang="af">af_desc</description>\n' \
                       '  <description xml:lang="ze">ze_desc</description>\n' \
                       '  <grouplist>\n' \
                       '    <groupid>package1</groupid>\n' \
                       '    <groupid>package2</groupid>\n' \
                       '  </grouplist>\n' \
                       '  <optionlist>\n' \
                       '    <groupid>package3</groupid>\n' \
                       '    <groupid default="true">package4</groupid>\n' \
                       '  </optionlist>\n' \
                       '</environment>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_langpacks_unit_metadata_simple(self):
        """
        Test the generation of simple package langpacks unit.
        """
        unit = self._generate_langpacks_unit()
        self.context.add_package_langpacks_unit_metadata(unit)
        expected_xml = '<langpacks />\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)

    def test_add_package_langpacks_unit_metadata_complex(self):
        """
        Test the generation of complex package langpacks unit.
        """
        unit = self._generate_langpacks_unit()
        unit.matches = [{'install': 'package-%s', 'name': 'package-en'}]
        self.context.add_package_langpacks_unit_metadata(unit)
        expected_xml = '<langpacks>\n' \
                       '  <match name="package-en" install="package-%s" />\n' \
                       '</langpacks>\n'
        generated_xml = self.context.metadata_file_handle.getvalue()
        self.assertEqual(generated_xml, expected_xml)
Ejemplo n.º 5
0
 def setUp(self):
     self.working_dir = tempfile.mkdtemp()
     self.context = PackageXMLFileContext(self.working_dir)
     self.context.metadata_file_handle = mock.Mock()
     self.maxDiff = None
     self.context._write_root_tag_close = mock.Mock()
Ejemplo n.º 6
0
class TestPackageXMLFileContext(unittest.TestCase):

    def setUp(self):
        self.working_dir = tempfile.mkdtemp()
        self.context = PackageXMLFileContext(self.working_dir)
        self.context.metadata_file_handle = mock.Mock()
        self.maxDiff = None
        self.context._write_root_tag_close = mock.Mock()

    def tearDown(self):
        shutil.rmtree(self.working_dir)

    def _generate_group_unit(self, name):
        unit_key = {'id': name}
        unit_metadata = {'user_visible': True,
                         'default': True,
                         'display_order': 0,
                         'name': name,
                         'description': name + u'description',
                         'mandatory_package_names': [],
                         'default_package_names': [],
                         'optional_package_names': [],
                         'conditional_package_names': {}}
        storage_path = os.path.join(self.working_dir, name)
        return Unit(TYPE_ID_PKG_GROUP, unit_key, unit_metadata, storage_path)

    def _generate_category_unit(self, name):
        unit_key = {'id': name}
        unit_metadata = {'id': name,
                         'user_visible': True,
                         'display_order': 0,
                         'name': name,
                         'description': name + u' – description',
                         'grouplist': []}
        storage_path = os.path.join(self.working_dir, name)
        return Unit(TYPE_ID_PKG_CATEGORY, unit_key, unit_metadata, storage_path)

    def _generate_environment_unit(self, name):
        unit_key = {'id': name}
        unit_metadata = {'id': name,
                         'display_order': 0,
                         'name': name,
                         'description': name + u' – description',
                         'grouplist': [],
                         'optionlist': []}
        storage_path = os.path.join(self.working_dir, name)
        return Unit(TYPE_ID_PKG_ENVIRONMENT, unit_key, unit_metadata, storage_path)

    def test_write_root_tag_open(self):
        self.context._write_root_tag_open()
        self.context.metadata_file_handle.write.assert_called_once_with(
                          '<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" '
                          '"comps.dtd">\n<comps>')

    def test_write_root_tag_close(self):
        self.context._write_root_tag_open()
        self.context.metadata_file_handle.write.reset_mock()
        self.context._write_root_tag_close()
        self.context.metadata_file_handle.write.assert_called_once_with(
            '</comps>\n')

    def test_add_package_group_unit_metadata_minimal(self):
        group_unit = self._generate_group_unit('foo')
        self.context.add_package_group_unit_metadata(group_unit)
        source_str =  '<group><id>foo</id><default>true</default><uservisible>true</uservisible><display_order>0'\
                          '</display_order><name>foo</name><description>foodescription'\
                          '</description><packagelist /></group>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    def test_add_package_group_unit_metadata_complex(self):
        group_unit = self._generate_group_unit('foo')
        group_unit.metadata['translated_name'] = {u'af': u'af_name', u'ze': u'ze_name'}
        group_unit.metadata['default'] = False
        group_unit.metadata['langonly'] = u'bar'
        group_unit.metadata['translated_description'] = {u'af': u'af_desc', u'ze': u'ze_desc'}
        group_unit.metadata['mandatory_package_names'] = [u'package2', u'package1', u'package3']
        group_unit.metadata['default_package_names'] = [u'package6', u'package5', u'package4']
        group_unit.metadata['optional_package_names'] = [u'package9', u'package8', u'package7']
        group_unit.metadata['conditional_package_names'] = [(u'package10', u'foo,bar,baz')]
        self.context.add_package_group_unit_metadata(group_unit)
        source_str = '<group><id>foo</id>' \
                     '<default>false</default>' \
                     '<uservisible>true</uservisible><display_order>0' \
                     '</display_order><langonly>bar</langonly>'\
                     '<name>foo</name>'\
                     '<name xml:lang="af">af_name</name>'\
                     '<name xml:lang="ze">ze_name</name>'\
                     '<description>foodescription</description>'\
                     '<description xml:lang="af">af_desc</description>'\
                     '<description xml:lang="ze">ze_desc</description>'\
                     '<packagelist><packagereq type="mandatory">package1</packagereq>'\
                     '<packagereq type="mandatory">package2</packagereq>'\
                     '<packagereq type="mandatory">package3</packagereq>'\
                     '<packagereq type="default">package4</packagereq>'\
                     '<packagereq type="default">package5</packagereq>'\
                     '<packagereq type="default">package6</packagereq>'\
                     '<packagereq type="optional">package7</packagereq>'\
                     '<packagereq type="optional">package8</packagereq>'\
                     '<packagereq type="optional">package9</packagereq>'\
                     '<packagereq requires="foo,bar,baz" type="conditional">package10'\
                     '</packagereq>'\
                     '</packagelist></group>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    def test_add_package_category_unit_metadata_minimal(self):
        category_unit = self._generate_category_unit('category_name')
        self.context.add_package_category_unit_metadata(category_unit)
        source_str = '<category><id>category_name</id><display_order>0</display_order>' \
                      '<name>category_name</name>'\
                      '<description>category_name – description</description>'\
                      '<grouplist /></category>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    def test_add_package_category_unit_metadata_complex(self):
        unit = self._generate_category_unit('category_name')
        unit.unit_key['id'] = None
        unit.metadata['translated_name'] = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.metadata['translated_description'] = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.metadata['packagegroupids'] = [u'package2', u'package1']
        self.context.add_package_category_unit_metadata(unit)
        source_str = '<category><id>category_name</id><display_order>0</display_order>' \
                      '<name>category_name</name>' \
                      '<name xml:lang="af">af_name</name>'\
                      '<name xml:lang="ze">ze_name</name>'\
                      '<description>category_name – description</description>'\
                      '<description xml:lang="af">af_desc</description>'\
                      '<description xml:lang="ze">ze_desc</description>'\
                      '<grouplist>'\
                      '<groupid>package1</groupid>'\
                      '<groupid>package2</groupid>'\
                      '</grouplist>'\
                      '</category>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    def test_add_package_environment_unit_metadata_simple(self):
        unit = self._generate_environment_unit('environment_name')
        self.context.add_package_environment_unit_metadata(unit)

        source_str = '<environment><id>environment_name</id><display_order>0</display_order>'\
                      '<name>environment_name</name>'\
                      '<description>environment_name – description</description>'\
                      '<grouplist /><optionlist /></environment>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    def test_add_package_environment_unit_metadata_complex(self):
        unit = self._generate_environment_unit('environment_name')
        unit.unit_key['id'] = None
        unit.metadata['translated_name'] = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.metadata['translated_description'] = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.metadata['group_ids'] = [u'package2', u'package1']
        unit.metadata['options'] = [{'group': 'package3', 'default': False},
                                    {'group': u'package4', 'default': True}]
        self.context.add_package_environment_unit_metadata(unit)
        source_str = '<environment><id>environment_name</id><display_order>0</display_order>'\
                     '<name>environment_name</name>' \
                     '<name xml:lang="af">af_name</name>' \
                     '<name xml:lang="ze">ze_name</name>' \
                     '<description>environment_name – description</description>' \
                     '<description xml:lang="af">af_desc</description>' \
                     '<description xml:lang="ze">ze_desc</description>' \
                     '<grouplist><groupid>package1</groupid><groupid>package2</groupid>' \
                     '</grouplist><optionlist>' \
                     '<groupid>package3</groupid>' \
                     '<groupid default="true">package4</groupid>' \
                     '</optionlist></environment>'

        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)
Ejemplo n.º 7
0
 def setUp(self):
     self.working_dir = tempfile.mkdtemp()
     self.context = PackageXMLFileContext(self.working_dir)
     self.context.metadata_file_handle = mock.Mock()
     self.maxDiff = None
     self.context._write_root_tag_close = mock.Mock()
Ejemplo n.º 8
0
class TestPackageXMLFileContext(unittest.TestCase):
    def setUp(self):
        self.working_dir = tempfile.mkdtemp()
        self.context = PackageXMLFileContext(self.working_dir)
        self.context.metadata_file_handle = mock.Mock()
        self.maxDiff = None
        self.context._write_root_tag_close = mock.Mock()

    def tearDown(self):
        shutil.rmtree(self.working_dir)

    def _generate_group_unit(self, name):
        unit_data = {'package_group_id': name,
                     'repo_id': 'repo1',
                     'user_visible': True,
                     'default': True,
                     'display_order': 0,
                     'name': name,
                     'description': name + u'description',
                     'mandatory_package_names': [],
                     'default_package_names': [],
                     'optional_package_names': [],
                     'conditional_package_names': {}}
        return models.PackageGroup(**unit_data)

    def _generate_category_unit(self, name):
        # TODO fix this like _generate_group_unit above
        unit_key = {'id': name}
        unit_metadata = {'id': name,
                         'user_visible': True,
                         'display_order': 0,
                         'name': name,
                         'description': name + u' – description',
                         'grouplist': []}
        storage_path = os.path.join(self.working_dir, name)
        return Unit(TYPE_ID_PKG_CATEGORY, unit_key, unit_metadata, storage_path)

    def _generate_environment_unit(self, name):
        # TODO fix this like _generate_group_unit above
        unit_key = {'id': name}
        unit_metadata = {'id': name,
                         'display_order': 0,
                         'name': name,
                         'description': name + u' – description',
                         'grouplist': [],
                         'optionlist': []}
        storage_path = os.path.join(self.working_dir, name)
        return Unit(TYPE_ID_PKG_ENVIRONMENT, unit_key, unit_metadata, storage_path)

    def test_write_root_tag_open(self):
        self.context._write_root_tag_open()
        self.context.metadata_file_handle.write.assert_called_once_with(
            '<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" '
            '"comps.dtd">\n<comps>')

    def test_write_root_tag_close(self):
        self.context._write_root_tag_open()
        self.context.metadata_file_handle.write.reset_mock()
        self.context._write_root_tag_close()
        self.context.metadata_file_handle.write.assert_called_once_with(
            '</comps>\n')

    def test_add_package_group_unit_metadata_minimal(self):
        group_unit = self._generate_group_unit('foo')
        self.context.add_package_group_unit_metadata(group_unit)
        source_str = '<group><id>foo</id><default>true</default><uservisible>true</uservisible' \
                     '><display_order>0' \
                     '</display_order><name>foo</name><description>foodescription' \
                     '</description><packagelist /></group>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    def test_add_package_group_unit_metadata_complex(self):
        group_unit = self._generate_group_unit('foo')
        group_unit.translated_name = {u'af': u'af_name', u'ze': u'ze_name'}
        group_unit.default = False
        group_unit.langonly = u'bar'
        group_unit.translated_description = {u'af': u'af_desc', u'ze': u'ze_desc'}
        group_unit.mandatory_package_names = [u'package2', u'package1', u'package3']
        group_unit.default_package_names = [u'package6', u'package5', u'package4']
        group_unit.optional_package_names = [u'package9', u'package8', u'package7']
        group_unit.conditional_package_names = [(u'package10', u'foo,bar,baz')]
        self.context.add_package_group_unit_metadata(group_unit)
        source_str = '<group><id>foo</id>' \
                     '<default>false</default>' \
                     '<uservisible>true</uservisible><display_order>0' \
                     '</display_order><langonly>bar</langonly>' \
                     '<name>foo</name>' \
                     '<name xml:lang="af">af_name</name>' \
                     '<name xml:lang="ze">ze_name</name>' \
                     '<description>foodescription</description>' \
                     '<description xml:lang="af">af_desc</description>' \
                     '<description xml:lang="ze">ze_desc</description>' \
                     '<packagelist><packagereq type="mandatory">package1</packagereq>' \
                     '<packagereq type="mandatory">package2</packagereq>' \
                     '<packagereq type="mandatory">package3</packagereq>' \
                     '<packagereq type="default">package4</packagereq>' \
                     '<packagereq type="default">package5</packagereq>' \
                     '<packagereq type="default">package6</packagereq>' \
                     '<packagereq type="optional">package7</packagereq>' \
                     '<packagereq type="optional">package8</packagereq>' \
                     '<packagereq type="optional">package9</packagereq>' \
                     '<packagereq requires="foo,bar,baz" type="conditional">package10' \
                     '</packagereq>' \
                     '</packagelist></group>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    @skip_broken
    def test_add_package_category_unit_metadata_minimal(self):
        category_unit = self._generate_category_unit('category_name')
        self.context.add_package_category_unit_metadata(category_unit)
        source_str = '<category><id>category_name</id><display_order>0</display_order>' \
                     '<name>category_name</name>' \
                     '<description>category_name – description</description>' \
                     '<grouplist /></category>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    @skip_broken
    def test_add_package_category_unit_metadata_complex(self):
        unit = self._generate_category_unit('category_name')
        unit.unit_key['id'] = None
        unit.metadata['translated_name'] = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.metadata['translated_description'] = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.metadata['packagegroupids'] = [u'package2', u'package1']
        self.context.add_package_category_unit_metadata(unit)
        source_str = '<category><id>category_name</id><display_order>0</display_order>' \
                     '<name>category_name</name>' \
                     '<name xml:lang="af">af_name</name>' \
                     '<name xml:lang="ze">ze_name</name>' \
                     '<description>category_name – description</description>' \
                     '<description xml:lang="af">af_desc</description>' \
                     '<description xml:lang="ze">ze_desc</description>' \
                     '<grouplist>' \
                     '<groupid>package1</groupid>' \
                     '<groupid>package2</groupid>' \
                     '</grouplist>' \
                     '</category>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    @skip_broken
    def test_add_package_environment_unit_metadata_simple(self):
        unit = self._generate_environment_unit('environment_name')
        self.context.add_package_environment_unit_metadata(unit)

        source_str = '<environment><id>environment_name</id><display_order>0</display_order>' \
                     '<name>environment_name</name>' \
                     '<description>environment_name – description</description>' \
                     '<grouplist /><optionlist /></environment>'
        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)

    @skip_broken
    def test_add_package_environment_unit_metadata_complex(self):
        unit = self._generate_environment_unit('environment_name')
        unit.unit_key['id'] = None
        unit.metadata['translated_name'] = {u'af': u'af_name', u'ze': u'ze_name'}
        unit.metadata['translated_description'] = {u'af': u'af_desc', u'ze': u'ze_desc'}
        unit.metadata['group_ids'] = [u'package2', u'package1']
        unit.metadata['options'] = [{'group': 'package3', 'default': False},
                                    {'group': u'package4', 'default': True}]
        self.context.add_package_environment_unit_metadata(unit)
        source_str = '<environment><id>environment_name</id><display_order>0</display_order>' \
                     '<name>environment_name</name>' \
                     '<name xml:lang="af">af_name</name>' \
                     '<name xml:lang="ze">ze_name</name>' \
                     '<description>environment_name – description</description>' \
                     '<description xml:lang="af">af_desc</description>' \
                     '<description xml:lang="ze">ze_desc</description>' \
                     '<grouplist><groupid>package1</groupid><groupid>package2</groupid>' \
                     '</grouplist><optionlist>' \
                     '<groupid>package3</groupid>' \
                     '<groupid default="true">package4</groupid>' \
                     '</optionlist></environment>'

        source_element = ElementTree.fromstring(source_str)
        xml_str = self.context.metadata_file_handle.write.call_args[0][0]
        target_element = ElementTree.fromstring(xml_str)
        compare_element(source_element, target_element)