blob: 1c5e749911b6bed5d4f6ca6dd9c79d00701473f4 [file] [log] [blame]
Roman Reissf29762f2015-05-19 11:00:061'use strict';
Johan Bergström671fbd52015-03-04 01:11:212var common = require('../common');
Fedor Indutny1738c772015-02-23 20:09:443var assert = require('assert');
Johan Bergström671fbd52015-03-04 01:11:214
5if (!common.hasCrypto) {
6 console.log('1..0 # Skipped: missing crypto');
Sakthipriyan Vairamani79c865a2015-07-07 15:25:557 return;
Johan Bergström671fbd52015-03-04 01:11:218}
Fedor Indutny1738c772015-02-23 20:09:449var tls = require('tls');
Johan Bergström671fbd52015-03-04 01:11:2110
11var stream = require('stream');
Fedor Indutny1738c772015-02-23 20:09:4412var fs = require('fs');
13var net = require('net');
14
Fedor Indutny1738c772015-02-23 20:09:4415var connected = {
16 client: 0,
17 server: 0
18};
19
20var server = tls.createServer({
21 key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'),
22 cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem')
23}, function(c) {
24 console.log('new client');
25 connected.server++;
26 c.end('ohai');
27}).listen(common.PORT, function() {
28 var raw = net.connect(common.PORT);
29
30 var pending = false;
31 raw.on('readable', function() {
32 if (pending)
33 p._read();
34 });
35
36 var p = new stream.Duplex({
37 read: function read() {
38 pending = false;
39
40 var chunk = raw.read();
41 if (chunk) {
42 console.log('read', chunk);
43 this.push(chunk);
44 } else {
45 pending = true;
46 }
47 },
48 write: function write(data, enc, cb) {
49 console.log('write', data, enc);
50 raw.write(data, enc, cb);
51 }
52 });
53
54 var socket = tls.connect({
55 socket: p,
56 rejectUnauthorized: false
57 }, function() {
58 console.log('client secure');
59
60 connected.client++;
61
62 socket.end('hello');
63 socket.resume();
Fedor Indutny75930bb2015-05-18 18:24:1964 socket.destroy();
Fedor Indutny1738c772015-02-23 20:09:4465 });
66
67 socket.once('close', function() {
68 console.log('client close');
69 server.close();
70 });
71});
72
73process.once('exit', function() {
74 assert.equal(connected.client, 1);
75 assert.equal(connected.server, 1);
76});