1package mem 2 3import ( 4 "testing" 5 "time" 6) 7 8func 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 34func 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 65func 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 96func 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 121func 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} 155