def test_can_display_the_config_file_of_the_project( self, serialize_mock, mock_config): mock_config.__get__ = unittest.mock.Mock( return_value=Config.from_base_dir( os.path.join(FIXTURE_ROOT, 'project01'))) LXDock(['config']) assert serialize_mock.call_count == 1
def test_can_read_lxc_config(self): project_dir = os.path.join(FIXTURE_ROOT, 'lxc_config') config = Config.from_base_dir(project_dir) assert config.containers[0]['lxc_config'] == { 'global_key': 'global_value', 'cont1_key': 'cont1_value' }
def test_can_return_a_container_by_name(self): homedir = os.path.join(FIXTURE_ROOT, 'project02') config = Config.from_base_dir(homedir) project = Project.from_config('project02', homedir, self.client, config) container = project.get_container_by_name('lxdock-pytest-web') assert container and container.name == 'lxdock-pytest-web'
def test_can_start_all_the_containers_of_a_project(self): homedir = os.path.join(FIXTURE_ROOT, 'project03') config = Config.from_base_dir(homedir) project = Project.from_config('project02', self.client, config) project.up() for container in project.containers: assert container.is_running
def test_can_manage_config_with_interpolated_variables_coming_from_an_env_file( self): project_dir = os.path.join( FIXTURE_ROOT, 'project_with_dynamic_variables_and_env_file') config = Config.from_base_dir(project_dir) assert config['provisioning'][0]['inline'] == 'touch /opt/test01' assert config['provisioning'][1]['inline'] == 'echo $thisisatest'
def test_raises_an_error_if_it_cannot_find_a_container(self): homedir = os.path.join(FIXTURE_ROOT, 'project02') config = Config.from_base_dir(homedir) project = Project.from_config('project02', homedir, self.client, config) with pytest.raises(ProjectError): project.get_container_by_name('dummy')
def test_cannot_open_shell_into_many_containers(self): homedir = os.path.join(FIXTURE_ROOT, 'project02') config = Config.from_base_dir(homedir) project = Project.from_config('project02', homedir, self.client, config) with pytest.raises(ProjectError): project.shell()
def test_can_find_a_config_file_from_a_project_subdirectory(self): project_dir = os.path.join(FIXTURE_ROOT, 'project01', 'subdir') config = Config.from_base_dir(project_dir) assert config.homedir == os.path.join(FIXTURE_ROOT, 'project01') assert config.filename == 'lxdock.yml' assert config['name'] == 'project01' assert config['image'] == 'ubuntu/xenial' assert config['mode'] == 'pull'
def test_can_manage_config_with_interpolated_variables_coming_from_environment_variables(self): project_dir = os.path.join(FIXTURE_ROOT, 'project_with_dynamic_variables') env = EnvironmentVarGuard() with env: env.set('DUMMY_VAR_01', 'test01') config = Config.from_base_dir(project_dir) assert config['provisioning'][0]['inline'] == 'touch /opt/test01' assert config['provisioning'][1]['inline'] == 'echo $thisisatest'
def test_can_display_the_containers_of_the_config_file_of_the_project( self, serialize_mock, mock_config): mock_config.__get__ = unittest.mock.Mock( return_value=Config.from_base_dir( os.path.join(FIXTURE_ROOT, 'project01'))) argv = ['config', '--containers'] n = LXDock(argv) assert serialize_mock.call_count == 0 assert n._parsers['main'].parse_args(argv).containers
def test_can_start_some_specific_containers_of_a_project(self): homedir = os.path.join(FIXTURE_ROOT, 'project02') config = Config.from_base_dir(homedir) project = Project.from_config('project02', self.client, config) project.up(container_names=['lxdock-pytest-web']) container_web = project.get_container_by_name('lxdock-pytest-web') container_ci = project.get_container_by_name('lxdock-pytest-ci') assert container_web.is_running assert container_ci.is_stopped
def test_can_properly_handle_configurations_defining_multiple_containers(self): project_dir = os.path.join(FIXTURE_ROOT, 'project02') config = Config.from_base_dir(project_dir) assert config.containers == [ {'mode': 'pull', 'image': 'ubuntu/xenial', 'name': 'web'}, { 'mode': 'pull', 'hostnames': ['ci.local'], 'image': 'debian/jessie', 'name': 'ci', 'privileged': True, }, ]
def test_can_destroy_some_specific_containers_of_a_project(self): homedir = os.path.join(FIXTURE_ROOT, 'project02') config = Config.from_base_dir(homedir) project = Project.from_config('project02', self.client, config) project.up() project.destroy(container_names=['lxdock-pytest-web']) container_web = project.get_container_by_name('lxdock-pytest-web') container_ci = project.get_container_by_name('lxdock-pytest-ci') assert not container_web.exists assert container_ci.exists
def test_can_be_initialized_from_a_config_file(self): homedir = os.path.join(FIXTURE_ROOT, 'project01') config = Config.from_base_dir(homedir) project = Project.from_config('project01', self.client, config) assert project.name == 'project01' assert project.homedir == homedir assert len(project.containers) == 1 assert project.containers[0].name == 'default' assert project.containers[0].homedir == homedir assert project.containers[0].options['mode'] == 'pull' assert project.containers[0].options['image'] == 'alpine/3.10'
def test_can_load_container_config_from_top_level_options_if_no_containers_are_defined( self): project_dir = os.path.join(FIXTURE_ROOT, 'project01') config = Config.from_base_dir(project_dir) assert config.containers == [ { 'image': 'ubuntu/xenial', 'mode': 'pull', 'name': 'default' }, ]
def test_can_be_initialized_from_a_base_dir(self): project_dir = os.path.join(FIXTURE_ROOT, 'project01') config = Config.from_base_dir(project_dir) assert config['name'] == 'project01' assert config['image'] == 'ubuntu/xenial' assert config['mode'] == 'pull'
def test_raises_an_error_if_a_variable_cannot_be_substituded(self): project_dir = os.path.join(FIXTURE_ROOT, 'project_with_dynamic_variables') with pytest.raises(ConfigFileInterpolationError): Config.from_base_dir(project_dir)
def test_can_serialize_the_parsed_config(self): project_dir = os.path.join(FIXTURE_ROOT, 'project01') config = Config.from_base_dir(project_dir) assert config.serialize( ) == 'image: ubuntu/xenial\nmode: pull\nname: project01\n'
def test_allows_to_check_item_presence_in_config_dict(self): project_dir = os.path.join(FIXTURE_ROOT, 'project01') config = Config.from_base_dir(project_dir) assert 'name' in config
def test_allows_to_get_items_from_config_dict(self): project_dir = os.path.join(FIXTURE_ROOT, 'project01') config = Config.from_base_dir(project_dir) assert config['name'] == 'project01'
def test_raises_an_error_if_the_config_file_is_invalid(self): project_dir = os.path.join(FIXTURE_ROOT, 'project_with_invalid_config') with pytest.raises(ConfigFileValidationError): Config.from_base_dir(project_dir)
def test_raises_an_error_if_the_config_file_cannot_be_found(self): project_dir = os.path.dirname(__file__) with pytest.raises(ConfigFileNotFoundError): Config.from_base_dir(project_dir)
def test_works_if_multiple_config_files_are_found(self): project_dir = os.path.join(FIXTURE_ROOT, 'project_with_multiple_config_files') config = Config.from_base_dir(project_dir) assert config.filename == os.path.join(project_dir, 'lxdock.yml')