diff --git a/src/test/utils/CordContainer.py b/src/test/utils/CordContainer.py
index 4cfc79c..88823ff 100644
--- a/src/test/utils/CordContainer.py
+++ b/src/test/utils/CordContainer.py
@@ -784,3 +784,90 @@
     def build_image(cls, image = IMAGE):
         Xos.build_image(image, cls.dockerfile_path)
 
+
+class XosSyncVtn(Xos):
+    ports = [8080,]
+    env = None
+    NAME = 'xos-synchronizer-vtn'
+    IMAGE = 'xosproject/xos-synchronizer-vtn'
+    TAG = 'latest'
+    PREFIX = ''
+    dockerfile_path = os.path.join(Xos.setup_dir, 'synchronizer-vtn')
+
+    def __init__(self, name = NAME, image = IMAGE, prefix = '', tag = TAG,
+                 boot_delay = 60, restart = False, network_cfg = None, update = False):
+        Xos.__init__(self, name, image, prefix, tag, boot_delay, restart, network_cfg, update)
+
+    @classmethod
+    def build_image(cls, image = IMAGE):
+        Xos.build_image(image, cls.dockerfile_path)
+
+class XosSyncVtr(Xos):
+    ports = [8080,]
+    env = None
+    NAME = 'xos-synchronizer-vtr'
+    IMAGE = 'xosproject/xos-synchronizer-vtr'
+    TAG = 'latest'
+    PREFIX = ''
+    dockerfile_path = os.path.join(Xos.setup_dir, 'synchronizer-vtr')
+
+    def __init__(self, name = NAME, image = IMAGE, prefix = '', tag = TAG,
+                 boot_delay = 60, restart = False, network_cfg = None, update = False):
+        Xos.__init__(self, name, image, prefix, tag, boot_delay, restart, network_cfg, update)
+
+    @classmethod
+    def build_image(cls, image = IMAGE):
+        Xos.build_image(image, cls.dockerfile_path)
+
+class XosSyncVsg(Xos):
+    ports = [8080,]
+    env = None
+    NAME = 'xos-synchronizer-vsg'
+    IMAGE = 'xosproject/xos-synchronizer-vsg'
+    TAG = 'latest'
+    PREFIX = ''
+    dockerfile_path = os.path.join(Xos.setup_dir, 'synchronizer-vsg')
+
+    def __init__(self, name = NAME, image = IMAGE, prefix = '', tag = TAG,
+                 boot_delay = 60, restart = False, network_cfg = None, update = False):
+        Xos.__init__(self, name, image, prefix, tag, boot_delay, restart, network_cfg, update)
+
+    @classmethod
+    def build_image(cls, image = IMAGE):
+        Xos.build_image(image, cls.dockerfile_path)
+
+
+class XosSyncOnos(Xos):
+    ports = [8080,]
+    env = None
+    NAME = 'xos-synchronizer-onos'
+    IMAGE = 'xosproject/xos-synchronizer-onos'
+    TAG = 'latest'
+    PREFIX = ''
+    dockerfile_path = os.path.join(Xos.setup_dir, 'synchronizer-onos')
+
+    def __init__(self, name = NAME, image = IMAGE, prefix = '', tag = TAG,
+                 boot_delay = 60, restart = False, network_cfg = None, update = False):
+        Xos.__init__(self, name, image, prefix, tag, boot_delay, restart, network_cfg, update)
+
+    @classmethod
+    def build_image(cls, image = IMAGE):
+        Xos.build_image(image, cls.dockerfile_path)
+
+class XosSyncFabric(Xos):
+    ports = [8080,]
+    env = None
+    NAME = 'xos-synchronizer-fabric'
+    IMAGE = 'xosproject/xos-synchronizer-fabric'
+    TAG = 'latest'
+    PREFIX = ''
+    dockerfile_path = os.path.join(Xos.setup_dir, 'synchronizer-fabric')
+
+    def __init__(self, name = NAME, image = IMAGE, prefix = '', tag = TAG,
+                 boot_delay = 60, restart = False, network_cfg = None, update = False):
+        Xos.__init__(self, name, image, prefix, tag, boot_delay, restart, network_cfg, update)
+
+    @classmethod
+    def build_image(cls, image = IMAGE):
+        Xos.build_image(image, cls.dockerfile_path)
+
diff --git a/src/test/xos/xosTest.py b/src/test/xos/xosTest.py
index 19d4228..baefb01 100644
--- a/src/test/xos/xosTest.py
+++ b/src/test/xos/xosTest.py
@@ -25,9 +25,9 @@
 import os
 import json
 import pexpect
