Пример #1
0
 def test_translate_obs_uri_inside_buildservice(
         self, mock_buildservice, mock_warn
 ):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'rpm-md')
     uri.runtime_config = self.runtime_config
     assert uri.translate(False) == \
         'obs_server/openSUSE:/Leap:/42.2/standard'
     assert mock_warn.called
Пример #2
0
 def test_translate_obs_uri_inside_buildservice(
     self, mock_buildservice
 ):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'rpm-md')
     uri.runtime_config = self.runtime_config
     with self._caplog.at_level(logging.WARNING):
         assert uri.translate(False) == \
             'obs_server/openSUSE:/Leap:/42.2/standard'
Пример #3
0
    def test_is_public(self, mock_request):
        # unknown uri schema is considered not public
        uri = Uri('xxx', 'rpm-md')
        assert uri.is_public() is False

        # https is public
        uri = Uri('https://example.com', 'rpm-md')
        assert uri.is_public() is True

        # obs is private with obs_public set to false in config
        uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
        self.runtime_config.is_obs_public = mock.Mock(return_value=False)
        uri.runtime_config = self.runtime_config
        assert uri.is_public() is False

        # unknown uri type considered not public
        uri = Uri('httpx://example.com', 'rpm-md')
        assert uri.is_public() is False
Пример #4
0
 def test_translate_buildservice_obsrepositories_container_path(
     self, mock_buildservice
 ):
     mock_buildservice.return_value = True
     uri = Uri('obsrepositories:/container#latest', 'container')
     assert uri.translate() == ''.join(
         [
             '/usr/src/packages/SOURCES/containers/',
             '_obsrepositories/container#latest'
         ]
     )
Пример #5
0
    def setup(self, mock_mkdtemp, mock_path):
        mock_path.return_value = True
        tmpdirs = ['kiwi_unpack_dir', 'kiwi_layout_dir']

        def call_mkdtemp(prefix):
            return tmpdirs.pop()

        mock_mkdtemp.side_effect = call_mkdtemp
        self.oci_import = RootImportOCI('root_dir',
                                        Uri('file:///image.tar.xz#tag'))
        assert self.oci_import.image_file == '/image.tar.xz'
Пример #6
0
 def test_destructor(self, mock_wipe, mock_mkdtemp, mock_manager):
     mock_mkdtemp.return_value = 'tmpdir'
     manager = mock.Mock()
     manager.mountpoint = mock_mkdtemp.return_value
     manager.is_mounted = mock.Mock(return_value=True)
     mock_manager.return_value = manager
     uri = Uri('iso:///image/CDs/openSUSE-13.2-DVD-x86_64.iso', 'yast2')
     uri.translate()
     uri.__del__()
     manager.umount.assert_called_once_with()
     mock_wipe.assert_called_once_with(manager.mountpoint)
Пример #7
0
 def _setup_solver(self):
     solver = Sat()
     for xml_repo in self.xml_state.get_repository_sections_used_for_build(
     ):
         repo_source = xml_repo.get_source().get_path()
         repo_user = xml_repo.get_username()
         repo_secret = xml_repo.get_password()
         repo_type = xml_repo.get_type()
         solver.add_repository(
             SolverRepository(Uri(repo_source, repo_type), repo_user,
                              repo_secret))
     return solver
Пример #8
0
 def test_translate_obs_uri_not_found(mock_buildservice, mock_request_get,
                                      self):
     mock_buildservice.return_value = False
     mock_request_get.side_effect = Exception('error')
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     self.runtime_config.get_obs_download_server_url = mock.Mock(
         return_value='http://obs_server')
     uri.runtime_config = self.runtime_config
     with raises(KiwiUriOpenError) as exception_info:
         uri.translate(check_build_environment=False)
     assert f'{exception_info.value}' == \
         'http://obs_server/openSUSE:/Leap:/42.2/standard: error'
