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 }