/* * dnssecjava - a DNSSEC validating stub resolver for Java * Copyright (c) 2013-2015 Ingo Bauersachs * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.jitsi.dnssec; import static org.junit.Assert.*; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; import org.jitsi.dnssec.SMessage; import org.jitsi.dnssec.SRRset; import org.junit.Test; import org.xbill.DNS.AAAARecord; import org.xbill.DNS.ARecord; import org.xbill.DNS.DClass; import org.xbill.DNS.Message; import org.xbill.DNS.Name; import org.xbill.DNS.Record; import org.xbill.DNS.Section; import org.xbill.DNS.TextParseException; import org.xbill.DNS.Type; public class TestSMessage { @Test(expected = IllegalArgumentException.class) public void testGetUndefinedSectionBelow() { SMessage m = new SMessage(0, null); m.getSectionRRsets(-1); } @Test(expected = IllegalArgumentException.class) public void testGetUndefinedSectionAtLowerBorder() { SMessage m = new SMessage(0, null); m.getSectionRRsets(0); } @Test(expected = IllegalArgumentException.class) public void testGetUndefinedSectionAtUpperBorder() { SMessage m = new SMessage(0, null); m.getSectionRRsets(4); } @Test(expected = IllegalArgumentException.class) public void testGetUndefinedSectionAbove() { SMessage m = new SMessage(0, null); m.getSectionRRsets(100); } @Test() public void testGetEmptySection() { SMessage m = new SMessage(0, null); List<SRRset> sets = m.getSectionRRsets(Section.ANSWER); assertEquals(0, sets.size()); } @Test() public void testGetEmptySectionByType() { SMessage m = new SMessage(0, null); SRRset[] sets = m.getSectionRRsets(Section.ANSWER, Type.A); assertEquals(0, sets.length); } @Test() public void testGetSectionByType() throws UnknownHostException { Message m = new Message(); Record r1 = new ARecord(Name.root, DClass.IN, 0, InetAddress.getByAddress(new byte[]{0,0,0,0})); m.addRecord(r1, Section.ANSWER); Record r2 = new AAAARecord(Name.root, DClass.IN, 0, InetAddress.getByAddress(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1})); m.addRecord(r2, Section.ANSWER); SMessage sm = new SMessage(m); SRRset[] result = sm.getSectionRRsets(Section.ANSWER, Type.A); assertEquals(1, result.length); assertEquals(Type.A, result[0].getType()); } @Test() public void testRecordCountForQuestionIsOne() { SMessage m = new SMessage(0, null); int count = m.getCount(Section.QUESTION); assertEquals(1, count); } @Test() public void testRecordCountForEmptySectionIsZero() { SMessage m = new SMessage(0, null); int count = m.getCount(Section.ADDITIONAL); assertEquals(0, count); } @Test() public void testRecordCountForIsValid() throws UnknownHostException { Message m = new Message(); m.addRecord(new ARecord(Name.root, DClass.IN, 0, InetAddress.getByAddress(new byte[]{0,0,0,0})), Section.ANSWER); SMessage sm = new SMessage(m); int count = sm.getCount(Section.ANSWER); assertEquals(1, count); } @Test() public void testAnswerSectionSearchFound() throws UnknownHostException { Message m = new Message(); Record r = new ARecord(Name.root, DClass.IN, 0, InetAddress.getByAddress(new byte[]{0,0,0,0})); m.addRecord(r, Section.ANSWER); SMessage sm = new SMessage(m); SRRset result = sm.findAnswerRRset(Name.root, Type.A, DClass.IN); assertEquals(r, result.first()); } @Test() public void testAnswerSectionSearchNotFoundDifferentClass() throws UnknownHostException { Message m = new Message(); Record r = new ARecord(Name.root, DClass.IN, 0, InetAddress.getByAddress(new byte[]{0,0,0,0})); m.addRecord(r, Section.ANSWER); SMessage sm = new SMessage(m); SRRset result = sm.findAnswerRRset(Name.root, Type.A, DClass.CH); assertNull(result); } @Test() public void testAnswerSectionSearchNotFoundDifferentType() throws UnknownHostException { Message m = new Message(); Record r = new ARecord(Name.root, DClass.IN, 0, InetAddress.getByAddress(new byte[]{0,0,0,0})); m.addRecord(r, Section.ANSWER); SMessage sm = new SMessage(m); SRRset result = sm.findAnswerRRset(Name.root, Type.MX, DClass.IN); assertNull(result); } @Test() public void testAnswerSectionSearchNotFoundDifferentName() throws UnknownHostException, TextParseException { Message m = new Message(); Record r = new ARecord(Name.fromString("asdf."), DClass.IN, 0, InetAddress.getByAddress(new byte[]{0,0,0,0})); m.addRecord(r, Section.ANSWER); SMessage sm = new SMessage(m); SRRset result = sm.findAnswerRRset(Name.root, Type.MX, DClass.IN); assertNull(result); } }