Skip to content

Commit

Permalink
Merge pull request #103 from devicehive/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
tmatvienko authored Oct 30, 2017
2 parents 2ff4988 + b884be7 commit 07c7d67
Show file tree
Hide file tree
Showing 15 changed files with 715 additions and 586 deletions.
1 change: 1 addition & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"ip": "127.0.0.1",
"port": "8080",
"restUrl": "http://localhost:8080/dh/rest",
"authRestUrl": "http://localhost:8090/dh/rest",
"backendRestUrl": "http://localhost:8090/dh/rest",
"jwt": "admin_token"
},
Expand Down
177 changes: 56 additions & 121 deletions integration-tests/common/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ var utils = {

url: getParam("restUrl") ,

authUrl: getParam("authRestUrl") ,

admin: {
login: 'dhadmin',
password: 'dhadmin_#911',
Expand All @@ -36,11 +38,11 @@ var utils = {
loggingOff: false,

jwt: {
admin: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InVzZXJJZCI6MSwiYWN0aW9ucyI6WyIqIl0sIm5ldHdvcmtJZHMiOlsiKiJdLCJkZXZpY2VJZHMiOlsiKiJdLCJleHBpcmF0aW9uIjoxNTU5MzQ3MjAwMDAwLCJ0b2tlblR5cGUiOiJBQ0NFU1MifX0.0WFWniapCEMcUriveLfvRG3wNQvC4IcEMcYYacrFXlU',
admin_refresh: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InVzZXJJZCI6MSwiYWN0aW9ucyI6WyIqIl0sIm5ldHdvcmtJZHMiOlsiKiJdLCJkZXZpY2VJZHMiOlsiKiJdLCJleHBpcmF0aW9uIjoxNTU5MzQ3MjAwMDAwLCJ0b2tlblR5cGUiOiJSRUZSRVNIIn19.kCFPLoGGoCyaHqS3Vv5tjK_d2xQcPKTsM2z4PjPP64Q',
admin_refresh_exp: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InVzZXJJZCI6MSwiYWN0aW9ucyI6WyIqIl0sIm5ldHdvcmtJZHMiOlsiKiJdLCJkZXZpY2VJZHMiOlsiKiJdLCJleHBpcmF0aW9uIjoxNDY0NzkzMjkwNTY0LCJ0b2tlblR5cGUiOiJSRUZSRVNIIn19.x_qb6Dy5zKmaD8IZ2E9fXCM894gcZ-Qj2L8CcCxruD8',
admin_refresh_invalid: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InVzZXJJZCI6MSwiYWN0aW9ucyI6WyIqIl0sIm5ldHdvcmtJZHMiOlsiKiJdLCJkZXZpY2VJZHMiOlsiKiJdLCJleHBpcmF0aW9uIjoxNTE0NzY0ODAwMDAwLCJ0b2tlblR5cGUiOiJBQ0NFU1MifX0.OhEltY7vNKZMo-JLPb9MxB3LUwbXrP_Arhajp_pYSc0',
admin_refresh_invalid_signature: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InVzZXJJZCI6MSwiYWN0aW9ucyI6WyIqIl0sIm5ldHdvcmtJZHMiOlsiKiJdLCJkZXZpY2VJZHMiOlsiKiJdLCJleHBpcmF0aW9uIjoxNTU5MzQ3MjAwMDAwLCJ0b2tlblR5cGUiOiJSRUZSRVNIIn19.kCFPLoGGoCyaHqS3Vv5tjK_d2xQcPKTsM2z4PhKP64Q',
admin: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InUiOjEsImEiOlswXSwibiI6WyIqIl0sImQiOlsiKiJdLCJlIjoxNTU5MzQ3MjAwMDAwLCJ0IjoxfX0.pBjhmAQ31t5Y1AogEau8m8nCDjRCCndBLtQ3f6R-IBw',
admin_refresh: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InUiOjEsImEiOlswXSwibiI6WyIqIl0sImQiOlsiKiJdLCJlIjoxNTU5MzQ3MjAwMDAwLCJ0IjowfX0.ocTz-0FY_I0QY3TqIqyCBKBNX4xN-N7IdHWqUY865Hw',
admin_refresh_exp: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InUiOjEsImEiOlswXSwibiI6WyIqIl0sImQiOlsiKiJdLCJlIjoxNDY0NzkzMjkwNTY0LCJ0IjowfX0.njLWzNksQ29hwT0hvxZVxQY0MQA5JHrZHPv6x6YEaqI',
admin_refresh_invalid: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InUiOjEsImEiOlswXSwibiI6WyIqIl0sImQiOlsiKiJdLCJlIjoxNTE0NzY0ODAwMDAwLCJ0IjoxfX0.dkA2H1MGmJHdAT382tqt-xhcmwwlTimGwnabS5HdfJc',
admin_refresh_invalid_signature: 'eyJhbGciOiJIUzI1NiJ9.eyJwYXlsb2FkIjp7InUiOjEsImEiOlswXSwibiI6WyIqIl0sImQiOlsiKiJdLCJlIjoxNTU5MzQ3MjAwMDAwLCJ0IjowfX0.lo2T-wbXe1J9DvVyxJtFkNlo76uH_kSVwVY-FxLZRkk',
createMany: function (params, done) {
var paramsCopy = params.slice(0);
function createJWT(callback) {
Expand Down Expand Up @@ -102,124 +104,27 @@ var utils = {
var expDate = new Date();
expDate.setFullYear(expDate.getFullYear() + 10);

utils.create(path.JWT + '/create', {jwt: utils.jwt.admin, data: {userId: userId, actions: actions, networkIds: networkIds, deviceIds: deviceIds, expiration: expDate }}, callback);
utils.createAuth(path.JWT + '/create', {jwt: utils.jwt.admin, data: {userId: userId, actions: actions, networkIds: networkIds, deviceIds: deviceIds, expiration: expDate }}, callback);
}
},

accessKey: {

admin: "1jwKgLYi/CdfBTI9KByfYxwyQ6HUIEfnGSgakdpFjgk=",

createMany: function (params, done) {
var paramsCopy = params.slice(0);

function createAccessKey(callback) {
var p = paramsCopy.shift();
setTimeout(function () {
utils.accessKey.create(p.user, p.label, p.actions, p.deviceIds, p.networkIds,
function (err, result) {
if (err) {
callback(err);
}

callback(null, result.key);
})
}, 10);
}

var callbacks = [];
for (var i = 0; i < params.length; i++) {
callbacks.push(
createAccessKey
);
}

async.series(callbacks, done);
},

create: function (user, label, actions, deviceIds, networkIds, callback) {

label || (label = utils.getName('access-key'));

if (actions && !Array.isArray(actions)) {
actions = [actions];
}

if (deviceIds && !Array.isArray(deviceIds)) {
deviceIds = [deviceIds];
}

if (networkIds && !Array.isArray(networkIds)) {
networkIds = [networkIds];
}

var expDate = new Date();
expDate.setFullYear(expDate.getFullYear() + 10);

var params = this.getParamsObj(label, user, expDate, void 0, networkIds, actions, deviceIds, void 0);
utils.create(path.CURRENT_ACCESS_KEY, params, callback);
},

getParams: function (label, user, expDate, domains, networkIds, actions, deviceIds, subnets) {

expDate || (expDate = new Date());
expDate.setFullYear(expDate.getFullYear() + 10);

return this.getParamsObj(label, user, expDate,
domains || ['www.example.com'],
networkIds || [1, 2],
actions || ['GetNetwork', 'GetDevice'],
deviceIds || ['11111111-2222-3333-4444-555555555555'],
subnets || ['127.0.0.1']);
},

getParamsObj: function (label, user, expDate, domains, networkIds, actions, deviceIds, subnets) {

var permission = {};

if (domains) {
permission.domains = domains;
}

if (networkIds) {
permission.networkIds = networkIds;
}

if (actions) {
permission.actions = actions;
}

if (deviceIds) {
permission.deviceIds = deviceIds;
}

if (subnets) {
permission.subnets = subnets;
}

var params = {
data: {
label: label,
permissions: [permission]
}
};

if (user) {
params.user = user;
}

if (expDate) {
params.data.expirationDate = expDate.toISOString();
}

return params;
},

expectAccessKey: function (actual, expected) {
assert.strictEqual(+new Date(actual.expirationDate), +new Date(expected.expirationDate));
assert.strictEqual(actual.label, expected.label);
assert.deepEqual(actual.permissions, expected.permissions);
}

action: {
Any: 0,
None: 1,
GetNetwork: 2,
GetDevice: 3,
GetDeviceNotification: 4,
GetDeviceCommand: 5,
RegisterDevice: 6,
CreateDeviceCommand: 7,
UpdateDeviceCommand: 8,
CreateDeviceNotification: 9,
GetCurrentUser: 10,
UpdateCurrentUser: 11,
ManageUser: 12,
ManageConfiguration: 13,
ManageNetwork: 14,
ManageToken: 15
},

device: {
Expand Down Expand Up @@ -299,6 +204,21 @@ var utils = {
});
},

createAuth: function ($path, params, cb) {
new Http(this.authUrl, $path, this.loggingOff)
.post(params, function (err, result, xhr) {
if (err) {
err.httpStatus = xhr.status;
return cb(err);
}

var resource = path.get($path, result.id);
assert.strictEqual(xhr.status, status.EXPECTED_CREATED);

cb(null, result, resource);
});
},

get: function ($path, params, cb, responseStatus) {
if(!responseStatus){responseStatus = status.EXPECTED_READ}
new Http(this.url, path.get($path, params.id, params.query), this.loggingOff)
Expand All @@ -314,6 +234,21 @@ var utils = {
});
},

getAuth: function ($path, params, cb, responseStatus) {
if(!responseStatus){responseStatus = status.EXPECTED_READ}
new Http(getParam("authRestUrl"), path.get($path, params.id, params.query), this.loggingOff)
.get(params, function (err, result, xhr) {
if (err) {
err.httpStatus = xhr.status;
return cb(err);
}

assert.strictEqual(xhr.status, responseStatus);

cb(null, result);
});
},

getBackend: function ($path, params, cb, responseStatus) {
if(!responseStatus){responseStatus = status.EXPECTED_READ}
new Http(getParam("backendRestUrl"), path.get($path, params.id, params.query), this.loggingOff)
Expand Down
2 changes: 1 addition & 1 deletion integration-tests/common/websocket.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ Websocket.prototype = {

self.context.handled = true;
done(new Error('send() timeout: hasn\'t got message \'' + self.context.params.action + '\''));
}, 20000);
}, 30000);
},

waitFor: function (action, timeout, callback) {
Expand Down
58 changes: 32 additions & 26 deletions integration-tests/rest-api-info.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,41 @@ var utils = require('./common/utils');
var path = require('./common/path');

describe('REST API Info', function () {

it('should return api info', function (done) {
utils.get(path.INFO, {}, function (err, result) {
if (err) {
done(err);
}

assert.strictEqual(utils.core.hasStringValue(result.apiVersion), true);
assert.strictEqual(utils.core.hasStringValue(result.serverTimestamp), true);
assert.strictEqual(utils.core.hasStringValue(result.webSocketServerUrl), true);

done();
})
});

it('should return cache info', function (done) {
utils.get(path.INFO_CACHE, {}, function (err, result) {
if (err) {
done(err);
}

assert.strictEqual(utils.core.hasStringValue(result.serverTimestamp), true);
assert.strictEqual(utils.core.hasStringValue(result.cacheStats), true);

done();
})
this.timeout(90000);

describe('Should Return Info', function () {

it('should return api info', function (done) {
utils.get(path.INFO, {}, function (err, result) {
if (err) {
done(err);
}

assert.strictEqual(utils.core.hasStringValue(result.apiVersion), true);
assert.strictEqual(utils.core.hasStringValue(result.serverTimestamp), true);
assert.strictEqual(utils.core.hasStringValue(result.webSocketServerUrl), true);

done();
});
});

it('should return cache info', function (done) {
utils.get(path.INFO_CACHE, {}, function (err, result) {
if (err) {
done(err);
}

assert.strictEqual(utils.core.hasStringValue(result.serverTimestamp), true);
assert.strictEqual(utils.core.hasStringValue(result.cacheStats), true);

done();
});
});

});

after(function (done) {
utils.clearDataJWT(done);
});

});
3 changes: 3 additions & 0 deletions integration-tests/rest-configuration.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,5 +151,8 @@ describe('REST API Configuration', function () {
});
});

after(function (done) {
utils.clearDataJWT(done);
});

});
Loading

0 comments on commit 07c7d67

Please sign in to comment.