summaryrefslogtreecommitdiffstats
path: root/tests/qemu-iotests/266
blob: 71ce81d0df767805bed480592c9967426d8525e5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/env python3
# group: rw quick
#
# Test VPC and file image creation
#
# Copyright (C) 2019 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

import iotests
from iotests import imgfmt


# Successful image creation (defaults)
def implicit_defaults(vm, file_path):
    iotests.log("=== Successful image creation (defaults) ===")
    iotests.log("")

    # 8 heads, 964 cyls/head, 17 secs/cyl
    # (Close to 64 MB)
    size = 8 * 964 * 17 * 512

    vm.blockdev_create({ 'driver': imgfmt,
                         'file': 'protocol-node',
                         'size': size })


# Successful image creation (explicit defaults)
def explicit_defaults(vm, file_path):
    iotests.log("=== Successful image creation (explicit defaults) ===")
    iotests.log("")

    # 16 heads, 964 cyls/head, 17 secs/cyl
    # (Close to 128 MB)
    size = 16 * 964 * 17 * 512

    vm.blockdev_create({ 'driver': imgfmt,
                         'file': 'protocol-node',
                         'size': size,
                         'subformat': 'dynamic',
                         'force-size': False })


# Successful image creation (non-default options)
def non_defaults(vm, file_path):
    iotests.log("=== Successful image creation (non-default options) ===")
    iotests.log("")

    # Not representable in CHS (fine with force-size=True)
    size = 1048576

    vm.blockdev_create({ 'driver': imgfmt,
                         'file': 'protocol-node',
                         'size': size,
                         'subformat': 'fixed',
                         'force-size': True })


# Size not representable in CHS with force-size=False
def non_chs_size_without_force(vm, file_path):
    iotests.log("=== Size not representable in CHS ===")
    iotests.log("")

    # Not representable in CHS (will not work with force-size=False)
    size = 1048576

    vm.blockdev_create({ 'driver': imgfmt,
                         'file': 'protocol-node',
                         'size': size,
                         'force-size': False })


# Zero size
def zero_size(vm, file_path):
    iotests.log("=== Zero size===")
    iotests.log("")

    vm.blockdev_create({ 'driver': imgfmt,
                         'file': 'protocol-node',
                         'size': 0 })


# Maximum CHS size
def maximum_chs_size(vm, file_path):
    iotests.log("=== Maximum CHS size===")
    iotests.log("")

    vm.blockdev_create({ 'driver': imgfmt,
                         'file': 'protocol-node',
                         'size': 16 * 65535 * 255 * 512 })


# Actual maximum size
def maximum_size(vm, file_path):
    iotests.log("=== Actual maximum size===")
    iotests.log("")

    vm.blockdev_create({ 'driver': imgfmt,
                         'file': 'protocol-node',
                         'size': 0xff000000 * 512,
                         'force-size': True })


def main():
    for test_func in [implicit_defaults, explicit_defaults, non_defaults,
                      non_chs_size_without_force, zero_size, maximum_chs_size,
                      maximum_size]:

        with iotests.FilePath('t.vpc') as file_path, \
             iotests.VM() as vm:

            vm.launch()

            iotests.log('--- Creating empty file ---')
            vm.blockdev_create({ 'driver': 'file',
                                 'filename': file_path,
                                 'size': 0 })

            vm.qmp_log('blockdev-add', driver='file', filename=file_path,
                       node_name='protocol-node',
                       filters=[iotests.filter_qmp_testfiles])
            iotests.log('')

            print_info = test_func(vm, file_path)
            iotests.log('')

            vm.shutdown()
            iotests.img_info_log(file_path)


iotests.script_main(main,
                    supported_fmts=['vpc'],
                    supported_protocols=['file'])