]> git.ipfire.org Git - thirdparty/systemd.git/blob - test/TEST-02-CRYPTSETUP/test.sh
test: add function to reduce copied setup boilerplate
[thirdparty/systemd.git] / test / TEST-02-CRYPTSETUP / test.sh
1 #!/bin/bash
2 set -e
3 TEST_DESCRIPTION="cryptsetup systemd setup"
4 TEST_NO_NSPAWN=1
5
6 . $TEST_BASE_DIR/test-functions
7
8 check_result_qemu() {
9 ret=1
10 mkdir -p $initdir
11 mount ${LOOPDEV}p1 $initdir
12 [[ -e $initdir/testok ]] && ret=0
13 [[ -f $initdir/failed ]] && cp -a $initdir/failed $TESTDIR
14 cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile
15 mount /dev/mapper/varcrypt $initdir/var
16 cp -a $initdir/var/log/journal $TESTDIR
17 umount $initdir/var
18 umount $initdir
19 cryptsetup luksClose /dev/mapper/varcrypt
20 [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
21 ls -l $TESTDIR/journal/*/*.journal
22 test -s $TESTDIR/failed && ret=$(($ret+1))
23 return $ret
24 }
25
26
27 test_setup() {
28 create_empty_image_rootdir
29 echo -n test >$TESTDIR/keyfile
30 cryptsetup -q luksFormat --pbkdf pbkdf2 --pbkdf-force-iterations 1000 ${LOOPDEV}p2 $TESTDIR/keyfile
31 cryptsetup luksOpen ${LOOPDEV}p2 varcrypt <$TESTDIR/keyfile
32 mkfs.ext4 -L var /dev/mapper/varcrypt
33 mkdir -p $initdir/var
34 mount /dev/mapper/varcrypt $initdir/var
35
36 # Create what will eventually be our root filesystem onto an overlay
37 (
38 LOG_LEVEL=5
39 eval $(udevadm info --export --query=env --name=/dev/mapper/varcrypt)
40 eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
41
42 setup_basic_environment
43 mask_supporting_services
44
45 # setup the testsuite service
46 cat >$initdir/etc/systemd/system/testsuite.service <<EOF
47 [Unit]
48 Description=Testsuite service
49 After=multi-user.target
50
51 [Service]
52 ExecStart=/bin/sh -x -c 'systemctl --state=failed --no-legend --no-pager > /failed ; echo OK > /testok'
53 Type=oneshot
54 EOF
55
56 setup_testsuite
57
58 install_dmevent
59 generate_module_dependencies
60 cat >$initdir/etc/crypttab <<EOF
61 $DM_NAME UUID=$ID_FS_UUID /etc/varkey
62 EOF
63 echo -n test > $initdir/etc/varkey
64 cat $initdir/etc/crypttab | ddebug
65
66 cat >>$initdir/etc/fstab <<EOF
67 /dev/mapper/varcrypt /var ext4 defaults 0 1
68 EOF
69 )
70 }
71
72 cleanup_root_var() {
73 ddebug "umount $initdir/var"
74 mountpoint $initdir/var && umount $initdir/var
75 [[ -b /dev/mapper/varcrypt ]] && cryptsetup luksClose /dev/mapper/varcrypt
76 }
77
78 test_cleanup() {
79 # ignore errors, so cleanup can continue
80 cleanup_root_var || :
81 _test_cleanup
82 }
83
84 test_setup_cleanup() {
85 cleanup_root_var
86 _test_setup_cleanup
87 }
88
89 do_test "$@"