Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/pkg/lockutil/lockutil_test.go
2610 views
1
// SPDX-FileCopyrightText: Copyright The Lima Authors
2
// SPDX-License-Identifier: Apache-2.0
3
4
package lockutil
5
6
import (
7
"errors"
8
"fmt"
9
"os"
10
"path/filepath"
11
"strings"
12
"testing"
13
14
"gotest.tools/v3/assert"
15
)
16
17
const parallel = 20
18
19
func TestWithDirLock(t *testing.T) {
20
dir := t.TempDir()
21
log := filepath.Join(dir, "log")
22
23
errc := make(chan error, 10)
24
for i := range parallel {
25
go func() {
26
err := WithDirLock(dir, func() error {
27
if _, err := os.Stat(log); err == nil {
28
return nil
29
} else if !errors.Is(err, os.ErrNotExist) {
30
return err
31
}
32
logFile, err := os.OpenFile(log, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o640)
33
if err != nil {
34
return err
35
}
36
defer logFile.Close()
37
if _, err := fmt.Fprintf(logFile, "writer %d\n", i); err != nil {
38
return err
39
}
40
return logFile.Close()
41
})
42
errc <- err
43
}()
44
}
45
46
for range parallel {
47
err := <-errc
48
if err != nil {
49
t.Error(err)
50
}
51
}
52
53
data, err := os.ReadFile(log)
54
assert.NilError(t, err)
55
lines := strings.Split(strings.Trim(string(data), "\n"), "\n")
56
assert.Equal(t, len(lines), 1, "unexpected number of writers")
57
}
58
59