+import urllib
 log.setLevel('INFO')
 
-
 flatten = lambda l: chain.from_iterable(l)
 
 class xos_exchange(unittest.TestCase):
@@ -38,13 +38,13 @@
     XOS_BASE_CONTAINER_NAME = 'xos-base'
     XOS_BASE_CONTAINER_PORTS = [8000]
     XOS_SYN_OPENSTACK_CONTAINER_IMAGE = 'xosproject/xos-synchronizer-openstack'
-    XOS_SYN_OPENSTACK_CONTAINER_NAME = 'xos-synchronizer-openstack'
+    XOS_SYN_OPENSTACK_CONTAINER_NAME = 'xos-synchronizer'
     XOS_SYN_OPENSTACK_CONTAINER_PORTS = [8000]
-    XOS_POSTGRESQL_CONTAINER_IMAGE = 'ubuntu:14.04'
-    XOS_POSTGRESQL_CONTAINER_NAME = 'xos-postgresql'
+    XOS_POSTGRESQL_CONTAINER_IMAGE = 'xosproject/xos-postgres'
+    XOS_POSTGRESQL_CONTAINER_NAME = 'xos-db-postgres'
     XOS_POSTGRESQL_CONTAINER_PORTS = [5432]
-    XOS_SYNDICATE_MS_CONTAINER_IMAGE = 'ubuntu:14.04.4'
-    XOS_SYNDICATE_MS_CONTAINER_NAME = 'syndicate-ms'
+    XOS_SYNDICATE_MS_CONTAINER_IMAGE = 'xosproject/syndicate-ms'
+    XOS_SYNDICATE_MS_CONTAINER_NAME = 'xos-syndicate-ms'
     XOS_SYNDICATE_MS_CONTAINER_PORTS = [8080]
     XOS_SYNCHRONIZER_VTR_CONTAINER_IMAGE = 'xosproject/xos-synchronizer-vtr'
     XOS_SYNCHRONIZER_VTR_CONTAINER_NAME = 'xos-synchronizer-vtr'
@@ -64,6 +64,63 @@
     XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_IMAGE = 'xosproject/xos-synchronizer-onboarding'
     XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_NAME = 'xos-synchronizer-onboarding'
     XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_PORTS = [8080]
