1// Copyright 2015 Keybase, Inc. All rights reserved. Use of 2// this source code is governed by the included BSD license. 3 4package libkb 5 6import ( 7 "github.com/keybase/client/go/logger" 8 "os" 9 "runtime" 10 "sync" 11 "testing" 12) 13 14func TestFileSave(t *testing.T) { 15 filename := "file_test.tmp" 16 defer os.Remove(filename) 17 18 file := NewFile(filename, []byte("test data"), 0644) 19 t.Logf("Saving") 20 err := file.Save(logger.NewTestLogger(t)) 21 if err != nil { 22 t.Fatal(err) 23 } 24} 25 26func TestFileSaveConcurrent(t *testing.T) { 27 if runtime.GOOS == "windows" { 28 t.Skip("skip this on windows") 29 } 30 filename := "file_test.tmp" 31 defer os.Remove(filename) 32 33 log := logger.NewTestLogger(t) 34 35 var wg sync.WaitGroup 36 for i := 0; i < 20; i++ { 37 wg.Add(1) 38 go func() { 39 file := NewFile(filename, []byte("test data"), 0644) 40 t.Logf("Saving") 41 err := file.Save(log) 42 if err != nil { 43 t.Errorf("save err: %s", err) 44 } 45 wg.Done() 46 }() 47 } 48 wg.Wait() 49 50 var wg2 sync.WaitGroup 51 file := NewFile(filename, []byte("test data"), 0644) 52 for i := 0; i < 20; i++ { 53 wg2.Add(1) 54 go func() { 55 err := file.Save(log) 56 if err != nil { 57 t.Errorf("save err: %s", err) 58 } 59 wg2.Done() 60 }() 61 } 62 wg2.Wait() 63} 64