diff --git a/web/gui/src/main/webapp/tests/app/view/topo/topoToolbar-spec.js b/web/gui/src/main/webapp/tests/app/view/topo/topoToolbar-spec.js
new file mode 100644
index 0000000..63d2f23
--- /dev/null
+++ b/web/gui/src/main/webapp/tests/app/view/topo/topoToolbar-spec.js
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/*
+ ONOS GUI -- Topo View -- Topo Toolbar Service - Unit Tests
+ */
+describe('factory: view/topo/topoToolbar.js', function() {
+    var $log, fs, tts, prefs, ps,
+        d3Elem;
+
+    beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'ngRoute', 'onosNav',
+        'onosWidget'));
+
+    beforeEach(inject(function (_$log_, FnService,
+                                TopoToolbarService, PanelService, PrefsService) {
+        $log = _$log_;
+        fs = FnService;
+        tts = TopoToolbarService;
+        prefs = PrefsService;
+        ps = PanelService;
+        d3Elem = d3.select('body').append('div').attr('id', 'floatpanels');
+        ps.init();
+    }));
+
+    it('should define TopoToolbarService', function () {
+        expect(tts).toBeDefined();
+    });
+
+    it('should define api functions', function () {
+        expect(fs.areFunctions(tts, [
+            'init', 'createToolbar', 'destroyToolbar',
+            'keyListener', 'toggleToolbar'
+        ])).toBeTruthy();
+    });
+
+    function verifyFirstRow() {
+
+    }
+
+    function verifySecondRow() {
+
+    }
+
+    function verifyThirdRow() {
+
+    }
+
+    it('should create a toolbar', function () {
+        //var toolbar = tts.createToolbar('foo');
+        //expect(toolbar).toBeTruthy();
+        //expect(d3.select('#toolbar-foo').empty()).toBe(false);
+        //verifyFirstRow();
+        //verifySecondRow();
+        //verifyThirdRow();
+    });
+
+});
\ No newline at end of file
