diff --git a/web/gui/src/main/webapp/tests/app/fw/remote/rest-spec.js b/web/gui/src/main/webapp/tests/app/fw/remote/rest-spec.js
new file mode 100644
index 0000000..ecfcba7
--- /dev/null
+++ b/web/gui/src/main/webapp/tests/app/fw/remote/rest-spec.js
@@ -0,0 +1,90 @@
+/*
+ * 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 -- Remote -- REST Service - Unit Tests
+
+ @author Bri Prebilic Cole
+ @author Simon Hunt
+ */
+describe('factory: fw/remote/rest.js', function() {
+    var $log, $httpBackend, fs, rs, promise;
+
+    beforeEach(module('onosUtil', 'onosRemote'));
+
+    beforeEach(inject(function (_$log_, _$httpBackend_, FnService, RestService) {
+        $log = _$log_;
+        $httpBackend = _$httpBackend_;
+        fs = FnService;
+        rs = RestService;
+    }));
+
+    it('should define RestService', function () {
+        expect(rs).toBeDefined();
+    });
+
+    it('should define api functions', function () {
+        expect(fs.areFunctions(rs, [
+            'get'
+        ])).toBeTruthy();
+    });
+
+    var mockData = {
+        id: 1,
+        prop: 'abc'
+    };
+
+    it('should fetch remote data', function () {
+        var called = 0,
+            capture = null;
+        $httpBackend.expectGET('/bar').respond(mockData);
+        spyOn($log, 'warn');
+
+        rs.get('/bar', function (data) {
+            called++;
+            capture = data;
+        });
+
+        expect(called).toEqual(0);
+        expect(capture).toBeNull();
+        $httpBackend.flush();
+        expect(called).toEqual(1);
+        expect(capture).toEqual(mockData);
+        expect($log.warn).not.toHaveBeenCalled();
+    });
+
+    it('should fail to fetch remote data', function () {
+        var called = 0,
+            capture = null;
+        $httpBackend.expectGET('/bar').respond(404, 'Not Found');
+        spyOn($log, 'warn');
+
+        rs.get('/bar', function (data) {
+            called++;
+            capture = data;
+        });
+
+        expect(called).toEqual(0);
+        expect(capture).toBeNull();
+        $httpBackend.flush();
+        expect(called).toEqual(0);
+        expect(capture).toBeNull();
+        expect($log.warn)
+            .toHaveBeenCalledWith('Failed to retrieve JSON data: /bar',
+                                    404, 'Not Found');
+    });
+
+});
