Files
podman/libpod/lock/file/file_lock_test.go
Giuseppe Scrivano 827ac0859f lock: new lock type "file"
it is a wrapper around containers/storage file locking.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-07-02 16:41:10 +02:00

75 lines
1.5 KiB
Go

package file
import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
// Test that creating and destroying locks work
func TestCreateAndDeallocate(t *testing.T) {
d, err := ioutil.TempDir("", "filelock")
assert.NoError(t, err)
defer os.RemoveAll(d)
l, err := OpenFileLock(filepath.Join(d, "locks"))
assert.Error(t, err)
l, err = CreateFileLock(filepath.Join(d, "locks"))
assert.NoError(t, err)
lock, err := l.AllocateLock()
assert.NoError(t, err)
err = l.AllocateGivenLock(lock)
assert.Error(t, err)
err = l.DeallocateLock(lock)
assert.NoError(t, err)
err = l.AllocateGivenLock(lock)
assert.NoError(t, err)
err = l.DeallocateAllLocks()
assert.NoError(t, err)
err = l.AllocateGivenLock(lock)
assert.NoError(t, err)
err = l.DeallocateAllLocks()
assert.NoError(t, err)
}
// Test that creating and destroying locks work
func TestLockAndUnlock(t *testing.T) {
d, err := ioutil.TempDir("", "filelock")
assert.NoError(t, err)
defer os.RemoveAll(d)
l, err := CreateFileLock(filepath.Join(d, "locks"))
assert.NoError(t, err)
lock, err := l.AllocateLock()
assert.NoError(t, err)
err = l.LockFileLock(lock)
assert.NoError(t, err)
lslocks, err := exec.LookPath("lslocks")
if err == nil {
lockPath := l.getLockPath(lock)
out, err := exec.Command(lslocks, "--json", "-p", fmt.Sprintf("%d", os.Getpid())).CombinedOutput()
assert.NoError(t, err)
assert.Contains(t, string(out), lockPath)
}
err = l.UnlockFileLock(lock)
assert.NoError(t, err)
}