Blame tests/unittests/test_handler/test_handler_apk_configure.py

Packit Service 751c4a
# This file is part of cloud-init. See LICENSE file for license information.
Packit Service 751c4a
Packit Service 751c4a
""" test_apk_configure
Packit Service 751c4a
Test creation of repositories file
Packit Service 751c4a
"""
Packit Service 751c4a
Packit Service 751c4a
import logging
Packit Service 751c4a
import os
Packit Service 751c4a
import textwrap
Packit Service 751c4a
Packit Service 751c4a
from cloudinit import (cloud, helpers, util)
Packit Service 751c4a
Packit Service 751c4a
from cloudinit.config import cc_apk_configure
Packit Service 751c4a
from cloudinit.tests.helpers import (FilesystemMockingTestCase, mock)
Packit Service 751c4a
Packit Service 751c4a
REPO_FILE = "/etc/apk/repositories"
Packit Service 751c4a
DEFAULT_MIRROR_URL = "https://alpine.global.ssl.fastly.net/alpine"
Packit Service 751c4a
CC_APK = 'cloudinit.config.cc_apk_configure'
Packit Service 751c4a
Packit Service 751c4a
Packit Service 751c4a
class TestNoConfig(FilesystemMockingTestCase):
Packit Service 751c4a
    def setUp(self):
Packit Service 751c4a
        super(TestNoConfig, self).setUp()
Packit Service 751c4a
        self.add_patch(CC_APK + '._write_repositories_file', 'm_write_repos')
Packit Service 751c4a
        self.name = "apk-configure"
Packit Service 751c4a
        self.cloud_init = None
Packit Service 751c4a
        self.log = logging.getLogger("TestNoConfig")
Packit Service 751c4a
        self.args = []
Packit Service 751c4a
Packit Service 751c4a
    def test_no_config(self):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test that nothing is done if no apk-configure
Packit Service 751c4a
        configuration is provided.
Packit Service 751c4a
        """
Packit Service 751c4a
        config = util.get_builtin_cfg()
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud_init,
Packit Service 751c4a
                                self.log, self.args)
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(0, self.m_write_repos.call_count)
Packit Service 751c4a
Packit Service 751c4a
Packit Service 751c4a
class TestConfig(FilesystemMockingTestCase):
Packit Service 751c4a
    def setUp(self):
Packit Service 751c4a
        super(TestConfig, self).setUp()
Packit Service 751c4a
        self.new_root = self.tmp_dir()
Packit Service 751c4a
        self.new_root = self.reRoot(root=self.new_root)
Packit Service 751c4a
        for dirname in ['tmp', 'etc/apk']:
Packit Service 751c4a
            util.ensure_dir(os.path.join(self.new_root, dirname))
Packit Service 751c4a
        self.paths = helpers.Paths({'templates_dir': self.new_root})
Packit Service 751c4a
        self.name = "apk-configure"
Packit Service 751c4a
        self.cloud = cloud.Cloud(None, self.paths, None, None, None)
Packit Service 751c4a
        self.log = logging.getLogger("TestNoConfig")
Packit Service 751c4a
        self.args = []
Packit Service 751c4a
Packit Service 751c4a
    @mock.patch(CC_APK + '._write_repositories_file')
Packit Service 751c4a
    def test_no_repo_settings(self, m_write_repos):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test that nothing is written if the 'alpine-repo' key
Packit Service 751c4a
        is not present.
Packit Service 751c4a
        """
Packit Service 751c4a
        config = {"apk_repos": {}}
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(0, m_write_repos.call_count)
Packit Service 751c4a
Packit Service 751c4a
    @mock.patch(CC_APK + '._write_repositories_file')
Packit Service 751c4a
    def test_empty_repo_settings(self, m_write_repos):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test that nothing is written if 'alpine_repo' list is empty.
Packit Service 751c4a
        """
Packit Service 751c4a
        config = {"apk_repos": {"alpine_repo": []}}
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(0, m_write_repos.call_count)
Packit Service 751c4a
Packit Service 751c4a
    def test_only_main_repo(self):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test when only details of main repo is written to file.
Packit Service 751c4a
        """
Packit Service 751c4a
        alpine_version = 'v3.12'
