Files
core/cluster/store/lock_test.go
2023-09-18 15:18:21 +02:00

168 lines
3.1 KiB
Go

package store
import (
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestCreateLockCommand(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
err = s.applyCommand(Command{
Operation: OpCreateLock,
Data: CommandCreateLock{
Name: "foobar",
ValidUntil: time.Now().Add(3 * time.Second),
},
})
require.NoError(t, err)
_, ok := s.data.Locks["foobar"]
require.True(t, ok)
}
func TestCreateLock(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
cmd := CommandCreateLock{
Name: "foobar",
ValidUntil: time.Now().Add(3 * time.Second),
}
err = s.createLock(cmd)
require.NoError(t, err)
err = s.createLock(cmd)
require.Error(t, err)
require.Eventually(t, func() bool {
err = s.createLock(cmd)
return err == nil
}, 5*time.Second, time.Second)
}
func TestDeleteLockCommand(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
err = s.applyCommand(Command{
Operation: OpCreateLock,
Data: CommandCreateLock{
Name: "foobar",
ValidUntil: time.Now().Add(10 * time.Second),
},
})
require.NoError(t, err)
_, ok := s.data.Locks["foobar"]
require.True(t, ok)
err = s.applyCommand(Command{
Operation: OpDeleteLock,
Data: CommandDeleteLock{
Name: "foobar",
},
})
require.NoError(t, err)
_, ok = s.data.Locks["foobar"]
require.False(t, ok)
}
func TestDeleteLock(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
err = s.deleteLock(CommandDeleteLock{
Name: "foobar",
})
require.NoError(t, err)
cmd := CommandCreateLock{
Name: "foobar",
ValidUntil: time.Now().Add(10 * time.Second),
}
err = s.createLock(cmd)
require.NoError(t, err)
err = s.createLock(cmd)
require.Error(t, err)
err = s.deleteLock(CommandDeleteLock{
Name: "foobar",
})
require.NoError(t, err)
err = s.createLock(cmd)
require.NoError(t, err)
}
func TestClearLocksCommand(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
err = s.applyCommand(Command{
Operation: OpCreateLock,
Data: CommandCreateLock{
Name: "foobar",
ValidUntil: time.Now().Add(3 * time.Second),
},
})
require.NoError(t, err)
_, ok := s.data.Locks["foobar"]
require.True(t, ok)
err = s.applyCommand(Command{
Operation: OpClearLocks,
Data: CommandClearLocks{},
})
require.NoError(t, err)
_, ok = s.data.Locks["foobar"]
require.True(t, ok)
time.Sleep(3 * time.Second)
err = s.applyCommand(Command{
Operation: OpClearLocks,
Data: CommandClearLocks{},
})
require.NoError(t, err)
_, ok = s.data.Locks["foobar"]
require.False(t, ok)
}
func TestClearLocks(t *testing.T) {
s, err := createStore()
require.NoError(t, err)
cmd := CommandCreateLock{
Name: "foobar",
ValidUntil: time.Now().Add(3 * time.Second),
}
err = s.createLock(cmd)
require.NoError(t, err)
err = s.clearLocks(CommandClearLocks{})
require.NoError(t, err)
err = s.createLock(cmd)
require.Error(t, err)
time.Sleep(3 * time.Second)
err = s.clearLocks(CommandClearLocks{})
require.NoError(t, err)
err = s.createLock(cmd)
require.NoError(t, err)
}