Пример #9
0
 def _setup_solver(self):
     solver = Sat()
     for xml_repo in self.xml_state.get_repository_sections_used_for_build(
     ):
         repo_source = xml_repo.get_source().get_path()
         repo_sourcetype = xml_repo.get_sourcetype() or ''
         repo_user = xml_repo.get_username()
         repo_secret = xml_repo.get_password()
         repo_type = xml_repo.get_type()
         repo_dist = xml_repo.get_distribution()
         repo_components = xml_repo.get_components()
         if not repo_type:
             repo_type = SolverRepositoryBase(
                 Uri(uri=repo_source, source_type=repo_sourcetype),
                 repo_user, repo_secret).get_repo_type()
         if repo_type == 'apt-deb':
             # Debian based repos can be setup for a specific
             # distribution including a list of individual components.
             # For each component of the selected distribution extra
             # repository metadata exists. In such a case we iterate
             # over the configured dist components and add them as
             # repository each.
             dist_type = solver.set_dist_type('deb')
             if repo_components and repo_dist:
                 for component in repo_components.split():
                     repo_source_for_component = os.sep.join([
                         repo_source.rstrip(os.sep), 'dists', repo_dist,
                         component, f'binary-{dist_type.get("arch")}'
                     ])
                     solver.add_repository(
                         SolverRepository.new(
                             Uri(repo_source_for_component, repo_type,
                                 repo_sourcetype), repo_user, repo_secret))
                 continue
         solver.add_repository(
             SolverRepository.new(
                 Uri(repo_source, repo_type, repo_sourcetype), repo_user,
                 repo_secret))
     return solver
Пример #10
0
 def test_translate_iso_path(self, mock_mkdtemp, mock_manager):
     mock_mkdtemp.return_value = 'tmpdir'
     manager = mock.Mock()
     manager.mountpoint = mock_mkdtemp.return_value
     mock_manager.return_value = manager
     uri = Uri('iso:///image/CDs/openSUSE-13.2-DVD-x86_64.iso', 'yast2')
     result = uri.translate()
     mock_manager.assert_called_once_with(
         device='/image/CDs/openSUSE-13.2-DVD-x86_64.iso',
         mountpoint='tmpdir')
     manager.mount.assert_called_once_with()
     assert result == 'tmpdir'
     uri.mount_stack = []
Пример #11
0
    def test_extract_oci_image_without_tag(self, mock_run, mock_mkdtemp,
                                           mock_path, mock_tar):
        mock_path.return_value = True
        tmpdirs = ['kiwi_uncompressed', 'kiwi_unpack_dir', 'kiwi_layout_dir']

        def call_mkdtemp(prefix):
            return tmpdirs.pop()

        mock_mkdtemp.side_effect = call_mkdtemp
        oci_import = RootImportOCI('root_dir', Uri('file:///image.tar.xz'))
        oci_import.extract_oci_image()
        mock_run.assert_called_once_with(
            ['skopeo', 'copy', 'oci:kiwi_uncompressed', 'oci:kiwi_layout_dir'])
        mock_tar.assert_called_once_with('/image.tar.xz')
