#!/usr/bin/env atf-sh . $(atf_get_srcdir)/test_env.sh export PREFIX="$srcdir" export MOCK=echo lib="$srcdir"/lib/tiny-cloud/init init_tests \ set_hostname \ set_ssh_keys \ save_userdata_plain \ save_userdata_compressed set_nocloud_meta() { local metadata="$(cat)" fake_bin mount <<-EOF #!/bin/sh # find last arg which is the mount dir while ! [ -d "\$1" ]; do shift done printf "%s" "$metadata" \ > "\$1"/meta-data EOF fake_bin umount <<-EOF #!/bin/sh while ! [ -d "\$1" ]; do shift done rm -f "\$1"/meta-data EOF mkdir -p mnt } set_hostname_body() { set_nocloud_meta <<-EOF hostname: myhostname EOF CLOUD="nocloud" atf_check \ -o match:"hostname.*-F $PWD/etc/hostname" \ sh -c ". \"$lib\"; init__set_hostname" atf_check -o match:"^myhostname$" cat etc/hostname } set_ssh_keys_body() { fake_bin getent <<-EOF #!/bin/sh echo "alpine:x:1000:1000:Linux User,,,:/home/alpine:/bin/sh" EOF set_nocloud_meta user-data <<-EOF public-keys: - openssh-key: ssh-ed25519 keydata - openssh-key: ssh-rsa foobar EOF CLOUD="nocloud" atf_check \ -o match:"chown.*/\.ssh" \ sh -c ". \"$lib\"; init__set_ssh_keys" atf_check -o match:"^ssh-ed25519 keydata" \ -o match:"^ssh-rsa foobar" \ cat home/alpine/.ssh/authorized_keys } save_userdata_plain_body() { fake_userdata_nocloud <<-EOF #userdata EOF CLOUD="nocloud" atf_check \ sh -c ". \"$lib\"; init__save_userdata" atf_check -o match:"^#userdata" cat var/lib/cloud/user-data } save_userdata_compressed_body() { for comp in gzip bzip2 xz lzma lzop lz4 zstd; do # fake_userdata_nocloud will set PATH so dont run it in a subshell printf "%s\n" "#userdata" | $comp -c > tmpfile fake_userdata_nocloud < tmpfile CLOUD="nocloud" atf_check \ sh -c ". \"$lib\"; init__save_userdata" if ! grep "^#userdata" var/lib/cloud/user-data; then atf_fail "$comp failed" fi done }