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