Пример #12
0
 def import_repositories_marked_as_imageinclude(self) -> None:
     """
     Those <repository> sections which are marked with the
     imageinclude attribute should be permanently added to
     the image repository configuration
     """
     repository_sections = \
         self.xml_state.get_repository_sections_used_in_image()
     root = RootInit(
         root_dir=self.root_dir, allow_existing=True
     )
     repo = Repository.new(
         RootBind(root), self.xml_state.get_package_manager()
     )
     repo.use_default_location()
     for xml_repo in repository_sections:
         repo_type = xml_repo.get_type()
         repo_source = xml_repo.get_source().get_path()
         repo_user = xml_repo.get_username()
         repo_secret = xml_repo.get_password()
         repo_alias = xml_repo.get_alias()
         repo_priority = xml_repo.get_priority()
         repo_dist = xml_repo.get_distribution()
         repo_components = xml_repo.get_components()
         repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck()
         repo_package_gpgcheck = xml_repo.get_package_gpgcheck()
         repo_customization_script = self._get_repo_customization_script(
             xml_repo
         )
         repo_sourcetype = xml_repo.get_sourcetype()
         repo_use_for_bootstrap = False
         uri = Uri(repo_source, repo_type)
         repo_source_translated = uri.translate(
             check_build_environment=False
         )
         if not repo_alias:
             repo_alias = uri.alias()
         log.info('Setting up image repository {0}'.format(repo_source))
         log.info('--> Type: {0}'.format(repo_type))
         log.info('--> Translated: {0}'.format(repo_source_translated))
         log.info('--> Alias: {0}'.format(repo_alias))
         repo.add_repo(
             repo_alias, repo_source_translated,
             repo_type, repo_priority, repo_dist, repo_components,
             repo_user, repo_secret, uri.credentials_file_name(),
             repo_repository_gpgcheck, repo_package_gpgcheck,
             repo_sourcetype, repo_use_for_bootstrap,
             repo_customization_script
         )
Пример #13
0
    def test_extract_oci_image_unknown_uri(self, mock_buildservice, mock_warn,
                                           mock_mkdtemp, mock_run,
                                           mock_exists):
        mock_buildservice.return_value = False
        mock_exists.return_value = True
        tmpdirs = ['kiwi_unpack_dir', 'kiwi_layout_dir']

        def call_mkdtemp(prefix):
            return tmpdirs.pop()

        mock_mkdtemp.side_effect = call_mkdtemp

        with patch.dict('os.environ', {'HOME': '../data'}):
            docker_import = RootImportDocker('root_dir',
                                             Uri('docker://opensuse'))
        docker_import.extract_oci_image()
        mock_run.assert_called_once_with(
            ['skopeo', 'copy', 'docker://opensuse', 'oci:kiwi_layout_dir'])
        assert mock_warn.called
Пример #14
0
    def test_extract_oci_image_unknown_uri(
        self, mock_warn, mock_mkdtemp, mock_run, mock_exists
    ):
        mock_exists.return_value = True
        tmpdirs = ['kiwi_unpack_dir', 'kiwi_layout_dir']

        def call_mkdtemp(prefix):
            return tmpdirs.pop()

        mock_mkdtemp.side_effect = call_mkdtemp

        docker_import = RootImportDocker(
            'root_dir', Uri('docker://opensuse')
        )
        docker_import.extract_oci_image()
        mock_run.assert_called_once_with([
            'skopeo', 'copy', 'docker://opensuse',
            'oci:kiwi_layout_dir'
        ])
        assert mock_warn.called
Пример #15
0
 def setup(self, mock_exists, mock_machine):
     mock_exists.return_value = True
     mock_machine.return_value = 'x86_64'
     self.uri = Uri('file:///image_file.tar.xz')
     self.xml_state = mock.Mock()
     self.xml_state.get_derived_from_image_uri.return_value = self.uri
     self.container_config = {
         'container_name': 'my-container',
         'entry_command': ["--config.cmd='/bin/bash'"]
     }
     self.xml_state.get_container_config = mock.Mock(
         return_value=self.container_config)
     self.xml_state.get_image_version = mock.Mock(return_value='1.2.3')
     self.xml_state.get_build_type_name = mock.Mock(return_value='docker')
     self.xml_state.xml_data.get_name = mock.Mock(return_value='image_name')
     self.setup = mock.Mock()
     kiwi.builder.container.SystemSetup = mock.Mock(return_value=self.setup)
     self.container = ContainerBuilder(self.xml_state, 'target_dir',
                                       'root_dir')
     self.container.result = mock.Mock()
