tests for tags support

This commit is contained in:
Alex Kocharin 2013-12-29 10:40:47 +04:00
parent 3c7ae2f37d
commit 02f8143097
11 changed files with 133 additions and 33 deletions

50
test/functional/addtag.js Normal file
View File

@ -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()
})
})
})
}

View File

@ -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) {

View File

@ -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 } } }

View File

@ -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)

View File

@ -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')()
})

View File

@ -7,6 +7,6 @@ module.exports = function(name, version) {
"shasum": "fake",
"tarball": "http://localhost:55551/"+escape(name)+"/-/blahblah"
}
};
}
}

View File

@ -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

View File

@ -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)

View File

@ -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) {

View File

@ -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()

View File

@ -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