github.com/lirm/aeron-go@v0.0.0-20230415210743-920325491dc4/aeron/logbuffer/logbuffers_test.go (about) 1 /* 2 Copyright 2016 Stanislav Liberman 3 Copyright 2022 Steven Stern 4 5 Licensed under the Apache License, Version 2.0 (the "License"); 6 you may not use this file except in compliance with the License. 7 You may obtain a copy of the License at 8 9 http://www.apache.org/licenses/LICENSE-2.0 10 11 Unless required by applicable law or agreed to in writing, software 12 distributed under the License is distributed on an "AS IS" BASIS, 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 See the License for the specific language governing permissions and 15 limitations under the License. 16 */ 17 18 package logbuffer 19 20 import ( 21 "github.com/lirm/aeron-go/aeron/atomic" 22 "github.com/lirm/aeron-go/aeron/util" 23 "github.com/lirm/aeron-go/aeron/util/memmap" 24 "github.com/stretchr/testify/assert" 25 "github.com/stretchr/testify/require" 26 "os" 27 "testing" 28 ) 29 30 func TestWrap(t *testing.T) { 31 defer func() { 32 err := recover() 33 assert.Nilf(t, err, "Panic: %v", err) 34 }() 35 36 lb, err := NewTestingLogbuffer() 37 defer assert.NoError(t, RemoveTestingLogbufferFile()) 38 require.NoError(t, err) 39 assert.NoError(t, lb.Close()) 40 } 41 42 func TestWrapFail(t *testing.T) { 43 fname := "logbuffers.bin" 44 mmap, err := memmap.NewFile(fname, 0, 16*1024*1024-1) 45 defer assert.NoError(t, os.Remove(fname)) 46 require.NoError(t, err) 47 assert.NoError(t, mmap.Close()) 48 49 assert.Panics(t, func() { Wrap(fname) }) 50 } 51 52 func TestLogBuffers_Buffer(t *testing.T) { 53 defer func() { 54 err := recover() 55 assert.Nilf(t, err, "Panic: %v", err) 56 }() 57 58 lb, err := NewTestingLogbuffer() 59 defer assert.NoError(t, RemoveTestingLogbufferFile()) 60 require.NoError(t, err) 61 defer assert.NoError(t, lb.Close()) 62 63 for i := 0; i <= PartitionCount; i++ { 64 assert.NotNilf(t, lb.Buffer(i), "buffer %d", i) 65 } 66 } 67 68 func TestLogBuffers_BufferFail(t *testing.T) { 69 lb, err := NewTestingLogbuffer() 70 defer assert.NoError(t, RemoveTestingLogbufferFile()) 71 require.NoError(t, err) 72 defer assert.NoError(t, lb.Close()) 73 74 // Index is zero-based 75 assert.Panics(t, func() { lb.Buffer(PartitionCount + 1) }) 76 } 77 78 func TestHeader_ReservedValue(t *testing.T) { 79 bytes := make([]byte, 1000) 80 buffer := atomic.MakeBuffer(bytes) 81 assert.Equal(t, buffer.Capacity(), int32(1000)) 82 83 var header Header 84 header.Wrap(buffer.Ptr(), 1000) 85 assert.Equal(t, header.GetReservedValue(), int64(0)) 86 87 header.SetReservedValue(123) 88 assert.Equal(t, header.GetReservedValue(), int64(123)) 89 } 90 91 func TestLogBuffers_Meta(t *testing.T) { 92 defer func() { 93 err := recover() 94 assert.Nilf(t, err, "Panic: %v", err) 95 }() 96 97 lb, err := NewTestingLogbuffer() 98 defer assert.NoError(t, RemoveTestingLogbufferFile()) 99 require.NoError(t, err) 100 defer assert.NoError(t, lb.Close()) 101 102 for i := 0; i <= PartitionCount; i++ { 103 assert.NotNilf(t, lb.Buffer(i), "nil buffer %d", i) 104 } 105 106 meta := lb.Meta() 107 108 //t.Logf("meta fly size: %d", meta.Size()) 109 //t.Logf("active term count offset: %d", meta.ActiveTermCountOff.Get()) 110 //t.Logf("initTermID: %d", meta.InitTermID.Get()) 111 //t.Logf("CorrelationId: %d", meta.CorrelationId.Get()) 112 //t.Logf("tailCounter0: %d", meta.TailCounter[0].Get()) 113 //t.Logf("tailCounter1: %d", meta.TailCounter[1].Get()) 114 //t.Logf("tailCounter2: %d", meta.TailCounter[2].Get()) 115 //t.Logf("defaultFrameHdrLen: %d", meta.DefaultFrameHdrLen.Get()) 116 117 assert.Equal(t, meta.Size(), int(util.CacheLineLength*7)) 118 }