1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.server.dns;
21
22
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.net.InetAddress;
26 import java.net.UnknownHostException;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.List;
30
31 import junit.framework.TestCase;
32
33 import org.apache.directory.server.dns.messages.DnsMessage;
34 import org.apache.directory.server.dns.messages.DnsMessageModifier;
35 import org.apache.directory.server.dns.messages.MessageType;
36 import org.apache.directory.server.dns.messages.OpCode;
37 import org.apache.directory.server.dns.messages.QuestionRecord;
38 import org.apache.directory.server.dns.messages.RecordClass;
39 import org.apache.directory.server.dns.messages.RecordType;
40 import org.apache.directory.server.dns.messages.ResourceRecord;
41 import org.apache.directory.server.dns.messages.ResourceRecordModifier;
42 import org.apache.directory.server.dns.messages.ResponseCode;
43 import org.apache.directory.server.dns.store.DnsAttribute;
44 import org.apache.mina.common.ByteBuffer;
45
46
47
48
49
50
51 public abstract class AbstractDnsTestCase extends TestCase
52 {
53 protected static final int MINIMUM_DNS_DATAGRAM_SIZE = 576;
54
55
56 protected ByteBuffer getTestQueryByteBuffer() throws IOException
57 {
58 return getByteBufferFromFile( "DNS-QUERY.pdu" );
59 }
60
61
62 protected ByteBuffer getTestResponseByteBuffer() throws IOException
63 {
64 return getByteBufferFromFile( "DNS-RESPONSE.pdu" );
65 }
66
67
68 protected ByteBuffer getTestMxQueryByteBuffer() throws IOException
69 {
70 return getByteBufferFromFile( "MX-QUERY.pdu" );
71 }
72
73
74 protected ByteBuffer getTestMxResponseByteBuffer() throws IOException
75 {
76 return getByteBufferFromFile( "MX-RESPONSE.pdu" );
77 }
78
79
80 protected ByteBuffer getByteBufferFromFile( String file ) throws IOException
81 {
82 InputStream is = getClass().getResourceAsStream( file );
83
84 byte[] bytes = new byte[MINIMUM_DNS_DATAGRAM_SIZE];
85
86 int offset = 0;
87 int numRead = 0;
88 while ( offset < bytes.length && ( numRead = is.read( bytes, offset, bytes.length - offset ) ) >= 0 )
89 {
90 offset += numRead;
91 }
92
93 is.close();
94
95 return ByteBuffer.wrap( bytes );
96 }
97
98
99 protected DnsMessage getTestQuery()
100 {
101 DnsMessageModifier modifier = new DnsMessageModifier();
102 modifier.setTransactionId( ( short ) 27799 );
103 modifier.setMessageType( MessageType.QUERY );
104 modifier.setOpCode( OpCode.QUERY );
105 modifier.setRecursionDesired( true );
106 modifier.setQuestionRecords( Collections.singletonList( getTestQuestionRecord() ) );
107 modifier.setResponseCode( ResponseCode.NO_ERROR );
108 modifier.setAnswerRecords( new ArrayList<ResourceRecord>() );
109 modifier.setAuthorityRecords( new ArrayList<ResourceRecord>() );
110 modifier.setAdditionalRecords( new ArrayList<ResourceRecord>() );
111 return modifier.getDnsMessage();
112 }
113
114
115 protected QuestionRecord getTestQuestionRecord()
116 {
117 return new QuestionRecord( "www.example.com", RecordType.A, RecordClass.IN );
118 }
119
120
121 protected DnsMessage getTestMxQuery()
122 {
123 DnsMessageModifier modifier = new DnsMessageModifier();
124 modifier.setTransactionId( 51511 );
125 modifier.setMessageType( MessageType.QUERY );
126 modifier.setOpCode( OpCode.QUERY );
127 modifier.setRecursionDesired( true );
128 modifier.setQuestionRecords( Collections.singletonList( getTestMxQuestionRecord() ) );
129 modifier.setResponseCode( ResponseCode.NO_ERROR );
130 modifier.setAnswerRecords( new ArrayList<ResourceRecord>() );
131 modifier.setAuthorityRecords( new ArrayList<ResourceRecord>() );
132 modifier.setAdditionalRecords( new ArrayList<ResourceRecord>() );
133 return modifier.getDnsMessage();
134 }
135
136
137 protected QuestionRecord getTestMxQuestionRecord()
138 {
139 return new QuestionRecord( "apache.org", RecordType.MX, RecordClass.IN );
140 }
141
142
143 protected DnsMessage getTestMxResponse() throws UnknownHostException
144 {
145 DnsMessageModifier modifier = new DnsMessageModifier();
146 modifier.setTransactionId( 51511 );
147 modifier.setMessageType( MessageType.RESPONSE );
148 modifier.setOpCode( OpCode.QUERY );
149 modifier.setRecursionDesired( true );
150 modifier.setRecursionAvailable( true );
151 modifier.setQuestionRecords( Collections.singletonList( getTestMxQuestionRecord() ) );
152 modifier.setResponseCode( ResponseCode.NO_ERROR );
153 modifier.setAnswerRecords( getTestMxAnswerRecords() );
154 modifier.setAuthorityRecords( getTestMxAuthorityRecords() );
155 modifier.setAdditionalRecords( getTestMxAdditionalRecords() );
156 return modifier.getDnsMessage();
157 }
158
159
160 protected List<ResourceRecord> getTestMxAnswerRecords()
161 {
162 List<ResourceRecord> records = new ArrayList<ResourceRecord>();
163
164 ResourceRecordModifier modifier = new ResourceRecordModifier();
165 modifier.setDnsName( "apache.org" );
166 modifier.setDnsType( RecordType.MX );
167 modifier.setDnsClass( RecordClass.IN );
168 modifier.setDnsTtl( 267 );
169 modifier.put( DnsAttribute.MX_PREFERENCE, "10" );
170 modifier.put( DnsAttribute.DOMAIN_NAME, "herse.apache.org" );
171 records.add( modifier.getEntry() );
172
173 modifier = new ResourceRecordModifier();
174 modifier.setDnsName( "apache.org" );
175 modifier.setDnsType( RecordType.MX );
176 modifier.setDnsClass( RecordClass.IN );
177 modifier.setDnsTtl( 267 );
178 modifier.put( DnsAttribute.MX_PREFERENCE, "20" );
179 modifier.put( DnsAttribute.DOMAIN_NAME, "mail.apache.org" );
180 records.add( modifier.getEntry() );
181
182 return records;
183 }
184
185
186 protected List<ResourceRecord> getTestMxAuthorityRecords()
187 {
188 List<ResourceRecord> records = new ArrayList<ResourceRecord>();
189
190 ResourceRecordModifier modifier = new ResourceRecordModifier();
191 modifier.setDnsClass( RecordClass.IN );
192 modifier.setDnsName( "apache.org" );
193 modifier.setDnsTtl( 1932 );
194 modifier.setDnsType( RecordType.NS );
195 modifier.put( DnsAttribute.DOMAIN_NAME, "ns.hyperreal.org" );
196 records.add( modifier.getEntry() );
197
198 modifier = new ResourceRecordModifier();
199 modifier.setDnsClass( RecordClass.IN );
200 modifier.setDnsName( "apache.org" );
201 modifier.setDnsTtl( 1932 );
202 modifier.setDnsType( RecordType.NS );
203 modifier.put( DnsAttribute.DOMAIN_NAME, "ns1.eu.bitnames.com" );
204 records.add( modifier.getEntry() );
205
206 modifier = new ResourceRecordModifier();
207 modifier.setDnsClass( RecordClass.IN );
208 modifier.setDnsName( "apache.org" );
209 modifier.setDnsTtl( 1932 );
210 modifier.setDnsType( RecordType.NS );
211 modifier.put( DnsAttribute.DOMAIN_NAME, "ns1.us.bitnames.com" );
212 records.add( modifier.getEntry() );
213
214 modifier = new ResourceRecordModifier();
215 modifier.setDnsClass( RecordClass.IN );
216 modifier.setDnsName( "apache.org" );
217 modifier.setDnsTtl( 1932 );
218 modifier.setDnsType( RecordType.NS );
219 modifier.put( DnsAttribute.DOMAIN_NAME, "ns2.surfnet.nl" );
220 records.add( modifier.getEntry() );
221
222 return records;
223 }
224
225
226 protected List<ResourceRecord> getTestMxAdditionalRecords() throws UnknownHostException
227 {
228 List<ResourceRecord> records = new ArrayList<ResourceRecord>();
229
230 ResourceRecordModifier modifier = new ResourceRecordModifier();
231 modifier.setDnsClass( RecordClass.IN );
232 modifier.setDnsName( "herse.apache.org" );
233 modifier.setDnsTtl( 3313 );
234 modifier.setDnsType( RecordType.A );
235 modifier.put( DnsAttribute.IP_ADDRESS, InetAddress.getByName( "140.211.11.133" ).toString() );
236 records.add( modifier.getEntry() );
237
238 modifier = new ResourceRecordModifier();
239 modifier.setDnsClass( RecordClass.IN );
240 modifier.setDnsName( "mail.apache.org" );
241 modifier.setDnsTtl( 3313 );
242 modifier.setDnsType( RecordType.A );
243 modifier.put( DnsAttribute.IP_ADDRESS, InetAddress.getByName( "140.211.11.2" ).toString() );
244 records.add( modifier.getEntry() );
245
246 modifier = new ResourceRecordModifier();
247 modifier.setDnsClass( RecordClass.IN );
248 modifier.setDnsName( "ns1.eu.bitnames.com" );
249 modifier.setDnsTtl( 156234 );
250 modifier.setDnsType( RecordType.A );
251 modifier.put( DnsAttribute.IP_ADDRESS, InetAddress.getByName( "82.195.149.118" ).toString() );
252 records.add( modifier.getEntry() );
253
254 modifier = new ResourceRecordModifier();
255 modifier.setDnsClass( RecordClass.IN );
256 modifier.setDnsName( "ns1.us.bitnames.com" );
257 modifier.setDnsTtl( 156236 );
258 modifier.setDnsType( RecordType.A );
259 modifier.put( DnsAttribute.IP_ADDRESS, InetAddress.getByName( "216.52.237.236" ).toString() );
260 records.add( modifier.getEntry() );
261
262 modifier = new ResourceRecordModifier();
263 modifier.setDnsClass( RecordClass.IN );
264 modifier.setDnsName( "ns2.surfnet.nl" );
265 modifier.setDnsTtl( 77100 );
266 modifier.setDnsType( RecordType.A );
267 modifier.put( DnsAttribute.IP_ADDRESS, InetAddress.getByName( "192.87.36.2" ).toString() );
268 records.add( modifier.getEntry() );
269
270 modifier = new ResourceRecordModifier();
271 modifier.setDnsClass( RecordClass.IN );
272 modifier.setDnsName( "ns2.surfnet.nl" );
273 modifier.setDnsTtl( 77100 );
274 modifier.setDnsType( RecordType.AAAA );
275 modifier.put( DnsAttribute.IP_ADDRESS, InetAddress.getByName( "2001:610:3:200a:192:87:36:2" ).toString() );
276 records.add( modifier.getEntry() );
277
278 return records;
279 }
280
281 }