| 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 cipd | 5 package local |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "archive/zip" | 8 "archive/zip" |
| 9 "bytes" | 9 "bytes" |
| 10 "crypto/sha1" | 10 "crypto/sha1" |
| 11 "encoding/hex" | 11 "encoding/hex" |
| 12 "fmt" | |
| 13 "io" | |
| 14 "io/ioutil" | 12 "io/ioutil" |
| 15 "os" | 13 "os" |
| 16 "runtime" | 14 "runtime" |
| 17 "testing" | 15 "testing" |
| 18 | 16 |
| 19 . "github.com/smartystreets/goconvey/convey" | 17 . "github.com/smartystreets/goconvey/convey" |
| 20 ) | 18 ) |
| 21 | 19 |
| 22 func TestGoVersion(t *testing.T) { | 20 func TestGoVersion(t *testing.T) { |
| 23 Convey("Make sure using pinned Go version", t, func() { | 21 Convey("Make sure using pinned Go version", t, func() { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 mode: 0600, | 54 mode: 0600, |
| 57 body: []byte(goodManifest), | 55 body: []byte(goodManifest), |
| 58 }, | 56 }, |
| 59 }) | 57 }) |
| 60 }) | 58 }) |
| 61 | 59 |
| 62 Convey("Building package with a bunch of files", t, func() { | 60 Convey("Building package with a bunch of files", t, func() { |
| 63 out := bytes.Buffer{} | 61 out := bytes.Buffer{} |
| 64 err := BuildInstance(BuildInstanceOptions{ | 62 err := BuildInstance(BuildInstanceOptions{ |
| 65 Input: []File{ | 63 Input: []File{ |
| 66 » » » » makeTestFile("testing/qwerty", "12345", false), | 64 » » » » NewTestFile("testing/qwerty", "12345", false), |
| 67 » » » » makeTestFile("abc", "duh", true), | 65 » » » » NewTestFile("abc", "duh", true), |
| 68 » » » » makeTestSymlink("rel_symlink", "abc"), | 66 » » » » NewTestSymlink("rel_symlink", "abc"), |
| 69 » » » » makeTestSymlink("abs_symlink", "/abc/def"), | 67 » » » » NewTestSymlink("abs_symlink", "/abc/def"), |
| 70 }, | 68 }, |
| 71 Output: &out, | 69 Output: &out, |
| 72 PackageName: "testing", | 70 PackageName: "testing", |
| 73 }) | 71 }) |
| 74 So(err, ShouldBeNil) | 72 So(err, ShouldBeNil) |
| 75 | 73 |
| 76 // The manifest and all added files. | 74 // The manifest and all added files. |
| 77 files := readZip(out.Bytes()) | 75 files := readZip(out.Bytes()) |
| 78 So(files, ShouldResemble, []zippedFile{ | 76 So(files, ShouldResemble, []zippedFile{ |
| 79 zippedFile{ | 77 zippedFile{ |
| (...skipping 26 matching lines...) Expand all Loading... |
| 106 size: uint64(len(goodManifest)), | 104 size: uint64(len(goodManifest)), |
| 107 mode: 0600, | 105 mode: 0600, |
| 108 body: []byte(goodManifest), | 106 body: []byte(goodManifest), |
| 109 }, | 107 }, |
| 110 }) | 108 }) |
| 111 }) | 109 }) |
| 112 | 110 |
| 113 Convey("Duplicate files fail", t, func() { | 111 Convey("Duplicate files fail", t, func() { |
| 114 err := BuildInstance(BuildInstanceOptions{ | 112 err := BuildInstance(BuildInstanceOptions{ |
| 115 Input: []File{ | 113 Input: []File{ |
| 116 » » » » makeTestFile("a", "12345", false), | 114 » » » » NewTestFile("a", "12345", false), |
| 117 » » » » makeTestFile("a", "12345", false), | 115 » » » » NewTestFile("a", "12345", false), |
| 118 }, | 116 }, |
| 119 Output: &bytes.Buffer{}, | 117 Output: &bytes.Buffer{}, |
| 120 PackageName: "testing", | 118 PackageName: "testing", |
| 121 }) | 119 }) |
| 122 So(err, ShouldNotBeNil) | 120 So(err, ShouldNotBeNil) |
| 123 }) | 121 }) |
| 124 | 122 |
| 125 Convey("Writing to service dir fails", t, func() { | 123 Convey("Writing to service dir fails", t, func() { |
| 126 err := BuildInstance(BuildInstanceOptions{ | 124 err := BuildInstance(BuildInstanceOptions{ |
| 127 Input: []File{ | 125 Input: []File{ |
| 128 » » » » makeTestFile(".cipdpkg/stuff", "12345", false), | 126 » » » » NewTestFile(".cipdpkg/stuff", "12345", false), |
| 129 }, | 127 }, |
| 130 Output: &bytes.Buffer{}, | 128 Output: &bytes.Buffer{}, |
| 131 PackageName: "testing", | 129 PackageName: "testing", |
| 132 }) | 130 }) |
| 133 So(err, ShouldNotBeNil) | 131 So(err, ShouldNotBeNil) |
| 134 }) | 132 }) |
| 135 | 133 |
| 136 Convey("Bad name fails", t, func() { | 134 Convey("Bad name fails", t, func() { |
| 137 err := BuildInstance(BuildInstanceOptions{ | 135 err := BuildInstance(BuildInstanceOptions{ |
| 138 Output: &bytes.Buffer{}, | 136 Output: &bytes.Buffer{}, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 } | 177 } |
| 180 files[i] = zippedFile{ | 178 files[i] = zippedFile{ |
| 181 name: zf.Name, | 179 name: zf.Name, |
| 182 size: zf.FileHeader.UncompressedSize64, | 180 size: zf.FileHeader.UncompressedSize64, |
| 183 mode: zf.Mode(), | 181 mode: zf.Mode(), |
| 184 body: body, | 182 body: body, |
| 185 } | 183 } |
| 186 } | 184 } |
| 187 return files | 185 return files |
| 188 } | 186 } |
| 189 | |
| 190 //////////////////////////////////////////////////////////////////////////////// | |
| 191 | |
| 192 type testFile struct { | |
| 193 name string | |
| 194 data string | |
| 195 executable bool | |
| 196 symlinkTarget string | |
| 197 } | |
| 198 | |
| 199 func (f *testFile) Name() string { return f.name } | |
| 200 func (f *testFile) Size() uint64 { return uint64(len(f.data)) } | |
| 201 func (f *testFile) Executable() bool { return f.executable } | |
| 202 func (f *testFile) Symlink() bool { return f.symlinkTarget != "" } | |
| 203 | |
| 204 func (f *testFile) SymlinkTarget() (string, error) { | |
| 205 if f.symlinkTarget == "" { | |
| 206 return "", fmt.Errorf("Not a symlink: %s", f.Name()) | |
| 207 } | |
| 208 return f.symlinkTarget, nil | |
| 209 } | |
| 210 | |
| 211 func (f *testFile) Open() (io.ReadCloser, error) { | |
| 212 if f.Symlink() { | |
| 213 return nil, fmt.Errorf("Can't open symlink: %s", f.Name()) | |
| 214 } | |
| 215 r := bytes.NewReader([]byte(f.data)) | |
| 216 return ioutil.NopCloser(r), nil | |
| 217 } | |
| 218 | |
| 219 func makeTestFile(name string, data string, executable bool) File { | |
| 220 return &testFile{ | |
| 221 name: name, | |
| 222 data: data, | |
| 223 executable: executable, | |
| 224 } | |
| 225 } | |
| 226 | |
| 227 func makeTestSymlink(name string, target string) File { | |
| 228 return &testFile{ | |
| 229 name: name, | |
| 230 symlinkTarget: target, | |
| 231 } | |
| 232 } | |
| OLD | NEW |