1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2026-01-01 16:13:53 +00:00

Added to file system tests, and added Windows Handle Tracking

This commit is contained in:
Bryan Roe
2022-08-02 01:33:39 -07:00
parent 7cffca38f5
commit 784f96ce95

View File

@@ -22,6 +22,25 @@ process.coreDumpLocation = process.platform == 'win32' ? (process.execPath.repla
var updateSource = null;
var promise = require('promise');
if (process.platform == 'win32') { global.kernel32 = require('_GenericMarshal').CreateNativeProxy('kernel32.dll'); global.kernel32.CreateMethod('GetCurrentProcess'); global.kernel32.CreateMethod('GetProcessHandleCount'); }
function getHandleCount()
{
var ret = 0;
switch(process.platform)
{
case 'win32':
var h = kernel32.GetCurrentProcess();
var c = require('_GenericMarshal').CreateVariable(4);
kernel32.GetProcessHandleCount(h, c);
ret = c.toBuffer().readUInt32LE();
break;
default:
break;
}
return (ret);
}
try
{
Object.defineProperty(Array.prototype, 'getParameterEx',
@@ -216,7 +235,10 @@ var promises =
filetransfer: null,
terminal: null,
kvm: null,
smbios_check: null
smbios_check: null,
fs_1: null,
fs_2: null,
fs_3: null
};
function generateRandomNumber(lower, upper)
@@ -769,6 +791,12 @@ server.on('upgrade', function (msg, sck, head)
SMBIOS_Test().finally(function () { endTest(); });
return;
}
if (process.argv.getParameter('MODULES') != null)
{
MODULES_Test().finally(function () { endTest(); });
return;
}
//
// Run thru the main tests, becuase no special options were sent
//
@@ -903,6 +931,77 @@ server.on('upgrade', function (msg, sck, head)
});
});
function MODULES_Test()
{
var ret;
ret = fs_test();
return (ret);
}
function fs_test()
{
var ret = new promise(promise.defaultInit);
process.stdout.write(' Module Tests:\n');
process.stdout.write(' File System Tests\n');
process.stdout.write(' fs.readFileSync().................................[WAITING]');
sendEval("global._fsh1=getHandleCount();");
sendEval("var test1 = require('fs').readFileSync(process.execPath);");
sendEval("global._fsh2=getHandleCount();");
sendEval("selfTestResponse('fs_1', true, {pre: global._fsh1, post: global._fsh2});");
promises.fs_1.then(function (r)
{
process.stdout.write('\r fs.readFileSync().................................[OK] \n');
process.stdout.write(' => Handle Counts (Pre/Post): ' + r.reason.pre + '/' + r.reason.post + '\n');
}).then(function ()
{
var tmp = generateRandomString(5);
process.stdout.write(' fs.writeFileSync()................................[WAITING]');
sendEval("var testh=getHandleCount();");
sendEval("var testname='" + tmp + "';");
sendEval("var testvalue=Buffer.alloc(" + generateRandomNumber(1024, 4096) + ");");
sendEval("testvalue.randomFill();");
sendEval("require('fs').writeFileSync(testname, testvalue);");
sendEval("var testx = require('fs').existsSync(testname);");
sendEval("var testcount=getHandleCount();");
sendEval("selfTestResponse('fs_2', testx, {pre: testh, post: testcount});");
});
promises.fs_2.then(function (r)
{
process.stdout.write('\r fs.writeFileSync()................................[OK] \n');
process.stdout.write(' fs.existsSync()...................................[OK] \n');
process.stdout.write(' => Handle Counts (Pre/Post): ' + r.reason.pre + '/' + r.reason.post + '\n');
}).then(function ()
{
process.stdout.write(' fs.renameSync()...................................[WAITING]');
sendEval("var renamedfile = '" + generateRandomString(5) + "'");
sendEval("testh=getHandleCount();");
sendEval("require('fs').renameSync(testname,renamedfile);");
sendEval("testcount=getHandleCount();");
sendEval("var testx = !require('fs').existsSync(testname) && require('fs').existsSync(renamedfile);");
sendEval("selfTestResponse('fs_3', testx, {pre: testh, post: testcount});");
});
promises.fs_3.then(function (r)
{
process.stdout.write('\r fs.renameSync()...................................[OK] \n');
process.stdout.write(' => Handle Counts (Pre/Post): ' + r.reason.pre + '/' + r.reason.post + '\n');
ret.resolve();
}).catch(function ()
{
process.stdout.write('\r fs.renameSync()...................................[FAILED] \n');
ret.reject('rename failed');
});
return (ret);
}
function SMBIOS_Test()
{
var ret;
@@ -1750,8 +1849,24 @@ function sendEval(cmd)
if (process.argv.getParameter('AgentsFolder') != null)
{
var helper = "function getHandleCount()\
{\
var ret = 0;\
switch (process.platform)\
{\
case 'win32':\
var h = kernel32.GetCurrentProcess();\
var c = require('_GenericMarshal').CreateVariable(4);\
kernel32.GetProcessHandleCount(h, c);\
ret = c.toBuffer().readUInt32LE();\
break;\
default:\
break;\
}\
return (ret);\
}";
var folder = process.argv.getParameter('AgentsFolder');
if (folder.endsWith('/')) { folder = folder.split('/'); folder.pop(); folder = folder.join('/'); }
if (folder.endsWith('\\')) { folder = folder.split('\\'); folder.pop(); folder = folder.join('\\'); }
@@ -1765,6 +1880,8 @@ if (process.argv.getParameter('AgentsFolder') != null)
{
lines.push("console.enableWebLog(" + remoteDebug + ");");
}
lines.push("if (process.platform == 'win32') { global.kernel32 = require('_GenericMarshal').CreateNativeProxy('kernel32.dll'); global.kernel32.CreateMethod('GetCurrentProcess'); global.kernel32.CreateMethod('GetProcessHandleCount'); }");
lines.push(helper);
lines.push("process.coreDumpLocation = process.platform == 'win32' ? (process.execPath.replace('.exe', '.dmp')) : (process.execPath + '.dmp');");
lines.push("function selfTestResponse(id, result, reason) { require('MeshAgent').SendCommand({ action: 'result', id: id, result: result, reason: reason }); }");
for (i = 0; i < modules_folder.length; ++i)