github.com/gogf/gf@v1.16.9/os/gfpool/gfpool_z_unit_concurrent_test.go (about) 1 package gfpool_test 2 3 import ( 4 "github.com/gogf/gf/os/gfile" 5 "github.com/gogf/gf/os/gfpool" 6 "github.com/gogf/gf/os/gtime" 7 "github.com/gogf/gf/test/gtest" 8 "github.com/gogf/gf/text/gstr" 9 "os" 10 "testing" 11 ) 12 13 func Test_ConcurrentOS(t *testing.T) { 14 gtest.C(t, func(t *gtest.T) { 15 path := gfile.TempDir(gtime.TimestampNanoStr()) 16 defer gfile.Remove(path) 17 f1, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 18 t.Assert(err, nil) 19 defer f1.Close() 20 21 f2, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 22 t.Assert(err, nil) 23 defer f2.Close() 24 25 for i := 0; i < 100; i++ { 26 _, err = f1.Write([]byte("@1234567890#")) 27 t.Assert(err, nil) 28 } 29 for i := 0; i < 100; i++ { 30 _, err = f2.Write([]byte("@1234567890#")) 31 t.Assert(err, nil) 32 } 33 34 for i := 0; i < 1000; i++ { 35 _, err = f1.Write([]byte("@1234567890#")) 36 t.Assert(err, nil) 37 } 38 for i := 0; i < 1000; i++ { 39 _, err = f2.Write([]byte("@1234567890#")) 40 t.Assert(err, nil) 41 } 42 t.Assert(gstr.Count(gfile.GetContents(path), "@1234567890#"), 2200) 43 }) 44 45 gtest.C(t, func(t *gtest.T) { 46 path := gfile.TempDir(gtime.TimestampNanoStr()) 47 defer gfile.Remove(path) 48 f1, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 49 t.Assert(err, nil) 50 defer f1.Close() 51 52 f2, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 53 t.Assert(err, nil) 54 defer f2.Close() 55 56 for i := 0; i < 1000; i++ { 57 _, err = f1.Write([]byte("@1234567890#")) 58 t.Assert(err, nil) 59 } 60 for i := 0; i < 1000; i++ { 61 _, err = f2.Write([]byte("@1234567890#")) 62 t.Assert(err, nil) 63 } 64 t.Assert(gstr.Count(gfile.GetContents(path), "@1234567890#"), 2000) 65 }) 66 gtest.C(t, func(t *gtest.T) { 67 path := gfile.TempDir(gtime.TimestampNanoStr()) 68 defer gfile.Remove(path) 69 f1, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 70 t.Assert(err, nil) 71 defer f1.Close() 72 73 f2, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 74 t.Assert(err, nil) 75 defer f2.Close() 76 77 s1 := "" 78 for i := 0; i < 1000; i++ { 79 s1 += "@1234567890#" 80 } 81 _, err = f2.Write([]byte(s1)) 82 t.Assert(err, nil) 83 84 s2 := "" 85 for i := 0; i < 1000; i++ { 86 s2 += "@1234567890#" 87 } 88 _, err = f2.Write([]byte(s2)) 89 t.Assert(err, nil) 90 91 t.Assert(gstr.Count(gfile.GetContents(path), "@1234567890#"), 2000) 92 }) 93 // DATA RACE 94 //gtest.C(t, func(t *gtest.T) { 95 // path := gfile.TempDir(gtime.TimestampNanoStr()) 96 // defer gfile.Remove(path) 97 // f1, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 98 // t.Assert(err, nil) 99 // defer f1.Close() 100 // 101 // f2, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 102 // t.Assert(err, nil) 103 // defer f2.Close() 104 // 105 // wg := sync.WaitGroup{} 106 // ch := make(chan struct{}) 107 // for i := 0; i < 1000; i++ { 108 // wg.Add(1) 109 // go func() { 110 // defer wg.Done() 111 // <-ch 112 // _, err = f1.Write([]byte("@1234567890#")) 113 // t.Assert(err, nil) 114 // }() 115 // } 116 // for i := 0; i < 1000; i++ { 117 // wg.Add(1) 118 // go func() { 119 // defer wg.Done() 120 // <-ch 121 // _, err = f2.Write([]byte("@1234567890#")) 122 // t.Assert(err, nil) 123 // }() 124 // } 125 // close(ch) 126 // wg.Wait() 127 // t.Assert(gstr.Count(gfile.GetContents(path), "@1234567890#"), 2000) 128 //}) 129 } 130 131 func Test_ConcurrentGFPool(t *testing.T) { 132 gtest.C(t, func(t *gtest.T) { 133 path := gfile.TempDir(gtime.TimestampNanoStr()) 134 defer gfile.Remove(path) 135 f1, err := gfpool.Open(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 136 t.Assert(err, nil) 137 defer f1.Close() 138 139 f2, err := gfpool.Open(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 140 t.Assert(err, nil) 141 defer f2.Close() 142 143 for i := 0; i < 1000; i++ { 144 _, err = f1.Write([]byte("@1234567890#")) 145 t.Assert(err, nil) 146 } 147 for i := 0; i < 1000; i++ { 148 _, err = f2.Write([]byte("@1234567890#")) 149 t.Assert(err, nil) 150 } 151 t.Assert(gstr.Count(gfile.GetContents(path), "@1234567890#"), 2000) 152 }) 153 // DATA RACE 154 //gtest.C(t, func(t *gtest.T) { 155 // path := gfile.TempDir(gtime.TimestampNanoStr()) 156 // defer gfile.Remove(path) 157 // f1, err := gfpool.Open(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 158 // t.Assert(err, nil) 159 // defer f1.Close() 160 // 161 // f2, err := gfpool.Open(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0666) 162 // t.Assert(err, nil) 163 // defer f2.Close() 164 // 165 // wg := sync.WaitGroup{} 166 // ch := make(chan struct{}) 167 // for i := 0; i < 1000; i++ { 168 // wg.Add(1) 169 // go func() { 170 // defer wg.Done() 171 // <-ch 172 // _, err = f1.Write([]byte("@1234567890#")) 173 // t.Assert(err, nil) 174 // }() 175 // } 176 // for i := 0; i < 1000; i++ { 177 // wg.Add(1) 178 // go func() { 179 // defer wg.Done() 180 // <-ch 181 // _, err = f2.Write([]byte("@1234567890#")) 182 // t.Assert(err, nil) 183 // }() 184 // } 185 // close(ch) 186 // wg.Wait() 187 // t.Assert(gstr.Count(gfile.GetContents(path), "@1234567890#"), 2000) 188 //}) 189 }