github.com/containers/podman/v4@v4.9.4/libpod/lock/file/file_lock_test.go (about) 1 package file 2 3 import ( 4 "os" 5 "os/exec" 6 "path/filepath" 7 "strconv" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 // Test that creating and destroying locks work 14 func TestCreateAndDeallocate(t *testing.T) { 15 d := t.TempDir() 16 17 _, err := OpenFileLock(filepath.Join(d, "locks")) 18 assert.Error(t, err) 19 20 l, err := CreateFileLock(filepath.Join(d, "locks")) 21 assert.NoError(t, err) 22 23 lock, err := l.AllocateLock() 24 assert.NoError(t, err) 25 26 err = l.AllocateGivenLock(lock) 27 assert.Error(t, err) 28 29 err = l.DeallocateLock(lock) 30 assert.NoError(t, err) 31 32 err = l.AllocateGivenLock(lock) 33 assert.NoError(t, err) 34 35 err = l.DeallocateAllLocks() 36 assert.NoError(t, err) 37 38 err = l.AllocateGivenLock(lock) 39 assert.NoError(t, err) 40 41 err = l.DeallocateAllLocks() 42 assert.NoError(t, err) 43 } 44 45 // Test that creating and destroying locks work 46 func TestLockAndUnlock(t *testing.T) { 47 d := t.TempDir() 48 49 l, err := CreateFileLock(filepath.Join(d, "locks")) 50 assert.NoError(t, err) 51 52 lock, err := l.AllocateLock() 53 assert.NoError(t, err) 54 55 err = l.LockFileLock(lock) 56 assert.NoError(t, err) 57 58 lslocks, err := exec.LookPath("lslocks") 59 if err == nil { 60 lockPath := l.getLockPath(lock) 61 out, err := exec.Command(lslocks, "--json", "-p", strconv.Itoa(os.Getpid())).CombinedOutput() 62 assert.NoError(t, err) 63 64 assert.Contains(t, string(out), lockPath) 65 } 66 67 err = l.UnlockFileLock(lock) 68 assert.NoError(t, err) 69 }