diff --git a/src/test/setup/cord-test.sh b/src/test/setup/cord-test.sh
deleted file mode 100755
index f1a5004..0000000
--- a/src/test/setup/cord-test.sh
+++ /dev/null
@@ -1,209 +0,0 @@
-#!/usr/bin/env bash
-
-function show_help {
-    echo "Usage: ${0#*/} -h | this help -n <onos_ip> -O | use olt config | -r <radius_ip> -o <onos cnt image> -a < onos app file> -d <radius cnt image> -t <test type> -c | cleanup test containers -C <cleanup container list> -k | kill the test container -b <test cnt image> | build test container docker image"
-    exit 1
-}
-
-function cnt_ipaddr {
-    local image="${1}"
-    local cnt=`docker ps |grep "${image}" |awk '{print $1}'`
-    local ipaddr
-    ipaddr=`docker inspect -f '{{.NetworkSettings.IPAddress}}' $cnt`
-    echo $ipaddr
-}
-
-function onos_start {
-    local image="${1}"
-    local port_str=""
-    for p in 8181 8101 9876 6653 6633; do
-        port_str="$port_str -p $p:$p/tcp"
-    done
-    ONOS_APPS="drivers,openflow,proxyarp,aaa,igmp"
-    local cnt=`docker run -itd $port_str -e ONOS_APPS=${ONOS_APPS} $image /bin/bash`
-    local ipaddr
-    ipaddr=`docker inspect -f '{{.NetworkSettings.IPAddress}}' $cnt`
-    echo $ipaddr
-}
-
-test_type=dhcp
-onos_cnt_image=onosproject/onos
-radius_cnt_image=radius-server:dev
-onos_ip=
-radius_ip=
-OPTIND=1
-nose_cnt_image="onos:nosetest"
-cleanup=0
-kill_test_cnt=0
-build_cnt_image=
-cleanup_cnt_list=
-app_version=1.0-SNAPSHOT
-onos_app_file=$PWD/../apps/ciena-cordigmp-$app_version.oar
-olt_config=0
-
-while getopts "h?a:n:r:o:d:t:cC:kOb:" opt; do
-    case "$opt" in
-        h|\?)
-            show_help
-            exit 1
-            ;;
-        O)
-            olt_config=1
-            ;;
-        t)
-            test_type=$OPTARG
-            ;;
-        n)
-            onos_ip=$OPTARG
-            ;;
-        r)
-            radius_ip=$OPTARG
-            ;;
-        o)
-            onos_cnt_image=$OPTARG
-            ;;
-        d)
-            radius_cnt_image=$OPTARG
-            ;;
-        a)
-            onos_app_file=$OPTARG
-            ;;
-        c)
-            cleanup=1
-            ;;
-        C)
-            cleanup=1
-            cleanup_cnt_list=$OPTARG
-            ;;
-        k)
-            kill_test_cnt=1
-            ;;
-        b)
-            build_cnt_image=$OPTARG
-            ;;
-    esac
-done
-
-shift $(($OPTIND-1))
-
-if [ $# -gt 0 ]; then
-    echo "Invalid args"
-    show_help
-fi
-
-if [ $cleanup -eq 1 ]; then
-    if [ x"$cleanup_cnt_list" != "x" ]; then
-        IFS='-' read -r -a cleanup_list <<<"${cleanup_cnt_list}"
-        for container in "${cleanup_list[@]}"; do
-            cnt_id=`docker ps | grep "${container}" | awk '{print $1}'`
-            echo "Killing container $cnt_id"
-            docker kill $cnt_id
-        done
-        exit 0
-    fi
-    for container in `docker ps | grep "${nose_cnt_image}" | awk '{print $1}'`; do
-        echo "Killing test container $container"
-        docker kill $container
-    done
-    exit 0
-fi
-
-if [ x"$onos_ip" = "x" ]; then
-    ##First try fetching the existing ip for onos container
-    onos_ip=$(cnt_ipaddr $onos_cnt_image)
-    ##If we find no onos running, then spawn the container if we can
-    if [ x"$onos_ip" = "x" ]; then
-        ##If the container image is from onosproject, we can try starting it
-        if [[ "$onos_cnt_image" =~ "onosproject/" ]]; then
-            echo "Starting ONOS container $onos_cnt_image"
-            onos_ip=$(onos_start $onos_cnt_image)
-            echo "Waiting 60 seconds for ONOS to fully boot up"
-            sleep 60
-        fi
-    fi
-fi
-
-if [ x"$onos_ip" = "x" ]; then
-    echo "ONOS not running or container name is invalid"
-    exit 127
-fi
-
-if [ x"$radius_ip" = "x" ]; then
-    radius_ip=$(cnt_ipaddr $radius_cnt_image)
-fi
-
-echo "Onos IP $onos_ip, Radius IP $radius_ip, Test type $test_type"
-sed "s,%%CONTROLLER%%,$onos_ip,g" of-bridge-template.sh > $HOME/nose_exp/of-bridge.sh
-
-if [ x"$build_cnt_image" != "x" ]; then
-    echo "Building test container docker image $build_cnt_image"
-    (cd test_docker && docker build -t $build_cnt_image . )
-    sleep 2
-    echo "Done building docker image $build_cnt_image"
-    nose_cnt_image=$build_cnt_image
-fi
-
-function install_onos_app {
-    local app=$1
-    local onos_url="http://$onos_ip:8181/onos/v1/applications"
-    local curl="curl -sS --user karaf:karaf"
-    $curl -X POST -HContent-Type:application/octet-stream $onos_url?activate=true --data-binary @$app
-}
-
-echo "Installing and activating onos app $onos_app_file"
-
-install_onos_app $onos_app_file
-
-if [ $olt_config -eq 1 ]; then
-    olt_conf_loc="$PWD/olt_config.json"
-    olt_conf_test_loc="/root/test"${olt_conf_loc#$HOME\/nose_exp}
-    olt_env="OLT_CONFIG=$olt_conf_test_loc"
-    echo -e "\nTest running on OLT switch with olt env ${olt_env}"
-else
-    olt_env="OLT_CONFIG="
-    echo -e "\nTest running on OVS"
-fi
-echo "Starting test container $nose_cnt_image"
-test_cnt=`docker run -itd --privileged -v $HOME/nose_exp:/root/test -v /lib/modules:/lib/modules -e ONOS_CONTROLLER_IP=$onos_ip -e ONOS_AAA_IP=$radius_ip -e ${olt_env} $nose_cnt_image /bin/bash`
-echo "Setting up test container $test_cnt"
-docker exec $test_cnt pip install monotonic
-echo "Starting up the OVS switch on the test container $test_cnt"
-docker exec $test_cnt /root/test/of-bridge.sh br0
-status=0
-while [ $status -ne 0 ]; do
-    echo "Waiting for the switch to get connected to controller"
-    docker exec $test_cnt ovs-ofctl dump-flows br0  | grep "type=0x8942"
-    status=$?
-    sleep 1
-done
-sleep 5
-
-IFS='-' read -r -a tests <<<"${test_type}"
-for t in "${tests[@]}"; do
-    test_method="${t#*:}"
-    test="${t%%:*}"
-    case "$test" in
-        tls)
-            test_file="$test"AuthTest.py
-            ;;
-        *)
-            test_file="$test"Test.py
-            ;;
-    esac
-    if [ "$test_method" != "$t" ]; then
-        test_case="$test_file":"${test_method}"
-    else
-        test_case="$test_file"
-    fi
-    echo "Running test $test, test case $test_case"
-    docker exec $test_cnt nosetests -v /root/test/git/cord-tester/src/test/$test/"${test_case}"
-    echo "Test $t exited with status $?"
-done
-
-echo "Done running tests."
-
-if [ $kill_test_cnt -eq 1 ]; then
-    echo "Killing test container $test_cnt"
-    docker kill $test_cnt
-fi
-
