Test: Install vtn cord app during cord-tester setup to make it consistent with ONOS cord apps being loaded.

Don't install cord if already installed which is true when specifying external controller for setup.

When running the tester in cord mode, make sure to install cord apps after restarting ONOS on cord to bring it back to the same state as before restart.

Change-Id: If4961867f5b08c4079660961f6a30be9011b3a57
(cherry picked from commit bd9b8a39b5a0550fd8c0cbb47c85538db03bda8f)
diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index da99655..4f06b2f 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -202,8 +202,10 @@
     onos_config_dir = os.path.join(onos_cord_dir, 'config')
     docker_yaml = os.path.join(onos_cord_dir, 'docker-compose.yml')
 
-    def __init__(self, conf):
+    def __init__(self, onos_ip, conf, boot_delay = 60):
+        self.onos_ip = onos_ip
         self.cord_conf_dir = conf
+        self.boot_delay = boot_delay
         if os.access(self.cord_conf_dir, os.F_OK) and not os.access(self.onos_cord_dir, os.F_OK):
             os.mkdir(self.onos_cord_dir)
             os.mkdir(self.onos_config_dir)
@@ -252,6 +254,9 @@
         #start the container using docker-compose
         cmd = 'cd {} && docker-compose up -d'.format(self.onos_cord_dir)
         os.system(cmd)
+        #Delay to make sure ONOS fully boots
+        time.sleep(self.boot_delay)
+        Onos.install_cord_apps(onos_ip = self.onos_ip)
 
     def build_image(self):
         build_cmd = 'cd {} && docker-compose build'.format(self.onos_cord_dir)
@@ -266,6 +271,7 @@
     onos_cord_apps = ( ('cord-config', '1.0-SNAPSHOT'),
                        ('aaa', '1.0-SNAPSHOT'),
                        ('igmp', '1.0-SNAPSHOT'),
+                       ('vtn', '1.0-SNAPSHOT'),
                        )
     ports = [ 8181, 8101, 9876, 6653, 6633, 2000, 2620 ]
     host_config_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'setup/onos-config')
diff --git a/src/test/utils/CordTestServer.py b/src/test/utils/CordTestServer.py
index a77b977..d946acb 100644
--- a/src/test/utils/CordTestServer.py
+++ b/src/test/utils/CordTestServer.py
@@ -28,7 +28,6 @@
 
 CORD_TEST_HOST = '172.17.0.1'
 CORD_TEST_PORT = 25000
-g_onos_cord = None
 
 class QuaggaStopWrapper(Container):
     def __init__(self, name = Quagga.NAME, image = Quagga.IMAGE, tag = 'latest'):
@@ -38,8 +37,10 @@
 
 class CordTestServer(object):
 
+    onos_cord = None
+
     def __restart_onos(self, config = None):
-        if g_onos_cord:
+        if self.onos_cord:
             onos_config = '{}/network-cfg.json'.format(OnosCord.onos_config_dir)
         else:
             onos_config = '{}/network-cfg.json'.format(Onos.host_config_dir)
@@ -49,8 +50,8 @@
             except:
                 pass
         print('Restarting ONOS')
-        if g_onos_cord:
-            g_onos_cord.start(restart = True, network_cfg = config)
+        if self.onos_cord:
+            self.onos_cord.start(restart = True, network_cfg = config)
         else:
             Onos(restart = True, network_cfg = config)
         return 'DONE'
@@ -99,10 +100,9 @@
 @nottest
 def cord_test_server_start(daemonize = True, cord_test_host = CORD_TEST_HOST,
                            cord_test_port = CORD_TEST_PORT, onos_cord = None):
-    global g_onos_cord
     server = SimpleXMLRPCServer( (cord_test_host, cord_test_port) )
     server.register_instance(CordTestServer())
-    g_onos_cord = onos_cord
+    CordTestServer.onos_cord = onos_cord
     if daemonize is True:
         d = daemon.DaemonContext(files_preserve = [server],
                                  detach_process = True)