You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
3.6 KiB
149 lines
3.6 KiB
|
|
try { |
|
var url = require('is-url'); |
|
} catch (e) { |
|
var url = require('..'); |
|
} |
|
|
|
var assert = require('assert'); |
|
|
|
describe('is-url', function () { |
|
describe('valid', function () { |
|
it('http://google.com', function () { |
|
assert(url('http://google.com')); |
|
}); |
|
|
|
it('https://google.com', function () { |
|
assert(url('https://google.com')); |
|
}); |
|
|
|
it('ftp://google.com', function () { |
|
assert(url('ftp://google.com')); |
|
}); |
|
|
|
it('http://www.google.com', function () { |
|
assert(url('http://www.google.com')); |
|
}); |
|
|
|
it('http://google.com/something', function () { |
|
assert(url('http://google.com/something')); |
|
}); |
|
|
|
it('http://google.com?q=query', function () { |
|
assert(url('http://google.com?q=query')); |
|
}); |
|
|
|
it('http://google.com#hash', function () { |
|
assert(url('http://google.com#hash')); |
|
}); |
|
|
|
it('http://google.com/something?q=query#hash', function () { |
|
assert(url('http://google.com/something?q=query#hash')); |
|
}); |
|
|
|
it('http://google.co.uk', function () { |
|
assert(url('http://google.co.uk')); |
|
}); |
|
|
|
it('http://www.google.co.uk', function () { |
|
assert(url('http://www.google.co.uk')); |
|
}); |
|
|
|
it('http://google.cat', function () { |
|
assert(url('http://google.cat')); |
|
}); |
|
|
|
it('https://d1f4470da51b49289906b3d6cbd65074@app.getsentry.com/13176', function () { |
|
assert(url('https://d1f4470da51b49289906b3d6cbd65074@app.getsentry.com/13176')); |
|
}); |
|
|
|
it('http://0.0.0.0', function () { |
|
assert(url('http://0.0.0.0')); |
|
}); |
|
|
|
it('http://localhost', function () { |
|
assert(url('http://localhost')); |
|
}); |
|
|
|
it('postgres://u:p@example.com:5702/db', function () { |
|
assert(url('postgres://u:p@example.com:5702/db')); |
|
}); |
|
|
|
it('redis://:123@174.129.42.52:13271', function () { |
|
assert(url('redis://:123@174.129.42.52:13271')); |
|
}); |
|
|
|
it('mongodb://u:p@example.com:10064/db', function () { |
|
assert(url('mongodb://u:p@example.com:10064/db')); |
|
}); |
|
|
|
it('ws://chat.example.com/games', function () { |
|
assert(url('ws://chat.example.com/games')); |
|
}); |
|
|
|
it('wss://secure.example.com/biz', function () { |
|
assert(url('wss://secure.example.com/biz')); |
|
}); |
|
|
|
it('http://localhost:4000', function () { |
|
assert(url('http://localhost:4000')); |
|
}); |
|
|
|
it('http://localhost:342/a/path', function () { |
|
assert(url('http://localhost:342/a/path')); |
|
}); |
|
|
|
it('//google.com', function () { |
|
assert(url('//google.com')); |
|
}); |
|
}); |
|
|
|
describe('invalid', function () { |
|
it('http://', function () { |
|
assert(!url('http://')); |
|
}); |
|
|
|
it('http://google', function () { |
|
assert(!url('http://google')); |
|
}); |
|
|
|
it('http://google.', function () { |
|
assert(!url('http://google.')); |
|
}); |
|
|
|
it('google', function () { |
|
assert(!url('google')); |
|
}); |
|
|
|
it('google.com', function () { |
|
assert(!url('google.com')); |
|
}); |
|
|
|
it('empty', function () { |
|
assert(!url('')); |
|
}); |
|
|
|
it('undef', function () { |
|
assert(!url(undefined)); |
|
}); |
|
|
|
it('object', function () { |
|
assert(!url({})); |
|
}); |
|
|
|
it('re', function () { |
|
assert(!url(/abc/)); |
|
}); |
|
}); |
|
|
|
describe('redos', function () { |
|
it('redos exploit', function () { |
|
// Invalid. This should be discovered in under 1 second. |
|
var attackString = 'a://localhost' + '9'.repeat(100000) + '\t'; |
|
var before = process.hrtime(); |
|
assert(!url(attackString), 'attackString was valid'); |
|
var elapsed = process.hrtime(before); |
|
assert(elapsed[0] < 1, 'attackString took ' + elapsed[0] + ' > 1 seconds'); |
|
}); |
|
}); |
|
});
|
|
|