git.sr.ht/~poldi1405/bulkrename@v1.0.0/plan/files_test.go (about) 1 package plan 2 3 import ( 4 "bufio" 5 "os" 6 "testing" 7 8 "github.com/mborders/logmatic" 9 ) 10 11 func TestRecursiveFileList(t *testing.T) { 12 var p Plan 13 L = logmatic.NewLogger() 14 L.SetLevel(logmatic.LogLevel(42)) 15 L.SetLevel(logmatic.FATAL) 16 17 if err := os.MkdirAll("test/not_allowed", 0o700); err != nil { 18 t.Error(err) 19 } 20 21 if err := os.MkdirAll("test/allowed_but_empty", 0o700); err != nil { 22 t.Error(err) 23 } 24 25 defer func() { 26 err := os.RemoveAll("test") 27 if err != nil { 28 t.Error(err) 29 } 30 }() 31 32 _, err := os.Create("test/ok") 33 if err != nil { 34 t.Error(err) 35 } 36 37 _, err = os.Create("test/not_allowed/permdenied") 38 if err != nil { 39 t.Error(err) 40 } 41 42 err = os.Chmod("test/not_allowed", 0o000) 43 if err != nil { 44 t.Error(err) 45 } 46 defer func() { 47 err := os.Chmod("test/not_allowed", 0o700) 48 if err != nil { 49 t.Error(err) 50 } 51 }() 52 53 wg.Add(1) 54 p.listAllFiles("test") 55 wg.Wait() 56 57 result := p.InFiles 58 59 if len(result) != 2 { 60 if len(result) > 2 && result[1] == "test/not_allowed/permdenied" { 61 t.Skipf("seems like Chmod failed. Skipping test.") 62 return 63 } 64 t.Log(result) 65 t.Error("list length does not match") 66 return 67 } 68 } 69 70 func TestWriteTempFileFails(t *testing.T) { 71 var p Plan 72 L = logmatic.NewLogger() 73 L.SetLevel(logmatic.LogLevel(42)) 74 L.SetLevel(logmatic.FATAL) 75 76 if err := os.MkdirAll("test/not_allowed", 0o700); err != nil { 77 t.Error(err) 78 } 79 defer func() { 80 err := os.RemoveAll("test") 81 if err != nil { 82 t.Error(err) 83 } 84 }() 85 86 err := os.Chmod("test/not_allowed", 0o000) 87 if err != nil { 88 t.Error(err) 89 } 90 defer func() { 91 err := os.Chmod("test/not_allowed", 0o700) 92 if err != nil { 93 t.Error(err) 94 } 95 }() 96 97 tmpdir := os.Getenv("TMPDIR") 98 os.Setenv("TMPDIR", "test/not_allowed") 99 defer func() { os.Setenv("TMPDIR", tmpdir) }() 100 if err != nil { 101 t.Error(err) 102 } 103 104 _, err = os.Create("test/not_allowed/ok") 105 if err == nil { 106 t.Skip() 107 } 108 109 err = p.writeTempFile() 110 if err == nil { 111 t.Fail() 112 } 113 } 114 115 func TestWriteTempFile(t *testing.T) { 116 var p Plan 117 L = logmatic.NewLogger() 118 L.SetLevel(logmatic.LogLevel(42)) 119 L.SetLevel(logmatic.FATAL) 120 121 if err := os.MkdirAll("test", 0o700); err != nil { 122 t.Error(err) 123 } 124 defer func() { 125 err := os.RemoveAll("test") 126 if err != nil { 127 t.Error(err) 128 } 129 }() 130 131 tmpdir := os.Getenv("TMPDIR") 132 os.Setenv("TMPDIR", "test") 133 defer func() { os.Setenv("TMPDIR", tmpdir) }() 134 135 p.InFiles = []string{ 136 "some filename", 137 "ä w€iRd fiłenæm", 138 "", 139 } 140 141 err := p.writeTempFile() 142 if err != nil { 143 t.Fail() 144 } 145 146 file, err := os.Open(p.TempFile()) 147 if err != nil { 148 t.Fail() 149 } 150 defer file.Close() 151 152 scanner := bufio.NewScanner(file) 153 154 i := 0 155 156 for scanner.Scan() { 157 if scanner.Text() != p.InFiles[i] { 158 t.Fail() 159 } 160 i++ 161 } 162 163 if err := scanner.Err(); err != nil { 164 t.Fail() 165 } 166 } 167 168 func TestLoadFileList(t *testing.T) { 169 var p Plan 170 L = logmatic.NewLogger() 171 L.SetLevel(logmatic.LogLevel(42)) 172 L.SetLevel(logmatic.FATAL) 173 174 if err := os.MkdirAll("test/not_allowed", 0o700); err != nil { 175 t.Error(err) 176 } 177 178 if err := os.MkdirAll("test/allowed_but_empty", 0o700); err != nil { 179 t.Error(err) 180 } 181 182 defer func() { 183 err := os.RemoveAll("test") 184 if err != nil { 185 t.Error(err) 186 } 187 }() 188 189 _, err := os.Create("test/ok") 190 if err != nil { 191 t.Error(err) 192 } 193 194 _, err = os.Create("test/ok2") 195 if err != nil { 196 t.Error(err) 197 } 198 199 _, err = os.Create("test/not_allowed/permdenied") 200 if err != nil { 201 t.Error(err) 202 } 203 204 err = os.Chmod("test/not_allowed", 0o000) 205 if err != nil { 206 t.Error(err) 207 } 208 defer func() { 209 err := os.Chmod("test/not_allowed", 0o700) 210 if err != nil { 211 t.Error(err) 212 } 213 }() 214 filelist := []string{"test/ok", "test/ok2", "test/allowed_but_empty"} 215 p.LoadFileList(filelist, false) 216 cwd, err := os.Getwd() 217 if err != nil { 218 t.Log(err) 219 t.Skip() 220 } 221 222 m := make(map[string]bool) 223 for i := 0; i < len(filelist); i++ { 224 m[cwd+string(os.PathSeparator)+filelist[i]] = true 225 } 226 227 for _, f := range p.InFiles { 228 if _, ok := m[f]; !ok { 229 t.Log(m) 230 t.Log("found unknown " + f) 231 t.Fail() 232 } 233 } 234 } 235 236 func TestLoadFileListFails(t *testing.T) { 237 var p Plan 238 L = logmatic.NewLogger() 239 L.SetLevel(logmatic.LogLevel(42)) 240 L.SetLevel(logmatic.FATAL) 241 242 if err := os.MkdirAll("test/not_allowed", 0o700); err != nil { 243 t.Error(err) 244 } 245 246 if err := os.MkdirAll("test/allowed_but_empty", 0o700); err != nil { 247 t.Error(err) 248 } 249 250 defer func() { 251 err := os.RemoveAll("test") 252 if err != nil { 253 t.Error(err) 254 } 255 }() 256 257 _, err := os.Create("test/ok") 258 if err != nil { 259 t.Error(err) 260 } 261 262 _, err = os.Create("test/ok2") 263 if err != nil { 264 t.Error(err) 265 } 266 267 _, err = os.Create("test/not_allowed/permdenied") 268 if err != nil { 269 t.Error(err) 270 } 271 272 err = os.Chmod("test/not_allowed", 0o000) 273 if err != nil { 274 t.Error(err) 275 } 276 defer func() { 277 err := os.Chmod("test/not_allowed", 0o700) 278 if err != nil { 279 t.Error(err) 280 } 281 }() 282 filelist := []string{"test/not_allowed/permdenied"} 283 p.LoadFileList(filelist, false) 284 cwd, err := os.Getwd() 285 if err != nil { 286 t.Log(err) 287 t.Skip() 288 } 289 290 if len(p.InFiles) == 1 && p.InFiles[0] == cwd+string(os.PathSeparator)+filelist[0] { 291 t.Skipf("seems like Chmod failed. Skipping test.") 292 } 293 294 if len(p.InFiles) != 0 { 295 t.Log(p.InFiles) 296 t.Fail() 297 } 298 }