mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-06 12:33:44 +02:00
test stuff
This commit is contained in:
parent
1cae7327ae
commit
07c1b4ddee
4 changed files with 83 additions and 80 deletions
|
@ -17,7 +17,7 @@ ADD zerotier-one /
|
||||||
RUN chmod a+x /zerotier-one
|
RUN chmod a+x /zerotier-one
|
||||||
|
|
||||||
ADD agent.js /
|
ADD agent.js /
|
||||||
ADD main.sh /
|
ADD docker-main.sh /
|
||||||
RUN chmod a+x /docker-main.sh
|
RUN chmod a+x /docker-main.sh
|
||||||
|
|
||||||
CMD ["./docker-main.sh"]
|
CMD ["./docker-main.sh"]
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// Customizable parameters:
|
// Customizable parameters:
|
||||||
|
|
||||||
// How frequently in ms to run tests
|
// Maximum test duration in milliseconds
|
||||||
//var RUN_TEST_EVERY = (60 * 5 * 1000);
|
var TEST_DURATION = (30 * 1000);
|
||||||
var RUN_TEST_EVERY = 1000;
|
|
||||||
|
|
||||||
// Maximum test duration in milliseconds (must be less than RUN_TEST_EVERY)
|
// Interval between tests (should be several times longer than TEST_DURATION)
|
||||||
var TEST_DURATION = (60 * 1000);
|
var TEST_INTERVAL = (60 * 2 * 1000);
|
||||||
|
|
||||||
// Where should I contact to register and query a list of other nodes?
|
// Where should I contact to register and query a list of other test agents?
|
||||||
var SERVER_HOST = '174.136.102.178';
|
var SERVER_HOST = '174.136.102.178';
|
||||||
var SERVER_PORT = 18080;
|
var SERVER_PORT = 18080;
|
||||||
|
|
||||||
|
@ -71,8 +70,29 @@ for(var xx=0;xx<PAYLOAD_SIZE;++xx) {
|
||||||
payload.writeUInt8(Math.round(Math.random() * 255.0),xx);
|
payload.writeUInt8(Math.round(Math.random() * 255.0),xx);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Incremented for each test
|
// Incremented with each test
|
||||||
var testCounter = 0;
|
var testNumber = 0;
|
||||||
|
|
||||||
|
function agentIdToIp(agentId)
|
||||||
|
{
|
||||||
|
var ip = '';
|
||||||
|
ip += agentId.substr(0,4);
|
||||||
|
ip += ':';
|
||||||
|
ip += agentId.substr(4,4);
|
||||||
|
ip += ':';
|
||||||
|
ip += agentId.substr(8,4);
|
||||||
|
ip += ':';
|
||||||
|
ip += agentId.substr(12,4);
|
||||||
|
ip += ':';
|
||||||
|
ip += agentId.substr(16,4);
|
||||||
|
ip += ':';
|
||||||
|
ip += agentId.substr(20,4);
|
||||||
|
ip += ':';
|
||||||
|
ip += agentId.substr(24,4);
|
||||||
|
ip += ':';
|
||||||
|
ip += agentId.substr(28,4);
|
||||||
|
return ip;
|
||||||
|
};
|
||||||
|
|
||||||
function registerAndGetPeers(callback)
|
function registerAndGetPeers(callback)
|
||||||
{
|
{
|
||||||
|
@ -84,13 +104,15 @@ function registerAndGetPeers(callback)
|
||||||
var body = '';
|
var body = '';
|
||||||
res.on('data',function(chunk) { body += chunk.toString(); });
|
res.on('data',function(chunk) { body += chunk.toString(); });
|
||||||
res.on('end',function() {
|
res.on('end',function() {
|
||||||
|
if (!body)
|
||||||
|
return callback(null,[]);
|
||||||
try {
|
try {
|
||||||
var peers = JSON.parse(body);
|
var peers = JSON.parse(body);
|
||||||
if (Array.isArray(peers))
|
if (Array.isArray(peers))
|
||||||
return callback(null,peers);
|
return callback(null,peers);
|
||||||
else return callback(new Error('invalid JSON response from server'),null);
|
else return callback(new Error('invalid JSON response from server'),null);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return callback(new Error('invalid JSON response from server'),null);
|
return callback(new Error('invalid JSON response from server: '+e.toString()),null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}).on('error',function(e) {
|
}).on('error',function(e) {
|
||||||
|
@ -101,12 +123,13 @@ function registerAndGetPeers(callback)
|
||||||
function performTestOnAllPeers(peers,callback)
|
function performTestOnAllPeers(peers,callback)
|
||||||
{
|
{
|
||||||
var allResults = {};
|
var allResults = {};
|
||||||
|
var allRequests = [];
|
||||||
var timedOut = false;
|
var timedOut = false;
|
||||||
var endOfTestTimer = setTimeout(function() {
|
var endOfTestTimer = setTimeout(function() {
|
||||||
timedOut = true;
|
timedOut = true;
|
||||||
return callback(allResults);
|
for(var x=0;x<allRequests.length;++x)
|
||||||
|
allRequests[x].abort();
|
||||||
},TEST_DURATION);
|
},TEST_DURATION);
|
||||||
var testStartTime = Date.now();
|
|
||||||
|
|
||||||
async.each(peers,function(peer,next) {
|
async.each(peers,function(peer,next) {
|
||||||
if (timedOut)
|
if (timedOut)
|
||||||
|
@ -116,33 +139,15 @@ function performTestOnAllPeers(peers,callback)
|
||||||
|
|
||||||
var connectionStartTime = Date.now();
|
var connectionStartTime = Date.now();
|
||||||
allResults[peer] = {
|
allResults[peer] = {
|
||||||
testStart: testStartTime,
|
|
||||||
start: connectionStartTime,
|
start: connectionStartTime,
|
||||||
end: null,
|
end: 0,
|
||||||
error: null,
|
error: null,
|
||||||
bytes: 0,
|
timedOut: false,
|
||||||
test: testCounter
|
bytes: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
var peerHost = '';
|
allRequests.push(http.get({
|
||||||
peerHost += peer.substr(0,4);
|
host: agentIdToIp(peer),
|
||||||
peerHost += ':';
|
|
||||||
peerHost += peer.substr(4,4);
|
|
||||||
peerHost += ':';
|
|
||||||
peerHost += peer.substr(8,4);
|
|
||||||
peerHost += ':';
|
|
||||||
peerHost += peer.substr(12,4);
|
|
||||||
peerHost += ':';
|
|
||||||
peerHost += peer.substr(16,4);
|
|
||||||
peerHost += ':';
|
|
||||||
peerHost += peer.substr(20,4);
|
|
||||||
peerHost += ':';
|
|
||||||
peerHost += peer.substr(24,4);
|
|
||||||
peerHost += ':';
|
|
||||||
peerHost += peer.substr(28,4);
|
|
||||||
|
|
||||||
http.get({
|
|
||||||
host: peerHost,
|
|
||||||
port: AGENT_PORT,
|
port: AGENT_PORT,
|
||||||
path: '/'
|
path: '/'
|
||||||
},function(res) {
|
},function(res) {
|
||||||
|
@ -151,67 +156,44 @@ function performTestOnAllPeers(peers,callback)
|
||||||
bytes += chunk.length;
|
bytes += chunk.length;
|
||||||
});
|
});
|
||||||
res.on('end',function() {
|
res.on('end',function() {
|
||||||
if (timedOut)
|
|
||||||
return next(null);
|
|
||||||
allResults[peer] = {
|
allResults[peer] = {
|
||||||
testStart: testStartTime,
|
|
||||||
start: connectionStartTime,
|
start: connectionStartTime,
|
||||||
end: Date.now(),
|
end: Date.now(),
|
||||||
error: null,
|
error: null,
|
||||||
bytes: bytes,
|
timedOut: timedOut,
|
||||||
test: testCounter
|
bytes: bytes
|
||||||
};
|
};
|
||||||
return next(null);
|
return next(null);
|
||||||
});
|
});
|
||||||
}).on('error',function(e) {
|
}).on('error',function(e) {
|
||||||
if (timedOut)
|
|
||||||
return next(null);
|
|
||||||
allResults[peer] = {
|
allResults[peer] = {
|
||||||
testStart: testStartTime,
|
|
||||||
start: connectionStartTime,
|
start: connectionStartTime,
|
||||||
end: Date.now(),
|
end: Date.now(),
|
||||||
error: e.toString(),
|
error: e.toString(),
|
||||||
bytes: 0,
|
timedOut: timedOut,
|
||||||
test: testCounter
|
bytes: 0
|
||||||
};
|
};
|
||||||
return next(null);
|
return next(null);
|
||||||
});
|
}));
|
||||||
},function(err) {
|
},function(err) {
|
||||||
if (!timedOut) {
|
if (!timedOut)
|
||||||
clearTimeout(endOfTestTimer);
|
clearTimeout(endOfTestTimer);
|
||||||
return callback(allResults);
|
return callback(allResults);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Agents just serve up a test payload
|
function doTestsAndReport()
|
||||||
app.get('/',function(req,res) {
|
{
|
||||||
return res.status(200).send(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
var expressServer = app.listen(AGENT_PORT,function () {
|
|
||||||
registerAndGetPeers(function(err,peers) {
|
registerAndGetPeers(function(err,peers) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('FATAL: unable to contact or query server: '+err.toString());
|
console.error('WARNING: skipping test: unable to contact or query server: '+err.toString());
|
||||||
process.exit(1);
|
} else {
|
||||||
}
|
|
||||||
|
|
||||||
setInterval(function() {
|
|
||||||
++testCounter;
|
|
||||||
|
|
||||||
registerAndGetPeers(function(err,peers) {
|
|
||||||
if (err) {
|
|
||||||
console.error('WARNING: unable to contact or query server, test aborted: '+err.toString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
performTestOnAllPeers(peers,function(results) {
|
performTestOnAllPeers(peers,function(results) {
|
||||||
//console.log(results);
|
++testNumber;
|
||||||
|
|
||||||
var submit = http.request({
|
var submit = http.request({
|
||||||
host: SERVER_HOST,
|
host: SERVER_HOST,
|
||||||
port: SERVER_PORT,
|
port: SERVER_PORT,
|
||||||
path: '/'+thisAgentId,
|
path: '/'+testNumber+'/'+thisAgentId,
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
},function(res) {
|
},function(res) {
|
||||||
}).on('error',function(e) {
|
}).on('error',function(e) {
|
||||||
|
@ -220,7 +202,21 @@ var expressServer = app.listen(AGENT_PORT,function () {
|
||||||
submit.write(JSON.stringify(results));
|
submit.write(JSON.stringify(results));
|
||||||
submit.end();
|
submit.end();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
},RUN_TEST_EVERY);
|
}
|
||||||
|
|
||||||
|
// Agents just serve up a test payload
|
||||||
|
app.get('/',function(req,res) {
|
||||||
|
return res.status(200).send(payload);
|
||||||
|
});
|
||||||
|
|
||||||
|
var expressServer = app.listen(AGENT_PORT,agentIdToIp(thisAgentId),function () {
|
||||||
|
registerAndGetPeers(function(err,peers) {
|
||||||
|
if (err) {
|
||||||
|
console.error('FATAL: unable to contact or query server: '+err.toString());
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
setInterval(doTestsAndReport,TEST_INTERVAL);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
7
tests/http/docker-main.sh
Normal file → Executable file
7
tests/http/docker-main.sh
Normal file → Executable file
|
@ -3,4 +3,9 @@
|
||||||
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
|
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
|
||||||
|
|
||||||
/zerotier-one -d
|
/zerotier-one -d
|
||||||
exec node --harmony /agent.js
|
|
||||||
|
while [ ! -d "/proc/sys/net/ipv6/conf/zt0" ]; do
|
||||||
|
sleep 0.25
|
||||||
|
done
|
||||||
|
|
||||||
|
exec node --harmony /agent.js >>agent.out 2>&1
|
||||||
|
|
|
@ -26,7 +26,8 @@ app.get('/:agentId',function(req,res) {
|
||||||
return res.status(200).send(JSON.stringify(Object.keys(knownAgents)));
|
return res.status(200).send(JSON.stringify(Object.keys(knownAgents)));
|
||||||
});
|
});
|
||||||
|
|
||||||
app.post('/:agentId',function(req,res) {
|
app.post('/:testNumber/:agentId',function(req,res) {
|
||||||
|
var testNumber = req.params.testNumber;
|
||||||
var agentId = req.params.agentId;
|
var agentId = req.params.agentId;
|
||||||
if ((!agentId)||(agentId.length !== 32))
|
if ((!agentId)||(agentId.length !== 32))
|
||||||
return res.status(404).send('');
|
return res.status(404).send('');
|
||||||
|
@ -40,8 +41,9 @@ app.post('/:agentId',function(req,res) {
|
||||||
}
|
}
|
||||||
result = {
|
result = {
|
||||||
agentId: agentId,
|
agentId: agentId,
|
||||||
|
testNumber: testNumber,
|
||||||
receiveTime: receiveTime,
|
receiveTime: receiveTime,
|
||||||
result: resultData
|
results: resultData
|
||||||
};
|
};
|
||||||
|
|
||||||
var nows = receiveTime.toString(16);
|
var nows = receiveTime.toString(16);
|
||||||
|
|
Loading…
Add table
Reference in a new issue