+    XOS_API_ERROR_STRING_MATCH_1 = 'The resource you\'re looking for doesn\'t exist'
+    XOS_API_ERROR_STRING_MATCH_2 = 'Application Error'
+    XOS_API_UTILS_POST_LOGIN = 'https://private-anon-873978896e-xos.apiary-mock.com/api/utility/login/'
+    #XOS_API_UTILS_GET_PORTFORWARDING = 'https://private-anon-873978896e-xos.apiary-mock.com/api/portforwarding/port'
+    XOS_API_UTILS_GET_PORT_FORWARDING = 'https://private-anon-873978896e-xos.apiary-mock.com/api/utility/portforwarding/'
+    XOS_API_UTILS_GET_SLICES_PLUS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/utility/slicesplus/'
+    XOS_API_UTILS_GET_SYNCHRONIZER = 'https://private-anon-873978896e-xos.apiary-mock.com/api/utility/synchronizer/'
+    XOS_API_UTILS_GET_ONBOARDING_STATUS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/utility/onboarding/service/ready'
+    XOS_API_UTILS_POST_TOSCA_RECIPE = 'https://private-anon-873978896e-xos.apiary-mock.com/api/utility/tosca/run/'
+    XOS_API_UTILS_GET_SSH_KEYS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/utility/sshkeys/'
+    XOS_API_TENANT_GET_ALL_SUBSCRIBERS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/'
+    XOS_API_TENANT_GET_SUBSCRIBER_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/'
+    XOS_API_TENANT_DELETE_SUBSCRIBER = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/'
+    XOS_API_TENANT_GET_SUBSCRIBER_FEATURE_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/'
+    XOS_API_TENANT_GET_READ_SUBSCRIBER_UPLINK_SPEED = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/uplink_speed/'
+    XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_UPLINK_SPEED = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/uplink_speed/'
+    XOS_API_TENANT_GET_READ_SUBSCRIBER_DOWNLINK_SPEED = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/downlink_speed/'
+    XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_DOWNLINK_SPEED = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/downlink_speed/'
+    XOS_API_TENANT_GET_READ_SUBSCRIBER_FEATURE_CDN = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/cdn/'
+    XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_FEATURE_CDN = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/cdn/'
+    XOS_API_TENANT_GET_READ_SUBSCRIBER_FEATURE_UVERSE = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/uverse/'
+    XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_FEATURE_UVERSE = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/uverse/'
+    XOS_API_TENANT_GET_READ_SUBSCRIBER_FEATURE_STATUS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/status/'
+    XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_FEATURE_STATUS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/subscriber/subscriber_id/features/status/'
+    XOS_API_TENANT_GET_ALL_TRUCKROLL = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/truckroll/truckroll_id/'
+    XOS_API_TENANT_POST_CREATE_TRUCKROLL = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/truckroll/truckroll_id/'
+    XOS_API_TENANT_GET_TRUCKROLL_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/truckroll/truckroll_id/'
+    XOS_API_TENANT_DELETE_TRUCKROLL_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/truckroll/truckroll_id/'
+    XOS_API_TENANT_GET_ALL_vOLT = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/volt/volt_id/'
+    XOS_API_TENANT_POST_CREATE_vOLT = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/volt/volt_id/'
+    XOS_API_TENANT_GET_vOLT_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/cord/volt/volt_id/'
+    XOS_API_TENANT_GET_ALL_ONOS_APPS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/tenant/onos/app/'
+    XOS_API_SERVICE_GET_ALL_EXAMPLE_SERVICE = 'https://private-anon-873978896e-xos.apiary-mock.com/api/service/exampleservice/'
+    XOS_API_SERVICE_GET_ALL_ONOS_SERVICE = 'https://private-anon-873978896e-xos.apiary-mock.com/api/service/onos/'
+    XOS_API_SERVICE_GET_ALL_vSG = 'https://private-anon-873978896e-xos.apiary-mock.com/api/service/vsg/'
+    XOS_API_CORE_GET_ALL_DEPLOYMENTS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/deployments/id/'
+    XOS_API_CORE_POST_CREATE_DEPLOYMENTS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/deployments/id/'
+    XOS_API_CORE_GET_DEPLOYMENT_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/deployments/id/'
+    XOS_API_CORE_DELETE_DEPLOYMENTS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/deployments/id/'
+    XOS_API_CORE_GET_ALL_FLAVORS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/flavoryys/id/'
+    XOS_API_CORE_POST_CREATE_FLAVORS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/flavors/id/'
+    XOS_API_CORE_GET_FLAVOR_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/flavors/id/'
+    XOS_API_CORE_DELETE_FLAVORS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/flavors/id/'
+    XOS_API_CORE_GET_ALL_INSTANCES = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/instances/'
+    XOS_API_CORE_POST_CREATE_INSTANCES = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/instances/?no_hyperlinks=1'
+    XOS_API_CORE_GET_INSTANCE_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/instances/id/'
+    XOS_API_CORE_DELETE_INSTANCES= 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/instances/id/'
+    XOS_API_CORE_GET_ALL_NODES = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/nodes/id/'
+    XOS_API_CORE_GET_ALL_SERVICES = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/services/id/'
+    XOS_API_CORE_POST_CREATE_SERVICE = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/services/id/'
+    XOS_API_CORE_GET_SERVICE_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/services/id/'
+    XOS_API_CORE_DELETE_SERVICE = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/services/id/'
+    XOS_API_CORE_GET_ALL_SITES = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/sites/'
+    XOS_API_CORE_GET_SITES_DETAILS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/sites/id/'
+    XOS_API_CORE_GET_ALL_SLICES = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/slices/id/'
+    XOS_API_CORE_GET_ALL_USERS = 'https://private-anon-873978896e-xos.apiary-mock.com/api/core/users/id/'
+
 
     def setUp(self):
         ''' Activate the XOS containers'''
