def test_size_capacity(self): params = make_init_params() size_blk = params['capacity'] // sc.BLOCK_SIZE_512 md = volume.VolumeMetadata(**params) new_size_blk = size_blk * 2 md[sc.SIZE] = new_size_blk assert md.capacity == new_size_blk * sc.BLOCK_SIZE_512
def test_max_size(self, version, md_params): md = volume.VolumeMetadata( ctime=1440935038, description=self.MAX_DESCRIPTION, disktype="ISOF", domain='75f8a1bb-4504-4314-91ca-d9365a30692b', format="RAW", generation=sc.MAX_GENERATION, image='75f8a1bb-4504-4314-91ca-d9365a30692b', legality='ILLEGAL', # Blank UUID for RAW, can be real UUID for COW. puuid=sc.BLANK_UUID, capacity=md_params['capacity'], type=md_params['type'], voltype='INTERNAL', ) md_len = len(md.storage_format(version)) # Needed for documenting sc.MAX_DESCRIPTION. md_fields = md_len - sc.DESCRIPTION_SIZE md_free = sc.METADATA_SIZE - md_len # To see this, run: # tox -e storage-py27 tests/storage/volume_metadata_test.py -- -vs print("version={} type={} length={} fields={} free={}".format( version, md_params['type'], md_len, md_fields, md_free)) assert sc.METADATA_SIZE >= md_len
def test_storage_format_overrides(self): params = make_init_params() md = volume.VolumeMetadata(**params) capacity = md.size * sc.BLOCK_SIZE_512 data = md.storage_format(4, CAP=capacity) assert "SIZE=%s\n" % md.size in data assert "CAP=%s\n" % capacity in data
def test_from_lines_v5(self): data = make_init_params() md = volume.VolumeMetadata(**data) lines = md.storage_format(5).splitlines() md = volume.VolumeMetadata.from_lines(lines) assert int(data['capacity']) == md.capacity
def test_from_lines_no_size_and_capacity(self): data = make_init_params() md = volume.VolumeMetadata(**data) lines = md.storage_format(5).splitlines() lines.remove(b"CAP=1073741824") with pytest.raises(se.MetaDataKeyNotFoundError): volume.VolumeMetadata.from_lines(lines)
def test_size(self): # SIZE in blocks is legacy option, make sure setting and getting SIZE # works when we replace it with CAP in bytes. params = make_init_params() size_blk = params['capacity'] // sc.BLOCK_SIZE_512 md = volume.VolumeMetadata(**params) new_size_blk = size_blk * 2 md[sc.SIZE] = new_size_blk assert md[sc.SIZE] == str(new_size_blk)
def test_from_lines_v4(self): data = make_init_params() md = volume.VolumeMetadata(**data) lines = md.storage_format(5).splitlines() lines.remove(b"CAP=1073741824") lines.insert(0, b"SIZE=4096") md = volume.VolumeMetadata.from_lines(lines) assert md.capacity == 2 * MiB
def test_dict_interface(self): params = make_init_params() md = volume.VolumeMetadata(**params) assert md[sc.DESCRIPTION] == params['description'] assert md[sc.DISKTYPE] == params['disktype'] assert md[sc.DOMAIN] == params['domain'] assert md[sc.FORMAT] == params['format'] assert md[sc.IMAGE] == params['image'] assert md[sc.PUUID] == params['puuid'] assert md[sc.CAPACITY] == str(params['capacity']) assert md[sc.TYPE] == params['type'] assert md[sc.VOLTYPE] == params['voltype'] assert md[sc.DISKTYPE] == params['disktype'] assert md[sc.GENERATION] == params['generation']
def test_from_lines_common(self, monkeypatch, version): data = make_init_params() monkeypatch.setattr(time, 'time', lambda: FAKE_TIME) md = volume.VolumeMetadata(**data) lines = md.storage_format(version).splitlines() md = volume.VolumeMetadata.from_lines(lines) assert data['domain'] == md.domain assert data['image'] == md.image assert data['puuid'] == md.puuid assert data['format'] == md.format assert data['type'] == md.type assert data['voltype'] == md.voltype assert str(data['disktype']) == md.disktype assert data['description'] == md.description assert FAKE_TIME == md.ctime assert data['legality'] == md.legality assert int(data['generation']) == md.generation
def test_create_info(self, monkeypatch): params = make_init_params() expected = dict(CTIME=str(FAKE_TIME), DESCRIPTION=params['description'], DISKTYPE=params['disktype'], DOMAIN=params['domain'], FORMAT=params['format'], IMAGE=params['image'], LEGALITY=params['legality'], PUUID=params['puuid'], CAP=str(params['capacity']), TYPE=params['type'], VOLTYPE=params['voltype'], GEN=params['generation']) monkeypatch.setattr(time, 'time', lambda: FAKE_TIME) info = volume.VolumeMetadata(**params) for key, value in six.iteritems(expected): assert info[key] == value
def test_storage_format_v5(self): params = make_init_params(ctime=FAKE_TIME) expected = textwrap.dedent("""\ CAP=%(capacity)s CTIME=%(ctime)s DESCRIPTION=%(description)s DISKTYPE=%(disktype)s DOMAIN=%(domain)s FORMAT=%(format)s GEN=%(generation)s IMAGE=%(image)s LEGALITY=%(legality)s PUUID=%(puuid)s TYPE=%(type)s VOLTYPE=%(voltype)s EOF """ % params).encode("utf-8") md = volume.VolumeMetadata(**params) assert expected == md.storage_format(5)
def test_dump(self, monkeypatch): params = make_init_params() monkeypatch.setattr(time, 'time', lambda: FAKE_TIME) md = volume.VolumeMetadata(**params) expected = { 'capacity': params['capacity'], 'ctime': FAKE_TIME, 'description': params['description'], 'disktype': params['disktype'], 'format': params['format'], 'generation': params['generation'], 'image': params['image'], 'legality': params['legality'], 'parent': params['puuid'], 'type': params['type'], 'voltype': params['voltype'] } assert md.dump() == expected
def test_create_info(self): params = make_init_params() expected = dict(CTIME=str(FAKE_TIME), DESCRIPTION=params['description'], DISKTYPE=params['disktype'], DOMAIN=params['domain'], FORMAT=params['format'], IMAGE=params['image'], LEGALITY=params['legality'], MTIME="0", POOL_UUID="", PUUID=params['puuid'], SIZE=str(params['size']), TYPE=params['type'], VOLTYPE=params['voltype'], GEN=params['generation']) with MonkeyPatchScope([[time, 'time', lambda: FAKE_TIME]]): info = volume.VolumeMetadata(**params).legacy_info() self.assertEqual(expected, info)
def test_storage_format(self): params = make_init_params(ctime=FAKE_TIME) expected = textwrap.dedent("""\ CTIME=%(ctime)s DESCRIPTION=%(description)s DISKTYPE=%(disktype)s DOMAIN=%(domain)s FORMAT=%(format)s GEN=%(generation)s IMAGE=%(image)s LEGALITY=%(legality)s MTIME=0 POOL_UUID= PUUID=%(puuid)s SIZE=%(size)s TYPE=%(type)s VOLTYPE=%(voltype)s EOF """ % params) md = volume.VolumeMetadata(**params) self.assertEqual(expected, md.storage_format())
def test_storage_format_v4(self): params = make_init_params(ctime=FAKE_TIME) expected_params = dict(params) expected_params['size'] = params['capacity'] // sc.BLOCK_SIZE_512 expected = textwrap.dedent("""\ CTIME=%(ctime)s DESCRIPTION=%(description)s DISKTYPE=%(disktype)s DOMAIN=%(domain)s FORMAT=%(format)s GEN=%(generation)s IMAGE=%(image)s LEGALITY=%(legality)s MTIME=0 PUUID=%(puuid)s SIZE=%(size)s TYPE=%(type)s VOLTYPE=%(voltype)s EOF """ % expected_params).encode("utf-8") md = volume.VolumeMetadata(**params) assert expected == md.storage_format(4)
def test_capacity_integer(self): params = make_init_params() md = volume.VolumeMetadata(**params) with pytest.raises(AssertionError): md.capacity = "fail"
def test_storage_format_overrides(self): params = make_init_params() md = volume.VolumeMetadata(**params) data = md.storage_format(4, CAP=md.capacity).decode("utf-8") assert "SIZE=%s\n" % str(int(md.capacity) // sc.BLOCK_SIZE_512) in data assert "CAP=%s\n" % md.capacity in data
def test_int_params_str_raises(self, param): params = make_init_params(**{param: 'not_an_int'}) with pytest.raises(AssertionError): volume.VolumeMetadata(**params)
def test_get_default(self): params = make_init_params() md = volume.VolumeMetadata(**params) assert md.get("INVALID_KEY", "TEST") == "TEST"
def test_set_nonexistent(self): params = make_init_params() md = volume.VolumeMetadata(**params) with pytest.raises(KeyError): md["INVALID_KEY"] = "VALUE"
def test_dict_setter(self): params = make_init_params() md = volume.VolumeMetadata(**params) assert md[sc.DESCRIPTION] == params['description'] md[sc.DESCRIPTION] = "New description" assert "New description" == md[sc.DESCRIPTION]
def test_long_description(self, size): params = make_init_params(description="!" * size) md = volume.VolumeMetadata(**params) self.assertEqual(sc.DESCRIPTION_SIZE, len(md.description))
def test_description_trunc(self, size): params = make_init_params() md = volume.VolumeMetadata(**params) md[sc.DESCRIPTION] = "!" * size assert sc.DESCRIPTION_SIZE == len(md[sc.DESCRIPTION])
def test_generation_integer(self): params = make_init_params() md = volume.VolumeMetadata(**params) with pytest.raises(AssertionError): md.generation = "fail"
def test_capacity_size(self): params = make_init_params() md = volume.VolumeMetadata(**params) new_capacity = md.capacity * 2 md.capacity = new_capacity assert md.size == new_capacity // sc.BLOCK_SIZE_512