1 | var dns = require('../dns');
|
2 |
|
3 | exports.udp4 = function (test) {
|
4 | var server = dns.createUDPServer();
|
5 |
|
6 | var tData = {
|
7 | address: '127.0.0.1',
|
8 | port: 15353,
|
9 | };
|
10 |
|
11 | if (!/^v0.6/.test(process.version))
|
12 | tData.family = 'IPv4';
|
13 |
|
14 | var succeed = false;
|
15 |
|
16 | server.on('listening', function () {
|
17 | test.deepEqual(this.address(), tData, 'Not listening on the same port and address');
|
18 |
|
19 | process.nextTick(function () {
|
20 | server.close();
|
21 | });
|
22 | succeed = true;
|
23 | });
|
24 |
|
25 | server.on('socketError', function (err, socket) {
|
26 | test.ifError(err, 'Should not have a bind error');
|
27 | this.close();
|
28 | });
|
29 |
|
30 | server.on('close', function () {
|
31 | test.done();
|
32 | });
|
33 |
|
34 | server.serve(tData.port, tData.address);
|
35 | };
|
36 |
|
37 |
|
38 | exports.udp6 = function (test) {
|
39 | var server = dns.createUDPServer({
|
40 | dgram_type: 'udp6',
|
41 | });
|
42 |
|
43 | var tData = {
|
44 | address: '::1',
|
45 | port: 15353,
|
46 | };
|
47 |
|
48 | if (!/^v0.6/.test(process.version))
|
49 | tData.family = 'IPv6';
|
50 |
|
51 | var succeed = false;
|
52 |
|
53 | server.on('listening', function () {
|
54 | test.deepEqual(this.address(), tData, 'Not listening on the same port and address');
|
55 |
|
56 |
|
57 | process.nextTick(function () {
|
58 | server.close();
|
59 | });
|
60 | succeed = true;
|
61 | });
|
62 |
|
63 | server.on('socketError', function (err, socket) {
|
64 | test.ifError(err, 'Should not have a bind error');
|
65 | this.close();
|
66 | });
|
67 |
|
68 | server.on('close', function () {
|
69 | test.done();
|
70 | });
|
71 |
|
72 | server.serve(tData.port, tData.address);
|
73 | };
|
74 |
|
75 |
|
76 | exports.tcp = function (test) {
|
77 | var server = dns.createTCPServer();
|
78 |
|
79 | var tData = {
|
80 | address: '127.0.0.1',
|
81 | port: 15353,
|
82 | };
|
83 |
|
84 | server.on('listening', function () {
|
85 | test.equal(this.address().port, tData.port, 'Not listening on the same port and address');
|
86 | test.equal(this.address().address, tData.address, 'Not listening on the same port and address');
|
87 | process.nextTick(function () {
|
88 | server.close();
|
89 | });
|
90 | });
|
91 |
|
92 | server.on('socketError', function (err, socket) {
|
93 | test.ifError(err, 'Should not have a bind error');
|
94 | this.close();
|
95 | });
|
96 |
|
97 | server.on('close', function () {
|
98 | test.done();
|
99 | });
|
100 |
|
101 | server.serve(tData.port, tData.address);
|
102 | };
|
103 |
|
104 | exports.udpResponse = function (test) {
|
105 | var server = dns.createServer();
|
106 |
|
107 | server.on('request', function (req, res) {
|
108 | res.answer.push(dns.A({
|
109 | name: req.question[0].name,
|
110 | address: '127.0.0.1',
|
111 | ttl: 600,
|
112 | }));
|
113 | res.send();
|
114 | });
|
115 |
|
116 | server.on('listening', function () {
|
117 | var r = dns.Request({
|
118 | question: dns.Question({
|
119 | name: 'www.google.com',
|
120 | }),
|
121 | server: {
|
122 | address: '127.0.0.1',
|
123 | port: 15353,
|
124 | },
|
125 | cache: false,
|
126 | });
|
127 |
|
128 | r.on('message', function (err, answer) {
|
129 | var record;
|
130 | test.ok(!err, 'Response should not be an error');
|
131 | test.ok(answer.answer.length === 1, 'Response should have 1 answer');
|
132 | record = answer.answer[0]
|
133 | test.strictEqual(record.address, '127.0.0.1', 'Address mismatch');
|
134 | test.strictEqual(record.ttl, 600, 'TTL mismatch');
|
135 | test.strictEqual(record.name, 'www.google.com', 'Name mismatch');
|
136 | });
|
137 |
|
138 | r.on('error', function (err) {
|
139 | console.log(err);
|
140 | test.ok(false, 'Should not error');
|
141 | });
|
142 |
|
143 | r.on('timeout', function () {
|
144 | test.ok(false, 'Should not timeout');
|
145 | });
|
146 |
|
147 | r.on('end', function () {
|
148 | server.close();
|
149 | });
|
150 |
|
151 | process.nextTick(function () {
|
152 | r.send();
|
153 | });
|
154 | });
|
155 |
|
156 | server.on('close', function () {
|
157 | test.done();
|
158 | });
|
159 |
|
160 | server.serve(15353, '127.0.0.1');
|
161 | }
|