001/*
002 * Copyright 2015-2024 the original author or authors
003 *
004 * This software is licensed under the Apache License, Version 2.0,
005 * the GNU Lesser General Public License version 2 or later ("LGPL")
006 * and the WTFPL.
007 * You may choose either license to govern your use of this software only
008 * upon the condition that you accept all of the terms of either
009 * the Apache License 2.0, the LGPL 2.1+ or the WTFPL.
010 */
011package org.minidns.integrationtest;
012
013import java.io.IOException;
014import java.net.InetAddress;
015
016import org.minidns.DnsClient;
017import org.minidns.dnsmessage.Question;
018import org.minidns.dnsqueryresult.DnsQueryResult;
019import org.minidns.dnsmessage.DnsMessage;
020import org.minidns.edns.Nsid;
021import org.minidns.edns.Edns.OptionCode;
022import org.minidns.iterative.IterativeDnsClient;
023import org.minidns.record.Record.TYPE;
024
025import static org.junit.jupiter.api.Assertions.assertNotNull;
026
027public class NsidTest {
028
029    @IntegrationTest
030    public static Nsid testNsidLRoot() {
031        DnsClient client = new DnsClient(null) {
032            @Override
033            protected DnsMessage.Builder newQuestion(DnsMessage.Builder message) {
034                message.getEdnsBuilder().addEdnsOption(Nsid.REQUEST);
035                return super.newQuestion(message);
036            }
037        };
038        DnsQueryResult result = null;
039        Question q = new Question("de", TYPE.NS);
040        for (InetAddress lRoot : IterativeDnsClient.getRootServer('l')) {
041            try {
042                result = client.query(q, lRoot);
043            } catch (IOException e) {
044                continue;
045            }
046            break;
047        }
048        Nsid nsid = result.response.getEdns().getEdnsOption(OptionCode.NSID);
049        assertNotNull(nsid);
050        return nsid;
051    }
052}