diff --git a/src/test/cord-api/Framework/utils/utils.robot b/src/test/cord-api/Framework/utils/utils.robot
index 0d2ba14..13b9ac9 100644
--- a/src/test/cord-api/Framework/utils/utils.robot
+++ b/src/test/cord-api/Framework/utils/utils.robot
@@ -1,3 +1,33 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+# Copyright 2017-present Radisys Corporation
+#
+# 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    Library for various utilities
 Library           SSHLibrary
@@ -9,13 +39,15 @@
 Library           RequestsLibrary
 #Library           ${CURDIR}/readProperties.py
 #Resource          ${CURDIR}/utils.py
+*** Variables ***
+${SSH_KEY}=   id_rsa
 
 *** 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}
+    BuiltIn.Log    ${pass}
     ${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}
diff --git a/src/test/robot/SanityPhyPOD.robot b/src/test/robot/SanityPhyPOD.robot
new file mode 100755
index 0000000..5899cbe
--- /dev/null
+++ b/src/test/robot/SanityPhyPOD.robot
@@ -0,0 +1,220 @@
+
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+# Copyright 2017-present Radisys Corporation
+#
+# 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 for checking default maas,xos and onos containers and fabric switch default services and maas cli commands 
+Library       OperatingSystem
+Resource      ../cord-api/Framework/utils/utils.robot
+
+*** Variables ***
+@{MAAS_SERVICE_STATUS}    start/running    is running
+@{JUJU_SERVICE_STATUS}    active           is ready
+@{LXD_CONTAINER_STATUS}   RUNNING
+@{BOOT_RESOURCES_OUTPUT}  ubuntu/trusty
+${FABRIC_SWITCH_PROMPT}    #
+${FABRIC_SWITCH_USER}     root
+${FABRIC_SWITCH_PASSWD}    onl
+@{FABRIC_SERVICE_STATUS}    is running
+${IP_PATTERN}     (\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)
+
+*** Test Cases ***
+Verify headnode interfaces detected
+    Verify HeadNode Interfaces
+
+Verify the state MAAS service
+    [Template]     Verify MAAS Service
+    maas-dhcpd
+    maas-regiond
+    maas-clusterd
+    maas-proxy
+    bind9
+
+Verify the state of MAAS Containers
+    [Template]      Verify Containers   
+    cord-maas-automation    
+    cord-maas-switchq    
+    cord-provisioner    
+    cord-ip-allocator    
+    cord-dhcp-harvester
+    config-generator    
+
+Verify the state of XOS Containers
+    [Template]      Verify Containers   
+    xos-gui    
+    xos-ws    
+    chameleon    
+    xos-ui
+    onos-synchronizer
+    vrouter-synchronizer
+    exampleservice-synchronizer
+    vsg-synchronizer    
+    gui-extension-rcord
+    gui-extension-vtr
+    vtn-synchronizer
+    vtr-synchronizer
+    fabric-synchronizer
+    openstack-synchronizer
+    xos-postgres
+
+Verify the state of ONOS Containers
+    [Template]      Verify Containers   
+    onosproject/onos
+    xos/onos
+ 
+Verify the state of other Containers
+    [Template]      Verify Containers   
+    redis 
+    mavenrepo
+    registry-mirror
+    registry
+
+Verify the state of juju services
+    [Template]    Verify JUJU Service
+    ceilometer
+    ceilometer-agent
+    glance
+    keystone
+    mongodb
+    nagios
+    neturon-api
+    nova-cloud-controller
+    nova-compute
+    openstack-dashboard
+    percona-cluster
+    rabbitmq-server
+
+Verify the state of openstack lxd containers
+    [Template]    Verify Openstack LXD Containers 
+    ceilometer
+    glance
+    keystone
+    mongodb
+    nagios
+    neutron-api 
+    nova-cloud-controller
+    openstack-dashboard
+    percona-cluster
+    rabbitmq-server
+    #testclient
+
+Verify MAAS CLI commands
+    Login MAAS Server
+    Verify MAAS CLI Commands   boot-resources read | jq 'map(select(.type == "Synced"))'    ubuntu/trusty
+    Verify MAAS CLI Commands   devices list | jq '.' | jq '.[]'.hostname | wc -l     3 
+    #Verify MAAS CLI Commands   events query | jq '.' | jq .events[].id | wc -l    100 
+    Verify MAAS CLI Commands   fabrics read | jq '.' | jq .[].name | wc -l    4
+    Verify MAAS CLI Commands   networks read | jq '.' | jq .[].name | wc -l    4
+    Verify MAAS CLI Commands   node-groups list | jq '.' | jq .[].status | wc -l    1
+    Verify MAAS CLI Commands   subnets read | jq '.' | jq .[].name | wc -l    4
+    Verify MAAS CLI Commands   nodes list | jq '.' | jq .[].substatus_name | wc -l    1
+    Verify MAAS CLI Commands   zones read | jq '.' | jq .[].name | wc -l   2 
+    Logout MAAS Server
+
+Verify Fabric Switch Service
+    ${fabric_ip}=    Discover FABRIC IP    ${FABRIC_SWITCH_MAC}   
+    Verify Fabric Switch Service    ${fabric_ip}    faultd
+    Verify Fabric Switch Service    ${fabric_ip}    netplug 
+    Verify Fabric Switch Service    ${fabric_ip}    ofdpa
+    Verify Fabric Switch Service    ${fabric_ip}    onlp-snmpd
+    Verify Fabric Switch Service    ${fabric_ip}    onlpd
+    Verify Fabric Switch Service    ${fabric_ip}    resolvconf 
+    Verify Fabric Switch Service    ${fabric_ip}    rsyslog
+    Verify Fabric Switch Service    ${fabric_ip}    snmpd 
+    Verify Fabric Switch Service    ${fabric_ip}    ssh 
+    Verify Fabric Switch Service    ${fabric_ip}    sxdkernel 
+    Verify Fabric Switch Service    ${fabric_ip}    udev 
+    Verify Fabric Switch Service    ${fabric_ip}    watchdog 
+
+
+*** Keywords ***
+Verify HeadNode Interfaces
+    ${cmd}=    Catenate    SEPARATOR=|   sudo ethtool mgmtbr    grep 'Link detected:'    awk '{ print $3 }'
+    ${output}=    Run     ${cmd} 
+    Should Contain    ${output}    yes    msg= mgmtbr is not detected !!!. Reason:
+    ${cmd}=    Catenate    SEPARATOR=|   sudo ethtool fabric    grep 'Link detected:'    awk '{ print $3 }'
+    ${output}=    Run     ${cmd} 
+    Should Contain    ${output}    yes    msg= fabric interface is not detected !!!. Reason:
+
+
+Verify Containers 
+    [Arguments]    ${name} 
+    ${cmd}=    Catenate    SEPARATOR=|   docker ps -a  grep -v grep  grep ${name}    awk '{print $7,$8,$9,$10,$11}'     
+    ${output}=    Run     ${cmd} 
+    Should Contain    ${output}    Up    msg= ${name} is not running !!!. Reason:
+
+Verify MAAS Service
+    [Arguments]    ${name}
+    ${cmd}=    Catenate   sudo service    ${name}   status 
+    ${output}=    Run     ${cmd} 
+    Should Contain Any    ${output}    @{MAAS_SERVICE_STATUS}    msg= ${name} is not running !!!. Reason:
+
+
+Verify JUJU Service
+    [Arguments]    ${name}
+    ${cmd}    Catenate    SEPARATOR=|    juju status --format=tabular    grep -v grep    grep ${name}/0    awk '{ print $2,$7,$8,$9,$10}'
+    ${output}=    Run     ${cmd} 
+    Should Contain Any    ${output}    @{JUJU_SERVICE_STATUS}    msg= ${name} is not running !!!. Reason:
+
+Verify Openstack LXD Containers
+    [Arguments]    ${name}
+    ${cmd}    Catenate    SEPARATOR=|    sudo lxc list    grep -v grep    grep ${name}-1    awk '{ print $2,$4 }'
+    ${output}=    Run     ${cmd} 
+    Should Contain Any    ${output}    @{LXD_CONTAINER_STATUS}    msg= ${name} is not running !!!. Reason:
+
+Verify MAAS CLI Commands
+    [Arguments]    ${name}    ${expected}
+    ${cmd}    Catenate    maas cord ${name}
+    ${output}=    Run     ${cmd} 
+    Should Contain    ${output}    ${expected}    msg=Reason:   
+
+Login MAAS Server 
+    ${cmd}   Catenate   maas login cord http://localhost/MAAS/api/1.0 $(sudo maas-region-admin apikey --user=cord) 
+    ${output}=    Run     ${cmd} 
+    Should Contain   ${output}   You are now logged in to the MAAS  msg= MAAS login failure !!!. Reason:
+
+Logout MAAS Server 
+    ${cmd}   Catenate   maas logout cord 
+    ${output}=    Run     ${cmd} 
+
+Discover FABRIC IP
+    [Arguments]    ${fabric_mac}
+    ${cmd}   Catenate    SEPARATOR=|  cord switch list   grep -v IP   awk '{ print $3 }' 
+    ${output}=    Run     ${cmd} 
+    ${ret}=    Should Match Regexp    ${output}    ${IP_PATTERN}    msg="unable to get ip"   
+    [Return]   ${ret[0]} 
+
+Verify Fabric Switch Service
+    [Arguments]    ${ip}    ${name}
+    ${cmd}=    Catenate    service   ${name}   status 
+    ${output}=    Run Command On Remote System    ${ip}    ${cmd}   ${FABRIC_SWITCH_USER}   ${FABRIC_SWITCH_PASSWD}    ${FABRIC_SWITCH_PROMPT}   60s   False 
+    Should Contain Any    ${output}    @{FABRIC_SERVICE_STATUS}    msg= ${name} is not running !!!. Reason:
