vault/helper/locking/core_locking_test.go
Vault Automation 0c6c13dd38
license: update headers to IBM Corp. (#10229) (#10233)
* license: update headers to IBM Corp.
* `make proto`
* update offset because source file changed

Signed-off-by: Ryan Cragun <me@ryan.ec>
Co-authored-by: Ryan Cragun <me@ryan.ec>
2025-10-21 15:20:20 -06:00

103 lines
2.9 KiB
Go

// Copyright IBM Corp. 2016, 2025
// SPDX-License-Identifier: BUSL-1.1
package locking
import (
"testing"
"github.com/stretchr/testify/assert"
)
// TestParseDetectDeadlockConfigParameter verifies that all types of strings
// that could be obtained from the configuration file, are correctly parsed
// into a slice of string elements.
func TestParseDetectDeadlockConfigParameter(t *testing.T) {
for _, tc := range []struct {
name string
detectDeadlockConfigParameter string
expectedResult []string
}{
{
name: "empty-string",
},
{
name: "single-value",
detectDeadlockConfigParameter: "bar",
expectedResult: []string{"bar"},
},
{
name: "single-value-mixed-case",
detectDeadlockConfigParameter: "BaR",
expectedResult: []string{"bar"},
},
{
name: "multiple-values",
detectDeadlockConfigParameter: "bar,BAZ,fIZ",
expectedResult: []string{"bar", "baz", "fiz"},
},
{
name: "non-canonical-string-list",
detectDeadlockConfigParameter: "bar , baz, ",
expectedResult: []string{"bar", "baz", ""},
},
} {
t.Run(tc.name, func(t *testing.T) {
result := ParseDetectDeadlockConfigParameter(tc.detectDeadlockConfigParameter)
assert.ElementsMatch(t, tc.expectedResult, result)
})
}
}
// TestCreateConfigurableRWMutex verifies the correct behaviour in determining
// whether a deadlock detecting RWMutex should be returned or not based on the
// input arguments for the CreateConfigurableRWMutex function.
func TestCreateConfigurableRWMutex(t *testing.T) {
mutexTypes := map[bool]string{
false: "locking.SyncRWMutex",
true: "locking.DeadlockRWMutex",
}
for _, tc := range []struct {
name string
detectDeadlocks []string
lock string
expectDeadlockLock bool
}{
{
name: "no-lock-types-specified",
lock: "foo",
},
{
name: "single-lock-specified-no-match",
detectDeadlocks: []string{"bar"},
lock: "foo",
},
{
name: "single-lock-specified-match",
detectDeadlocks: []string{"foo"},
lock: "foo",
expectDeadlockLock: true,
},
{
name: "multiple-locks-specified-no-match",
detectDeadlocks: []string{"bar", "baz", "fiz"},
lock: "foo",
},
{
name: "multiple-locks-specified-match",
detectDeadlocks: []string{"bar", "foo", "baz"},
lock: "foo",
expectDeadlockLock: true,
},
} {
t.Run(tc.name, func(t *testing.T) {
m := CreateConfigurableRWMutex(tc.detectDeadlocks, tc.lock)
_, ok := m.(*DeadlockRWMutex)
if tc.expectDeadlockLock != ok {
t.Fatalf("unexpected RWMutex type returned, expected: %s got %s", mutexTypes[tc.expectDeadlockLock], mutexTypes[ok])
}
})
}
}