summaryrefslogtreecommitdiffhomepage
path: root/test/scenario_test/docker_control.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/scenario_test/docker_control.py')
-rw-r--r--test/scenario_test/docker_control.py236
1 files changed, 236 insertions, 0 deletions
diff --git a/test/scenario_test/docker_control.py b/test/scenario_test/docker_control.py
new file mode 100644
index 00000000..e081df26
--- /dev/null
+++ b/test/scenario_test/docker_control.py
@@ -0,0 +1,236 @@
+from fabric.api import local
+import time
+import os
+
+GOBGP_CONTAINER_NAME = "gobgp"
+GOBGP_ADDRESS = "10.0.255.1/16"
+GOBGP_CONFIG_FILE = "gobgpd.conf"
+BRIDGE_ADDRESS = "10.0.255.2"
+CONFIG_DIR = "/usr/local/gobgp"
+CONFIG_DIRR = "/usr/local/gobgp/"
+STARTUP_FILE_NAME = "gobgp_startup.sh"
+STARTUP_FILE = "/mnt/" + STARTUP_FILE_NAME
+BRIDGE_0 = "br0"
+BRIDGE_1 = "br1"
+BRIDGE_2 = "br2"
+
+def test_user_check():
+ root = False
+ outbuf = local("echo $USER", capture=True)
+ user = outbuf
+ if user == "root":
+ root = True
+
+ return root
+
+
+def docker_related_installation():
+ local("apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9", capture=True)
+ local('sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"', capture=True)
+ local("apt-get update", capture=True)
+ local("apt-get install -y --force-yes lxc-docker-1.3.2", capture=True)
+ local("ln -sf /usr/bin/docker.io /usr/local/bin/docker", capture=True)
+ local("gpasswd -a `whoami` docker", capture=True)
+ local("apt-get install -y --force-yes emacs23-nox", capture=True)
+ local("apt-get install -y --force-yes wireshark", capture=True)
+ local("apt-get install -y --force-yes iputils-arping", capture=True)
+ local("apt-get install -y --force-yes bridge-utils", capture=True)
+ local("apt-get install -y --force-yes tcpdump", capture=True)
+ local("apt-get install -y --force-yes lv", capture=True)
+ local("wget https://raw.github.com/jpetazzo/pipework/master/pipework -O /usr/local/bin/pipework", capture=True)
+ local("chmod 755 /usr/local/bin/pipework", capture=True)
+ local("docker pull osrg/quagga", capture=True)
+ local("docker pull osrg/gobgp", capture=True)
+ local("mkdir /usr/local/gobgp", capture=True)
+ local("docker run --privileged=true -v /usr/local/gobgp:/mnt --name gobgp --rm osrg/gobgp go run /root/gobgp/tools/route-server/quagga-rsconfig.go -c /mnt", capture=True)
+
+
+def docker_pkg_check():
+ docker_exists = False
+ outbuf = local("dpkg -l | grep docker | awk '{print $2}'", capture=True)
+ dpkg_list = outbuf.split('\n')
+ for dpkg in dpkg_list:
+ # print "lxc-docker in ",dpkg
+ if ("lxc-docker" in dpkg):
+ docker_exists = True
+ return docker_exists
+
+
+def docker_container_check():
+ container_exists = False
+ outbuf = local("docker ps", capture=True)
+ docker_ps = outbuf.split('\n')
+ for container in docker_ps:
+ container_name = container.split()[-1]
+ if container_name == GOBGP_CONTAINER_NAME:
+ container_exists = True
+ return container_exists
+
+
+def get_docker_containers():
+ containers = []
+ cmd = "docker ps | awk '{print $NF}' | grep -e '^[q][0-9][0-9]*$'"
+ outbuf = local(cmd, capture=True)
+ docker_ps = outbuf.split('\n')
+ for container in docker_ps:
+ if container != "NAMES":
+ containers.append(container.split()[-1])
+ return containers
+
+
+def docker_run_quagga(quagga_num):
+ quagga_name = "q" + str(quagga_num)
+ cmd = "docker run --privileged=true -v " + CONFIG_DIR + "/" + quagga_name + ":/etc/quagga --name " + quagga_name + " -id osrg/quagga"
+ local(cmd, capture=True)
+ quagga_address = "10.0.0." + str(quagga_num) + "/16"
+ cmd = "pipework " + BRIDGE_0 + " " + quagga_name + " " + quagga_address
+ local(cmd, capture=True)
+
+
+def docker_run_gobgp():
+ cmd = "docker run --privileged=true -v " + CONFIG_DIR + ":/mnt -d --name " + GOBGP_CONTAINER_NAME + " -id osrg/gobgp"
+ local(cmd, capture=True)
+ cmd = "pipework " + BRIDGE_0 + " " + GOBGP_CONTAINER_NAME + " " + GOBGP_ADDRESS
+ local(cmd, capture=True)
+
+
+def make_startup_file():
+ file_buff = '#!/bin/bash' + '\n'
+ file_buff += 'cd /root/gobgp' + '\n'
+ file_buff += 'git pull origin master' + '\n'
+ file_buff += 'go get -v' + '\n'
+ file_buff += 'go build' + '\n'
+ file_buff += './gobgp -f /mnt/gobgpd.conf'
+ cmd = "echo \"" + file_buff + "\" > " + CONFIG_DIRR + STARTUP_FILE_NAME
+ local(cmd, capture=True)
+ cmd = "chmod 755 " + CONFIG_DIRR + STARTUP_FILE_NAME
+ local(cmd, capture=True)
+
+
+def docker_containers_create(quagga_num):
+ bridge_setting_for_docker_connection(BRIDGE_0)
+ pwd = local("pwd", capture=True)
+ cmd = "go run " + pwd + "/quagga-rsconfig.go -n " + str(quagga_num) + " -c /usr/local/gobgp"
+ local(cmd, capture=True)
+ for num in range(1, quagga_num + 1):
+ docker_run_quagga(num)
+ docker_run_gobgp()
+ make_startup_file()
+
+
+def docker_stop_quagga(quagga):
+ cmd = "docker rm -f " + quagga
+ local(cmd, capture=True)
+ cmd = "rm -rf " + CONFIG_DIRR + quagga
+ local(cmd, capture=True)
+
+
+def docker_stop_gobgp():
+ cmd = "docker rm -f " + GOBGP_CONTAINER_NAME
+ local(cmd, capture=True)
+
+
+def docker_containers_destroy():
+ if docker_container_check() is True:
+ containers = get_docker_containers()
+ for container in containers:
+ docker_stop_quagga(container)
+ docker_stop_gobgp()
+ bridge_unsetting_for_docker_connection(BRIDGE_0)
+ cmd = "rm -rf " + CONFIG_DIRR + GOBGP_CONFIG_FILE
+ local(cmd, capture=True)
+ cmd = "rm -rf " + CONFIG_DIRR + STARTUP_FILE_NAME
+ local(cmd, capture=True)
+ else:
+ print "docker containers not exists."
+ os.exit(1)
+
+
+def docker_containers_recreate(quagga_num):
+ docker_containers_destroy()
+ docker_containers_create(quagga_num)
+
+
+def docker_container_append(quagga_num):
+ print "start append docker container."
+ pwd = local("pwd", capture=True)
+ cmd = "go run " + pwd + "/quagga-rsconfig.go -a " + str(quagga_num) + " -c /usr/local/gobgp"
+ local(cmd, capture=True)
+ docker_run_quagga(quagga_num)
+ cmd = "docker exec gobgp /usr/bin/pkill gobgp -SIGHUP"
+ local(cmd, capture=True)
+ print "please wait"
+ sleep_time = 15
+ time.sleep(sleep_time)
+ print "complete append docker container."
+
+
+def docker_container_depend(quagga_num):
+ print "start remove docker container."
+ quagga = "q" + str(quagga_num)
+ docker_stop_quagga(quagga)
+ print "please wait"
+ sleep_time = 15
+ time.sleep(sleep_time)
+ print "complete remove docker container."
+
+
+def bridge_setting_for_docker_connection(bridge):
+ sysfs_name = "/sys/class/net/" + bridge
+ if os.path.exists(sysfs_name):
+ bridge_unsetting_for_docker_connection(bridge)
+ bridge_setting_for_docker_connection(bridge)
+ else:
+ cmd = "brctl addbr " + bridge
+ local(cmd, capture=True)
+ cmd = "ifconfig " + bridge + " " + BRIDGE_ADDRESS
+ local(cmd, capture=True)
+ cmd = "ifconfig " + bridge + " up"
+ local(cmd, capture=True)
+
+
+def bridge_unsetting_for_docker_connection(bridge):
+ sysfs_name = "/sys/class/net/" + bridge
+ if os.path.exists(sysfs_name):
+ cmd = "ifconfig " + bridge + " down"
+ local(cmd, capture=True)
+ cmd = "brctl delbr " + bridge
+ local(cmd, capture=True)
+
+
+def gobgp_start():
+ cmd = "docker exec gobgp " + STARTUP_FILE + " > /dev/null 2>&1 &"
+ # cmd = "docker exec gobgp " + STARTUP_FILE
+ local(cmd, capture=True)
+
+
+def init_test_env_executor(quagga_num):
+ print "start initialization of test environment."
+ if test_user_check() is False:
+ print "you are not root"
+ print "please run the test after you login as root"
+ return
+
+ if docker_pkg_check():
+ if docker_container_check():
+ print "gobgp test environment already exists."
+ print "so that remake gobgp test environment."
+ docker_containers_recreate(quagga_num)
+ else:
+ print "make gobgp test environment."
+ docker_containers_create(quagga_num)
+ gobgp_start()
+
+ print "please wait"
+ sleep_time = 15
+ time.sleep(sleep_time)
+ print "complete initialization of test environment."
+
+
+def docker_related_install_executor():
+ print "start install of docker related"
+ if test_user_check() is False:
+ print "you are not root"
+ print "please run the test after you login as root"
+ return
+ docker_related_installation() \ No newline at end of file