Test-ServiceOnboarding:
    New test module for validating Service Onboarding.
    Added exampleservice to start with, going forward test scenarios
    will validate any new service onboarding on the CORD.

Change-Id: I92e13a7e257e092d738d2e397c3f78530cb18b38
diff --git a/src/test/utils/OnboardingServiceUtils.py b/src/test/utils/OnboardingServiceUtils.py
new file mode 100644
index 0000000..08398f8
--- /dev/null
+++ b/src/test/utils/OnboardingServiceUtils.py
@@ -0,0 +1,183 @@
+import os
+import shutil
+import re
+from novaclient import client as nova_client
+from SSHTestAgent import SSHTestAgent
+from CordTestUtils import *
+from CordTestUtils import log_test as log
+
+log.setLevel('INFO')
+
+class OnboardingServiceUtils(object):
+
+    @classmethod
+    def setUp(cls):
+        pass
+
+    @classmethod
+    def tearDown(cls):
+        pass
+
+    '''
+    @method: get_nova_credentials_v2
+    @Description: Get nova credentials
+    @params:
+    returns credential from env
+    '''
+    @classmethod
+    def get_nova_credentials_v2(cls):
+        credential = {}
+        credential['username'] = os.environ['OS_USERNAME']
+        credential['api_key'] = os.environ['OS_PASSWORD']
+        credential['auth_url'] = os.environ['OS_AUTH_URL']
+        credential['project_id'] = os.environ['OS_TENANT_NAME']
+        return credential
+
+    '''
+    @method: get_compute_nodes
+    @Description: Get the list of compute nodes
+    @params:
+    returns  node list
+    '''
+    @classmethod
+    def get_compute_nodes(cls):
+        credentials = cls.get_nova_credentials_v2()
+        nvclient = nova_client.Client('2', **credentials)
+        return nvclient.hypervisors.list()
+
+    '''
+    @method: get_exampleservices
+    @Description: Get list of exampleservice's running in compute node
+    @params: status of exampleservice
+    returns exampleservice wrappers
+    '''
+    @classmethod
+    def get_exampleservices(cls, active = True):
+        credentials = cls.get_nova_credentials_v2()
+        nvclient = nova_client.Client('2', **credentials)
+        exampleservices = nvclient.servers.list(search_opts = {'all_tenants': 1})
+        if active is True:
+            exampleservices = filter(lambda exampleservice: exampleservice.status == 'ACTIVE', exampleservices)
+        exampleservice_wrappers = []
+        for exampleservice in exampleservices:
+            exampleservice_wrappers.append(ExampleSeviceWrapper(exampleservice))
+        return exampleservice_wrappers
+
+    '''
+    @method: health_check
+    @Description: Check if exampleservices are reachable
+    @params:
+    returns True
+    '''
+    @classmethod
+    def health_check(cls):
+        '''Returns 0 if all active exampleservices are reachable through the compute node'''
+        exampleservices = cls.get_exampleservices()
+        exampleservice_status = []
+        for exampleservice in exampleservices:
+            exampleservice_status.append(exampleservice.get_health())
+        unreachable = filter(lambda st: st == False, exampleservice_status)
+        return len(unreachable) == 0
+
+class ExampleSevicesWrapper(object):
+
+    def __init__(self, exampleservice):
+        self.exampleservice = exampleservice
+        self.name = self.exampleservice.name
+        self.compute_node = self.get_compute_node()
+        self.ip = self.get_ip()
+
+    '''
+    @method: get_compute_node
+    @Description:
+    @params:
+    returns compute node name
+    '''
+    def get_compute_node(self):
+        return self.exampleservice._info['OS-EXT-SRV-ATTR:hypervisor_hostname']
+
+    '''
+    @method: get_ip
+    @Description:
+    @params:
+    returns ip of network
+    '''
+    def get_ip(self):
+        if 'management' in self.exampleservice.networks:
+            ips = self.exampleservice.networks['management']
+            if len(ips) > 0:
+                return ips[0]
+        return None
+
+    '''
+    @method: run_cmd_compute
+    @Description:
+    @params:
+    returns Status & output
+    '''
+    def run_cmd_compute(self, cmd, timeout = 5):
+        ssh_agent = SSHTestAgent(self.compute_node)
+        st, output = ssh_agent.run_cmd(cmd, timeout = timeout)
+        if st == True and output:
+            output = output.strip()
+        else:
+            output = None
+
+        return st, output
+
+    '''
+    @method: get_health
+    @Description:
+    @params:
+    returns Status
+    '''
+    def get_health(self):
+        if self.ip is None:
+            return True
+        cmd = 'ping -c 1 {}'.format(self.ip)
+        log.info('Pinging ONBOARDED SERVICE %s at IP %s' %(self.name, self.ip))
+        st, _ = self.run_cmd_compute(cmd)
+        log.info('ONBOARDED SERVICE %s at IP %s is %s' %(self.name, self.ip, 'reachable' if st == True else 'unreachable'))
+        return st
+
+    '''
+    @method: check_access
+    @Description: validates access
+    @params:
+    returns Status
+    '''
+    def check_access(self):
+        if self.ip is None:
+           return True
+        ssh_agent = SSHTestAgent(self.compute_node)
+        st, _ = ssh_agent.run_cmd('ls', timeout=10)
+        if st == False:
+            log.error('Compute node at %s is not accessible' %(self.compute_node))
+            return st
+        log.info('Checking if ONBOARDING SERVICE at %s is accessible from compute node %s' %(self.ip, self.compute_node))
+        st, _ = ssh_agent.run_cmd('ssh {} ls'.format(self.ip), timeout=30)
+        if st == True:
+            log.info('OK')
+        return st
+
+    '''
+    @method: Validate services
+    @Description: This validates if expected service is running in example service VM
+    @params:
+    returns Status
+    '''
+    def validate_service_in_vm(self):
+        if self.ip is None:
+           return True
+        ssh_agent = SSHTestAgent(self.compute_node)
+        st, _ = ssh_agent.run_cmd('ls', timeout=10)
+        if st == False:
+            log.error('Compute node at %s is not accessible' %(self.compute_node))
+            return st
+        log.info('Checking if APACHE SERVICE at %s is running %s' %(self.ip, self.compute_node))
+        st, _ = ssh_agent.run_cmd('ssh {} ls /var/run/apache2/apache2.pid'.format(self.ip), timeout=30)
+        if st == True:
+            log.info('OK')
+        return st
+
+