Exemple #1
0
 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
Exemple #2
0
 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'
Exemple #4
0
 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
Exemple #5
0
 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()
Exemple #8
0
 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'
Exemple #9
0
 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'
Exemple #10
0
 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
Exemple #11
0
 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
Exemple #12
0
 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,
         },
     ]
Exemple #13
0
 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
Exemple #14
0
 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'
Exemple #15
0
 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'
         },
     ]
Exemple #16
0
 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'
Exemple #17
0
 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)
Exemple #18
0
 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'
Exemple #19
0
 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
Exemple #20
0
 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'
Exemple #21
0
 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)
Exemple #22
0
 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)
Exemple #23
0
 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')