123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- 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');
- });
- });
- });
|