|
4 | 4 | package lock |
5 | 5 |
|
6 | 6 | import ( |
| 7 | + "bytes" |
7 | 8 | "context" |
8 | 9 | "errors" |
| 10 | + "io" |
9 | 11 | "os" |
10 | 12 | "path/filepath" |
11 | 13 | "runtime" |
@@ -49,11 +51,40 @@ func TestCreatesAndRemovesFile(t *testing.T) { |
49 | 51 | require.NoError(t, err) |
50 | 52 | require.FileExists(t, p, "Lock didn't create the file") |
51 | 53 |
|
| 54 | + buf := bytes.NewBuffer(nil) |
| 55 | + _, err = io.Copy(buf, lock.f.Fh()) |
| 56 | + require.NoError(t, err) |
| 57 | + require.NotEmpty(t, buf, "Lock didn't write debug info to the locked file") |
| 58 | + |
52 | 59 | err = lock.Unlock() |
53 | 60 | require.NoError(t, err) |
54 | 61 | require.NoFileExists(t, p, "Unlock didn't remove the file") |
55 | 62 | } |
56 | 63 |
|
| 64 | +func TestFileExists(t *testing.T) { |
| 65 | + p := filepath.Join(t.TempDir(), t.Name()) |
| 66 | + f, err := os.Create(p) |
| 67 | + require.NoError(t, err) |
| 68 | + data := "stuff" |
| 69 | + _, err = f.WriteString(data) |
| 70 | + require.NoError(t, err) |
| 71 | + require.NoError(t, f.Close()) |
| 72 | + |
| 73 | + // Lock should succeed when the file exists but isn't locked |
| 74 | + lock, err := New(p, 0) |
| 75 | + require.NoError(t, err) |
| 76 | + err = lock.Lock(ctx) |
| 77 | + require.NoError(t, err) |
| 78 | + |
| 79 | + buf := bytes.NewBuffer(nil) |
| 80 | + _, err = io.Copy(buf, lock.f.Fh()) |
| 81 | + require.NoError(t, err) |
| 82 | + require.NotEqual(t, data, buf, "Lock didn't write debug info to the locked file") |
| 83 | + |
| 84 | + require.NoError(t, lock.Unlock()) |
| 85 | + require.NoFileExists(t, p, "Unlock didn't remove the file") |
| 86 | +} |
| 87 | + |
57 | 88 | func TestLockError(t *testing.T) { |
58 | 89 | p := filepath.Join(t.TempDir(), t.Name()) |
59 | 90 | lock, err := New(p, 0) |
|
0 commit comments