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  }