home: hub: mkinitfs

ref: a512e4360c1e75bab1bef62ee7b4067edcb7c9d9
dir: /tests/initramfs-init.test/

View raw version
#!/usr/bin/env atf-sh

. $(atf_get_srcdir)/test_env.sh

init_tests \
	initramfs_init_cmdline_root \
	initramfs_init_blacklist \
	initramfs_init_tmpfs_root \
	initramfs_init_tmpfs_root_modloop_sign \
	initramfs_init_tmpfs_root_net_apkovl \
	initramfs_init_tmpfs_root_console_serial \
	initramfs_init_tmpfs_root_autodetect_serial \
	initramfs_init_tmpfs_root_disable_autodetect_serial \
	initramfs_init_tmpfs_root_apkovl_autodetect_serial \
	initramfs_init_tmpfs_root_remount_opts \
	initramfs_init_tmpfs_root_tiny_cloud \
	initramfs_init_tmpfs_root_tiny_cloud_disabled \
	initramfs_init_tmpfs_root_apkovl_url \
	initramfs_init_aoe

fake_cmdline() {
	mkdir -p proc
	echo "$@" > proc/cmdline
}

fake_bin() {
	mkdir -p bin
	cat > bin/"$1"
	chmod +x bin/"$1"
}

fake_sysroot_init() {
	mkdir -p sysroot/sbin
	touch sysroot/sbin/init
	chmod +x sysroot/sbin/init
}

fake_switch_root() {
	fake_bin switch_root <<-EOF
		#!/bin/sh
		echo "switch_root OK"
	EOF
}

fake_serial_devices() {
	mkdir -p proc/tty/driver
	cat > proc/tty/driver/serial <<-EOF
		0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 CTS|DSR
		1: uart:16550A port:000002F8 irq:3 tx:103 rx:0 RTS|DTR
		2: uart:unknown port:000003E8 irq:4
		3: uart:unknown port:000002E8 irq:3
	EOF

	mkdir -p sys/devices/platform/ARMH0011:00/tty/ttyAMA0
	ln -s ../../../ARMH0011:00 \
		sys/devices/platform/ARMH0011:00/tty/ttyAMA0/device

	mkdir -p sys/class/tty/
	ln -s ../../devices/platform/ARMH0011:00/tty/ttyAMA0 \
		sys/class/tty/ttyAMA0
}

initramfs_init_cmdline_root_body() {
	fake_cmdline "root=/dev/vda1"
	fake_switch_root

	atf_check -o match:"Alpine Init" \
		-o match:"nlplug-findfs" \
		-o match:"mount.*-o ro.*/dev/vda1.*/sysroot" \
		-o match:"switch_root OK" \
		initramfs-init
}

initramfs_init_blacklist_body() {
	fake_cmdline "root=/dev/vda1 blacklist=dummy,evbug"
	fake_switch_root
	atf_check -o match:"switch_root OK" \
		initramfs-init

	atf_check -o match:"blacklist dummy" \
		-o match:"blacklist evbug" \
		cat etc/modprobe.d/*
}

initramfs_init_tmpfs_root_body() {
	fake_cmdline ""
	fake_switch_root
	fake_sysroot_init
	atf_check \
		-o match:"nlplug-findfs" \
		-o match:"mount.*tmpfs .*/sysroot" \
		-o match:"switch_root OK" \
		initramfs-init
}

initramfs_init_tmpfs_root_modloop_sign_body() {
	fake_cmdline ""
	fake_switch_root
	fake_sysroot_init
	mkdir -p var/cache/misc
	touch var/cache/misc/modloop.SIGN.RSA.ncopa-4d1b7620.rsa.pub
	atf_check \
		-o match:"switch_root OK" \
		initramfs-init
	atf_check \
		test -f sysroot/var/cache/misc/modloop.SIGN.RSA.ncopa-4d1b7620.rsa.pub
}

initramfs_init_tmpfs_root_net_apkovl_body() {
	fake_cmdline "apkovl=https://example.com/{UUID}/foo.apkovl.tar.gz"
	fake_switch_root
	fake_sysroot_init

	mkdir -p sys/class/dmi/id
	echo "c7c29fe0-cf90-4024-8ba3-208387fc7ac6" > sys/class/dmi/id/product_uuid

	atf_check \
		-o match:"wget .* https://example.com/c7c29fe0-cf90-4024-8ba3-208387fc7ac6/foo.apkovl.tar.gz" \
		initramfs-init
}

initramfs_init_tmpfs_root_console_serial_body() {
	fake_cmdline "console=ttyS0"
	fake_switch_root
	fake_sysroot_init
	fake_bin stty <<-EOF
		#!/bin/sh
		true
	EOF

	mkdir -p sys/class/tty/console
	echo tty0 > sys/class/tty/console/active

	atf_check \
		-o ignore \
		initramfs-init
	atf_check \
		-o match:"tty0::respawn:/sbin/getty" \
		-o match:"ttyS0::respawn:/sbin/getty" \
		cat sysroot/etc/inittab
}

