| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| var test = require('prova'); |
| var names = require('../../src/naming/util'); |
| var ep = '@4@tcp@127.0.0.1:22@@@@s@dev.v.io/blessing,v.io/blessing/b2@@'; |
| var rootedEp = '/' + ep; |
| |
| test('names.join(...)', function(assert) { |
| assert.equal(names.join('a', 'b'), 'a/b'); |
| assert.equal(names.join('a/', 'b/'), 'a/b'); |
| assert.equal(names.join('', ''), ''); |
| assert.equal(names.join('', 'b'), 'b'); |
| assert.equal(names.join('', '/b'), '/b'); |
| assert.equal(names.join('a', ''), 'a'); |
| assert.equal(names.join('a/', ''), 'a'); |
| assert.equal(names.join('/a', 'b'), '/a/b'); |
| assert.equal(names.join('/a/b', 'c'), '/a/b/c'); |
| assert.equal(names.join('/a/b', 'c/d'), '/a/b/c/d'); |
| assert.equal(names.join('/a/b', '/c/d'), '/a/b/c/d'); |
| assert.equal(names.join('/a/b', '//c/d'), '/a/b/c/d'); |
| assert.equal(names.join('', '//a/b'), '/a/b'); |
| assert.equal(names.join(['a', 'b', '//c/']), 'a/b/c'); |
| assert.equal(names.join('a', 'b', '//c/'), 'a/b/c'); |
| assert.equal(names.join(), ''); |
| assert.equal(names.join([]), ''); |
| assert.equal(names.join('/a//'), '/a'); |
| assert.equal(names.join(rootedEp, 'a'), rootedEp + '/a'); |
| assert.equal(names.join(rootedEp + '/', '/a'), rootedEp + '/a'); |
| assert.end(); |
| }); |
| |
| test('names.stripBasename(name)', function(assert) { |
| assert.equal(names.stripBasename('/'), ''); |
| assert.equal(names.stripBasename('/a'), ''); |
| assert.equal(names.stripBasename('/a/'), ''); |
| assert.equal(names.stripBasename('/a/b'), '/a'); |
| assert.equal(names.stripBasename('/a/b/'), '/a'); |
| assert.equal(names.stripBasename(''), ''); |
| assert.equal(names.stripBasename('a'), ''); |
| assert.equal(names.stripBasename('a/'), ''); |
| assert.equal(names.stripBasename('a/b'), 'a'); |
| assert.equal(names.stripBasename('a/b/'), 'a'); |
| assert.equal(names.stripBasename(rootedEp), ''); |
| assert.equal(names.stripBasename(rootedEp + '/a'), rootedEp); |
| assert.end(); |
| }); |
| |
| test('names.isRooted(name)', function(assert) { |
| assert.ok(names.isRooted('/')); |
| assert.ok(names.isRooted('/a')); |
| assert.ok(names.isRooted('/a/b')); |
| assert.ok(names.isRooted(rootedEp + '/')); |
| assert.notOk(names.isRooted('')); |
| assert.notOk(names.isRooted('a')); |
| assert.notOk(names.isRooted('b')); |
| assert.ok(names.isRooted('//a')); |
| assert.ok(names.isRooted('//' + rootedEp)); |
| assert.ok(names.isRooted(rootedEp)); |
| assert.end(); |
| }); |
| |
| test('names.clean(name)', function(assert) { |
| assert.equal(names.clean(''), ''); |
| assert.equal(names.clean('a'), 'a'); |
| assert.equal(names.clean('/b'), '/b'); |
| assert.equal(names.clean('a/'), 'a'); |
| assert.equal(names.clean('/b/'), '/b'); |
| assert.equal(names.clean('//foo'), '/foo'); |
| assert.equal(names.clean('//foo///bar/////'), '/foo/bar'); |
| assert.equal(names.clean(rootedEp), rootedEp); |
| assert.equal(names.clean('//' + rootedEp), rootedEp); |
| assert.equal(names.clean(rootedEp + '//'), rootedEp); |
| assert.end(); |
| }); |
| |
| test('names.basename(name)', function(assert) { |
| assert.equal(names.basename('/'), ''); |
| assert.equal(names.basename('/a'), 'a'); |
| assert.equal(names.basename('/a/'), 'a'); |
| assert.equal(names.basename('/a/b'), 'b'); |
| assert.equal(names.basename('/a/b/'), 'b'); |
| assert.equal(names.basename(''), ''); |
| assert.equal(names.basename('a'), 'a'); |
| assert.equal(names.basename('a/'), 'a'); |
| assert.equal(names.basename('a/b'), 'b'); |
| assert.equal(names.basename('a/b/'), 'b'); |
| assert.end(); |
| }); |
| |
| test('names.basename(name)', function(assert) { |
| assert.equal(names.basename('/'), ''); |
| assert.equal(names.basename('/a'), 'a'); |
| assert.equal(names.basename('/a/'), 'a'); |
| assert.equal(names.basename('/a/b'), 'b'); |
| assert.equal(names.basename('/a/b/'), 'b'); |
| assert.equal(names.basename(''), ''); |
| assert.equal(names.basename('a'), 'a'); |
| assert.equal(names.basename('a/'), 'a'); |
| assert.equal(names.basename('a/b'), 'b'); |
| assert.equal(names.basename('a/b/'), 'b'); |
| assert.equal(names.basename(rootedEp), ep); |
| assert.equal(names.basename(rootedEp + '/'), ep); |
| assert.equal(names.basename(rootedEp + '/b'), 'b'); |
| assert.end(); |
| }); |
| |
| test('names.splitAddressName(name)', function(assert) { |
| var tests = [ |
| ['', '', ''], |
| ['/', '', ''], |
| ['//', '', ''], |
| ['//abc@@host/foo', 'abc@@host', 'foo'], |
| ['a', '', 'a'], |
| ['/a', 'a', ''], |
| ['/a/', 'a', ''], |
| ['a/b', '', 'a/b'], |
| ['/a/b', 'a', 'b'], |
| ['abc@@/foo', '', 'abc@@/foo'], |
| ['/abc@@host/foo', 'abc@@host', 'foo'], |
| ['/abc/foo', 'abc', 'foo'], |
| ['/abc/foo//x', 'abc', 'foo/x'], |
| ['/abc:20/foo', 'abc:20', 'foo'], |
| ['/abc//foo/bar', 'abc', 'foo/bar'], |
| ['/0abc:20/foo', '0abc:20', 'foo'], |
| ['/abc1.2:20/foo', 'abc1.2:20', 'foo'], |
| ['/abc:xx/foo', 'abc:xx', 'foo'], |
| ['/-abc/foo', '-abc', 'foo'], |
| ['/a.-abc/foo', 'a.-abc', 'foo'], |
| ['/[01:02::]:444', '[01:02::]:444', ''], |
| ['/[01:02::]:444/foo', '[01:02::]:444', 'foo'], |
| ['/12.3.4.5:444', '12.3.4.5:444', ''], |
| ['/12.3.4.5:444/foo', '12.3.4.5:444', 'foo'], |
| ['/12.3.4.5', '12.3.4.5', ''], |
| ['/12.3.4.5/foo', '12.3.4.5', 'foo'], |
| ['/12.3.4.5//foo', '12.3.4.5', 'foo'], |
| ['/12.3.4.5/foo//bar', '12.3.4.5', 'foo/bar'], |
| ['/user@domain.com@host:1234/foo/bar', 'user@domain.com@host:1234', 'foo/bar'], // jshint ignore:line |
| ['/(dev.v.io/services/mounttabled)@host:1234/foo/bar', '(dev.v.io/services/mounttabled)@host:1234', 'foo/bar'], // jshint ignore:line |
| ['/(dev.v.io/services/mounttabled)@host:1234/', '(dev.v.io/services/mounttabled)@host:1234', ''], // jshint ignore:line |
| ['/(dev.v.io/services/mounttabled)@host:1234', '(dev.v.io/services/mounttabled)@host:1234', ''], // jshint ignore:line |
| // the next two tests have malformed endpoint, doesn't end in a @@ |
| ['/@4@tcp@127.0.0.1:22@@@@s@dev.v.io/', '@4@tcp@127.0.0.1:22@@@@s@dev.v.io', ''], // jshint ignore:line |
| ['/@4@tcp@127.0.0.1:22@@@@s@dev.v.io', '@4@tcp@127.0.0.1:22@@@@s@dev.v.io', ''], // jshint ignore:line |
| ['/@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled@@/foo/bar', '@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled@@', 'foo/bar'], // jshint ignore:line |
| ['/@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@/foo/bar', '@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@', 'foo/bar'], // jshint ignore:line |
| ['/@@@127.0.0.1:22@@@@/foo/bar', '@@@127.0.0.1:22@@@@', 'foo/bar'], // jshint ignore:line |
| ['/@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@', '@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled,staging.v.io/services/nsroot@@', ''], // jshint ignore:line |
| ['/@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled@@/foo/bar', '@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled@@', 'foo/bar'], // jshint ignore:line |
| [rootedEp, ep, ''], |
| [rootedEp + '/b', ep, 'b'], |
| [ep, '', ep], |
| ]; |
| tests.forEach(function(t) { |
| assert.deepEqual(names.splitAddressName(t[0]), |
| { address: t[1], suffix: t[2] } |
| ); |
| }); |
| |
| assert.end(); |
| }); |
| |
| test('names.blessingNamesFromAddress(addr)', function(assert) { |
| var tests = [ |
| // Valid v4 endpoints |
| ['@4@tcp@127.0.0.1:22@@@@s@@@', ['']], |
| ['@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled@@', |
| ['dev.v.io/services/mounttabled']], |
| ['@5@tcp@127.0.0.1:22@@s@dev.v.io/services/mounttabled@@', |
| ['dev.v.io/services/mounttabled']], |
| ['@4@tcp@127.0.0.1:22@@@@s@dev.v.io/services/mounttabled,foo/bar,batman@dccomics.com/car@@', // jshint ignore:line |
| ['dev.v.io/services/mounttabled', 'foo/bar', 'batman@dccomics.com/car']], |
| ['@5@tcp@127.0.0.1:22@@s@dev.v.io/services/mounttabled,foo/bar,batman@dccomics.com/car@@', // jshint ignore:line |
| ['dev.v.io/services/mounttabled', 'foo/bar', 'batman@dccomics.com/car']], |
| // Well-formed endpoints of old versions. |
| ['@2@tcp@127.0.0.1:21@@@@@', []], |
| ['@3@tcp@127.0.0.1:21@@@@m@@', []], |
| // Host:port endpoints |
| ['ns.dev.v.io:8101', []], |
| ['(dev.v.io/service/mounttabled)@ns.dev.v.io:8101', |
| ['dev.v.io/service/mounttabled']], |
| // Invalid strings: |
| // invalid endpoints since they do not end in @@. |
| ['@4@tcp@127.0.0.1:22@@@@s@dev.v.io/', []], |
| ['@4@tcp@127.0.0.1:22@@@@s@dev.v.io', []], |
| // malformed version number |
| ['@4c@tcp@127.0.0.1:22@@@@s@foo@@', []], |
| ['@-4@tcp@127.0.0.1:22@@@@s@foo@@', []], |
| ]; |
| tests.forEach(function(t) { |
| assert.deepEqual(names.blessingNamesFromAddress(t[0]), t[1]); |
| }); |
| assert.end(); |
| }); |
| |
| test('names.[encode/decode]AsNameElement(name)', function(assert) { |
| var tests = [ |
| ['', ''], |
| ['/', '%2F'], |
| ['%', '%25'], |
| ['/The % rain in /% Spain', '%2FThe %25 rain in %2F%25 Spain'], |
| ['/%/%', '%2F%25%2F%25'], |
| ['ᚸӲ읔קAل', 'ᚸӲ읔קAل'], |
| ['ᚸ/Ӳ%읔/ק%Aل', 'ᚸ%2FӲ%25읔%2Fק%25Aل'], |
| ]; |
| |
| tests.forEach(function(t) { |
| assert.equal(names.encodeAsNameElement(t[0]), t[1], t[0] + ' encoding'); |
| assert.equal(names.decodeAsNameElement(t[1]), t[0], t[1] + ' decoding'); |
| }); |
| assert.end(); |
| }); |