diff --git a/src/test/cord-api/Framework/utils/utils.py b/src/test/cord-api/Framework/utils/utils.py
index 1eaa299..fb1a797 100644
--- a/src/test/cord-api/Framework/utils/utils.py
+++ b/src/test/cord-api/Framework/utils/utils.py
@@ -6,6 +6,7 @@
 import robot
 import os.path
 from os.path import expanduser
+import uuid
 
 class utils(object):
 
@@ -213,6 +214,9 @@
            print "list of values found for ", fieldName, ";", uniq_list
         return fieldValue
 
+    def generate_uuid(self):
+        return uuid.uuid4()
+
 '''
 #Test
 dict_list = {
diff --git a/src/test/cord-api/Framework/utils/utils.robot b/src/test/cord-api/Framework/utils/utils.robot
new file mode 100644
index 0000000..0536a8a
--- /dev/null
+++ b/src/test/cord-api/Framework/utils/utils.robot
@@ -0,0 +1,74 @@
+*** Settings ***
+Documentation    Library for various utilities
+Library           SSHLibrary
+Library           HttpLibrary.HTTP
+Library           String
+Library           DateTime
+Library           Process
+Library           Collections
+Library           RequestsLibrary
+#Library           ${CURDIR}/readProperties.py
+#Resource          ${CURDIR}/utils.py
+
+*** Keywords ***
+Run Command On Remote System
+    [Arguments]    ${system}    ${cmd}    ${user}=${VM_USER}    ${pass}=${VM_PASS}    ${prompt}=$    ${prompt_timeout}=60s    ${use_key}=False
+    [Documentation]    SSH's into a remote host, executes command, and logs+returns output
+    BuiltIn.Log    Attempting to execute command "${cmd}" on remote system "${system}"
+    BuiltIn.Log    ${password}
+    ${conn_id}=    SSHLibrary.Open Connection    ${system}    prompt=${prompt}    timeout=${prompt_timeout}
+    Run Keyword If    '${use_key}' == 'False'    SSHLibrary.Login    ${user}    ${pass}    ELSE    SSHLibrary.Login With Public Key    ${user}    %{HOME}/.ssh/${SSH_KEY}    any
+    #SSHLibrary.Login    ${user}    ${pass}
+    ${output}=    SSHLibrary.Execute Command    ${cmd}
+    SSHLibrary.Close Connection
+    Log    ${output}
+    [Return]    ${output}
+
+Execute Command on CIAB Server in Specific VM
+    [Arguments]    ${system}    ${vm}    ${cmd}    ${user}=${VM_USER}    ${password}=${VM_PASS}    ${prompt}=$    ${use_key}=True
+    [Documentation]    SSHs into ${HOST} where CIAB is running and executes a command in the Prod Vagrant VM where all the containers are running
+    ${conn_id}=    SSHLibrary.Open Connection    ${system}    prompt=${prompt}    timeout=300s
+    Run Keyword If    '${use_key}' == 'False'    SSHLibrary.Login    ${user}    ${pass}    ELSE    SSHLibrary.Login With Public Key    ${user}    %{HOME}/.ssh/${SSH_KEY}    any
+    SSHLibrary.Write    ssh ${vm}
+    SSHLibrary.Read Until Prompt
+    SSHLibrary.Write    ${cmd}
+    ${output}=    SSHLibrary.Read Until Prompt
+    SSHLibrary.Close Connection
+    ${output}=    Get Line    ${output}    0
+    [Return]    ${output}
+
+Execute Command on Compute Node in CIAB
+    [Arguments]    ${system}    ${hostname}    ${cmd}    ${user}=${VM_USER}    ${password}=${VM_PASS}    ${prompt}=$    ${use_key}=True
+    [Documentation]    SSHs into ${HOST} where CIAB is running and executes a command in the Prod Vagrant VM where all the containers are running
+    ${conn_id}=    SSHLibrary.Open Connection    ${system}    prompt=${prompt}    timeout=300s
+    Run Keyword If    '${use_key}' == 'False'    SSHLibrary.Login    ${user}    ${pass}    ELSE    SSHLibrary.Login With Public Key    ${user}    %{HOME}/.ssh/${SSH_KEY}    any
+    SSHLibrary.Write    ssh prod
+    SSHLibrary.Read Until Prompt
+    SSHLibrary.Write    ssh root@${hostname}
+    SSHLibrary.Read Until    \#
+    SSHLibrary.Write    ${cmd}
+    ${output}=    SSHLibrary.Read Until   \#
+    SSHLibrary.Close Connection
+    [Return]    ${output}
+
+Get Docker Container ID
+    [Arguments]    ${system}    ${container_name}    ${user}=${USER}    ${password}=${PASSWD}
+    [Documentation]    Retrieves the id of the requested docker container running inside given ${HOST}
+    ${container_id}=    Execute Command on CIAB Server in Specific VM    ${system}    prod    docker ps | grep ${container_name} | awk '{print $1}'    ${user}    ${password}
+    Log    ${container_id}
+    [Return]    ${container_id}
+
+Get Docker Logs
+    [Arguments]    ${system}    ${container_id}    ${user}=${USER}    ${password}=${PASSWD}    ${prompt}=prod:~$
+    [Documentation]    Retrieves the id of the requested docker container running inside given ${HOST}
+    ##In Ciab, all containers are run in the prod vm so we must log into that
+    ${conn_id}=    SSHLibrary.Open Connection    ${system}    prompt=$    timeout=300s
+    SSHLibrary.Login With Public Key    ${USER}    %{HOME}/.ssh/${SSH_KEY}    any
+    #SSHLibrary.Login    ${HOST_USER}    ${HOST_PASSWORD}
+    SSHLibrary.Write    ssh prod
+    SSHLibrary.Read Until    ${prompt}
+    SSHLibrary.Write    docker logs -t ${container_id}
+    ${container_logs}=    SSHLibrary.Read Until    ${prompt}
+    SSHLibrary.Close Connection
+    Log    ${container_logs}
+    [Return]    ${container_logs}
\ No newline at end of file
diff --git a/src/test/cord-api/Tests/CordVTN.txt b/src/test/cord-api/Tests/CordVTN.txt
new file mode 100644
index 0000000..c9ee29e
--- /dev/null
+++ b/src/test/cord-api/Tests/CordVTN.txt
@@ -0,0 +1,234 @@
+*** Settings ***
+Documentation     Test suite for Utility Synchronizer API
+Suite Setup       Suite Setup
+Suite Teardown    Suite Teardown
+Variables         ../Framework/restApi.py
+Library           Collections
+Library           String
+Library           OperatingSystem
+Library           XML
+Library           RequestsLibrary
+Library           ../Framework/utils/utils.py
+Library           ../Framework/restApi.py
+Variables         ../Properties/RestApiProperties.py
+Resource           ../Framework/utils/utils.robot
+
+*** Variables ***
+${VM_USER}            admin
+${VM_PASS}            admin
+${SSH_KEY}            id_rsa.pub
+${ONOS_CORDVTN_API}   http://onos-cord:8182/onos/cordvtn
+
+*** Test Cases ***
+Get Compute Node Hostname + IP
+    [Documentation]    Logs into ciab server and executes a 'cord prov list' on the headnode to get the compute node
+    [Tags]    computenode
+    ${compute_node_hostname}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    cord prov list | grep node | awk '{print $2}'
+    ${compute_node_ip}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    cord prov list | grep node | awk '{print $4}'
+    Set Suite Variable    ${compute_node_hostname}
+    set suite variable    ${compute_node_ip}
+
+Get ONOSCORD Container ID
+    [Documentation]    Logs into ciab server and extracts the onoscord container id on the headnode
+    [Tags]    onoscord
+    ${onoscord_id}=    Get Docker Container ID    ${SERVER_IP}    onoscord    ${VM_USER}    ${VM_PASS}
+
+Validate Default OVS Flow Count
+    [Documentation]    Logs into the compute-node where OVS is running and validates the default flow count
+    [Tags]    ovsflows
+    ${ovs_flow_count}=    Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int | wc -l
+    ${ovs_flow_count}=    Get Line    ${ovs_flow_count}    0
+    Should Be Equal As Integers    ${ovs_flow_count}    42
+
+Validate Default Flow Count in ONOS
+    [Documentation]    Validates the number of flows pushed down by onos (should match number flow count in ovs)
+    [Tags]    onosflows    notready
+    Log    Validating ONOS Flow Count
+
+Validate Current VTN Service Networks and Ports
+    [Documentation]    Makes rest calls to both XOS and ONOSCORD to validate the default VTN Service Networks + Ports
+    [Tags]    vtnservice
+    Validate Default CIAB Service Networks and Ports via XOS
+    ${serviceNetworks}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -X GET -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/serviceNetworks; echo
+    Validate Default CIAB Service Networks via ONOSCORD    ${serviceNetworks}
+    ${servicePorts}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -X GET -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/servicePorts; echo
+    Validate Default CIAB Service Ports via ONOSCORD    ${servicePorts}
+
+Create New VTN Service Network
+    [Documentation]    Makes a POST Request from the head-node to the ONOS Cord-VTN App to create a new service network
+    [Tags]    vtnservice
+    ${network_uuid}=    Generate UUID
+    Set Suite Variable    ${network_uuid}
+    ${networkCreation}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -s -o /dev/null -w "\%{http_code}" -X POST -u karaf:karaf -H "Content-Type: application/json" -d '{"ServiceNetwork": {"id": "${network_uuid}", "type": "PRIVATE", "name": "APITEST", "segment_id": 2221, "subnet": "2.2.2.0/24", "service_ip": "2.2.2.1", "providers": [{"id": "${public_network_id}", "bidirectional": true}]}}' http://onos-cord:8182/onos/cordvtn/serviceNetworks; echo
+    Should Be Equal As Integers    ${networkCreation}    201
+    ${new_network}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -X GET -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/serviceNetworks/${network_uuid}; echo
+    Log    ${new_network}
+    ${name}=    Get Json Value    ${new_network}    /ServiceNetwork/name
+    ${type}=    Get Json Value    ${new_network}    /ServiceNetwork/type
+    ${segment_id}=    Get Json Value    ${new_network}    /ServiceNetwork/segment_id
+    ${subnet}=    Get Json Value    ${new_network}    /ServiceNetwork/subnet
+    ${service_ip}=    Get Json Value    ${new_network}    /ServiceNetwork/service_ip
+    Should Be Equal As Strings    ${name}    "APITEST"
+    Should Be Equal As Strings    ${type}    "PRIVATE"
+    Should Be Equal As Strings    ${segment_id}    2221
+    Should Be Equal As Strings    ${subnet}    "2.2.2.0/24"
+    Should Be Equal As Strings    ${service_ip}    "2.2.2.1"
+
+Create New VTN Service Port
+    [Documentation]    Makes a POST Request from the head-node to the ONOS Cord-VTN App to create a new service port for the newly created network
+    [Tags]    vtnservice
+    ${port_uuid}=    Generate UUID
+    Set Suite Variable    ${port_uuid}
+    ${networkCreation}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -s -o /dev/null -w "\%{http_code}" -X POST -u karaf:karaf -H "Content-Type: application/json" -d '{"ServicePort": {"id": "${port_uuid}", "network_id": "${network_uuid}", "name": "APITESTPORT", "mac_address": "FA:16:3E:A8:A1:AA", "ip_address": "2.2.2.1", "floating_address_pairs":[{"ip_address":"3.3.3.1","mac_address":"02:42:0A:06:01:11"}]}}' http://onos-cord:8182/onos/cordvtn/servicePorts; echo
+    Should Be Equal As Integers    ${networkCreation}    201
+    ${new_port}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -X GET -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/servicePorts/${port_uuid}; echo
+    Log    ${new_port}
+    ${name}=    Get Json Value    ${new_port}    /ServicePort/name
+    ${netId}=    Get Json Value    ${new_port}    /ServicePort/network_id
+    ${mac_address}=    Get Json Value    ${new_port}    /ServicePort/mac_address
+    ${ip_address}=    Get Json Value    ${new_port}    /ServicePort/ip_address
+    ${floating_pairs}=    Get Json Value    ${new_port}    /ServicePort/floating_address_pairs
+    Should Be Equal As Strings    ${name}    "APITESTPORT"
+    Should Be Equal As Strings    ${netId}    "${network_uuid}"
+    Should Be Equal As Strings    ${mac_address}    "FA:16:3E:A8:A1:AA"
+    Should Be Equal As Strings    ${ip_address}    "2.2.2.1"
+
+Validate New Flows Pushed to OVS
+    [Documentation]    Logs into the compute-node where OVS is running and validates the default flow count
+    [Tags]    vtnservice
+    ${ovs_flow_count}=    Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int | grep 2.2.2.0 | wc -l
+    ${ovs_flow_count}=    Get Line    ${ovs_flow_count}    0
+    Should Be Equal As Integers    ${ovs_flow_count}    3
+    ${flows_added}=    Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int
+    ${flows_added}=    Get Lines Containing String    ${flows_added}    cookie=
+    Log    ${flows_added}
+    ## Match src/dst (bi-directional) rules on new flows added
+    Should Contain    ${flows_added}    nw_src=2.2.2.0/24,nw_dst=10.6.1.192/26
+    Should Contain    ${flows_added}    nw_src=10.6.1.192/26,nw_dst=2.2.2.0/24
+    Should Contain    ${flows_added}    nw_src=2.2.2.0/24,nw_dst=10.6.1.193
+
+Delete VTN Service Port
+    [Documentation]    Makes a DELETE Request from the head-node to the ONOS Cord-VTN App to delete the new service port
+    [Tags]    vtnservice
+    ${networkDeletion}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -s -o /dev/null -w "\%{http_code}" -X DELETE -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/servicePorts/${port_uuid}; echo
+    Should Be Equal As Integers    ${networkDeletion}    204
+    ${get_port}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -s -o /dev/null -w "\%{http_code}" -X GET -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/servicePorts/${port_uuid}; echo
+    Should Be Equal As Integers    ${get_port}    404
+
+Delete VTN Service Network
+    [Documentation]    Makes a DELETE Request from the head-node to the ONOS Cord-VTN App to delete the created service network
+    [Tags]    vtnservice
+    ${networkDeletion}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -s -o /dev/null -w "\%{http_code}" -X DELETE -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/serviceNetworks/${network_uuid}; echo
+    Should Be Equal As Integers    ${networkDeletion}    204
+    ${get_network}=    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    prod    curl -s -o /dev/null -w "\%{http_code}" -X GET -u karaf:karaf -H "Content-Type: application/json" http://onos-cord:8182/onos/cordvtn/serviceNetworks/${network_uuid}; echo
+    Should Be Equal As Integers    ${get_network}    404
+
+Validate New Flows Removed From OVS
+    [Documentation]    Validates that the flow rules added by ONOS from the network creation has been removed
+    [Tags]    vtnservice
+    ${ovs_flow_count}=    Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int | grep 2.2.2.0 | wc -l
+    ${ovs_flow_count}=    Get Line    ${ovs_flow_count}    0
+    Should Be Equal As Integers    ${ovs_flow_count}    0
+    ${flows_added}=    Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int
+    ${flows_added}=    Get Lines Containing String    ${flows_added}    cookie=
+    Log    ${flows_added}
+    ## Validate flow rules arent in the flows table
+    Should Not Contain    ${flows_added}    nw_src=2.2.2.0/24,nw_dst=10.6.1.192/26
+    Should Not Contain    ${flows_added}    nw_src=10.6.1.192/26,nw_dst=2.2.2.0/24
+    Should Not Contain    ${flows_added}    nw_src=2.2.2.0/24,nw_dst=10.6.1.193
+
+*** Keywords ***
+Suite Setup
+    ${auth} =    Create List    ${USER}    ${PASSWD}
+    Create Session    ${SERVER_IP}    http://${SERVER_IP}:${SERVER_PORT}    auth=${AUTH}
+
+Suite Teardown
+    Delete All Sessions
+    Close All Connections
+
+CORD Get
+    [Documentation]    Make a rest call to the CORD controller
+    [Arguments]    ${session}    ${service}
+    ${resp}=    Get Request    ${session}    ${service}
+    Log    ${resp.content}
+    [Return]    ${resp}
+
+Validate Default CIAB Service Networks and Ports via XOS
+    [Documentation]    Using XOS API, this validates the default VTN Service Networks + Ports for a CIAB Environment
+    @{expected_types}=    Create List    PUBLIC    PRIVATE    MANAGEMENT_LOCAL    VSG
+    @{expected_owner_slices}=    Create List    mysite_public    mysite_exampleservice    mysite_management    mysite_vsg
+    @{expected_network_names}=    Create List    public    management    exampleservice_network    mysite_vsg-access
+    @{types}=    Create List
+    @{ownerSlices}=    Create List
+    @{network_names}=    Create List
+    ${resp}=    CORD GET    ${SERVER_IP}    /api/service/vtn/serviceNetworks/
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${jsondata}=    To Json    ${resp.content}
+    ${length}=    Get Length    ${jsondata['serviceNetworks']}
+    Should Be Equal As Integers    ${length}    4
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${item}=    Get From List    ${jsondata['serviceNetworks']}    ${INDEX}
+    \    ${type}=    Get From Dictionary    ${item}    type
+    \    ${ownerSliceName}=    Get From Dictionary    ${item}    ownerSliceName
+    \    Append To List    ${types}    ${type}
+    \    Append To List    ${ownerSlices}    ${ownerSliceName}
+    : FOR    ${value}    IN    @{expected_types}
+    \    List Should Contain Value    ${types}    ${value}
+    : FOR    ${value}    IN    @{expected_owner_slices}
+    \    List Should Contain Value    ${ownerSlices}    ${value}
+    ${resp}=    CORD GET    ${SERVER_IP}    /api/service/vtn/servicePorts/
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${jsondata}=    To Json    ${resp.content}
+    ${length}=    Get Length    ${jsondata['servicePorts']}
+    Should Be Equal As Integers    ${length}    5
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${item}=    Get From List    ${jsondata['servicePorts']}    ${INDEX}
+    \    ${network_name}=    Get From Dictionary    ${item}    network_name
+    \    Append To List    ${network_names}    ${network_name}
+    : FOR    ${value}    IN    @{expected_network_names}
+    \    List Should Contain Value    ${network_names}    ${value}
+    ${management_len}=    Count Values in List    ${network_names}    management
+    Should Be Equal As Integers    ${management_len}    2
+
+Validate Default CIAB Service Networks via ONOSCORD
+    [Documentation]    Validates the default VTN Service Network via ONOSCORD for a CIAB Environment
+    [Arguments]    ${jsondata}
+    @{network_ids}=    Create List
+    @{expected_types}=    Create List    PUBLIC    PRIVATE    MANAGEMENT_LOCAL    VSG
+    @{expected_names}=    Create List    public    exampleservice_network    management    mysite_vsg-access
+    @{types}=    Create List
+    @{names}=    Create List
+    ${jsondata}=    To Json    ${jsondata}
+    ${length}=    Get Length    ${jsondata['ServiceNetworks']}
+    Should Be Equal As Integers    ${length}    4
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${item}=    Get From List    ${jsondata['ServiceNetworks']}    ${INDEX}
+    \    ${network_id}=    Get From Dictionary    ${item}    id
+    \    ${type}=    Get From Dictionary    ${item}    type
+    \    ${name}=    Get From Dictionary    ${item}    name
+    \    Append To List    ${network_ids}    ${network_id}
+    \    Append To List    ${types}    ${type}
+    \    Append To List    ${names}    ${name}
+    \    Run Keyword If    "${name}" == "management"    Set Suite Variable    ${management_network_id}    ${network_id}
+    \    Run Keyword If    "${name}" == "public"    Set Suite Variable    ${public_network_id}    ${network_id}
+    : FOR    ${value}    IN    @{expected_types}
+    \    List Should Contain Value    ${types}    ${value}
+    : FOR    ${value}    IN    @{expected_names}
+    \    List Should Contain Value    ${names}    ${value}
+    Set Suite Variable    ${network_ids}
+
+Validate Default CIAB Service Ports via ONOSCORD
+    [Documentation]    Validates the default VTN Service Ports via ONOSCORD for a CIAB Environment
+    [Arguments]    ${jsondata}
+    ${net_ids}=    Create List
+    ${jsondata}=    To Json    ${jsondata}
+    ${length}=    Get Length    ${jsondata['ServicePorts']}
+    Should Be Equal As Integers    ${length}    5
+    : FOR    ${INDEX}    IN RANGE    0    ${length}
+    \    ${item}=    Get From List    ${jsondata['ServicePorts']}    ${INDEX}
+    \    ${net_id}=    Get From Dictionary    ${item}    network_id
+    \    Append To List    ${net_ids}    ${net_id}
+    : FOR    ${value}    IN    @{net_ids}
+    \    List Should Contain Value    ${network_ids}    ${value}
+    ${management_len}=    Count Values in List    ${net_ids}    ${management_network_id}
+    Should Be Equal As Integers    ${management_len}    2
