Home / Function/ testMultipleLevelRetainedSliceWithNonRetained() — netty Function Reference

testMultipleLevelRetainedSliceWithNonRetained() — netty Function Reference

Architecture documentation for the testMultipleLevelRetainedSliceWithNonRetained() function in AbstractByteBufTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  2f364dc3_d1c2_911a_78a9_e440b707aee2["testMultipleLevelRetainedSliceWithNonRetained()"]
  6540f2d1_cdad_6705_dd1d_9a24e2e53242["AbstractByteBufTest"]
  2f364dc3_d1c2_911a_78a9_e440b707aee2 -->|defined in| 6540f2d1_cdad_6705_dd1d_9a24e2e53242
  33c3ff2e_e7c7_7e7e_3353_64ac2a77184b["testMultipleLevelRetainedSlice1()"]
  33c3ff2e_e7c7_7e7e_3353_64ac2a77184b -->|calls| 2f364dc3_d1c2_911a_78a9_e440b707aee2
  fe23423f_ca40_98fb_b8b4_23254835e647["testMultipleLevelRetainedSlice2()"]
  fe23423f_ca40_98fb_b8b4_23254835e647 -->|calls| 2f364dc3_d1c2_911a_78a9_e440b707aee2
  7c05242e_51ae_110d_fefb_ecceb09feff4["testMultipleLevelRetainedSlice3()"]
  7c05242e_51ae_110d_fefb_ecceb09feff4 -->|calls| 2f364dc3_d1c2_911a_78a9_e440b707aee2
  00e6c953_7bf6_7bbf_147f_bdec5cd2a96d["testMultipleLevelRetainedSlice4()"]
  00e6c953_7bf6_7bbf_147f_bdec5cd2a96d -->|calls| 2f364dc3_d1c2_911a_78a9_e440b707aee2
  style 2f364dc3_d1c2_911a_78a9_e440b707aee2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java lines 5532–5600

    private void testMultipleLevelRetainedSliceWithNonRetained(boolean doSlice1, boolean doSlice2) {
        ByteBuf buf = newBuffer(8).resetWriterIndex();
        ByteBuf expected1 = newBuffer(6).resetWriterIndex();
        ByteBuf expected2 = newBuffer(4).resetWriterIndex();
        ByteBuf expected3 = newBuffer(2).resetWriterIndex();
        ByteBuf expected4SliceSlice = newBuffer(1).resetWriterIndex();
        ByteBuf expected4DupSlice = newBuffer(1).resetWriterIndex();
        buf.writeBytes(new byte[] {1, 2, 3, 4, 5, 6, 7, 8});
        expected1.writeBytes(new byte[] {2, 3, 4, 5, 6, 7});
        expected2.writeBytes(new byte[] {3, 4, 5, 6});
        expected3.writeBytes(new byte[] {4, 5});
        expected4SliceSlice.writeBytes(new byte[] {5});
        expected4DupSlice.writeBytes(new byte[] {4});

        ByteBuf slice1 = buf.retainedSlice(buf.readerIndex() + 1, 6);
        assertEquals(0, slice1.compareTo(expected1));
        // Simulate a handler that releases the original buffer, and propagates a slice.
        buf.release();

        ByteBuf slice2 = slice1.retainedSlice(slice1.readerIndex() + 1, 4);
        assertEquals(0, slice2.compareTo(expected2));
        assertEquals(0, slice2.compareTo(slice2.duplicate()));
        assertEquals(0, slice2.compareTo(slice2.slice()));

        ByteBuf tmpBuf = slice2.retainedDuplicate();
        assertEquals(0, slice2.compareTo(tmpBuf));
        tmpBuf.release();
        tmpBuf = slice2.retainedSlice();
        assertEquals(0, slice2.compareTo(tmpBuf));
        tmpBuf.release();

        ByteBuf slice3 = doSlice1 ? slice2.slice(slice2.readerIndex() + 1, 2) : slice2.duplicate();
        if (doSlice1) {
            assertEquals(0, slice3.compareTo(expected3));
        } else {
            assertEquals(0, slice3.compareTo(expected2));
        }

        ByteBuf slice4 = doSlice2 ? slice3.slice(slice3.readerIndex() + 1, 1) : slice3.duplicate();
        if (doSlice1 && doSlice2) {
            assertEquals(0, slice4.compareTo(expected4SliceSlice));
        } else if (doSlice2) {
            assertEquals(0, slice4.compareTo(expected4DupSlice));
        } else {
            assertEquals(0, slice3.compareTo(slice4));
        }

        // Cleanup the expected buffers used for testing.
        assertTrue(expected1.release());
        assertTrue(expected2.release());
        assertTrue(expected3.release());
        assertTrue(expected4SliceSlice.release());
        assertTrue(expected4DupSlice.release());

        // Slice 4, 3, and 2 should effectively "share" a reference count.
        slice4.release();
        assertEquals(slice3.refCnt(), slice2.refCnt());
        assertEquals(slice3.refCnt(), slice4.refCnt());

        // Slice 1 should also release the original underlying buffer without throwing exceptions
        assertTrue(slice1.release());

        // Reference counting may be shared, or may be independently tracked, but at this point all buffers should
        // be deallocated and have a reference count of 0.
        assertEquals(0, buf.refCnt());
        assertEquals(0, slice1.refCnt());
        assertEquals(0, slice2.refCnt());
        assertEquals(0, slice3.refCnt());
    }

Domain

Subdomains

Frequently Asked Questions

What does testMultipleLevelRetainedSliceWithNonRetained() do?
testMultipleLevelRetainedSliceWithNonRetained() is a function in the netty codebase, defined in buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java.
Where is testMultipleLevelRetainedSliceWithNonRetained() defined?
testMultipleLevelRetainedSliceWithNonRetained() is defined in buffer/src/test/java/io/netty/buffer/AbstractByteBufTest.java at line 5532.
What calls testMultipleLevelRetainedSliceWithNonRetained()?
testMultipleLevelRetainedSliceWithNonRetained() is called by 4 function(s): testMultipleLevelRetainedSlice1, testMultipleLevelRetainedSlice2, testMultipleLevelRetainedSlice3, testMultipleLevelRetainedSlice4.

Analyze Your Own Codebase

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

Try Supermodel Free