initramfs_init_tmpfs_root_autodetect_serial_body() {
	fake_cmdline ""
	fake_switch_root
	fake_sysroot_init
	fake_serial_devices
	fake_bin stty <<-EOF
		#!/bin/sh
		true
	EOF

	atf_check \
		-o ignore \
		initramfs-init
	atf_check \
		-o match:"ttyS0::respawn:/sbin/getty" \
		-o match:"ttyAMA0::respawn:/sbin/getty" \
		cat sysroot/etc/inittab
}

initramfs_init_tmpfs_root_disable_autodetect_serial_body() {
	fake_cmdline "autodetect_serial=no"
	fake_switch_root
	fake_sysroot_init
	fake_serial_devices
	fake_bin stty <<-EOF
		#!/bin/sh
		true
	EOF

	atf_check \
		-o ignore \
		initramfs-init
	atf_check \
		-o not-match:"ttyS0::respawn:/sbin/getty" \
		-o not-match:"ttyAMA0::respawn:/sbin/getty" \
		cat sysroot/etc/inittab
}

initramfs_init_tmpfs_root_apkovl_autodetect_serial_body() {
	touch foo && tar -zcf foo.tar.gz foo

	fake_cmdline "apkovl=foo.tar.gz"
	fake_switch_root
	fake_sysroot_init
	fake_serial_devices
	fake_bin stty <<-EOF
		#!/bin/sh
		true
	EOF

	atf_check \
		-o ignore \
		initramfs-init
	atf_check \
		-o not-match:"ttyS0::respawn:/sbin/getty" \
		-o not-match:"ttyAMA0::respawn:/sbin/getty" \
		cat sysroot/etc/inittab
}

initramfs_init_tmpfs_root_remount_opts_body() {
	fake_cmdline ""
	fake_switch_root
	fake_sysroot_init
	fake_bin df <<-EOF
		#!/bin/sh
		echo "Filesystem           1024-blocks    Used Available Capacity Mounted on"
		echo "/dev/sr0    514938888 417682860  73101632  85% /media/sr0"
	EOF
	fake_bin stat <<-EOF
		#!/bin/sh
		for i; do
			case "\$i" in
				/dev/sr0|/dev/cdrom)
					echo "b,0"
					exit 0
					;;
			esac
		done
		echo "0,0"
	EOF

	mkdir -p sysroot/etc
	cat >sysroot/etc/fstab <<-EOF
		/dev/cdrom	/media/cdrom	iso9660	noauto,ro,customopts 0 0
		/dev/usbdisk	/media/usb	vfat	noauto,ro 0 0
	EOF
	cat >proc/mounts <<-EOF
		sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
		devtmpfs /dev devtmpfs rw,nosuid,noexec,relatime,size=10240k,nr_inodes=4080869,mode=755,inode64 0 0
		proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
		/dev/sr0 /media/sr0 iso9660 rw,noatime,data=ordered 0 0
	EOF
	mkdir -p tmp dev media/sr0/apks
	echo "/media/sr0/apks" > tmp/repositories
	ln -s sr0 dev/cdrom

	atf_check \
		-o match:"mount -o move.*/media/cdrom" \
		-o match:"mount -o remount.*customopts.*/media/cdrom" \
		initramfs-init
}

initramfs_init_tmpfs_root_tiny_cloud_body() {
	fake_cmdline ""
	fake_switch_root
	fake_sysroot_init
	fake_bin findfs <<-EOF
		#!/bin/sh
		true
	EOF

	atf_check \
		-o ignore \
		initramfs-init
	atf_check \
		-o not-empty \
		find sysroot/ -name '*tiny-cloud*'
}

initramfs_init_tmpfs_root_tiny_cloud_disabled_body() {
	fake_cmdline ""
	fake_switch_root
	fake_sysroot_init
	fake_bin findfs <<-EOF
		#!/bin/sh
		true
	EOF

	mkdir -p sysroot/etc
	touch sysroot/etc/tiny-cloud.disabled

	atf_check \
		-o ignore \
		initramfs-init
	atf_check \
		find sysroot/etc/runlevels -name '*tiny-cloud*'
}

initramfs_init_tmpfs_root_apkovl_url_body() {
	fake_cmdline "apkovl=http://example.tld/some/path/to/file?some=queries&forExample=for:Validation"
	fake_switch_root
	fake_sysroot_init

	atf_check \
		-o match:"wget.*/tmp/file[^?]" \
		initramfs-init
}

initramfs_init_aoe_body() {
	fake_cmdline "aoe=yes aoe_iflist=eth0 aoe_mtu=9000"
	fake_sysroot_init
	fake_switch_root

	atf_check \
		-o match:'ip link set dev eth0 up' \
		-o match:'ip link set dev eth0 mtu 9000' \
		-o match:'modprobe aoe aoe_iflist=eth0' \
		initramfs-init
}