alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (NetUtilBenchmark.java)

This example Java source code file (NetUtilBenchmark.java) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

abstractmicrobenchmark, benchmark, garbage, hashmap, measurement, netutilbenchmark, obvious, runtimeexception, string, threads, util, warmup

The NetUtilBenchmark.java Java example source code

/*
 * Copyright 2014 The Netty Project
 *
 * The Netty Project licenses this file to you 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.netty.microbenchmark.common;

import io.netty.microbench.util.AbstractMicrobenchmark;
import io.netty.util.NetUtil;

import java.util.HashMap;
import java.util.Map;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Threads;
import org.openjdk.jmh.annotations.Warmup;

@Threads(4)
@Warmup(iterations = 10)
@Measurement(iterations = 10)
public class NetUtilBenchmark extends AbstractMicrobenchmark {

    @Benchmark
    public void useGetByNameIpv4() {
        for (String testEntry : invalidIpV4Hosts.keySet()) {
            if (NetUtil.getByName(testEntry, true) != null) {
                throw new RuntimeException("error");
            }
        }
    }

    @Benchmark
    public void useGetByNameIpv6() {
        for (String testEntry : invalidIpV6Hosts.keySet()) {
            if (NetUtil.getByName(testEntry, true) != null) {
                throw new RuntimeException("error");
            }
        }
    }

    @Benchmark
    public void useIsValidIpv6() {
        for (String host : invalidIpV6Hosts.keySet()) {
            if (NetUtil.isValidIpV6Address(host)) {
                throw new RuntimeException("error");
            }
        }
    }

    @Benchmark
    public void useIsValidIpv4() {
        for (String host : invalidIpV4Hosts.keySet()) {
            if (NetUtil.isValidIpV4Address(host)) {
                throw new RuntimeException("error");
            }
        }
    }

    private static final Map<String, byte[]> invalidIpV4Hosts = new HashMap() {
        private static final long serialVersionUID = 1299215199895717282L;
        {
            put("1.256.3.4", null);
            put("256.0.0.1", null);
            put("1.1.1.1.1", null);
            put("x.255.255.255", null);
            put("0.1:0.0", null);
            put("0.1.0.0:", null);
            put("127.0.0.", null);
            put("1.2..4", null);
            put("192.0.1", null);
            put("192.0.1.1.1", null);
            put("192.0.1.a", null);
            put("19a.0.1.1", null);
            put("a.0.1.1", null);
            put(".0.1.1", null);
            put("...", null);
        }
    };

    private static final Map<String, byte[]> invalidIpV6Hosts = new HashMap() {
        private static final long serialVersionUID = -5870810805409009696L;
        {
            // Test method with garbage.
            put("Obvious Garbage", null);
            // Test method with preferred style, too many :
            put("0:1:2:3:4:5:6:7:8", null);
            // Test method with preferred style, not enough :
            put("0:1:2:3:4:5:6", null);
            // Test method with preferred style, bad digits.
            put("0:1:2:3:4:5:6:x", null);
            // Test method with preferred style, adjacent :
            put("0:1:2:3:4:5:6::7", null);
            // Too many : separators trailing
            put("0:1:2:3:4:5:6:7::", null);
            // Too many : separators leading
            put("::0:1:2:3:4:5:6:7", null);
            // Too many : separators trailing
            put("1:2:3:4:5:6:7:", null);
            // Too many : separators leading
            put(":1:2:3:4:5:6:7", null);
            // Too many : separators leading 0
            put("0::1:2:3:4:5:6:7", null);
            // Test method with preferred style, too many digits.
            put("0:1:2:3:4:5:6:789abcdef", null);
            // Test method with compressed style, bad digits.
            put("0:1:2:3::x", null);
            // Test method with compressed style, too many adjacent :
            put("0:1:2:::3", null);
            // Test method with compressed style, too many digits.
            put("0:1:2:3::abcde", null);
            // Test method with preferred style, too many :
            put("0:1:2:3:4:5:6:7:8", null);
            // Test method with compressed style, not enough :
            put("0:1", null);
            // Test method with ipv4 style, bad ipv6 digits.
            put("0:0:0:0:0:x:10.0.0.1", null);
            // Test method with ipv4 style, bad ipv4 digits.
            put("0:0:0:0:0:0:10.0.0.x", null);
            // Test method with ipv4 style, adjacent :
            put("0:0:0:0:0::0:10.0.0.1", null);
            // Test method with ipv4 style, too many ipv6 digits.
            put("0:0:0:0:0:00000:10.0.0.1", null);
            // Test method with ipv4 style, too many :
            put("0:0:0:0:0:0:0:10.0.0.1", null);
            // Test method with ipv4 style, not enough :
            put("0:0:0:0:0:10.0.0.1", null);
            // Test method with ipv4 style, too many .
            put("0:0:0:0:0:0:10.0.0.0.1", null);
            // Test method with ipv4 style, not enough .
            put("0:0:0:0:0:0:10.0.1", null);
            // Test method with ipv4 style, adjacent .
            put("0:0:0:0:0:0:10..0.0.1", null);
            // Test method with ipv4 style, leading .
            put("0:0:0:0:0:0:.0.0.1", null);
            // Test method with ipv4 style, leading .
            put("0:0:0:0:0:0:.10.0.0.1", null);
            // Test method with ipv4 style, trailing .
            put("0:0:0:0:0:0:10.0.0.", null);
            // Test method with ipv4 style, trailing .
            put("0:0:0:0:0:0:10.0.0.1.", null);
            // Test method with compressed ipv4 style, bad ipv6 digits.
            put("::fffx:192.168.0.1", null);
            // Test method with compressed ipv4 style, bad ipv4 digits.
            put("::ffff:192.168.0.x", null);
            // Test method with compressed ipv4 style, too many adjacent :
            put(":::ffff:192.168.0.1", null);
            // Test method with compressed ipv4 style, too many ipv6 digits.
            put("::fffff:192.168.0.1", null);
            // Test method with compressed ipv4 style, too many ipv4 digits.
            put("::ffff:1923.168.0.1", null);
            // Test method with compressed ipv4 style, not enough :
            put(":ffff:192.168.0.1", null);
            // Test method with compressed ipv4 style, too many .
            put("::ffff:192.168.0.1.2", null);
            // Test method with compressed ipv4 style, not enough .
            put("::ffff:192.168.0", null);
            // Test method with compressed ipv4 style, adjacent .
            put("::ffff:192.168..0.1", null);
            // Test method, garbage.
            put("absolute, and utter garbage", null);
            // Test method, bad ipv6 digits.
            put("x:0:0:0:0:0:10.0.0.1", null);
            // Test method, bad ipv4 digits.
            put("0:0:0:0:0:0:x.0.0.1", null);
            // Test method, too many ipv6 digits.
            put("00000:0:0:0:0:0:10.0.0.1", null);
            // Test method, too many ipv4 digits.
            put("0:0:0:0:0:0:10.0.0.1000", null);
            // Test method, too many :
            put("0:0:0:0:0:0:0:10.0.0.1", null);
            // Test method, not enough :
            put("0:0:0:0:0:10.0.0.1", null);
            // Test method, out of order trailing :
            put("0:0:0:0:0:10.0.0.1:", null);
            // Test method, out of order leading :
            put(":0:0:0:0:0:10.0.0.1", null);
            // Test method, out of order leading :
            put("0:0:0:0::10.0.0.1:", null);
            // Test method, out of order trailing :
            put(":0:0:0:0::10.0.0.1", null);
            // Test method, too many .
            put("0:0:0:0:0:0:10.0.0.0.1", null);
            // Test method, not enough .
            put("0:0:0:0:0:0:10.0.1", null);
            // Test method, adjacent .
            put("0:0:0:0:0:0:10.0.0..1", null);
            // Double compression symbol
            put("::0::", null);
            // Empty contents
            put("", null);
            // Trailing : (max number of : = 8)
            put("2001:0:4136:e378:8000:63bf:3fff:fdd2:", null);
            // Leading : (max number of : = 8)
            put(":aaaa:bbbb:cccc:dddd:eeee:ffff:1111:2222", null);
            // Invalid character
            put("1234:2345:3456:4567:5678:6789::X890", null);
            // Trailing . in IPv4
            put("::ffff:255.255.255.255.", null);
            // To many characters in IPv4
            put("::ffff:0.0.1111.0", null);
            // Test method, adjacent .
            put("::ffff:0.0..0", null);
            // Not enough IPv4 entries trailing .
            put("::ffff:127.0.0.", null);
            // Not enough IPv4 entries no trailing .
            put("::ffff:1.2.4", null);
            // Extra IPv4 entry
            put("::ffff:192.168.0.1.255", null);
            // Not enough IPv6 content
            put(":ffff:192.168.0.1.255", null);
            // Intermixed IPv4 and IPv6 symbols
            put("::ffff:255.255:255.255.", null);
        }
    };
}

Other Java examples (source code examples)

Here is a short list of links related to this Java NetUtilBenchmark.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.