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