gopkg.in/essentialkaos/ek.v7@v7.4.0/fsutil/fs_test.go (about) 1 package fsutil 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2009-2017 ESSENTIAL KAOS // 6 // Essential Kaos Open Source License <https://essentialkaos.com/ekol> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "fmt" 12 "io/ioutil" 13 "os" 14 "sort" 15 "testing" 16 17 check "pkg.re/check.v1" 18 ) 19 20 // ////////////////////////////////////////////////////////////////////////////////// // 21 22 type FSSuite struct{} 23 24 // ////////////////////////////////////////////////////////////////////////////////// // 25 26 func Test(t *testing.T) { check.TestingT(t) } 27 28 // ////////////////////////////////////////////////////////////////////////////////// // 29 30 var _ = check.Suite(&FSSuite{}) 31 32 // ////////////////////////////////////////////////////////////////////////////////// // 33 34 func (s *FSSuite) TestList(c *check.C) { 35 tmpDir := c.MkDir() 36 37 os.Mkdir(tmpDir+"/.dir0", 0755) 38 39 os.Create(tmpDir + "/.file0") 40 41 ioutil.WriteFile(tmpDir+"/file1.mp3", []byte("TESTDATA12345678"), 644) 42 ioutil.WriteFile(tmpDir+"/file2.jpg", []byte("TESTDATA"), 644) 43 44 os.Mkdir(tmpDir+"/dir1", 0755) 45 os.Mkdir(tmpDir+"/dir2", 0755) 46 47 os.Create(tmpDir + "/dir1/file3.mp3") 48 os.Create(tmpDir + "/dir2/file4.wav") 49 50 os.Mkdir(tmpDir+"/dir1/dir3", 0755) 51 52 listing1 := List(tmpDir, false) 53 listing2 := List(tmpDir, true) 54 listing3 := ListAll(tmpDir, false) 55 listing4 := ListAll(tmpDir, true, ListingFilter{}) 56 listing5 := ListAllDirs(tmpDir, false) 57 listing6 := ListAllDirs(tmpDir, true, ListingFilter{}) 58 listing7 := ListAllFiles(tmpDir, false) 59 listing8 := ListAllFiles(tmpDir, true) 60 listing9 := ListAllFiles(tmpDir, true, ListingFilter{MatchPatterns: []string{"*.mp3", "*.wav"}}) 61 listing10 := ListAllFiles(tmpDir, true, ListingFilter{NotMatchPatterns: []string{"*.mp3"}}) 62 listing11 := List(tmpDir, true, ListingFilter{Perms: "DR"}) 63 listing12 := List(tmpDir, true, ListingFilter{NotPerms: "DR"}) 64 listing13 := ListAllFiles(tmpDir, true, ListingFilter{NotMatchPatterns: []string{"*.mp3"}, SizeZero: true}) 65 listing14 := ListAllFiles(tmpDir, false, ListingFilter{SizeEqual: 16}) 66 listing15 := ListAllFiles(tmpDir, false, ListingFilter{SizeLess: 12, SizeGreater: 5}) 67 listing16 := ListAllFiles(tmpDir, false, ListingFilter{SizeGreater: 12}) 68 listing17 := List( 69 tmpDir, false, 70 ListingFilter{ 71 ATimeOlder: 2524608000, 72 CTimeOlder: 2524608000, 73 MTimeOlder: 2524608000, 74 ATimeYounger: 1, 75 CTimeYounger: 1, 76 MTimeYounger: 1, 77 }, 78 ) 79 80 sort.Strings(listing1) 81 sort.Strings(listing2) 82 sort.Strings(listing3) 83 sort.Strings(listing4) 84 sort.Strings(listing5) 85 sort.Strings(listing6) 86 sort.Strings(listing7) 87 sort.Strings(listing8) 88 sort.Strings(listing9) 89 sort.Strings(listing10) 90 sort.Strings(listing11) 91 sort.Strings(listing12) 92 sort.Strings(listing13) 93 sort.Strings(listing14) 94 sort.Strings(listing15) 95 sort.Strings(listing16) 96 sort.Strings(listing17) 97 98 c.Assert( 99 listing1, 100 check.DeepEquals, 101 []string{".dir0", ".file0", "dir1", "dir2", "file1.mp3", "file2.jpg"}, 102 ) 103 104 c.Assert( 105 listing2, 106 check.DeepEquals, 107 []string{"dir1", "dir2", "file1.mp3", "file2.jpg"}, 108 ) 109 110 c.Assert( 111 listing3, 112 check.DeepEquals, 113 []string{".dir0", ".file0", "dir1", "dir1/dir3", "dir1/file3.mp3", "dir2", "dir2/file4.wav", "file1.mp3", "file2.jpg"}, 114 ) 115 116 c.Assert( 117 listing4, 118 check.DeepEquals, 119 []string{"dir1", "dir1/dir3", "dir1/file3.mp3", "dir2", "dir2/file4.wav", "file1.mp3", "file2.jpg"}, 120 ) 121 122 c.Assert( 123 listing5, 124 check.DeepEquals, 125 []string{".dir0", "dir1", "dir1/dir3", "dir2"}, 126 ) 127 128 c.Assert( 129 listing6, 130 check.DeepEquals, 131 []string{"dir1", "dir1/dir3", "dir2"}, 132 ) 133 134 c.Assert( 135 listing7, 136 check.DeepEquals, 137 []string{".file0", "dir1/file3.mp3", "dir2/file4.wav", "file1.mp3", "file2.jpg"}, 138 ) 139 140 c.Assert( 141 listing8, 142 check.DeepEquals, 143 []string{"dir1/file3.mp3", "dir2/file4.wav", "file1.mp3", "file2.jpg"}, 144 ) 145 146 c.Assert( 147 listing9, 148 check.DeepEquals, 149 []string{"dir1/file3.mp3", "dir2/file4.wav", "file1.mp3"}, 150 ) 151 152 c.Assert( 153 listing10, 154 check.DeepEquals, 155 []string{"dir2/file4.wav", "file2.jpg"}, 156 ) 157 158 c.Assert( 159 listing11, 160 check.DeepEquals, 161 []string{"dir1", "dir2"}, 162 ) 163 164 c.Assert( 165 listing12, 166 check.DeepEquals, 167 []string{"file1.mp3", "file2.jpg"}, 168 ) 169 170 c.Assert( 171 listing13, 172 check.DeepEquals, 173 []string{"dir2/file4.wav"}, 174 ) 175 176 c.Assert( 177 listing14, 178 check.DeepEquals, 179 []string{"file1.mp3"}, 180 ) 181 182 c.Assert( 183 listing15, 184 check.DeepEquals, 185 []string{"file2.jpg"}, 186 ) 187 188 c.Assert( 189 listing16, 190 check.DeepEquals, 191 []string{"file1.mp3"}, 192 ) 193 194 c.Assert( 195 listing17, 196 check.DeepEquals, 197 []string{".dir0", ".file0", "dir1", "dir2", "file1.mp3", "file2.jpg"}, 198 ) 199 200 c.Assert(readDir("/not_exist"), check.IsNil) 201 202 c.Assert(ListingFilter{ATimeOlder: 1}.hasTimes(), check.Equals, true) 203 c.Assert(ListingFilter{ATimeYounger: 1}.hasTimes(), check.Equals, true) 204 c.Assert(ListingFilter{CTimeOlder: 1}.hasTimes(), check.Equals, true) 205 c.Assert(ListingFilter{CTimeYounger: 1}.hasTimes(), check.Equals, true) 206 c.Assert(ListingFilter{MTimeOlder: 1}.hasTimes(), check.Equals, true) 207 c.Assert(ListingFilter{MTimeYounger: 1}.hasTimes(), check.Equals, true) 208 } 209 210 func (s *FSSuite) TestListToAbsolute(c *check.C) { 211 list := []string{"1", "2", "3"} 212 213 ListToAbsolute("A", list) 214 215 c.Assert(list, check.DeepEquals, []string{"A/1", "A/2", "A/3"}) 216 } 217 218 func (s *FSSuite) TestProperPath(c *check.C) { 219 tmpFile := c.MkDir() + "/test.txt" 220 221 os.OpenFile(tmpFile, os.O_CREATE, 0644) 222 223 paths := []string{"/etc/sudoers", "/etc/passwd", tmpFile} 224 225 c.Assert(ProperPath("DR", paths), check.Equals, "") 226 c.Assert(ProperPath("FR", paths), check.Equals, "/etc/passwd") 227 c.Assert(ProperPath("FRW", paths), check.Equals, tmpFile) 228 c.Assert(ProperPath("FRWS", paths), check.Equals, "") 229 c.Assert(ProperPath("F", paths), check.Equals, "/etc/sudoers") 230 231 os.Remove(tmpFile) 232 } 233 234 func (s *FSSuite) TestWalker(c *check.C) { 235 tmpDir := c.MkDir() 236 237 os.Chdir(tmpDir) 238 239 tmpDir, _ = os.Getwd() 240 241 os.MkdirAll(tmpDir+"/dir1/dir2/dir3/dir4", 0755) 242 os.Chdir(tmpDir) 243 244 c.Assert(Current(), check.Equals, tmpDir) 245 c.Assert(Pop(), check.Equals, tmpDir) 246 247 dirStack = nil 248 249 c.Assert(Push("dir1"), check.Equals, tmpDir+"/dir1") 250 c.Assert(Push("dir9"), check.Equals, "") 251 c.Assert(Push("dir2/dir3"), check.Equals, tmpDir+"/dir1/dir2/dir3") 252 c.Assert(Push("dir4"), check.Equals, tmpDir+"/dir1/dir2/dir3/dir4") 253 c.Assert(Push("dir9"), check.Equals, "") 254 c.Assert(Pop(), check.Equals, tmpDir+"/dir1/dir2/dir3") 255 c.Assert(Pop(), check.Equals, tmpDir+"/dir1") 256 c.Assert(Pop(), check.Equals, tmpDir) 257 c.Assert(Pop(), check.Equals, tmpDir) 258 259 c.Assert(Push("dir1"), check.Equals, tmpDir+"/dir1") 260 c.Assert(Push("dir2"), check.Equals, tmpDir+"/dir1/dir2") 261 c.Assert(Push("dir3"), check.Equals, tmpDir+"/dir1/dir2/dir3") 262 os.RemoveAll(tmpDir + "/dir1/dir2") 263 c.Assert(Pop(), check.Equals, "") 264 } 265 266 func (s *FSSuite) TestGetSize(c *check.C) { 267 tmpDir := c.MkDir() 268 tmpFile := tmpDir + "/test.file" 269 270 if ioutil.WriteFile(tmpFile, []byte("TEST\n"), 0644) != nil { 271 c.Fatal("Can't create temporary file") 272 } 273 274 c.Assert(GetSize(""), check.Equals, int64(-1)) 275 c.Assert(GetSize("/not_exist"), check.Equals, int64(-1)) 276 c.Assert(GetSize(tmpFile), check.Equals, int64(5)) 277 } 278 279 func (s *FSSuite) TestGetTime(c *check.C) { 280 tmpDir := c.MkDir() 281 tmpFile := tmpDir + "/test.file" 282 283 if ioutil.WriteFile(tmpFile, []byte("TEST\n"), 0644) != nil { 284 c.Fatal("Can't create temporary file") 285 } 286 287 at, mt, ct, err := GetTimes(tmpFile) 288 289 c.Assert(err, check.IsNil) 290 c.Assert(at.IsZero(), check.Equals, false) 291 c.Assert(mt.IsZero(), check.Equals, false) 292 c.Assert(ct.IsZero(), check.Equals, false) 293 294 at, mt, ct, err = GetTimes("") 295 296 c.Assert(err, check.NotNil) 297 c.Assert(err, check.Equals, ErrEmptyPath) 298 c.Assert(at.IsZero(), check.Equals, true) 299 c.Assert(mt.IsZero(), check.Equals, true) 300 c.Assert(ct.IsZero(), check.Equals, true) 301 302 at, mt, ct, err = GetTimes("/not_exist") 303 304 c.Assert(err, check.NotNil) 305 c.Assert(at.IsZero(), check.Equals, true) 306 c.Assert(mt.IsZero(), check.Equals, true) 307 c.Assert(ct.IsZero(), check.Equals, true) 308 309 ats, mts, cts, err := GetTimestamps(tmpFile) 310 311 c.Assert(err, check.IsNil) 312 c.Assert(ats, check.Not(check.Equals), int64(-1)) 313 c.Assert(mts, check.Not(check.Equals), int64(-1)) 314 c.Assert(cts, check.Not(check.Equals), int64(-1)) 315 316 ats, mts, cts, err = GetTimestamps("") 317 318 c.Assert(err, check.NotNil) 319 c.Assert(err, check.Equals, ErrEmptyPath) 320 c.Assert(ats, check.Equals, int64(-1)) 321 c.Assert(mts, check.Equals, int64(-1)) 322 c.Assert(cts, check.Equals, int64(-1)) 323 324 ats, mts, cts, err = GetTimestamps("/not_exist") 325 326 c.Assert(err, check.NotNil) 327 c.Assert(ats, check.Equals, int64(-1)) 328 c.Assert(mts, check.Equals, int64(-1)) 329 c.Assert(cts, check.Equals, int64(-1)) 330 331 at, err = GetATime(tmpFile) 332 333 c.Assert(err, check.IsNil) 334 c.Assert(at.IsZero(), check.Equals, false) 335 336 mt, err = GetMTime(tmpFile) 337 338 c.Assert(err, check.IsNil) 339 c.Assert(mt.IsZero(), check.Equals, false) 340 341 ct, err = GetCTime(tmpFile) 342 343 c.Assert(err, check.IsNil) 344 c.Assert(ct.IsZero(), check.Equals, false) 345 346 at, err = GetATime("") 347 348 c.Assert(err, check.NotNil) 349 c.Assert(at.IsZero(), check.Equals, true) 350 351 mt, err = GetMTime("") 352 353 c.Assert(err, check.NotNil) 354 c.Assert(mt.IsZero(), check.Equals, true) 355 356 ct, err = GetCTime("") 357 358 c.Assert(err, check.NotNil) 359 c.Assert(ct.IsZero(), check.Equals, true) 360 } 361 362 func (s *FSSuite) TestGetOwner(c *check.C) { 363 tmpDir := c.MkDir() 364 tmpFile := tmpDir + "/test.file" 365 366 if ioutil.WriteFile(tmpFile, []byte("TEST\n"), 0644) != nil { 367 c.Fatal("Can't create temporary file") 368 } 369 370 uid, gid, err := GetOwner(tmpFile) 371 372 c.Assert(err, check.IsNil) 373 c.Assert(uid, check.Not(check.Equals), -1) 374 c.Assert(gid, check.Not(check.Equals), -1) 375 376 uid, gid, err = GetOwner("") 377 378 c.Assert(err, check.NotNil) 379 c.Assert(err, check.Equals, ErrEmptyPath) 380 c.Assert(uid, check.Equals, -1) 381 c.Assert(gid, check.Equals, -1) 382 383 uid, gid, err = GetOwner("/not_exist") 384 385 c.Assert(err, check.NotNil) 386 c.Assert(uid, check.Equals, -1) 387 c.Assert(gid, check.Equals, -1) 388 } 389 390 func (s *FSSuite) TestIsEmptyDir(c *check.C) { 391 tmpDir1 := c.MkDir() 392 tmpDir2 := c.MkDir() 393 tmpFile := tmpDir1 + "/test.file" 394 395 if ioutil.WriteFile(tmpFile, []byte("TEST\n"), 0644) != nil { 396 c.Fatal("Can't create temporary file") 397 } 398 399 c.Assert(IsEmptyDir(tmpDir1), check.Equals, false) 400 c.Assert(IsEmptyDir(tmpDir2), check.Equals, true) 401 c.Assert(IsEmptyDir(""), check.Equals, false) 402 c.Assert(IsEmptyDir("/not_exist"), check.Equals, false) 403 } 404 405 func (s *FSSuite) TestIsNonEmpty(c *check.C) { 406 tmpDir := c.MkDir() 407 tmpFile1 := tmpDir + "/test1.file" 408 tmpFile2 := tmpDir + "/test2.file" 409 410 if ioutil.WriteFile(tmpFile1, []byte("TEST\n"), 0644) != nil { 411 c.Fatal("Can't create temporary file") 412 } 413 414 if ioutil.WriteFile(tmpFile2, []byte(""), 0644) != nil { 415 c.Fatal("Can't create temporary file") 416 } 417 418 c.Assert(IsNonEmpty(""), check.Equals, false) 419 c.Assert(IsNonEmpty("/not_exist"), check.Equals, false) 420 c.Assert(IsNonEmpty(tmpFile2), check.Equals, false) 421 c.Assert(IsNonEmpty(tmpFile1), check.Equals, true) 422 } 423 424 func (s *FSSuite) TestTypeChecks(c *check.C) { 425 tmpDir := c.MkDir() 426 tmpFile := tmpDir + "/test.file" 427 tmpLink := tmpDir + "/test.link" 428 429 if ioutil.WriteFile(tmpFile, []byte("TEST\n"), 0644) != nil { 430 c.Fatal("Can't create temporary file") 431 } 432 433 if os.Symlink("123", tmpLink) != nil { 434 c.Fatal("Can't create link") 435 } 436 437 c.Assert(IsExist(""), check.Equals, false) 438 c.Assert(IsExist("/not_exist"), check.Equals, false) 439 c.Assert(IsExist(tmpFile), check.Equals, true) 440 441 c.Assert(IsRegular(""), check.Equals, false) 442 c.Assert(IsRegular("/not_exist"), check.Equals, false) 443 c.Assert(IsRegular(tmpFile), check.Equals, true) 444 c.Assert(IsRegular(tmpLink), check.Equals, false) 445 446 c.Assert(IsLink(""), check.Equals, false) 447 c.Assert(IsLink("/not_exist"), check.Equals, false) 448 c.Assert(IsLink(tmpFile), check.Equals, false) 449 c.Assert(IsLink(tmpLink), check.Equals, true) 450 451 c.Assert(IsCharacterDevice(""), check.Equals, false) 452 c.Assert(IsCharacterDevice("/not_exist"), check.Equals, false) 453 c.Assert(IsCharacterDevice(tmpFile), check.Equals, false) 454 c.Assert(IsCharacterDevice("/dev/tty"), check.Equals, true) 455 456 c.Assert(IsBlockDevice(""), check.Equals, false) 457 c.Assert(IsBlockDevice("/not_exist"), check.Equals, false) 458 c.Assert(IsBlockDevice(tmpFile), check.Equals, false) 459 460 switch { 461 case IsExist("/dev/sda"): 462 c.Assert(IsBlockDevice("/dev/sda"), check.Equals, true) 463 case IsExist("/dev/vda"): 464 c.Assert(IsBlockDevice("/dev/vda"), check.Equals, true) 465 case IsExist("/dev/hda"): 466 c.Assert(IsBlockDevice("/dev/hda"), check.Equals, true) 467 case IsExist("/dev/disk0"): 468 c.Assert(IsBlockDevice("/dev/disk0"), check.Equals, true) 469 } 470 471 c.Assert(IsDir(""), check.Equals, false) 472 c.Assert(IsDir("/not_exist"), check.Equals, false) 473 c.Assert(IsDir(tmpFile), check.Equals, false) 474 c.Assert(IsDir(tmpDir), check.Equals, true) 475 476 c.Assert(IsSocket(""), check.Equals, false) 477 c.Assert(IsSocket("/not_exist"), check.Equals, false) 478 c.Assert(IsSocket(tmpFile), check.Equals, false) 479 c.Assert(IsSocket(tmpDir), check.Equals, false) 480 481 switch { 482 case IsExist("/var/run/mDNSResponder"): 483 c.Assert(IsSocket("/var/run/mDNSResponder"), check.Equals, true) 484 case IsExist("/dev/log"): 485 c.Assert(IsSocket("/dev/log"), check.Equals, true) 486 } 487 } 488 489 func (s *FSSuite) TestPermChecks(c *check.C) { 490 tmpDir := c.MkDir() 491 tmpFile1 := tmpDir + "/test1.file" 492 tmpFile2 := tmpDir + "/test2.file" 493 tmpFile3 := tmpDir + "/test3.file" 494 tmpFile4 := tmpDir + "/test4.file" 495 tmpFile5 := tmpDir + "/test5.file" 496 tmpFile6 := tmpDir + "/test6.file" 497 tmpFile7 := tmpDir + "/test7.file" 498 tmpFile8 := tmpDir + "/test8.file" 499 tmpFile9 := tmpDir + "/test9.file" 500 501 for i := 1; i <= 9; i++ { 502 if ioutil.WriteFile(fmt.Sprintf("%s/test%d.file", tmpDir, i), []byte(""), 0644) != nil { 503 c.Fatal("Can't create temporary file") 504 } 505 } 506 507 os.Chmod(tmpFile1, 0400) 508 os.Chmod(tmpFile2, 0040) 509 os.Chmod(tmpFile3, 0004) 510 os.Chmod(tmpFile4, 0200) 511 os.Chmod(tmpFile5, 0020) 512 os.Chmod(tmpFile6, 0002) 513 os.Chmod(tmpFile7, 0100) 514 os.Chmod(tmpFile8, 0010) 515 os.Chmod(tmpFile9, 0001) 516 517 c.Assert(IsReadable(""), check.Equals, false) 518 c.Assert(IsReadable("/not_exist"), check.Equals, false) 519 c.Assert(IsReadable(tmpFile1), check.Equals, true) 520 c.Assert(IsReadable(tmpFile2), check.Equals, true) 521 c.Assert(IsReadable(tmpFile3), check.Equals, true) 522 523 c.Assert(IsWritable(""), check.Equals, false) 524 c.Assert(IsWritable("/not_exist"), check.Equals, false) 525 c.Assert(IsWritable(tmpFile4), check.Equals, true) 526 c.Assert(IsWritable(tmpFile5), check.Equals, true) 527 c.Assert(IsWritable(tmpFile6), check.Equals, true) 528 529 c.Assert(IsExecutable(""), check.Equals, false) 530 c.Assert(IsExecutable("/not_exist"), check.Equals, false) 531 c.Assert(IsExecutable(tmpFile7), check.Equals, true) 532 c.Assert(IsExecutable(tmpFile8), check.Equals, true) 533 c.Assert(IsExecutable(tmpFile9), check.Equals, true) 534 c.Assert(IsExecutable(tmpFile1), check.Equals, false) 535 } 536 537 func (s *FSSuite) TestCheckPerms(c *check.C) { 538 tmpDir := c.MkDir() 539 tmpFile := tmpDir + "/test.file" 540 tmpLink := tmpDir + "/test.link" 541 542 if ioutil.WriteFile(tmpFile, []byte(""), 0644) != nil { 543 c.Fatal("Can't create temporary file") 544 } 545 546 if os.Symlink("123", tmpLink) != nil { 547 c.Fatal("Can't create link") 548 } 549 550 c.Assert(CheckPerms("", tmpFile), check.Equals, false) 551 c.Assert(CheckPerms("FR", ""), check.Equals, false) 552 c.Assert(CheckPerms("FR", "/not_exist"), check.Equals, false) 553 554 c.Assert(CheckPerms("F", tmpDir), check.Equals, false) 555 c.Assert(CheckPerms("D", tmpFile), check.Equals, false) 556 c.Assert(CheckPerms("L", tmpFile), check.Equals, false) 557 c.Assert(CheckPerms("X", tmpFile), check.Equals, false) 558 c.Assert(CheckPerms("S", tmpFile), check.Equals, false) 559 560 c.Assert(CheckPerms("W", tmpFile), check.Equals, true) 561 c.Assert(CheckPerms("R", tmpFile), check.Equals, true) 562 } 563 564 func (s *FSSuite) TestGetPerms(c *check.C) { 565 tmpDir := c.MkDir() 566 tmpFile := tmpDir + "/test.file" 567 568 if ioutil.WriteFile(tmpFile, []byte("TEST\n"), 0764) != nil { 569 c.Fatal("Can't create temporary file") 570 } 571 572 os.Chmod(tmpFile, 0764) 573 574 c.Assert(GetPerms(""), check.Equals, os.FileMode(0)) 575 c.Assert(GetPerms(tmpFile), check.Equals, os.FileMode(0764)) 576 } 577 578 func (s *FSSuite) TestLineCount(c *check.C) { 579 tmpDir := c.MkDir() 580 tmpFile := tmpDir + "/test.file" 581 582 if ioutil.WriteFile(tmpFile, []byte("1\n2\n3\n4\n"), 0644) != nil { 583 c.Fatal("Can't create temporary file") 584 } 585 586 c.Assert(LineCount(""), check.Equals, -1) 587 c.Assert(LineCount("/not_exist"), check.Equals, -1) 588 c.Assert(LineCount(tmpFile), check.Equals, 4) 589 } 590 591 func (s *FSSuite) TestCopyFile(c *check.C) { 592 tmpDir1 := c.MkDir() 593 tmpDir2 := c.MkDir() 594 tmpDir3 := c.MkDir() 595 tmpFile1 := tmpDir1 + "/test1.file" 596 tmpFile2 := tmpDir2 + "/test2.file" 597 tmpFile3 := tmpDir1 + "/test3.file" 598 599 if ioutil.WriteFile(tmpFile1, []byte("TEST\n"), 0644) != nil { 600 c.Fatal("Can't create temporary file") 601 } 602 603 if ioutil.WriteFile(tmpFile2, []byte("TEST1234TEST\n"), 0644) != nil { 604 c.Fatal("Can't create temporary file") 605 } 606 607 if ioutil.WriteFile(tmpFile3, []byte(""), 0644) != nil { 608 c.Fatal("Can't create temporary file") 609 } 610 611 os.Chmod(tmpFile3, 0111) 612 os.Chmod(tmpDir3, 0500) 613 614 c.Assert(CopyFile("", tmpFile2), check.NotNil) 615 c.Assert(CopyFile(tmpFile1, ""), check.NotNil) 616 c.Assert(CopyFile("/not_exist", tmpFile2), check.NotNil) 617 c.Assert(CopyFile(tmpDir1, tmpFile2), check.NotNil) 618 c.Assert(CopyFile(tmpFile3, tmpFile2), check.NotNil) 619 c.Assert(CopyFile(tmpFile1, "/not_exist/test.file"), check.NotNil) 620 c.Assert(CopyFile(tmpFile1, tmpDir3+"/test.file"), check.NotNil) 621 c.Assert(CopyFile(tmpFile1, tmpDir2), check.NotNil) 622 c.Assert(CopyFile(tmpFile1, tmpFile3), check.NotNil) 623 624 c.Assert(CopyFile(tmpFile1, tmpFile2, 0600), check.IsNil) 625 c.Assert(GetSize(tmpFile2), check.Equals, int64(5)) 626 c.Assert(GetPerms(tmpFile2), check.Equals, os.FileMode(0600)) 627 628 os.Remove(tmpFile2) 629 630 c.Assert(CopyFile(tmpFile1, tmpFile2, 0600), check.IsNil) 631 c.Assert(GetSize(tmpFile2), check.Equals, int64(5)) 632 c.Assert(GetPerms(tmpFile2), check.Equals, os.FileMode(0600)) 633 634 _disableCopyFileChecks = true 635 636 c.Assert(CopyFile("", tmpFile2), check.NotNil) 637 c.Assert(CopyFile(tmpFile1, ""), check.NotNil) 638 } 639 640 func (s *FSSuite) TestMoveFile(c *check.C) { 641 tmpDir := c.MkDir() 642 tmpDir2 := c.MkDir() 643 tmpFile1 := tmpDir + "/test1.file" 644 tmpFile2 := tmpDir + "/test2.file" 645 tmpFile3 := tmpDir + "/test3.file" 646 647 if ioutil.WriteFile(tmpFile1, []byte("TEST\n"), 0644) != nil { 648 c.Fatal("Can't create temporary file") 649 } 650 651 if ioutil.WriteFile(tmpFile3, []byte("TEST\n"), 0644) != nil { 652 c.Fatal("Can't create temporary file") 653 } 654 655 os.Chmod(tmpFile3, 0111) 656 os.Chmod(tmpDir2, 0500) 657 658 c.Assert(MoveFile("", tmpFile2), check.NotNil) 659 c.Assert(MoveFile(tmpFile1, ""), check.NotNil) 660 c.Assert(MoveFile("/not_exist", tmpFile2), check.NotNil) 661 c.Assert(MoveFile(tmpDir, tmpFile2), check.NotNil) 662 c.Assert(MoveFile(tmpFile3, tmpFile2), check.NotNil) 663 c.Assert(MoveFile(tmpFile1, "/not_exist/file.test"), check.NotNil) 664 c.Assert(MoveFile(tmpFile1, tmpDir2+"/file.test"), check.NotNil) 665 666 c.Assert(MoveFile(tmpFile1, tmpFile2), check.IsNil) 667 c.Assert(MoveFile(tmpFile2, tmpFile1, 0600), check.IsNil) 668 669 _disableMoveFileChecks = true 670 671 c.Assert(MoveFile("", tmpFile2), check.NotNil) 672 } 673 674 func (s *FSSuite) TestInternal(c *check.C) { 675 c.Assert(getGIDList(nil), check.IsNil) 676 677 c.Assert(isReadableStat(nil, 0, nil), check.Equals, true) 678 c.Assert(isWritableStat(nil, 0, nil), check.Equals, true) 679 c.Assert(isExecutableStat(nil, 0, nil), check.Equals, true) 680 681 n, _ := fixCount(-100, nil) 682 683 c.Assert(n, check.Equals, 0) 684 }