diff --git a/charms/juju-env.sh b/charms/juju-env.sh
index 59fa9e7..61ef85e 100644
--- a/charms/juju-env.sh
+++ b/charms/juju-env.sh
@@ -1,3 +1,24 @@
+#!/usr/bin/env bash
+
+##
+# Copyright 2019 ETSI
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+
 # Set the Juju env variables for building a layer
 export JUJU_REPOSITORY=`pwd`
 export INTERFACE_PATH=$JUJU_REPOSITORY/interfaces
diff --git a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/hackfest_cloudinit_vnfd.yaml b/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/hackfest_cloudinit_vnfd.yaml
index 818c62a..24a6548 100644
--- a/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/hackfest_cloudinit_vnfd.yaml
+++ b/descriptor-packages/vnfd/hackfest_cloudinit_vnf/src/hackfest_cloudinit_vnfd.yaml
@@ -1,3 +1,28 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 ETSI
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
+# 19-aug-2019 : changed vdu image from hackfest3-mgmt to ubuntu1604
+##
+
 vnfd:vnfd-catalog:
     vnfd:
     -   id: hackfest_cloudinit-vnf
@@ -28,7 +53,7 @@
         vdu:
         -   id: mgmtVM
             name: mgmtVM
-            image: hackfest3-mgmt
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '1'
@@ -55,7 +80,7 @@
             cloud-init-file: cloud-config.txt
         -   id: dataVM
             name: dataVM
-            image: hackfest3-mgmt
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '1'
diff --git a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/hackfest_epasriov_vnfd.yaml b/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/hackfest_epasriov_vnfd.yaml
index f039389..476f126 100644
--- a/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/hackfest_epasriov_vnfd.yaml
+++ b/descriptor-packages/vnfd/hackfest_epasriov_vnf/src/hackfest_epasriov_vnfd.yaml
@@ -1,3 +1,28 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 ETSI
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
+# 19-aug-2019 : changed vdu image from hackfest3-mgmt & hackfest-pktgen to ubuntu1604
+##
+
 vnfd:vnfd-catalog:
     vnfd:
     -   id: hackfest_epasriov-vnf
@@ -28,7 +53,7 @@
         vdu:
         -   id: mgmtVM
             name: mgmtVM
-            image: hackfest3-mgmt
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '1'
@@ -64,7 +89,7 @@
             cloud-init-file: cloud-config.txt
         -   id: dataVM
             name: dataVM
-            image: hackfest-pktgen
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '8'
diff --git a/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/hackfest_multivdu_vnfd.yaml b/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/hackfest_multivdu_vnfd.yaml
index e8981ff..ff411e0 100644
--- a/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/hackfest_multivdu_vnfd.yaml
+++ b/descriptor-packages/vnfd/hackfest_multivdu_vnf/src/hackfest_multivdu_vnfd.yaml
@@ -1,3 +1,28 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 ETSI
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
+# 19-aug-2019 : changed vdu image from US1604 to ubuntu1604
+##
+
 vnfd:vnfd-catalog:
     vnfd:
     -   id: hackfest_multivdu-vnf
@@ -28,7 +53,7 @@
         vdu:
         -   id: mgmtVM
             name: mgmtVM
-            image: US1604
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '1'
@@ -54,7 +79,7 @@
 
         -   id: dataVM
             name: dataVM
-            image: US1604
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '1'
diff --git a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/hackfest_simplecharm_vnfd.yaml b/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/hackfest_simplecharm_vnfd.yaml
index ad9bdd5..7295c54 100644
--- a/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/hackfest_simplecharm_vnfd.yaml
+++ b/descriptor-packages/vnfd/hackfest_simplecharm_vnf/src/hackfest_simplecharm_vnfd.yaml
@@ -1,3 +1,28 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 ETSI
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com
+# 19-aug-2019 : changed vdu image from hackfest3-mgmt to ubuntu1604
+##
+
 vnfd:vnfd-catalog:
     vnfd:
     -   id: hackfest-simplecharm-vnf
@@ -28,7 +53,7 @@
         vdu:
         -   id: mgmtVM
             name: mgmtVM
-            image: hackfest3-mgmt
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '1'
@@ -55,7 +80,7 @@
             cloud-init-file: cloud-config.txt
         -   id: dataVM
             name: dataVM
-            image: hackfest3-mgmt
+            image: ubuntu1604
             count: '1'
             vm-flavor:
                 vcpu-count: '1'
diff --git a/devops-stages/stage-archive.sh b/devops-stages/stage-archive.sh
index 160b1a3..8dc677e 100755
--- a/devops-stages/stage-archive.sh
+++ b/devops-stages/stage-archive.sh
@@ -14,7 +14,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-PKG_DIRECTORIES="jenkins installers systest charms descriptor-packages tools docker"
+PKG_DIRECTORIES="jenkins installers systest charms descriptor-packages tools docker robot-systest"
 MDG_NAME=devops
 DEB_INSTALL=debian/osm-$MDG_NAME.install
 export DEBEMAIL="mmarchetti@sandvine.com"
diff --git a/docker/osmclient/Dockerfile b/docker/osmclient/Dockerfile
index 3bf5fb3..6afddbb 100644
--- a/docker/osmclient/Dockerfile
+++ b/docker/osmclient/Dockerfile
@@ -1,6 +1,8 @@
 ##
 # Copyright 2019 ETSI
 #
+# All Rights Reserved.
+#
 # Licensed under the Apache License, Version 2.0 (the "License"); you may
 # not use this file except in compliance with the License. You may obtain
 # a copy of the License at
@@ -14,7 +16,6 @@
 # under the License.
 ##
 
-########################################################################
 
 FROM ubuntu:16.04
 
@@ -25,6 +26,7 @@
 RUN apt-get update && apt-get -y install python \
     libcurl4-gnutls-dev libgnutls-dev iputils-ping python-pip \
     python-openstackclient wget
+
 RUN pip install -U pip && python -m pip install python-magic pyangbind pytest==4.6.3
 
 ARG REPOSITORY_BASE=http://osm-download.etsi.org/repository/osm/debian
diff --git a/jenkins/ci-pipelines/ci_stage_3.groovy b/jenkins/ci-pipelines/ci_stage_3.groovy
index dd2f22b..99ba600 100644
--- a/jenkins/ci-pipelines/ci_stage_3.groovy
+++ b/jenkins/ci-pipelines/ci_stage_3.groovy
@@ -19,7 +19,9 @@
  * 1. Bug 745 : Jayant Madavi, Mrityunjay Yadav : JM00553988@techmahindra.com : 23-july-2019 : Improvement to the code, typically we have 2 *    or more branches whose build gets triggered, ex master & release branch, the previous code was removing any/all docker. 
  *	  Now removing previous docker of the same branch, so that the other branch failed docker should not be removed. It also 
  *    acts as clean-up for previous docker remove failure.
+ * 2. Feature 7829 : Mrityunjay Yadav, Jayant Madavi: MY00514913@techmahindra.com : 19-Aug-2019 : Added a parameters & function to invoke Robot test.
  */
+
 properties([
     parameters([
         string(defaultValue: env.GERRIT_BRANCH, description: '', name: 'GERRIT_BRANCH'),
@@ -47,6 +49,9 @@
         booleanParam(defaultValue: true, description: '', name: 'DO_DOCKERPUSH'),
         booleanParam(defaultValue: false, description: '', name: 'SAVE_ARTIFACTS_OVERRIDE'),
         string(defaultValue: '/home/jenkins/hive/openstack-etsi.rc', description: '', name: 'HIVE_VIM_1'),
+        booleanParam(defaultValue: true, description: '', name: 'DO_ROBOT'),
+        string(defaultValue: 'sanity', description: 'smoke/vim/sanity/comprehensive are the options', name: 'TEST_NAME'),
+        string(defaultValue: '/home/jenkins/hive/robot-systest.cfg', description: '', name: 'ROBOT_VIM'),
     ])
 ])
 
@@ -70,6 +75,30 @@
     junit  '*.xml'
 }
 
