MCPcopy
hub / github.com/perkeep/perkeep / TestMutable

Function TestMutable

pkg/fs/fs_test.go:269–330  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

267}
268
269func TestMutable(t *testing.T) {
270 condSkip(t)
271 inEmptyMutDir(t, func(env *mountEnv, rootDir string) {
272 filename := filepath.Join(rootDir, "x")
273 f, err := os.Create(filename)
274 if err != nil {
275 t.Fatalf("Create: %v", err)
276 }
277 if err := f.Close(); err != nil {
278 t.Fatalf("Close: %v", err)
279 }
280 fi, err := os.Stat(filename)
281 if err != nil {
282 t.Errorf("Stat error: %v", err)
283 } else if !fi.Mode().IsRegular() || fi.Size() != 0 {
284 t.Errorf("Stat of roots/r/x = %v size %d; want a %d byte regular file", fi.Mode(), fi.Size(), 0)
285 }
286
287 for _, str := range []string{"foo, ", "bar\n", "another line.\n"} {
288 f, err = os.OpenFile(filename, os.O_WRONLY|os.O_APPEND, 0644)
289 if err != nil {
290 t.Fatalf("OpenFile: %v", err)
291 }
292 if _, err := f.Write([]byte(str)); err != nil {
293 t.Logf("Error with append: %v", err)
294 t.Fatalf("Error appending %q to %s: %v", str, filename, err)
295 }
296 if err := f.Close(); err != nil {
297 t.Fatal(err)
298 }
299 }
300 ro0 := env.Stat(mutFileOpenRO)
301 slurp, err := os.ReadFile(filename)
302 if err != nil {
303 t.Fatal(err)
304 }
305 if env.Stat(mutFileOpenRO)-ro0 != 1 {
306 t.Error("Read didn't trigger read-only path optimization.")
307 }
308
309 const want = "foo, bar\nanother line.\n"
310 fi, err = os.Stat(filename)
311 if err != nil {
312 t.Errorf("Stat error: %v", err)
313 } else if !fi.Mode().IsRegular() || fi.Size() != int64(len(want)) {
314 t.Errorf("Stat of roots/r/x = %v size %d; want a %d byte regular file", fi.Mode(), fi.Size(), len(want))
315 }
316 if got := string(slurp); got != want {
317 t.Fatalf("contents = %q; want %q", got, want)
318 }
319
320 // Delete it.
321 if err := os.Remove(filename); err != nil {
322 t.Fatal(err)
323 }
324
325 // Gone?
326 if _, err := os.Stat(filename); !os.IsNotExist(err) {

Callers

nothing calls this directly

Calls 13

condSkipFunction · 0.85
inEmptyMutDirFunction · 0.85
CreateMethod · 0.80
ModeMethod · 0.80
LogfMethod · 0.80
FatalMethod · 0.80
FatalfMethod · 0.65
CloseMethod · 0.65
StatMethod · 0.65
SizeMethod · 0.65
RemoveMethod · 0.65
WriteMethod · 0.45

Tested by

no test coverage detected