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