001: // -*- Java -*-
002: //
003: // Copyright (c) 2005, Matthew J. Rutherford <rutherfo@cs.colorado.edu>
004: // Copyright (c) 2005, University of Colorado at Boulder
005: // All rights reserved.
006: //
007: // Redistribution and use in source and binary forms, with or without
008: // modification, are permitted provided that the following conditions are
009: // met:
010: //
011: // * Redistributions of source code must retain the above copyright
012: // notice, this list of conditions and the following disclaimer.
013: //
014: // * Redistributions in binary form must reproduce the above copyright
015: // notice, this list of conditions and the following disclaimer in the
016: // documentation and/or other materials provided with the distribution.
017: //
018: // * Neither the name of the University of Colorado at Boulder nor the
019: // names of its contributors may be used to endorse or promote
020: // products derived from this software without specific prior written
021: // permission.
022: //
023: // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
024: // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
025: // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
026: // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
027: // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
028: // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
029: // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
030: // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
031: // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
032: // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
033: // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
034: //
035: package org.xbill.DNS;
036:
037: import java.io.IOException;
038: import java.net.InetAddress;
039: import java.net.UnknownHostException;
040: import java.util.Arrays;
041: import junit.framework.TestCase;
042:
043: public class AAAARecordTest extends TestCase {
044: Name m_an, m_rn;
045: InetAddress m_addr;
046: String m_addr_string;
047: byte[] m_addr_bytes;
048: long m_ttl;
049:
050: protected void setUp() throws TextParseException,
051: UnknownHostException {
052: m_an = Name.fromString("My.Absolute.Name.");
053: m_rn = Name.fromString("My.Relative.Name");
054: m_addr_string = "2001:db8:85a3:8d3:1319:8a2e:370:7334";
055: m_addr = InetAddress.getByName(m_addr_string);
056: m_addr_bytes = m_addr.getAddress();
057: m_ttl = 0x13579;
058: }
059:
060: public void test_ctor_0arg() throws UnknownHostException {
061: AAAARecord ar = new AAAARecord();
062: assertNull(ar.getName());
063: assertEquals(0, ar.getType());
064: assertEquals(0, ar.getDClass());
065: assertEquals(0, ar.getTTL());
066: assertNull(ar.getAddress());
067: }
068:
069: public void test_getObject() {
070: AAAARecord ar = new AAAARecord();
071: Record r = ar.getObject();
072: assertTrue(r instanceof AAAARecord);
073: }
074:
075: public void test_ctor_4arg() {
076: AAAARecord ar = new AAAARecord(m_an, DClass.IN, m_ttl, m_addr);
077: assertEquals(m_an, ar.getName());
078: assertEquals(Type.AAAA, ar.getType());
079: assertEquals(DClass.IN, ar.getDClass());
080: assertEquals(m_ttl, ar.getTTL());
081: assertEquals(m_addr, ar.getAddress());
082:
083: // a relative name
084: try {
085: new AAAARecord(m_rn, DClass.IN, m_ttl, m_addr);
086: fail("RelativeNameException not thrown");
087: } catch (RelativeNameException e) {
088: }
089:
090: // an IPv4 address
091: try {
092: new AAAARecord(m_an, DClass.IN, m_ttl, InetAddress
093: .getByName("192.168.0.1"));
094: fail("IllegalArgumentException not thrown");
095: } catch (IllegalArgumentException e) {
096: } catch (UnknownHostException e) {
097: fail(e.getMessage());
098: }
099: }
100:
101: public void test_rrFromWire() throws IOException {
102: DNSInput di = new DNSInput(m_addr_bytes);
103: AAAARecord ar = new AAAARecord();
104:
105: ar.rrFromWire(di);
106:
107: assertEquals(m_addr, ar.getAddress());
108: }
109:
110: public void test_rdataFromString() throws IOException {
111: Tokenizer t = new Tokenizer(m_addr_string);
112: AAAARecord ar = new AAAARecord();
113:
114: ar.rdataFromString(t, null);
115:
116: assertEquals(m_addr, ar.getAddress());
117:
118: // invalid address
119: t = new Tokenizer("193.160.232.1");
120: ar = new AAAARecord();
121: try {
122: ar.rdataFromString(t, null);
123: fail("TextParseException not thrown");
124: } catch (TextParseException e) {
125: }
126: }
127:
128: public void test_rrToString() {
129: AAAARecord ar = new AAAARecord(m_an, DClass.IN, m_ttl, m_addr);
130: assertEquals(m_addr_string, ar.rrToString());
131: }
132:
133: public void test_rrToWire() {
134: AAAARecord ar = new AAAARecord(m_an, DClass.IN, m_ttl, m_addr);
135:
136: // canonical
137: DNSOutput dout = new DNSOutput();
138: ar.rrToWire(dout, null, true);
139: assertTrue(Arrays.equals(m_addr_bytes, dout.toByteArray()));
140:
141: // case sensitive
142: dout = new DNSOutput();
143: ar.rrToWire(dout, null, false);
144: assertTrue(Arrays.equals(m_addr_bytes, dout.toByteArray()));
145: }
146: }
|