/* jshint -W097 */// jshint strict:false /*jslint node: true */ var expect = require('chai').expect; var setup = require(__dirname + '/lib/setup'); var objects = null; var states = null; var onStateChanged = null; var onObjectChanged = null; var sendToID = 1; var adapterShortName = setup.adapterName.substring(setup.adapterName.indexOf('.') + 1); var runningMode = require(__dirname + '/../io-package.json').common.mode; function checkConnectionOfAdapter(cb, counter) { counter = counter || 0; console.log('Try check #' + counter); if (counter > 30) { if (cb) cb('Cannot check connection'); return; } states.getState('system.adapter.' + adapterShortName + '.0.alive', function (err, state) { if (err) console.error(err); if (state && state.val) { if (cb) cb(); } else { setTimeout(function () { checkConnectionOfAdapter(cb, counter + 1); }, 1000); } }); } function checkValueOfState(id, value, cb, counter) { counter = counter || 0; if (counter > 20) { if (cb) cb('Cannot check value Of State ' + id); return; } states.getState(id, function (err, state) { if (err) console.error(err); if (value === null && !state) { if (cb) cb(); } else if (state && (value === undefined || state.val === value)) { if (cb) cb(); } else { setTimeout(function () { checkValueOfState(id, value, cb, counter + 1); }, 500); } }); } function sendTo(target, command, message, callback) { onStateChanged = function (id, state) { if (id === 'messagebox.system.adapter.test.0') { callback(state.message); } }; states.pushMessage('system.adapter.' + target, { command: command, message: message, from: 'system.adapter.test.0', callback: { message: message, id: sendToID++, ack: false, time: (new Date()).getTime() } }); } describe('Test ' + adapterShortName + ' adapter', function() { before('Test ' + adapterShortName + ' adapter: Start js-controller', function (_done) { this.timeout(600000); // because of first install from npm setup.setupController(function () { var config = setup.getAdapterConfig(); // enable adapter config.common.enabled = true; config.common.loglevel = 'debug'; config.native.announce = 'gong.mp3'; setup.setAdapterConfig(config.common, config.native); setup.startController(true, function(id, obj) {}, function (id, state) { if (onStateChanged) onStateChanged(id, state); }, function (_objects, _states) { objects = _objects; states = _states; _done(); }); }); }); it('Test ' + adapterShortName + ' instance object: it must exists', function (done) { objects.getObject('system.adapter.' + adapterShortName + '.0', function (err, obj) { expect(err).to.be.null; expect(obj).to.be.an('object'); expect(obj).not.to.be.null; done(); }); }); it('Test ' + adapterShortName + ' adapter: Check if adapter started', function (done) { this.timeout(60000); checkConnectionOfAdapter(function (res) { if (res) console.log(res); if (runningMode === 'daemon') { expect(res).not.to.be.equal('Cannot check connection'); } else { //?? } done(); }); }); /**/ /* PUT YOUR OWN TESTS HERE USING it('Testname', function ( done) { ... }); You can also use "sendTo" method to send messages to the started adapter */ after('Test ' + adapterShortName + ' adapter: Stop js-controller', function (done) { this.timeout(10000); setup.stopController(function (normalTerminated) { console.log('Adapter normal terminated: ' + normalTerminated); done(); }); }); });