verdaccio/test/functional/lib/server.js

110 lines
2.8 KiB
JavaScript
Raw Normal View History

2013-12-19 16:11:54 +01:00
var request = require('request')
, assert = require('assert')
2013-09-25 12:01:55 +02:00
function Server(url) {
2013-12-19 16:11:54 +01:00
if (!(this instanceof Server)) return new Server(url)
this.url = url.replace(/\/$/, '')
this.userAgent = 'node/v0.10.8 linux x64'
this.authstr = 'Basic '+(new Buffer('test:test')).toString('base64')
2013-09-25 12:01:55 +02:00
}
2013-09-27 04:27:11 +02:00
function prep(cb) {
return function(err, res, body) {
2013-12-19 16:11:54 +01:00
if (err) throw err
cb(res, body)
}
2013-09-27 04:27:11 +02:00
}
2013-09-25 12:01:55 +02:00
Server.prototype.request = function(options, cb) {
assert(options.uri)
2013-12-19 16:11:54 +01:00
var headers = options.headers || {}
headers.accept = headers.accept || 'application/json'
headers['user-agent'] = headers['user-agent'] || this.userAgent
headers.authorization = headers.authorization || this.authstr
2013-09-25 12:01:55 +02:00
return request({
url: this.url + options.uri,
method: options.method || 'GET',
2013-09-27 13:31:28 +02:00
headers: headers,
2013-09-27 04:27:11 +02:00
json: options.json || true,
2013-12-19 16:11:54 +01:00
}, cb)
2013-09-25 12:01:55 +02:00
}
Server.prototype.auth = function(user, pass, cb) {
2013-12-19 16:11:54 +01:00
this.authstr = 'Basic '+(new Buffer(user+':'+pass)).toString('base64')
2013-09-25 12:01:55 +02:00
this.request({
2013-12-19 16:11:54 +01:00
uri: '/-/user/org.couchdb.user:'+encodeURIComponent(user)+'/-rev/undefined',
2013-09-25 12:01:55 +02:00
method: 'PUT',
json: {
content: "doesn't matter, 'cause sinopia uses info from Authorization header anywayz",
}
2013-12-19 16:11:54 +01:00
}, prep(cb))
2013-09-25 12:01:55 +02:00
}
Server.prototype.get_package = function(name, cb) {
2013-09-27 04:27:11 +02:00
this.request({
2013-09-25 12:01:55 +02:00
uri: '/'+name,
method: 'GET',
2013-12-19 16:11:54 +01:00
}, prep(cb))
2013-09-25 12:01:55 +02:00
}
Server.prototype.put_package = function(name, data, cb) {
2013-12-19 16:11:54 +01:00
if (typeof(data) === 'object' && !Buffer.isBuffer(data)) data = JSON.stringify(data)
2013-09-27 04:27:11 +02:00
this.request({
2013-12-19 16:11:54 +01:00
uri: '/'+encodeURIComponent(name),
2013-09-27 10:56:44 +02:00
method: 'PUT',
headers: {
'content-type': 'application/json'
},
2013-12-19 16:11:54 +01:00
}, prep(cb)).end(data)
2013-09-27 10:56:44 +02:00
}
Server.prototype.put_version = function(name, version, data, cb) {
2013-12-19 16:11:54 +01:00
if (typeof(data) === 'object' && !Buffer.isBuffer(data)) data = JSON.stringify(data)
2013-09-27 10:56:44 +02:00
this.request({
2013-12-19 16:11:54 +01:00
uri: '/'+encodeURIComponent(name)+'/'+encodeURIComponent(version)+'/-tag/latest',
2013-09-25 12:01:55 +02:00
method: 'PUT',
2013-09-27 04:27:11 +02:00
headers: {
'content-type': 'application/json'
},
2013-12-19 16:11:54 +01:00
}, prep(cb)).end(data)
2013-09-27 04:27:11 +02:00
}
Server.prototype.get_tarball = function(name, filename, cb) {
this.request({
2013-12-19 16:11:54 +01:00
uri: '/'+encodeURIComponent(name)+'/-/'+encodeURIComponent(filename),
2013-09-27 04:27:11 +02:00
method: 'GET',
2013-12-19 16:11:54 +01:00
}, prep(cb))
2013-09-27 04:27:11 +02:00
}
Server.prototype.put_tarball = function(name, filename, data, cb) {
this.request({
2013-12-19 16:11:54 +01:00
uri: '/'+encodeURIComponent(name)+'/-/'+encodeURIComponent(filename)+'/whatever',
2013-09-27 04:27:11 +02:00
method: 'PUT',
headers: {
'content-type': 'application/octet-stream'
},
2013-12-19 16:11:54 +01:00
}, prep(cb)).end(data)
2013-09-25 12:01:55 +02:00
}
2013-09-27 13:31:28 +02:00
Server.prototype.put_tarball_incomplete = function(name, filename, data, size, cb) {
var req = this.request({
2013-12-19 16:11:54 +01:00
uri: '/'+encodeURIComponent(name)+'/-/'+encodeURIComponent(filename)+'/whatever',
2013-09-27 13:31:28 +02:00
method: 'PUT',
headers: {
'content-type': 'application/octet-stream',
'content-length': size,
},
timeout: 1000,
}, function(err) {
2013-12-19 16:11:54 +01:00
assert(err)
cb()
})
req.write(data)
2013-09-27 13:31:28 +02:00
setTimeout(function() {
2013-12-19 16:11:54 +01:00
req.req.abort()
}, 20)
2013-09-27 13:31:28 +02:00
}
2013-12-19 16:11:54 +01:00
module.exports = Server
2013-09-25 12:01:55 +02:00