All Downloads are FREE. Search and download functionalities are using the official Maven repository.

patterntesting.runtime.junit.RuntimeTester Maven / Gradle / Ivy

Go to download

PatternTesting Runtime (patterntesting-rt) is the runtime component for the PatternTesting framework. It provides the annotations and base classes for the PatternTesting testing framework (e.g. patterntesting-check, patterntesting-concurrent or patterntesting-exception) but can be also used standalone for classpath monitoring or profiling. It uses AOP and AspectJ to perform this feat.

There is a newer version: 2.4.0
Show newest version
/*
 * $Id: RuntimeTester.java,v 1.3 2011/07/09 21:43:22 oboehm Exp $
 *
 * Copyright (c) 2011 by Oliver Boehm
 *
 * 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 orimplied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * (c)reated 09.05.2011 by oliver ([email protected])
 */

package patterntesting.runtime.junit;

import org.apache.commons.lang.SystemUtils;
import org.slf4j.*;

/**
 * This is a tester to do some runtime checking like memory checks and other
 * stuff.
 * 
 * @author oliver
 * @since 1.1.1 (09.05.2011)
 */
public final class RuntimeTester {
    
    private static final Logger log = LoggerFactory.getLogger(RuntimeTester.class);
    
    /** Utility class - no need to instantiate it. */
    private RuntimeTester() {}
    
    /**
     * If you have some tests which needs a certain amount of memory this test
     * is for you. This tests guarantees you that the VM is started with enough
     * memory (usually option "-Xmx").
     *
     * @param required the max memory in MB
     */
    public static void assertMaxMemory(final int required) {
        long mem = (Runtime.getRuntime().maxMemory() + 0x7FFFF) / 0x100000;
        log.debug("VM was started with " + mem + " MB max memory.");
        if (required > mem) {
            String hint = (" (use 'java -Xmx" + required + "m ...')");
            if (SystemUtils.JAVA_VENDOR.toUpperCase().startsWith("IBM")) {
                hint = "";
            }
            throw new AssertionError(required + " MB max memory required but only " + mem
                    + " MB available" + hint);
        }
    }
    
    /**
     * If you need a certain amount of free memory you can assert it with this
     * method here.
     *
     * @param required the required free memory in MB
     */
    public static void assertFreeMemory(final int required) {
        long free = Runtime.getRuntime().freeMemory() / 0x100000;
        if (required > free) {
            System.gc();
        }
        free = (Runtime.getRuntime().freeMemory() + 0x7FFFF) / 0x100000;
        log.debug(free + " MB memory is free.");
        if (required > free) {
            long maxMem = Runtime.getRuntime().maxMemory() / 0x100000 + required + 4 - free;
            String hint = " (use 'try -Xmx" + maxMem + "m ...')";
            throw new AssertionError(required + " MB free memory required but only " + free
                    + " MB are free" + hint);
        }
    }

}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy