#!/usr/bin/expect -f
# This file is part of Firejail project
# Copyright (C) 2014-2024 Firejail Authors
# License GPL v2

set timeout 10
spawn $env(SHELL)
match_max 100000

send -- "firejail --dns=8.8.4.4 --dns=8.8.8.8 --dns=4.2.2.1 --dns=::2 --dns=1.2.3.4 sleep 1\r"
expect {
	timeout {puts "TESTING ERROR 1\n";exit}
	"Warning: up to 4 DNS servers can be specified, 1.2.3.4 ignored"
}
expect {
	timeout {puts "TESTING ERROR 1.1\n";exit}
	"DNS server 8.8.4.4"
}
expect {
	timeout {puts "TESTING ERROR 1.2\n";exit}
	"DNS server 8.8.8.8"
}
expect {
	timeout {puts "TESTING ERROR 1.3\n";exit}
	"DNS server 4.2.2.1"
}
expect {
	timeout {puts "TESTING ERROR 1.4\n";exit}
	"DNS server ::2"
}
expect {
	timeout {puts "TESTING ERROR 1.5\n";exit}
	-re "Child process initialized in \[0-9\]+.\[0-9\]+ ms"
}
expect {
	timeout {puts "TESTING ERROR 1.6\n";exit}
	"Parent is shutting down, bye..."
}
after 100


send -- "firejail --quiet --dns=8.8.4.4 --dns=8.8.8.8 --dns=4.2.2.1 --dns=::2 --dns=1.2.3.4  cat /etc/passwd\r"
expect {
	timeout {puts "TESTING ERROR 2\n";exit}
	"Warning: up to 4 DNS servers can be specified, 1.2.3.4 ignored" {puts "TESTING ERROR 2.1\n";exit}
	"DNS server 8.8.4.4" {puts "TESTING ERROR 2.2\n";exit}
	"DNS server 8.8.8.8" {puts "TESTING ERROR 2.3\n";exit}
	"DNS server 4.2.2.1" {puts "TESTING ERROR 2.4\n";exit}
	"DNS server ::2" {puts "TESTING ERROR 2.5\n";exit}
	-re "Child process initialized in \[0-9\]+.\[0-9\]+ ms" {puts "TESTING ERROR 2.6\n";exit}
	"Parent is shutting down, bye..." {puts "TESTING ERROR 2.7\n";exit}
	"root"
}
after 100

send -- "firejail --dns=8.8.4.4 --dns=8.8.8.8 --dns=4.2.2.1 --dns=::2\r"
expect {
	timeout {puts "TESTING ERROR 3\n";exit}
	-re "Child process initialized in \[0-9\]+.\[0-9\]+ ms"
}
sleep 1

send -- "cat /etc/resolv.conf\r"
expect {
	timeout {puts "TESTING ERROR 4.1\n";exit}
	"nameserver 8.8.4.4"
}
expect {
	timeout {puts "TESTING ERROR 4.2\n";exit}
	"nameserver 8.8.8.8"
}
expect {
	timeout {puts "TESTING ERROR 4.3\n";exit}
	"nameserver 4.2.2.1"
}
expect {
	timeout {puts "TESTING ERROR 4.4\n";exit}
	"nameserver ::2"
}
after 100
send -- "exit\r"
sleep 1


send -- "firejail --profile=dns.profile\r"
expect {
	timeout {puts "TESTING ERROR 5.1\n";exit}
	-re "Child process initialized in \[0-9\]+.\[0-9\]+ ms"
}
sleep 1

send -- "cat /etc/resolv.conf\r"
expect {
	timeout {puts "TESTING ERROR 5.2\n";exit}
	"nameserver 8.8.4.4"
}
expect {
	timeout {puts "TESTING ERROR 5.3\n";exit}
	"nameserver 8.8.8.8"
}
expect {
	timeout {puts "TESTING ERROR 5.4\n";exit}
	"nameserver 4.2.2.1"
}
after 100
expect {
	timeout {puts "TESTING ERROR 5.5\n";exit}
	"nameserver ::2"
}
send -- "exit\r"
sleep 1

# test disabled, as Github CI uses systemd-resolved, which does not work
# properly with --dns=, so curl does not use the specified nameserver
#send -- "firejail --trace --dns=208.67.222.222 -- curl --silent --output /dev/null debian.org\r"
#expect {
#	timeout {puts "TESTING ERROR 6.1\n";exit}
#	"connect"
#}
#expect {
#	timeout {puts "TESTING ERROR 6.2\n";exit}
#	"208.67.222.222"
#}
#expect {
#	timeout {puts "TESTING ERROR 6.3\n";exit}
#	"53"
#}
#after 100

send -- "exit\r"
sleep 1

puts "\nall done\n"
