// Path: node/src/main/java/io/airlift/node/AddressToHostname.java
// public static String encodeAddressAsHostname(InetAddress inetAddress)
// {
//     String ipString = InetAddresses.toAddrString(inetAddress);
//     if (inetAddress instanceof Inet4Address) {
//         ipString = ipString.replace('.', '-');
//     }
//     else {
//         // v6 addresses contain `:` which isn't legal, also v6 can
//         // start with a `:` so we prefix with an `x`
//         ipString = "x" + ipString.replace(':', '-');
//     }
//     return ipString + IP_ENCODED_SUFFIX;
// }
// 
// Path: node/src/main/java/io/airlift/node/AddressToHostname.java
// public static Optional<InetAddress> tryDecodeHostnameToAddress(String hostname)
// {
//     if (!hostname.endsWith(IP_ENCODED_SUFFIX)) {
//         return Optional.empty();
//     }
// 
//     String ipString = hostname.substring(0, hostname.length() - IP_ENCODED_SUFFIX.length());
//     if (ipString.startsWith("x")) {
//         ipString = ipString.substring(1).replace('-', ':');
//     }
//     else {
//         ipString = ipString.replace('-', '.');
//     }
// 
//     byte[] address = InetAddresses.forString(ipString).getAddress();
// 
//     try {
//         return Optional.of(InetAddress.getByAddress(hostname, address));
//     }
//     catch (UnknownHostException e) {
//         throw new IllegalArgumentException(e);
//     }
// }


import com.google.common.net.InetAddresses;
import org.testng.annotations.Test;
import java.util.Optional;
import static io.airlift.node.AddressToHostname.encodeAddressAsHostname;
import static io.airlift.node.AddressToHostname.tryDecodeHostnameToAddress;
import static org.testng.Assert.assertEquals;
/*
 * 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.
 */
package io.airlift.node;




public class TestAddressSource
{
    @Test
    public void testIpEncoding()
    {
        verifyEncoding("127.0.0.1", "127-0-0-1.ip");
        verifyEncoding("1.2.3.4", "1-2-3-4.ip");
        verifyEncoding("2001:db8:85a3::8a2e:370:7334", "x2001-db8-85a3--8a2e-370-7334.ip");
        verifyEncoding("2001:db8:85a3:0000::8a2e:0370:7334", "x2001-db8-85a3--8a2e-370-7334.ip");
        verifyEncoding("::1", "x--1.ip");
    }

    private static void verifyEncoding(String addressString, String encodedHostname)
    {
        assertEquals(encodeAddressAsHostname(InetAddresses.forString(addressString)), encodedHostname);
// Path: node/src/main/java/io/airlift/node/AddressToHostname.java
// public static String encodeAddressAsHostname(InetAddress inetAddress)
// {
//     String ipString = InetAddresses.toAddrString(inetAddress);
//     if (inetAddress instanceof Inet4Address) {
//         ipString = ipString.replace('.', '-');
//     }
//     else {
//         // v6 addresses contain `:` which isn't legal, also v6 can
//         // start with a `:` so we prefix with an `x`
//         ipString = "x" + ipString.replace(':', '-');
//     }
//     return ipString + IP_ENCODED_SUFFIX;
// }
// 
// Path: node/src/main/java/io/airlift/node/AddressToHostname.java
// public static Optional<InetAddress> tryDecodeHostnameToAddress(String hostname)
// {
//     if (!hostname.endsWith(IP_ENCODED_SUFFIX)) {
//         return Optional.empty();
//     }
// 
//     String ipString = hostname.substring(0, hostname.length() - IP_ENCODED_SUFFIX.length());
//     if (ipString.startsWith("x")) {
//         ipString = ipString.substring(1).replace('-', ':');
//     }
//     else {
//         ipString = ipString.replace('-', '.');
//     }
// 
//     byte[] address = InetAddresses.forString(ipString).getAddress();
// 
//     try {
//         return Optional.of(InetAddress.getByAddress(hostname, address));
//     }
//     catch (UnknownHostException e) {
//         throw new IllegalArgumentException(e);
//     }
// }


// Path: node/src/test/java/io/airlift/node/TestAddressSource.java
import com.google.common.net.InetAddresses;
import org.testng.annotations.Test;
import java.util.Optional;
import static io.airlift.node.AddressToHostname.encodeAddressAsHostname;
import static io.airlift.node.AddressToHostname.tryDecodeHostnameToAddress;
import static org.testng.Assert.assertEquals;

/*
 * 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.
 */
package io.airlift.node;




public class TestAddressSource
{
    @Test
    public void testIpEncoding()
    {
        verifyEncoding("127.0.0.1", "127-0-0-1.ip");
        verifyEncoding("1.2.3.4", "1-2-3-4.ip");
        verifyEncoding("2001:db8:85a3::8a2e:370:7334", "x2001-db8-85a3--8a2e-370-7334.ip");
        verifyEncoding("2001:db8:85a3:0000::8a2e:0370:7334", "x2001-db8-85a3--8a2e-370-7334.ip");
        verifyEncoding("::1", "x--1.ip");
    }

    private static void verifyEncoding(String addressString, String encodedHostname)
    {
        assertEquals(encodeAddressAsHostname(InetAddresses.forString(addressString)), encodedHostname);
        assertEquals(tryDecodeHostnameToAddress(encodedHostname), Optional.of(InetAddresses.forString(addressString)));