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  }