From ae6721f6143de24707b5c88766facf02bc5e7a5b Mon Sep 17 00:00:00 2001 From: ansuz Date: Sun, 12 Jun 2016 11:53:23 +0200 Subject: [PATCH] play with index.js and use it for some more tests --- tests.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tests.js diff --git a/tests.js b/tests.js new file mode 100644 index 0000000..ecbeaf1 --- /dev/null +++ b/tests.js @@ -0,0 +1,65 @@ +/* + if any of the supplied credentials: + * are invalid JSON + * do not end with a newline character, + + this file will not even load because index.js will throw errors +*/ + +var Peers = require("./index"); + +var isIp = function (host) { + return ([ + /^[\[\]0-9a-f:]*$/i, // ipv6 + /^[0-9\.:]*$/, // ipv4 + ].some(function (patt) { + return patt.test(host); + })); +}; + +var credsWithDns = Peers.filter(function (x, p) { + return Object.keys(x).some(function (k) { + return !isIp(k); + }); +}); + +/* Credentials should use IPs, not dns hostnames */ +if (credsWithDns.length) { + console.log("The following peers are using DNS hostnames instead of IPs"); + console.log(credsWithDns); +} + +/* Credentials must have the required fields: + * ip/port ✓ + * password + * publicKey + * contact +*/ + +var requiredFields = ['password', 'publicKey', 'contact']; + +var insufficientFields = Peers.filter(function (x, p) { + var problem = false; + Object.keys(x).map(function (k) { + var cred = x[k]; + var fields = Object.keys(cred); + requiredFields.forEach(function (field) { + if (fields.indexOf(field) === -1) { + problem = true; + } + }); + }); + return problem; +}); + +if (insufficientFields.length) { + console.log("The following peers did not have all the required fields"); + console.log(insufficientFields); +} + +/* Credentials must be short enough *as is* that they will not trigger + the connectTo-overflow bug. +*/ + +// TODO check if this bug still exists in cjdns +// TODO add bencoding and check length