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)
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'}
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)
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)
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)
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)
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)
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)
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)
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)
def setUp(cls): """Runs before every test case""" cls.config = _default() cls.docker_client = MagicMock() cls.create_kwargs = {}
def setUp(cls): """Runs before every test case""" cls.config = _default() cls.container = MagicMock() cls.container.image.attrs = {'Config': {'User': '', 'Cmd': ''}}
def setUp(cls): """Runs before every test case""" cls.qos_params = _default()['qos'] cls.fake_logger = MagicMock()