diff --git a/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js b/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js
index 524a160..f6c4036 100644
--- a/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js
+++ b/web/gui/src/main/webapp/tests/app/fw/svg/glyph-spec.js
@@ -22,6 +22,10 @@
 describe('factory: fw/svg/glyph.js', function() {
     var $log, fs, gs;
 
+    var vbBird = '352 224 113 112',
+        vbGlyph = '0 0 110 110',
+        vbBadge = '0 0 10 10';
+
     beforeEach(module('onosUtil', 'onosSvg'));
 
     beforeEach(inject(function (_$log_, FnService, GlyphService) {
@@ -34,11 +38,73 @@
         expect(gs).toBeDefined();
     });
 
-    it('should define four functions', function () {
+    it('should define api functions', function () {
         expect(fs.areFunctions(gs, [
-            'init', 'register', 'ids', 'loadDefs'
+            'init', 'register', 'ids', 'glyph', 'loadDefs'
         ])).toBeTruthy();
     });
 
-    // TODO: unit tests for glyph functions
+    it('should start with no glyphs loaded', function () {
+        expect(gs.ids()).toEqual([]);
+    });
+
+    it('should load the base set of glyphs', function () {
+        gs.init();
+        expect(gs.ids().length).toEqual(11);
+    });
+
+    function verifyGlyphLoaded(id, vbox, prefix) {
+        var glyph = gs.glyph(id),
+            plen = prefix.length;
+        expect(fs.contains(gs.ids(), id)).toBeTruthy();
+        expect(glyph).toBeDefined();
+        expect(glyph.id).toEqual(id);
+        expect(glyph.vb).toEqual(vbox);
+        expect(glyph.d.slice(0, plen)).toEqual(prefix);
+    }
+
+    it('should load the bird glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('bird', vbBird, 'M427.7,300.4');
+    });
+    it('should load the unknown glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('unknown', vbGlyph, 'M35,40a5');
+    });
+    it('should load the node glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('node', vbGlyph, 'M15,100a5');
+    });
+    it('should load the switch glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('switch', vbGlyph, 'M10,20a10');
+    });
+    it('should load the roadm glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('roadm', vbGlyph, 'M10,35l25-');
+    });
+    it('should load the endstation glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('endstation', vbGlyph, 'M10,15a5,5');
+    });
+    it('should load the router glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('router', vbGlyph, 'M10,55A45,45');
+    });
+    it('should load the bgpSpeaker glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('bgpSpeaker', vbGlyph, 'M10,40a45,35');
+    });
+    it('should load the chain glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('chain', vbGlyph, 'M60.4,77.6c-');
+    });
+    it('should load the crown glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('crown', vbGlyph, 'M99.5,21.6c0');
+    });
+    it('should load the uiAttached glyph', function() {
+        gs.init();
+        verifyGlyphLoaded('uiAttached', vbBadge, 'M2,2.5a.5,.5');
+    });
 });
