#!/usr/bin/env atf-sh

. $(atf_get_srcdir)/test_env.sh
init_tests \
	libalpine_isin \
	libalpine_available_ifaces \
	libalpine_available_ifaces_bond \
	libalpine_available_ifaces_bridge \
	libalpine_askpass \
	libalpine_find_modloop_media \
	libalpine_find_modloop_media_not_mounted

libalpine=$(atf_get_srcdir)/../libalpine.sh

libalpine_isin_body() {
	. "$libalpine"
	isin a a b c || atf_fail "isin a a b c"
	! isin foo bar baz a a b c || atf_fail" isin foo bar baz a a b c"
	isin "with space" foo "with space" "other space" || atf_fail 'isin "with space" foo "with space" "other space'
}

libalpine_available_ifaces_body() {
	init_env
	mkdir -p sys/class/net/lo sys/class/net/eth0
	echo 1 >sys/class/net/lo/ifindex
	echo 2 >sys/class/net/eth0/ifindex
	atf_check \
		-o match:"eth0" \
		sh -c ". $libalpine; available_ifaces"
}

libalpine_available_ifaces_bond_body() {
	init_env
	mkdir -p sys/class/net/lo \
		sys/class/net/eth0/master/bonding \
		sys/class/net/bond0
	echo 1 >sys/class/net/lo/ifindex
	echo 2 >sys/class/net/eth0/ifindex
	echo 3 >sys/class/net/bond0/ifindex

	atf_check \
		-o match:"bond0" \
		sh -c ". $libalpine; available_ifaces"
}

libalpine_available_ifaces_bridge_body() {
	init_env
	mkdir -p sys/class/net/lo \
		sys/class/net/eth0/brport \
		sys/class/net/br0
	echo 1 >sys/class/net/lo/ifindex
	echo 2 >sys/class/net/eth0/ifindex
	echo 3 >sys/class/net/br0/ifindex

	atf_check \
		-o match:"br0" \
		sh -c ". $libalpine; available_ifaces"
}

libalpine_askpass_body() {
	init_env
	echo foo >answer
	atf_check \
		-o match:"enter password" \
		-o match:"stty -echo" \
		-o match:"stty echo" \
		-o match:"resp=foo" \
		sh -c ". $libalpine; askpass 'enter password'<answer; echo resp=\$resp"
}

libalpine_find_modloop_media_body() {
	init_env
	fake_bin mountpoint <<-'EOF'
		#!/bin/sh
		[ "$1" = "-d" ] && [ "$2" = "/.modloop" ] && echo "7:0" && exit 0
		exit 1
	EOF
	fake_bin df <<-'EOF'
		#!/bin/sh
		echo "Filesystem     1K-blocks  Used Available Use% Mounted on"
		echo "/dev/sda1        30428736 1234567  27654321   5% /media/usb"
	EOF
	mkdir -p sys/dev/block/7:0/loop
	echo "/media/usb/alpine/modloop-lts" > sys/dev/block/7:0/loop/backing_file

	atf_check \
		-o match:"/media/usb" \
		sh -c ". $libalpine; find_modloop_media"
}

libalpine_find_modloop_media_not_mounted_body() {
	init_env
	fake_bin mountpoint <<-'EOF'
		#!/bin/sh
		exit 1
	EOF

	atf_check -s exit:1 \
		-o empty \
		sh -c ". $libalpine; find_modloop_media"
}
