1 /*
 2  * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
 3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 4  *
 5  * This code is free software; you can redistribute it and/or modify it
 6  * under the terms of the GNU General Public License version 2 only, as
 7  * published by the Free Software Foundation.
 8  *
 9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 
24 import java.net.InetAddress;
25 import java.util.Arrays;
26 
27 import org.testng.Assert;
28 import org.testng.annotations.Test;
29 
30 import static impl.FaultyResolverProviderGetImpl.EXCEPTION_MESSAGE;
31 
32 /*
33  * @test
34  * @summary Test that InetAddress fast-fails if custom provider fails to
35  *  instantiate a resolver.
36  * @library providers/faulty
37  * @build faulty.provider/impl.FaultyResolverProviderGetImpl
38  * @run testng/othervm ProviderGetExceptionTest
39  */
40 
41 public class ProviderGetExceptionTest {
42 
43     @Test
44     public void getByNameExceptionTest() {
45         String hostName = "test.host";
46         System.out.println("Looking up address for the following host name:" + hostName);
47         callInetAddressAndCheckException(() -> InetAddress.getByName(hostName));
48     }
49 
50     @Test
51     public void getByAddressExceptionTest() {
52         byte[] address = new byte[]{1, 2, 3, 4};
53         System.out.println("Looking up host name for the following address:" + Arrays.toString(address));
54         callInetAddressAndCheckException(() -> InetAddress.getByAddress(address).getHostName());
55     }
56 
57     private void callInetAddressAndCheckException(Assert.ThrowingRunnable apiCall) {
58         IllegalArgumentException iae = Assert.expectThrows(IllegalArgumentException.class, apiCall);
59         System.out.println("Got exception of expected type:" + iae);
60         Assert.assertNull(iae.getCause(), "cause is not null");
61         Assert.assertEquals(iae.getMessage(), EXCEPTION_MESSAGE);
62     }
63 }