0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-12-01 09:32:32 +01:00
mongodb/jstests/libs/network.js
2010-09-14 12:25:54 -04:00

38 lines
1.5 KiB
JavaScript

// Parse "127.0.0.1:300" into {addr: "127.0.0.1", port: 300},
// and "127.0.0.1" into {addr: "127.0.0.1", port: undefined}
function parseHost (hostString) {
var items = hostString.match(/(\d+.\d+.\d+.\d+)(:(\d+))?/)
return {addr: items[1], port: parseInt(items[3])}
}
/* Network traffic shaping (packet dropping) to simulate network problems
Currently works on BSD Unix and Mac OS X only (using ipfw).
Requires sudo access.
TODO: make it work on Linux too (using iptables). */
var nextRuleNum = 100 // this grows indefinitely but can't exceed 65534, so can't call routines below indefinitely
var portRuleNum = {}
// Cut network connection to local port by dropping packets using iptables
function cutNetwork (port) {
portRuleNum[port] = nextRuleNum
runProgram ('sudo', 'ipfw', 'add ' + nextRuleNum++ + ' deny tcp from any to any ' + port)
runProgram ('sudo', 'ipfw', 'add ' + nextRuleNum++ + ' deny tcp from any ' + port + ' to any')
//TODO: confirm it worked (since sudo may not work)
runProgram ('sudo', 'ipfw', 'show')
}
// Restore network connection to local port by not dropping packets using iptables
function restoreNetwork (port) {
var ruleNum = portRuleNum[port]
if (ruleNum) {
runProgram ('sudo', 'ipfw', 'delete ' + ruleNum++)
runProgram ('sudo', 'ipfw', 'delete ' + ruleNum)
delete portRuleNum[port]
}
//TODO: confirm it worked (since sudo may not work)
runProgram ('sudo', 'ipfw', 'show')
}