]>
Commit | Line | Data |
---|---|---|
1 | import argparse | |
2 | import pytest | |
3 | from ceph_volume import exceptions | |
4 | from ceph_volume.util import arg_validators | |
5 | ||
6 | ||
7 | class TestOSDPath(object): | |
8 | ||
9 | def setup(self): | |
10 | self.validator = arg_validators.OSDPath() | |
11 | ||
12 | def test_is_not_root(self): | |
13 | with pytest.raises(exceptions.SuperUserError): | |
14 | self.validator('') | |
15 | ||
16 | def test_path_is_not_a_directory(self, is_root, tmpfile, monkeypatch): | |
17 | monkeypatch.setattr(arg_validators.disk, 'is_partition', lambda x: False) | |
18 | validator = arg_validators.OSDPath() | |
19 | with pytest.raises(argparse.ArgumentError): | |
20 | validator(tmpfile()) | |
21 | ||
22 | def test_files_are_missing(self, is_root, tmpdir, monkeypatch): | |
23 | tmppath = str(tmpdir) | |
24 | monkeypatch.setattr(arg_validators.disk, 'is_partition', lambda x: False) | |
25 | validator = arg_validators.OSDPath() | |
26 | with pytest.raises(argparse.ArgumentError) as error: | |
27 | validator(tmppath) | |
28 | assert 'Required file (ceph_fsid) was not found in OSD' in str(error) | |
29 | ||
30 | ||
31 | class TestExcludeGroupOptions(object): | |
32 | ||
33 | def setup(self): | |
34 | self.parser = argparse.ArgumentParser() | |
35 | ||
36 | def test_flags_in_one_group(self): | |
37 | argv = ['<prog>', '--filestore', '--bar'] | |
38 | filestore_group = self.parser.add_argument_group('filestore') | |
39 | bluestore_group = self.parser.add_argument_group('bluestore') | |
40 | filestore_group.add_argument('--filestore') | |
41 | bluestore_group.add_argument('--bluestore') | |
42 | result = arg_validators.exclude_group_options( | |
43 | self.parser, | |
44 | ['filestore', 'bluestore'], | |
45 | argv=argv | |
46 | ) | |
47 | assert result is None | |
48 | ||
49 | def test_flags_in_no_group(self): | |
50 | argv = ['<prog>', '--foo', '--bar'] | |
51 | filestore_group = self.parser.add_argument_group('filestore') | |
52 | bluestore_group = self.parser.add_argument_group('bluestore') | |
53 | filestore_group.add_argument('--filestore') | |
54 | bluestore_group.add_argument('--bluestore') | |
55 | result = arg_validators.exclude_group_options( | |
56 | self.parser, | |
57 | ['filestore', 'bluestore'], | |
58 | argv=argv | |
59 | ) | |
60 | assert result is None | |
61 | ||
62 | def test_flags_conflict(self, capsys): | |
63 | argv = ['<prog>', '--filestore', '--bluestore'] | |
64 | filestore_group = self.parser.add_argument_group('filestore') | |
65 | bluestore_group = self.parser.add_argument_group('bluestore') | |
66 | filestore_group.add_argument('--filestore') | |
67 | bluestore_group.add_argument('--bluestore') | |
68 | ||
69 | arg_validators.exclude_group_options( | |
70 | self.parser, ['filestore', 'bluestore'], argv=argv | |
71 | ) | |
72 | stdout, stderr = capsys.readouterr() | |
73 | assert 'Cannot use --filestore (filestore) with --bluestore (bluestore)' in stdout | |
74 | ||
75 | ||
76 | class TestValidDevice(object): | |
77 | ||
78 | def setup(self): | |
79 | self.validator = arg_validators.ValidDevice() | |
80 | ||
81 | def test_path_is_valid(self, fake_call): | |
82 | result = self.validator('/') | |
83 | assert result.abspath == '/' | |
84 | ||
85 | def test_path_is_invalid(self, fake_call): | |
86 | with pytest.raises(argparse.ArgumentError): | |
87 | self.validator('/device/does/not/exist') |