docker_images/node/wrapper/glue/controlGlue.js (89 lines of code) (raw):
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
'use strict';
/*jshint esversion: 6 */
var async = require('async');
var debug = require('debug')('azure-iot-e2e:node')
var glueUtils = require('./glueUtils');
var moduleGlue = require('./moduleGlue');
var registryGlue = require('./registryGlue');
var serviceGlue = require('./serviceGlue');
var deviceGlue = require('./deviceGlue');
var process = require('process')
/**
* Cleanup an individual glue module
*/
var cleanupGlueModule = function(mod, callback) {
var remainingObjects = mod._objectCache.getMap();
async.forEachSeries(Object.keys(remainingObjects), function(objectId, callback) {
if (objectId.indexOf('response_') === 0) {
// not a failure
debug(`removing dangling object ${objectId}`);
mod._objectCache.removeObject(objectId);
callback();
} else {
debug('Cleaning up ' + objectId);
var obj = mod._objectCache.removeObject(objectId);
var closeFunc = obj.close || obj.closeClient;
if (closeFunc) {
try {
closeFunc.bind(obj)(function(err) {
if (err) {
debug('ignoring close error: ' + err.message);
}
callback();
})
} catch (e) {
debug('ignoring close exception: ' + e.message);
callback();
}
} else {
callback();
}
}
}, callback);
};
/**
* verify that the clients have cleaned themselves up completely
*
* no response value expected for this operation
**/
exports.control_Cleanup = function() {
debug('control_Cleanup called')
return glueUtils.makePromise('control_Cleanup', function(callback) {
var objectsToClean = [
moduleGlue,
serviceGlue,
registryGlue,
deviceGlue
];
async.forEachSeries(objectsToClean, cleanupGlueModule, callback);
});
}
/**
* Get capabilities for this test wrapper
*
* returns Object
**/
exports.control_GetCapabilities = function() {
return new Promise(function(resolve, reject) {
debug("returning capabilities");
var caps = {
'flags': {
'v2_connect_group': true,
'system_control_app': true,
}
};
resolve(caps);
});
}
/**
* log a message to output
*
* msg Object
* no response value expected for this operation
**/
exports.control_LogMessage = function(msg) {
return new Promise(function(resolve, reject) {
if (msg.message) {
debug(msg.message);
} else {
debug(msg);
}
resolve();
});
}
/**
* send an arbitrary command
*
* cmd String command string
* no response value expected for this operation
**/
exports.control_SendCommand = function(cmd) {
return glueUtils.returnNotImpl()
}
/**
* set flags for the wrapper to use
*
* flags Object
* no response value expected for this operation
**/
exports.control_SetFlags = function(flags) {
return glueUtils.returnNotImpl()
}
/**
* Get statistics about the operation of the test wrapper
*
* returns Object
**/
exports.control_GetWrapperStats = function() {
return new Promise(function(resolve, reject) {
debug('returning stats');
var stats = {
'language': 'node',
'languageVersion': process.version,
'wrapperPid': process.pid
};
resolve(stats);
});
}