UNPKG

ndn-contrib

Version:

Reusable 'Classes' for Named Data Networking: NameTree, PIT, FIB, ContentStore, Interfaces, and Transports

143 lines (121 loc) 6.16 kB
var NameTree = require('../../../src/DataStructures/NameTree.js') , ndn = require('ndn-lib') , assert = require('assert') NameTree.installNDN(ndn); var nameTree = new NameTree(); describe('NameTree.addNode()', function(){ it('should add without error from string && prefix', function(){ nameTree.addNode("some/test/c"); // [2] nameTree.addNode("some/test/a"); // [0] nameTree.addNode(new ndn.Name("some/test/aaa"));// [4] nameTree.addNode("some/test/aab");// [5] nameTree.addNode("some/test/aaabb");// [7] nameTree.addNode(new ndn.Name("some/test/aba"));// [6] nameTree.addNode("some/test/b"); // [1] nameTree.addNode("some/test/ab"); // [3] }) it('should populate ancestors', function(){ assert(nameTree["/some/test/a"] , "nameTree['/some/test/a'] does not exist"); assert(nameTree["/some/test"] , "nameTree['/some/test'] does not exist"); assert(nameTree["/some"] , "nameTree['/some'] does not exist"); assert(nameTree["/"] , "nameTree['/'] does not exist"); }) it('should populate .parent property of nodes', function(){ assert(nameTree['/some/test/a'].parent ,"nameTree['/some/test/a'].parent does not exist") assert(nameTree['/some/test/a'].parent.parent ,"nameTree['/some/test/a'].parent.parent does not exist") assert(nameTree['/some/test/a'].parent.parent.parent ,"nameTree['/some/test/a'].parent.parent.parents does not exist") assert(nameTree['/some/test/a'].parent.prefix.equals(nameTree['/some/test'].prefix) , "nameTree['/some/test/a'].parent.prefix != nameTree['/some/test'].prefix") }) it('should populate .children array of nodes', function(){ assert(nameTree['/some/test'].children.length == 8 ,"nameTree['/some/test'].children.length is not 8"); assert(nameTree['/some/test'].children[0].prefix.equals(nameTree['/some/test/a'].prefix) , "nameTree['/some/test/a'] is out of order in .parent.children array"); assert(nameTree['/some/test'].children[4].prefix.equals(nameTree['/some/test/aaa'].prefix) , "nameTree['/some/test/aaa'] is out of order in .parent.children array"); assert(nameTree['/some/test'].children[3].prefix.equals(nameTree['/some/test/ab'].prefix) , "nameTree['/some/test/ab'] is out of order in .parent.children array"); assert(nameTree['/some/test'].children[6].prefix.equals(nameTree['/some/test/aba'].prefix) , "nameTree['/some/test/aba'] is out of order in .parent.children array"); assert(nameTree['/some/test'].children[1].prefix.equals(nameTree['/some/test/b'].prefix) , "nameTree['/some/test/b'] is out of order in .parent.children array"); assert(nameTree['/some/test'].children[2].prefix.equals(nameTree['/some/test/c'].prefix) , "nameTree['/some/test/c'] is out of order in .parent.children array"); assert(nameTree['/some/test'].children[5].prefix.equals(nameTree['/some/test/aab'].prefix) , "nameTree['/some/test/aab'] is out of order in .parent.children array"); }) }) describe("NameTree.removeNode()", function(){ it("should remove node and all children",function(){ nameTree.removeNode("/some"); assert(!nameTree["/some"], "nameTree['/some'] still exists" ); assert(!nameTree["/some/test"], "nameTree['/some/test'] still exists"); assert(!nameTree["/some/test/a"], "nameTree['/some/test/a'] still exists"); assert(!nameTree["/some/test/aaa"], "nameTree['/some/test/aaa'] still exists"); assert(!nameTree["/some/test/aaabb", "nameTree['/some/test/aaabb'] still exists"]); assert(!nameTree["/some/test/ab"], "nameTree['/some/test/ab'] still exists"); assert(!nameTree["/some/test/aba"], "nameTree['/some/test/aba'] still exists"); assert(!nameTree["/some/test/aab"], "nameTree['/some/test/aab'] still exists"); assert(!nameTree["/some/test/c"], "nameTree['/some/test/c'] still exists"); assert(!nameTree["/some/test/b"], "nameTree['/some/test/a'] still exists"); }) }) describe("NameTree.lookup()", function(){ it("should return existing node", function(){ nameTree.addNode("/lookup/test") assert((nameTree.lookup("/lookup/test") instanceof NameTree.Node)) }) it("should create non existing node", function(){ assert((nameTree.lookup("/lookup/creation/test") instanceof NameTree.Node)); assert((nameTree["/lookup"].children.length == 2)); }) }) describe("NameTree.findLongestPrefixMatch()", function(){ it("should return longest prefix match node", function(){ var query = new ndn.Name("lookup/creation/test/with/suffix") assert((nameTree.findLongestPrefixMatch(query).prefix.components.length == 3) && (nameTree.findLongestPrefixMatch(query).prefix.match(query))) }) it("should return based on truthiness of selector", function(){ nameTree.lookup("/lookup").property = true; var query = new ndn.Name("lookup/creation/test/with/suffix") , predicate = function(potential){ if (potential.property == true) return true; else return false; } assert((nameTree.findLongestPrefixMatch(query, predicate).prefix.components.length == 1) && (nameTree.findLongestPrefixMatch(query, predicate).prefix.match(query))) }) }) var iterator; var toMatch = new ndn.Name("0/1/2/3/4/5/6") describe("NameTree.findAllMatches", function(){ it("should return an iterator", function(){ nameTree.lookup(toMatch) iterator = nameTree.findAllMatches("0/1/2/3/4/5/6/7/8/9/0/", function(potential){ if (!potential.prefix.equals(new ndn.Name("0/1/2/3/4"))) return true else return false }) assert(iterator.hasNext) }) it("iterator should find all Matches and skip '0/1/2/3/4/' based on provided selector", function(){ while(iterator.hasNext){ var here = iterator.next() assert(here.prefix.match(toMatch)) assert(!here.prefix.equals(new ndn.Name("0/1/2/3/4"))) } }) it("iterator.hasNext == false && iterator.next() returns null", function(){ assert(!iterator.hasNext) assert(!iterator.next()) }) })