tools: add script to generate multiple test cases

This script generates json test cases for each supported output format.
It requires an architecure, distro, osbuild store, and output directory
as input. There is also a json object which maps from output format to a
test case request which includes the compose request and boot type.
The script uses these test case requests to call the generate-test-case
script and then outputs the resulting json test cases to files in the
specified output directory.
This commit is contained in:
Jacob Kozol 2020-03-18 17:15:00 +01:00 committed by Ondřej Budai
parent 1909620660
commit afa4975a15
2 changed files with 237 additions and 0 deletions

View file

@ -0,0 +1,206 @@
{
"ami": {
"boot": {
"type": "qemu-extract"
},
"compose-request": {
"distro": "",
"arch": "",
"filename": "image.raw.xz",
"output-format": "ami",
"blueprint": {}
}
},
"ext4-filesystem": {
"boot": {
"type": "nspawn"
},
"compose-request": {
"distro": "",
"arch": "",
"output-format": "ext4-filesystem",
"filename": "filesystem.img",
"blueprint": {
"name": "ext4-filesystem-boot-test",
"description": "Image for boot test",
"packages": [
{
"name": "openssh-server",
"version": "*"
}
],
"modules": [],
"groups": [],
"customizations": {
"user": [
{
"name": "redhat",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
}
]
}
}
}
},
"openstack": {
"boot": {
"type": "qemu"
},
"compose-request": {
"distro": "",
"arch": "",
"output-format": "openstack",
"filename": "disk.qcow2",
"blueprint": {
"name": "openstack-boot-test",
"description": "Image for boot test",
"packages": [],
"modules": [],
"groups": [],
"customizations": {
"user": [
{
"name": "redhat",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
}
]
}
}
}
},
"partitioned-disk": {
"boot": {
"type": "nspawn"
},
"compose-request": {
"distro": "",
"arch": "",
"output-format": "partitioned-disk",
"filename": "disk.img",
"blueprint": {
"name": "partitioned-disk-boot-test",
"description": "Image for boot test",
"packages": [],
"modules": [],
"groups": [],
"customizations": {
"user": [
{
"name": "redhat",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
}
]
}
}
}
},
"tar": {
"boot": {
"type": "nspawn-extract"
},
"compose-request": {
"output-format": "tar",
"distro": "",
"arch": "",
"filename": "root.tar.xz",
"blueprint": {
"name": "tar-boot-test",
"description": "Image for boot test",
"packages": [
{
"name": "openssh-server",
"version": "*"
}
],
"modules": [],
"groups": [],
"customizations": {
"user": [
{
"name": "redhat",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
}
]
}
}
}
},
"qcow2": {
"boot": {
"type": "qemu"
},
"compose-request": {
"distro": "",
"arch": "",
"output-format": "qcow2",
"filename": "disk.qcow2",
"blueprint": {
"name": "qcow2-boot-test",
"description": "Image for boot test",
"packages": [],
"modules": [],
"groups": [],
"customizations": {
"user": [
{
"name": "redhat",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
}
]
}
}
}
},
"vhd": {
"boot": {
"type": "qemu"
},
"compose-request": {
"distro": "",
"arch": "",
"output-format": "vhd",
"filename": "disk.vhd",
"blueprint": {
"name": "vhd-boot-test",
"description": "Image for boot test",
"packages": [],
"modules": [],
"groups": [],
"customizations": {
"user": [
{
"name": "redhat",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
}
]
}
}
}
},
"vmdk": {
"boot": {
"type": "qemu"
},
"compose-request": {
"distro": "",
"arch": "",
"output-format": "vmdk",
"filename": "disk.vmdk",
"blueprint": {
"name": "vmdk-boot-test",
"description": "Image for boot test",
"packages": [],
"modules": [],
"groups": [],
"customizations": {
"user": [
{
"name": "redhat",
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC61wMCjOSHwbVb4VfVyl5sn497qW4PsdQ7Ty7aD6wDNZ/QjjULkDV/yW5WjDlDQ7UqFH0Sr7vywjqDizUAqK7zM5FsUKsUXWHWwg/ehKg8j9xKcMv11AkFoUoujtfAujnKODkk58XSA9whPr7qcw3vPrmog680pnMSzf9LC7J6kXfs6lkoKfBh9VnlxusCrw2yg0qI1fHAZBLPx7mW6+me71QZsS6sVz8v8KXyrXsKTdnF50FjzHcK9HXDBtSJS5wA3fkcRYymJe0o6WMWNdgSRVpoSiWaHHmFgdMUJaYoCfhXzyl7LtNb3Q+Sveg+tJK7JaRXBLMUllOlJ6ll5Hod root@localhost"
}
]
}
}
}
}
}

View file

@ -0,0 +1,31 @@
#!/usr/bin/python3
import argparse
import subprocess
import json
import os
import sys
def main(distro, arch, store, output):
with open("tools/test-case-generators/format-request-map.json") as format_request_json:
format_request_dict = json.load(format_request_json)
for output_format, test_case_request in format_request_dict.items():
test_case_request["compose-request"]["distro"] = distro
test_case_request["compose-request"]["arch"] = arch
test_case = json.loads(subprocess.check_output(["tools/test-case-generators/generate-test-case", store], input=json.dumps(test_case_request), encoding="utf-8"))
name = distro.replace("-", "_") + "-" + arch + "-" + output_format.replace("-", "_") + "-boot.json"
file_name = output + "/" + name
with open(file_name, 'w') as case_file:
json.dump(test_case, case_file, indent=2)
return
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Generate test cases")
parser.add_argument("--distro", help="distribution for test cases", required=True)
parser.add_argument("--arch", help="architecture for test cases", required=True)
parser.add_argument("--store", metavar="STORE_DIRECTORY", type=os.path.abspath, help="path to the osbuild store", required=True)
parser.add_argument("--output", metavar="OUTPUT_DIRECTORY", type=os.path.abspath, help="path to the output directory", required=True)
args = parser.parse_args()
main(args.distro, args.arch, args.store, args.output)
sys.exit()