MCPcopy
hub / github.com/grpc/grpc-go / TestBuffer_Slice

Method TestBuffer_Slice

mem/buffers_test.go:302–347  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

300}
301
302func (s) TestBuffer_Slice(t *testing.T) {
303 freed := make(chan struct{})
304 data := []byte{1, 2, 3, 4}
305 buf := mem.NewBuffer(&data, poolFunc(func(*[]byte) {
306 close(freed)
307 }))
308
309 // Slice the buffer and verify the data.
310 slice1 := buf.Slice(1, 3)
311 if !bytes.Equal(slice1.ReadOnlyData(), data[1:3]) {
312 t.Fatalf("Buffer did not contain expected data. got %v, want %v", slice1.ReadOnlyData(), data[1:3])
313 }
314
315 // Verify the original buffer is not modified.
316 if !bytes.Equal(buf.ReadOnlyData(), data) {
317 t.Fatalf("Buffer did not contain expected data. got %v, want %v", buf.ReadOnlyData(), data)
318 }
319
320 // Slice the slice.
321 slice2 := slice1.Slice(0, 1)
322 if !bytes.Equal(slice2.ReadOnlyData(), data[1:2]) {
323 t.Fatalf("Buffer did not contain expected data. got %v, want %v", slice2.ReadOnlyData(), data[1:2])
324 }
325
326 // Free original and first slice — root should not be freed yet.
327 buf.Free()
328 slice1.Free()
329 select {
330 case <-freed:
331 t.Fatalf("Freed too early")
332 default:
333 }
334
335 // The last slice keeps the root alive.
336 if !bytes.Equal(slice2.ReadOnlyData(), data[1:2]) {
337 t.Fatalf("Buffer did not contain expected data. got %v, want %v", slice2.ReadOnlyData(), data[1:2])
338 }
339
340 slice2.Free()
341
342 select {
343 case <-freed:
344 default:
345 t.Fatalf("Still not freed")
346 }
347}
348
349func (s) TestBuffer_SliceAfterFree(t *testing.T) {
350 buf := newBuffer([]byte("abcd"), mem.NopBufferPool{})

Callers

nothing calls this directly

Calls 7

SliceMethod · 0.95
ReadOnlyDataMethod · 0.95
FreeMethod · 0.95
NewBufferFunction · 0.92
poolFuncFuncType · 0.85
EqualMethod · 0.65
FatalfMethod · 0.65

Tested by

no test coverage detected