diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-11-02 13:17:11 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-11-02 13:17:11 -0800 |
commit | fd3916a49e7923e95c47c70afb8696f110b79951 (patch) | |
tree | 5008ae1856ad91cbd599614c99001b3aafd7882e /tests/http/agent.js | |
parent | e53ef9642e0201880672699ca12edd50d103be9e (diff) | |
download | infinitytier-fd3916a49e7923e95c47c70afb8696f110b79951.tar.gz infinitytier-fd3916a49e7923e95c47c70afb8696f110b79951.zip |
More test stuff... make it more granular and less batch based.
Diffstat (limited to 'tests/http/agent.js')
-rw-r--r-- | tests/http/agent.js | 132 |
1 files changed, 87 insertions, 45 deletions
diff --git a/tests/http/agent.js b/tests/http/agent.js index e11fed60..1d4a4320 100644 --- a/tests/http/agent.js +++ b/tests/http/agent.js @@ -3,21 +3,23 @@ // --------------------------------------------------------------------------- // Customizable parameters: -// Maximum test duration in milliseconds -var TEST_DURATION = (30 * 1000); +// Maximum interval between test attempts +//var TEST_INTERVAL_MAX = (60 * 1 * 1000); +var TEST_INTERVAL_MAX = 1000; -// Interval between tests (should be several times longer than TEST_DURATION) -var TEST_INTERVAL = (60 * 2 * 1000); +// Test timeout in ms +var TEST_TIMEOUT = 30000; // Where should I contact to register and query a list of other test agents? -var SERVER_HOST = '104.238.141.145'; +var SERVER_HOST = '127.0.0.1'; +//var SERVER_HOST = '104.238.141.145'; var SERVER_PORT = 18080; // Which port should agents use for their HTTP? var AGENT_PORT = 18888; // Payload size in bytes -var PAYLOAD_SIZE = 100000; +var PAYLOAD_SIZE = 10000; // --------------------------------------------------------------------------- @@ -72,9 +74,6 @@ for(var xx=0;xx<PAYLOAD_SIZE;++xx) { payload.writeUInt8(Math.round(Math.random() * 255.0),xx); } -// Incremented with each test -var testNumber = 0; - function agentIdToIp(agentId) { var ip = ''; @@ -96,32 +95,93 @@ function agentIdToIp(agentId) return ip; }; -function registerAndGetPeers(callback) +var lastTestResult = null; +var allOtherAgents = []; + +function doTest() { - http.get({ + var submit = http.request({ host: SERVER_HOST, port: SERVER_PORT, - path: '/'+thisAgentId + path: '/'+thisAgentId, + method: 'POST' },function(res) { var body = ''; res.on('data',function(chunk) { body += chunk.toString(); }); res.on('end',function() { - if (!body) - return callback(null,[]); - try { - var peers = JSON.parse(body); - if (Array.isArray(peers)) - return callback(null,peers); - else return callback(new Error('invalid JSON response from server'),null); - } catch (e) { - return callback(new Error('invalid JSON response from server: '+e.toString()),null); + + if (body) { + try { + var peers = JSON.parse(body); + if (Array.isArray(peers)) + allOtherAgents = peers; + } catch (e) {} + } + + if (allOtherAgents.length > 0) { + + var target = allOtherAgents[Math.floor(Math.random() * allOtherAgents.length)]; + + var testRequest = null; + var timeoutId = null; + timeoutId = setTimeout(function() { + if (testRequest !== null) + testRequest.abort(); + timeoutId = null; + }); + var startTime = Date.now(); + + testRequest = http.get({ + host: agentIdToIp(target), + port: AGENT_PORT, + path: '/' + },function(res) { + var bytes = 0; + res.on('data',function(chunk) { bytes += chunk.length; }); + res.on('end',function() { + lastTestResult = { + source: thisAgentId, + target: target, + time: (Date.now() - startTime), + bytes: bytes, + timedOut: (timeoutId === null), + error: null + }; + if (timeoutId !== null) + clearTimeout(timeoutId); + return setTimeout(doTest,Math.round(Math.random() * TEST_INTERVAL_MAX) + 1); + }); + }).on('error',function(e) { + lastTestResult = { + source: thisAgentId, + target: target, + time: (Date.now() - startTime), + bytes: 0, + timedOut: (timeoutId === null), + error: e.toString() + }; + if (timeoutId !== null) + clearTimeout(timeoutId); + return setTimeout(doTest,Math.round(Math.random() * TEST_INTERVAL_MAX) + 1); + }); + + } else { + return setTimeout(doTest,Math.round(Math.random() * TEST_INTERVAL_MAX) + 1); } + }); }).on('error',function(e) { - return callback(e,null); + console.log('POST failed: '+e.toString()); + return setTimeout(doTest,1000); }); + if (lastTestResult !== null) { + submit.write(JSON.stringify(lastTestResult)); + lastTestResult = null; + } + submit.end(); }; +/* function performTestOnAllPeers(peers,callback) { var allResults = {}; @@ -191,11 +251,10 @@ function doTestsAndReport() console.error('WARNING: skipping test: unable to contact or query server: '+err.toString()); } else { performTestOnAllPeers(peers,function(results) { - ++testNumber; var submit = http.request({ host: SERVER_HOST, port: SERVER_PORT, - path: '/'+testNumber+'/'+thisAgentId, + path: '/'+thisAgentId, method: 'POST' },function(res) { }).on('error',function(e) { @@ -207,29 +266,12 @@ function doTestsAndReport() } }); }; +*/ // Agents just serve up a test payload -app.get('/',function(req,res) { - return res.status(200).send(payload); -}); +app.get('/',function(req,res) { return res.status(200).send(payload); }); var expressServer = app.listen(AGENT_PORT,function () { - var serverUp = false; - async.whilst( - function() { return (!serverUp); }, - function(nextTry) { - registerAndGetPeers(function(err,peers) { - if ((err)||(!peers)) { - setTimeout(nextTry,1000); - } else { - serverUp = true; - return nextTry(null); - } - }); - }, - function(err) { - console.log('Server up, starting!'); - doTestsAndReport(); - setInterval(doTestsAndReport,TEST_INTERVAL); - }); + // Start timeout-based loop + doTest(); }); |