Пример #16
0
    def test_sync_data_unknown_uri(self, mock_OCI, mock_path, mock_md5,
                                   mock_exists):
        mock_exists.return_value = True
        oci = Mock()
        mock_OCI.return_value = oci
        md5 = Mock()
        mock_md5.return_value = Mock()
        with patch.dict('os.environ', {'HOME': '../data'}):
            oci_import = RootImportOCI('root_dir', Uri('docker:image:tag'),
                                       {'archive_transport': 'docker-archive'})

        with self._caplog.at_level(logging.WARNING):
            oci_import.sync_data()
            mock_OCI.assert_called_once_with()
            oci.import_container_image.assert_called_once_with(
                'docker:image:tag')
            oci.unpack.assert_called_once_with()
            oci.import_rootfs.assert_called_once_with('root_dir')
            mock_md5.assert_called_once_with('root_dir/image/imported_root')
            md5.md5.called_once_with('root_dir/image/imported_root.md5')
Пример #17
0
    def setup(self, mock_exists, mock_machine):
        mock_machine.return_value = 'x86_64'
        with patch.dict('os.environ', {'HOME': '../data'}):
            self.uri = Uri('file:///image_file.tar.xz')
        self.xml_state = mock.Mock()
        self.xml_state.get_derived_from_image_uri.return_value = self.uri
        self.container_config = {
            'container_name': 'my-container',
            'entry_command': ["--config.cmd='/bin/bash'"]
        }
        self.xml_state.get_container_config = mock.Mock(
            return_value=self.container_config
        )
        self.xml_state.get_image_version = mock.Mock(
            return_value='1.2.3'
        )
        self.xml_state.get_build_type_name = mock.Mock(
            return_value='docker'
        )
        self.xml_state.xml_data.get_name = mock.Mock(
            return_value='image_name'
        )
        self.setup = mock.Mock()
        kiwi.builder.container.SystemSetup = mock.Mock(
            return_value=self.setup
        )

        def side_effect(filename):
            if filename.endswith('.config/kiwi/config.yml'):
                return False
            elif filename.endswith('etc/kiwi.yml'):
                return False
            else:
                return True

        mock_exists.side_effect = side_effect

        self.container = ContainerBuilder(
            self.xml_state, 'target_dir', 'root_dir'
        )
        self.container.result = mock.Mock()
Пример #18
0
    def import_repositories_marked_as_imageinclude(self):
        """
        Those <repository> sections which are marked with the
        imageinclude attribute should be permanently added to
        the image repository configuration
        """
        repository_sections = self.xml_state.get_repository_sections()
        root = RootInit(root_dir=self.root_dir, allow_existing=True)
        repo = Repository(RootBind(root), self.xml_state.get_package_manager())
        repo.use_default_location()
        for xml_repo in repository_sections:
            repo_marked_for_image_include = xml_repo.get_imageinclude()

            if repo_marked_for_image_include:
                repo_type = xml_repo.get_type()
                repo_source = xml_repo.get_source().get_path()
                repo_user = xml_repo.get_username()
                repo_secret = xml_repo.get_password()
                repo_alias = xml_repo.get_alias()
                repo_priority = xml_repo.get_priority()
                repo_dist = xml_repo.get_distribution()
                repo_components = xml_repo.get_components()
                repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck()
                repo_package_gpgcheck = xml_repo.get_package_gpgcheck()
                uri = Uri(repo_source, repo_type)
                repo_source_translated = uri.translate()
                if not repo_alias:
                    repo_alias = uri.alias()
                log.info('Setting up image repository %s', repo_source)
                log.info('--> Type: %s', repo_type)
                log.info('--> Translated: %s', repo_source_translated)
                log.info('--> Alias: %s', repo_alias)
                repo.add_repo(repo_alias, repo_source_translated, repo_type,
                              repo_priority, repo_dist, repo_components,
                              repo_user, repo_secret,
                              uri.credentials_file_name(),
                              repo_repository_gpgcheck, repo_package_gpgcheck)
