Пример #1
0
 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
Пример #2
0
    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
Пример #3
0
 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
Пример #4
0
    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
Пример #5
0
    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)
Пример #6
0
 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)
Пример #7
0
    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
Пример #8
0
 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']
Пример #9
0
    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
Пример #10
0
    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
Пример #11
0
 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)
Пример #12
0
    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
Пример #13
0
    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)
Пример #14
0
 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())
Пример #15
0
 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)
Пример #16
0
 def test_capacity_integer(self):
     params = make_init_params()
     md = volume.VolumeMetadata(**params)
     with pytest.raises(AssertionError):
         md.capacity = "fail"
Пример #17
0
 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
Пример #18
0
 def test_int_params_str_raises(self, param):
     params = make_init_params(**{param: 'not_an_int'})
     with pytest.raises(AssertionError):
         volume.VolumeMetadata(**params)
Пример #19
0
 def test_get_default(self):
     params = make_init_params()
     md = volume.VolumeMetadata(**params)
     assert md.get("INVALID_KEY", "TEST") == "TEST"
Пример #20
0
 def test_set_nonexistent(self):
     params = make_init_params()
     md = volume.VolumeMetadata(**params)
     with pytest.raises(KeyError):
         md["INVALID_KEY"] = "VALUE"
Пример #21
0
 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]
Пример #22
0
 def test_long_description(self, size):
     params = make_init_params(description="!" * size)
     md = volume.VolumeMetadata(**params)
     self.assertEqual(sc.DESCRIPTION_SIZE, len(md.description))
Пример #23
0
 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])
Пример #24
0
 def test_generation_integer(self):
     params = make_init_params()
     md = volume.VolumeMetadata(**params)
     with pytest.raises(AssertionError):
         md.generation = "fail"
Пример #25
0
 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