mirror of
https://github.com/verdaccio/verdaccio.git
synced 2025-02-21 07:29:37 +01:00
tests for tags support
This commit is contained in:
parent
3c7ae2f37d
commit
02f8143097
50
test/functional/addtag.js
Normal file
50
test/functional/addtag.js
Normal 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()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
@ -3,14 +3,15 @@ require('./lib/startup')
|
|||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
, async = require('async')
|
, async = require('async')
|
||||||
, crypto = require('crypto')
|
, crypto = require('crypto')
|
||||||
, server = process.server
|
|
||||||
, server2 = process.server2
|
|
||||||
|
|
||||||
function readfile(x) {
|
function readfile(x) {
|
||||||
return require('fs').readFileSync(__dirname + '/' + x)
|
return require('fs').readFileSync(__dirname + '/' + x)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
|
var server = process.server
|
||||||
|
var server2 = process.server2
|
||||||
|
|
||||||
it('trying to fetch non-existent package', function(cb) {
|
it('trying to fetch non-existent package', function(cb) {
|
||||||
server.get_package('testpkg', function(res, body) {
|
server.get_package('testpkg', function(res, body) {
|
||||||
assert.equal(res.statusCode, 404)
|
assert.equal(res.statusCode, 404)
|
||||||
@ -20,13 +21,7 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
describe('testpkg', function() {
|
describe('testpkg', function() {
|
||||||
before(function(cb) {
|
before(server.add_package.bind(server, 'testpkg'))
|
||||||
server.put_package('testpkg', require('./lib/package')('testpkg'), function(res, body) {
|
|
||||||
assert.equal(res.statusCode, 201)
|
|
||||||
assert(~body.ok.indexOf('created new package'))
|
|
||||||
cb()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('creating new package', function(){/* test for before() */})
|
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) {
|
it('uploading new package version for bad pkg', function(cb) {
|
||||||
|
29
test/functional/fixtures/publish.json5
Normal file
29
test/functional/fixtures/publish.json5
Normal 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 } } }
|
@ -1,14 +1,15 @@
|
|||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
, crypto = require('crypto')
|
, crypto = require('crypto')
|
||||||
, ex = module.exports
|
, ex = module.exports
|
||||||
, server = process.server
|
|
||||||
, server2 = process.server2
|
|
||||||
|
|
||||||
function readfile(x) {
|
function readfile(x) {
|
||||||
return require('fs').readFileSync(__dirname + '/' + x)
|
return require('fs').readFileSync(__dirname + '/' + x)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
|
var server = process.server
|
||||||
|
var server2 = process.server2
|
||||||
|
|
||||||
it('downloading non-existent tarball #1 / srv2', function(cb) {
|
it('downloading non-existent tarball #1 / srv2', function(cb) {
|
||||||
server2.get_tarball('testpkg-gh29', 'blahblah', function(res, body) {
|
server2.get_tarball('testpkg-gh29', 'blahblah', function(res, body) {
|
||||||
assert.equal(res.statusCode, 404)
|
assert.equal(res.statusCode, 404)
|
||||||
|
@ -4,14 +4,15 @@ var assert = require('assert')
|
|||||||
, async = require('async')
|
, async = require('async')
|
||||||
, crypto = require('crypto')
|
, crypto = require('crypto')
|
||||||
, ex = module.exports
|
, ex = module.exports
|
||||||
, server = process.server
|
|
||||||
, server2 = process.server2
|
|
||||||
|
|
||||||
function readfile(x) {
|
function readfile(x) {
|
||||||
return require('fs').readFileSync(__dirname + '/' + x)
|
return require('fs').readFileSync(__dirname + '/' + x)
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Func', function() {
|
describe('Func', function() {
|
||||||
|
var server = process.server
|
||||||
|
var server2 = process.server2
|
||||||
|
|
||||||
before(function(cb) {
|
before(function(cb) {
|
||||||
async.parallel([
|
async.parallel([
|
||||||
function(cb) {
|
function(cb) {
|
||||||
@ -40,5 +41,7 @@ describe('Func', function() {
|
|||||||
require('./tags')()
|
require('./tags')()
|
||||||
require('./mirror')()
|
require('./mirror')()
|
||||||
require('./race')()
|
require('./race')()
|
||||||
|
require('./security')()
|
||||||
|
require('./addtag')()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -7,6 +7,6 @@ module.exports = function(name, version) {
|
|||||||
"shasum": "fake",
|
"shasum": "fake",
|
||||||
"tarball": "http://localhost:55551/"+escape(name)+"/-/blahblah"
|
"tarball": "http://localhost:55551/"+escape(name)+"/-/blahblah"
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,6 +86,16 @@ Server.prototype.put_tarball = function(name, filename, data, cb) {
|
|||||||
}, prep(cb)).end(data)
|
}, 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) {
|
Server.prototype.put_tarball_incomplete = function(name, filename, data, size, cb) {
|
||||||
var req = this.request({
|
var req = this.request({
|
||||||
uri: '/'+encodeURIComponent(name)+'/-/'+encodeURIComponent(filename)+'/whatever',
|
uri: '/'+encodeURIComponent(name)+'/-/'+encodeURIComponent(filename)+'/whatever',
|
||||||
@ -105,5 +115,13 @@ Server.prototype.put_tarball_incomplete = function(name, filename, data, size, c
|
|||||||
}, 20)
|
}, 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
|
module.exports = Server
|
||||||
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
, ex = module.exports
|
, ex = module.exports
|
||||||
, server = process.server
|
|
||||||
, server2 = process.server2
|
|
||||||
|
|
||||||
function readfile(x) {
|
function readfile(x) {
|
||||||
return require('fs').readFileSync(__dirname + '/' + x)
|
return require('fs').readFileSync(__dirname + '/' + x)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
|
var server = process.server
|
||||||
|
var server2 = process.server2
|
||||||
|
|
||||||
it('testing anti-loop', function(cb) {
|
it('testing anti-loop', function(cb) {
|
||||||
server2.get_package('testloop', function(res, body) {
|
server2.get_package('testloop', function(res, body) {
|
||||||
assert.equal(res.statusCode, 404)
|
assert.equal(res.statusCode, 404)
|
||||||
@ -58,7 +59,7 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it(prefix+'uploading new tarball', function(){})
|
it(prefix+'uploading new tarball', function(){})
|
||||||
|
|
||||||
it(prefix+'downloading tarball from server1', function(cb) {
|
it(prefix+'downloading tarball from server1', function(cb) {
|
||||||
server.get_tarball(pkg, pkg+'.file', function(res, body) {
|
server.get_tarball(pkg, pkg+'.file', function(res, body) {
|
||||||
assert.equal(res.statusCode, 200)
|
assert.equal(res.statusCode, 200)
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
, readfile = require('fs').readFileSync
|
, readfile = require('fs').readFileSync
|
||||||
, ex = module.exports
|
, ex = module.exports
|
||||||
, server = process.server
|
|
||||||
, server2 = process.server2
|
|
||||||
, async = require('async')
|
, async = require('async')
|
||||||
, _oksum = 0
|
, _oksum = 0
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
|
var server = process.server
|
||||||
|
var server2 = process.server2
|
||||||
|
|
||||||
describe('race', function() {
|
describe('race', function() {
|
||||||
before(function(cb) {
|
before(function(cb) {
|
||||||
server.put_package('race', require('./lib/package')('race'), function(res, body) {
|
server.put_package('race', require('./lib/package')('race'), function(res, body) {
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
, ex = module.exports
|
, ex = module.exports
|
||||||
, server = process.server
|
|
||||||
, server2 = process.server2
|
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
|
var server = process.server
|
||||||
|
var server2 = process.server2
|
||||||
|
|
||||||
describe('Security', function() {
|
describe('Security', function() {
|
||||||
|
before(server.add_package.bind(server, 'testpkg-sec'))
|
||||||
|
|
||||||
it('bad pkg #1', function(cb) {
|
it('bad pkg #1', function(cb) {
|
||||||
server.get_package('package.json', function(res, body) {
|
server.get_package('package.json', function(res, body) {
|
||||||
assert.equal(res.statusCode, 403)
|
assert.equal(res.statusCode, 403)
|
||||||
@ -22,12 +25,12 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('__proto__, connect stuff', function(cb) {
|
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
|
// test for NOT outputting stack trace
|
||||||
assert(!body || typeof(body) === 'object' || body.indexOf('node_modules') === -1)
|
assert(!body || typeof(body) === 'object' || body.indexOf('node_modules') === -1)
|
||||||
|
|
||||||
// test for NOT crashing
|
// 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)
|
assert.equal(res.statusCode, 200)
|
||||||
cb()
|
cb()
|
||||||
})
|
})
|
||||||
@ -35,7 +38,7 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('do not return package.json as an attachment', function(cb) {
|
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.equal(res.statusCode, 403)
|
||||||
assert(body.error.match(/invalid filename/))
|
assert(body.error.match(/invalid filename/))
|
||||||
cb()
|
cb()
|
||||||
@ -43,14 +46,14 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('silly things - reading #1', function(cb) {
|
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)
|
assert.equal(res.statusCode, 404)
|
||||||
cb()
|
cb()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('silly things - reading #2', function(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.equal(res.statusCode, 403)
|
||||||
assert(body.error.match(/invalid filename/))
|
assert(body.error.match(/invalid filename/))
|
||||||
cb()
|
cb()
|
||||||
@ -58,7 +61,7 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('silly things - writing #1', function(cb) {
|
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.equal(res.statusCode, 403)
|
||||||
assert(body.error.match(/invalid filename/))
|
assert(body.error.match(/invalid filename/))
|
||||||
cb()
|
cb()
|
||||||
@ -66,7 +69,7 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('silly things - writing #3', function(cb) {
|
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.equal(res.statusCode, 403)
|
||||||
assert(body.error.match(/invalid filename/))
|
assert(body.error.match(/invalid filename/))
|
||||||
cb()
|
cb()
|
||||||
@ -74,7 +77,7 @@ module.exports = function() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
it('silly things - writing #4', function(cb) {
|
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.equal(res.statusCode, 403)
|
||||||
assert(body.error.match(/invalid filename/))
|
assert(body.error.match(/invalid filename/))
|
||||||
cb()
|
cb()
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
var assert = require('assert')
|
var assert = require('assert')
|
||||||
, ex = module.exports
|
, ex = module.exports
|
||||||
, server = process.server
|
|
||||||
, express = process.express
|
|
||||||
|
|
||||||
function readfile(x) {
|
function readfile(x) {
|
||||||
return require('fs').readFileSync(__dirname + '/' + x)
|
return require('fs').readFileSync(__dirname + '/' + x)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
|
var server = process.server
|
||||||
|
var express = process.express
|
||||||
|
|
||||||
it('tags - testing for 404', function(cb) {
|
it('tags - testing for 404', function(cb) {
|
||||||
server.get_package('testexp_tags', function(res, body) {
|
server.get_package('testexp_tags', function(res, body) {
|
||||||
// shouldn't exist yet
|
// shouldn't exist yet
|
||||||
|
Loading…
Reference in New Issue
Block a user