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