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  }