mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 02:57:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//go:build race
 | 
						|
// +build race
 | 
						|
 | 
						|
// Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. Use
 | 
						|
// of this source code is governed by a BSD-style license that can be found in
 | 
						|
// the LICENSE file.
 | 
						|
 | 
						|
package arenaskl
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
// TestNodeArenaEnd tests allocating a node at the boundary of an arena. In Go
 | 
						|
// 1.14 when the race detector is running, Go will also perform some pointer
 | 
						|
// alignment checks. It will detect alignment issues, for example #667 where a
 | 
						|
// node's memory would straddle the arena boundary, with unused regions of the
 | 
						|
// node struct dipping into unallocated memory. This test is only run when the
 | 
						|
// race build tag is provided.
 | 
						|
func TestNodeArenaEnd(t *testing.T) {
 | 
						|
	ikey := makeIkey("a")
 | 
						|
	val := []byte("b")
 | 
						|
 | 
						|
	// Rather than hardcode an arena size at just the right size, try
 | 
						|
	// allocating using successively larger arena sizes until we allocate
 | 
						|
	// successfully. The prior attempt will have exercised the right code
 | 
						|
	// path.
 | 
						|
	for i := uint32(1); i < 256; i++ {
 | 
						|
		a := newArena(i)
 | 
						|
		_, err := newNode(a, 1, ikey, val)
 | 
						|
		if err == nil {
 | 
						|
			// We reached an arena size big enough to allocate a node.
 | 
						|
			// If there's an issue at the boundary, the race detector would
 | 
						|
			// have found it by now.
 | 
						|
			t.Log(i)
 | 
						|
			break
 | 
						|
		}
 | 
						|
		require.Equal(t, ErrArenaFull, err)
 | 
						|
	}
 | 
						|
}
 |