OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package local | 5 package local |
6 | 6 |
7 import ( | 7 import ( |
8 "bytes" | 8 "bytes" |
9 "fmt" | 9 "fmt" |
10 "io" | 10 "io" |
11 "io/ioutil" | 11 "io/ioutil" |
12 "os" | 12 "os" |
13 "path/filepath" | 13 "path/filepath" |
14 "runtime" | |
14 "sort" | 15 "sort" |
15 "testing" | 16 "testing" |
16 | 17 |
17 . "github.com/smartystreets/goconvey/convey" | 18 . "github.com/smartystreets/goconvey/convey" |
18 . "infra/tools/cipd/common" | 19 . "infra/tools/cipd/common" |
19 ) | 20 ) |
20 | 21 |
21 func TestUtilities(t *testing.T) { | 22 func TestUtilities(t *testing.T) { |
22 Convey("Given a temp directory", t, func() { | 23 Convey("Given a temp directory", t, func() { |
23 tempDir, err := ioutil.TempDir("", "cipd_test") | 24 tempDir, err := ioutil.TempDir("", "cipd_test") |
24 So(err, ShouldBeNil) | 25 So(err, ShouldBeNil) |
25 Reset(func() { os.RemoveAll(tempDir) }) | 26 Reset(func() { os.RemoveAll(tempDir) }) |
26 | 27 |
27 // Wrappers that accept paths relative to tempDir. | 28 // Wrappers that accept paths relative to tempDir. |
28 touch := func(rel string) { | 29 touch := func(rel string) { |
29 abs := filepath.Join(tempDir, filepath.FromSlash(rel)) | 30 abs := filepath.Join(tempDir, filepath.FromSlash(rel)) |
30 err := os.MkdirAll(filepath.Dir(abs), 0777) | 31 err := os.MkdirAll(filepath.Dir(abs), 0777) |
31 So(err, ShouldBeNil) | 32 So(err, ShouldBeNil) |
32 f, err := os.Create(abs) | 33 f, err := os.Create(abs) |
33 So(err, ShouldBeNil) | 34 So(err, ShouldBeNil) |
34 f.Close() | 35 f.Close() |
35 } | 36 } |
36 » » ensureLink := func(symlinkRel string, target string) error { | 37 » » ensureLink := func(symlinkRel string, target string) { |
37 » » » return os.Symlink(target, filepath.Join(tempDir, symlink Rel)) | 38 » » » err := os.Symlink(target, filepath.Join(tempDir, symlink Rel)) |
39 » » » So(err, ShouldBeNil) | |
38 } | 40 } |
39 | 41 |
40 Convey("scanPackageDir works with empty dir", func() { | 42 Convey("scanPackageDir works with empty dir", func() { |
41 err := os.Mkdir(filepath.Join(tempDir, "dir"), 0777) | 43 err := os.Mkdir(filepath.Join(tempDir, "dir"), 0777) |
42 So(err, ShouldBeNil) | 44 So(err, ShouldBeNil) |
43 files, err := scanPackageDir(filepath.Join(tempDir, "dir "), nil) | 45 files, err := scanPackageDir(filepath.Join(tempDir, "dir "), nil) |
44 So(err, ShouldBeNil) | 46 So(err, ShouldBeNil) |
45 So(len(files), ShouldEqual, 0) | 47 So(len(files), ShouldEqual, 0) |
46 }) | 48 }) |
47 | 49 |
48 Convey("scanPackageDir works", func() { | 50 Convey("scanPackageDir works", func() { |
49 touch("unrelated/1") | 51 touch("unrelated/1") |
50 touch("dir/a/1") | 52 touch("dir/a/1") |
51 touch("dir/a/2") | 53 touch("dir/a/2") |
52 touch("dir/b/1") | 54 touch("dir/b/1") |
53 touch("dir/.cipdpkg/abc") | 55 touch("dir/.cipdpkg/abc") |
54 touch("dir/.cipd/abc") | 56 touch("dir/.cipd/abc") |
55 » » » ensureLink("dir/a/sym_link", "target") | 57 |
56 » » » files, err := scanPackageDir(filepath.Join(tempDir, "dir "), nil) | 58 » » » runScanPackageDir := func() sort.StringSlice { |
57 » » » So(err, ShouldBeNil) | 59 » » » » files, err := scanPackageDir(filepath.Join(tempD ir, "dir"), nil) |
58 » » » names := sort.StringSlice{} | 60 » » » » So(err, ShouldBeNil) |
59 » » » for _, f := range files { | 61 » » » » names := sort.StringSlice{} |
60 » » » » names = append(names, f.Name) | 62 » » » » for _, f := range files { |
63 » » » » » names = append(names, f.Name) | |
64 » » » » } | |
65 » » » » names.Sort() | |
66 » » » » return names | |
61 } | 67 } |
62 » » » names.Sort() | 68 |
63 » » » So(names, ShouldResemble, sort.StringSlice{ | 69 » » » // Symlinks doesn't work on Windows, test them only on P osix. |
64 » » » » "a/1", | 70 » » » if runtime.GOOS == "windows" { |
65 » » » » "a/2", | 71 » » » » Convey("works on Windows", func() { |
66 » » » » "a/sym_link", | 72 » » » » » So(runScanPackageDir(), ShouldResemble, sort.StringSlice{ |
67 » » » » "b/1", | 73 » » » » » » "a/1", |
68 » » » }) | 74 » » » » » » "a/2", |
75 » » » » » » "b/1", | |
76 » » » » » }) | |
77 » » » » }) | |
78 » » » } else { | |
79 » » » » Convey("works on Posix", func() { | |
80 » » » » » ensureLink("dir/a/sym_link", "target") | |
81 » » » » » So(runScanPackageDir(), ShouldResemble, sort.StringSlice{ | |
82 » » » » » » "a/1", | |
83 » » » » » » "a/2", | |
84 » » » » » » "a/sym_link", | |
85 » » » » » » "b/1", | |
86 » » » » » }) | |
87 » » » » }) | |
88 » » » } | |
69 }) | 89 }) |
70 }) | 90 }) |
71 } | 91 } |
72 | 92 |
73 func TestDeployInstance(t *testing.T) { | 93 func TestDeployInstance(t *testing.T) { |
74 Convey("Given a temp directory", t, func() { | 94 Convey("Given a temp directory", t, func() { |
75 tempDir, err := ioutil.TempDir("", "cipd_test") | 95 tempDir, err := ioutil.TempDir("", "cipd_test") |
76 So(err, ShouldBeNil) | 96 So(err, ShouldBeNil) |
77 Reset(func() { os.RemoveAll(tempDir) }) | 97 Reset(func() { os.RemoveAll(tempDir) }) |
78 | 98 |
79 Convey("Try to deploy package instance with bad package name", f unc() { | 99 Convey("Try to deploy package instance with bad package name", f unc() { |
80 _, err := NewDeployer(tempDir, nil).DeployInstance( | 100 _, err := NewDeployer(tempDir, nil).DeployInstance( |
81 makeTestInstance("../test/package", nil, Install ModeCopy)) | 101 makeTestInstance("../test/package", nil, Install ModeCopy)) |
82 So(err, ShouldNotBeNil) | 102 So(err, ShouldNotBeNil) |
83 }) | 103 }) |
84 | 104 |
85 Convey("Try to deploy package instance with bad instance ID", fu nc() { | 105 Convey("Try to deploy package instance with bad instance ID", fu nc() { |
86 inst := makeTestInstance("test/package", nil, InstallMod eCopy) | 106 inst := makeTestInstance("test/package", nil, InstallMod eCopy) |
87 inst.instanceID = "../000000000" | 107 inst.instanceID = "../000000000" |
88 _, err := NewDeployer(tempDir, nil).DeployInstance(inst) | 108 _, err := NewDeployer(tempDir, nil).DeployInstance(inst) |
89 So(err, ShouldNotBeNil) | 109 So(err, ShouldNotBeNil) |
90 }) | 110 }) |
91 }) | 111 }) |
92 } | 112 } |
93 | 113 |
94 func TestDeployInstanceSymlinkMode(t *testing.T) { | 114 func TestDeployInstanceSymlinkMode(t *testing.T) { |
115 if runtime.GOOS == "windows" { | |
116 t.Skip("Skipping on Windows: no symlinks") | |
117 } | |
118 | |
95 Convey("Given a temp directory", t, func() { | 119 Convey("Given a temp directory", t, func() { |
96 tempDir, err := ioutil.TempDir("", "cipd_test") | 120 tempDir, err := ioutil.TempDir("", "cipd_test") |
97 So(err, ShouldBeNil) | 121 So(err, ShouldBeNil) |
98 Reset(func() { os.RemoveAll(tempDir) }) | 122 Reset(func() { os.RemoveAll(tempDir) }) |
99 | 123 |
100 Convey("DeployInstance new empty package instance", func() { | 124 Convey("DeployInstance new empty package instance", func() { |
101 inst := makeTestInstance("test/package", nil, InstallMod eSymlink) | 125 inst := makeTestInstance("test/package", nil, InstallMod eSymlink) |
102 info, err := NewDeployer(tempDir, nil).DeployInstance(in st) | 126 info, err := NewDeployer(tempDir, nil).DeployInstance(in st) |
103 So(err, ShouldBeNil) | 127 So(err, ShouldBeNil) |
104 So(info, ShouldResemble, inst.Pin()) | 128 So(info, ShouldResemble, inst.Pin()) |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 ".cipd/pkgs/test_package_B6R4ErK5ko/_current:000 0000000000000000000000000000000000000", | 264 ".cipd/pkgs/test_package_B6R4ErK5ko/_current:000 0000000000000000000000000000000000000", |
241 "pkg1 file:.cipd/pkgs/test_package_B6R4ErK5ko/_c urrent/pkg1 file", | 265 "pkg1 file:.cipd/pkgs/test_package_B6R4ErK5ko/_c urrent/pkg1 file", |
242 "pkg2 file:.cipd/pkgs/package_another_4HL4H61fGm /_current/pkg2 file", | 266 "pkg2 file:.cipd/pkgs/package_another_4HL4H61fGm /_current/pkg2 file", |
243 "some/executable:../.cipd/pkgs/package_another_4 HL4H61fGm/_current/some/executable", | 267 "some/executable:../.cipd/pkgs/package_another_4 HL4H61fGm/_current/some/executable", |
244 "some/file/path:../../.cipd/pkgs/package_another _4HL4H61fGm/_current/some/file/path", | 268 "some/file/path:../../.cipd/pkgs/package_another _4HL4H61fGm/_current/some/file/path", |
245 }) | 269 }) |
246 }) | 270 }) |
247 }) | 271 }) |
248 } | 272 } |
249 | 273 |
250 func TestDeployInstanceCopyMode(t *testing.T) { | 274 func TestDeployInstanceCopyModePosix(t *testing.T) { |
275 » if runtime.GOOS == "windows" { | |
276 » » t.Skip("Skipping on windows") | |
277 » } | |
278 | |
251 Convey("Given a temp directory", t, func() { | 279 Convey("Given a temp directory", t, func() { |
252 tempDir, err := ioutil.TempDir("", "cipd_test") | 280 tempDir, err := ioutil.TempDir("", "cipd_test") |
253 So(err, ShouldBeNil) | 281 So(err, ShouldBeNil) |
254 Reset(func() { os.RemoveAll(tempDir) }) | 282 Reset(func() { os.RemoveAll(tempDir) }) |
255 | 283 |
256 Convey("DeployInstance new empty package instance", func() { | 284 Convey("DeployInstance new empty package instance", func() { |
257 inst := makeTestInstance("test/package", nil, InstallMod eCopy) | 285 inst := makeTestInstance("test/package", nil, InstallMod eCopy) |
258 info, err := NewDeployer(tempDir, nil).DeployInstance(in st) | 286 info, err := NewDeployer(tempDir, nil).DeployInstance(in st) |
259 So(err, ShouldBeNil) | 287 So(err, ShouldBeNil) |
260 So(info, ShouldResemble, inst.Pin()) | 288 So(info, ShouldResemble, inst.Pin()) |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
368 ".cipd/pkgs/test_package_B6R4ErK5ko/_current:000 0000000000000000000000000000000000000", | 396 ".cipd/pkgs/test_package_B6R4ErK5ko/_current:000 0000000000000000000000000000000000000", |
369 "pkg1 file", | 397 "pkg1 file", |
370 "pkg2 file", | 398 "pkg2 file", |
371 "some/executable*", | 399 "some/executable*", |
372 "some/file/path", | 400 "some/file/path", |
373 }) | 401 }) |
374 }) | 402 }) |
375 }) | 403 }) |
376 } | 404 } |
377 | 405 |
406 func TestDeployInstanceCopyModeWindows(t *testing.T) { | |
Vadim Sh.
2015/07/28 01:20:18
copy pasta from TestDeployInstanceCopyModePosix ad
| |
407 if runtime.GOOS != "windows" { | |
408 t.Skip("Skipping on posix") | |
409 } | |
410 | |
411 Convey("Given a temp directory", t, func() { | |
412 tempDir, err := ioutil.TempDir("", "cipd_test") | |
413 So(err, ShouldBeNil) | |
414 Reset(func() { os.RemoveAll(tempDir) }) | |
415 | |
416 Convey("DeployInstance new empty package instance", func() { | |
417 inst := makeTestInstance("test/package", nil, InstallMod eCopy) | |
418 info, err := NewDeployer(tempDir, nil).DeployInstance(in st) | |
419 So(err, ShouldBeNil) | |
420 So(info, ShouldResemble, inst.Pin()) | |
421 So(scanDir(tempDir), ShouldResemble, []string{ | |
422 ".cipd/pkgs/test_package_B6R4ErK5ko/0123456789ab cdef00000123456789abcdef0000/.cipdpkg/manifest.json", | |
423 ".cipd/pkgs/test_package_B6R4ErK5ko/_current.txt ", | |
424 }) | |
425 cur := readFile(tempDir, ".cipd/pkgs/test_package_B6R4Er K5ko/_current.txt") | |
426 So(cur, ShouldEqual, "0123456789abcdef00000123456789abcd ef0000") | |
427 }) | |
428 | |
429 Convey("DeployInstance new non-empty package instance", func() { | |
430 inst := makeTestInstance("test/package", []File{ | |
431 NewTestFile("some/file/path", "data a", false), | |
432 NewTestFile("some/executable", "data b", true), | |
433 }, InstallModeCopy) | |
434 _, err := NewDeployer(tempDir, nil).DeployInstance(inst) | |
435 So(err, ShouldBeNil) | |
436 So(scanDir(tempDir), ShouldResemble, []string{ | |
437 ".cipd/pkgs/test_package_B6R4ErK5ko/0123456789ab cdef00000123456789abcdef0000/.cipdpkg/manifest.json", | |
438 ".cipd/pkgs/test_package_B6R4ErK5ko/_current.txt ", | |
439 "some/executable", | |
440 "some/file/path", | |
441 }) | |
442 cur := readFile(tempDir, ".cipd/pkgs/test_package_B6R4Er K5ko/_current.txt") | |
443 So(cur, ShouldEqual, "0123456789abcdef00000123456789abcd ef0000") | |
444 }) | |
445 | |
446 Convey("Redeploy same package instance", func() { | |
447 inst := makeTestInstance("test/package", []File{ | |
448 NewTestFile("some/file/path", "data a", false), | |
449 NewTestFile("some/executable", "data b", true), | |
450 }, InstallModeCopy) | |
451 _, err := NewDeployer(tempDir, nil).DeployInstance(inst) | |
452 So(err, ShouldBeNil) | |
453 _, err = NewDeployer(tempDir, nil).DeployInstance(inst) | |
454 So(err, ShouldBeNil) | |
455 So(scanDir(tempDir), ShouldResemble, []string{ | |
456 ".cipd/pkgs/test_package_B6R4ErK5ko/0123456789ab cdef00000123456789abcdef0000/.cipdpkg/manifest.json", | |
457 ".cipd/pkgs/test_package_B6R4ErK5ko/_current.txt ", | |
458 "some/executable", | |
459 "some/file/path", | |
460 }) | |
461 cur := readFile(tempDir, ".cipd/pkgs/test_package_B6R4Er K5ko/_current.txt") | |
462 So(cur, ShouldEqual, "0123456789abcdef00000123456789abcd ef0000") | |
463 }) | |
464 | |
465 Convey("DeployInstance package update", func() { | |
466 oldPkg := makeTestInstance("test/package", []File{ | |
467 NewTestFile("some/file/path", "data a old", fals e), | |
468 NewTestFile("some/executable", "data b old", tru e), | |
469 NewTestFile("old only", "data c old", true), | |
470 NewTestFile("mode change 1", "data d", true), | |
471 NewTestFile("mode change 2", "data e", false), | |
472 }, InstallModeCopy) | |
473 oldPkg.instanceID = "00000000000000000000000000000000000 00000" | |
474 | |
475 newPkg := makeTestInstance("test/package", []File{ | |
476 NewTestFile("some/file/path", "data a new", fals e), | |
477 NewTestFile("some/executable", "data b new", tru e), | |
478 NewTestFile("mode change 1", "data d", false), | |
479 NewTestFile("mode change 2", "data d", true), | |
480 }, InstallModeCopy) | |
481 newPkg.instanceID = "11111111111111111111111111111111111 11111" | |
482 | |
483 _, err := NewDeployer(tempDir, nil).DeployInstance(oldPk g) | |
484 So(err, ShouldBeNil) | |
485 _, err = NewDeployer(tempDir, nil).DeployInstance(newPkg ) | |
486 So(err, ShouldBeNil) | |
487 | |
488 So(scanDir(tempDir), ShouldResemble, []string{ | |
489 ".cipd/pkgs/test_package_B6R4ErK5ko/111111111111 1111111111111111111111111111/.cipdpkg/manifest.json", | |
490 ".cipd/pkgs/test_package_B6R4ErK5ko/_current.txt ", | |
491 "mode change 1", | |
492 "mode change 2", | |
493 "some/executable", | |
494 "some/file/path", | |
495 }) | |
496 cur := readFile(tempDir, ".cipd/pkgs/test_package_B6R4Er K5ko/_current.txt") | |
497 So(cur, ShouldEqual, "1111111111111111111111111111111111 111111") | |
498 }) | |
499 | |
500 Convey("DeployInstance two different packages", func() { | |
501 pkg1 := makeTestInstance("test/package", []File{ | |
502 NewTestFile("some/file/path", "data a old", fals e), | |
503 NewTestFile("some/executable", "data b old", tru e), | |
504 NewTestFile("pkg1 file", "data c", false), | |
505 }, InstallModeCopy) | |
506 pkg1.instanceID = "0000000000000000000000000000000000000 000" | |
507 | |
508 // Nesting in package names is allowed. | |
509 pkg2 := makeTestInstance("test/package/another", []File{ | |
510 NewTestFile("some/file/path", "data a new", fals e), | |
511 NewTestFile("some/executable", "data b new", tru e), | |
512 NewTestFile("pkg2 file", "data d", false), | |
513 }, InstallModeCopy) | |
514 pkg2.instanceID = "1111111111111111111111111111111111111 111" | |
515 | |
516 _, err := NewDeployer(tempDir, nil).DeployInstance(pkg1) | |
517 So(err, ShouldBeNil) | |
518 _, err = NewDeployer(tempDir, nil).DeployInstance(pkg2) | |
519 So(err, ShouldBeNil) | |
520 | |
521 So(scanDir(tempDir), ShouldResemble, []string{ | |
522 ".cipd/pkgs/package_another_4HL4H61fGm/111111111 1111111111111111111111111111111/.cipdpkg/manifest.json", | |
523 ".cipd/pkgs/package_another_4HL4H61fGm/_current. txt", | |
524 ".cipd/pkgs/test_package_B6R4ErK5ko/000000000000 0000000000000000000000000000/.cipdpkg/manifest.json", | |
525 ".cipd/pkgs/test_package_B6R4ErK5ko/_current.txt ", | |
526 "pkg1 file", | |
527 "pkg2 file", | |
528 "some/executable", | |
529 "some/file/path", | |
530 }) | |
531 cur1 := readFile(tempDir, ".cipd/pkgs/package_another_4H L4H61fGm/_current.txt") | |
532 So(cur1, ShouldEqual, "111111111111111111111111111111111 1111111") | |
533 cur2 := readFile(tempDir, ".cipd/pkgs/test_package_B6R4E rK5ko/_current.txt") | |
534 So(cur2, ShouldEqual, "000000000000000000000000000000000 0000000") | |
535 }) | |
536 }) | |
537 } | |
538 | |
378 func TestDeployInstanceSwitchingModes(t *testing.T) { | 539 func TestDeployInstanceSwitchingModes(t *testing.T) { |
540 if runtime.GOOS == "windows" { | |
541 t.Skip("Skipping on Windows: no symlinks") | |
542 } | |
543 | |
379 Convey("Given a temp directory", t, func() { | 544 Convey("Given a temp directory", t, func() { |
380 tempDir, err := ioutil.TempDir("", "cipd_test") | 545 tempDir, err := ioutil.TempDir("", "cipd_test") |
381 So(err, ShouldBeNil) | 546 So(err, ShouldBeNil) |
382 Reset(func() { os.RemoveAll(tempDir) }) | 547 Reset(func() { os.RemoveAll(tempDir) }) |
383 | 548 |
384 files := []File{ | 549 files := []File{ |
385 NewTestFile("some/file/path", "data a", false), | 550 NewTestFile("some/file/path", "data a", false), |
386 NewTestFile("some/executable", "data b", true), | 551 NewTestFile("some/executable", "data b", true), |
387 NewTestSymlink("some/symlink", "executable"), | 552 NewTestSymlink("some/symlink", "executable"), |
388 } | 553 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
463 So(out, ShouldResemble, []Pin{ | 628 So(out, ShouldResemble, []Pin{ |
464 {"test", "0123456789abcdef00000123456789abcdef00 00"}, | 629 {"test", "0123456789abcdef00000123456789abcdef00 00"}, |
465 {"test/pkg", "0123456789abcdef00000123456789abcd ef0000"}, | 630 {"test/pkg", "0123456789abcdef00000123456789abcd ef0000"}, |
466 {"test/pkg/123", "0123456789abcdef00000123456789 abcdef0000"}, | 631 {"test/pkg/123", "0123456789abcdef00000123456789 abcdef0000"}, |
467 {"test/pkg/456", "0123456789abcdef00000123456789 abcdef0000"}, | 632 {"test/pkg/456", "0123456789abcdef00000123456789 abcdef0000"}, |
468 }) | 633 }) |
469 }) | 634 }) |
470 }) | 635 }) |
471 } | 636 } |
472 | 637 |
473 func TestRemoveDeployed(t *testing.T) { | 638 func TestRemoveDeployedCommon(t *testing.T) { |
474 Convey("Given a temp directory", t, func() { | 639 Convey("Given a temp directory", t, func() { |
475 tempDir, err := ioutil.TempDir("", "cipd_test") | 640 tempDir, err := ioutil.TempDir("", "cipd_test") |
476 So(err, ShouldBeNil) | 641 So(err, ShouldBeNil) |
477 Reset(func() { os.RemoveAll(tempDir) }) | 642 Reset(func() { os.RemoveAll(tempDir) }) |
478 | 643 |
479 Convey("RemoveDeployed works with missing package", func() { | 644 Convey("RemoveDeployed works with missing package", func() { |
480 err := NewDeployer(tempDir, nil).RemoveDeployed("package /path") | 645 err := NewDeployer(tempDir, nil).RemoveDeployed("package /path") |
481 So(err, ShouldBeNil) | 646 So(err, ShouldBeNil) |
482 }) | 647 }) |
648 }) | |
649 } | |
650 | |
651 func TestRemoveDeployedPosix(t *testing.T) { | |
652 if runtime.GOOS == "windows" { | |
653 t.Skip("Skipping on windows") | |
654 } | |
655 | |
656 Convey("Given a temp directory", t, func() { | |
657 tempDir, err := ioutil.TempDir("", "cipd_test") | |
658 So(err, ShouldBeNil) | |
659 Reset(func() { os.RemoveAll(tempDir) }) | |
483 | 660 |
484 Convey("RemoveDeployed works", func() { | 661 Convey("RemoveDeployed works", func() { |
485 d := NewDeployer(tempDir, nil) | 662 d := NewDeployer(tempDir, nil) |
486 | 663 |
487 // Deploy some instance (to keep it). | 664 // Deploy some instance (to keep it). |
488 inst := makeTestInstance("test/package/123", []File{ | 665 inst := makeTestInstance("test/package/123", []File{ |
489 NewTestFile("some/file/path1", "data a", false), | 666 NewTestFile("some/file/path1", "data a", false), |
490 NewTestFile("some/executable1", "data b", true), | 667 NewTestFile("some/executable1", "data b", true), |
491 }, InstallModeCopy) | 668 }, InstallModeCopy) |
492 _, err := d.DeployInstance(inst) | 669 _, err := d.DeployInstance(inst) |
(...skipping 16 matching lines...) Expand all Loading... | |
509 So(scanDir(tempDir), ShouldResemble, []string{ | 686 So(scanDir(tempDir), ShouldResemble, []string{ |
510 ".cipd/pkgs/package_123_Wnok5l4iFr/0123456789abc def00000123456789abcdef0000/.cipdpkg/manifest.json", | 687 ".cipd/pkgs/package_123_Wnok5l4iFr/0123456789abc def00000123456789abcdef0000/.cipdpkg/manifest.json", |
511 ".cipd/pkgs/package_123_Wnok5l4iFr/_current:0123 456789abcdef00000123456789abcdef0000", | 688 ".cipd/pkgs/package_123_Wnok5l4iFr/_current:0123 456789abcdef00000123456789abcdef0000", |
512 "some/executable1*", | 689 "some/executable1*", |
513 "some/file/path1", | 690 "some/file/path1", |
514 }) | 691 }) |
515 }) | 692 }) |
516 }) | 693 }) |
517 } | 694 } |
518 | 695 |
696 func TestRemoveDeployedWindows(t *testing.T) { | |
697 if runtime.GOOS != "windows" { | |
698 t.Skip("Skipping on posix") | |
699 } | |
700 | |
701 Convey("Given a temp directory", t, func() { | |
702 tempDir, err := ioutil.TempDir("", "cipd_test") | |
703 So(err, ShouldBeNil) | |
704 Reset(func() { os.RemoveAll(tempDir) }) | |
705 | |
706 Convey("RemoveDeployed works", func() { | |
707 d := NewDeployer(tempDir, nil) | |
708 | |
709 // Deploy some instance (to keep it). | |
710 inst := makeTestInstance("test/package/123", []File{ | |
711 NewTestFile("some/file/path1", "data a", false), | |
712 NewTestFile("some/executable1", "data b", true), | |
713 }, InstallModeCopy) | |
714 _, err := d.DeployInstance(inst) | |
715 So(err, ShouldBeNil) | |
716 | |
717 // Deploy another instance (to remove it). | |
718 inst = makeTestInstance("test/package", []File{ | |
719 NewTestFile("some/file/path2", "data a", false), | |
720 NewTestFile("some/executable2", "data b", true), | |
721 }, InstallModeCopy) | |
722 _, err = d.DeployInstance(inst) | |
723 So(err, ShouldBeNil) | |
724 | |
725 // Now remove the second package. | |
726 err = d.RemoveDeployed("test/package") | |
727 So(err, ShouldBeNil) | |
728 | |
729 // Verify the final state (only first package should sur vive). | |
730 So(scanDir(tempDir), ShouldResemble, []string{ | |
731 ".cipd/pkgs/package_123_Wnok5l4iFr/0123456789abc def00000123456789abcdef0000/.cipdpkg/manifest.json", | |
732 ".cipd/pkgs/package_123_Wnok5l4iFr/_current.txt" , | |
733 "some/executable1", | |
734 "some/file/path1", | |
735 }) | |
736 }) | |
737 }) | |
738 } | |
739 | |
519 //////////////////////////////////////////////////////////////////////////////// | 740 //////////////////////////////////////////////////////////////////////////////// |
520 | 741 |
521 type testPackageInstance struct { | 742 type testPackageInstance struct { |
522 packageName string | 743 packageName string |
523 instanceID string | 744 instanceID string |
524 files []File | 745 files []File |
525 installMode InstallMode | 746 installMode InstallMode |
526 } | 747 } |
527 | 748 |
528 // makeTestInstance returns PackageInstance implementation with mocked guts. | 749 // makeTestInstance returns PackageInstance implementation with mocked guts. |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
589 } | 810 } |
590 | 811 |
591 out = append(out, item+suffix) | 812 out = append(out, item+suffix) |
592 return nil | 813 return nil |
593 }) | 814 }) |
594 if err != nil { | 815 if err != nil { |
595 panic("Failed to walk a directory") | 816 panic("Failed to walk a directory") |
596 } | 817 } |
597 return | 818 return |
598 } | 819 } |
820 | |
821 // readFile reads content of an existing text file. Root path is provided as | |
822 // a native path, rel - as a slash-separated path. | |
823 func readFile(root, rel string) string { | |
824 body, err := ioutil.ReadFile(filepath.Join(root, filepath.FromSlash(rel) )) | |
825 So(err, ShouldBeNil) | |
826 return string(body) | |
827 } | |
OLD | NEW |