Projekt

Obecné

Profil

Stáhnout (2.63 KB) Statistiky
| Větev: | Revize:
1
/* eslint-env mocha */
2

    
3
var assert = require('assert')
4
var net = require('net')
5
var streamPair = require('stream-pair')
6

    
7
var thing = require('../')
8

    
9
describe('Handle Thing', function () {
10
  var handle
11
  var pair
12
  var socket;
13

    
14
  [ 'normal', 'lazy' ].forEach(function (mode) {
15
    describe(mode, function () {
16
      beforeEach(function () {
17
        pair = streamPair.create()
18
        handle = thing.create(mode === 'normal' ? pair.other : null)
19
        socket = new net.Socket({
20
          handle: handle,
21
          readable: true,
22
          writable: true
23
        })
24

    
25
        if (mode === 'lazy') {
26
          setTimeout(function () {
27
            handle.setStream(pair.other)
28
          }, 50)
29
        }
30
      })
31

    
32
      afterEach(function () {
33
        assert(handle._stream)
34
      })
35

    
36
      it('should write data to Socket', function (done) {
37
        pair.write('hello')
38
        pair.write(' world')
39
        pair.end('... ok')
40

    
41
        var chunks = ''
42
        socket.on('data', function (chunk) {
43
          chunks += chunk
44
        })
45
        socket.on('end', function () {
46
          assert.strictEqual(chunks, 'hello world... ok')
47

    
48
          // allowHalfOpen is `false`, so the `end` should be followed by `close`
49
          socket.once('close', function () {
50
            done()
51
          })
52
        })
53
      })
54

    
55
      it('should read data from Socket', function (done) {
56
        socket.write('hello')
57
        socket.write(' world')
58
        socket.end('... ok')
59

    
60
        var chunks = ''
61
        pair.on('data', function (chunk) {
62
          chunks += chunk
63
        })
64
        pair.on('end', function () {
65
          assert.strictEqual(chunks, 'hello world... ok')
66

    
67
          done()
68
        })
69
      })
70

    
71
      it('should invoke `close` callback', function (done) {
72
        handle._options.close = function (callback) {
73
          done()
74
          process.nextTick(callback)
75
        }
76

    
77
        pair.end('hello')
78
        socket.resume()
79
      })
80

    
81
      it('should kill pending requests', function (done) {
82
        handle._options.close = function () {
83
          setTimeout(done, 75)
84
        }
85

    
86
        socket.write('hello')
87
        socket.destroy()
88
      })
89

    
90
      if (mode === 'normal') {
91
        it('should invoke `getPeerName` callback', function () {
92
          handle._options.getPeerName = function () {
93
            return { address: 'ohai' }
94
          }
95

    
96
          assert.strictEqual(socket.remoteAddress, 'ohai')
97
        })
98

    
99
        it('should emit ECONNRESET at `close` event', function (done) {
100
          pair.other.emit('close')
101

    
102
          socket.on('error', function (err) {
103
            assert(/ECONNRESET/.test(err.message))
104
            done()
105
          })
106
        })
107
      }
108
    })
109
  })
110
})
    (1-1/1)