Remove excessive copyright/license boilerplate
[platform/upstream/nodejs.git] / test / parallel / test-tls-securepair-server.js
1 var common = require('../common');
2
3 if (!common.opensslCli) {
4   console.error('Skipping because node compiled without OpenSSL CLI.');
5   process.exit(0);
6 }
7
8 var assert = require('assert');
9
10 var join = require('path').join;
11 var net = require('net');
12 var fs = require('fs');
13 var tls = require('tls');
14 var spawn = require('child_process').spawn;
15
16 var connections = 0;
17 var key = fs.readFileSync(join(common.fixturesDir, 'agent.key')).toString();
18 var cert = fs.readFileSync(join(common.fixturesDir, 'agent.crt')).toString();
19
20 function log(a) {
21   console.error('***server*** ' + a);
22 }
23
24 var server = net.createServer(function(socket) {
25   connections++;
26   log('connection fd=' + socket.fd);
27   var sslcontext = tls.createSecureContext({key: key, cert: cert});
28   sslcontext.context.setCiphers('RC4-SHA:AES128-SHA:AES256-SHA');
29
30   var pair = tls.createSecurePair(sslcontext, true);
31
32   assert.ok(pair.encrypted.writable);
33   assert.ok(pair.cleartext.writable);
34
35   pair.encrypted.pipe(socket);
36   socket.pipe(pair.encrypted);
37
38   log('i set it secure');
39
40   pair.on('secure', function() {
41     log('connected+secure!');
42     pair.cleartext.write('hello\r\n');
43     log(pair.cleartext.getPeerCertificate());
44     log(pair.cleartext.getCipher());
45   });
46
47   pair.cleartext.on('data', function(data) {
48     log('read bytes ' + data.length);
49     pair.cleartext.write(data);
50   });
51
52   socket.on('end', function() {
53     log('socket end');
54   });
55
56   pair.cleartext.on('error', function(err) {
57     log('got error: ');
58     log(err);
59     log(err.stack);
60     socket.destroy();
61   });
62
63   pair.encrypted.on('error', function(err) {
64     log('encrypted error: ');
65     log(err);
66     log(err.stack);
67     socket.destroy();
68   });
69
70   socket.on('error', function(err) {
71     log('socket error: ');
72     log(err);
73     log(err.stack);
74     socket.destroy();
75   });
76
77   socket.on('close', function(err) {
78     log('socket closed');
79   });
80
81   pair.on('error', function(err) {
82     log('secure error: ');
83     log(err);
84     log(err.stack);
85     socket.destroy();
86   });
87 });
88
89 var gotHello = false;
90 var sentWorld = false;
91 var gotWorld = false;
92 var opensslExitCode = -1;
93
94 server.listen(common.PORT, function() {
95   // To test use: openssl s_client -connect localhost:8000
96   var client = spawn(common.opensslCli, ['s_client', '-connect', '127.0.0.1:' +
97         common.PORT]);
98
99
100   var out = '';
101
102   client.stdout.setEncoding('utf8');
103   client.stdout.on('data', function(d) {
104     out += d;
105
106     if (!gotHello && /hello/.test(out)) {
107       gotHello = true;
108       client.stdin.write('world\r\n');
109       sentWorld = true;
110     }
111
112     if (!gotWorld && /world/.test(out)) {
113       gotWorld = true;
114       client.stdin.end();
115     }
116   });
117
118   client.stdout.pipe(process.stdout, { end: false });
119
120   client.on('exit', function(code) {
121     opensslExitCode = code;
122     server.close();
123   });
124 });
125
126 process.on('exit', function() {
127   assert.equal(1, connections);
128   assert.ok(gotHello);
129   assert.ok(sentWorld);
130   assert.ok(gotWorld);
131   assert.equal(0, opensslExitCode);
132 });