@@ -89,36 +146,36 @@
                  xosBase = Xos_base(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYN_OPENSTACK_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSynOpenstack = Xos_sync_openstack(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSynOpenstack = XosSynchronizerOpenstack(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_POSTGRESQL_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosPostgresql = Xos_postgresql(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosPostgresql = XosPostgresql(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYNDICATE_MS_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSyndicateMs = Xos_syndicate_ms(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSyndicateMs = XosSyndicateMs(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYNCHRONIZER_VTR_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSynOpenstack = Xos_sync_vtr(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSynOpenstack = XosSyncVtr(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYNCHRONIZER_VSG_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSynOpenstack = Xos_sync_vsg(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSynOpenstack = XosSyncVsg(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYNCHRONIZER_ONOS_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSynOpenstack = Xos_sync_onos(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSynOpenstack = XosSyncOnos(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSynOpenstack = Xos_sync_fabric(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSynOpenstack = XosSyncFabric(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYNCHRONIZER_VTN_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSynOpenstack = Xos_sync_vtn(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSynOpenstack = XosSyncVtn(prefix = Container.IMAGE_PREFIX, update = False)
               if name == self.XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_NAME:
                  log.info('%s container is not running, hence build and run it, waiting until container is up' %name)
-                 xosSynOpenstack = Xos_sync_onboarding(prefix = Container.IMAGE_PREFIX, update = False)
+                 xosSynOpenstack = XosSynchronizerOnboarding(prefix = Container.IMAGE_PREFIX, update = False)
               if self.img_exists(image) != True:
-                 log.info('%s container image is not built on host, its a github issue' %name)
+                 log.info('%s container image is not built on host' %name)
                  assert_equal(False, True)
               if self.exists(name) != True:
-                 log.info('%s container image is build on host, but its not up and running' %name)
+                 log.info('%s container image is build on host' %name)
                  assert_equal(False, True)
 
     def container_status(self, image, name):
@@ -138,14 +195,14 @@
            return container_info
 
     def container_ping(self, image, name):
-        ''' This function is checking that container is able to ping to its ip '''
+        ''' This function is checking if container is reachable '''
         container_info = self.container_status(image= image, name= name)
         container_ip = container_info[0]['NetworkSettings']['Networks']['bridge']['IPAddress']
         ping_status = os.system('ping {} -c 3'.format(container_ip))
         if ping_status != 0:
-           log.info('%s container is not able to reach and ip is not ping, response %s = '%(name,ping_status))
+           log.info('%s container is not reachable, response %s = '%(name,ping_status))
            assert_equal(ping_status, 0)
-        log.info('%s container is able to reach and ip is ping, response = %s'%(name,ping_status))
+        log.info('%s container is not reachable, response = %s'%(name,ping_status))
         assert_equal(ping_status, 0)
 
     def container_listening_ports_info(self, image, name, ports_list):
@@ -165,14 +222,32 @@
                assert_equal(False, True)
 
     def container_stop_start(self):
-        ''' This function is checking container is stop and running if we start again'''
+        ''' This function is checking if container is stopped and started running again'''
 
+    def validate_url_response_data(self, url):
+        ''' This function is checking url responce and cross check errors on it output '''
+        response = urllib.urlopen(url)
+        data = response.read()
+        log.info('This is PORT FORWARDING URL reponse data {}'.format(data))
+        if not data:
+           log.info('{} Url did not returned any output from opencloud setup'.format(url))
+           assert_equal(True, False)
+        if self.XOS_API_ERROR_STRING_MATCH_1 in data:
+           log.info('Not an expected output from url'.format(url))
+           assert_equal(True, False)
+        if self.XOS_API_ERROR_STRING_MATCH_2 in data:
+           log.info('Not an expected output from url'.format(url))
+           assert_equal(True, False)
+
+    @nottest
     def test_xos_base_container_status(self):
         self.container_status(image = self.XOS_BASE_CONTAINER_IMAGE, name = self.XOS_BASE_CONTAINER_NAME)
 
+    @nottest
     def test_xos_base_container_ping(self):
         self.container_ping(image = self.XOS_BASE_CONTAINER_IMAGE, name = self.XOS_BASE_CONTAINER_NAME)
 
+    @nottest
     def test_xos_base_container_listening_ports(self):
         self.container_listening_ports_info(image = self.XOS_BASE_CONTAINER_IMAGE, name = self.XOS_BASE_CONTAINER_NAME,
                                              ports_list = self.XOS_BASE_CONTAINER_PORTS)
@@ -210,56 +285,73 @@
                                             name = self.XOS_SYNDICATE_MS_CONTAINER_NAME,
                                             ports_list = self.XOS_SYNDICATE_MS_CONTAINER_PORTS)
 
+    @nottest
     def test_xos_sync_vtr_container_status(self):
         self.container_status(image = self.XOS_SYNCHRONIZER_VTR_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_VTR_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_vtr_container_ping(self):
         self.container_ping(image = self.XOS_SYNCHRONIZER_VTR_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_VTR_CONTAINER_NAME)
 
-    def test_xos_sync_vtr_container_listening_ports(self):
+    @nottest
+    def ztest_xos_sync_vtr_container_listening_ports(self):
         self.container_listening_ports_info(image = self.XOS_SYNCHRONIZER_VTR_CONTAINER_IMAGE,
                                             name = self.XOS_SYNCHRONIZER_VTR_CONTAINER_NAME,
                                             ports_list = self.XOS_SYNCHRONIZER_VTR_CONTAINER_PORTS)
+
+    @nottest
     def test_xos_sync_vsg_container_status(self):
         self.container_status(image = self.XOS_SYNCHRONIZER_VSG_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_VSG_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_vsg_container_ping(self):
         self.container_ping(image = self.XOS_SYNCHRONIZER_VSG_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_VSG_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_vsg_container_listening_ports(self):
         self.container_listening_ports_info(image = self.XOS_SYNCHRONIZER_VSG_CONTAINER_IMAGE,
                                             name = self.XOS_SYNCHRONIZER_VSG_CONTAINER_NAME,
                                             ports_list = self.XOS_SYNCHRONIZER_VSG_CONTAINER_PORTS)
+    @nottest
     def test_xos_sync_onos_container_status(self):
         self.container_status(image = self.XOS_SYNCHRONIZER_ONOS_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_ONOS_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_onos_container_ping(self):
         self.container_ping(image = self.XOS_SYNCHRONIZER_ONOS_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_ONOS_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_onos_container_listening_ports(self):
         self.container_listening_ports_info(image = self.XOS_SYNCHRONIZER_ONOS_CONTAINER_IMAGE,
                                             name = self.XOS_SYNCHRONIZER_ONOS_CONTAINER_NAME,
                                             ports_list = self.XOS_SYNCHRONIZER_ONOS_CONTAINER_PORTS)
+    @nottest
     def test_xos_sync_fabric_container_status(self):
         self.container_status(image = self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_fabric_container_ping(self):
         self.container_ping(image = self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_fabric_container_listening_ports(self):
         self.container_listening_ports_info(image = self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_IMAGE,
                                             name = self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_NAME,
                                             ports_list = self.XOS_SYNCHRONIZER_FABRIC_CONTAINER_PORTS)
+    @nottest
     def test_xos_sync_vtn_container_status(self):
         self.container_status(image = self.XOS_SYNCHRONIZER_VTN_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_VTN_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_vtn_container_ping(self):
         self.container_ping(image = self.XOS_SYNCHRONIZER_VTN_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_VTN_CONTAINER_NAME)
 
+    @nottest
     def test_xos_sync_vtn_container_listening_ports(self):
         self.container_listening_ports_info(image = self.XOS_SYNCHRONIZER_VTN_CONTAINER_IMAGE,
                                             name = self.XOS_SYNCHRONIZER_VTN_CONTAINER_NAME,
                                             ports_list = self.XOS_SYNCHRONIZER_VTN_CONTAINER_PORTS)
+
     def test_xos_sync_onboarding_container_status(self):
         self.container_status(image = self.XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_IMAGE, name = self.XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_IMAGE)
 
@@ -270,3 +362,164 @@
         self.container_listening_ports_info(image = self.XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_IMAGE,
                                             name = self.XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_NAME,
                                             ports_list = self.XOS_SYNCHRONIZER_ONBOARDING_CONTAINER_PORTS)
+
+    def test_xos_api_post_login(self):
+        response = urllib.urlopen(self.XOS_API_UTILS_POST_LOGIN)
+        data = response.read()
+
+    def test_xos_api_get_utils_port_forwarding(self):
+        self.validate_url_response_data(url = self.XOS_API_UTILS_GET_PORT_FORWARDING)
+
+    def test_xos_api_get_utils_slices_plus(self):
+        self.validate_url_response_data(url = self.XOS_API_UTILS_GET_SLICES_PLUS)
+
+    def test_xos_api_get_utils_synchronizer(self):
+        self.validate_url_response_data(url = self.XOS_API_UTILS_GET_SYNCHRONIZER)
+
+    def test_xos_api_get_utils_onboarding_status(self):
+        self.validate_url_response_data(url = self.XOS_API_UTILS_GET_ONBOARDING_STATUS)
+
+    def test_xos_api_post_utils_tosca_recipe(self):
+        self.validate_url_response_data(url = self.XOS_API_UTILS_POST_TOSCA_RECIPE)
+
+    def test_xos_api_get_utils_ssh_keys(self):
+        self.validate_url_response_data(url = self.XOS_API_UTILS_GET_SSH_KEYS)
+
+    def test_xos_api_get_tenant_all_subscribers(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_ALL_SUBSCRIBERS)
+
+    def test_xos_api_get_tenant_subscribers_details(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_SUBSCRIBER_DETAILS)
+
+    def test_xos_api_get_tenant_subscriber_delete(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_DELETE_SUBSCRIBER)
+
+    def test_xos_api_get_tenant_subscribers_feature_details(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_SUBSCRIBER_FEATURE_DETAILS)
+
+    def test_xos_api_get_tenant_read_subscribers_feature_uplink_speed(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_READ_SUBSCRIBER_UPLINK_SPEED)
+
+    def test_xos_api_tenant_put_update_subscribers_feature_uplink_speed(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_UPLINK_SPEED)
+
+    def test_xos_api_get_tenant_read_subscribers_feature_downlink_speed(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_READ_SUBSCRIBER_DOWNLINK_SPEED)
+
+    def test_xos_api_tenant_put_update_subscribers_feature_downlink_speed(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_DOWNLINK_SPEED)
+
+    def test_xos_api_get_tenant_read_subscribers_feature_cdn(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_READ_SUBSCRIBER_FEATURE_CDN)
+
+    def test_xos_api_tenant_put_update_subscribers_feature_cdn(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_FEATURE_CDN)
+
+    def test_xos_api_get_tenant_read_subscribers_feature_uverse(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_READ_SUBSCRIBER_FEATURE_UVERSE)
+
+    def test_xos_api_tenant_put_update_subscribers_feature_uverse(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_FEATURE_UVERSE)
+
+    def test_xos_api_get_tenant_read_subscribers_feature_status(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_READ_SUBSCRIBER_FEATURE_STATUS)
+
+    def test_xos_api_tenant_put_update_subscribers_feature_status(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_PUT_UPDATE_SUBSCRIBER_FEATURE_STATUS)
+
+    def test_xos_api_tenant_get_all_truckroll(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_ALL_TRUCKROLL)
+
+    def test_xos_api_tenant_post_create_truckroll(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_POST_CREATE_TRUCKROLL)
+
+    def test_xos_api_tenant_get_truckroll_details(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_TRUCKROLL_DETAILS)
+
+    def test_xos_api_tenant_delete_trucroll(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_DELETE_TRUCKROLL_DETAILS)
+
+    def test_xos_api_tenant_get_all_volt(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_ALL_vOLT)
+
+    def test_xos_api_tenant_post_create_vOLT(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_POST_CREATE_vOLT)
+
+    def test_xos_api_tenant_get_volt_details(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_vOLT_DETAILS)
+
+    def test_xos_api_tenant_get_all_onos_apps(self):
+        self.validate_url_response_data(url = self.XOS_API_TENANT_GET_ALL_ONOS_APPS)
+
+    def test_xos_api_service_get_all_example_service(self):
+        self.validate_url_response_data(url = self.XOS_API_SERVICE_GET_ALL_EXAMPLE_SERVICE)
+
+    def test_xos_api_service_get_all_onos_service(self):
+        self.validate_url_response_data(url = self.XOS_API_SERVICE_GET_ALL_ONOS_SERVICE)
+
+    def test_xos_api_service_get_all_vsg(self):
+        self.validate_url_response_data(url = self.XOS_API_SERVICE_GET_ALL_vSG)
+
+    def test_xos_api_core_get_all_deployments(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_DEPLOYMENTS)
+
+    def test_xos_api_core_post_create_deployments(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_POST_CREATE_DEPLOYMENTS)
+
+    def test_xos_api_core_get_deployment_details(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_DEPLOYMENT_DETAILS)
+
+    def test_xos_api_core_delete_deployment(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_DELETE_DEPLOYMENTS)
+
+    def test_xos_api_core_get_all_flavors(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_FLAVORS)
+
+    def test_xos_api_core_post_create_flavors(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_POST_CREATE_FLAVORS)
+
+    def test_xos_api_core_get_flavor_details(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_FLAVOR_DETAILS)
+
+    def test_xos_api_core_delete_flavors(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_DELETE_FLAVORS)
+
+    def test_xos_api_core_get_all_instances(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_INSTANCES)
+
+    def test_xos_api_core_post_create_instances(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_POST_CREATE_INSTANCES)
+
+    def test_xos_api_core_get_instance_details(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_INSTANCE_DETAILS)
+
+    def test_xos_api_core_delete_instance(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_DELETE_INSTANCES)
+
+    def test_xos_api_core_get_all_nodes(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_NODES)
+
+    def test_xos_api_core_get_all_services(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_SERVICES)
+
+    def test_xos_api_core_post_create_service(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_POST_CREATE_SERVICE)
+
+    def test_xos_api_core_get_service_details(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_SERVICE_DETAILS)
+
+    def test_xos_api_core_delete_service(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_DELETE_SERVICE)
+
+    def test_xos_api_core_get_all_sites(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_SITES)
+
+    def test_xos_api_core_get_site_details(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_SITES_DETAILS)
+
+    def test_xos_api_core_get_all_slices(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_SLICES)
+
+    def test_xos_api_core_get_all_users(self):
+        self.validate_url_response_data(url = self.XOS_API_CORE_GET_ALL_USERS)
+
