mirror of
https://github.com/datarhei/core.git
synced 2025-10-06 00:17:07 +08:00
168 lines
3.1 KiB
Go
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)
|
|
}
|