Пример #19
0
    def test_extract_oci_image(
        self, mock_mkdtemp, mock_compress, mock_run, mock_exists
    ):
        mock_exists.return_value = True
        uncompress = mock.Mock()
        uncompress.uncompressed_filename = 'tmp_uncompressed'
        mock_compress.return_value = uncompress
        tmpdirs = ['kiwi_unpack_dir', 'kiwi_layout_dir']

        def call_mkdtemp(prefix):
            return tmpdirs.pop()

        mock_mkdtemp.side_effect = call_mkdtemp

        docker_import = RootImportDocker(
            'root_dir', Uri('file:///image.tar.xz')
        )
        docker_import.extract_oci_image()
        mock_compress.assert_called_once_with('/image.tar.xz')
        uncompress.uncompress.assert_called_once_with(True)
        mock_run.assert_called_once_with([
            'skopeo', 'copy', 'docker-archive:tmp_uncompressed',
            'oci:kiwi_layout_dir'
        ])
Пример #20
0
    def test_extract_uncompressed_oci_image(self, mock_buildservice,
                                            mock_mkdtemp, mock_compress,
                                            mock_run, mock_exists):
        mock_buildservice.return_value = False
        mock_exists.return_value = True
        uncompress = mock.Mock()
        uncompress.get_format = mock.Mock(return_value=None)
        mock_compress.return_value = uncompress
        tmpdirs = ['kiwi_unpack_dir', 'kiwi_layout_dir']

        def call_mkdtemp(prefix):
            return tmpdirs.pop()

        mock_mkdtemp.side_effect = call_mkdtemp

        with patch.dict('os.environ', {'HOME': '../data'}):
            docker_import = RootImportDocker('root_dir',
                                             Uri('file:///image.tar'))
        docker_import.extract_oci_image()
        mock_compress.assert_called_once_with('/image.tar')
        mock_run.assert_called_once_with([
            'skopeo', 'copy', 'docker-archive:/image.tar',
            'oci:kiwi_layout_dir:base_layer'
        ])
Пример #21
0
 def test_alias(self):
     uri = Uri('https://example.com', 'rpm-md')
     assert uri.alias() == hashlib.md5(
         'https://example.com'.encode()).hexdigest()
Пример #22
0
 def test_is_remote_in_buildservice(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     assert uri.is_remote() is False
Пример #23
0
 def test_get_fragment(self):
     uri = Uri('file:///myimage.tar#tag')
     assert uri.get_fragment() == 'tag'
     uri = Uri('file:///myimage.tar')
     assert uri.get_fragment() == ''
Пример #24
0
 def test_translate_obs_uri_not_found(mock_request_get, self):
     mock_request_get.side_effect = Exception
     uri = Uri('obs://openSUSE:Leap:42.2/standard', 'yast2')
     uri.runtime_config = self.runtime_config
     with raises(KiwiUriOpenError):
         uri.translate()
Пример #25
0
 def test_translate_obsrepositories_outside_buildservice(
         self, mock_buildservice):
     mock_buildservice.return_value = False
     uri = Uri('obsrepositories:/')
     with raises(KiwiUriStyleUnknown):
         uri.translate()
Пример #26
0
 def test_translate_unsupported_style(self):
     uri = Uri('ms://foo', 'rpm-md')
     with raises(KiwiUriStyleUnknown):
         uri.translate()
Пример #27
0
 def test_translate_unknown_style(self):
     uri = Uri('xxx', 'rpm-md')
     with raises(KiwiUriStyleUnknown):
         uri.translate()
Пример #28
0
 def test_is_remote_raises_type_error(self):
     uri = Uri('xtp://download.example.com', 'rpm-md')
     with raises(KiwiUriTypeUnknown):
         uri.is_remote()
Пример #29
0
 def test_translate_buildservice_obsrepositories(self, mock_buildservice):
     mock_buildservice.return_value = True
     uri = Uri('obsrepositories:/')
     assert uri.translate() == '/usr/src/packages/SOURCES/repos'
Пример #30
0
 def test_is_remote_raises_style_error(self):
     uri = Uri('xxx', 'rpm-md')
     with raises(KiwiUriStyleUnknown):
         uri.is_remote()