#!/usr/bin/env atf-sh

. $(atf_get_srcdir)/test_env.sh

tests_init \
	noargs \
	lo_always_auto \
	dual_stack \
	static_ipv4 \
	static_ipv4_netmask \
	static_ipv6 \
	static_ipv6_netmask \
	inet_dhcp \
	use_dhcp \
	alias_eth0_home \
	alias_eth0_work \
	bonded_bridge \
	learned_dependency \
	learned_dependency_2 \
	learned_executor \
	implicit_vlan \
	teardown_dep_ordering \
	dependency_loop_breaking

noargs_body() {
	atf_check -s exit:1 -e ignore ifup -S/dev/null
}

lo_always_auto_body() {
	atf_check -s exit:0 -e ignore -o match:'executors/link' \
		ifup -S/dev/null -E $EXECUTORS -i/dev/null -n -a
}

dual_stack_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/static' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/static-eth0.interfaces -n -a
}

static_ipv4_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/static' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/static-eth0-v4.interfaces -n -a
}

static_ipv4_netmask_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/static' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/static-eth0-v4-netmask.interfaces -n -a
}

static_ipv6_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/static' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/static-eth0-v6.interfaces -n -a
}

static_ipv6_netmask_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/static' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/static-eth0-v6-netmask.interfaces -n -a
}

inet_dhcp_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/dhcp' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/dhcp-eth0.interfaces -n -a
}

use_dhcp_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/dhcp' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/use-dhcp-eth0.interfaces -n -a
}

alias_eth0_home_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/dhcp' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/alias-home-work.interfaces -n wlan0=home
}

alias_eth0_work_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/static' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/alias-home-work.interfaces -n wlan0=work
}

bonded_bridge_body() {
	atf_check -s exit:0 -e ignore \
		-o match:'executors/link' \
		-o match:'executors/bond' \
		-o match:'executors/bridge' \
		-o match:'executors/static' \
		ifup -S/dev/null -E $EXECUTORS -i $FIXTURES/bonded-bridge.interfaces -n br0
}

learned_dependency_body() {
	atf_check -s exit:0 -o ignore \
		-e match:"eth0" \
		-e match:"eth1" \
		-e match:"eth2" \
		-e match:"eth3" \
		-e match:"eth4" \
		ifup -n -S/dev/null -E $EXECUTORS -i $FIXTURES/mock-dependency-generator.interfaces br0
}

learned_dependency_2_body() {
	atf_check -s exit:0 -o ignore \
		-e match:"bond0" \
		-e match:"eth0" \
		-e match:"eth1" \
		ifup -n -S/dev/null -E $EXECUTORS -i $FIXTURES/mock-dependency-generator-2.interfaces br0
}

learned_executor_body() {
	atf_check -s exit:0 -o ignore \
		-e match:"attempting to run mock executor" \
		ifup -n -S/dev/null -E $EXECUTORS -i $FIXTURES/mock-dependency-generator-2.interfaces br0
}

implicit_vlan_body() {
	atf_check -s exit:0 -o ignore \
		-e match:"attempting to run vlan executor" \
		-e match:"attempting to run link executor" \
		ifup -n -S/dev/null -E $EXECUTORS -i $FIXTURES/vlan.interfaces eth0.8
}

teardown_dep_ordering_body() {
	atf_check -s exit:0 -o ignore \
		-e match:"skipping auto interface bat" \
		-e match:"skipping auto interface dummy" \
		ifup -n -i $FIXTURES/teardown-dep-ordering.interfaces -E $EXECUTORS -a
}

dependency_loop_breaking_body() {
	atf_check -s exit:0 -o ignore \
		-e match:"ifup: skipping auto interface a \\(already configured\\), use --force to force configuration" \
		ifup -n -i $FIXTURES/dependency-loop.interfaces -E $EXECUTORS -a
}