UUIDUtilTest.java

package com.fasterxml.uuid.impl;

import java.util.Random;
import java.util.UUID;

import com.fasterxml.uuid.Generators;
import com.fasterxml.uuid.NoArgGenerator;
import junit.framework.TestCase;

/**
 * Test class focusing on verifying functionality provided by
 * {@link UUIDUtil}.
 *<p>
 * NOTE: some of {@code UUIDUtil} testing is via main
 * {@link com.fasterxml.uuid.UUIDTest}.
 */
public class UUIDUtilTest extends TestCase
{
    final static int TEST_REPS = 1_000_000;

    public void testNilUUID() {
        UUID nil = UUIDUtil.nilUUID();
        // Should be all zeroes:
        assertEquals(0L, nil.getMostSignificantBits());
        assertEquals(0L, nil.getLeastSignificantBits());
    }

    public void testMaxUUID() {
        UUID max = UUIDUtil.maxUUID();
        // Should be all ones:
        assertEquals(~0, max.getMostSignificantBits());
        assertEquals(~0, max.getLeastSignificantBits());
    }

    public void testExtractTimestampUUIDTimeBased() {
        TimeBasedGenerator generator = Generators.timeBasedGenerator();
        final Random rnd = new Random(1);
        for (int i = 0; i < TEST_REPS; i++) {
            long rawTimestamp = rnd.nextLong() >>> 4;
            UUID uuid = generator.construct(rawTimestamp);
            assertEquals(rawTimestamp, UUIDUtil._getRawTimestampFromUuidV1(uuid));
        }
    }

    public void testExtractTimestampUUIDTimeBasedCurrentTimemillis() {
        TimeBasedGenerator generator = Generators.timeBasedGenerator();
        long time = System.currentTimeMillis();
        UUID uuid2 = generator.generate();
        assertEquals(time, UUIDUtil.extractTimestamp(uuid2));
    }


    public void testExtractTimestampUUIDTimeBasedReordered() {
        TimeBasedReorderedGenerator generator = Generators.timeBasedReorderedGenerator();
        final Random rnd = new Random(2);
        for (int i = 0; i < TEST_REPS; i++) {
            long rawTimestamp = rnd.nextLong() >>> 4;
            UUID uuid = generator.construct(rawTimestamp);
            assertEquals(rawTimestamp, UUIDUtil._getRawTimestampFromUuidV6(uuid));
        }
    }

    public void testExtractTimestampUUIDTimeBasedReorderedCurrentTimeMillis() {
        NoArgGenerator generator = Generators.timeBasedReorderedGenerator();
        long time = System.currentTimeMillis();
        UUID uuid = generator.generate();
        assertEquals(time, UUIDUtil.extractTimestamp(uuid));
    }

    public void testExtractTimestampUUIDEpochBased() {
        TimeBasedEpochGenerator generator = Generators.timeBasedEpochGenerator();
        final Random rnd = new Random(3);
        for (int i = 0; i < TEST_REPS; i++) {
            long rawTimestamp = rnd.nextLong() >>> 16;
            UUID uuid = generator.construct(rawTimestamp);
            assertEquals(rawTimestamp, UUIDUtil.extractTimestamp(uuid));
        }
    }

    public void testExtractTimestampUUIDEpochBasedCurrentTimeMillis() {
        NoArgGenerator generator = Generators.timeBasedEpochGenerator();
        long time = System.currentTimeMillis();
        UUID uuid = generator.generate();
        assertEquals(time, UUIDUtil.extractTimestamp(uuid));
    }


    public void testExtractTimestampUUIDEpochRandomBased() {
        TimeBasedEpochRandomGenerator generator = Generators.timeBasedEpochRandomGenerator();
        final Random rnd = new Random(3);
        for (int i = 0; i < TEST_REPS; i++) {
            long rawTimestamp = rnd.nextLong() >>> 16;
            UUID uuid = generator.construct(rawTimestamp);
            assertEquals(rawTimestamp, UUIDUtil.extractTimestamp(uuid));
        }
    }

    public void testExtractTimestampUUIDOnOtherValues() {
        assertEquals(0L, UUIDUtil.extractTimestamp(null));
        assertEquals(0L, UUIDUtil.extractTimestamp(UUID.fromString("00000000-0000-0000-0000-000000000000")));
        assertEquals(0L, UUIDUtil.extractTimestamp(UUIDUtil.nilUUID()));
        assertEquals(0L, UUIDUtil.extractTimestamp(UUIDUtil.maxUUID()));
    }
}