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 ARecordTest 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 = "193.160.232.5";
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: ARecord ar = new ARecord();
062: assertNull(ar.getName());
063: assertEquals(0, ar.getType());
064: assertEquals(0, ar.getDClass());
065: assertEquals(0, ar.getTTL());
066: assertEquals(InetAddress.getByName("0.0.0.0"), ar.getAddress());
067: }
068:
069: public void test_getObject() {
070: ARecord ar = new ARecord();
071: Record r = ar.getObject();
072: assertTrue(r instanceof ARecord);
073: }
074:
075: public void test_ctor_4arg() {
076: ARecord ar = new ARecord(m_an, DClass.IN, m_ttl, m_addr);
077: assertEquals(m_an, ar.getName());
078: assertEquals(Type.A, 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 ARecord(m_rn, DClass.IN, m_ttl, m_addr);
086: fail("RelativeNameException not thrown");
087: } catch (RelativeNameException e) {
088: }
089:
090: // an IPv6 address
091: try {
092: new ARecord(
093: m_an,
094: DClass.IN,
095: m_ttl,
096: InetAddress
097: .getByName("2001:0db8:85a3:08d3:1319:8a2e:0370:7334"));
098: fail("IllegalArgumentException not thrown");
099: } catch (IllegalArgumentException e) {
100: } catch (UnknownHostException e) {
101: fail(e.getMessage());
102: }
103: }
104:
105: public void test_rrFromWire() throws IOException {
106: DNSInput di = new DNSInput(m_addr_bytes);
107: ARecord ar = new ARecord();
108:
109: ar.rrFromWire(di);
110:
111: assertEquals(m_addr, ar.getAddress());
112: }
113:
114: public void test_rdataFromString() throws IOException {
115: Tokenizer t = new Tokenizer(m_addr_string);
116: ARecord ar = new ARecord();
117:
118: ar.rdataFromString(t, null);
119:
120: assertEquals(m_addr, ar.getAddress());
121:
122: // invalid address
123: t = new Tokenizer("193.160.232");
124: ar = new ARecord();
125: try {
126: ar.rdataFromString(t, null);
127: fail("TextParseException not thrown");
128: } catch (TextParseException e) {
129: }
130: }
131:
132: public void test_rrToString() {
133: ARecord ar = new ARecord(m_an, DClass.IN, m_ttl, m_addr);
134: assertEquals(m_addr_string, ar.rrToString());
135: }
136:
137: public void test_rrToWire() {
138: ARecord ar = new ARecord(m_an, DClass.IN, m_ttl, m_addr);
139: DNSOutput dout = new DNSOutput();
140:
141: ar.rrToWire(dout, null, true);
142: assertTrue(Arrays.equals(m_addr_bytes, dout.toByteArray()));
143:
144: dout = new DNSOutput();
145: ar.rrToWire(dout, null, false);
146: assertTrue(Arrays.equals(m_addr_bytes, dout.toByteArray()));
147: }
148: }
|