OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / spf13 / afero / mem / file_test.go
1 package mem
2
3 import (
4         "testing"
5         "time"
6 )
7
8 func TestFileDataNameRace(t *testing.T) {
9         t.Parallel()
10         const someName = "someName"
11         const someOtherName = "someOtherName"
12         d := FileData{
13                 name: someName,
14         }
15
16         if d.Name() != someName {
17                 t.Errorf("Failed to read correct Name, was %v", d.Name())
18         }
19
20         ChangeFileName(&d, someOtherName)
21         if d.Name() != someOtherName {
22                 t.Errorf("Failed to set Name, was %v", d.Name())
23         }
24
25         go func() {
26                 ChangeFileName(&d, someName)
27         }()
28
29         if d.Name() != someName && d.Name() != someOtherName {
30                 t.Errorf("Failed to read either Name, was %v", d.Name())
31         }
32 }
33
34 func TestFileDataModTimeRace(t *testing.T) {
35         t.Parallel()
36         someTime := time.Now()
37         someOtherTime := someTime.Add(1 * time.Minute)
38
39         d := FileData{
40                 modtime: someTime,
41         }
42
43         s := FileInfo{
44                 FileData: &d,
45         }
46
47         if s.ModTime() != someTime {
48                 t.Errorf("Failed to read correct value, was %v", s.ModTime())
49         }
50
51         SetModTime(&d, someOtherTime)
52         if s.ModTime() != someOtherTime {
53                 t.Errorf("Failed to set ModTime, was %v", s.ModTime())
54         }
55
56         go func() {
57                 SetModTime(&d, someTime)
58         }()
59
60         if s.ModTime() != someTime && s.ModTime() != someOtherTime {
61                 t.Errorf("Failed to read either modtime, was %v", s.ModTime())
62         }
63 }
64
65 func TestFileDataModeRace(t *testing.T) {
66         t.Parallel()
67         const someMode = 0777
68         const someOtherMode = 0660
69
70         d := FileData{
71                 mode: someMode,
72         }
73
74         s := FileInfo{
75                 FileData: &d,
76         }
77
78         if s.Mode() != someMode {
79                 t.Errorf("Failed to read correct value, was %v", s.Mode())
80         }
81
82         SetMode(&d, someOtherMode)
83         if s.Mode() != someOtherMode {
84                 t.Errorf("Failed to set Mode, was %v", s.Mode())
85         }
86
87         go func() {
88                 SetMode(&d, someMode)
89         }()
90
91         if s.Mode() != someMode && s.Mode() != someOtherMode {
92                 t.Errorf("Failed to read either mode, was %v", s.Mode())
93         }
94 }
95
96 func TestFileDataIsDirRace(t *testing.T) {
97         t.Parallel()
98
99         d := FileData{
100                 dir: true,
101         }
102
103         s := FileInfo{
104                 FileData: &d,
105         }
106
107         if s.IsDir() != true {
108                 t.Errorf("Failed to read correct value, was %v", s.IsDir())
109         }
110
111         go func() {
112                 s.Lock()
113                 d.dir = false
114                 s.Unlock()
115         }()
116
117         //just logging the value to trigger a read:
118         t.Logf("Value is %v", s.IsDir())
119 }
120
121 func TestFileDataSizeRace(t *testing.T) {
122         t.Parallel()
123
124         const someData = "Hello"
125         const someOtherDataSize = "Hello World"
126
127         d := FileData{
128                 data: []byte(someData),
129                 dir:  false,
130         }
131
132         s := FileInfo{
133                 FileData: &d,
134         }
135
136         if s.Size() != int64(len(someData)) {
137                 t.Errorf("Failed to read correct value, was %v", s.Size())
138         }
139
140         go func() {
141                 s.Lock()
142                 d.data = []byte(someOtherDataSize)
143                 s.Unlock()
144         }()
145
146         //just logging the value to trigger a read:
147         t.Logf("Value is %v", s.Size())
148
149         //Testing the Dir size case
150         d.dir = true
151         if s.Size() != int64(42) {
152                 t.Errorf("Failed to read correct value for dir, was %v", s.Size())
153         }
154 }