ispapi-apiconnector
Advanced tools
Comparing version 4.0.0 to 4.0.1
@@ -6,6 +6,2 @@ /* | ||
*/ | ||
/* jslint node:true */ | ||
/* jshint node:true */ | ||
'use strict'; | ||
@@ -17,3 +13,2 @@ | ||
var Response = require("./response.js"); | ||
var responses = require("./defaultresponses.js"); | ||
@@ -54,3 +49,3 @@ /** | ||
if (!p_cfg) { | ||
var r = new Response(responses.expired, p_cmd); | ||
var r = new Response(Response.responses.expired, p_cmd); | ||
p_cb(r["as_" + p_type]()); | ||
@@ -99,5 +94,5 @@ return; | ||
else { | ||
c.on("error", function(r) { | ||
console.error('ispapi-apiconnector: error event thrown in request method but no error callback method provided.'); | ||
console.error(JSON.stringify(r["as_" + p_type]())); | ||
c.on("error", function(/*r*/) { | ||
//console.error('ispapi-apiconnector: error event thrown in request method but no error callback method provided.'); | ||
//console.error(JSON.stringify(r["as_" + p_type]())); | ||
}); | ||
@@ -134,3 +129,3 @@ } | ||
p_uri = "https://coreapi.1api.net/api/call.cgi"; | ||
else if (!p_uri.match(/^(http|https):\/\//)) | ||
if (!p_uri.match(/^(http|https):\/\//)) | ||
throw new Error("Unsupported protocol within api connection uri."); | ||
@@ -137,0 +132,0 @@ |
@@ -0,1 +1,11 @@ | ||
4.0.1 / 2017-02-09 | ||
=================== | ||
* Separated reusable test methods into test/check-helper.js | ||
* Deactivated console outputs | ||
* defaultresponses.js is now directly available via response.js e.g. `var responses = require('./response.js').responses;`. | ||
* moved more commands and responses into test-commands.js | ||
* reviewed automated tests with usage of nock to simulate network traffic instead of making always real API connections. Just one scenario with login / request / logout left out to deal with an API connection to make sure everything works also well when doing a real API communication. | ||
* some minor code reviews of the mocca tests | ||
4.0.0 / 2017-02-03 | ||
@@ -2,0 +12,0 @@ =================== |
{ | ||
"name": "ispapi-apiconnector", | ||
"description": "1API API Connector for node.js", | ||
"version": "4.0.0", | ||
"version": "4.0.1", | ||
"author": { | ||
@@ -39,3 +39,3 @@ "name": "Kai Schwarz", | ||
"test": "npm run test-unit --silent", | ||
"test-unit": "NODE_ENV=development ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- --use_strict --inline-diffs --require co-mocha $(find ./test -name '*.spec.js' -not -path './node_modules/*')" | ||
"test-unit": "NODE_ENV=development ./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- --bail --use_strict --inline-diffs --require co-mocha $(find ./test -name '*.spec.js' -not -path './node_modules/*')" | ||
}, | ||
@@ -46,7 +46,6 @@ "devDependencies": { | ||
"mocha": "3.2.0", | ||
"sinon": "1.17.7", | ||
"sinon-chai": "2.8.0", | ||
"istanbul": "0.4.5" | ||
"istanbul": "0.4.5", | ||
"nock": "9.0.4" | ||
}, | ||
"dependencies": {} | ||
} |
@@ -38,3 +38,3 @@ /* | ||
events.EventEmitter.call(this); | ||
this.socketcfg = p_cfg; | ||
this.socketcfg = Object.assign({}, p_cfg); | ||
this.data = p_data; | ||
@@ -46,24 +46,29 @@ this.cmd = Object.assign({}, p_command); | ||
/** | ||
* http request callback method | ||
* @param {Object} res http client response object | ||
*/ | ||
Request.prototype.requestCallback = function(res) { | ||
var oself = this; | ||
var response = ""; | ||
res.setEncoding('utf8'); | ||
res.on('data', function(chunk) { | ||
response += chunk; | ||
}); | ||
res.on('end', function() { | ||
oself.emit("response", new Response(response, oself.cmd)); | ||
response = ""; | ||
}); | ||
}; | ||
/** | ||
* perform a command request to the 1API backend API | ||
*/ | ||
Request.prototype.request = function() { | ||
var req, oself = this; | ||
req = require(oself.socketcfg.protocol.replace(/\:$/, '')).request(oself.socketcfg, function(res) { | ||
var response = ""; | ||
res.setEncoding('utf8'); | ||
res.on('data', function(chunk) { | ||
response += chunk; | ||
}); | ||
res.on('end', function() { | ||
oself.emit("response", new Response(response, oself.cmd)); | ||
response = ""; | ||
}); | ||
res.on('error', function() { | ||
//e.message = 'problem with response: ' + e.message; | ||
oself.emit('error', new Response(Response.responses.error, oself.cmd)); | ||
}); | ||
}); | ||
req.setTimeout(250000); //250s (to be sure to get an API response) | ||
var req; | ||
req = require(this.socketcfg.protocol.replace(/\:$/, '')).request( | ||
this.socketcfg, | ||
this.requestCallback.bind(this) | ||
); | ||
req.on('socket', function(socket) { | ||
socket.on('timeout', function() { | ||
socket.setTimeout(250000, function() { //250s (to be sure to get an API response) | ||
req.abort(); | ||
@@ -74,5 +79,5 @@ }); | ||
//e.message = 'problem with request: ' + e.message; | ||
oself.emit('error', new Response(Response.responses.error, oself.cmd)); | ||
}); | ||
req.write(oself.data); | ||
this.emit('error', new Response(Response.responses.error, this.cmd)); | ||
}.bind(this)); | ||
req.write(this.data); | ||
req.end(); | ||
@@ -79,0 +84,0 @@ }; |
@@ -8,4 +8,2 @@ /* | ||
var responses = require("./defaultresponses.js"); | ||
/** | ||
@@ -19,3 +17,3 @@ * @alias node.ispapi-apiconnector.Response | ||
var Response = function(p_r, p_command) { | ||
p_r = ((!p_r || p_r === "") ? responses.empty : p_r); | ||
p_r = ((!p_r || p_r === "") ? Response.responses.empty : p_r); | ||
this.colregexp = false; | ||
@@ -90,4 +88,4 @@ this.data = { | ||
if (r.hasOwnProperty("PROPERTY")) { | ||
Object.keys(r.PROPERTY).forEach(function(key){ | ||
r.PROPERTY[key].forEach(function(val, index){ | ||
Object.keys(r.PROPERTY).forEach(function(key) { | ||
r.PROPERTY[key].forEach(function(val, index) { | ||
plain += "\r\nPROPERTY[" + key + "][" + index + "]=" + val; | ||
@@ -109,3 +107,3 @@ }); | ||
Response.getTemplates = function() { | ||
return responses; | ||
return Response.responses; | ||
}; | ||
@@ -119,7 +117,7 @@ /** | ||
Response.getTemplate = function(p_tplid, p_parse) { | ||
if (responses[p_tplid]) | ||
if (Response.responses[p_tplid]) | ||
if (p_parse) | ||
return Response.parse(responses[p_tplid]); | ||
return Response.parse(Response.responses[p_tplid]); | ||
else | ||
return responses[p_tplid]; | ||
return Response.responses[p_tplid]; | ||
return false; | ||
@@ -255,7 +253,5 @@ }; | ||
d = Object.assign({}, this.data.parsed); | ||
if (d.hasOwnProperty("PROPERTY")) { | ||
Object.keys(d.PROPERTY).forEach(function(key){ | ||
if (!key.match(this.colregexp)) delete d.PROPERTY[key]; | ||
}.bind(this)); | ||
} | ||
Object.keys(d.PROPERTY).forEach(function(key) { | ||
if (!key.match(this.colregexp)) delete d.PROPERTY[key]; | ||
}.bind(this)); | ||
} | ||
@@ -270,3 +266,3 @@ else d = this.data.parsed; | ||
as_list: function() { | ||
var r, tmp, key, row, row2, i, count; | ||
var r, tmp, key, row2, i, count, keys; | ||
r = this.as_hash(); | ||
@@ -281,22 +277,21 @@ tmp = {}; | ||
tmp.LIST = []; | ||
row = {}; | ||
for (key in r.PROPERTY) { | ||
if (r.PROPERTY.hasOwnProperty(key)) { | ||
if (!key.match(Response.pagerRegexp)) { // paging info | ||
row[key] = ""; | ||
if (r.PROPERTY[key].length > count) count = r.PROPERTY[key].length; | ||
} | ||
} | ||
} | ||
if (count) { | ||
if (r.PROPERTY) { | ||
keys = Object.keys(r.PROPERTY).filter(function(key) { | ||
return !key.match(Response.pagerRegexp); // paging info | ||
}); | ||
keys.forEach(function(key) { | ||
if (r.PROPERTY[key].length > count) | ||
count = r.PROPERTY[key].length; | ||
}); | ||
for (i = 0; i < count; i++) { // run up to max index found | ||
row2 = {}; | ||
for (key in row) { // run over all columns (properties) found | ||
// NOTE: do not add column indexes that are not available | ||
// -- avoids blowing up response size | ||
// -- requires implementation of mechanisms to avoid access on | ||
// these not existing indexes later (not part of this lib!) | ||
if (row.hasOwnProperty(key) && r.PROPERTY[key][i] !== undefined) | ||
// run over all columns (properties) found | ||
// NOTE: do not add column indexes that are not available | ||
// -- avoids blowing up response size | ||
// -- requires implementation of mechanisms to avoid access on | ||
// these not existing indexes later (not part of this lib!) | ||
keys.forEach(function(key) { | ||
if (r.PROPERTY[key][i] !== undefined) | ||
row2[key] = r.PROPERTY[key][i]; | ||
} | ||
}); | ||
tmp.LIST.push(Object.assign({}, row2)); | ||
@@ -437,3 +432,3 @@ } | ||
limit: function() { | ||
return (this.getColumnIndex("LIMIT", 0, true) || this.count() || 100); | ||
return (this.getColumnIndex("LIMIT", 0, true) || this.count()); | ||
}, | ||
@@ -453,3 +448,3 @@ /** | ||
var t = this.total(); | ||
if (t) return (Math.ceil(t / this.limit()) || 1); | ||
if (t) return Math.ceil(t / this.limit()); //will never be 0 | ||
return 1; | ||
@@ -463,4 +458,4 @@ }, | ||
if (this.count()) { | ||
var limit = this.limit(); | ||
if (limit) return Math.floor(this.first() / limit) + 1; | ||
//limit cannot be 0 as this.count() will cover this, no worries | ||
return Math.floor(this.first() / this.limit()) + 1; | ||
} | ||
@@ -487,2 +482,4 @@ return 1; | ||
Response.responses = require('./defaultresponses'); | ||
module.exports = Response; |
@@ -5,18 +5,27 @@ /* jshint -W024 */ | ||
var testcmds = require('./test-commands.js'); | ||
var expect = require('chai').expect; | ||
var events = require('events'); | ||
var apiconnector = require('../index.js'); | ||
var events = require('events'); | ||
var nock = require('nock'); | ||
var Request = apiconnector.Request; | ||
var Response = apiconnector.Response; | ||
var Client = apiconnector.Client; | ||
var chkHlp = require('./check-helper.js'); | ||
var expectPropertyFn = chkHlp.expectPropertyFn; | ||
var expectResponseHash = chkHlp.expectResponseHash; | ||
var expectValidSocketConfig = chkHlp.expectValidSocketConfig; | ||
after(function() { | ||
nock.cleanAll(); | ||
}); | ||
describe("client.js", function() { | ||
this.timeout(250000); | ||
this.slow(1000); | ||
var client; | ||
describe("check general class structure", function() { | ||
it("check constructor", function() { | ||
expect(apiconnector).to.have.property('Client'); | ||
expect(apiconnector.Request).to.be.an('function'); | ||
client = apiconnector.Client; | ||
var req = new client(); | ||
expect(req).to.be.instanceof(client); | ||
var req = new Client(); | ||
expect(req).to.be.instanceof(Client); | ||
expect(req).to.be.instanceof(events.EventEmitter); //inheritance | ||
@@ -28,4 +37,3 @@ }); | ||
it("check existance of non-prototype method '" + m + "'", function() { | ||
expect(client).to.have.property(m); | ||
expect(client[m]).to.be.an('function'); | ||
expectPropertyFn(Client, m); | ||
}); | ||
@@ -37,4 +45,3 @@ }); | ||
it("check existance of prototype method '" + m + "'", function() { | ||
expect(client.prototype).to.have.property(m); | ||
expect(client.prototype[m]).to.be.an('function'); | ||
expectPropertyFn(Client.prototype, m); | ||
}); | ||
@@ -48,3 +55,3 @@ }); | ||
validate = "COMMAND=ModifyDomain\nAUTH=gwrgwqg%&\\44t3*\n"; | ||
enc = client.command_encode({ | ||
enc = Client.command_encode({ | ||
COMMAND: "ModifyDomain", | ||
@@ -54,5 +61,4 @@ AUTH: "gwrgwqg%&\\44t3*" | ||
expect(enc).to.equal(validate); | ||
enc = client.command_encode("gregergege"); | ||
expect(enc).to.be.a('string'); | ||
expect(enc).to.be.empty; | ||
enc = Client.command_encode("gregergege"); | ||
expect(enc).to.equal(''); | ||
}); | ||
@@ -62,8 +68,5 @@ }); | ||
describe("Client.getDefaultOptions", function() { | ||
it("test if generating configuration defaults works", function() { | ||
var cfg = client.getDefaultOptions(); | ||
it("test if generating socket configuration defaults works", function() { | ||
var cfg = Client.getDefaultOptions(); | ||
expect(cfg).to.be.an('object'); | ||
['host', 'port', 'protocol', 'method', 'path'].forEach(function(key) { | ||
expect(cfg).to.have.property(key); | ||
}); | ||
expect(cfg.protocol).to.equal('https:'); | ||
@@ -75,8 +78,6 @@ expect(cfg.host).to.equal('coreapi.1api.net'); | ||
}); | ||
it("test if generating configuration default works for given uri", function() { | ||
var cfg = client.getDefaultOptions('http://coreapi.1api.net/api/call.cgi'); | ||
var cfg = Client.getDefaultOptions('http://coreapi.1api.net/api/call.cgi'); | ||
expect(cfg).to.be.an('object'); | ||
['host', 'port', 'protocol', 'method', 'path'].forEach(function(key) { | ||
expect(cfg).to.have.property(key); | ||
}); | ||
expect(cfg.protocol).to.equal('http:'); | ||
@@ -90,3 +91,3 @@ expect(cfg.host).to.equal('coreapi.1api.net'); | ||
var cl = new apiconnector.Client(); | ||
var cl = new Client(); | ||
var socketcfg; | ||
@@ -115,3 +116,3 @@ | ||
expect(c).to.be.an('object'); | ||
expect(c).to.be.instanceof(apiconnector.Request); | ||
expect(c).to.be.instanceof(Request); | ||
}); | ||
@@ -128,3 +129,3 @@ }); | ||
//remoteaddr: provide it, if you have an ip address filter activated in your account for security reasons | ||
}, done, 'ftp://coreapi.1api.net/api/call/.cgi'); | ||
}, null, 'ftp://coreapi.1api.net/api/call.cgi'); | ||
}; | ||
@@ -134,2 +135,23 @@ expect(fn).to.throw(Error); | ||
}); | ||
it("perform an API login with invalid credentials", function(done) { | ||
var fn = function() { | ||
nock('http://coreapi.1api.net') | ||
.post('/api/call.cgi') | ||
.reply(200, "[RESPONSE]\r\ncode=530\r\ndescription=Authentication failed\r\nqueuetime=0\r\nruntime=0.001\r\nEOF\r\n"); | ||
cl.login({ | ||
entity: "1234", //OT&E system, use "54cd" for LIVE system | ||
login: "test.user.donotexists", //your user id, here: the OT&E demo user | ||
pw: "####" //your user password | ||
//remoteaddr: provide it, if you have an ip address filter activated in your account for security reasons | ||
}, function(r) { | ||
nock.restore(); | ||
expectResponseHash(r, '530', 'Authentication failed'); //maybe we can improve here with apiconnector.Response instance | ||
done(); | ||
}, 'http://coreapi.1api.net/api/call.cgi'); | ||
}; | ||
expect(fn).to.not.throw(Error); | ||
}); | ||
it("perform an API login with demo credentials", function(done) { | ||
@@ -143,17 +165,9 @@ var fn = function() { | ||
}, function(r, sockcfg) { | ||
expect(r).to.be.an('object'); //maybe we can improve here with apiconnector.Response instance | ||
expect(r).to.have.property('CODE'); | ||
socketcfg = sockcfg; | ||
expectResponseHash(r); //maybe we can improve here with apiconnector.Response instance | ||
if (r.CODE !== "200") { | ||
expect(parseInt(r.CODE), 10).to.be.within(200, 499); | ||
expect(parseInt(r.CODE, 10)).to.be.within(200, 499); | ||
done(); | ||
return; | ||
} | ||
expect(sockcfg).to.be.an('object'); | ||
expect(sockcfg).to.have.property('options'); | ||
expect(sockcfg).to.have.property('params'); | ||
expect(sockcfg.params).to.have.property('session'); | ||
expect(sockcfg.params).to.have.property('entity'); | ||
expect(sockcfg.params).to.not.have.property('pw'); | ||
expect(sockcfg.params).to.not.have.property('login'); | ||
expect(sockcfg.params).to.not.have.property('user'); | ||
socketcfg = sockcfg; | ||
done(); | ||
@@ -167,5 +181,13 @@ }); | ||
describe("Client.request", function() { | ||
beforeEach(function() { | ||
expectValidSocketConfig(socketcfg); | ||
}); | ||
afterEach(function() { | ||
nock.restore(); | ||
}); | ||
var uidxCB = function(r, done) { | ||
expect(r).to.be.an('object'); | ||
expect(r).to.have.property('CODE'); | ||
expectResponseHash(r); | ||
if (r.CODE === '200') { | ||
@@ -182,36 +204,30 @@ expect(r).to.have.property('PROPERTY'); | ||
it("perform an API request [no callback provided]", function() { | ||
expect(socketcfg).to.be.an('object'); | ||
cl.request({ | ||
COMMAND: 'GetUserIndex' | ||
}, socketcfg); | ||
nock('https://coreapi.1api.net') | ||
.post('/api/call.cgi') | ||
.reply(200, testcmds.getuserindex.RESPONSE.success); | ||
cl.request(testcmds.getuserindex.COMMAND, socketcfg); | ||
}); | ||
it("perform an API request [no socket cfg provided]", function(done) { | ||
//no connection will be established! | ||
var cb = function(r) { | ||
expect(r).to.be.an('object'); | ||
expect(r).to.have.property('CODE'); | ||
expect(r.CODE).to.be.equal('530'); | ||
expect(r.DESCRIPTION).to.be.equal('SESSION NOT FOUND'); | ||
expectResponseHash(r, '530', 'SESSION NOT FOUND'); | ||
done(); | ||
}; | ||
cl.request({ | ||
COMMAND: 'GetUserIndex' | ||
}, null, cb, cb, 'hash'); | ||
cl.request(testcmds.getuserindex.COMMAND, null, cb, cb, 'hash'); | ||
}); | ||
it("perform an API request [socket cfg w/o options and headers]", function(done) { | ||
expect(socketcfg).to.be.an('object'); | ||
nock.activate(); //reuse setting from 2 test before | ||
var cb = function(r) { | ||
uidxCB(r, done); | ||
}; | ||
var newcfg = Object.assign({}, socketcfg); | ||
var newcfg = JSON.parse(JSON.stringify(socketcfg)); | ||
delete newcfg.options; | ||
cl.request({ | ||
COMMAND: 'GetUserIndex' | ||
}, newcfg, cb, cb, 'hash'); | ||
cl.request(testcmds.getuserindex.COMMAND, newcfg, cb, cb, 'hash'); | ||
}); | ||
it("perform an API request [socket cfg w/o expect header]", function(done) { | ||
expect(socketcfg).to.be.an('object'); | ||
var newcfg = Object.assign({}, socketcfg); | ||
nock.activate(); //reuse setting from last test | ||
var newcfg = JSON.parse(JSON.stringify(socketcfg)); | ||
var cb = function(r) { | ||
@@ -221,20 +237,21 @@ uidxCB(r, done); | ||
newcfg.options.headers = {}; | ||
cl.request({ | ||
COMMAND: 'GetUserIndex' | ||
}, newcfg, cb, cb, 'hash'); | ||
cl.request(testcmds.getuserindex.COMMAND, newcfg, cb, cb, 'hash'); | ||
}); | ||
it("perform an API request [hash response]", function(done) { | ||
expect(socketcfg).to.be.an('object'); | ||
nock.cleanAll(); | ||
//NOTE: here we perform a real API request for test purpose | ||
var cb = function(r) { | ||
uidxCB(r, done); | ||
}; | ||
cl.request({ | ||
COMMAND: 'GetUserIndex' | ||
}, socketcfg, cb, cb, 'hash'); | ||
cl.request(testcmds.getuserindex.COMMAND, socketcfg, cb, cb, 'hash'); | ||
}); | ||
it("perform an API request [list response]", function(done) { | ||
//here we fake again to save test runtime | ||
nock('https://coreapi.1api.net') | ||
.post('/api/call.cgi') | ||
.reply(200, testcmds.querydomainlist.success.RESPONSE); | ||
var cb = function(r) { | ||
expect(r).to.be.an('object'); | ||
expect(r).to.have.property('CODE'); | ||
expectResponseHash(r); | ||
if (r.CODE === '200') { | ||
@@ -247,7 +264,23 @@ expect(r).to.have.property('LIST'); | ||
}; | ||
cl.request({ | ||
COMMAND: 'QueryDomainList', | ||
LIMIT: 2 | ||
}, socketcfg, cb, cb, 'list'); | ||
cl.request(testcmds.querydomainlist.success.COMMAND, socketcfg, cb, cb, 'list'); | ||
}); | ||
it("perform an API request [connection error]", function(done) { | ||
//cannot nock connection error as nock is not on the network layer | ||
var cfg = JSON.parse(JSON.stringify(socketcfg)); | ||
cfg.options.port = '8123'; | ||
cfg.options.protocol = 'http:'; | ||
cfg.options.host = 'gregergegegegerwrgwe.com'; | ||
var cb = function(r) { | ||
var rv = Response.parse(Response.responses.error); | ||
expectResponseHash(rv); | ||
expectResponseHash(r, rv.CODE); | ||
done(); | ||
}; | ||
cl.request(testcmds.getuserindex.COMMAND, cfg, cb, cb, 'hash'); | ||
//perform it again without callback for code coverage | ||
//that's basically ok, as someone might really just want to do an API | ||
//request without caring about the api response | ||
cl.request(testcmds.getuserindex.COMMAND, cfg); | ||
}); | ||
}); | ||
@@ -257,7 +290,4 @@ | ||
it("perform an API logout using previous session", function(done) { | ||
expect(socketcfg).to.be.an('object'); | ||
cl.logout(socketcfg, function(r) { | ||
expect(r).to.be.an('object'); | ||
expect(r).to.have.property('CODE'); | ||
expect(r.CODE).to.equal('200'); | ||
expectResponseHash(r, '200'); //maybe better Response instance here | ||
done(); | ||
@@ -264,0 +294,0 @@ }); |
@@ -6,4 +6,9 @@ /* jshint -W024 */ | ||
var expect = require('chai').expect; | ||
var apiconnector = require('../index.js'); | ||
var Request = require('../request.js'); | ||
var Response = require('../response.js'); | ||
var events = require('events'); | ||
var nock = require('nock'); | ||
var chkHlp = require('./check-helper.js'); | ||
var expectPropertyFn = chkHlp.expectPropertyFn; | ||
var expectResponse = chkHlp.expectResponse; | ||
@@ -13,19 +18,18 @@ describe("request.js", function() { | ||
this.slow(1000); | ||
var request; | ||
after(function(){ | ||
nock.cleanAll(); | ||
}); | ||
describe("check general class structure", function() { | ||
it("check constructor", function() { | ||
expect(apiconnector).to.have.property('Request'); | ||
expect(apiconnector.Request).to.be.an('function'); | ||
request = apiconnector.Request; | ||
var req = new request(); | ||
expect(req).to.be.instanceof(request); | ||
expect(Request).to.be.an('function'); | ||
var req = new Request(); | ||
expect(req).to.be.instanceof(Request); | ||
expect(req).to.be.instanceof(events.EventEmitter); //inheritance | ||
}); | ||
var methods = ["request"]; | ||
methods.forEach(function(m) { | ||
["request"].forEach(function(m) { | ||
it("check existance of prototype method '" + m + "'", function() { | ||
expect(request.prototype).to.have.property(m); | ||
expect(request.prototype[m]).to.be.an('function'); | ||
expectPropertyFn(Request.prototype, m); | ||
}); | ||
@@ -37,3 +41,3 @@ }); | ||
it("check successful communication based on OT&E system", function(done) { | ||
var c = new request({ | ||
var c = new Request({ | ||
method: 'POST', | ||
@@ -49,11 +53,7 @@ protocol: 'http:', | ||
c.on("response", function(r) { | ||
expect(r).to.be.an('object'); | ||
expect(r).to.be.instanceof(apiconnector.Response); | ||
expect(r.code()).to.equal('530'); | ||
expect(r.description()).to.equal('Authentication failed; SESSION NOT FOUND'); | ||
expectResponse(r, '530', 'Authentication failed; SESSION NOT FOUND'); | ||
done(); | ||
}); | ||
c.on("error", function(r) { | ||
expect(r).to.be.an('object'); | ||
expect(r).to.be.instanceof(apiconnector.Response); | ||
expectResponse(r); | ||
done(); | ||
@@ -63,3 +63,49 @@ }); | ||
}); | ||
it("check connection error [connection timeout]", function(done) { | ||
nock('http://coreapi.1api.net') | ||
.post('/api/call.cgi') | ||
.socketDelay(300000) //300s; API timeout is 250s | ||
.reply(200, Response.responses.expired); | ||
//note: even though timeout is defined, app comes directly backorder | ||
//but as requested: as a timeout! great! | ||
var c = new Request({ | ||
method: 'POST', | ||
protocol: 'http:', | ||
host: 'coreapi.1api.net', | ||
path: '/api/call.cgi' | ||
}, | ||
's_entity=1234&s_session=__iWillNeverExist__&command=EndSession', { | ||
COMMAND: "EndSession" | ||
} | ||
); | ||
c.on("error", function(r) { | ||
expectResponse(r, '421', 'Command failed due to server error. Client should try again'); | ||
done(); | ||
}); | ||
c.request(); | ||
}); | ||
it("check connection error [connection error]", function(done) { | ||
nock('http://coreapi.1api.net') | ||
.post('/api/call.cgi') | ||
.replyWithError('Internal Server Error'); | ||
var c = new Request({ | ||
method: 'POST', | ||
protocol: 'http:', | ||
host: 'coreapi.1api.net', | ||
path: '/api/call.cgi' | ||
}, | ||
's_entity=1234&s_session=__iWillNeverExist__&command=EndSession', { | ||
COMMAND: "EndSession" | ||
} | ||
); | ||
c.on("error", function(r) { | ||
expectResponse(r, '421', 'Command failed due to server error. Client should try again'); | ||
done(); | ||
}); | ||
c.request(); | ||
}); | ||
}); | ||
}); |
@@ -5,40 +5,19 @@ /* jshint -W024 */ | ||
var assert = require('chai').assert; | ||
var expect = require('chai').expect; | ||
var apiconnector = require('../index.js'); | ||
var Response = require('../response.js'); | ||
var chkHlp = require('./check-helper.js'); | ||
var expectResponse = chkHlp.expectResponse; | ||
var expectResponseHash = chkHlp.expectResponseHash; | ||
var expectPropertyFn = chkHlp.expectPropertyFn; | ||
var responseHashFormatCheck = function(r) { | ||
expect(r).to.be.an('object'); | ||
expect(r).to.have.property('CODE'); | ||
expect(r).to.have.property('DESCRIPTION'); | ||
expect(r.CODE).to.be.a('string'); | ||
expect(r.DESCRIPTION).to.be.a('string'); | ||
}; | ||
var responseListRowCheck = function(row) { | ||
expect(row).to.be.an('object'); | ||
expect(row).to.be.an.instanceof(Object); | ||
}; | ||
var arrayCheck = function(col) { | ||
expect(col).to.be.an('array'); | ||
expect(col).to.be.an.instanceof(Array); | ||
}; | ||
var stringCheck = function(str) { | ||
expect(str).to.be.a('string'); | ||
}; | ||
var defaultResponseTemplates = ['404', 'error', 'empty', 'expired']; | ||
describe("response.js", function() { | ||
var response = apiconnector.Response; | ||
describe("check general class structure", function() { | ||
it("check constructor", function() { | ||
expect(apiconnector).to.have.property('Response'); | ||
expect(apiconnector.Response).to.be.an('function'); | ||
expect(Response).to.be.an('function'); | ||
}); | ||
it("check non-prototype vars", function() { | ||
expect(apiconnector.Response).to.have.property('pagerRegexp'); | ||
expect(apiconnector.Response.pagerRegexp).to.be.an('regexp'); | ||
expect(Response).to.have.property('pagerRegexp'); | ||
expect(Response.pagerRegexp).to.be.a('regexp'); | ||
}); | ||
@@ -48,4 +27,3 @@ var methods = ["parse", "serialize", "getTemplates", "getTemplate", "isTemplateMatch"]; | ||
it("check existance of non-prototype method '" + m + "'", function() { | ||
expect(apiconnector.Response).to.have.property(m); | ||
expect(apiconnector.Response[m]).to.be.an('function'); | ||
expectPropertyFn(Response, m); | ||
}); | ||
@@ -62,4 +40,3 @@ }); | ||
it("check existance of prototype method '" + m + "'", function() { | ||
expect(apiconnector.Response.prototype).to.have.property(m); | ||
expect(apiconnector.Response.prototype[m]).to.be.an('function'); | ||
expectPropertyFn(Response.prototype, m); | ||
}); | ||
@@ -73,8 +50,6 @@ }); | ||
it("return unparsed template '" + rtpl + "'", function() { | ||
var r = response.getTemplate(rtpl); | ||
stringCheck(r); | ||
expect(Response.getTemplate(rtpl)).to.be.a('string'); | ||
}); | ||
it("return parsed template '" + rtpl + "'", function() { | ||
var r = response.getTemplate(rtpl, true); | ||
responseHashFormatCheck(r); | ||
expectResponseHash(Response.getTemplate(rtpl, true)); | ||
}); | ||
@@ -85,4 +60,3 @@ }(tpl)); | ||
it("return non existing template '__iWillNeverExist__'", function() { | ||
var r = response.getTemplate('__iWillNeverExist__'); | ||
expect(r).to.be.false; //false | ||
expect(Response.getTemplate('__iWillNeverExist__')).to.be.false; | ||
}); | ||
@@ -93,4 +67,3 @@ }); | ||
it("return all default response templates", function() { | ||
var tpls = response.getTemplates(); | ||
expect(tpls).to.be.an('object'); | ||
expect(Response.getTemplates()).to.be.an('object'); | ||
}); | ||
@@ -104,8 +77,10 @@ }); | ||
//the below equals to Response.getTemplate(tpl, true); | ||
var r = response.getTemplate(rtpl); | ||
var hash = response.parse(r); | ||
responseHashFormatCheck(hash); | ||
expectResponseHash(Response.parse(Response.getTemplate(rtpl))); | ||
}); | ||
}(tpl)); | ||
}); | ||
it("return parsed response for a response without DESCRIPTION", function() { | ||
expectResponseHash(Response.parse("[RESPONSE]\r\ncode=421\r\nEOF\r\n"), '421', ""); | ||
}); | ||
}); | ||
@@ -118,5 +93,5 @@ | ||
//the below equals to Response.getTemplate(tpl, true); | ||
var r = response.getTemplate(rtpl); | ||
var hash = response.parse(r); | ||
responseHashFormatCheck(hash); | ||
var r = Response.getTemplate(rtpl); | ||
var hash = Response.parse(r); | ||
expectResponseHash(hash); | ||
}); | ||
@@ -126,8 +101,12 @@ }(tpl)); | ||
it("serialize a parsed API response to plain text", function() { | ||
var r = response.getTemplate('error'); | ||
var hash = response.parse(r); | ||
var plain = response.serialize(hash); | ||
stringCheck(plain); | ||
var r = Response.getTemplate('error'); | ||
var plain = Response.serialize(Response.parse(r)); | ||
expect(plain).to.be.a('string'); | ||
expect(plain).to.equal(r); | ||
}); | ||
it("serialize a parsed API response to plain text [w/o CODE and DESCRIPTION]", function() { | ||
expect(Response.serialize({ | ||
QUEUETIME: "0.00" | ||
})).to.equal("[RESPONSE]\r\nqueuetime=0.00\r\nEOF\r\n"); | ||
}); | ||
}); | ||
@@ -137,8 +116,8 @@ | ||
it("check if parsed API response matches a default response template", function() { | ||
var hash = response.getTemplate('error', true); | ||
var ismatch = response.isTemplateMatch(hash, 'error'); | ||
var hash = Response.getTemplate('error', true); | ||
var ismatch = Response.isTemplateMatch(hash, 'error'); | ||
expect(ismatch).to.be.true; | ||
ismatch = response.isTemplateMatch(hash, 'expired'); | ||
ismatch = Response.isTemplateMatch(hash, 'expired'); | ||
expect(ismatch).to.be.false; | ||
ismatch = response.isTemplateMatch(hash, '__iWillNeverExist__'); | ||
ismatch = Response.isTemplateMatch(hash, '__iWillNeverExist__'); | ||
expect(ismatch).to.be.false; | ||
@@ -149,15 +128,13 @@ }); | ||
describe("Response Instance", function() { | ||
var exampleTPL = require('./test-commands.js'); | ||
var testcmds = require('./test-commands.js').querydomainlist; | ||
var r; | ||
it("construct success example response template", function() { | ||
r = new apiconnector.Response(null, exampleTPL.success.COMMAND); | ||
expect(r).to.be.an('object'); | ||
expect(r).to.be.an.instanceof(apiconnector.Response); | ||
it("construct success example response template [w/o response]", function() { | ||
r = new Response(null, testcmds.success.COMMAND); | ||
expectResponse(r); | ||
}); | ||
it("construct success example response template", function() { | ||
r = new apiconnector.Response(exampleTPL.success.RESPONSE, exampleTPL.success.COMMAND); | ||
expect(r).to.be.an('object'); | ||
expect(r).to.be.an.instanceof(apiconnector.Response); | ||
r = new Response(testcmds.success.RESPONSE, testcmds.success.COMMAND); | ||
expectResponse(r); | ||
}); | ||
@@ -168,14 +145,14 @@ | ||
expect(it).to.be.an('object'); | ||
assert.isFunction(it.hasNext); | ||
expectPropertyFn(it, 'hasNext'); | ||
expectPropertyFn(it, 'hasPrevious'); | ||
expectPropertyFn(it, 'rewind'); | ||
expectPropertyFn(it, 'previous'); | ||
expectPropertyFn(it, 'next'); | ||
expectPropertyFn(it, 'current'); | ||
expect(it.hasNext()).to.equal(true); | ||
assert.isFunction(it.hasPrevious); | ||
expect(it.hasPrevious()).to.equal(false); | ||
assert.isFunction(it.rewind); | ||
expect(it.rewind()).to.equal(it.current()); | ||
assert.isFunction(it.previous); | ||
expect(it.previous()).to.equal(null); | ||
assert.isFunction(it.next); | ||
expect(it.next()).to.not.equal(null); | ||
expect(it.next()).to.equal(null); | ||
assert.isFunction(it.current); | ||
expect(it.current()).to.be.an('object'); | ||
@@ -194,13 +171,7 @@ it.rewind(); | ||
it("hasNext", function() { | ||
var flag; | ||
assert.isFunction(r.hasNext); | ||
flag = r.hasNext(); | ||
expect(flag).to.be.true; //index 0 (of two items) | ||
expect(r.hasNext()).to.be.true; //index 0 (of two items) | ||
}); | ||
it("hasPrevious", function() { | ||
var flag; | ||
assert.isFunction(r.hasPrevious); | ||
flag = r.hasPrevious(); | ||
expect(flag).to.be.false; //index 0 (of two items) | ||
expect(r.hasPrevious()).to.be.false; //index 0 (of two items) | ||
}); | ||
@@ -210,5 +181,4 @@ | ||
var row, flag; | ||
assert.isFunction(r.rewind); | ||
row = r.rewind(); | ||
responseListRowCheck(row); | ||
expect(row).to.be.an('object'); | ||
flag = r.hasNext(); | ||
@@ -222,5 +192,4 @@ expect(flag).to.be.true; //index 0 (of two items) | ||
var row, flag; | ||
assert.isFunction(r.next); | ||
row = r.next(); | ||
responseListRowCheck(row); | ||
expect(row).to.be.an('object'); | ||
flag = r.hasNext(); | ||
@@ -234,5 +203,4 @@ expect(flag).to.be.false; //index 1 (of two items) | ||
var row, flag; | ||
assert.isFunction(r.previous); | ||
row = r.previous(); | ||
responseListRowCheck(row); | ||
expect(row).to.be.an('object'); | ||
flag = r.hasNext(); | ||
@@ -245,12 +213,7 @@ expect(flag).to.be.true; //index 0 (of two items) | ||
it("current", function() { | ||
var row; | ||
assert.isFunction(r.current); | ||
row = r.current(); | ||
responseListRowCheck(row); //index 0 | ||
expect(r.current()).to.be.an('object'); //index 0 | ||
}); | ||
it("get", function() { | ||
var pt; | ||
assert.isFunction(r.get); | ||
pt = r.get('PROPERTY'); | ||
var pt = r.get('PROPERTY'); | ||
expect(pt).to.be.an('object'); | ||
@@ -262,6 +225,4 @@ pt = r.get('__iWillNeverExist__'); | ||
it("getColumn", function() { | ||
var col; | ||
assert.isFunction(r.getColumn); | ||
col = r.getColumn('CREATEDDATE'); | ||
arrayCheck(col); | ||
var col = r.getColumn('CREATEDDATE'); | ||
expect(col).to.be.an('array'); | ||
col = r.get('__iWillNeverExist__'); | ||
@@ -272,6 +233,4 @@ expect(col).to.be.false; | ||
it("getColumnIndex", function() { | ||
var cell; | ||
assert.isFunction(r.getColumnIndex); | ||
cell = r.getColumnIndex('PREPAIDPERIOD', 1); | ||
stringCheck(cell); | ||
var cell = r.getColumnIndex('PREPAIDPERIOD', 1); | ||
expect(cell).to.be.a('string'); | ||
expect(cell).to.equal("0"); | ||
@@ -284,7 +243,6 @@ cell = r.getColumnIndex('PREPAIDPERIOD', 1, true); | ||
it("applyCustomChanges", function() { //nothings changes here, but can be overriden on demand | ||
assert.isFunction(r.applyCustomChanges); | ||
var test = { | ||
var test, tmp; | ||
test = { | ||
test: true | ||
}; | ||
var tmp; | ||
tmp = r.applyCustomChanges(test); | ||
@@ -295,14 +253,13 @@ expect(tmp).to.equal(test); | ||
it("as_string", function() { | ||
assert.isFunction(r.as_string); | ||
var plain1, plain2; | ||
r.useColumns('*'); //reset to default | ||
var plain1, plain2; | ||
plain1 = r.as_string(); | ||
stringCheck(plain1); | ||
expect(plain1).to.be.a('string'); | ||
r.useColumns(["DOMAIN", "REPOSITORY"]); | ||
plain2 = r.as_string(); | ||
stringCheck(plain2); | ||
expect(plain2).to.be.a('string'); | ||
expect(plain1).to.not.equal(plain2); | ||
r.useColumns('*'); //reset to default | ||
plain2 = r.as_string(); | ||
stringCheck(plain2); | ||
expect(plain2).to.be.a('string'); | ||
expect(plain1).to.equal(plain2); | ||
@@ -312,3 +269,2 @@ }); | ||
it("as_hash", function() { | ||
assert.isFunction(r.as_hash); | ||
r.useColumns('*'); //reset to default | ||
@@ -328,5 +284,2 @@ var h1, h2; | ||
expect(pg).to.be.an('object'); | ||
['FIRST', 'LAST', 'COUNT', 'TOTAL', 'LIMIT', 'PAGES', 'PAGE', 'PAGENEXT', 'PAGEPREV'].forEach(function(key) { | ||
expect(pg).to.have.property(key); | ||
}); | ||
expect(pg.FIRST).to.equal(0); | ||
@@ -336,3 +289,3 @@ expect(pg.LAST).to.equal(1); | ||
expect(pg.TOTAL).to.equal(2); | ||
expect(pg.LIMIT).to.equal(exampleTPL.success.COMMAND.LIMIT); | ||
expect(pg.LIMIT).to.equal(testcmds.success.COMMAND.LIMIT); | ||
expect(pg.PAGES).to.equal(1); | ||
@@ -345,5 +298,4 @@ expect(pg.PAGE).to.equal(1); | ||
it("as_list", function() { | ||
assert.isFunction(r.as_list); | ||
var l1, l2; | ||
r.useColumns('*'); //reset to default | ||
var l1, l2; | ||
l1 = r.as_list(); | ||
@@ -358,6 +310,6 @@ r.useColumns(["DOMAIN", "REPOSITORY"]); | ||
expect(l1).to.have.property('LIST'); | ||
arrayCheck(l1.LIST); | ||
expect(l1.LIST).to.be.an('array'); | ||
expect(l1).to.have.property('meta'); | ||
expect(l1.meta).to.have.property('columns'); | ||
arrayCheck(l1.meta.columns); | ||
expect(l1.meta.columns).to.be.an('array'); | ||
expect(l1.meta).to.have.property('pg'); | ||
@@ -367,24 +319,29 @@ expect(l1.meta.pg).to.be.an('object'); | ||
it("as_list [with different hash property count]", function() { | ||
//PROPERTY[TRANSFERLOCK][1] removed | ||
//especially in domain list we might have properties with different hash property count | ||
var r2 = new Response(testcmds.indexlength.RESPONSE, testcmds.indexlength.COMMAND); | ||
var l = r2.as_list(); | ||
expect(l).to.have.property('LIST'); | ||
expect(l.LIST).to.be.an('array'); | ||
expect(l).to.have.property('meta'); | ||
expect(l.meta).to.have.property('columns'); | ||
expect(l.meta.columns).to.be.an('array'); | ||
expect(l.meta).to.have.property('pg'); | ||
expect(l.meta.pg).to.be.an('object'); | ||
}); | ||
it("code", function() { | ||
assert.isFunction(r.code); | ||
var c = r.code(); | ||
stringCheck(c); | ||
expect(c).to.equal('200'); | ||
expect(r.code()).to.equal('200'); | ||
}); | ||
it("description", function() { | ||
assert.isFunction(r.description); | ||
var d = r.description(); | ||
stringCheck(d); | ||
expect(d).to.equal('Command completed successfully'); | ||
expect(r.description()).to.equal('Command completed successfully'); | ||
}); | ||
it("properties", function() { | ||
assert.isFunction(r.properties); | ||
var p = r.properties(); | ||
expect(p).to.be.a('object'); //in success case! | ||
expect(r.properties()).to.be.a('object'); //in success case! | ||
}); | ||
it("runtime", function() { | ||
assert.isFunction(r.runtime); | ||
var p = r.runtime(); | ||
@@ -396,3 +353,2 @@ expect(p).to.be.a('number'); | ||
it("queuetime", function() { | ||
assert.isFunction(r.queuetime); | ||
var p = r.queuetime(); | ||
@@ -404,102 +360,75 @@ expect(p).to.be.a('number'); | ||
it("is_success", function() { | ||
assert.isFunction(r.is_success); | ||
var p, r2; | ||
p = r.is_success(); | ||
expect(p).to.equal(true); | ||
r2 = new apiconnector.Response(exampleTPL.error.RESPONSE, exampleTPL.error.COMMAND); | ||
p = r2.is_success(); | ||
expect(p).to.equal(false); | ||
r2 = new apiconnector.Response(exampleTPL.tmperror.RESPONSE, exampleTPL.tmperror.COMMAND); | ||
p = r2.is_success(); | ||
expect(p).to.equal(false); | ||
var r2; | ||
expect(r.is_success()).to.equal(true); | ||
r2 = new Response(testcmds.error.RESPONSE, testcmds.error.COMMAND); | ||
expect(r2.is_success()).to.equal(false); | ||
r2 = new Response(testcmds.tmperror.RESPONSE, testcmds.tmperror.COMMAND); | ||
expect(r2.is_success()).to.equal(false); | ||
}); | ||
it("is_tmp_error", function() { | ||
assert.isFunction(r.is_tmp_error); | ||
var p, r2; | ||
p = r.is_tmp_error(); | ||
expect(p).to.equal(false); | ||
r2 = new apiconnector.Response(exampleTPL.error.RESPONSE, exampleTPL.error.COMMAND); | ||
p = r2.is_tmp_error(); | ||
expect(p).to.equal(false); | ||
r2 = new apiconnector.Response(exampleTPL.tmperror.RESPONSE, exampleTPL.tmperror.COMMAND); | ||
p = r2.is_tmp_error(); | ||
expect(p).to.equal(true); | ||
var r2; | ||
expect(r.is_tmp_error()).to.equal(false); | ||
r2 = new Response(testcmds.error.RESPONSE, testcmds.error.COMMAND); | ||
expect(r2.is_tmp_error()).to.equal(false); | ||
r2 = new Response(testcmds.tmperror.RESPONSE, testcmds.tmperror.COMMAND); | ||
expect(r2.is_tmp_error()).to.equal(true); | ||
}); | ||
it("is_error", function() { | ||
assert.isFunction(r.is_error); | ||
var p, r2; | ||
p = r.is_error(); | ||
expect(p).to.be.false; | ||
r2 = new apiconnector.Response(exampleTPL.error.RESPONSE, exampleTPL.error.COMMAND); | ||
p = r2.is_error(); | ||
expect(p).to.be.true; | ||
r2 = new apiconnector.Response(exampleTPL.tmperror.RESPONSE, exampleTPL.tmperror.COMMAND); | ||
p = r2.is_error(); | ||
expect(p).to.be.false; | ||
var r2; | ||
expect(r.is_error()).to.be.false; | ||
r2 = new Response(testcmds.error.RESPONSE, testcmds.error.COMMAND); | ||
expect(r2.is_error()).to.be.true; | ||
r2 = new Response(testcmds.tmperror.RESPONSE, testcmds.tmperror.COMMAND); | ||
expect(r2.is_error()).to.be.false; | ||
}); | ||
it("columns", function() { | ||
assert.isFunction(r.columns); | ||
var cols = r.columns(); | ||
arrayCheck(cols); | ||
expect(r.columns()).to.be.an('array'); | ||
}); | ||
it("first", function() { | ||
assert.isFunction(r.first); | ||
var d = r.first(); | ||
expect(d).to.equal(0); | ||
expect(r.first()).to.equal(0); | ||
}); | ||
it("count", function() { | ||
assert.isFunction(r.count); | ||
var d = r.count(); | ||
expect(d).to.equal(2); | ||
expect(r.count()).to.equal(2); | ||
}); | ||
it("last", function() { | ||
assert.isFunction(r.last); | ||
var d = r.last(); | ||
expect(d).to.equal(1); | ||
expect(r.last()).to.equal(1); | ||
}); | ||
it("limit", function() { | ||
assert.isFunction(r.limit); | ||
var d = r.limit(); | ||
expect(d).to.equal(exampleTPL.success.COMMAND.LIMIT); //if not api would have it ignored | ||
expect(r.limit()).to.equal(testcmds.success.COMMAND.LIMIT); //if not api would have it ignored | ||
}); | ||
it("total", function() { | ||
assert.isFunction(r.total); | ||
var d = r.total(); | ||
expect(d).to.equal(2); | ||
expect(r.total()).to.equal(2); | ||
}); | ||
it("pages", function() { | ||
assert.isFunction(r.pages); | ||
var d = r.pages(); | ||
expect(d).to.equal(1); | ||
expect(r.pages()).to.equal(1); | ||
}); | ||
it("page", function() { | ||
assert.isFunction(r.page); | ||
var d = r.page(); | ||
expect(d).to.equal(1); | ||
expect(r.page()).to.equal(1); | ||
}); | ||
it("prevpage", function() { | ||
assert.isFunction(r.prevpage); | ||
var d = r.prevpage(); | ||
expect(d).to.equal(1); | ||
expect(r.prevpage()).to.equal(1); | ||
}); | ||
it("nextpage", function() { | ||
assert.isFunction(r.nextpage); | ||
var d = r.nextpage(); | ||
expect(d).to.equal(1); | ||
expect(r.nextpage()).to.equal(1); | ||
}); | ||
it("nextpage [response with multiple pages]", function() { | ||
r = new Response(testcmds.multipage.RESPONSE, testcmds.multipage.COMMAND); | ||
expect(r.nextpage()).to.equal(2); | ||
}); | ||
}); | ||
}); |
module.exports = { | ||
success: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 2 | ||
querydomainlist: { | ||
indexlength: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 2 | ||
}, | ||
RESPONSE: "[RESPONSE]\r\nPROPERTY[CREATEDDATE][0]=2016-06-07 18:02:02\r\nPROPERTY[CREATEDDATE][1]=2008-03-18 09:37:25\r\nPROPERTY[FINALIZATIONDATE][0]=2017-06-08 18:02:02\r\nPROPERTY[FINALIZATIONDATE][1]=2017-03-19 09:37:25\r\nPROPERTY[NEXTACTION][0]=pay\r\nPROPERTY[NEXTACTION][1]=pay\r\nPROPERTY[ADDON-PROXY][0]=\r\nPROPERTY[ADDON-PROXY][1]=\r\nPROPERTY[TRANSFERDATE][0]=\r\nPROPERTY[TRANSFERDATE][1]=\r\nPROPERTY[NAMESERVER][0]=ns3.ispapi.net ns2.ispapi.net ns1.ispapi.net\r\nPROPERTY[NAMESERVER][1]=ns3010.1api.net ns2010.1api.net ns1010.1api.net\r\nPROPERTY[TECHCONTACT][0]=P-JUW40\r\nPROPERTY[TECHCONTACT][1]=P-JUW40\r\nPROPERTY[STATUS][0]=ACTIVE\r\nPROPERTY[STATUS][1]=ACTIVE clientTransferProhibited clientDeleteProhibited\r\nPROPERTY[OWNERCONTACT][0]=P-JUW40\r\nPROPERTY[OWNERCONTACT][1]=P-JUW40\r\nPROPERTY[TRANSFER-CREATEDDATE][0]=\r\nPROPERTY[TRANSFER-CREATEDDATE][1]=\r\nPROPERTY[FAILUREDATE][0]=2017-07-21 18:02:02\r\nPROPERTY[FAILUREDATE][1]=2017-05-01 09:37:25\r\nPROPERTY[RENEWALMODE][0]=AUTORENEW\r\nPROPERTY[RENEWALMODE][1]=AUTORENEW\r\nPROPERTY[MISSINGPARAMETER][0]=\r\nPROPERTY[MISSINGPARAMETER][1]=\r\nPROPERTY[LAST][0]=1\r\nPROPERTY[USER][0]=hom.hexonet.de\r\nPROPERTY[USER][1]=hom.hexonet.de\r\nPROPERTY[LIMIT][0]=2\r\nPROPERTY[NEXTACTIONDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[NEXTACTIONDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[PARENTUSER][0]=hexonet\r\nPROPERTY[PARENTUSER][1]=hexonet\r\nPROPERTY[EXPIRATIONDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[EXPIRATIONDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[SUBCLASS][0]=TOP\r\nPROPERTY[SUBCLASS][1]=ASIA\r\nPROPERTY[CLAIMKEY][0]=\r\nPROPERTY[CLAIMKEY][1]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][0]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][1]=\r\nPROPERTY[PREPAIDPERIOD][0]=0\r\nPROPERTY[PREPAIDPERIOD][1]=0\r\nPROPERTY[UPDATEDDATE][0]=2016-06-10 15:34:16\r\nPROPERTY[UPDATEDDATE][1]=2014-07-01 14:54:03\r\nPROPERTY[ROID][0]=\r\nPROPERTY[ROID][1]=\r\nPROPERTY[ADDON-TRUSTEE][0]=\r\nPROPERTY[ADDON-TRUSTEE][1]=\r\nPROPERTY[DESCRIPTION][0]=11112222.top\r\nPROPERTY[DESCRIPTION][1]=1api.asia\r\nPROPERTY[AUTH][0]=6FerWN!583\r\nPROPERTY[AUTH][1]=Clm6OKgYIB\r\nPROPERTY[PEERUSER][0]=\r\nPROPERTY[PEERUSER][1]=\r\nPROPERTY[BILLINGCONTACT][0]=P-JUW40\r\nPROPERTY[BILLINGCONTACT][1]=P-JUW40\r\nPROPERTY[PAIDUNTILDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[PAIDUNTILDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[RENEWALPERIOD][0]=1Y\r\nPROPERTY[RENEWALPERIOD][1]=1Y\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[TRANSFER-DIRECTION][0]=\r\nPROPERTY[TRANSFER-DIRECTION][1]=\r\nPROPERTY[INVALIDPARAMETER][0]=\r\nPROPERTY[INVALIDPARAMETER][1]=\r\nPROPERTY[ADMINCONTACT][0]=P-JUW40\r\nPROPERTY[ADMINCONTACT][1]=P-JUW40\r\nPROPERTY[INTERNALNAMESERVER][0]=ns3.ispapi.net ns1.ispapi.net ns2.ispapi.net\r\nPROPERTY[INTERNALNAMESERVER][1]=ns2010.1api.net ns3010.1api.net ns1010.1api.net\r\nPROPERTY[ACCOUNTINGDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[ACCOUNTINGDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[TRANSFER-NEWREGISTRAR][0]=\r\nPROPERTY[TRANSFER-NEWREGISTRAR][1]=\r\nPROPERTY[TRANSFER-STATUS][0]=\r\nPROPERTY[TRANSFER-STATUS][1]=\r\nPROPERTY[REPOSITORY][0]=ZODIAC-LIVE-1API\r\nPROPERTY[REPOSITORY][1]=ASIA-LIVE-1API\r\nPROPERTY[FIRST][0]=0\r\nPROPERTY[OBJECTID][0]=11112222.top\r\nPROPERTY[OBJECTID][1]=1api.asia\r\nPROPERTY[TRANSFERLOCK][0]=0\r\nPROPERTY[OBJECTCLASS][0]=DOMAIN\r\nPROPERTY[OBJECTCLASS][1]=DOMAIN\r\nDESCRIPTION=Command completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.12\r\nEOF\r\n" | ||
}, | ||
RESPONSE: "[RESPONSE]\r\nPROPERTY[CREATEDDATE][0]=2016-06-07 18:02:02\r\nPROPERTY[CREATEDDATE][1]=2008-03-18 09:37:25\r\nPROPERTY[FINALIZATIONDATE][0]=2017-06-08 18:02:02\r\nPROPERTY[FINALIZATIONDATE][1]=2017-03-19 09:37:25\r\nPROPERTY[NEXTACTION][0]=pay\r\nPROPERTY[NEXTACTION][1]=pay\r\nPROPERTY[ADDON-PROXY][0]=\r\nPROPERTY[ADDON-PROXY][1]=\r\nPROPERTY[TRANSFERDATE][0]=\r\nPROPERTY[TRANSFERDATE][1]=\r\nPROPERTY[NAMESERVER][0]=ns3.ispapi.net ns2.ispapi.net ns1.ispapi.net\r\nPROPERTY[NAMESERVER][1]=ns3010.1api.net ns2010.1api.net ns1010.1api.net\r\nPROPERTY[TECHCONTACT][0]=P-JUW40\r\nPROPERTY[TECHCONTACT][1]=P-JUW40\r\nPROPERTY[STATUS][0]=ACTIVE\r\nPROPERTY[STATUS][1]=ACTIVE clientTransferProhibited clientDeleteProhibited\r\nPROPERTY[OWNERCONTACT][0]=P-JUW40\r\nPROPERTY[OWNERCONTACT][1]=P-JUW40\r\nPROPERTY[TRANSFER-CREATEDDATE][0]=\r\nPROPERTY[TRANSFER-CREATEDDATE][1]=\r\nPROPERTY[FAILUREDATE][0]=2017-07-21 18:02:02\r\nPROPERTY[FAILUREDATE][1]=2017-05-01 09:37:25\r\nPROPERTY[RENEWALMODE][0]=AUTORENEW\r\nPROPERTY[RENEWALMODE][1]=AUTORENEW\r\nPROPERTY[MISSINGPARAMETER][0]=\r\nPROPERTY[MISSINGPARAMETER][1]=\r\nPROPERTY[LAST][0]=1\r\nPROPERTY[USER][0]=hom.hexonet.de\r\nPROPERTY[USER][1]=hom.hexonet.de\r\nPROPERTY[LIMIT][0]=2\r\nPROPERTY[NEXTACTIONDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[NEXTACTIONDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[PARENTUSER][0]=hexonet\r\nPROPERTY[PARENTUSER][1]=hexonet\r\nPROPERTY[EXPIRATIONDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[EXPIRATIONDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[SUBCLASS][0]=TOP\r\nPROPERTY[SUBCLASS][1]=ASIA\r\nPROPERTY[CLAIMKEY][0]=\r\nPROPERTY[CLAIMKEY][1]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][0]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][1]=\r\nPROPERTY[PREPAIDPERIOD][0]=0\r\nPROPERTY[PREPAIDPERIOD][1]=0\r\nPROPERTY[UPDATEDDATE][0]=2016-06-10 15:34:16\r\nPROPERTY[UPDATEDDATE][1]=2014-07-01 14:54:03\r\nPROPERTY[ROID][0]=\r\nPROPERTY[ROID][1]=\r\nPROPERTY[ADDON-TRUSTEE][0]=\r\nPROPERTY[ADDON-TRUSTEE][1]=\r\nPROPERTY[DESCRIPTION][0]=11112222.top\r\nPROPERTY[DESCRIPTION][1]=1api.asia\r\nPROPERTY[AUTH][0]=6FerWN!583\r\nPROPERTY[AUTH][1]=Clm6OKgYIB\r\nPROPERTY[PEERUSER][0]=\r\nPROPERTY[PEERUSER][1]=\r\nPROPERTY[BILLINGCONTACT][0]=P-JUW40\r\nPROPERTY[BILLINGCONTACT][1]=P-JUW40\r\nPROPERTY[PAIDUNTILDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[PAIDUNTILDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[RENEWALPERIOD][0]=1Y\r\nPROPERTY[RENEWALPERIOD][1]=1Y\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[TRANSFER-DIRECTION][0]=\r\nPROPERTY[TRANSFER-DIRECTION][1]=\r\nPROPERTY[INVALIDPARAMETER][0]=\r\nPROPERTY[INVALIDPARAMETER][1]=\r\nPROPERTY[ADMINCONTACT][0]=P-JUW40\r\nPROPERTY[ADMINCONTACT][1]=P-JUW40\r\nPROPERTY[INTERNALNAMESERVER][0]=ns3.ispapi.net ns1.ispapi.net ns2.ispapi.net\r\nPROPERTY[INTERNALNAMESERVER][1]=ns2010.1api.net ns3010.1api.net ns1010.1api.net\r\nPROPERTY[ACCOUNTINGDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[ACCOUNTINGDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[TRANSFER-NEWREGISTRAR][0]=\r\nPROPERTY[TRANSFER-NEWREGISTRAR][1]=\r\nPROPERTY[TRANSFER-STATUS][0]=\r\nPROPERTY[TRANSFER-STATUS][1]=\r\nPROPERTY[REPOSITORY][0]=ZODIAC-LIVE-1API\r\nPROPERTY[REPOSITORY][1]=ASIA-LIVE-1API\r\nPROPERTY[FIRST][0]=0\r\nPROPERTY[OBJECTID][0]=11112222.top\r\nPROPERTY[OBJECTID][1]=1api.asia\r\nPROPERTY[TRANSFERLOCK][0]=0\r\nPROPERTY[TRANSFERLOCK][1]=1\r\nPROPERTY[OBJECTCLASS][0]=DOMAIN\r\nPROPERTY[OBJECTCLASS][1]=DOMAIN\r\nDESCRIPTION=Command completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.12\r\nEOF\r\n" | ||
}, | ||
error: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 2, | ||
PARAMNOTEXISTS: 1 | ||
multipage: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 1 | ||
}, | ||
RESPONSE: "[RESPONSE]\r\nPROPERTY[TOTAL][0]=100\r\nPROPERTY[FIRST][0]=0\r\nPROPERTY[LAST][0]=99\r\nPROPERTY[COUNT][0]=1\r\nPROPERTY[CREATEDDATE][0]=2016-06-07 18:02:02\r\nPROPERTY[CREATEDDATE][1]=2008-03-18 09:37:25\r\nPROPERTY[FINALIZATIONDATE][0]=2017-06-08 18:02:02\r\nPROPERTY[FINALIZATIONDATE][1]=2017-03-19 09:37:25\r\nPROPERTY[NEXTACTION][0]=pay\r\nPROPERTY[NEXTACTION][1]=pay\r\nPROPERTY[ADDON-PROXY][0]=\r\nPROPERTY[ADDON-PROXY][1]=\r\nPROPERTY[TRANSFERDATE][0]=\r\nPROPERTY[TRANSFERDATE][1]=\r\nPROPERTY[NAMESERVER][0]=ns3.ispapi.net ns2.ispapi.net ns1.ispapi.net\r\nPROPERTY[NAMESERVER][1]=ns3010.1api.net ns2010.1api.net ns1010.1api.net\r\nPROPERTY[TECHCONTACT][0]=P-JUW40\r\nPROPERTY[TECHCONTACT][1]=P-JUW40\r\nPROPERTY[STATUS][0]=ACTIVE\r\nPROPERTY[STATUS][1]=ACTIVE clientTransferProhibited clientDeleteProhibited\r\nPROPERTY[OWNERCONTACT][0]=P-JUW40\r\nPROPERTY[OWNERCONTACT][1]=P-JUW40\r\nPROPERTY[TRANSFER-CREATEDDATE][0]=\r\nPROPERTY[TRANSFER-CREATEDDATE][1]=\r\nPROPERTY[FAILUREDATE][0]=2017-07-21 18:02:02\r\nPROPERTY[FAILUREDATE][1]=2017-05-01 09:37:25\r\nPROPERTY[RENEWALMODE][0]=AUTORENEW\r\nPROPERTY[RENEWALMODE][1]=AUTORENEW\r\nPROPERTY[MISSINGPARAMETER][0]=\r\nPROPERTY[MISSINGPARAMETER][1]=\r\nPROPERTY[LAST][0]=1\r\nPROPERTY[USER][0]=hom.hexonet.de\r\nPROPERTY[USER][1]=hom.hexonet.de\r\nPROPERTY[LIMIT][0]=2\r\nPROPERTY[NEXTACTIONDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[NEXTACTIONDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[PARENTUSER][0]=hexonet\r\nPROPERTY[PARENTUSER][1]=hexonet\r\nPROPERTY[EXPIRATIONDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[EXPIRATIONDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[SUBCLASS][0]=TOP\r\nPROPERTY[SUBCLASS][1]=ASIA\r\nPROPERTY[CLAIMKEY][0]=\r\nPROPERTY[CLAIMKEY][1]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][0]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][1]=\r\nPROPERTY[PREPAIDPERIOD][0]=0\r\nPROPERTY[PREPAIDPERIOD][1]=0\r\nPROPERTY[UPDATEDDATE][0]=2016-06-10 15:34:16\r\nPROPERTY[UPDATEDDATE][1]=2014-07-01 14:54:03\r\nPROPERTY[ROID][0]=\r\nPROPERTY[ROID][1]=\r\nPROPERTY[ADDON-TRUSTEE][0]=\r\nPROPERTY[ADDON-TRUSTEE][1]=\r\nPROPERTY[DESCRIPTION][0]=11112222.top\r\nPROPERTY[DESCRIPTION][1]=1api.asia\r\nPROPERTY[AUTH][0]=6FerWN!583\r\nPROPERTY[AUTH][1]=Clm6OKgYIB\r\nPROPERTY[PEERUSER][0]=\r\nPROPERTY[PEERUSER][1]=\r\nPROPERTY[BILLINGCONTACT][0]=P-JUW40\r\nPROPERTY[BILLINGCONTACT][1]=P-JUW40\r\nPROPERTY[PAIDUNTILDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[PAIDUNTILDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[RENEWALPERIOD][0]=1Y\r\nPROPERTY[RENEWALPERIOD][1]=1Y\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[TRANSFER-DIRECTION][0]=\r\nPROPERTY[TRANSFER-DIRECTION][1]=\r\nPROPERTY[INVALIDPARAMETER][0]=\r\nPROPERTY[INVALIDPARAMETER][1]=\r\nPROPERTY[ADMINCONTACT][0]=P-JUW40\r\nPROPERTY[ADMINCONTACT][1]=P-JUW40\r\nPROPERTY[INTERNALNAMESERVER][0]=ns3.ispapi.net ns1.ispapi.net ns2.ispapi.net\r\nPROPERTY[INTERNALNAMESERVER][1]=ns2010.1api.net ns3010.1api.net ns1010.1api.net\r\nPROPERTY[ACCOUNTINGDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[ACCOUNTINGDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[TRANSFER-NEWREGISTRAR][0]=\r\nPROPERTY[TRANSFER-NEWREGISTRAR][1]=\r\nPROPERTY[TRANSFER-STATUS][0]=\r\nPROPERTY[TRANSFER-STATUS][1]=\r\nPROPERTY[REPOSITORY][0]=ZODIAC-LIVE-1API\r\nPROPERTY[REPOSITORY][1]=ASIA-LIVE-1API\r\nPROPERTY[FIRST][0]=0\r\nPROPERTY[OBJECTID][0]=11112222.top\r\nPROPERTY[OBJECTID][1]=1api.asia\r\nPROPERTY[TRANSFERLOCK][0]=0\r\nPROPERTY[TRANSFERLOCK][1]=1\r\nPROPERTY[OBJECTCLASS][0]=DOMAIN\r\nPROPERTY[OBJECTCLASS][1]=DOMAIN\r\nDESCRIPTION=Command completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.12\r\nEOF\r\n" | ||
}, | ||
RESPONSE: "[RESPONSE]\r\ncode=503\r\ndescription=Invalid Parameter: PARAMNOTEXISTS\r\nEOF\r\n" | ||
success: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 2 | ||
}, | ||
RESPONSE: "[RESPONSE]\r\nPROPERTY[CREATEDDATE][0]=2016-06-07 18:02:02\r\nPROPERTY[CREATEDDATE][1]=2008-03-18 09:37:25\r\nPROPERTY[FINALIZATIONDATE][0]=2017-06-08 18:02:02\r\nPROPERTY[FINALIZATIONDATE][1]=2017-03-19 09:37:25\r\nPROPERTY[NEXTACTION][0]=pay\r\nPROPERTY[NEXTACTION][1]=pay\r\nPROPERTY[ADDON-PROXY][0]=\r\nPROPERTY[ADDON-PROXY][1]=\r\nPROPERTY[TRANSFERDATE][0]=\r\nPROPERTY[TRANSFERDATE][1]=\r\nPROPERTY[NAMESERVER][0]=ns3.ispapi.net ns2.ispapi.net ns1.ispapi.net\r\nPROPERTY[NAMESERVER][1]=ns3010.1api.net ns2010.1api.net ns1010.1api.net\r\nPROPERTY[TECHCONTACT][0]=P-JUW40\r\nPROPERTY[TECHCONTACT][1]=P-JUW40\r\nPROPERTY[STATUS][0]=ACTIVE\r\nPROPERTY[STATUS][1]=ACTIVE clientTransferProhibited clientDeleteProhibited\r\nPROPERTY[OWNERCONTACT][0]=P-JUW40\r\nPROPERTY[OWNERCONTACT][1]=P-JUW40\r\nPROPERTY[TRANSFER-CREATEDDATE][0]=\r\nPROPERTY[TRANSFER-CREATEDDATE][1]=\r\nPROPERTY[FAILUREDATE][0]=2017-07-21 18:02:02\r\nPROPERTY[FAILUREDATE][1]=2017-05-01 09:37:25\r\nPROPERTY[RENEWALMODE][0]=AUTORENEW\r\nPROPERTY[RENEWALMODE][1]=AUTORENEW\r\nPROPERTY[MISSINGPARAMETER][0]=\r\nPROPERTY[MISSINGPARAMETER][1]=\r\nPROPERTY[LAST][0]=1\r\nPROPERTY[USER][0]=hom.hexonet.de\r\nPROPERTY[USER][1]=hom.hexonet.de\r\nPROPERTY[LIMIT][0]=2\r\nPROPERTY[NEXTACTIONDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[NEXTACTIONDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[PARENTUSER][0]=hexonet\r\nPROPERTY[PARENTUSER][1]=hexonet\r\nPROPERTY[EXPIRATIONDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[EXPIRATIONDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[SUBCLASS][0]=TOP\r\nPROPERTY[SUBCLASS][1]=ASIA\r\nPROPERTY[CLAIMKEY][0]=\r\nPROPERTY[CLAIMKEY][1]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][0]=\r\nPROPERTY[TRANSFER-OLDREGISTRAR][1]=\r\nPROPERTY[PREPAIDPERIOD][0]=0\r\nPROPERTY[PREPAIDPERIOD][1]=0\r\nPROPERTY[UPDATEDDATE][0]=2016-06-10 15:34:16\r\nPROPERTY[UPDATEDDATE][1]=2014-07-01 14:54:03\r\nPROPERTY[ROID][0]=\r\nPROPERTY[ROID][1]=\r\nPROPERTY[ADDON-TRUSTEE][0]=\r\nPROPERTY[ADDON-TRUSTEE][1]=\r\nPROPERTY[DESCRIPTION][0]=11112222.top\r\nPROPERTY[DESCRIPTION][1]=1api.asia\r\nPROPERTY[AUTH][0]=6FerWN!583\r\nPROPERTY[AUTH][1]=Clm6OKgYIB\r\nPROPERTY[PEERUSER][0]=\r\nPROPERTY[PEERUSER][1]=\r\nPROPERTY[BILLINGCONTACT][0]=P-JUW40\r\nPROPERTY[BILLINGCONTACT][1]=P-JUW40\r\nPROPERTY[PAIDUNTILDATE][0]=2017-06-07 18:02:02\r\nPROPERTY[PAIDUNTILDATE][1]=2017-03-18 09:37:25\r\nPROPERTY[RENEWALPERIOD][0]=1Y\r\nPROPERTY[RENEWALPERIOD][1]=1Y\r\nPROPERTY[COUNT][0]=2\r\nPROPERTY[TRANSFER-DIRECTION][0]=\r\nPROPERTY[TRANSFER-DIRECTION][1]=\r\nPROPERTY[INVALIDPARAMETER][0]=\r\nPROPERTY[INVALIDPARAMETER][1]=\r\nPROPERTY[ADMINCONTACT][0]=P-JUW40\r\nPROPERTY[ADMINCONTACT][1]=P-JUW40\r\nPROPERTY[INTERNALNAMESERVER][0]=ns3.ispapi.net ns1.ispapi.net ns2.ispapi.net\r\nPROPERTY[INTERNALNAMESERVER][1]=ns2010.1api.net ns3010.1api.net ns1010.1api.net\r\nPROPERTY[ACCOUNTINGDATE][0]=2017-06-02 18:02:02\r\nPROPERTY[ACCOUNTINGDATE][1]=2017-03-13 09:37:25\r\nPROPERTY[TRANSFER-NEWREGISTRAR][0]=\r\nPROPERTY[TRANSFER-NEWREGISTRAR][1]=\r\nPROPERTY[TRANSFER-STATUS][0]=\r\nPROPERTY[TRANSFER-STATUS][1]=\r\nPROPERTY[REPOSITORY][0]=ZODIAC-LIVE-1API\r\nPROPERTY[REPOSITORY][1]=ASIA-LIVE-1API\r\nPROPERTY[FIRST][0]=0\r\nPROPERTY[OBJECTID][0]=11112222.top\r\nPROPERTY[OBJECTID][1]=1api.asia\r\nPROPERTY[TRANSFERLOCK][0]=0\r\nPROPERTY[TRANSFERLOCK][1]=1\r\nPROPERTY[OBJECTCLASS][0]=DOMAIN\r\nPROPERTY[OBJECTCLASS][1]=DOMAIN\r\nDESCRIPTION=Command completed successfully\r\nCODE=200\r\nQUEUETIME=0\r\nRUNTIME=0.12\r\nEOF\r\n" | ||
}, | ||
error: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 2, | ||
PARAMNOTEXISTS: 1 | ||
}, | ||
RESPONSE: "[RESPONSE]\r\ncode=503\r\ndescription=Invalid Parameter: PARAMNOTEXISTS\r\nEOF\r\n" | ||
}, | ||
tmperror: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 2 | ||
}, | ||
RESPONSE: "[RESPONSE]\r\ncode=421\r\ndescription=Command failed due to server error. Client should try again\r\nEOF\r\n" | ||
} | ||
}, | ||
tmperror: { | ||
getuserindex: { | ||
COMMAND: { | ||
COMMAND: "QueryDomainList", | ||
VERSION: 2, | ||
NOTOTAL: 1, | ||
WIDE: 1, | ||
FIRST: 0, | ||
LIMIT: 2 | ||
COMMAND: "GetUserIndex" | ||
}, | ||
RESPONSE: "[RESPONSE]\r\ncode=421\r\ndescription=Command failed due to server error. Client should try again\r\nEOF\r\n" | ||
RESPONSE: { | ||
success: '[RESPONSE]\r\nPROPERTY[PARENTUSERINDEX][0]=199\r\nPROPERTY[USERINDEX][0]=659\r\ncode=200\r\ndescription=Command completed successfully\r\nqueuetime=0\r\nruntime=0.005\r\nEOF\r\n', | ||
error: '[RESPONSE]\r\ncode=530\r\ndescription=SESSION NOT FOUND\r\nqueuetime=0\r\nruntime=0.001\r\nEOF\r\n' | ||
} | ||
} | ||
}; |
@@ -14,10 +14,27 @@ /* jshint -W024 */ | ||
it("check format of the example templates in use", function() { | ||
['success', 'tmperror', 'error'].forEach(function(tpl){ | ||
['querydomainlist', 'getuserindex'].forEach(function(tpl){ | ||
expect(tpls).to.have.property(tpl); | ||
var cfg = tpls[tpl]; | ||
expect(cfg).to.be.an("object"); | ||
expect(cfg).to.have.property("COMMAND"); | ||
expect(cfg).to.have.property("RESPONSE"); | ||
expect(cfg.COMMAND).to.be.an("object"); | ||
expect(cfg.RESPONSE).to.be.an("string"); | ||
switch(tpl){ | ||
case 'querydomainlist': | ||
['error', 'success', 'tmperror', 'indexlength', 'multipage'].forEach(function(key){ | ||
expect(cfg).to.have.property(key); | ||
expect(cfg[key]).to.have.property("COMMAND"); | ||
expect(cfg[key]).to.have.property("RESPONSE"); | ||
expect(cfg[key].COMMAND).to.be.an("object"); | ||
expect(cfg[key].RESPONSE).to.be.an("string"); | ||
}); | ||
break; | ||
case 'getuserindex': | ||
expect(cfg).to.have.property('COMMAND'); | ||
expect(cfg).to.have.property('RESPONSE'); | ||
expect(cfg.COMMAND).to.be.an("object"); | ||
expect(cfg.RESPONSE).to.be.an("object"); | ||
['error', 'success'].forEach(function(key){ | ||
expect(cfg.RESPONSE).to.have.property(key); | ||
expect(cfg.RESPONSE[key]).to.be.an("string"); | ||
}); | ||
break; | ||
} | ||
}); | ||
@@ -24,0 +41,0 @@ }); |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
77886
5
19
1668
0