tests: introduce stage testing
The stage testing is based on an output from the tree-diff tool. During one test two pipelines are run and their outputs are compared using tree-diff. The diff is then compared with expected diff included in the repository.
This commit is contained in:
parent
5edac4ee58
commit
85ebb084b5
28 changed files with 1038 additions and 3 deletions
|
|
@ -31,10 +31,14 @@ jobs:
|
|||
script: sudo env "PATH=$PATH" python3 -m test --case timezone --build-pipeline samples/build-from-yum.json
|
||||
- name: firewall
|
||||
before_install: sudo apt-get install -y systemd-container yum tar
|
||||
script: sudo env "PATH=$PATH" python3 -m test --case firewall --build-pipeline samples/build-from-yum.json
|
||||
script: sudo env "PATH=$PATH" python3 -m test --case firewall --build-pipeline samples/build-from-yum.json
|
||||
- name: locale
|
||||
before_install: sudo apt-get install -y systemd-container yum tar
|
||||
script: sudo env "PATH=$PATH" python3 -m test --case locale --build-pipeline samples/build-from-yum.json
|
||||
script: sudo env "PATH=$PATH" python3 -m test --case locale --build-pipeline samples/build-from-yum.json
|
||||
- name: assemblers
|
||||
before_install: sudo apt-get install -y systemd-container yum tar
|
||||
script: sudo env "PATH=$PATH" "OSBUILD_TEST_BUILD_PIPELINE=samples/build-from-yum.json" python3 -m unittest test.test_assemblers
|
||||
- name: stage-tests
|
||||
before_install: sudo apt-get install -y systemd-container yum
|
||||
script: sudo env "PATH=$PATH" "OSBUILD_TEST_BUILD_PIPELINE=samples/build-from-yum.json" python3 -m unittest test.test_stages
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
import difflib
|
||||
|
||||
import json
|
||||
import os
|
||||
import pprint
|
||||
import shutil
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
|
@ -42,3 +45,84 @@ class TestCase(unittest.TestCase):
|
|||
|
||||
result = json.loads(r.stdout)
|
||||
return result["tree_id"], result["output_id"]
|
||||
|
||||
def run_tree_diff(self, tree1, tree2):
|
||||
tree_diff_cmd = ["./tree-diff", tree1, tree2]
|
||||
|
||||
r = subprocess.run(tree_diff_cmd, encoding="utf-8", stdout=subprocess.PIPE, check=True)
|
||||
|
||||
return json.loads(r.stdout)
|
||||
|
||||
def get_path_to_store(self, tree_id):
|
||||
return f"{self.store}/refs/{tree_id}"
|
||||
|
||||
def assertTreeDiffsEqual(self, tree_diff1, tree_diff2):
|
||||
"""
|
||||
Asserts two tree diffs for equality.
|
||||
|
||||
Before assertion, the two trees are sorted, therefore order of files
|
||||
doesn't matter.
|
||||
|
||||
There's a special rule for asserting differences where we don't
|
||||
know the exact before/after value. This is useful for example if
|
||||
the content of file is dependant on current datetime. You can use this
|
||||
feature by putting null value in difference you don't care about.
|
||||
|
||||
Example:
|
||||
"/etc/shadow": {content: ["sha256:xxx", null]}
|
||||
|
||||
In this case the after content of /etc/shadow doesn't matter.
|
||||
The only thing that matters is the before content and that
|
||||
the content modification happened.
|
||||
"""
|
||||
tree_diff1 = _sorted_tree(tree_diff1)
|
||||
tree_diff2 = _sorted_tree(tree_diff2)
|
||||
|
||||
def raise_assertion(msg):
|
||||
raise TreeAssertionError(msg, tree_diff1, tree_diff2)
|
||||
|
||||
self.assertEqual(tree_diff1['added_files'], tree_diff2['added_files'])
|
||||
self.assertEqual(tree_diff1['deleted_files'], tree_diff2['deleted_files'])
|
||||
|
||||
if len(tree_diff1['differences']) != len(tree_diff2['differences']):
|
||||
raise_assertion('length of differences different')
|
||||
|
||||
for (file1, differences1), (file2, differences2) in \
|
||||
zip(tree_diff1['differences'].items(), tree_diff2['differences'].items()):
|
||||
|
||||
if file1 != file2:
|
||||
raise_assertion(f"filename different: {file1}, {file2}")
|
||||
|
||||
if len(differences1) != len(differences2):
|
||||
raise_assertion("length of file differences different")
|
||||
|
||||
for (difference1_kind, difference1_values), (difference2_kind, difference2_values) in \
|
||||
zip(differences1.items(), differences2.items()):
|
||||
if difference1_kind != difference2_kind:
|
||||
raise_assertion(f"different difference kinds: {difference1_kind}, {difference2_kind}")
|
||||
|
||||
if difference1_values[0] is not None \
|
||||
and difference2_values[0] is not None \
|
||||
and difference1_values[0] != difference2_values[0]:
|
||||
raise_assertion(f"before values are different: {difference1_values[0]}, {difference2_values[0]}")
|
||||
|
||||
if difference1_values[1] is not None \
|
||||
and difference2_values[1] is not None \
|
||||
and difference1_values[1] != difference2_values[1]:
|
||||
raise_assertion(f"after values are different: {difference1_values[1]}, {difference2_values[1]}")
|
||||
|
||||
|
||||
def _sorted_tree(tree):
|
||||
sorted_tree = json.loads(json.dumps(tree, sort_keys=True))
|
||||
sorted_tree["added_files"] = sorted(sorted_tree["added_files"])
|
||||
sorted_tree["deleted_files"] = sorted(sorted_tree["deleted_files"])
|
||||
|
||||
return sorted_tree
|
||||
|
||||
|
||||
class TreeAssertionError(AssertionError):
|
||||
def __init__(self, msg, tree_diff1, tree_diff2):
|
||||
diff = ('\n'.join(difflib.ndiff(
|
||||
pprint.pformat(tree_diff1).splitlines(),
|
||||
pprint.pformat(tree_diff2).splitlines())))
|
||||
super().__init__(f"{msg}\n\n{diff}")
|
||||
|
|
|
|||
43
test/stages_tests/firewall/a.json
Normal file
43
test/stages_tests/firewall/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
61
test/stages_tests/firewall/b.json
Normal file
61
test/stages_tests/firewall/b.json
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.firewall",
|
||||
"options": {
|
||||
"ports": [
|
||||
"53:tcp",
|
||||
"88:udp"
|
||||
],
|
||||
"enabled_services": [
|
||||
"http",
|
||||
"ftp"
|
||||
],
|
||||
"disabled_services": [
|
||||
"telnet"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
8
test/stages_tests/firewall/diff.json
Normal file
8
test/stages_tests/firewall/diff.json
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"added_files": [
|
||||
"/etc/firewalld/zones/public.xml",
|
||||
"/etc/firewalld/zones/public.xml.old"
|
||||
],
|
||||
"deleted_files": [],
|
||||
"differences": {}
|
||||
}
|
||||
43
test/stages_tests/fstab/a.json
Normal file
43
test/stages_tests/fstab/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
58
test/stages_tests/fstab/b.json
Normal file
58
test/stages_tests/fstab/b.json
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.fstab",
|
||||
"options": {
|
||||
"filesystems": [
|
||||
{
|
||||
"uuid": "76a22bf4-f153-4541-b6c7-0332c0dfaeac",
|
||||
"vfs_type": "ext4",
|
||||
"path": "/",
|
||||
"freq": "1",
|
||||
"passno": "1"
|
||||
}
|
||||
]
|
||||
}
|
||||
} ]
|
||||
}
|
||||
|
||||
|
||||
7
test/stages_tests/fstab/diff.json
Normal file
7
test/stages_tests/fstab/diff.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"added_files": [
|
||||
"/etc/fstab"
|
||||
],
|
||||
"deleted_files": [],
|
||||
"differences": {}
|
||||
}
|
||||
43
test/stages_tests/hostname/a.json
Normal file
43
test/stages_tests/hostname/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
51
test/stages_tests/hostname/b.json
Normal file
51
test/stages_tests/hostname/b.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.hostname",
|
||||
"options": {
|
||||
"hostname": "testing.hostname.local"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
7
test/stages_tests/hostname/diff.json
Normal file
7
test/stages_tests/hostname/diff.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"added_files": [
|
||||
"/etc/hostname"
|
||||
],
|
||||
"deleted_files": [],
|
||||
"differences": {}
|
||||
}
|
||||
43
test/stages_tests/keymap/a.json
Normal file
43
test/stages_tests/keymap/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
51
test/stages_tests/keymap/b.json
Normal file
51
test/stages_tests/keymap/b.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.keymap",
|
||||
"options": {
|
||||
"keymap": "se-dvorak"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
7
test/stages_tests/keymap/diff.json
Normal file
7
test/stages_tests/keymap/diff.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"added_files": [
|
||||
"/etc/vconsole.conf"
|
||||
],
|
||||
"deleted_files": [],
|
||||
"differences": {}
|
||||
}
|
||||
43
test/stages_tests/locale/a.json
Normal file
43
test/stages_tests/locale/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
51
test/stages_tests/locale/b.json
Normal file
51
test/stages_tests/locale/b.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.locale",
|
||||
"options": {
|
||||
"language": "nn_NO.utf8"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
7
test/stages_tests/locale/diff.json
Normal file
7
test/stages_tests/locale/diff.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"added_files": [
|
||||
"/etc/locale.conf"
|
||||
],
|
||||
"deleted_files": [],
|
||||
"differences": {}
|
||||
}
|
||||
43
test/stages_tests/systemd/a.json
Normal file
43
test/stages_tests/systemd/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
52
test/stages_tests/systemd/b.json
Normal file
52
test/stages_tests/systemd/b.json
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.systemd",
|
||||
"options": {
|
||||
"enabled_services": ["nftables"],
|
||||
"disabled_services": ["sshd"]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
9
test/stages_tests/systemd/diff.json
Normal file
9
test/stages_tests/systemd/diff.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"added_files": [
|
||||
"/etc/systemd/system/multi-user.target.wants/nftables.service"
|
||||
],
|
||||
"deleted_files": [
|
||||
"/etc/systemd/system/multi-user.target.wants/sshd.service"
|
||||
],
|
||||
"differences": {}
|
||||
}
|
||||
43
test/stages_tests/timezone/a.json
Normal file
43
test/stages_tests/timezone/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
51
test/stages_tests/timezone/b.json
Normal file
51
test/stages_tests/timezone/b.json
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.timezone",
|
||||
"options": {
|
||||
"zone": "Europe/Prague"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
12
test/stages_tests/timezone/diff.json
Normal file
12
test/stages_tests/timezone/diff.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"added_files": [],
|
||||
"deleted_files": [],
|
||||
"differences": {
|
||||
"/etc/localtime": {
|
||||
"symlink": [
|
||||
"../usr/share/zoneinfo/UTC",
|
||||
"../usr/share/zoneinfo/Europe/Prague"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
43
test/stages_tests/users/a.json
Normal file
43
test/stages_tests/users/a.json
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
55
test/stages_tests/users/b.json
Normal file
55
test/stages_tests/users/b.json
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"build": {
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"install_weak_deps": false,
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"dnf"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"stages": [
|
||||
{
|
||||
"name": "org.osbuild.dnf",
|
||||
"options": {
|
||||
"releasever": "30",
|
||||
"basearch": "x86_64",
|
||||
"repos": [
|
||||
{
|
||||
"metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
|
||||
"gpgkey": "F1D8 EC98 F241 AAF2 0DF6 9420 EF3C 111F CFC6 59B9",
|
||||
"checksum": "sha256:9f596e18f585bee30ac41c11fb11a83ed6b11d5b341c1cb56ca4015d7717cb97"
|
||||
}
|
||||
],
|
||||
"packages": [
|
||||
"@Core"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "org.osbuild.users",
|
||||
"options": {
|
||||
"users": {
|
||||
"test": {
|
||||
"password": "$6$s06sY2/bZbmuyE4a$JTn/Ki2jbNG.wGeCvt6mcjaIZ2HV.H8VjLzIMZs7f2G48NMFlcB2/OhbHZ6HhZAOcb.CmUb2qywSW2DkKe6gn0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
80
test/stages_tests/users/diff.json
Normal file
80
test/stages_tests/users/diff.json
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
{
|
||||
"added_files": [
|
||||
"/etc/subgid-",
|
||||
"/etc/subuid-",
|
||||
"/home/test",
|
||||
"/home/test/.bash_logout",
|
||||
"/home/test/.bashrc",
|
||||
"/home/test/.bash_profile",
|
||||
"/var/spool/mail/test"
|
||||
],
|
||||
"deleted_files": [],
|
||||
"differences": {
|
||||
"/etc/shadow-": {
|
||||
"content": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
},
|
||||
"/etc/passwd": {
|
||||
"content": [
|
||||
"sha256:9f38297afcc8f09e9e313db2628402f4448b92f5e5c41fdef8a859063703b09f",
|
||||
"sha256:323c887dd9cc7f6ec7a2cb70daf54b56d74054153a8759983d84e92dc2393127"
|
||||
]
|
||||
},
|
||||
"/etc/group": {
|
||||
"content": [
|
||||
"sha256:302bff1ff0e98dfee5bddea461138a3f584695aceb590f8452e11e343e5eea2d",
|
||||
"sha256:1bfe88ec0b2125a00a6e423bed2fbd562f426ddcb7cd28a27e21df90ee516bee"
|
||||
]
|
||||
},
|
||||
"/etc/gshadow": {
|
||||
"content": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
},
|
||||
"/etc/subuid": {
|
||||
"content": [
|
||||
"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"sha256:26d48e295489c012dd33c13df566059d0f97215e1990d80192026e5a162dc3a0"
|
||||
]
|
||||
},
|
||||
"/etc/group-": {
|
||||
"content": [
|
||||
"sha256:ca63b6808736bb195f8a0576d0ed96a1d290a5e95da53beba9841ad59e17edc8",
|
||||
"sha256:302bff1ff0e98dfee5bddea461138a3f584695aceb590f8452e11e343e5eea2d"
|
||||
]
|
||||
},
|
||||
"/etc/passwd-": {
|
||||
"content": [
|
||||
"sha256:8feaad3131f7f2842a96c2b4c054e2e32c8d2472de26fb29d7beb2b603753d53",
|
||||
"sha256:9f38297afcc8f09e9e313db2628402f4448b92f5e5c41fdef8a859063703b09f"
|
||||
]
|
||||
},
|
||||
"/etc/gshadow-": {
|
||||
"content": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
},
|
||||
"/etc/subgid": {
|
||||
"content": [
|
||||
"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"sha256:26d48e295489c012dd33c13df566059d0f97215e1990d80192026e5a162dc3a0"
|
||||
]
|
||||
},
|
||||
"/etc/shadow": {
|
||||
"content": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
},
|
||||
"/var/log/lastlog": {
|
||||
"content": [
|
||||
"sha256:a29839a75996714fe64f0d3dc9e21b58a66f8465a0e1a248ef76fcc822b1d078",
|
||||
"sha256:d1024fa7ebf79a2dd6d553fef19bf1d1234616885979e533b345b7c54968079b"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -23,7 +23,7 @@ class TestBoot(osbuildtest.TestCase):
|
|||
"-device", "virtio-serial",
|
||||
"-device", "virtserialport,chardev=stdio",
|
||||
|
||||
f"{self.store}/refs/{output_id}/f30-boot.qcow2"
|
||||
f"{self.get_path_to_store(output_id)}/f30-boot.qcow2"
|
||||
], encoding="utf-8", stdout=subprocess.PIPE, check=True)
|
||||
|
||||
self.assertEqual(r.stdout.strip(), "running")
|
||||
|
|
|
|||
36
test/test_stages.py
Normal file
36
test/test_stages.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import json
|
||||
import os
|
||||
|
||||
from test import osbuildtest
|
||||
|
||||
|
||||
class TestDescriptions(osbuildtest.TestCase):
|
||||
|
||||
def run_stage_test(self, test_dir: str):
|
||||
pipeline1 = f"{test_dir}/a.json"
|
||||
pipeline2 = f"{test_dir}/b.json"
|
||||
tree_id1, _ = self.run_osbuild(pipeline1)
|
||||
tree_id2, _ = self.run_osbuild(pipeline2)
|
||||
|
||||
actual_diff = self.run_tree_diff(self.get_path_to_store(tree_id1), self.get_path_to_store(tree_id2))
|
||||
|
||||
with open(f"{test_dir}/diff.json") as f:
|
||||
expected_diff = json.load(f)
|
||||
|
||||
self.assertTreeDiffsEqual(expected_diff, actual_diff)
|
||||
|
||||
|
||||
def generate_test_case(test):
|
||||
def test_case(self):
|
||||
self.run_stage_test(test)
|
||||
|
||||
return test_case
|
||||
|
||||
|
||||
def init_tests():
|
||||
test_dir = 'test/stages_tests'
|
||||
for test in os.listdir(test_dir):
|
||||
setattr(TestDescriptions, f"test_{test}", generate_test_case(f"{test_dir}/{test}"))
|
||||
|
||||
|
||||
init_tests()
|
||||
Loading…
Add table
Add a link
Reference in a new issue