123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- var fspfs = require('../')
- , fs = require('fs')
- , http = require('http')
- , https = require('https')
- , net = require('net')
- , should = require('should')
- , assert = require('assert');
- module.exports = {
- // Library version should be Semver compatible
- 'Library version': function(){
- fspfs.version.should.match(/^\d+\.\d+\.\d+$/);
- }
- // Creating a server instace should not cause any problems
- // either using the new Server or createServer method.
- , 'Create Server instance': function(){
- var server = fspfs.createServer()
- , server2 = new fspfs.Server({log:false}, ['blog.3rd-Eden.com:1337']);
-
- // server 2 options test
- server2.log.should.be.false;
- server2.origins.length.should.equal(1);
- server2.origins[0].should.equal('blog.3rd-Eden.com:1337');
-
- // server defaults
- (typeof server.log).should.be.equal('function');
- server.origins.length.should.equal(1);
- server.origins[0].should.equal('*:*');
-
- // instance checking, sanity check
- assert.ok(server instanceof fspfs.Server);
- assert.ok(!!server.buffer);
-
- // more options testing
- server = fspfs.createServer(['blog.3rd-Eden.com:80']);
- server.origins.length.should.equal(1);
- server.origins[0].should.equal('blog.3rd-Eden.com:80');
-
- server = fspfs.createServer({log:false},['blog.3rd-Eden.com:80']);
- server.log.should.be.false;
- server.origins.length.should.equal(1);
- server.origins[0].should.equal('blog.3rd-Eden.com:80');
-
- }
- , 'Add origin': function(){
- var server = fspfs.createServer();
- server.add('google.com:80', 'blog.3rd-Eden.com:1337');
-
- server.origins.length.should.equal(3);
- server.origins.indexOf('google.com:80').should.be.above(0);
-
- // don't allow duplicates
- server.add('google.com:80', 'google.com:80');
-
- var i = server.origins.length
- , count = 0;
-
- while(i--){
- if (server.origins[i] === 'google.com:80'){
- count++;
- }
- }
-
- count.should.equal(1);
- }
- , 'Remove origin': function(){
- var server = fspfs.createServer();
- server.add('google.com:80', 'blog.3rd-Eden.com:1337');
- server.origins.length.should.equal(3);
-
- server.remove('google.com:80');
- server.origins.length.should.equal(2);
- server.origins.indexOf('google.com:80').should.equal(-1);
- }
- , 'Buffer': function(){
- var server = fspfs.createServer();
-
- Buffer.isBuffer(server.buffer).should.be.true;
- server.buffer.toString().indexOf('to-ports="*"').should.be.above(0);
- server.buffer.toString().indexOf('domain="*"').should.be.above(0);
- server.buffer.toString().indexOf('domain="google.com"').should.equal(-1);
-
- // The buffers should be rebuild when new origins are added
- server.add('google.com:80');
- server.buffer.toString().indexOf('to-ports="80"').should.be.above(0);
- server.buffer.toString().indexOf('domain="google.com"').should.be.above(0);
-
- server.remove('google.com:80');
- server.buffer.toString().indexOf('to-ports="80"').should.equal(-1);
- server.buffer.toString().indexOf('domain="google.com"').should.equal(-1);
- }
- , 'Responder': function(){
- var server = fspfs.createServer()
- , calls = 0
- // dummy socket to emulate a `real` socket
- , dummySocket = {
- readyState: 'open'
- , end: function(buffer){
- calls++;
- Buffer.isBuffer(buffer).should.be.true;
- buffer.toString().should.equal(server.buffer.toString());
- }
- };
-
- server.responder(dummySocket);
- calls.should.equal(1);
- }
- , 'Event proxy': function(){
- var server = fspfs.createServer()
- , calls = 0;
-
- Object.keys(process.EventEmitter.prototype).forEach(function proxy(key){
- assert.ok(!!server[key] && typeof server[key] === 'function');
- });
-
- // test if it works by calling a none default event
- server.on('pew', function(){
- calls++;
- });
-
- server.emit('pew');
- calls.should.equal(1);
- }
- , 'inline response http': function(){
- var port = 1335
- , httpserver = http.createServer(function(q,r){r.writeHead(200);r.end(':3')})
- , server = fspfs.createServer();
-
- httpserver.listen(port, function(){
- server.listen(port + 1, httpserver, function(){
- var client = net.createConnection(port);
- client.write('<policy-file-request/>\0');
- client.on('error', function(err){
- assert.ok(!err, err)
- });
- client.on('data', function(data){
-
- var response = data.toString();
- console.log(response);
-
- response.indexOf('to-ports="*"').should.be.above(0);
- response.indexOf('domain="*"').should.be.above(0);
- response.indexOf('domain="google.com"').should.equal(-1);
-
- // clean up
- client.destroy();
- server.close();
- httpserver.close();
- });
- });
- });
- }
- , 'server response': function(){
- var port = 1340
- , server = fspfs.createServer();
-
- server.listen(port, function(){
- var client = net.createConnection(port);
- client.write('<policy-file-request/>\0');
- client.on('error', function(err){
- assert.ok(!err, err)
- });
- client.on('data', function(data){
-
- var response = data.toString();
-
- response.indexOf('to-ports="*"').should.be.above(0);
- response.indexOf('domain="*"').should.be.above(0);
- response.indexOf('domain="google.com"').should.equal(-1);
-
- // clean up
- client.destroy();
- server.close();
- });
- });
- }
- , 'inline response https': function(){
- var port = 1345
- , ssl = {
- key: fs.readFileSync(__dirname + '/ssl/ssl.private.key').toString()
- , cert: fs.readFileSync(__dirname + '/ssl/ssl.crt').toString()
- }
- , httpserver = https.createServer(ssl, function(q,r){r.writeHead(200);r.end(':3')})
- , server = fspfs.createServer();
-
- httpserver.listen(port, function(){
- server.listen(port + 1, httpserver, function(){
- var client = net.createConnection(port);
- client.write('<policy-file-request/>\0');
- client.on('error', function(err){
- assert.ok(!err, err)
- });
- client.on('data', function(data){
-
- var response = data.toString();
-
- response.indexOf('to-ports="*"').should.be.above(0);
- response.indexOf('domain="*"').should.be.above(0);
- response.indexOf('domain="google.com"').should.equal(-1);
-
- // clean up
- client.destroy();
- server.close();
- httpserver.close();
- });
- });
- });
- }
- , 'connect_failed': function(){
- var server = fspfs.createServer();
-
- server.on('connect_failed', function(){
- assert.ok(true);
- });
-
- server.listen(function(){
- assert.ok(false, 'Run this test without root access');
- server.close();
- });
- }
- };
|