audit-go/audit/utils/sequence_generator_test.go
Christian Schaible 7623ffc225 Merged PR 678247: fix: Adjust SequenceNumberGenerator to revert specific sequence numbers
Concurrent invocations on the SequenceNumberGenerator can lead to gaps and duplicate sequence numbers. To fix the issue an internal "backlog" is added as a buffer. If a new number is requested the "backlog" is checked first before creating a new number.

The "host" HTTP-Header is filtered out hide internal information.

The following build dependencies have been updated:
- Go has been updated to version 1.23.3.
- Golanglint-ci has been updated to version v1.62.0.
- Buf has been updated to version v1.46.0

The following library dependencies have been updated:
- go.opentelemetry.io/otel has been updated to version v1.32.0
- go.opentelemetry.io/otel/trace has been updated to version v1.32.0

Related work items: #696569
2024-11-12 14:29:20 +00:00

58 lines
2.2 KiB
Go

package utils
import (
"github.com/stretchr/testify/assert"
"testing"
)
func Test_DefaultSequenceNumberGenerator(t *testing.T) {
t.Run("next", func(t *testing.T) {
var sequenceGenerator = NewDefaultSequenceNumberGenerator()
assert.Equal(t, uint64(0), (*sequenceGenerator).Next())
})
t.Run("revert", func(t *testing.T) {
var sequenceGenerator = NewDefaultSequenceNumberGenerator()
assert.Equal(t, uint64(0), (*sequenceGenerator).Next())
assert.Equal(t, uint64(1), (*sequenceGenerator).Next())
(*sequenceGenerator).Revert(uint64(1))
assert.Equal(t, uint64(1), (*sequenceGenerator).Next())
})
t.Run("revert first", func(t *testing.T) {
var sequenceGenerator = NewDefaultSequenceNumberGenerator()
assert.Equal(t, uint64(0), (*sequenceGenerator).Next())
assert.Equal(t, uint64(1), (*sequenceGenerator).Next())
(*sequenceGenerator).Revert(uint64(0))
assert.Equal(t, uint64(0), (*sequenceGenerator).Next())
})
t.Run("revert same value multiple times", func(t *testing.T) {
var sequenceGenerator = NewDefaultSequenceNumberGenerator()
assert.Equal(t, uint64(0), (*sequenceGenerator).Next())
assert.Equal(t, uint64(1), (*sequenceGenerator).Next())
assert.Equal(t, uint64(2), (*sequenceGenerator).Next())
(*sequenceGenerator).Revert(uint64(1))
(*sequenceGenerator).Revert(uint64(1))
assert.Equal(t, uint64(1), (*sequenceGenerator).Next())
assert.Equal(t, uint64(3), (*sequenceGenerator).Next())
})
t.Run("get and revert multiple", func(t *testing.T) {
var sequenceGenerator = NewDefaultSequenceNumberGenerator()
assert.Equal(t, uint64(0), (*sequenceGenerator).Next())
assert.Equal(t, uint64(1), (*sequenceGenerator).Next())
(*sequenceGenerator).Revert(uint64(1))
assert.Equal(t, uint64(1), (*sequenceGenerator).Next())
assert.Equal(t, uint64(2), (*sequenceGenerator).Next())
assert.Equal(t, uint64(3), (*sequenceGenerator).Next())
assert.Equal(t, uint64(4), (*sequenceGenerator).Next())
(*sequenceGenerator).Revert(uint64(2))
(*sequenceGenerator).Revert(uint64(3))
assert.Equal(t, uint64(2), (*sequenceGenerator).Next())
assert.Equal(t, uint64(3), (*sequenceGenerator).Next())
assert.Equal(t, uint64(5), (*sequenceGenerator).Next())
assert.Equal(t, uint64(6), (*sequenceGenerator).Next())
})
}