Created
January 4, 2016 04:15
-
-
Save phemmer/8d3f9364a8466b30f712 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| docker=docker | |
| docker=/home/phemmer/git/docker/bundles/latest/dynbinary/docker | |
| cd $(mktemp -d) | |
| cat > entrypoint.sh <<'EOF' | |
| #!/bin/sh | |
| cp /etc/resolv.conf /etc/resolv.conf.orig | |
| echo "nameserver 127.0.0.1" > /etc/resolv.conf | |
| echo "search example.com" >> /etc/resolv.conf | |
| exec dnsmasq -d --user=root --resolv-file=/etc/resolv.conf.orig "$@" | |
| EOF | |
| chmod a+x entrypoint.sh | |
| cat > Dockerfile <<'EOF' | |
| FROM fedora | |
| RUN dnf install -y dnsmasq bind-utils | |
| ADD entrypoint.sh /entrypoint | |
| ENTRYPOINT ["/entrypoint"] | |
| EOF | |
| $docker build -t dnstest/dnsmasq . | |
| net=$(base64 /dev/urandom | tr -d '/+=' | head -c 12) | |
| $docker network create --driver bridge $net | |
| dnsmasq1_cid=$( $docker run -d --net=$net --add-host bar.example.com:4.5.6.7 dnstest/dnsmasq --host-record=foo.example.com,1.2.3.4 ) | |
| #dnsmasq1_ip=$( $docker inspect --format='{{.NetworkSettings.IPAddress}}' $dnsmasq1_cid ) | |
| dnsmasq1_ip=$( $docker inspect --format="{{.NetworkSettings.Networks.${net}.IPAddress}}" $dnsmasq1_cid ) | |
| echo "dnsmasq1: $dnsmasq1_cid" | |
| dnsmasq2_cid=$( $docker run -d --net=$net --dns=$dnsmasq1_ip --privileged dnstest/dnsmasq ) | |
| #dnsmasq2_ip=$( $docker inspect --format='{{.NetworkSettings.IPAddress}}' $dnsmasq2_cid ) | |
| dnsmasq2_ip=$( $docker inspect --format="{{.NetworkSettings.Networks.${net}.IPAddress}}" $dnsmasq2_cid ) | |
| echo "dnsmasq2: $dnsmasq2_cid" | |
| $docker exec $dnsmasq2_cid sh -c 'iptables -F; iptables -t nat -F; iptables -t mangle -F' | |
| digs=( | |
| ${dnsmasq1_cid},localhost,a,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},localhost,a,bar.example.com,4.5.6.7 | |
| ${dnsmasq1_cid},localhost,any,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},localhost,any,bar.example.com,4.5.6.7 | |
| ${dnsmasq1_cid},${dnsmasq1_ip},a,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},${dnsmasq1_ip},a,bar.example.com,4.5.6.7 | |
| ${dnsmasq1_cid},${dnsmasq1_ip},any,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},${dnsmasq1_ip},any,bar.example.com,4.5.6.7 | |
| ${dnsmasq1_cid},${dnsmasq2_ip},a,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},${dnsmasq2_ip},a,bar.example.com,4.5.6.7 | |
| ${dnsmasq1_cid},${dnsmasq2_ip},any,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},${dnsmasq2_ip},any,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},localhost,a,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},localhost,a,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},localhost,any,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},localhost,any,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},${dnsmasq1_ip},a,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},${dnsmasq1_ip},a,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},${dnsmasq1_ip},any,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},${dnsmasq1_ip},any,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},${dnsmasq2_ip},a,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},${dnsmasq2_ip},a,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},${dnsmasq2_ip},any,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},${dnsmasq2_ip},any,bar.example.com,4.5.6.7 | |
| ) | |
| for lookup in "${digs[@]}"; do | |
| IFS=, read cid host type record result <<<"$lookup" | |
| cmd=( dig +short @$host $type $record ) | |
| output="$( $docker exec $cid "${cmd[@]}" )" | |
| if [[ "$output" != "$result" ]]; then | |
| echo "${cid:0:12} --" "${cmd[@]}" "-- fail (expected=$result actual=$output)" >&2 | |
| else | |
| echo "${cid:0:12} --" "${cmd[@]}" "-- pass" | |
| fi | |
| done | |
| hosts=( | |
| ${dnsmasq1_cid},ahosts,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},ahostsv4,foo.example.com,1.2.3.4 | |
| ${dnsmasq1_cid},ahostsv6,foo.example.com,::ffff:1.2.3.4 | |
| ${dnsmasq1_cid},ahosts,bar.example.com,4.5.6.7 | |
| ${dnsmasq1_cid},ahostsv4,bar.example.com,4.5.6.7 | |
| ${dnsmasq1_cid},ahostsv6,bar.example.com,::ffff:4.5.6.7 | |
| ${dnsmasq2_cid},ahosts,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},ahostsv4,foo.example.com,1.2.3.4 | |
| ${dnsmasq2_cid},ahostsv6,foo.example.com,::ffff:1.2.3.4 | |
| ${dnsmasq2_cid},ahosts,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},ahostsv4,bar.example.com,4.5.6.7 | |
| ${dnsmasq2_cid},ahostsv6,bar.example.com,::ffff:4.5.6.7 | |
| ${dnsmasq1_cid},ahosts,foo,1.2.3.4 | |
| ${dnsmasq1_cid},ahostsv4,foo,1.2.3.4 | |
| ${dnsmasq1_cid},ahostsv6,foo,::ffff:1.2.3.4 | |
| ${dnsmasq1_cid},ahosts,bar,4.5.6.7 | |
| ${dnsmasq1_cid},ahostsv4,bar,4.5.6.7 | |
| ${dnsmasq1_cid},ahostsv6,bar,::ffff:4.5.6.7 | |
| ${dnsmasq2_cid},ahosts,foo,1.2.3.4 | |
| ${dnsmasq2_cid},ahostsv4,foo,1.2.3.4 | |
| ${dnsmasq2_cid},ahostsv6,foo,::ffff:1.2.3.4 | |
| ${dnsmasq2_cid},ahosts,bar,4.5.6.7 | |
| ${dnsmasq2_cid},ahostsv4,bar,4.5.6.7 | |
| ${dnsmasq2_cid},ahostsv6,bar,::ffff:4.5.6.7 | |
| ) | |
| for host in "${hosts[@]}"; do | |
| IFS=, read cid type record result <<<"$host" | |
| cmd=( getent $type $record ) | |
| cmdstr="$( printf '%q ' "${cmd[@]}" )" | |
| output="$( $docker exec $cid sh -c "$cmdstr | awk '\$2 == \"STREAM\" { print \$1 }'" )" | |
| if [[ "$output" != "$result" ]]; then | |
| echo "${cid:0:12} --" "${cmd[@]}" "-- fail (expected=$result actual=$output)" >&2 | |
| else | |
| echo "${cid:0:12} --" "${cmd[@]}" "-- pass" | |
| fi | |
| done | |
| echo "pausing before deleting containers" | |
| read | |
| $docker rm -fv $dnsmasq2_cid | |
| $docker rm -fv $dnsmasq1_cid |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment