Espruino/libs/network/esp8266/tests/projects/socket-test-err.js
Thorsten von Eicken 4cd9c6e7b0 improve tests
2015-12-10 22:45:53 -08:00

162 lines
4.4 KiB
JavaScript

// Espruino esp8266 Socket tester - Copyright 2015 by Thorsten von Eicken
// Test error handling
test_host = "h.voneicken.com"; // <======= configure for your local server running the test_http.rb sinatra server
test_port = 4567;
var test_ip = 0; // will be resolved
// Test misc
var wifi = require("Wifi");
var esp8266 = require("ESP8266");
var async = require("Async");
var http = require("http");
var net = require("net");
// Overall test outcome
var ok=true;
function hasProps(x, y) {
if (!(x instanceof Object)) { return false; }
if (!(y instanceof Object)) { return false; }
// properties equality check
var p = Object.keys(x);
return Object.keys(y).every(function(i) { return p.indexOf(i) !== -1 && x[i] == y[i]; });
}
function expectProps(what, a, b) {
if (hasProps(a,b)) {
console.log("OK for " + what);
} else {
console.log("OOPS: In " + what + " expected:\n", a, "\nto have:\n", b, "\n");
ok = false;
}
}
// barf if false
function expect(what, outcome, value) {
if (!outcome) {
console.log("In " + what + " unexpected value:\n", value, "\nOooops!");
ok = false;
} else {
console.log("OK " + what);
}
}
function testSockError() {
async.sequence([
// connection reset
function() {
console.log("** reset");
var self = this;
var err = false;
var conn = 0;
var sock = net.connect({host:test_host, port:33}, function(){conn++;});
sock.on('close', function(hadError) {
expect("got error", err, err);
expect("hadError", hadError, hadError);
self.next();
});
sock.on('error', function(ev) {
expectProps("conn reset", ev, {code: -9, message: "connection reset"});
expect("no conn", conn === 0, conn);
err = true;
});
sock.on('connect', function(ev) {
expect("conn cb undefined", ev === undefined, ev);
conn++;
});
},
// host not found
function() {
console.log("** not found");
var self = this;
var err = false;
var sock = net.connect({host:"i-do-not-exist.tada", port:33}, function(){conn++;});
sock.on('close', function(hadError) {
expect("got error", err, err);
self.next();
});
sock.on('error', function(ev) {
expectProps("not found", ev, {code: -6, message: "not found"});
err = true;
});
},
// connection closed
function() {
console.log("** closed");
var self = this;
var err = false;
var conn = 0;
var drain = 0;
var sock = net.connect({host:test_host, port:22});
sock.on('drain', function() { drain++; });
sock.on('close', function(hadError) {
expect("got error", err, err);
expect("hadError", hadError, hadError);
expect("1 connCB", conn === 1, conn);
expect("2 drainCB", drain === 2, drain);
self.next();
});
sock.on('error', function(e) {
expectProps("conn reset", e, {code: -9, message: "connection reset"});
err = true;
});
sock.on('connect', function() { conn++; sock.write("GARBAGE\r\n\r\n"); });
},
// unsent data
function() {
console.log("** unsent");
var self = this;
var err = false;
var sock = net.connect({host:test_host, port:4567});
sock.on('drain', function() { sock.write("GARBAGE\r\n\r\n"); });
sock.on('close', function() {
expect("got error", err, err);
self.next();
});
sock.on('error', function(e) {
expectProps("unsent", e, {code: -8, message: "unsent data"});
err = true;
});
},
// connection refused
function() {
this.next(); return;
var self = this;
var req = http.request(url.parse("http://"+test_host+":33/"), function(res) {
res.on('close', function() { console.log("closed"); });
});
req.on('error', function(err) {
console.log("Got error:", err);
self.next();
});
req.end();
},
],
{},
function() {
console.log("=== test ended:", (ok?"SUCCESS":"ERROR"),"===");
});
}
console.log("***** TEST START *****");
console.log(process.memory());
if (typeof test_host === 'undefined' || typeof test_port === 'undefined') {
console.log("please set test_host, and test_port");
console.log("then wifi.save();");
} else {
urlPrefix = "http://" + test_host + ":" + test_port;
testSockError();
console.log(process.memory());
}