From 02f8143097f3dddad68e84157925fc400eef52a4 Mon Sep 17 00:00:00 2001 From: Alex Kocharin Date: Sun, 29 Dec 2013 10:40:47 +0400 Subject: [PATCH] tests for tags support --- test/functional/addtag.js | 50 ++++++++++++++++++++++++++ test/functional/basic.js | 15 +++----- test/functional/fixtures/publish.json5 | 29 +++++++++++++++ test/functional/gh29.js | 5 +-- test/functional/index.js | 7 ++-- test/functional/lib/package.js | 2 +- test/functional/lib/server.js | 18 ++++++++++ test/functional/mirror.js | 7 ++-- test/functional/race.js | 5 +-- test/functional/security.js | 23 ++++++------ test/functional/tags.js | 5 +-- 11 files changed, 133 insertions(+), 33 deletions(-) create mode 100644 test/functional/addtag.js create mode 100644 test/functional/fixtures/publish.json5 diff --git a/test/functional/addtag.js b/test/functional/addtag.js new file mode 100644 index 000000000..bf5522d22 --- /dev/null +++ b/test/functional/addtag.js @@ -0,0 +1,50 @@ +var assert = require('assert') + +function readfile(x) { + return require('fs').readFileSync(__dirname + '/' + x) +} + +module.exports = function() { + var server = process.server + + it('add tag - 404', function(cb) { + server.add_tag('testpkg-tag', 'tagtagtag', '0.0.1', function(res, body) { + assert.equal(res.statusCode, 404) + assert(~body.error.indexOf('no such package')) + cb() + }) + }) + + describe('addtag', function() { + before(function(cb) { + server.put_package('testpkg-tag', eval( + '(' + readfile('fixtures/publish.json5') + .toString('utf8') + .replace(/__NAME__/g, 'testpkg-tag') + .replace(/__VERSION__/g, '0.0.1') + + ')' + ), function(res, body) { + assert.equal(res.statusCode, 201) + cb() + }) + }) + + it('add testpkg-tag', function(){}) + + it('add tag - bad ver', function(cb) { + server.add_tag('testpkg-tag', 'tagtagtag', '0.0.1-x', function(res, body) { + assert.equal(res.statusCode, 404) + assert(~body.error.indexOf('version doesn\'t exist')) + cb() + }) + }) + + it('add tag - good', function(cb) { + server.add_tag('testpkg-tag', 'tagtagtag', '0.0.1', function(res, body) { + assert.equal(res.statusCode, 201) + assert(~body.ok.indexOf('tagged')) + cb() + }) + }) + }) +} diff --git a/test/functional/basic.js b/test/functional/basic.js index 540ce948a..d285770d3 100644 --- a/test/functional/basic.js +++ b/test/functional/basic.js @@ -3,14 +3,15 @@ require('./lib/startup') var assert = require('assert') , async = require('async') , crypto = require('crypto') - , server = process.server - , server2 = process.server2 function readfile(x) { return require('fs').readFileSync(__dirname + '/' + x) } module.exports = function() { + var server = process.server + var server2 = process.server2 + it('trying to fetch non-existent package', function(cb) { server.get_package('testpkg', function(res, body) { assert.equal(res.statusCode, 404) @@ -20,13 +21,7 @@ module.exports = function() { }) describe('testpkg', function() { - before(function(cb) { - server.put_package('testpkg', require('./lib/package')('testpkg'), function(res, body) { - assert.equal(res.statusCode, 201) - assert(~body.ok.indexOf('created new package')) - cb() - }) - }) + before(server.add_package.bind(server, 'testpkg')) it('creating new package', function(){/* test for before() */}) @@ -109,8 +104,6 @@ module.exports = function() { }) }) }) - - require('./security')() }) it('uploading new package version for bad pkg', function(cb) { diff --git a/test/functional/fixtures/publish.json5 b/test/functional/fixtures/publish.json5 new file mode 100644 index 000000000..929b24de1 --- /dev/null +++ b/test/functional/fixtures/publish.json5 @@ -0,0 +1,29 @@ +{ _id: '__NAME__', + name: '__NAME__', + description: '', + 'dist-tags': { latest: '__VERSION__' }, + versions: + { '__VERSION__': + { name: '__NAME__', + version: '__VERSION__', + description: '', + main: 'index.js', + scripts: { test: 'echo "Error: no test specified" && exit 1' }, + author: '', + license: 'ISC', + readme: 'ERROR: No README data found!', + _id: '__NAME__@__VERSION__', + dist: + { shasum: '071c8dd9fd775bf3ebc0d5108431110f5f857ce3', + tarball: 'http://localhost:4873/__NAME__/-/__NAME__-__VERSION__.tgz' }, + _from: '.', + _npmVersion: '1.3.21', + _npmUser: { name: 'rlidwka', email: 'alex@kocharin.ru' }, + maintainers: [ { name: 'rlidwka', email: 'alex@kocharin.ru' } ] } }, + readme: 'ERROR: No README data found!', + maintainers: [ { name: 'rlidwka', email: 'alex@kocharin.ru' } ], + _attachments: + { '__NAME__-__VERSION__.tgz': + { content_type: 'application/octet-stream', + data: 'H4sIAAAAAAAAA+2SP2vDMBDFPftTHDdkah3Zim3IGjJ0zppFyNdE+SMJSSmBkO8eWS6mQ7cGSsC/5cG9p7uTkBXyKHY0t4MWB2909mQYY81iAVHLtmY/NcGrCrKyquq25Q1vm4yVnPEm+s9e5DcuPggXV/lrn+EuMOqLcMsBUIsz4RIwkA/v9rjDt1iN4Bc5r4zuPVawok4GduSlUzZ8O2P6LFQqKN3RNf6kIT1kfTRuKZem9DGSewNbXDtn3BK0gd4Ab0mqT0XdFmE2A7qqACXGk/fUTVzC3rhxLJ6UJO3T9h+bFeb3/L9fdGJiYuI1eACk8AYWAAgAAA==', + length: 250 } } } diff --git a/test/functional/gh29.js b/test/functional/gh29.js index 11d509f22..3847db5d8 100644 --- a/test/functional/gh29.js +++ b/test/functional/gh29.js @@ -1,14 +1,15 @@ var assert = require('assert') , crypto = require('crypto') , ex = module.exports - , server = process.server - , server2 = process.server2 function readfile(x) { return require('fs').readFileSync(__dirname + '/' + x) } module.exports = function() { + var server = process.server + var server2 = process.server2 + it('downloading non-existent tarball #1 / srv2', function(cb) { server2.get_tarball('testpkg-gh29', 'blahblah', function(res, body) { assert.equal(res.statusCode, 404) diff --git a/test/functional/index.js b/test/functional/index.js index 6b9b0171b..f22ecff60 100644 --- a/test/functional/index.js +++ b/test/functional/index.js @@ -4,14 +4,15 @@ var assert = require('assert') , async = require('async') , crypto = require('crypto') , ex = module.exports - , server = process.server - , server2 = process.server2 function readfile(x) { return require('fs').readFileSync(__dirname + '/' + x) } describe('Func', function() { + var server = process.server + var server2 = process.server2 + before(function(cb) { async.parallel([ function(cb) { @@ -40,5 +41,7 @@ describe('Func', function() { require('./tags')() require('./mirror')() require('./race')() + require('./security')() + require('./addtag')() }) diff --git a/test/functional/lib/package.js b/test/functional/lib/package.js index e380872c8..9048de9e4 100644 --- a/test/functional/lib/package.js +++ b/test/functional/lib/package.js @@ -7,6 +7,6 @@ module.exports = function(name, version) { "shasum": "fake", "tarball": "http://localhost:55551/"+escape(name)+"/-/blahblah" } - }; + } } diff --git a/test/functional/lib/server.js b/test/functional/lib/server.js index 8ca2c9de3..2e62e8694 100644 --- a/test/functional/lib/server.js +++ b/test/functional/lib/server.js @@ -86,6 +86,16 @@ Server.prototype.put_tarball = function(name, filename, data, cb) { }, prep(cb)).end(data) } +Server.prototype.add_tag = function(name, tag, version, cb) { + this.request({ + uri: '/'+encodeURIComponent(name)+'/'+encodeURIComponent(tag), + method: 'PUT', + headers: { + 'content-type': 'application/json' + }, + }, prep(cb)).end(JSON.stringify(version)) +} + Server.prototype.put_tarball_incomplete = function(name, filename, data, size, cb) { var req = this.request({ uri: '/'+encodeURIComponent(name)+'/-/'+encodeURIComponent(filename)+'/whatever', @@ -105,5 +115,13 @@ Server.prototype.put_tarball_incomplete = function(name, filename, data, size, c }, 20) } +Server.prototype.add_package = function(name, cb) { + this.put_package(name, require('./package')(name), function(res, body) { + assert.equal(res.statusCode, 201) + assert(~body.ok.indexOf('created new package')) + cb() + }) +} + module.exports = Server diff --git a/test/functional/mirror.js b/test/functional/mirror.js index aca40217e..76206e9d8 100644 --- a/test/functional/mirror.js +++ b/test/functional/mirror.js @@ -1,13 +1,14 @@ var assert = require('assert') , ex = module.exports - , server = process.server - , server2 = process.server2 function readfile(x) { return require('fs').readFileSync(__dirname + '/' + x) } module.exports = function() { + var server = process.server + var server2 = process.server2 + it('testing anti-loop', function(cb) { server2.get_package('testloop', function(res, body) { assert.equal(res.statusCode, 404) @@ -58,7 +59,7 @@ module.exports = function() { }) it(prefix+'uploading new tarball', function(){}) - + it(prefix+'downloading tarball from server1', function(cb) { server.get_tarball(pkg, pkg+'.file', function(res, body) { assert.equal(res.statusCode, 200) diff --git a/test/functional/race.js b/test/functional/race.js index 8946c8280..8e444104c 100644 --- a/test/functional/race.js +++ b/test/functional/race.js @@ -1,12 +1,13 @@ var assert = require('assert') , readfile = require('fs').readFileSync , ex = module.exports - , server = process.server - , server2 = process.server2 , async = require('async') , _oksum = 0 module.exports = function() { + var server = process.server + var server2 = process.server2 + describe('race', function() { before(function(cb) { server.put_package('race', require('./lib/package')('race'), function(res, body) { diff --git a/test/functional/security.js b/test/functional/security.js index edc1597cd..1f318cc5a 100644 --- a/test/functional/security.js +++ b/test/functional/security.js @@ -1,10 +1,13 @@ var assert = require('assert') , ex = module.exports - , server = process.server - , server2 = process.server2 module.exports = function() { + var server = process.server + var server2 = process.server2 + describe('Security', function() { + before(server.add_package.bind(server, 'testpkg-sec')) + it('bad pkg #1', function(cb) { server.get_package('package.json', function(res, body) { assert.equal(res.statusCode, 403) @@ -22,12 +25,12 @@ module.exports = function() { }) it('__proto__, connect stuff', function(cb) { - server.request({uri:'/testpkg?__proto__=1'}, function(err, res, body) { + server.request({uri:'/testpkg-sec?__proto__=1'}, function(err, res, body) { // test for NOT outputting stack trace assert(!body || typeof(body) === 'object' || body.indexOf('node_modules') === -1) // test for NOT crashing - server.request({uri:'/testpkg'}, function(err, res, body) { + server.request({uri:'/testpkg-sec'}, function(err, res, body) { assert.equal(res.statusCode, 200) cb() }) @@ -35,7 +38,7 @@ module.exports = function() { }) it('do not return package.json as an attachment', function(cb) { - server.request({uri:'/testpkg/-/package.json'}, function(err, res, body) { + server.request({uri:'/testpkg-sec/-/package.json'}, function(err, res, body) { assert.equal(res.statusCode, 403) assert(body.error.match(/invalid filename/)) cb() @@ -43,14 +46,14 @@ module.exports = function() { }) it('silly things - reading #1', function(cb) { - server.request({uri:'/testpkg/-/../../../../../../../../etc/passwd'}, function(err, res, body) { + server.request({uri:'/testpkg-sec/-/../../../../../../../../etc/passwd'}, function(err, res, body) { assert.equal(res.statusCode, 404) cb() }) }) it('silly things - reading #2', function(cb) { - server.request({uri:'/testpkg/-/%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd'}, function(err, res, body) { + server.request({uri:'/testpkg-sec/-/%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd'}, function(err, res, body) { assert.equal(res.statusCode, 403) assert(body.error.match(/invalid filename/)) cb() @@ -58,7 +61,7 @@ module.exports = function() { }) it('silly things - writing #1', function(cb) { - server.put_tarball('testpkg', 'package.json', '{}', function(res, body) { + server.put_tarball('testpkg-sec', 'package.json', '{}', function(res, body) { assert.equal(res.statusCode, 403) assert(body.error.match(/invalid filename/)) cb() @@ -66,7 +69,7 @@ module.exports = function() { }) it('silly things - writing #3', function(cb) { - server.put_tarball('testpkg', 'node_modules', '{}', function(res, body) { + server.put_tarball('testpkg-sec', 'node_modules', '{}', function(res, body) { assert.equal(res.statusCode, 403) assert(body.error.match(/invalid filename/)) cb() @@ -74,7 +77,7 @@ module.exports = function() { }) it('silly things - writing #4', function(cb) { - server.put_tarball('testpkg', '../testpkg.tgz', '{}', function(res, body) { + server.put_tarball('testpkg-sec', '../testpkg.tgz', '{}', function(res, body) { assert.equal(res.statusCode, 403) assert(body.error.match(/invalid filename/)) cb() diff --git a/test/functional/tags.js b/test/functional/tags.js index e46360791..7c0ebe8f2 100644 --- a/test/functional/tags.js +++ b/test/functional/tags.js @@ -1,13 +1,14 @@ var assert = require('assert') , ex = module.exports - , server = process.server - , express = process.express function readfile(x) { return require('fs').readFileSync(__dirname + '/' + x) } module.exports = function() { + var server = process.server + var express = process.express + it('tags - testing for 404', function(cb) { server.get_package('testexp_tags', function(res, body) { // shouldn't exist yet