diff options
Diffstat (limited to 'mDNSResponder/Clients/Java/DNSSDUnitTest.java')
-rw-r--r-- | mDNSResponder/Clients/Java/DNSSDUnitTest.java | 334 |
1 files changed, 334 insertions, 0 deletions
diff --git a/mDNSResponder/Clients/Java/DNSSDUnitTest.java b/mDNSResponder/Clients/Java/DNSSDUnitTest.java new file mode 100644 index 00000000..2b1839a0 --- /dev/null +++ b/mDNSResponder/Clients/Java/DNSSDUnitTest.java @@ -0,0 +1,334 @@ +/* -*- Mode: Java; tab-width: 4 -*- + * + * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * DNSSDUnitTest is a simple program that exercises parts of the DNSSD API. + */ + +import com.apple.dnssd.*; + +import java.net.*; +import java.util.*; + + +class DNSSDUnitTest +{ + public static final String TEST_TYPE = "_unittest._udp"; + public static final String WIRE_CHAR_SET = "ISO-8859-1"; + + public DNSSDUnitTest fInstance = null; + + public DNSSDUnitTest() throws Exception + { + fStage = 0; + fInstance = this; + + Enumeration en = NetworkInterface.getNetworkInterfaces(); + while ( en.hasMoreElements()) + System.out.println( ((NetworkInterface) en.nextElement()).getName()); + } + + public void testTxtRecord() + { + byte[] src = { 6, 'a', 't', '=', 'X', 'Y', 'Z' }; + TXTRecord txtRecord = new TXTRecord( src); + String a; + + txtRecord.set( "path", "~/names"); + txtRecord.set( "rw", (String) null); + txtRecord.set( "empty", ""); + txtRecord.set( "ttl", "4"); + + byte[] rawBytes = txtRecord.getRawBytes(); + System.out.println( ( new String( rawBytes, 0, rawBytes.length)) + " has count " + + String.valueOf( txtRecord.size())); + + System.out.println( txtRecord); + boolean ttlPresent = txtRecord.contains( "ttl"); + System.out.println( "ttl is present: " + ( ttlPresent ? "true" : "false")); + boolean timeoutPresent = txtRecord.contains( "timeout"); + System.out.println( "timeout is present: " + ( timeoutPresent ? "true" : "false")); + + txtRecord.set( "path", "~/numbers"); + System.out.println( txtRecord); + + txtRecord.remove( "ttl"); + System.out.println( txtRecord); + + txtRecord.remove( "path"); + System.out.println( txtRecord); + + txtRecord.remove( "at"); + System.out.println( txtRecord); + + txtRecord.set( "rw", "1"); + System.out.println( txtRecord); + } + + public void run() throws DNSSDException + { + System.out.println( "Running DNSSD unit test for " + System.getProperty( "user.name")); + + this.testTxtRecord(); + + fRegTest = new RegTest(); + new BrowseTest(); + new DomainTest(); + new RegistrarTest(); + + this.waitForEnd(); + } + + protected int fStage; + protected RegTest fRegTest; + + public synchronized void bumpStage() + { + fStage++; + this.notifyAll(); + } + + protected synchronized void waitForEnd() + { + int stage = fStage; + while ( stage == fStage) + { + try { + wait(); + } catch (InterruptedException e) {} + } + } + + public static void main(String s[]) + { + try { + new DNSSDUnitTest().run(); + } + catch ( Exception e) { terminateWithException( e); } + } + + protected static void terminateWithException( Exception e) + { + e.printStackTrace(); + System.exit( -1); + } +} + +class TermReporter implements BaseListener +{ + public void operationFailed( DNSSDService service, int errorCode) + { + System.out.println( this.getClass().getName() + " encountered error " + String.valueOf( errorCode)); + } + + protected void finalize() throws Throwable + { + System.out.println( "Instance of " + this.getClass().getName() + " has been destroyed"); + } +} + +class RegTest extends TermReporter implements RegisterListener +{ + public static final int TEST_PORT = 5678; + + public RegTest() throws DNSSDException + { + fReg = DNSSD.register( 0, 0, "Test service", DNSSDUnitTest.TEST_TYPE, "", "", TEST_PORT, null, this); + } + + public void serviceRegistered( DNSSDRegistration registration, int flags, String serviceName, + String regType, String domain) + { + String s = "RegTest result flags:" + String.valueOf( flags) + + " serviceName:" + serviceName + " regType:" + regType + " domain:" + domain; + System.out.println( s); + + try { + new DupRegTest(); + + byte[] kResponsiblePerson = { 'c','o','o','k','i','e',' ','m','o','n','s','t','e','r' }; + fReg.addRecord( 0, 17 /*ns_t_rp*/, kResponsiblePerson, 3600); + new QueryTest( 0, 0, "Test service", 17 /*ns_t_rp*/, 1); + } catch( Exception e) { e.printStackTrace(); } + } + + protected DNSSDRegistration fReg; +} + +class DupRegTest extends TermReporter implements RegisterListener +{ + public static final int TEST_PORT = 5678; + + public DupRegTest() throws DNSSDException + { + DNSSD.register( DNSSD.NO_AUTO_RENAME | DNSSD.UNIQUE, 0, "Test service", DNSSDUnitTest.TEST_TYPE, "", "", TEST_PORT + 1, null, this); + } + + public void serviceRegistered( DNSSDRegistration registration, int flags, String serviceName, + String regType, String domain) + { + System.out.println( "Oik - registered a duplicate!"); + String s = "DupRegTest result flags:" + String.valueOf( flags) + + " serviceName:" + serviceName + " regType:" + regType + " domain:" + domain; + System.out.println( s); + } +} + +class BrowseTest extends TermReporter implements BrowseListener +{ + public BrowseTest() + { + try { + DNSSD.browse( 0, 0, DNSSDUnitTest.TEST_TYPE, "", this); + } catch( Exception e) { e.printStackTrace(); } + } + + public void serviceFound( DNSSDService browser, int flags, int ifIndex, + String serviceName, String regType, String domain) + { + String s = "BrowseTest found flags:" + String.valueOf( flags) + + " ifIndex:" + String.valueOf( ifIndex) + + " serviceName:" + serviceName + " regType:" + regType + " domain:" + domain; + System.out.println( s); + + System.out.println( "Resolving " + serviceName); + new ResolveTest( 0, ifIndex, serviceName, regType, domain); + } + + public void serviceLost( DNSSDService browser, int flags, int ifIndex, + String serviceName, String regType, String domain) + { + String s = "BrowseTest lost flags:" + String.valueOf( flags) + + " ifIndex:" + String.valueOf( ifIndex) + + " serviceName:" + serviceName + " regType:" + regType + " domain:" + domain; + System.out.println( s); + } + + public void operationFailed( DNSSDService service, int errorCode) + { + System.out.println( "Browse failed " + String.valueOf( errorCode)); + } +} + +class DomainTest extends TermReporter implements DomainListener +{ + public DomainTest() + { + try { + DNSSD.enumerateDomains( DNSSD.BROWSE_DOMAINS, 0, this); + } catch( Exception e) { e.printStackTrace(); } + } + + public void domainFound( DNSSDService enumerator, int flags, int ifIndex, String domain) + { + String s = "Domain found flags:" + String.valueOf( flags) + + " ifIndex:" + String.valueOf( ifIndex) + + " domain:" + domain; + System.out.println( s); + } + + public void domainLost( DNSSDService enumerator, int flags, int ifIndex, String domain) + { + String s = "Domain lost flags:" + String.valueOf( flags) + + " ifIndex:" + String.valueOf( ifIndex) + + " domain:" + domain; + System.out.println( s); + } + + public void operationFailed( DNSSDService service, int errorCode) + { + System.out.println( "Domain enum op failed " + String.valueOf( errorCode)); + } +} + +class ResolveTest extends TermReporter implements ResolveListener +{ + public ResolveTest( int flags, int ifIndex, String serviceName, String regType, + String domain) + { + try { + DNSSD.resolve( flags, ifIndex, serviceName, regType, domain, this); + } catch( Exception e) { e.printStackTrace(); } + } + + public void serviceResolved( DNSSDService resolver, int flags, int ifIndex, String fullName, + String hostName, int port, TXTRecord txtRecord) + { + String a; + String s = "ResolveTest result flags:" + String.valueOf( flags) + + " ifIndex:" + String.valueOf( ifIndex) + + " fullName:" + fullName + " hostName:" + hostName + " port:" + String.valueOf( port); + for ( int i=0; null != ( a = txtRecord.getKey( i)); i++) + s += " attr/val " + String.valueOf( i) + ": " + a + "," + txtRecord.getValueAsString( i); + + System.out.println( s); + + System.out.println( "Querying " + hostName); + new QueryTest( 0, ifIndex, hostName, 1 /* ns_t_a */, 1 /* ns_c_in */); + } +} + +class QueryTest extends TermReporter implements QueryListener +{ + public QueryTest( int flags, int ifIndex, String serviceName, int rrtype, int rrclass) + { + try { + DNSSD.queryRecord( flags, ifIndex, serviceName, rrtype, rrclass, this); + } catch( Exception e) { e.printStackTrace(); } + } + + public void queryAnswered( DNSSDService query, int flags, int ifIndex, String fullName, + int rrtype, int rrclass, byte[] rdata, int ttl) + { + String s = "QueryTest result flags:" + String.valueOf( flags) + + " ifIndex:" + String.valueOf( ifIndex) + + " fullName:" + fullName + " rrtype:" + String.valueOf( rrtype) + + " rrclass:" + String.valueOf( rrclass) + " ttl:" + String.valueOf( ttl); + System.out.println( s); + + try { + String dataTxt = new String( rdata, 0, rdata.length, DNSSDUnitTest.WIRE_CHAR_SET); + System.out.println( "Query data is:" + dataTxt); + } catch( Exception e) { e.printStackTrace(); } + } +} + +class RegistrarTest extends TermReporter implements RegisterRecordListener +{ + public RegistrarTest() + { + try { + byte[] kResponsiblePerson = { 'g','r','o','v','e','r' }; + fRegistrar = DNSSD.createRecordRegistrar( this); + fRegistrar.registerRecord( DNSSD.UNIQUE, 0, + "test.registrartest.local", 17 /*ns_t_rp*/, 1, kResponsiblePerson, 3600); + } catch( Exception e) { e.printStackTrace(); } + } + + public void recordRegistered( DNSRecord record, int flags) + { + String s = "RegistrarTest result flags:" + String.valueOf( flags); + System.out.println( s); + + try { + byte[] kResponsiblePerson = { 'e','l','m','o' }; + record.update( 0, kResponsiblePerson, 3600); + record.remove(); + } catch( Exception e) { e.printStackTrace(); } + } + + protected DNSSDRecordRegistrar fRegistrar; +} + |