diff --git a/src/test/fabric/__init__.py b/src/test/fabric/__init__.py
new file mode 100644
index 0000000..b3dcc62
--- /dev/null
+++ b/src/test/fabric/__init__.py
@@ -0,0 +1,22 @@
+# 
+# Copyright 2016-present Ciena 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.
+#
+import os,sys
+##add the python path to lookup the utils
+working_dir = os.path.dirname(os.path.realpath(sys.argv[-1]))
+utils_dir = os.path.join(working_dir, '../utils')
+fsm_dir = os.path.join(working_dir, '../fsm')
+__path__.append(utils_dir)
+__path__.append(fsm_dir)
diff --git a/src/test/fabric/fabricTest.py b/src/test/fabric/fabricTest.py
new file mode 100644
index 0000000..ec17e49
--- /dev/null
+++ b/src/test/fabric/fabricTest.py
@@ -0,0 +1,57 @@
+# 
+# Copyright 2016-present Ciena 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.
+#
+import unittest
+from nose.tools import *
+from nose.twistedtools import reactor, deferred
+from twisted.internet import defer
+from TestManifest import TestManifest
+from Fabric import FabricMAAS, Fabric
+from scapy.all import *
+import os
+log.setLevel('INFO')
+
+class fabric_exchange(unittest.TestCase):
+
+    node_list = []
+    fabric = None
+    FABRIC_TEST_TIMEOUT = 30
+    key_file = os.getenv('SSH_KEY_FILE', None)
+    api_key = os.getenv('MAAS_API_KEY', 'UNKNOWN')
+
+    @classmethod
+    def setUpClass(cls):
+        if cls.api_key == 'UNKNOWN':
+            return
+        maas = FabricMAAS(api_key = cls.api_key)
+        cls.node_list = maas.get_node_list()
+        cls.fabric = Fabric(cls.node_list, key_file = cls.key_file, verbose = False)
+
+    @deferred(FABRIC_TEST_TIMEOUT)
+    def test_fabric(self):
+        """Test the connectivity between the compute nodes"""
+        df = defer.Deferred()
+        def verify_fabric(df):
+            assert_not_equal(self.fabric, None)
+            failed_nodes = []
+            failed_nodes = self.fabric.ping_neighbors()
+            if failed_nodes:
+                log.info('Failed nodes: %s' %failed_nodes)
+                for node, neighbor, _ in failed_nodes:
+                    log.info('Ping from node %s to neighbor %s Failed' %(node, neighbor))
+            assert_equal(len(failed_nodes), 0)
+            df.callback(0)
+        reactor.callLater(0, verify_fabric, df)
+        return df
