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