Home / Class/ DefaultMockTickerTest Class — netty Architecture

DefaultMockTickerTest Class — netty Architecture

Architecture documentation for the DefaultMockTickerTest class in DefaultMockTickerTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5["DefaultMockTickerTest"]
  77c6296e_b29e_2d4e_8756_8114654fcb42["DefaultMockTickerTest.java"]
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5 -->|defined in| 77c6296e_b29e_2d4e_8756_8114654fcb42
  3321a680_fd0e_d10e_4c0c_22429c80a985["newMockTickerShouldReturnDefaultMockTicker()"]
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5 -->|method| 3321a680_fd0e_d10e_4c0c_22429c80a985
  94944c49_08ce_bec0_f24d_9bab512ce669["defaultValues()"]
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5 -->|method| 94944c49_08ce_bec0_f24d_9bab512ce669
  c3ab7c1d_7895_3674_0556_577d02511cc9["advanceWithoutWaiters()"]
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5 -->|method| c3ab7c1d_7895_3674_0556_577d02511cc9
  9b918b13_8c4e_dbf0_35f0_eceaf65b261f["advanceWithNegativeAmount()"]
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5 -->|method| 9b918b13_8c4e_dbf0_35f0_eceaf65b261f
  3d2e9786_8639_114f_37ea_2ade1cf467ad["advanceWithWaiters()"]
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5 -->|method| 3d2e9786_8639_114f_37ea_2ade1cf467ad
  6ac2d952_ea1e_74ec_47c5_bd33f9c485df["sleepZero()"]
  15c7b7ca_db5e_f063_6092_a6f83d0d82e5 -->|method| 6ac2d952_ea1e_74ec_47c5_bd33f9c485df

Relationship Graph

Source Code

common/src/test/java/io/netty/util/concurrent/DefaultMockTickerTest.java lines 32–148

class DefaultMockTickerTest {

    @Test
    void newMockTickerShouldReturnDefaultMockTicker() {
        assertTrue(Ticker.newMockTicker() instanceof DefaultMockTicker);
    }

    @Test
    void defaultValues() {
        final MockTicker ticker = Ticker.newMockTicker();
        assertEquals(0, ticker.initialNanoTime());
        assertEquals(0, ticker.nanoTime());
    }

    @Test
    void advanceWithoutWaiters() {
        final MockTicker ticker = Ticker.newMockTicker();
        ticker.advance(42, TimeUnit.NANOSECONDS);
        assertEquals(0, ticker.initialNanoTime());
        assertEquals(42, ticker.nanoTime());

        ticker.advanceMillis(42);
        assertEquals(42_000_042, ticker.nanoTime());
    }

    @Test
    void advanceWithNegativeAmount() {
        final MockTicker ticker = Ticker.newMockTicker();
        assertThrows(IllegalArgumentException.class, () -> {
            ticker.advance(-1, TimeUnit.SECONDS);
        });

        assertThrows(IllegalArgumentException.class, () -> {
            ticker.advanceMillis(-1);
        });
    }

    @Timeout(60)
    @Test
    void advanceWithWaiters() throws Exception {
        final List<Thread> threads = new ArrayList<>();
        final DefaultMockTicker ticker = (DefaultMockTicker) Ticker.newMockTicker();
        final int numWaiters = 4;
        final List<FutureTask<Void>> futures = new ArrayList<>();
        for (int i = 0; i < numWaiters; i++) {
            FutureTask<Void> task = new FutureTask<>(() -> {
                try {
                    ticker.sleep(1, TimeUnit.MILLISECONDS);
                } catch (InterruptedException e) {
                    throw new CompletionException(e);
                }
                return null;
            });
            Thread thread = new Thread(task);
            threads.add(thread);
            futures.add(task);
            thread.start();
        }

        try {
            // Wait for all threads to be sleeping.
            for (Thread thread : threads) {
                ticker.awaitSleepingThread(thread);
            }

            // Time did not advance at all, and thus future will not complete.
            for (int i = 0; i < numWaiters; i++) {
                final int finalCnt = i;
                assertThrows(TimeoutException.class, () -> {
                    futures.get(finalCnt).get(1, TimeUnit.MILLISECONDS);
                });
            }

            // Advance just one nanosecond before completion.
            ticker.advance(999_999, TimeUnit.NANOSECONDS);

            // All threads should still be sleeping.
            for (Thread thread : threads) {
                ticker.awaitSleepingThread(thread);
            }

Frequently Asked Questions

What is the DefaultMockTickerTest class?
DefaultMockTickerTest is a class in the netty codebase, defined in common/src/test/java/io/netty/util/concurrent/DefaultMockTickerTest.java.
Where is DefaultMockTickerTest defined?
DefaultMockTickerTest is defined in common/src/test/java/io/netty/util/concurrent/DefaultMockTickerTest.java at line 32.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free