github.com/netdata/go.d.plugin@v0.58.1/agent/filelock/filelock_test.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package filelock
     4  
     5  import (
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestNew(t *testing.T) {
    14  	assert.NotNil(t, New(""))
    15  }
    16  
    17  func TestLocker_Lock(t *testing.T) {
    18  	tests := map[string]func(t *testing.T, dir string){
    19  		"register a lock": func(t *testing.T, dir string) {
    20  			reg := New(dir)
    21  
    22  			ok, err := reg.Lock("name")
    23  			assert.True(t, ok)
    24  			assert.NoError(t, err)
    25  		},
    26  		"register the same lock twice": func(t *testing.T, dir string) {
    27  			reg := New(dir)
    28  
    29  			ok, err := reg.Lock("name")
    30  			require.True(t, ok)
    31  			require.NoError(t, err)
    32  
    33  			ok, err = reg.Lock("name")
    34  			assert.True(t, ok)
    35  			assert.NoError(t, err)
    36  		},
    37  		"failed to register locked by other process lock": func(t *testing.T, dir string) {
    38  			reg1 := New(dir)
    39  			reg2 := New(dir)
    40  
    41  			ok, err := reg1.Lock("name")
    42  			require.True(t, ok)
    43  			require.NoError(t, err)
    44  
    45  			ok, err = reg2.Lock("name")
    46  			assert.False(t, ok)
    47  			assert.NoError(t, err)
    48  		},
    49  		"failed to register because a directory doesnt exist": func(t *testing.T, dir string) {
    50  			reg := New(dir + dir)
    51  
    52  			ok, err := reg.Lock("name")
    53  			assert.False(t, ok)
    54  			assert.Error(t, err)
    55  		},
    56  	}
    57  
    58  	for name, test := range tests {
    59  		t.Run(name, func(t *testing.T) {
    60  			dir, err := os.MkdirTemp(os.TempDir(), "netdata-go-test-file-lock-registry")
    61  			require.NoError(t, err)
    62  			defer func() { require.NoError(t, os.RemoveAll(dir)) }()
    63  
    64  			test(t, dir)
    65  		})
    66  	}
    67  }
    68  
    69  func TestLocker_Unlock(t *testing.T) {
    70  	tests := map[string]func(t *testing.T, dir string){
    71  		"unregister a lock": func(t *testing.T, dir string) {
    72  			reg := New(dir)
    73  
    74  			ok, err := reg.Lock("name")
    75  			require.True(t, ok)
    76  			require.NoError(t, err)
    77  
    78  			assert.NoError(t, reg.Unlock("name"))
    79  		},
    80  		"unregister not registered lock": func(t *testing.T, dir string) {
    81  			reg := New(dir)
    82  
    83  			assert.NoError(t, reg.Unlock("name"))
    84  		},
    85  	}
    86  
    87  	for name, test := range tests {
    88  		t.Run(name, func(t *testing.T) {
    89  			dir, err := os.MkdirTemp(os.TempDir(), "netdata-go-test-file-lock-registry")
    90  			require.NoError(t, err)
    91  			defer func() { require.NoError(t, os.RemoveAll(dir)) }()
    92  
    93  			test(t, dir)
    94  		})
    95  	}
    96  }