+def run_robot_systest(stackName,tagName,testName,envfile=null) {
+    tempdir = sh(returnStdout: true, script: "mktemp -d").trim()
+    if ( !envfile )
+    {
+        sh(script: "touch ${tempdir}/env")
+        envfile="${tempdir}/env"
+    }
+    sh "docker run --network net${stackName} --env-file ${envfile} -v ${tempdir}:/usr/share/osm-devops/robot-systest/reports opensourcemano/osmclient:${tagName} bash -C /usr/share/osm-devops/robot-systest/run_test.sh --do_install -t ${testName}"
+    sh "cp ${tempdir}/* ."
+    outputDirectory = sh(returnStdout: true, script: "pwd").trim()
+    println ("Present Directory is : ${outputDirectory}")
+    step([
+        $class : 'RobotPublisher',
+        outputPath : "${outputDirectory}",
+        outputFileName : "*.xml",
+        disableArchiveOutput : false,
+        reportFileName : "report.html",
+        logFileName : "log.html",
+        passThreshold : 80,
+        unstableThreshold: 60.0,
+        otherFiles : "*.png",
+    ])
+}
+
 node("${params.NODE}") {
 
     sh 'env'
@@ -278,8 +307,16 @@
             if ( params.DO_STAGE_4 ) {
                 // override stage_archive to only archive on stable
                 stage_archive = false
-                stage("stage_4") {
-                    run_systest(container_name,container_name,"openstack_stage_4",params.HIVE_VIM_1)
+                stage("System Integration Test") {
+                    if ( params.DO_ROBOT ) {
+                        steps {
+                            run_robot_systest(container_name,container_name,params.TEST_NAME,params.ROBOT_VIM)
+                        }
+                    } else {
+                        steps{
+                            run_systest(container_name,container_name,"openstack_stage_4",params.HIVE_VIM_1)
+                        }
+                    }
 
                     if ( ! currentBuild.result.equals('UNSTABLE') ) {
                         stage_archive = keep_artifacts
@@ -314,8 +351,6 @@
             currentBuild.result = 'FAILURE'
         }
         finally {
-
-
             if ( params.DO_INSTALL ) {
                 if (error) {
                     if ( !params.SAVE_CONTAINER_ON_FAIL ) {
diff --git a/robot-systest/README_Robot_Test.md b/robot-systest/README_Robot_Test.md
new file mode 100644
index 0000000..7067946
--- /dev/null
+++ b/robot-systest/README_Robot_Test.md
@@ -0,0 +1,86 @@
+<!--
+Copyright 2019 Tech Mahindra Limited
+
+All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may
+not use this file except in compliance with the License. You may obtain
+a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+License for the specific language governing permissions and limitations
+under the License.
+-->
+
+
+# Step to run robot framework test standalone linux environment
+
+All installation commands run using root user(`sudo su`)
+## Step 1: Install python packages
+Install below python packages using pip
+>pip install python-magic pyangbind haikunator requests pyvcloud progressbar pathlib robotframework robotframework-seleniumlibrary robotframework-requests
+
+## Step 2: Install linux packages
+Install below linux packages
+>curl http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX/OSM%20ETSI%20Release%20Key.gpg | apt-key add -
+
+>add-apt-repository -y "deb http://osm-download.etsi.org/repository/osm/debian/ReleaseSIX stable devops osmclient IM" && apt update
+
+>curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
+
+>echo "deb [arch=amd64]  http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
+
+> apt-get install -y python-osmclient python-osm-im google-chrome-stable chromium-chromedriver
+
+>./git-repo/devops/tools/OVF_converter/install.sh
+
+## Step 3: checkout robot seed code
+Checkout devops from gerrit
+> git clone "https://osm.etsi.org/gerrit/osm/devops"
+
+If robot seed code not merged to to master, pull it
+> git pull "https://osm.etsi.org/gerrit/osm/devops" refs/changes/52/7852/4
+
+## Step 4: Set environmet
+for build test need to create env-file and provide below details and for Standalone testing export them
+```
+export OSM_HOSTNAME=<OSM server IP>
+```
+
+OpenStack Details
+```
+export OS_AUTH_URL=<auth url>
+export OS_PASSWORD=<password>
+export OS_PROJECT_NAME=<project name>
+export OS_VIM_CONFIG=<config value>
+```
+
+VCD Details
+```
+export VCD_AUTH_URL=<VCD auth url>
+export VCD_USERNAME=<VCD username>
+export VCD_PASSWORD=<VCD password>
+export VCD_TENANT_NAME=<VCD Tenant name>
+export VCD_ORGANIZATION=<VCD Org name>
+export VCD_VIM_CONFIG=<config value>
+```
+
+Note:- Optional
+```
+export NS_CONFIG=<NS Config Details>
+e.g. export NS_CONFIG="'{vld: [ {name: mgmtnet, vim-network-name: mgmt}]}'"
+```
+
+## Step 5: Run Test
+There are two ways to run the test-case:
+* use `devops/robot-systest/run_test.sh` file and provide test-name(vim/smoke/sanity/comprehensive).
+  > ./devops/robot-systest/run_test.sh -t smoke
+
+* use `robot` command
+  > robot -d path/to/report/dir -i test-tag-to-be-included -e test-tag-to-be-excluded path/to/testsuiet
+  
+  > robot -d devops/robot-systest/reports -i comprehensive devops/robot-systest/testsuite
\ No newline at end of file
diff --git a/robot-systest/lib/api/common.robot b/robot-systest/lib/api/common.robot
new file mode 100644
index 0000000..4724016
--- /dev/null
+++ b/robot-systest/lib/api/common.robot
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com
+##
+
+
+*** Variables ***
+${token}=  ${EMPTY}
+${HOST}=  ${EMPTY}
+
+
+*** Keywords ***
+Get Auth Token
+    [Tags]  auth_token
+
+    ${nbi_host}=    Get Environment Variable    OSM_HOSTNAME
+    ${passed}=    Run Keyword And Return Status    Should Contain    ${nbi_host}    :
+    Run Keyword If    ${passed}    Set Dockerized Host    ${nbi_host}
+    ...    ELSE    Set Standalone Host    ${nbi_host}
+
+    Create Session    osmhit    ${HOST}    verify=${FALSE}    debug=1    headers=${HEADERS}
+
+    Log Many    ${auth_token_uri}    @{data}    ${data}
+
+    ${resp}=    Post Request    osmhit    ${auth_token_uri}    data=${data}
+    log    ${resp}
+
+    Pass Execution If   ${resp.status_code} in ${success_status_code_list}   Get Auth Token completed
+
+    ${content}=     To Json   ${resp.content}
+    ${t}=    Get From Dictionary	${content}	    _id
+
+    Set Suite Variable     ${token}   ${t}
+
+
+Set Dockerized Host
+    [Arguments]  ${env_host}
+
+    Set Suite Variable     ${HOST}   https://${env_host}
+
+
+Set Standalone Host
+    [Arguments]  ${env_host}
+
+    Set Suite Variable     ${HOST}   https://${env_host}:9999
diff --git a/robot-systest/lib/api/vim_lib.robot b/robot-systest/lib/api/vim_lib.robot
new file mode 100644
index 0000000..a52354f
--- /dev/null
+++ b/robot-systest/lib/api/vim_lib.robot
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-sep-2019
+##
+
+
+*** Keywords ***
+Create Vim
+    [Arguments]  ${vim_name}     ${account_type}     ${auth_url}     ${user}     ${password}     ${tenant}       ${description}
+
+    &{request_data}=        Create Dictionary      vim_user=${user}    vim_password=${password}    vim_url=${auth_url}     vim_tenant_name=${tenant}   vim_type=${account_type}    description=${description}  name=${vim_name}
+
+    &{headers}=    Create Dictionary     Authorization=Bearer ${token}      Content-Type=application/json   Accept=application/json
+
+    Create Session    osmvim    ${HOST}    verify=${FALSE}    headers=${headers}
+
+    LOG   ${request_data}
+    ${res}=     Post Request    osmvim  ${create_vim_uri}   data=${request_data}
+    log    ${res.content}
+    Pass Execution If   ${res.status_code} in ${success_status_code_list}   Create Vim Request completed
+    Get Vim ID      ${res.content}
+
+
+Delete Vim
+    [Arguments]  ${vim_id}
+
+    ${uri} =	Catenate	SEPARATOR=/     ${create_vim_uri}      ${vim_id}
+    ${resp}=    Delete Request   osmvim   ${uri}
+
+    log   ${resp.content}
+    Pass Execution If      ${resp.status_code} in ${success_status_code_list}   Delete Vim Request completed
+
+
+Get Vim ID
+    [Arguments]  ${res}
+
+#    log to console      ${res}
+    ${content}=     To Json     ${res}
+    ${id}=      Get From Dictionary     ${content}	    id
+    Set Suite Variable     ${vim_id}   ${id}
+    log   Vim Id is ${vim_id}
diff --git a/robot-systest/lib/cli/ns_lib.robot b/robot-systest/lib/cli/ns_lib.robot
new file mode 100644
index 0000000..e3e3a02
--- /dev/null
+++ b/robot-systest/lib/cli/ns_lib.robot
@@ -0,0 +1,129 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+*** Variables ***
+${success_return_code}    0
+${ns_launch_max_wait_time}    5min
+${ns_launch_pol_time}    30sec
+${ns_delete_max_wait_time}    1min
+${ns_delete_pol_time}    15sec
+
+
+*** Keywords ***
+Get NS List
+    [Documentation]  Get ns instance list
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-list
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+
+
+Launch Network Services and Return
+    [Arguments]  ${vim_name}
+	
+	Should Not Be Empty    ${nsd_ids}    There are no NS descriptors to launch the NS
+    :FOR    ${nsd}    IN    @{nsd_ids}
+    \    ${ns_name}=    GENERATE NAME
+    \    Append To List     ${ns_ids}       ${ns_name}
+    \    Create Network Service    ${nsd}   ${vim_name}    ${ns_name}
+    \    Delete NS   ${ns_name}
+
+	
+Create Network Service
+    [Documentation]  Create ns at osm
+    [Arguments]  ${nsd}   ${vim_name}    ${ns_name}
+
+    ${ns_config}=   Get Environment Variable    NS_CONFIG    ${EMPTY}
+	Run Keyword If   ${ns_config}!='${EMPTY}'   Create Network Service With Config    ${nsd}    ${vim_name}    ${ns_name}    ${ns_config}
+	...    ELSE    Create Network Service Without Config    ${nsd}   ${vim_name}    ${ns_name}
+	
+    WAIT UNTIL KEYWORD SUCCEEDS     ${ns_launch_max_wait_time}   ${ns_launch_pol_time}   Check For NS Instance To Configured   ${ns_name}
+    Check For NS Instance For Failure    ${ns_name}
+	
+
+Create Network Service Without Config
+    [Documentation]  Create ns at osm
+    [Arguments]  ${nsd}   ${vim_name}    ${ns_name}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-create --ns_name ${ns_name} --nsd_name ${nsd} --vim_account ${vim_name}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+
+
+Create Network Service With Config
+    [Documentation]  Create ns at osm
+    [Arguments]  ${nsd}   ${vim_name}    ${ns_name}    ${ns_config}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-create --ns_name ${ns_name} --nsd_name ${nsd} --vim_account ${vim_name} --config ${ns_config}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+
+	
+Delete NS
+    [Documentation]  Delete ns
+    [Arguments]  ${ns}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-delete ${ns}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+
+    WAIT UNTIL KEYWORD SUCCEEDS  ${ns_delete_max_wait_time}   ${ns_delete_pol_time}   Check For NS Instance To Be Delete   ${ns}
+
+
+Check For NS Instance To Configured
+    [Arguments]  ${ns_name}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-list --filter name="${ns_name}"
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+    Should Contain Any      ${stdout}   configured    failed
+
+
+Check For NS Instance For Failure
+    [Arguments]  ${ns_name}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-list --filter name="${ns_name}"
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+    Should Not Contain      ${stdout}   failed
+
+
+Check For NS Instance To Be Delete
+    [Arguments]  ${ns}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-list
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+    Should Not Contain      ${stdout}   ${ns}
+
+
+Force Delete NS
+    [Documentation]  Forcely Delete ns
+    [Arguments]  ${ns}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm ns-delete ${ns}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	${success_return_code}
+    WAIT UNTIL KEYWORD SUCCEEDS    ${ns_delete_max_wait_time}   ${ns_delete_pol_time}   Check For NS Instance To Be Delete   ${ns}
diff --git a/robot-systest/lib/cli/nsd_lib.robot b/robot-systest/lib/cli/nsd_lib.robot
new file mode 100644
index 0000000..6a4ccbf
--- /dev/null
+++ b/robot-systest/lib/cli/nsd_lib.robot
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-sep-2019
+##
+
+*** Variables ***
+${success_return_code}    0
+${delete_max_wait_time}    1min
+${delete_pol_time}    15sec
+
+
+*** Keywords ***
+Get NSDs List
+    [Documentation]  Get nsds list
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm nsd-list
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+
+
+Create NSD
+    [Documentation]  Create nsd at osm
+    [Arguments]  ${nsd_pkg}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm nsd-create ${nsd_pkg}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+    [Return]  ${stdout}
+
+
+Delete NSD
+    [Documentation]  Delete nsd
+    [Arguments]  ${nsd_id}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm nsd-delete ${nsd_id}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+    WAIT UNTIL KEYWORD SUCCEEDS    ${delete_max_wait_time}   ${delete_pol_time}   Check For NSD   ${nsd_id}
+
+
+Check For NSD
+    [Arguments]  ${nsd_id}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm nsd-list
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+    Should Not Contain      ${stdout}   ${nsd_id}
+
+
+Force Delete NSD
+    [Documentation]  Forcely Delete nsd
+    [Arguments]  ${nsd_id}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm nsd-delete ${nsd_id}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}   ${success_return_code}
+
+
+Build NS Descriptor
+    [Documentation]  Build NS Descriptor from the descriptor-packages
+    [Arguments]  ${nsd path}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    make -C '${CURDIR}${/}../../..${nsd path}'
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}   ${success_return_code}
diff --git a/robot-systest/lib/cli/vim_account_lib.robot b/robot-systest/lib/cli/vim_account_lib.robot
new file mode 100644
index 0000000..699d199
--- /dev/null
+++ b/robot-systest/lib/cli/vim_account_lib.robot
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-sep-2019
+##
+
+
+*** Variables ***
+${success_return_code}    0
+${name}     "helloworld-os"
+${user}     "robottest"
+${password}     "fred"
+${authurl}      "https://169.254.169.245/"
+${type}     "openstack"
+${desc}     "a test vim"
+${tenant}   "robottest2"
+
+
+*** Keywords ***
+Create Vim Account
+    [Documentation]   Create a new vim account
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vim-create --name ${name} --user ${user} --password ${password} --auth_url ${authurl} --tenant ${tenant} --account_type ${type} --description ${desc}
+    log  ${stdout}
+    Should Be Equal As Integers 	${rc}    ${success_return_code}
+
+
+Get Vim List
+    [Documentation]  Get a vim account list
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vim-list
+    log     ${stdout}
+    Log To Console  ${stdout}
+    Should Be Equal As Integers 	${rc}    ${success_return_code}
+
+
+Delete Vim Account
+    [Documentation]  delete vim account details
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vim-delete ${name}
+    log  ${stdout}
+    Should Be Equal As Integers 	${rc}    ${success_return_code}
+
+
+VIM Setup To Launch Network Services
+    [Documentation]  Setup a VIM to launch network services
+
+    ${vmware_url}=  Get Environment Variable    VCD_AUTH_URL   ${EMPTY}
+    ${openstack_url}=   Get Environment Variable    OS_AUTH_URL   ${EMPTY}
+    ${vmware_vim}=    Run Keyword And Return If   '${vmware_url}'!='${EMPTY}'   Setup Vmware Vim   ${vmware_url}   'vmware'      'pytest system test'
+    ${openstack_vim}=    Run Keyword And Return If   '${openstack_url}'!='${EMPTY}'   Setup Openstack Vim    ${openstack_url}    'openstack'   'pytest system test'
+
+    Log Many   @{vim}
+
+
+Setup Openstack Vim
+    [Documentation]  Openstack Vim Account Setup
+    [Arguments]  ${authurl}  ${type}     ${desc}
+
+    ${user}=  Get Environment Variable    OS_USERNAME   ''
+    ${password}=  Get Environment Variable    OS_PASSWORD   ''
+    ${tenant}=  Get Environment Variable    OS_PROJECT_NAME   ''
+    ${vim-config}=  Get Environment Variable    OS_VIM_CONFIG   ''
+    ${vim_name}=    GENERATE NAME
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vim-create --name ${vim_name} --user ${user} --password ${password} --auth_url ${authurl} --tenant ${tenant} --account_type ${type} --description ${desc} --config ${vim-config}
+    log  ${stdout}
+    Should Be Equal As Integers    ${rc}    ${success_return_code}
+    Append To List     ${vim}       ${stdout}
+    [Return]  ${stdout}
+
+
+Setup Vmware Vim
+    [Documentation]  Vmware Vim Account Setup
+    [Arguments]  ${authurl}  ${type}     ${desc}
+
+    ${user}=  Get Environment Variable    VCD_USERNAME   ''
+    ${password}=  Get Environment Variable    VCD_PASSWORD   ''
+    ${tenant}=  Get Environment Variable    VCD_TENANT_NAME   ''
+    ${vcd-org}=  Get Environment Variable    VCD_ORGANIZATION   ''
+    ${vim-config}=  Get Environment Variable    VCD_VIM_CONFIG   ''
+    ${vim_name}=    GENERATE NAME
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vim-create --name ${vim_name} --user ${user} --password ${password} --auth_url ${authurl} --tenant ${tenant} --account_type ${type} --description ${desc} --config ${vim-config}
+    log  ${stdout}
+    Should Be Equal As Integers    ${rc}    ${success_return_code}
+    Append To List     ${vim}       ${stdout}
+    [Return]  ${stdout}
+
+
+Force Delete Vim Account
+    [Documentation]  delete vim account details
+    [Arguments]  ${vim_name}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vim-delete ${vim_name}
+    log  ${stdout}
+    Should Be Equal As Integers 	${rc}    ${success_return_code}
diff --git a/robot-systest/lib/cli/vnfd_lib.robot b/robot-systest/lib/cli/vnfd_lib.robot
new file mode 100644
index 0000000..1b99f43
--- /dev/null
+++ b/robot-systest/lib/cli/vnfd_lib.robot
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-sep-2019
+##
+
+*** Variables ***
+${success_return_code}    0
+${delete_max_wait_time}    1min
+${delete_pol_time}    15sec
+
+
+*** Keywords ***
+Get VNFDs List
+    [Documentation]  Get vnfds list
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vnfd-list
+    log     ${stdout}
+    log     ${rc}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+
+
+Create VNFD
+    [Documentation]  Create vnfd at osm
+    [Arguments]  ${vnfd_pkg}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vnfd-create ${vnfd_pkg}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+    [Return]  ${stdout}
+
+
+Delete VNFD
+    [Documentation]  Delete vnfd
+    [Arguments]  ${vnfd_id}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vnfd-delete ${vnfd_id}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+    WAIT UNTIL KEYWORD SUCCEEDS    ${delete_max_wait_time}   ${delete_pol_time}   Check For VNFD   ${vnfd_id}
+
+
+Check For VNFD
+    [Arguments]  ${vnfd_id}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vnfd-list
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+    Should Not Contain      ${stdout}   ${vnfd_id}
+
+
+Force Delete VNFD
+    [Documentation]  Forcely Delete vnfd
+    [Arguments]  ${vnfd_id}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    osm vnfd-delete ${vnfd_id}
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
+
+
+Build VNF Descriptor
+    [Documentation]  Build VNF Descriptor from the descriptor-packages
+    [Arguments]  ${vnfd path}
+
+    ${rc}   ${stdout}=      Run and Return RC and Output	    make -C '${CURDIR}${/}../../..${vnfd path}'
+    log     ${stdout}
+    Should Be Equal As Integers 	${rc}	  ${success_return_code}
diff --git a/robot-systest/lib/client_lib/client_lib.py b/robot-systest/lib/client_lib/client_lib.py
new file mode 100644
index 0000000..c9390ae
--- /dev/null
+++ b/robot-systest/lib/client_lib/client_lib.py
@@ -0,0 +1,69 @@
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+
+from osmclient import client
+from robot.api import logger
+import json
+
+
+class ClientLib:
+    def __init__(self, host="127.0.0.1", user=None, password=None, project=None):
+
+        kwargs = {}
+        if user is not None:
+            kwargs['user'] = user
+        if password is not None:
+            kwargs['password'] = password
+        if project is not None:
+            kwargs['project'] = project
+        self.client = client.Client(host=host, sol005=True, **kwargs)
+
+    def get_vim_list(self):
+        resp = self.client.vim.list()
+        logger.info('VIM List: {}'.format(resp))
+        return json.dumps(resp)
+
+    def create_vim_account(self, name, vim_type, user, password, auth_url, tenant, desc='', config=None):
+        vim_access = {}
+        if config is not None:
+            vim_access['config'] = config
+        vim_access['vim-type'] = vim_type
+        vim_access['vim-username'] = user
+        vim_access['vim-password'] = password
+        vim_access['vim-url'] = auth_url
+        vim_access['vim-tenant-name'] = tenant
+        vim_access['description'] = desc
+
+        resp = self.client.vim.create(name, vim_access)
+        logger.info('Create VIM Account: {}'.format(resp))
+        return json.dumps(resp)
+
+    def delete_vim_account(self, name):
+        resp = self.client.vim.delete(name)
+        return json.dumps(resp)
+
+    def get_vnfd_list(self):
+        resp = self.client.vnfd.list()
+        logger.info('VNF Descriptor List: {}'.format(resp))
+        return json.dumps(resp)
+
+    def get_nsd_list(self):
+        resp = self.client.nsd.list()
+        logger.info('NS Descriptor List: {}'.format(resp))
+        return json.dumps(resp)
diff --git a/robot-systest/lib/custom_lib.py b/robot-systest/lib/custom_lib.py
new file mode 100644
index 0000000..5eb162f
--- /dev/null
+++ b/robot-systest/lib/custom_lib.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+from haikunator import Haikunator
+
+
+def generate_name():
+    haikunator = Haikunator()
+    name = haikunator.haikunate(delimiter='_', token_length=2)
+    return name
diff --git a/robot-systest/lib/gui/login_gui.robot b/robot-systest/lib/gui/login_gui.robot
new file mode 100644
index 0000000..c125664
--- /dev/null
+++ b/robot-systest/lib/gui/login_gui.robot
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+*** Variables ***
+${DESIRED_CAPABILITIES}    desired_capabilities
+${BROWSER}        Chrome
+${DELAY}          0
+${VALID USER}     admin
+${VALID PASSWORD}    admin
+${LOGIN URL}      /auth/
+${WELCOME URL}    /projects/
+${NS LIST URL}    /packages/ns/list
+${VNF LIST URL}    /packages/vnf/list
+
+
+*** Keywords ***
+Set Server URL
+    ${env_host}=    Get Environment Variable    OSM_HOSTNAME
+    ${passed}=    Run Keyword And Return Status    Should Contain    ${env_host}    :
+    Run Keyword If    ${passed}    Set Dockerized Host
+    ...    ELSE    Set Standalone Host    ${env_host}
+
+
+Open Browser To Login Page
+    ${chrome_options} =     Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
+    Call Method    ${chrome_options}   add_argument    headless
+    Call Method    ${chrome_options}   add_argument    disable-gpu
+    Call Method    ${chrome_options}   add_argument    no-sandbox
+    ${options}=     Call Method     ${chrome_options}    to_capabilities
+    Open Browser    ${SERVER}${LOGIN URL}    ${BROWSER}    desired_capabilities=${options}
+    Maximize Browser Window
+    Set Selenium Speed    ${DELAY}
+    Login Page Should Be Open
+
+
+Login Page Should Be Open
+    Element Text Should Be    //*[@id="main_content"]/div/div[2]/p    Sign in to start your session
+
+
+Enter Credentials
+    [Arguments]    ${username}    ${password}
+    Input Text    name:username    ${username}
+    Input Password    name:password    ${password}
+
+
+Submit Credentials
+    Click Button    //*[@id="main_content"]/div/div[2]/form/div[3]/div[2]/button
+
+
+Home Page Should Be Open
+    Location Should Be    ${SERVER}${WELCOME URL}
+#    Element Should Contain    id:title_header    6e3a8415-9014-4100-9727-90e0150263be    ignore_case=True
+    Element Attribute Value Should Be    //*[@id="main_content"]/div/div[2]/div[1]/div[1]/div/a    href    ${SERVER}${NS LIST URL}
+    Element Attribute Value Should Be    //*[@id="main_content"]/div/div[2]/div[1]/div[2]/div/a    href    ${SERVER}${VNF LIST URL}
+
+
+Set Dockerized Host
+
+    Set Suite Variable     ${SERVER}   http://light-ui
+
+
+Set Standalone Host
+    [Arguments]  ${env_host}
+
+    Set Suite Variable     ${SERVER}   http://${env_host}
diff --git a/robot-systest/resource/api/common.robot b/robot-systest/resource/api/common.robot
new file mode 100644
index 0000000..9342316
--- /dev/null
+++ b/robot-systest/resource/api/common.robot
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com
+##
+
+
+*** Variables ***
+&{HEADERS}     Content-Type=application/json       Accept=application/json
+&{data}        username=admin      password=admin      project-id=admin
+@{success_status_code_list}     200     201     202    204
+
+${descriptor_content_type_gzip}   application/gzip
+
+${auth_token_uri}   /osm/admin/v1/tokens
+
+${get_all_vnfd_uri}   /osm/vnfpkgm/v1/vnf_packages
+${create_vnfd_uri}   /osm/vnfpkgm/v1/vnf_packages_content
+${delete_vnfd_uri}   /osm/vnfpkgm/v1/vnf_packages
+
+${get_all_nsd_uri}   /osm/nsd/v1/ns_descriptors
+${create_nsd_uri}   /osm/nsd/v1/ns_descriptors_content
+${delete_nsd_uri}   /osm/nsd/v1/ns_descriptors
+
+${base_ns_uri}   /osm/nslcm/v1/ns_instances_content
+${create_ns_uri}   /osm/nslcm/v1/ns_instances_content
+
+${create_vim_uri}   /osm/admin/v1/vim_accounts
diff --git a/robot-systest/resource/api/variables.py b/robot-systest/resource/api/variables.py
new file mode 100644
index 0000000..a97763a
--- /dev/null
+++ b/robot-systest/resource/api/variables.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-sep-2019
+##
+
+
+# Create/Delete Vim Account
+vim_name = 'API-TEST-VIM'
+account_type = 'openstack'
+auth_url = 'http://127.0.0.1:5000/v3'
+user = 'admin'
+password = 'admin'
+tenant = 'admin'
+description = 'Test OpenStack Vim Account'
diff --git a/robot-systest/resource/cli/hackfest_basic_ns_data.py b/robot-systest/resource/cli/hackfest_basic_ns_data.py
new file mode 100644
index 0000000..8b8054b
--- /dev/null
+++ b/robot-systest/resource/cli/hackfest_basic_ns_data.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+# VNFD Details
+vnfdPckgPath = "/descriptor-packages/vnfd/hackfest_basic_vnf"
+vnfdPckg = '/build/hackfest_basic_vnf.tar.gz'
+
+# NSD Details
+nsdPckgPath = "/descriptor-packages/nsd/hackfest_basic_ns"
+nsdPckg = '/build/hackfest_basic_ns.tar.gz'
diff --git a/robot-systest/resource/cli/hackfest_cloudinit_ns_data.py b/robot-systest/resource/cli/hackfest_cloudinit_ns_data.py
new file mode 100644
index 0000000..d725a36
--- /dev/null
+++ b/robot-systest/resource/cli/hackfest_cloudinit_ns_data.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+# VNFD Details
+vnfdPckgPath = "/descriptor-packages/vnfd/hackfest_cloudinit_vnf"
+vnfdPckg = '/build/hackfest_cloudinit_vnf.tar.gz'
+
+# NSD Details
+nsdPckgPath = "/descriptor-packages/nsd/hackfest_cloudinit_ns"
+nsdPckg = '/build/hackfest_cloudinit_ns.tar.gz'
diff --git a/robot-systest/resource/cli/hackfest_epa_ns_data.py b/robot-systest/resource/cli/hackfest_epa_ns_data.py
new file mode 100644
index 0000000..8975e31
--- /dev/null
+++ b/robot-systest/resource/cli/hackfest_epa_ns_data.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+# VNFD Details
+vnfdPckgPath = "/descriptor-packages/vnfd/hackfest_epasriov_vnf"
+vnfdPckg = '/build/hackfest_epasriov_vnf.tar.gz'
+
+# NSD Details
+nsdPckgPath = "/descriptor-packages/nsd/hackfest_epasriov_ns"
+nsdPckg = '/build/hackfest_epasriov_ns.tar.gz'
diff --git a/robot-systest/resource/cli/hackfest_multivdu_ns_data.py b/robot-systest/resource/cli/hackfest_multivdu_ns_data.py
new file mode 100644
index 0000000..5ecb9e8
--- /dev/null
+++ b/robot-systest/resource/cli/hackfest_multivdu_ns_data.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+# VNFD Details
+vnfdPckgPath = "/descriptor-packages/vnfd/hackfest_multivdu_vnf"
+vnfdPckg = '/build/hackfest_multivdu_vnf.tar.gz'
+
+# NSD Details
+nsdPckgPath = "/descriptor-packages/nsd/hackfest_multivdu_ns"
+nsdPckg = '/build/hackfest_multivdu_ns.tar.gz'
diff --git a/robot-systest/resource/cli/hackfest_simplecharm_ns_data.py b/robot-systest/resource/cli/hackfest_simplecharm_ns_data.py
new file mode 100644
index 0000000..5ffcd35
--- /dev/null
+++ b/robot-systest/resource/cli/hackfest_simplecharm_ns_data.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+# VNFD Details
+vnfdPckgPath = "/descriptor-packages/vnfd/hackfest_simplecharm_vnf"
+vnfdPckg = '/build/hackfest_simplecharm_vnf.tar.gz'
+
+# NSD Details
+nsdPckgPath = "/descriptor-packages/nsd/hackfest_simplecharm_ns"
+nsdPckg = '/build/hackfest_simplecharm_ns.tar.gz'
diff --git a/robot-systest/resource/cli/test_vnf_data.py b/robot-systest/resource/cli/test_vnf_data.py
new file mode 100644
index 0000000..02ee065
--- /dev/null
+++ b/robot-systest/resource/cli/test_vnf_data.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com
+##
+
+
+# VNFD Details
+vnfdPckgPath = "/descriptor-packages/vnfd/cirros_vnf"
+vnfdPckg = '/build/cirros_vnf.tar.gz'
+
+# NSD Details
+nsdPckgPath = "/descriptor-packages/nsd/cirros_ns"
+nsdPckg = '/build/cirros_ns.tar.gz'
diff --git a/robot-systest/run_test.sh b/robot-systest/run_test.sh
new file mode 100644
index 0000000..74f8aa1
--- /dev/null
+++ b/robot-systest/run_test.sh
@@ -0,0 +1,108 @@
+#!/usr/bin/env bash
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com : 06-Sep-2019
+# Entry script to start the vim, smoke, openstack_stage_4 and comprehensive test using Robot Framework as a Automation Test Framework
+##
+
+BASEDIR=$(dirname "$0")
+TOPDIR=$(dirname "$BASEDIR")
+DESCRIPTOR_DIR=$TOPDIR/descriptor-packages
+
+
+robot_prerequisite(){
+    echo -e "\nInstalling robot requirements"
+    # installing python packages
+    pip install haikunator requests robotframework robotframework-seleniumlibrary robotframework-requests
+
+    # installing chrome driver and chrome for UI testing
+    curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
+    echo "deb [arch=amd64]  http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
+    apt-get update && apt-get -y install google-chrome-stable chromium-chromedriver
+}
+
+while getopts ":t:-:" o; do
+    case "${o}" in
+        t)
+            TEST=${OPTARG}
+            ;;
+        -)
+            [[ "${OPTARG}" == "do_install" ]] && robot_prerequisite && continue
+            ;;
+        \?)
+            echo -e "Invalid option: '-$OPTARG'\n" >&2
+            exit 1
+            ;;
+    esac
+done
+
+if [[ -z $TEST ]]; then
+    printf "Test not provided. \nRunning default test: smoke\n"
+    TEST="smoke"
+fi
+
+if [[ "$TEST" == "vim" ]]; then
+    echo "Robot Framework Vim Test"
+    robot -d $BASEDIR/reports -i vim $BASEDIR/testsuite/
+    exit 0
+elif [[ "$TEST" == "smoke" ]]; then
+    echo "Robot Framework SMOKE test"
+    robot -d $BASEDIR/reports -i smoke $BASEDIR/testsuite/
+    exit 0
+elif [[ "$TEST" == "sanity" ]]; then
+    echo "Robot Framework Cirros VNF Test"
+    mkdir -p $BASEDIR/images/cache
+    if [[ ! -z $OS_AUTH_URL ]]; then
+        (openstack image show cirros-0.3.5-x86_64-disk.img) || (wget -r -nc http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img -O $BASEDIR/images/cache/cirros-0.3.5-x86_64-disk.img && make $BASEDIR/images/cache/cirros-0.3.5-x86_64-disk.img && openstack image create --file $BASEDIR/images/cache/cirros-0.3.5-x86_64-disk.img cirros-0.3.5-x86_64-disk.img)
+    fi
+    if [[ ! -z $VCD_AUTH_URL ]]; then
+#        TODO: Check for image over VIM before downloading
+        if [[ ! -s $BASEDIR/images/cache/cirros-0.3.5-x86_64-disk.img ]]; then
+            wget -r -nc http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img -O $BASEDIR/images/cache/cirros-0.3.5-x86_64-disk.img
+        fi
+        ovf_converter $BASEDIR/images/cache/cirros-0.3.5-x86_64-disk.img -n cirros
+        python $TOPDIR/tools/vmware_ovf_upload.py $VCD_AUTH_URL $VCD_USERNAME $VCD_PASSWORD $VCD_ORGANIZATION $BASEDIR/images/cache/cirros.ovf
+    fi
+    robot -d $BASEDIR/reports -i sanity $BASEDIR/testsuite/
+    exit 0
+elif [[ "$TEST" == "comprehensive" ]]; then
+    echo "Robot Framework Comprehensive Test"
+    mkdir -p $BASEDIR/images/cache
+    if [[ ! -z $OS_AUTH_URL ]]; then
+        (openstack image show ubuntu1604) || (wget -r -nc https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img -O $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img && make $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img && openstack image create --file $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img ubuntu1604)
+        (openstack image show hackfest3-mgmt) || (wget -r -nc https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img -O $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img && make $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img && openstack image create --file $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img hackfest3-mgmt)
+    fi
+    if [[ ! -z $VCD_AUTH_URL ]]; then
+#        TODO: Check for image over VIM before downloading
+        if [[ ! -s $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img ]]; then
+            wget -r -nc https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img -O $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img
+        fi
+        ovf_converter $BASEDIR/images/cache/xenial-server-cloudimg-amd64-disk1.img -n ubuntu1604
+        python $TOPDIR/tools/vmware_ovf_upload.py $VCD_AUTH_URL $VCD_USERNAME $VCD_PASSWORD $VCD_ORGANIZATION $BASEDIR/images/cache/ubuntu1604.ovf
+    fi
+    robot -d $BASEDIR/reports -i comprehensive $BASEDIR/testsuite/
+    exit 0
+else
+    echo "wrong test provided"
+    exit 1
+fi
+
+exit 1
diff --git a/robot-systest/testsuite/api/TS01__Vim_Account.robot b/robot-systest/testsuite/api/TS01__Vim_Account.robot
new file mode 100644
index 0000000..be04c3f
--- /dev/null
+++ b/robot-systest/testsuite/api/TS01__Vim_Account.robot
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+*** Settings ***
+Documentation    Test Suite to create and delete vim account
+Library     Collections
+Library     RequestsLibrary
+Library     OperatingSystem
+Resource    ../../lib/api/common.robot
+Resource    ../../lib/api/vim_lib.robot
+Resource    ../../resource/api/common.robot
+Variables   ../../resource/api/variables.py
+
+Suite Setup     Get Auth Token
+Suite Teardown  Delete All Sessions
+
+
+*** Variables ***
+${vim_id}   ${EMPTY}
+
+
+*** Test Cases ***
+Create Vim Account
+    [Tags]    comprehensive   api_vim_test
+    [Template]  Create Vim
+    ${vim name}     ${account type}     ${auth url}     ${user}     ${password}     ${tenant}       ${description}
+
+
+Delete Vim Account
+    [Tags]    comprehensive   api_vim_test
+    [Template]  Delete Vim
+    ${vim_id}
diff --git a/robot-systest/testsuite/cli/TS01__Test_VNF.robot b/robot-systest/testsuite/cli/TS01__Test_VNF.robot
new file mode 100644
index 0000000..08a4e0e
--- /dev/null
+++ b/robot-systest/testsuite/cli/TS01__Test_VNF.robot
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com : 06-aug-2019
+##
+
+
+*** Settings ***
+Documentation    Test Suite to test basic cirros VNF and NS using osm-client
+Library     OperatingSystem
+Library     String
+Library     Collections
+Resource    ../../lib/cli/vnfd_lib.robot
+Resource    ../../lib/cli/nsd_lib.robot
+Resource    ../../lib/cli/ns_lib.robot
+Resource    ../../lib/cli/vim_account_lib.robot
+Library     ../../lib/custom_lib.py
+Variables   ../../resource/cli/test_vnf_data.py
+
+Suite Teardown     Run Keyword And Ignore Error    Test Cleanup
+
+
+*** Variables ***
+@{vnfd_ids}
+@{nsd_ids}
+@{ns_ids}
+@{vim}
+#${vim_name}     robot_test
+
+
+*** Test Cases ***
+Create VNF Descriptor Test
+    [Tags]    sanity    smoke
+
+    Build VNF Descriptor    ${vnfdPckgPath}
+    ${vnfd_id}=    Create VNFD    '${CURDIR}${/}../../..${vnfdPckgPath}${vnfdPckg}'
+    Append To List     ${vnfd_ids}       ${vnfd_id}
+
+
+Create NS Descriptor Test
+    [Tags]    sanity     smoke
+
+    Build NS Descriptor    ${nsdPckgPath}
+    ${nsd_id}=    Create NSD    '${CURDIR}${/}../../..${nsdPckgPath}${nsdPckg}'
+    Append To List     ${nsd_ids}       ${nsd_id}
+
+
+Network Service Instance Test
+    [Documentation]  Launch and terminate network services
+    [Tags]    sanity
+    [Setup]  VIM Setup To Launch Network Services
+    [Teardown]  Run Keyword And Ignore Error    Network Service Instance Cleanup
+
+    Should Not Be Empty    ${vim}    VIM details not provided
+    :FOR    ${vim_name}    IN    @{vim}
+    \    Launch Network Services and Return    ${vim_name}
+
+
+Delete NS Descriptor Test
+    [Tags]    sanity     smoke
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Delete NSD      ${nsd}
+
+
+Delete VNF Descriptor Test
+    [Tags]    sanity    smoke
+
+    :FOR    ${vnfd}  IN   @{vnfd_ids}
+    \   Delete VNFD     ${vnfd}
+
+
+*** Keywords ***
+Test Cleanup
+    [Documentation]  Test Suit Cleanup: Forcefully delete NSD and VNFD
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Force Delete NSD      ${nsd}
+
+    :FOR    ${vnfd}  IN   @{vnfd_ids}
+    \   Force Delete VNFD     ${vnfd}
+
+
+Network Service Instance Cleanup
+    [Documentation]  Forcefully delete created network service instances and vim account
+
+    :FOR    ${ns}  IN   @{ns_ids}
+    \   Force Delete NS   ${ns}
+
+    :FOR    ${vim_id}  IN   @{vim}
+    \   Force Delete Vim Account    ${vim_id}
diff --git a/robot-systest/testsuite/cli/TS02__Test_Vim.robot b/robot-systest/testsuite/cli/TS02__Test_Vim.robot
new file mode 100644
index 0000000..18f2a50
--- /dev/null
+++ b/robot-systest/testsuite/cli/TS02__Test_Vim.robot
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com : 06-aug-2019 : Improvement to the code, robot framework initial seed code.
+##
+
+
+*** Settings ***
+Documentation    Test suiet to create/delete vim account via osmclient
+Library     OperatingSystem
+Library     Collections
+Resource    ../../lib/cli/vim_account_lib.robot
+
+
+*** Test Cases ***
+Create Vim Account Test
+    [Tags]  smoke    vim
+
+    Create Vim Account
+
+
+Get Vim Accounts List Test
+    [Tags]  vim
+
+    Get Vim List
+
+
+Delete Vim Account Test
+    [Tags]  smoke    vim
+
+    Delete Vim Account
diff --git a/robot-systest/testsuite/cli/TS03__Hackfest_Basic_NS.robot b/robot-systest/testsuite/cli/TS03__Hackfest_Basic_NS.robot
new file mode 100644
index 0000000..d55540a
--- /dev/null
+++ b/robot-systest/testsuite/cli/TS03__Hackfest_Basic_NS.robot
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com : 06-aug-2019
+##
+
+
+*** Settings ***
+Documentation    Test Suite to create hackfest basic nestwork service
+Library     OperatingSystem
+Library     String
+Library     Collections
+Resource    ../../lib/cli/vnfd_lib.robot
+Resource    ../../lib/cli/nsd_lib.robot
+Resource    ../../lib/cli/ns_lib.robot
+Resource    ../../lib/cli/vim_account_lib.robot
+Library     ../../lib/custom_lib.py
+Variables   ../../resource/cli/hackfest_basic_ns_data.py
+
+Suite Teardown     Run Keyword And Ignore Error    Test Cleanup
+
+
+*** Variables ***
+@{vnfd_ids}
+${nsd_id}
+@{nsd_ids}
+@{ns_ids}
+@{vim}
+
+
+*** Test Cases ***
+Create Hackfest Basic VNF Descriptor
+    [Tags]   comprehensive   hackfest_basic_ns
+
+    Build VNF Descriptor    ${vnfdPckgPath}
+    ${vnfd_id}=    Create VNFD    '${CURDIR}${/}../../..${vnfdPckgPath}${vnfdPckg}'
+    Append To List     ${vnfd_ids}       ${vnfd_id}
+
+
+Create Hackfest Basic NS Descriptor
+    [Tags]   comprehensive   hackfest_basic_ns
+
+    Build NS Descriptor    ${nsdPckgPath}
+    ${nsd_id}=    Create NSD    '${CURDIR}${/}../../..${nsdPckgPath}${nsdPckg}'
+    Append To List     ${nsd_ids}       ${nsd_id}
+
+
+Network Service Instance Test
+    [Documentation]  Launch and terminate network services
+    [Tags]   comprehensive   hackfest_basic_ns
+    [Setup]  VIM Setup To Launch Network Services
+    [Teardown]  Run Keyword And Ignore Error    Network Service Instance Cleanup
+
+    Should Not Be Empty    ${vim}    VIM details not provided
+    :FOR    ${vim_name}    IN    @{vim}
+    \    Launch Network Services and Return    ${vim_name}
+
+
+Delete NS Descriptor Test
+    [Tags]   comprehensive   hackfest_basic_ns
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Delete NSD      ${nsd}
+
+
+Delete VNF Descriptor Test
+    [Tags]   comprehensive   hackfest_basic_ns
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Delete VNFD     ${vnfd_id}
+
+
+*** Keywords ***
+Test Cleanup
+    [Documentation]  Test Suit Cleanup: Forcefully delete NSD and VNFD
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Force Delete NSD      ${nsd_id}
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Force Delete VNFD     ${vnfd_id}
+
+
+Network Service Instance Cleanup
+    [Documentation]  Forcefully delete created network service instances and vim account
+
+    :FOR    ${ns_id}  IN   @{ns_ids}
+    \   Force Delete NS   ${ns_id}
+
+    :FOR    ${vim_id}  IN   @{vim}
+    \   Force Delete Vim Account    ${vim_id}
diff --git a/robot-systest/testsuite/cli/TS04__Hackfest_Simplecharm_NS.robot b/robot-systest/testsuite/cli/TS04__Hackfest_Simplecharm_NS.robot
new file mode 100644
index 0000000..7439259
--- /dev/null
+++ b/robot-systest/testsuite/cli/TS04__Hackfest_Simplecharm_NS.robot
@@ -0,0 +1,114 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com : 06-aug-2019
+##
+
+
+*** Settings ***
+Documentation    Test Suite to create hackfest simplecharm ns
+Library     OperatingSystem
+Library     String
+Library     Collections
+Resource    ../../lib/cli/vnfd_lib.robot
+Resource    ../../lib/cli/nsd_lib.robot
+Resource    ../../lib/cli/ns_lib.robot
+Resource    ../../lib/cli/vim_account_lib.robot
+Library     ../../lib/custom_lib.py
+Variables   ../../resource/cli/hackfest_simplecharm_ns_data.py
+
+Suite Teardown     Run Keyword And Ignore Error    Test Cleanup
+
+
+*** Variables ***
+@{vnfd_ids}
+${nsd_id}
+@{nsd_ids}
+@{ns_ids}
+@{vim}
+${vnfdftpPath}    https://osm-download.etsi.org/ftp/osm-6.0-six/7th-hackfest/packages/hackfest_simplecharm_vnf.tar.gz
+${nsdftpPath}    https://osm-download.etsi.org/ftp/osm-6.0-six/7th-hackfest/packages/hackfest_simplecharm_ns.tar.gz
+
+
+*** Test Cases ***
+Create Hackfest Simple Charm VNF Descriptor
+    [Tags]   hackfest_simplecharm    comprehensive
+
+    #Build VNF Descriptor    ${vnfdPckgPath}
+    #Workarround for charm build issue
+    ${rc}   ${stdout}=      Run and Return RC and Output	    wget -P '${CURDIR}${/}../../..${vnfdPckgPath}${/}build/' ${vnfdftpPath}
+    ${vnfd_id}=    Create VNFD    '${CURDIR}${/}../../..${vnfdPckgPath}${vnfdPckg}'
+    Append To List     ${vnfd_ids}       ${vnfd_id}
+
+
+Create Hackfest Simple Charm NS Descriptor
+    [Tags]   hackfest_simplecharm    comprehensive
+
+    #Build NS Descriptor    ${nsdPckgPath}
+	${rc}   ${stdout}=      Run and Return RC and Output	    wget -P '${CURDIR}${/}../../..${nsdPckgPath}${/}build/' ${nsdftpPath}
+    ${nsd_id}=    Create NSD    '${CURDIR}${/}../../..${nsdPckgPath}${nsdPckg}'
+    Append To List     ${nsd_ids}       ${nsd_id}
+
+
+Network Service Instance Test
+    [Documentation]  Launch and terminate network services
+    [Tags]   hackfest_simplecharm    comprehensive
+    [Setup]  VIM Setup To Launch Network Services
+    [Teardown]  Run Keyword And Ignore Error    Network Service Instance Cleanup
+
+    Should Not Be Empty    ${vim}    VIM details not provided
+    :FOR    ${vim_name}    IN    @{vim}
+    \    Launch Network Services and Return    ${vim_name}
+
+
+Delete NS Descriptor Test
+    [Tags]   hackfest_simplecharm    comprehensive
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Delete NSD      ${nsd}
+
+
+Delete VNF Descriptor Test
+    [Tags]   hackfest_simplecharm    comprehensive
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Delete VNFD     ${vnfd_id}
+
+
+*** Keywords ***
+Test Cleanup
+    [Documentation]  Test Suit Cleanup: Forcefully delete NSD and VNFD
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Force Delete NSD      ${nsd_id}
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Force Delete VNFD     ${vnfd_id}
+
+
+Network Service Instance Cleanup
+    [Documentation]  Forcefully delete created network service instances and vim account
+
+    :FOR    ${ns_id}  IN   @{ns_ids}
+    \   Force Delete NS   ${ns_id}
+
+    :FOR    ${vim_id}  IN   @{vim}
+    \   Force Delete Vim Account    ${vim_id}
diff --git a/robot-systest/testsuite/cli/TS05__Hackfest_Multivdu_NS.robot b/robot-systest/testsuite/cli/TS05__Hackfest_Multivdu_NS.robot
new file mode 100644
index 0000000..7fa6c24
--- /dev/null
+++ b/robot-systest/testsuite/cli/TS05__Hackfest_Multivdu_NS.robot
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com : 06-aug-2019
+##
+
+
+*** Settings ***
+Documentation    Test Suite to create hackfest multivdu ns
+Library     OperatingSystem
+Library     String
+Library     Collections
+Resource    ../../lib/cli/vnfd_lib.robot
+Resource    ../../lib/cli/nsd_lib.robot
+Resource    ../../lib/cli/ns_lib.robot
+Resource    ../../lib/cli/vim_account_lib.robot
+Library     ../../lib/custom_lib.py
+Variables   ../../resource/cli/hackfest_multivdu_ns_data.py
+
+Suite Teardown     Run Keyword And Ignore Error    Test Cleanup
+
+
+*** Variables ***
+@{vnfd_ids}
+${nsd_id}
+@{nsd_ids}
+@{ns_ids}
+@{vim}
+
+
+*** Test Cases ***
+Create Hackfest Multivdu VNF Descriptor
+    [Tags]   comprehensive   hackfest_multivdu
+
+    Build VNF Descriptor    ${vnfdPckgPath}
+    ${vnfd_id}=    Create VNFD    '${CURDIR}${/}../../..${vnfdPckgPath}${vnfdPckg}'
+    Append To List     ${vnfd_ids}       ${vnfd_id}
+
+
+Create Hackfest Multivdu NS Descriptor
+    [Tags]   comprehensive   hackfest_multivdu
+
+    Build NS Descriptor    ${nsdPckgPath}
+    ${nsd_id}=    Create NSD    '${CURDIR}${/}../../..${nsdPckgPath}${nsdPckg}'
+    Append To List     ${nsd_ids}       ${nsd_id}
+
+
+Network Service Instance Test
+    [Documentation]  Launch and terminate network services
+    [Tags]   comprehensive   hackfest_multivdu
+    [Setup]  VIM Setup To Launch Network Services
+    [Teardown]  Run Keyword And Ignore Error    Network Service Instance Cleanup
+
+    Should Not Be Empty    ${vim}    VIM details not provided
+    :FOR    ${vim_name}    IN    @{vim}
+    \    Launch Network Services and Return    ${vim_name}
+
+
+Delete NS Descriptor Test
+    [Tags]   comprehensive   hackfest_multivdu
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Delete NSD      ${nsd}
+
+
+Delete VNF Descriptor Test
+    [Tags]   comprehensive   hackfest_multivdu
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Delete VNFD     ${vnfd_id}
+
+
+*** Keywords ***
+Test Cleanup
+    [Documentation]  Test Suit Cleanup: Forcefully delete NSD and VNFD
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Force Delete NSD      ${nsd_id}
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Force Delete VNFD     ${vnfd_id}
+
+
+Network Service Instance Cleanup
+    [Documentation]  Forcefully delete created network service instances and vim account
+
+    :FOR    ${ns_id}  IN   @{ns_ids}
+    \   Force Delete NS   ${ns_id}
+
+    :FOR    ${vim_id}  IN   @{vim}
+    \   Force Delete Vim Account    ${vim_id}
diff --git a/robot-systest/testsuite/cli/TS06__Hackfest_Cloudinit_NS.robot b/robot-systest/testsuite/cli/TS06__Hackfest_Cloudinit_NS.robot
new file mode 100644
index 0000000..a43f3a2
--- /dev/null
+++ b/robot-systest/testsuite/cli/TS06__Hackfest_Cloudinit_NS.robot
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com : 06-aug-2019
+##
+
+
+*** Settings ***
+Documentation    Test Suite to create hackfest cloudinit ns
+Library     OperatingSystem
+Library     String
+Library     Collections
+Resource    ../../lib/cli/vnfd_lib.robot
+Resource    ../../lib/cli/nsd_lib.robot
+Resource    ../../lib/cli/ns_lib.robot
+Resource    ../../lib/cli/vim_account_lib.robot
+Library     ../../lib/custom_lib.py
+Variables   ../../resource/cli/hackfest_cloudinit_ns_data.py
+
+Suite Teardown     Run Keyword And Ignore Error    Test Cleanup
+
+
+*** Variables ***
+@{vnfd_ids}
+${nsd_id}
+@{nsd_ids}
+@{ns_ids}
+@{vim}
+
+
+*** Test Cases ***
+Create Hackfest Cloudinit VNF Descriptor
+    [Tags]   comprehensive   hackfest_cloudinit
+
+    Build VNF Descriptor    ${vnfdPckgPath}
+    ${vnfd_id}=    Create VNFD    '${CURDIR}${/}../../..${vnfdPckgPath}${vnfdPckg}'
+    Append To List     ${vnfd_ids}       ${vnfd_id}
+
+
+Create Hackfest Cloudinit NS Descriptor
+    [Tags]   comprehensive   hackfest_cloudinit
+
+    Build NS Descriptor    ${nsdPckgPath}
+    ${nsd_id}=    Create NSD    '${CURDIR}${/}../../..${nsdPckgPath}${nsdPckg}'
+    Append To List     ${nsd_ids}       ${nsd_id}
+
+
+Network Service Instance Test
+    [Documentation]  Launch and terminate network services
+    [Tags]   comprehensive   hackfest_cloudinit
+    [Setup]  VIM Setup To Launch Network Services
+    [Teardown]  Run Keyword And Ignore Error    Network Service Instance Cleanup
+
+    Should Not Be Empty    ${vim}    VIM details not provided
+    :FOR    ${vim_name}    IN    @{vim}
+    \    Launch Network Services and Return    ${vim_name}
+
+
+Delete NS Descriptor Test
+    [Tags]   comprehensive   hackfest_cloudinit
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Delete NSD      ${nsd}
+
+
+Delete VNF Descriptor Test
+    [Tags]   comprehensive   hackfest_cloudinit
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Delete VNFD     ${vnfd_id}
+
+
+*** Keywords ***
+Test Cleanup
+    [Documentation]  Test Suit Cleanup: Forcefully delete NSD and VNFD
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Force Delete NSD      ${nsd_id}
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Force Delete VNFD     ${vnfd_id}
+
+
+Network Service Instance Cleanup
+    [Documentation]  Forcefully delete created network service instances and vim account
+
+    :FOR    ${ns_id}  IN   @{ns_ids}
+    \   Force Delete NS   ${ns_id}
+
+    :FOR    ${vim_id}  IN   @{vim}
+    \   Force Delete Vim Account    ${vim_id}
diff --git a/robot-systest/testsuite/cli/TS07__Hackfest_EPA_NS.robot b/robot-systest/testsuite/cli/TS07__Hackfest_EPA_NS.robot
new file mode 100644
index 0000000..2d8d3be
--- /dev/null
+++ b/robot-systest/testsuite/cli/TS07__Hackfest_EPA_NS.robot
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Mrityunjay Yadav, Jayant Madavi : MY00514913@techmahindra.com : 06-aug-2019
+##
+
+
+*** Settings ***
+Documentation    Test Suite to create hackfest epa ns
+Library     OperatingSystem
+Library     String
+Library     Collections
+Resource    ../../lib/cli/vnfd_lib.robot
+Resource    ../../lib/cli/nsd_lib.robot
+Resource    ../../lib/cli/ns_lib.robot
+Resource    ../../lib/cli/vim_account_lib.robot
+Library     ../../lib/custom_lib.py
+Variables   ../../resource/cli/hackfest_epa_ns_data.py
+
+Suite Teardown     Run Keyword And Ignore Error    Test Cleanup
+
+
+*** Variables ***
+@{vnfd_ids}
+${nsd_id}
+@{nsd_ids}
+@{ns_ids}
+@{vim}
+
+
+*** Test Cases ***
+Create Hackfest EPA VNF Descriptor
+    [Tags]     hackfest_epa
+
+    Build VNF Descriptor    ${vnfdPckgPath}
+    ${vnfd_id}=    Create VNFD    '${CURDIR}${/}../../..${vnfdPckgPath}${vnfdPckg}'
+    Append To List     ${vnfd_ids}       ${vnfd_id}
+
+
+Create Hackfest EPA NS Descriptor
+    [Tags]     hackfest_epa
+
+    Build NS Descriptor    ${nsdPckgPath}
+    ${nsd_id}=    Create NSD    '${CURDIR}${/}../../..${nsdPckgPath}${nsdPckg}'
+    Append To List     ${nsd_ids}       ${nsd_id}
+
+
+Network Service Instance Test
+    [Documentation]  Launch and terminate network services
+    [Tags]    hackfest_epa
+    [Setup]  VIM Setup To Launch Network Services
+    [Teardown]  Run Keyword And Ignore Error    Network Service Instance Cleanup
+
+    Should Not Be Empty    ${vim}    VIM details not provided
+    :FOR    ${vim_name}    IN    @{vim}
+    \    Launch Network Services and Return    ${vim_name}
+
+
+Delete NS Descriptor Test
+    [Tags]    hackfest_epa
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Delete NSD      ${nsd}
+
+
+Delete VNF Descriptor Test
+    [Tags]    hackfest_epa
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Delete VNFD     ${vnfd_id}
+
+
+*** Keywords ***
+Test Cleanup
+    [Documentation]  Test Suit Cleanup: Forcefully delete NSD and VNFD
+
+    :FOR    ${nsd}  IN   @{nsd_ids}
+    \   Force Delete NSD      ${nsd_id}
+
+    :FOR    ${vnfd_id}  IN   @{vnfd_ids}
+    \   Force Delete VNFD     ${vnfd_id}
+
+
+Network Service Instance Cleanup
+    [Documentation]  Forcefully delete created network service instances and vim account
+
+    :FOR    ${ns_id}  IN   @{ns_ids}
+    \   Force Delete NS   ${ns_id}
+
+    :FOR    ${vim_id}  IN   @{vim}
+    \   Force Delete Vim Account    ${vim_id}
diff --git a/robot-systest/testsuite/client_library/TS01__OSMClient_Library_Test.robot b/robot-systest/testsuite/client_library/TS01__OSMClient_Library_Test.robot
new file mode 100644
index 0000000..42b455a
--- /dev/null
+++ b/robot-systest/testsuite/client_library/TS01__OSMClient_Library_Test.robot
@@ -0,0 +1,82 @@
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+
+*** Settings ***
+Documentation    Test suite to test osmclient python library
+Library     OperatingSystem
+
+Suite Setup    Setup OSM Client
+
+
+*** Variables ***
+${name}     helloworld-os
+${user}     robottest
+${password}     fred
+${authurl}      https://169.254.169.245/
+${type}     openstack
+${desc}     a test vim
+${tenant}    robottest
+
+
+*** Test Cases ***
+Get VIM Account List Test
+    [Tags]    comprehensive    osmclient_lib
+    [Documentation]    Using python's osmclient library to get vim account list
+
+    ${vim_list}=    osmclient.get_vim_list
+    log to console    ${vim_list}
+    log  ${vim_list}
+
+
+Get VNF Descriptor List Test
+    [Tags]    comprehensive    osmclient_lib
+    [Documentation]    Using python's osmclient library to get vnfd list
+
+    ${vnfd_list}=    osmclient.get_vnfd_list
+    log to console    ${vnfd_list}
+    log  ${vnfd_list}
+
+
+Get NS Descriptor List Test
+    [Tags]    comprehensive    osmclient_lib
+    [Documentation]    Using python's osmclient library to get nsd list
+
+    ${nsd_list}=    osmclient.get_nsd_list
+    log to console    ${nsd_list}
+    log  ${nsd_list}
+
+
+Create Vim Account Test
+    [Tags]    comprehensive    osmclient_lib
+    [Documentation]    Using python's osmclient library to create vim account
+    [Template]    osmclient.create_vim_account
+    ${name}  ${type}  ${user}  ${password}  ${authurl}  ${tenant}  ${desc}
+
+
+Delete Vim Account Test
+    [Tags]    comprehensive    osmclient_lib
+    [Documentation]    Using python's osmclient library to delete vim account
+    osmclient.delete_vim_account    ${name}
+
+
+*** Keywords ***
+Setup OSM Client
+    evaluate    sys.path.append('${CURDIR}${/}../../lib/client_lib')    modules=sys
+    ${host}=    Get Environment Variable    OSM_HOSTNAME    127.0.0.1
+    Import Library    ClientLib    host=${host}    WITH NAME    osmclient
diff --git a/robot-systest/testsuite/gui/TS01__Test_GUI_Login.robot b/robot-systest/testsuite/gui/TS01__Test_GUI_Login.robot
new file mode 100644
index 0000000..4f20a18
--- /dev/null
+++ b/robot-systest/testsuite/gui/TS01__Test_GUI_Login.robot
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+
+##
+# Copyright 2019 Tech Mahindra Limited
+#
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+##
+
+## Change log:
+# 1. Feature 7829: Jayant Madavi, Mrityunjay Yadav : MY00514913@techmahindra.com
+##
+
+
+*** Settings ***
+Documentation    Suite description
+Library          SeleniumLibrary
+Library          OperatingSystem
+Resource         ../../lib/gui/login_gui.robot
+
+
+*** Test Cases ***
+Valid Login
+    [Tags]    comprehensive   gui_login_test
+    [Setup]    Set Server URL
+    Open Browser To Login Page
+    Enter Credentials    admin    admin
+    Submit Credentials
+    Home Page Should Be Open
+    [Teardown]    Close Browser
