Skip to content

Commit aff811f

Browse files
ckyrouaccgwalters
authored andcommitted
reset: Initial tmt test for factory reset
Signed-off-by: ckyrouac <[email protected]>
1 parent b810efb commit aff811f

File tree

4 files changed

+79
-1
lines changed

4 files changed

+79
-1
lines changed

crates/lib/src/cli.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ use crate::bootc_composefs::{
4242
switch::switch_composefs,
4343
update::upgrade_composefs,
4444
};
45-
use crate::deploy::{MergeState, RequiredHostSpec, RequiredHostSpec};
45+
use crate::deploy::{MergeState, RequiredHostSpec};
4646
use crate::lints;
4747
use crate::podstorage::set_additional_image_store;
4848
use crate::progress_jsonl::{ProgressWriter, RawProgressFd};

tmt/plans/integration.fmf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,10 @@ execute:
105105
- when: running_env != image_mode
106106
enabled: false
107107
because: tmt-reboot does not work with systemd reboot in testing farm environment
108+
109+
/test-28-factory-reset:
110+
summary: Factory reset
111+
discover:
112+
how: fmf
113+
test:
114+
- /tmt/tests/test-28-factory-reset
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
use std assert
2+
use tap.nu
3+
4+
def initial_build [] {
5+
tap begin "factory reset test"
6+
7+
# Create test files that should be removed after factory reset
8+
print "Creating test files in /var and /etc"
9+
echo "test file in var" | save /var/test-file-factory-reset
10+
echo "test file in etc" | save /etc/test-file-factory-reset
11+
12+
# Verify files were created
13+
assert ("/var/test-file-factory-reset" | path exists)
14+
assert ("/etc/test-file-factory-reset" | path exists)
15+
16+
bootc install reset --experimental
17+
18+
# sanity check that bootc status shows a new deployment with a non default stateroot
19+
let reset_status = bootc status --json | from json
20+
assert not equal $reset_status.status.otherDeployments.0.ostree.stateroot "default"
21+
22+
# we need tmt in the new stateroot for second_boot
23+
print "Copying tmt into new stateroot"
24+
25+
# Get the new stateroot name from the staged deployment
26+
let new_stateroot = $reset_status.status.otherDeployments.0.ostree.stateroot
27+
print $"New stateroot: ($new_stateroot)"
28+
29+
# Mount /sysroot as read-write and copy tmt directory to the new deployment
30+
mount -o remount,rw /sysroot
31+
32+
let new_stateroot_path = $"/sysroot/ostree/deploy/($new_stateroot)"
33+
34+
# locate the workdir_root by looking backwards from a known static dir (TMT_PLAN_DATA)
35+
# e.g. TMT_PLAN_DATA=/var/tmp/tmt/run-035/tmt/plans/integration/test-28-factory-reset/data
36+
let workdir_root = ($env.TMT_PLAN_DATA | path dirname | path dirname | path dirname | path dirname | path dirname | path dirname )
37+
38+
# make sure workdir_root's full path exists in new stateroot
39+
mkdir $"($new_stateroot_path)/($workdir_root)"
40+
41+
# nu's cp doesn't have -T
42+
/usr/bin/cp -r -T $workdir_root $"($new_stateroot_path)/($workdir_root)"
43+
44+
tmt-reboot
45+
}
46+
47+
# The second boot; verify we're in the factory reset deployment
48+
def second_boot [] {
49+
print "Verifying factory reset completed successfully"
50+
RUST_LOG=trace bootc status
51+
let status = bootc status --json | from json
52+
assert not equal $status.status.booted.ostree.stateroot "default"
53+
54+
print "Checking that test files do not exist in the reset deployment"
55+
assert (not ("/var/test-file-factory-reset" | path exists)) "Test file in /var should not exist after factory reset"
56+
assert (not ("/etc/test-file-factory-reset" | path exists)) "Test file in /etc should not exist after factory reset"
57+
print "Factory reset verification completed successfully"
58+
tap ok
59+
}
60+
61+
def main [] {
62+
# See https://tmt.readthedocs.io/en/stable/stories/features.html#reboot-during-test
63+
match $env.TMT_REBOOT_COUNT? {
64+
null | "0" => initial_build,
65+
"1" => second_boot,
66+
$o => { error make { msg: $"Invalid TMT_REBOOT_COUNT ($o)" } },
67+
}
68+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
summary: Execute factory reset tests
2+
test: nu booted/test-factory-reset.nu
3+
duration: 30m

0 commit comments

Comments
 (0)