Packit Service 751c4a
        config = {
Packit Service 751c4a
            "apk_repos": {
Packit Service 751c4a
                "alpine_repo": {
Packit Service 751c4a
                    "version": alpine_version
Packit Service 751c4a
                }
Packit Service 751c4a
            }
Packit Service 751c4a
        }
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        expected_content = textwrap.dedent("""\
Packit Service 751c4a
            #
Packit Service 751c4a
            # Created by cloud-init
Packit Service 751c4a
            #
Packit Service 751c4a
            # This file is written on first boot of an instance
Packit Service 751c4a
            #
Packit Service 751c4a
Packit Service 751c4a
            {0}/{1}/main
Packit Service 751c4a
Packit Service 751c4a
            """.format(DEFAULT_MIRROR_URL, alpine_version))
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(expected_content, util.load_file(REPO_FILE))
Packit Service 751c4a
Packit Service 751c4a
    def test_main_and_community_repos(self):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test when only details of main and community repos are
Packit Service 751c4a
        written to file.
Packit Service 751c4a
        """
Packit Service 751c4a
        alpine_version = 'edge'
Packit Service 751c4a
        config = {
Packit Service 751c4a
            "apk_repos": {
Packit Service 751c4a
                "alpine_repo": {
Packit Service 751c4a
                    "version": alpine_version,
Packit Service 751c4a
                    "community_enabled": True
Packit Service 751c4a
                }
Packit Service 751c4a
            }
Packit Service 751c4a
        }
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        expected_content = textwrap.dedent("""\
Packit Service 751c4a
            #
Packit Service 751c4a
            # Created by cloud-init
Packit Service 751c4a
            #
Packit Service 751c4a
            # This file is written on first boot of an instance
Packit Service 751c4a
            #
Packit Service 751c4a
Packit Service 751c4a
            {0}/{1}/main
Packit Service 751c4a
            {0}/{1}/community
Packit Service 751c4a
Packit Service 751c4a
            """.format(DEFAULT_MIRROR_URL, alpine_version))
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(expected_content, util.load_file(REPO_FILE))
Packit Service 751c4a
Packit Service 751c4a
    def test_main_community_testing_repos(self):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test when details of main, community and testing repos
Packit Service 751c4a
        are written to file.
Packit Service 751c4a
        """
Packit Service 751c4a
        alpine_version = 'v3.12'
Packit Service 751c4a
        config = {
Packit Service 751c4a
            "apk_repos": {
Packit Service 751c4a
                "alpine_repo": {
Packit Service 751c4a
                    "version": alpine_version,
Packit Service 751c4a
                    "community_enabled": True,
Packit Service 751c4a
                    "testing_enabled": True
Packit Service 751c4a
                }
Packit Service 751c4a
            }
Packit Service 751c4a
        }
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        expected_content = textwrap.dedent("""\
Packit Service 751c4a
            #
Packit Service 751c4a
            # Created by cloud-init
Packit Service 751c4a
            #
Packit Service 751c4a
            # This file is written on first boot of an instance
Packit Service 751c4a
            #
Packit Service 751c4a
Packit Service 751c4a
            {0}/{1}/main
Packit Service 751c4a
            {0}/{1}/community
Packit Service 751c4a
            #
Packit Service 751c4a
            # Testing - using with non-Edge installation may cause problems!
Packit Service 751c4a
            #
Packit Service 751c4a
            {0}/edge/testing
Packit Service 751c4a
Packit Service 751c4a
            """.format(DEFAULT_MIRROR_URL, alpine_version))
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(expected_content, util.load_file(REPO_FILE))
Packit Service 751c4a
Packit Service 751c4a
    def test_edge_main_community_testing_repos(self):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test when details of main, community and testing repos
Packit Service 751c4a
        for Edge version of Alpine are written to file.
Packit Service 751c4a
        """
Packit Service 751c4a
        alpine_version = 'edge'
Packit Service 751c4a
        config = {
Packit Service 751c4a
            "apk_repos": {
Packit Service 751c4a
                "alpine_repo": {
Packit Service 751c4a
                    "version": alpine_version,
Packit Service 751c4a
                    "community_enabled": True,
Packit Service 751c4a
                    "testing_enabled": True
Packit Service 751c4a
                }
Packit Service 751c4a
            }
Packit Service 751c4a
        }
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        expected_content = textwrap.dedent("""\
Packit Service 751c4a
            #
Packit Service 751c4a
            # Created by cloud-init
Packit Service 751c4a
            #
Packit Service 751c4a
            # This file is written on first boot of an instance
Packit Service 751c4a
            #
Packit Service 751c4a
Packit Service 751c4a
            {0}/{1}/main
Packit Service 751c4a
            {0}/{1}/community
Packit Service 751c4a
            {0}/{1}/testing
Packit Service 751c4a
Packit Service 751c4a
            """.format(DEFAULT_MIRROR_URL, alpine_version))
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(expected_content, util.load_file(REPO_FILE))
Packit Service 751c4a
Packit Service 751c4a
    def test_main_community_testing_local_repos(self):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test when details of main, community, testing and
Packit Service 751c4a
        local repos are written to file.
Packit Service 751c4a
        """
Packit Service 751c4a
        alpine_version = 'v3.12'
Packit Service 751c4a
        local_repo_url = 'http://some.mirror/whereever'
Packit Service 751c4a
        config = {
Packit Service 751c4a
            "apk_repos": {
Packit Service 751c4a
                "alpine_repo": {
Packit Service 751c4a
                    "version": alpine_version,
Packit Service 751c4a
                    "community_enabled": True,
Packit Service 751c4a
                    "testing_enabled": True
Packit Service 751c4a
                },
Packit Service 751c4a
                "local_repo_base_url": local_repo_url
Packit Service 751c4a
            }
Packit Service 751c4a
        }
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        expected_content = textwrap.dedent("""\
Packit Service 751c4a
            #
Packit Service 751c4a
            # Created by cloud-init
Packit Service 751c4a
            #
Packit Service 751c4a
            # This file is written on first boot of an instance
Packit Service 751c4a
            #
Packit Service 751c4a
Packit Service 751c4a
            {0}/{1}/main
Packit Service 751c4a
            {0}/{1}/community
Packit Service 751c4a
            #
Packit Service 751c4a
            # Testing - using with non-Edge installation may cause problems!
Packit Service 751c4a
            #
Packit Service 751c4a
            {0}/edge/testing
Packit Service 751c4a
Packit Service 751c4a
            #
Packit Service 751c4a
            # Local repo
Packit Service 751c4a
            #
Packit Service 751c4a
            {2}/{1}
Packit Service 751c4a
Packit Service 751c4a
            """.format(DEFAULT_MIRROR_URL, alpine_version, local_repo_url))
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(expected_content, util.load_file(REPO_FILE))
Packit Service 751c4a
Packit Service 751c4a
    def test_edge_main_community_testing_local_repos(self):
Packit Service 751c4a
        """
Packit Service 751c4a
        Test when details of main, community, testing and local repos
Packit Service 751c4a
        for Edge version of Alpine are written to file.
Packit Service 751c4a
        """
Packit Service 751c4a
        alpine_version = 'edge'
Packit Service 751c4a
        local_repo_url = 'http://some.mirror/whereever'
Packit Service 751c4a
        config = {
Packit Service 751c4a
            "apk_repos": {
Packit Service 751c4a
                "alpine_repo": {
Packit Service 751c4a
                    "version": alpine_version,
Packit Service 751c4a
                    "community_enabled": True,
Packit Service 751c4a
                    "testing_enabled": True
Packit Service 751c4a
                },
Packit Service 751c4a
                "local_repo_base_url": local_repo_url
Packit Service 751c4a
            }
Packit Service 751c4a
        }
Packit Service 751c4a
Packit Service 751c4a
        cc_apk_configure.handle(self.name, config, self.cloud, self.log,
Packit Service 751c4a
                                self.args)
Packit Service 751c4a
Packit Service 751c4a
        expected_content = textwrap.dedent("""\
Packit Service 751c4a
            #
Packit Service 751c4a
            # Created by cloud-init
Packit Service 751c4a
            #
Packit Service 751c4a
            # This file is written on first boot of an instance
Packit Service 751c4a
            #
Packit Service 751c4a
Packit Service 751c4a
            {0}/{1}/main
Packit Service 751c4a
            {0}/{1}/community
Packit Service 751c4a
            {0}/edge/testing
Packit Service 751c4a
Packit Service 751c4a
            #
Packit Service 751c4a
            # Local repo
Packit Service 751c4a
            #
Packit Service 751c4a
            {2}/{1}
Packit Service 751c4a
Packit Service 751c4a
            """.format(DEFAULT_MIRROR_URL, alpine_version, local_repo_url))
Packit Service 751c4a
Packit Service 751c4a
        self.assertEqual(expected_content, util.load_file(REPO_FILE))
Packit Service 751c4a
Packit Service 751c4a
Packit Service 751c4a
# vi: ts=4 expandtab