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  }