github.com/rumpl/bof@v23.0.0-rc.2+incompatible/libnetwork/test/integration/dnet/bridge.bats (about) 1 # -*- mode: sh -*- 2 #!/usr/bin/env bats 3 4 load helpers 5 6 function test_single_network_connectivity() { 7 local nw_name start end 8 9 nw_name=${1} 10 start=1 11 end=${2} 12 13 # Create containers and connect them to the network 14 for i in `seq ${start} ${end}`; 15 do 16 dnet_cmd $(inst_id2port 1) container create container_${i} 17 net_connect 1 container_${i} ${nw_name} 18 done 19 20 # Now test connectivity between all the containers using service names 21 for i in `seq ${start} ${end}`; 22 do 23 if [ "${nw_name}" != "internal" ]; then 24 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_${i}) \ 25 "ping -c 1 www.google.com" 26 fi 27 for j in `seq ${start} ${end}`; 28 do 29 if [ "$i" -eq "$j" ]; then 30 continue 31 fi 32 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_${i}) \ 33 "ping -c 1 container_${j}" 34 done 35 done 36 37 if [ -n "$3" ]; then 38 return 39 fi 40 41 # Teardown the container connections and the network 42 for i in `seq ${start} ${end}`; 43 do 44 net_disconnect 1 container_${i} ${nw_name} 45 dnet_cmd $(inst_id2port 1) container rm container_${i} 46 done 47 } 48 49 @test "Test default bridge network" { 50 echo $(docker ps) 51 test_single_network_connectivity bridge 3 52 } 53 54 55 @test "Test default network dnet restart" { 56 echo $(docker ps) 57 58 for iter in `seq 1 2`; 59 do 60 test_single_network_connectivity bridge 3 61 if [ "$iter" -eq 1 ]; then 62 docker restart dnet-1-bridge 63 wait_for_dnet $(inst_id2port 1) dnet-1-bridge 64 fi 65 done 66 } 67 68 @test "Test default network dnet ungraceful restart" { 69 echo $(docker ps) 70 71 for iter in `seq 1 2`; 72 do 73 if [ "$iter" -eq 1 ]; then 74 test_single_network_connectivity bridge 3 skip 75 docker restart dnet-1-bridge 76 wait_for_dnet $(inst_id2port 1) dnet-1-bridge 77 else 78 test_single_network_connectivity bridge 3 79 fi 80 done 81 } 82 83 @test "Test bridge network" { 84 echo $(docker ps) 85 dnet_cmd $(inst_id2port 1) network create -d bridge singlehost 86 test_single_network_connectivity singlehost 3 87 dnet_cmd $(inst_id2port 1) network rm singlehost 88 } 89 90 @test "Test bridge network dnet restart" { 91 echo $(docker ps) 92 dnet_cmd $(inst_id2port 1) network create -d bridge singlehost 93 94 for iter in `seq 1 2`; 95 do 96 test_single_network_connectivity singlehost 3 97 if [ "$iter" -eq 1 ]; then 98 docker restart dnet-1-bridge 99 wait_for_dnet $(inst_id2port 1) dnet-1-bridge 100 fi 101 done 102 103 dnet_cmd $(inst_id2port 1) network rm singlehost 104 } 105 106 @test "Test bridge network dnet ungraceful restart" { 107 echo $(docker ps) 108 dnet_cmd $(inst_id2port 1) network create -d bridge singlehost 109 110 for iter in `seq 1 2`; 111 do 112 if [ "$iter" -eq 1 ]; then 113 test_single_network_connectivity singlehost 3 skip 114 docker restart dnet-1-bridge 115 wait_for_dnet $(inst_id2port 1) dnet-1-bridge 116 else 117 test_single_network_connectivity singlehost 3 118 fi 119 done 120 121 dnet_cmd $(inst_id2port 1) network rm singlehost 122 } 123 124 @test "Test multiple bridge networks" { 125 echo $(docker ps) 126 127 start=1 128 end=3 129 130 for i in `seq ${start} ${end}`; 131 do 132 dnet_cmd $(inst_id2port 1) container create container_${i} 133 for j in `seq ${start} ${end}`; 134 do 135 if [ "$i" -eq "$j" ]; then 136 continue 137 fi 138 139 if [ "$i" -lt "$j" ]; then 140 dnet_cmd $(inst_id2port 1) network create -d bridge sh${i}${j} 141 nw=sh${i}${j} 142 else 143 nw=sh${j}${i} 144 fi 145 146 osvc="svc${i}${j}" 147 dnet_cmd $(inst_id2port 1) service publish ${osvc}.${nw} 148 dnet_cmd $(inst_id2port 1) service attach container_${i} ${osvc}.${nw} 149 done 150 done 151 152 for i in `seq ${start} ${end}`; 153 do 154 echo ${i1} 155 for j in `seq ${start} ${end}`; 156 do 157 echo ${j1} 158 if [ "$i" -eq "$j" ]; then 159 continue 160 fi 161 162 osvc="svc${j}${i}" 163 echo "pinging ${osvc}" 164 dnet_cmd $(inst_id2port 1) service ls 165 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_${i}) "cat /etc/hosts" 166 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_${i}) "ping -c 1 ${osvc}" 167 done 168 done 169 170 svcs=( 171 0,0 172 2,3 173 1,3 174 1,2 175 ) 176 177 echo "Test connectivity failure" 178 for i in `seq ${start} ${end}`; 179 do 180 IFS=, read a b <<<"${svcs[$i]}" 181 osvc="svc${a}${b}" 182 echo "pinging ${osvc}" 183 runc_nofail $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_${i}) "ping -c 1 ${osvc}" 184 [ "${status}" -ne 0 ] 185 done 186 187 for i in `seq ${start} ${end}`; 188 do 189 for j in `seq ${start} ${end}`; 190 do 191 if [ "$i" -eq "$j" ]; then 192 continue 193 fi 194 195 if [ "$i" -lt "$j" ]; then 196 nw=sh${i}${j} 197 else 198 nw=sh${j}${i} 199 fi 200 201 osvc="svc${i}${j}" 202 dnet_cmd $(inst_id2port 1) service detach container_${i} ${osvc}.${nw} 203 dnet_cmd $(inst_id2port 1) service unpublish ${osvc}.${nw} 204 205 done 206 dnet_cmd $(inst_id2port 1) container rm container_${i} 207 done 208 209 for i in `seq ${start} ${end}`; 210 do 211 for j in `seq ${start} ${end}`; 212 do 213 if [ "$i" -eq "$j" ]; then 214 continue 215 fi 216 217 if [ "$i" -lt "$j" ]; then 218 dnet_cmd $(inst_id2port 1) network rm sh${i}${j} 219 fi 220 done 221 done 222 223 } 224 225 @test "Test bridge network alias support" { 226 dnet_cmd $(inst_id2port 1) network create -d bridge br1 227 dnet_cmd $(inst_id2port 1) container create container_1 228 net_connect 1 container_1 br1 container_2:c2 229 dnet_cmd $(inst_id2port 1) container create container_2 230 net_connect 1 container_2 br1 231 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 container_2" 232 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 c2" 233 net_disconnect 1 container_1 br1 234 net_disconnect 1 container_2 br1 235 dnet_cmd $(inst_id2port 1) container rm container_1 236 dnet_cmd $(inst_id2port 1) container rm container_2 237 dnet_cmd $(inst_id2port 1) network rm br1 238 } 239 240 241 @test "Test bridge network global alias support" { 242 dnet_cmd $(inst_id2port 1) network create -d bridge br1 243 dnet_cmd $(inst_id2port 1) network create -d bridge br2 244 dnet_cmd $(inst_id2port 1) container create container_1 245 net_connect 1 container_1 br1 : c1 246 dnet_cmd $(inst_id2port 1) container create container_2 247 net_connect 1 container_2 br1 : shared 248 dnet_cmd $(inst_id2port 1) container create container_3 249 net_connect 1 container_3 br1 : shared 250 251 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_2) "ping -c 1 container_1" 252 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_2) "ping -c 1 c1" 253 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 container_2" 254 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 shared" 255 256 net_disconnect 1 container_2 br1 257 dnet_cmd $(inst_id2port 1) container rm container_2 258 259 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 container_3" 260 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 shared" 261 262 net_disconnect 1 container_1 br1 263 dnet_cmd $(inst_id2port 1) container rm container_1 264 net_disconnect 1 container_3 br1 265 dnet_cmd $(inst_id2port 1) container rm container_3 266 267 dnet_cmd $(inst_id2port 1) network rm br1 268 } 269 270 @test "Test bridge network internal network" { 271 echo $(docker ps) 272 dnet_cmd $(inst_id2port 1) network create -d bridge --internal internal 273 dnet_cmd $(inst_id2port 1) container create container_1 274 # connects to internal network, confirm it can't communicate with outside world 275 net_connect 1 container_1 internal 276 run runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 8.8.8.8" 277 [[ "$output" == *"1 packets transmitted, 0 packets received, 100% packet loss"* ]] 278 net_disconnect 1 container_1 internal 279 # connects to bridge network, confirm it can communicate with outside world 280 net_connect 1 container_1 bridge 281 runc $(dnet_container_name 1 bridge) $(get_sbox_id 1 container_1) "ping -c 1 8.8.8.8" 282 net_disconnect 1 container_1 bridge 283 dnet_cmd $(inst_id2port 1) container rm container_1 284 # test communications within internal network 285 test_single_network_connectivity internal 3 286 dnet_cmd $(inst_id2port 1) network rm internal 287 }