Exemplo n.º 1
0
    def test_return_type(self, fake_read):
        """``config`` The 'get_config' function returns a tuple"""
        fake_read.return_value = False

        output = config.get_config()
        expected = (config._default(), True, '/etc/container_shell/config.ini')

        self.assertEqual(output, expected)
Exemplo n.º 2
0
 def setUp(cls):
     """Runs before every test case"""
     cls.config = _default()
     cls.logger = MagicMock()
     cls.container = MagicMock()
     cls.container.id = 'aabbcc'
     cls.docker_client = MagicMock()
     cls.docker_client.api.exec_create.return_value = {'Id': '1234abc'}
Exemplo n.º 3
0
    def test_get_container_standalone(self, fake_printerr, fake_dockage,
                                      fake_docker, fake_dockerpty,
                                      fake_get_config, fake_exit,
                                      fake_get_logger, fake_register,
                                      fake_get_container):
        """``container_shell`` Runs dockerpty.start for standalone containers"""
        fake_get_config.return_value = (_default(), True, '')
        fake_get_container.return_value = MagicMock(), True

        container_shell.main(cli_args=[])

        self.assertTrue(fake_dockerpty.start.called)
Exemplo n.º 4
0
    def test_basic(self, fake_printerr, fake_dockage, fake_docker,
                   fake_dockerpty, fake_get_config, fake_get_logger,
                   fake_register, fake_block_on_init):
        """``container_shell`` The 'main' function is runnable"""
        fake_get_config.return_value = (_default(), True, '')
        try:
            container_shell.main(cli_args=[])
        except Exception as doh:
            runable = False
        else:
            runable = True

        self.assertTrue(runable)
Exemplo n.º 5
0
    def test_admin(self, fake_printerr, fake_dockage, fake_docker,
                   fake_dockerpty, fake_get_config, fake_getpwnam, fake_exit,
                   fake_Popen, fake_get_logger, fake_register,
                   fake_block_on_init):
        """``conatiner_shell`` Skips invoking a container if the identity is white-listed"""
        fake_config = _default()
        fake_config['config']['skip_users'] = 'admin,bob,liz'
        fake_get_config.return_value = (fake_config, True, '')
        fake_user_info = MagicMock()
        fake_user_info.pw_name = 'admin'
        fake_user_info.pw_uid = 1000
        fake_getpwnam.return_value = fake_user_info

        container_shell.main(cli_args=[])

        self.assertTrue(fake_Popen.called)
Exemplo n.º 6
0
    def test_custom_config(self, fake_printerr, fake_dockage, fake_docker,
                           fake_dockerpty, fake_get_config, fake_get_logger,
                           fake_register, fake_block_on_init):
        """``container_shell`` Logs custom configs at DEBUG level"""
        fake_logger = MagicMock()
        fake_get_logger.return_value = fake_logger
        fake_get_config.return_value = (_default(), False, '')

        try:
            container_shell.main(cli_args=[])
        except Exception as doh:
            ok = False
        else:
            ok = fake_logger.debug.called

        self.assertTrue(ok)
Exemplo n.º 7
0
    def test_basic(self, fake_qos, fake_dns, fake_mounts,
                   fake_container_command, fake_generate_name):
        """``dockage`` 'build_args' is a simple wrapper"""
        config = _default()
        username = '******'
        user_uid = 9001
        user_gid = 9001
        logger = MagicMock()

        dockage.build_args(config, username, user_uid, user_gid, logger)

        self.assertTrue(fake_qos.called)
        self.assertTrue(fake_dns.called)
        self.assertTrue(fake_mounts.called)
        self.assertTrue(fake_container_command.called)
        self.assertTrue(fake_generate_name.called)
Exemplo n.º 8
0
    def test_get_container_failure(self, fake_printerr, fake_dockage,
                                   fake_docker, fake_dockerpty,
                                   fake_get_config, fake_exit, fake_get_logger,
                                   fake_register, fake_get_container):
        """``container_shell`` Prints an error if unable to obtain a container"""
        fake_docker.errors.DockerException = Exception
        fake_get_config.return_value = (_default(), True, '')
        fake_get_container.side_effect = docker.errors.DockerException(
            'testing')

        container_shell.main(cli_args=[])

        the_args, _ = fake_printerr.call_args_list
        error_msg = the_args[0][0]
        expected_msg = 'Failed to create login environment'

        self.assertEqual(error_msg, expected_msg)
Exemplo n.º 9
0
    def test_update_failure(self, fake_printerr, fake_dockage, fake_docker,
                            fake_dockerpty, fake_get_config, fake_exit,
                            fake_get_logger, fake_register,
                            fake_block_on_init):
        """``container_shell`` Prints an error and exits if unable to update the container image"""
        fake_docker.errors.DockerException = Exception  # Hack because I mock all of the `docker` lib
        fake_get_config.return_value = (_default(), True, '')
        fake_docker_client = MagicMock()
        fake_docker_client.images.pull.side_effect = docker.errors.DockerException(
            'testing')
        fake_docker.from_env.return_value = fake_docker_client

        container_shell.main(cli_args=[])

        the_args, _ = fake_printerr.call_args
        error_msg = the_args[0]
        expected_msg = 'Unable to update login environment'

        self.assertEqual(error_msg, expected_msg)
Exemplo n.º 10
0
    def test_defaults(self):
        """``config`` The '_default' function returns the expected default config values"""
        test_config = ConfigParser()
        test_config.add_section('config')
        test_config.add_section('logging')
        test_config.add_section('dns')
        test_config.add_section('mounts')
        test_config.add_section('qos')
        test_config.add_section('binaries')

        test_config.set('config', 'image', 'debian:latest')
        test_config.set('config', 'hostname', 'someserver')
        test_config.set('config', 'auto_refresh', '')
        test_config.set('config', 'skip_users', '')
        test_config.set('config', 'create_user', 'true')
        test_config.set('config', 'command', '')
        test_config.set('config', 'term_signal', 'SIGHUP')
        test_config.set('config', 'docker_timeout', '300')
        test_config.set('config', 'auto_remove', 'true')
        test_config.set('config', 'persist', '')
        test_config.set('config', 'persist_egrep', 'screen|tmux|coreutils')
        test_config.set('logging', 'location',
                        '/var/log/container_shell/messages.log')
        test_config.set('logging', 'max_size', '1024000')  # 1MB
        test_config.set('logging', 'max_count', '3')
        test_config.set('logging', 'level', 'INFO')
        test_config.set('dns', 'servers', '')
        test_config.set('binaries', 'runuser', '/sbin/runuser')
        test_config.set('binaries', 'useradd', '/usr/sbin/useradd')
        test_config.set('binaries', 'grep', '/usr/bin/grep')
        test_config.set('binaries', 'ps', '/usr/bin/ps')
        test_config.set('binaries', 'id', '/usr/bin/id')

        default_config = config._default()

        self.assertEqual(test_config, default_config)
Exemplo n.º 11
0
 def setUp(cls):
     """Runs before every test case"""
     cls.config = _default()
     cls.docker_client = MagicMock()
     cls.create_kwargs = {}
Exemplo n.º 12
0
 def setUp(cls):
     """Runs before every test case"""
     cls.config = _default()
     cls.container = MagicMock()
     cls.container.image.attrs = {'Config': {'User': '', 'Cmd': ''}}
Exemplo n.º 13
0
 def setUp(cls):
     """Runs before every test case"""
     cls.qos_params = _default()['qos']
     cls.fake_logger = MagicMock()