import pytest
from ceph_volume.devices import lvm
from ceph_volume.api import lvm as api
+from mock import patch, Mock
# TODO: add tests for following commands -
# ceph-volume list
stdout, stderr = capsys.readouterr()
assert stdout == '{}\n'
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_empty_device_json_zero_exit_status(self, is_root,factory,capsys):
args = factory(format='json', device='/dev/sda1')
lvm.listing.List([]).list(args)
with pytest.raises(SystemExit):
lvm.listing.List([]).list(args)
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_empty_device_zero_exit_status(self, is_root, factory):
args = factory(format='pretty', device='/dev/sda1')
with pytest.raises(SystemExit):
class TestFullReport(object):
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_no_ceph_lvs(self, monkeypatch):
# ceph lvs are detected by looking into its tags
osd = api.Volume(lv_name='volume1', lv_path='/dev/VolGroup/lv',
result = lvm.listing.List([]).full_report()
assert result == {}
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_ceph_data_lv_reported(self, monkeypatch):
tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data'
pv = api.PVolume(pv_name='/dev/sda1', pv_tags={}, pv_uuid="0000",
result = lvm.listing.List([]).full_report()
assert result['0'][0]['name'] == 'volume1'
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_ceph_journal_lv_reported(self, monkeypatch):
tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data'
journal_tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=journal'
assert result['0'][0]['name'] == 'volume1'
assert result['0'][1]['name'] == 'journal'
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_ceph_wal_lv_reported(self, monkeypatch):
tags = 'ceph.osd_id=0,ceph.wal_uuid=x,ceph.type=data'
wal_tags = 'ceph.osd_id=0,ceph.wal_uuid=x,ceph.type=wal'
assert result['0'][0]['name'] == 'volume1'
assert result['0'][1]['name'] == 'wal'
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
@pytest.mark.parametrize('type_', ['journal', 'db', 'wal'])
def test_physical_2nd_device_gets_reported(self, type_, monkeypatch):
tags = ('ceph.osd_id=0,ceph.{t}_uuid=x,ceph.type=data,'
class TestSingleReport(object):
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_not_a_ceph_lv(self, monkeypatch):
# ceph lvs are detected by looking into its tags
lv = api.Volume(lv_name='lv', lv_tags={}, lv_path='/dev/VolGroup/lv',
result = lvm.listing.List([]).single_report('VolGroup/lv')
assert result == {}
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_a_ceph_lv(self, monkeypatch):
# ceph lvs are detected by looking into its tags
tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data'
assert result['0'][0]['path'] == '/dev/VolGroup/lv'
assert result['0'][0]['devices'] == []
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_a_ceph_journal_device(self, monkeypatch):
# ceph lvs are detected by looking into its tags
tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data,' + \
assert result['0'][0]['path'] == '/dev/VolGroup/lv'
assert result['0'][0]['devices'] == ['/dev/sda1', '/dev/sdb1']
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_by_osd_id_for_just_block_dev(self, monkeypatch):
tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=block'
lvs = [ api.Volume(lv_name='lv1', lv_tags=tags, lv_path='/dev/vg/lv1',
assert result['0'][0]['lv_path'] == '/dev/vg/lv1'
assert result['0'][0]['vg_name'] == 'vg'
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_by_osd_id_for_just_data_dev(self, monkeypatch):
tags = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data'
lvs = [ api.Volume(lv_name='lv1', lv_tags=tags, lv_path='/dev/vg/lv1',
assert result['0'][0]['lv_path'] == '/dev/vg/lv1'
assert result['0'][0]['vg_name'] == 'vg'
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_by_osd_id_for_just_block_wal_and_db_dev(self, monkeypatch):
tags1 = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=block'
tags2 = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=wal'
assert result['0'][2]['lv_path'] == '/dev/vg/lv3'
assert result['0'][2]['vg_name'] == 'vg'
-
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_by_osd_id_for_data_and_journal_dev(self, monkeypatch):
tags1 = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=data'
tags2 = 'ceph.osd_id=0,ceph.journal_uuid=x,ceph.type=journal'
assert result['0'][1]['lv_path'] == '/dev/vg/lv2'
assert result['0'][1]['vg_name'] == 'vg'
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_by_nonexistent_osd_id(self, monkeypatch):
lv = api.Volume(lv_name='lv', lv_tags={}, lv_path='/dev/VolGroup/lv',
vg_name='VolGroup')
result = lvm.listing.List([]).single_report('1')
assert result == {}
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_report_a_ceph_lv_with_no_matching_devices(self, monkeypatch):
tags = 'ceph.osd_id=0,ceph.type=data'
lv = api.Volume(lv_name='lv', vg_name='VolGroup', lv_uuid='aaaa',
import os
import pytest
from copy import deepcopy
-from mock.mock import patch, call
+from mock.mock import patch, call, Mock
from ceph_volume import process
from ceph_volume.api import lvm as api
from ceph_volume.devices.lvm import zap
class TestEnsureAssociatedLVs(object):
+ @patch('ceph_volume.devices.lvm.zap.api', Mock(return_value=[]))
def test_nothing_is_found(self):
volumes = []
result = zap.ensure_associated_lvs(volumes)
result = zap.ensure_associated_lvs(volumes)
assert result == ['/dev/VolGroup/lv']
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_multiple_journals_are_found(self):
tags = 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=journal'
volumes = []
assert '/dev/VolGroup/lv1' in result
assert '/dev/VolGroup/lv2' in result
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_multiple_dbs_are_found(self):
tags = 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.journal_uuid=x,ceph.type=db'
volumes = []
assert '/dev/VolGroup/lv1' in result
assert '/dev/VolGroup/lv2' in result
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_multiple_wals_are_found(self):
tags = 'ceph.osd_id=0,ceph.osd_fsid=asdf-lkjh,ceph.wal_uuid=x,ceph.type=wal'
volumes = []
assert '/dev/VolGroup/lv1' in result
assert '/dev/VolGroup/lv2' in result
+ @patch('ceph_volume.api.lvm.process.call', Mock(return_value=('', '', 0)))
def test_multiple_backing_devs_are_found(self):
volumes = []
for _type in ['journal', 'db', 'wal']: