Class RandomizedTest


  • public class RandomizedTest
    extends java.lang.Object
    Common scaffolding for subclassing randomized tests.
    See Also:
    Listeners, RandomizedContext
    • Field Detail

      • UTF8

        protected static final java.nio.charset.Charset UTF8
      • UTF16

        protected static final java.nio.charset.Charset UTF16
      • ISO8859_1

        protected static final java.nio.charset.Charset ISO8859_1
      • US_ASCII

        protected static final java.nio.charset.Charset US_ASCII
      • UTF32

        protected static final java.nio.charset.Charset UTF32
      • globalTempDir

        private static java.nio.file.Path globalTempDir
        See Also:
        globalTempDir()
      • tempSubFileNameCount

        private static java.util.concurrent.atomic.AtomicInteger tempSubFileNameCount
      • BOOLEANS

        private static final java.util.HashMap<java.lang.String,​java.lang.Boolean> BOOLEANS
        Boolean constants mapping.
    • Constructor Detail

      • RandomizedTest

        public RandomizedTest()
    • Method Detail

      • isNightly

        public static boolean isNightly()
        Returns true if Nightly test group is enabled.
        See Also:
        Nightly
      • getRandom

        public static java.util.Random getRandom()
        Shortcut for RandomizedContext.getRandom(). Even though this method is static, it returns per-thread Random instance, so no race conditions can occur.

        It is recommended that specific methods are used to pick random values.

      • randomBoolean

        public static boolean randomBoolean()
      • randomByte

        public static byte randomByte()
      • randomShort

        public static short randomShort()
      • randomInt

        public static int randomInt()
      • randomFloat

        public static float randomFloat()
      • randomDouble

        public static double randomDouble()
      • randomLong

        public static long randomLong()
      • randomGaussian

        public static double randomGaussian()
        See Also:
        Random.nextGaussian()
      • randomBytesOfLength

        public static byte[] randomBytesOfLength​(int length)
        Returns a byte array with random content.
        Parameters:
        length - The length of the byte array. Can be zero.
        Returns:
        Returns a byte array with random content.
      • randomBytesOfLength

        public static byte[] randomBytesOfLength​(int minLength,
                                                 int maxLength)
        Returns a byte array with random content.
        Parameters:
        minLength - The minimum length of the byte array. Can be zero.
        maxLength - The maximum length of the byte array. Can be zero.
        Returns:
        Returns a byte array with random content.
      • randomInt

        public static int randomInt​(int max)
        A random integer from 0..max (inclusive).
      • randomLong

        public static long randomLong​(long max)
        A random long from 0..max (inclusive).
      • randomIntBetween

        public static int randomIntBetween​(int min,
                                           int max)
        A random integer from min to max (inclusive).
        See Also:
        scaledRandomIntBetween(int, int)
      • randomLongBetween

        public static long randomLongBetween​(long min,
                                             long max)
        A random long from min to max (inclusive).
      • atMost

        public static int atMost​(int max)
        Returns a non-negative random value smaller or equal max. The value picked is affected by isNightly() and multiplier().

        This method is effectively an alias to:

         scaledRandomIntBetween(0, max)
         
        See Also:
        scaledRandomIntBetween(int, int)
      • rarely

        public static boolean rarely()
        Rarely returns true in about 10% of all calls (regardless of the isNightly() mode).
      • frequently

        public static boolean frequently()
        The exact opposite of rarely().
      • randomFrom

        public static <T> T randomFrom​(T[] array)
        Pick a random object from the given array. The array must not be empty.
      • randomFrom

        public static <T> T randomFrom​(java.util.List<T> list)
        Pick a random object from the given list.
      • randomFrom

        public static byte randomFrom​(byte[] array)
      • randomFrom

        public static short randomFrom​(short[] array)
      • randomFrom

        public static int randomFrom​(int[] array)
      • randomFrom

        public static char randomFrom​(char[] array)
      • randomFrom

        public static float randomFrom​(float[] array)
      • randomFrom

        public static long randomFrom​(long[] array)
      • randomFrom

        public static double randomFrom​(double[] array)
      • multiplier

        public static double multiplier()
        A multiplier can be used to linearly scale certain values. It can be used to make data or iterations of certain tests "heavier" for nightly runs, for example.

        The default multiplier value is 1.

        See Also:
        SYSPROP_MULTIPLIER
      • iterations

        public static int iterations​(int min,
                                     int max)
        Returns a "scaled" number of iterations for loops which can have a variable iteration count. This method is effectively an alias to scaledRandomIntBetween(int, int).
      • scaledRandomIntBetween

        public static int scaledRandomIntBetween​(int min,
                                                 int max)
        Returns a "scaled" random number between min and max (inclusive). The number of iterations will fall between [min, max], but the selection will also try to achieve the points below:
        • the multiplier can be used to move the number of iterations closer to min (if it is smaller than 1) or closer to max (if it is larger than 1). Setting the multiplier to 0 will always result in picking min.
        • on normal runs, the number will be closer to min than to max.
        • on nightly runs, the number will be closer to max than to min.
        Parameters:
        min - Minimum (inclusive).
        max - Maximum (inclusive).
        Returns:
        Returns a random number between min and max.
        See Also:
        multiplier()
      • globalTempDir

        public static java.nio.file.Path globalTempDir()
                                                throws java.io.IOException
        Global temporary directory created for the duration of this class's lifespan. If multiple class loaders are used, there may be more global temp dirs, but it shouldn't really be the case in practice.
        Throws:
        java.io.IOException
      • newTempDir

        public java.nio.file.Path newTempDir()
                                      throws java.io.IOException
        Creates a new temporary directory for the LifecycleScope.TEST duration.
        Throws:
        java.io.IOException
        See Also:
        globalTempDir()
      • newTempDir

        public static java.nio.file.Path newTempDir​(LifecycleScope scope)
                                             throws java.io.IOException
        Creates a temporary directory, deleted after the given lifecycle phase. Temporary directory is created relative to a globally picked temporary directory.
        Throws:
        java.io.IOException
      • closeAfterTest

        public <T extends java.io.Closeable> T closeAfterTest​(T resource)
        Registers a Closeable resource that should be closed after the test completes.
        Returns:
        resource (for call chaining).
      • closeAfterSuite

        public static <T extends java.io.Closeable> T closeAfterSuite​(T resource)
        Registers a Closeable resource that should be closed after the suite completes.
        Returns:
        resource (for call chaining).
      • newTempFile

        public java.nio.file.Path newTempFile()
                                       throws java.io.IOException
        Creates a new temporary file for the LifecycleScope.TEST duration.
        Throws:
        java.io.IOException
      • newTempFile

        public static java.nio.file.Path newTempFile​(LifecycleScope scope)
                                              throws java.io.IOException
        Creates a new temporary file deleted after the given lifecycle phase completes. The file is physically created on disk, but is not locked or opened.
        Throws:
        java.io.IOException
      • nextTempName

        protected static java.lang.String nextTempName()
        Next temporary filename.
      • rmDir

        public static void rmDir​(java.nio.file.Path path)
                          throws java.io.IOException
        Recursively delete a folder. Throws an exception if any failure occurs.
        Parameters:
        path - Path to the folder to be (recursively) deleted. The folder must exist.
        Throws:
        java.io.IOException
      • newServerSocket

        public static java.net.ServerSocket newServerSocket​(LifecycleScope scope)
                                                     throws java.io.IOException
        Assign a temporary server socket. If you need a temporary port one can assign a server socket and close it immediately, just to acquire its port number.
        Parameters:
        scope - The lifecycle scope to close the socket after. If the socket is closed earlier, nothing happens (silently dropped).
        Throws:
        java.io.IOException
      • randomLocale

        public static java.util.Locale randomLocale()
        Return a random Locale from the available locales on the system.

        Warning: This test assumes the returned array of locales is repeatable from jvm execution to jvm execution. It _may_ be different from jvm to jvm and as such, it can render tests execute in a different way.

      • randomTimeZone

        public static java.util.TimeZone randomTimeZone()
        Return a random TimeZone from the available timezones on the system.

        Warning: This test assumes the returned array of time zones is repeatable from jvm execution to jvm execution. It _may_ be different from jvm to jvm and as such, it can render tests execute in a different way.

      • randomAsciiOfLength

        @Deprecated
        public static java.lang.String randomAsciiOfLength​(int codeUnits)
        Deprecated.
      • $

        public static java.lang.Object[] $​(java.lang.Object... objects)
        This is an absolutely hacky utility to take a vararg as input and return the array of arguments as output. The name is a dollar for brevity, idea borrowed from http://code.google.com/p/junitparams/.
      • $$

        public static java.lang.Object[][] $$​(java.lang.Object[]... objects)
        See Also:
        $(java.lang.Object...)
      • sleep

        public static void sleep​(long millis)
        Same as Thread.sleep(long).
      • assumeTrue

        public static void assumeTrue​(boolean condition)
        Making Assume.assumeTrue(boolean) directly available.
      • assumeFalse

        public static void assumeFalse​(boolean condition)
      • assumeNotNull

        public static void assumeNotNull​(java.lang.Object... objects)
        Making Assume.assumeNotNull(Object...) directly available.
      • assumeTrue

        public static void assumeTrue​(java.lang.String message,
                                      boolean condition)
        Parameters:
        condition - If false an InternalAssumptionViolatedException is thrown by this method and the test case (should be) ignored (or rather technically, flagged as a failure not passing a certain assumption). Tests that are assumption-failures do not break builds (again: typically).
        message - Message to be included in the exception's string.
      • assumeFalse

        public static void assumeFalse​(java.lang.String message,
                                       boolean condition)
      • assumeNoException

        public static void assumeNoException​(java.lang.String msg,
                                             java.lang.Throwable t)
        Assume t is null.
      • assumeNoException

        public static void assumeNoException​(java.lang.Throwable t)
        Making Assume.assumeNoException(Throwable) directly available.
      • systemPropertyAsDouble

        public static double systemPropertyAsDouble​(java.lang.String propertyName,
                                                    double defaultValue)
        Get a system property and convert it to a double, if defined. Otherwise, return the default value.
      • systemPropertyAsFloat

        public static float systemPropertyAsFloat​(java.lang.String propertyName,
                                                  float defaultValue)
        Get a system property and convert it to a float, if defined. Otherwise, return the default value.
      • systemPropertyAsInt

        public static int systemPropertyAsInt​(java.lang.String propertyName,
                                              int defaultValue)
        Get a system property and convert it to an int, if defined. Otherwise, return the default value.
      • systemPropertyAsLong

        public static float systemPropertyAsLong​(java.lang.String propertyName,
                                                 int defaultValue)
        Get a system property and convert it to a long, if defined. Otherwise, return the default value.
      • systemPropertyAsBoolean

        public static boolean systemPropertyAsBoolean​(java.lang.String propertyName,
                                                      boolean defaultValue)
        Get a system property and convert it to a boolean, if defined. This method returns true if the property exists an is set to any of the following strings (case-insensitive): true, on, yes, enabled.

        false is returned if the property exists and is set to any of the following strings (case-insensitive): false, off, no, disabled.

      • checkContext

        private static void checkContext()
        Ensures we're running with an initialized RandomizedContext.