1 var fspfs = require('../')
3 , http = require('http')
4 , https = require('https')
6 , should = require('should')
7 , assert = require('assert');
10 // Library version should be Semver compatible
11 'Library version': function(){
12 fspfs.version.should.match(/^\d+\.\d+\.\d+$/);
15 // Creating a server instace should not cause any problems
16 // either using the new Server or createServer method.
17 , 'Create Server instance': function(){
18 var server = fspfs.createServer()
19 , server2 = new fspfs.Server({log:false}, ['blog.3rd-Eden.com:1337']);
21 // server 2 options test
22 server2.log.should.be.false;
23 server2.origins.length.should.equal(1);
24 server2.origins[0].should.equal('blog.3rd-Eden.com:1337');
27 (typeof server.log).should.be.equal('function');
28 server.origins.length.should.equal(1);
29 server.origins[0].should.equal('*:*');
31 // instance checking, sanity check
32 assert.ok(server instanceof fspfs.Server);
33 assert.ok(!!server.buffer);
35 // more options testing
36 server = fspfs.createServer(['blog.3rd-Eden.com:80']);
37 server.origins.length.should.equal(1);
38 server.origins[0].should.equal('blog.3rd-Eden.com:80');
40 server = fspfs.createServer({log:false},['blog.3rd-Eden.com:80']);
41 server.log.should.be.false;
42 server.origins.length.should.equal(1);
43 server.origins[0].should.equal('blog.3rd-Eden.com:80');
47 , 'Add origin': function(){
48 var server = fspfs.createServer();
49 server.add('google.com:80', 'blog.3rd-Eden.com:1337');
51 server.origins.length.should.equal(3);
52 server.origins.indexOf('google.com:80').should.be.above(0);
54 // don't allow duplicates
55 server.add('google.com:80', 'google.com:80');
57 var i = server.origins.length
61 if (server.origins[i] === 'google.com:80'){
66 count.should.equal(1);
69 , 'Remove origin': function(){
70 var server = fspfs.createServer();
71 server.add('google.com:80', 'blog.3rd-Eden.com:1337');
72 server.origins.length.should.equal(3);
74 server.remove('google.com:80');
75 server.origins.length.should.equal(2);
76 server.origins.indexOf('google.com:80').should.equal(-1);
79 , 'Buffer': function(){
80 var server = fspfs.createServer();
82 Buffer.isBuffer(server.buffer).should.be.true;
83 server.buffer.toString().indexOf('to-ports="*"').should.be.above(0);
84 server.buffer.toString().indexOf('domain="*"').should.be.above(0);
85 server.buffer.toString().indexOf('domain="google.com"').should.equal(-1);
87 // The buffers should be rebuild when new origins are added
88 server.add('google.com:80');
89 server.buffer.toString().indexOf('to-ports="80"').should.be.above(0);
90 server.buffer.toString().indexOf('domain="google.com"').should.be.above(0);
92 server.remove('google.com:80');
93 server.buffer.toString().indexOf('to-ports="80"').should.equal(-1);
94 server.buffer.toString().indexOf('domain="google.com"').should.equal(-1);
97 , 'Responder': function(){
98 var server = fspfs.createServer()
100 // dummy socket to emulate a `real` socket
103 , end: function(buffer){
105 Buffer.isBuffer(buffer).should.be.true;
106 buffer.toString().should.equal(server.buffer.toString());
110 server.responder(dummySocket);
111 calls.should.equal(1);
114 , 'Event proxy': function(){
115 var server = fspfs.createServer()
118 Object.keys(process.EventEmitter.prototype).forEach(function proxy(key){
119 assert.ok(!!server[key] && typeof server[key] === 'function');
122 // test if it works by calling a none default event
123 server.on('pew', function(){
128 calls.should.equal(1);
131 , 'inline response http': function(){
133 , httpserver = http.createServer(function(q,r){r.writeHead(200);r.end(':3')})
134 , server = fspfs.createServer();
136 httpserver.listen(port, function(){
137 server.listen(port + 1, httpserver, function(){
138 var client = net.createConnection(port);
139 client.write('<policy-file-request/>\0');
140 client.on('error', function(err){
143 client.on('data', function(data){
145 var response = data.toString();
146 console.log(response);
148 response.indexOf('to-ports="*"').should.be.above(0);
149 response.indexOf('domain="*"').should.be.above(0);
150 response.indexOf('domain="google.com"').should.equal(-1);
161 , 'server response': function(){
163 , server = fspfs.createServer();
165 server.listen(port, function(){
166 var client = net.createConnection(port);
167 client.write('<policy-file-request/>\0');
168 client.on('error', function(err){
171 client.on('data', function(data){
173 var response = data.toString();
175 response.indexOf('to-ports="*"').should.be.above(0);
176 response.indexOf('domain="*"').should.be.above(0);
177 response.indexOf('domain="google.com"').should.equal(-1);
186 , 'inline response https': function(){
189 key: fs.readFileSync(__dirname + '/ssl/ssl.private.key').toString()
190 , cert: fs.readFileSync(__dirname + '/ssl/ssl.crt').toString()
192 , httpserver = https.createServer(ssl, function(q,r){r.writeHead(200);r.end(':3')})
193 , server = fspfs.createServer();
195 httpserver.listen(port, function(){
196 server.listen(port + 1, httpserver, function(){
197 var client = net.createConnection(port);
198 client.write('<policy-file-request/>\0');
199 client.on('error', function(err){
202 client.on('data', function(data){
204 var response = data.toString();
206 response.indexOf('to-ports="*"').should.be.above(0);
207 response.indexOf('domain="*"').should.be.above(0);
208 response.indexOf('domain="google.com"').should.equal(-1);
219 , 'connect_failed': function(){
220 var server = fspfs.createServer();
222 server.on('connect_failed', function(){
226 server.listen(function(){
227 assert.ok(false, 'Run this test without root access');