blob: 12c3381cb4fd60010ec1b2fd7daacade1b9670da [file] [log] [blame]
Johan Bergström671fbd52015-03-04 01:11:211var common = require('../common');
Fedor Indutny1738c772015-02-23 20:09:442var assert = require('assert');
Johan Bergström671fbd52015-03-04 01:11:213
4if (!common.hasCrypto) {
5 console.log('1..0 # Skipped: missing crypto');
6 process.exit();
7}
Fedor Indutny1738c772015-02-23 20:09:448var tls = require('tls');
Johan Bergström671fbd52015-03-04 01:11:219
10var stream = require('stream');
Fedor Indutny1738c772015-02-23 20:09:4411var fs = require('fs');
12var net = require('net');
13
Fedor Indutny1738c772015-02-23 20:09:4414var connected = {
15 client: 0,
16 server: 0
17};
18
19var server = tls.createServer({
20 key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'),
21 cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem')
22}, function(c) {
23 console.log('new client');
24 connected.server++;
25 c.end('ohai');
26}).listen(common.PORT, function() {
27 var raw = net.connect(common.PORT);
28
29 var pending = false;
30 raw.on('readable', function() {
31 if (pending)
32 p._read();
33 });
34
35 var p = new stream.Duplex({
36 read: function read() {
37 pending = false;
38
39 var chunk = raw.read();
40 if (chunk) {
41 console.log('read', chunk);
42 this.push(chunk);
43 } else {
44 pending = true;
45 }
46 },
47 write: function write(data, enc, cb) {
48 console.log('write', data, enc);
49 raw.write(data, enc, cb);
50 }
51 });
52
53 var socket = tls.connect({
54 socket: p,
55 rejectUnauthorized: false
56 }, function() {
57 console.log('client secure');
58
59 connected.client++;
60
61 socket.end('hello');
62 socket.resume();
63 });
64
65 socket.once('close', function() {
66 console.log('client close');
67 server.close();
68 });
69});
70
71process.once('exit', function() {
72 assert.equal(connected.client, 1);
73 assert.equal(connected.server, 1);
74});