diff options
author | Colin Cross <ccross@android.com> | 2018-09-27 15:06:19 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2018-09-28 13:56:06 -0700 |
commit | 05518bc13b3cd31e6cb7158a41aa124b224c3bc4 (patch) | |
tree | 65dbf6c09827df7f23d973ef6419fea543580d52 /zip/zip.go | |
parent | b051ab5cb54f8802807680a8fb24092b445a3ddb (diff) | |
download | build_soong-05518bc13b3cd31e6cb7158a41aa124b224c3bc4.tar.gz build_soong-05518bc13b3cd31e6cb7158a41aa124b224c3bc4.tar.bz2 build_soong-05518bc13b3cd31e6cb7158a41aa124b224c3bc4.zip |
soong_zip: Add tests
Add test that cover basic command line usage of soong_zip. -D
is not covered yet as the implementation will be replaced with
one that is also more easily testable in the next patch.
Bug: 116751500
Test: zip_test.go
Change-Id: I5a1bcee74ebc9cb3cf332c36f89bc12c0e807ad2
Diffstat (limited to 'zip/zip.go')
-rw-r--r-- | zip/zip.go | 61 |
1 files changed, 40 insertions, 21 deletions
@@ -22,7 +22,6 @@ import ( "hash/crc32" "io" "io/ioutil" - "log" "os" "path/filepath" "sort" @@ -178,6 +177,8 @@ type ZipWriter struct { compressorPool sync.Pool compLevel int + + fs pathtools.FileSystem } type zipEntry struct { @@ -201,6 +202,7 @@ type ZipArgs struct { NumParallelJobs int NonDeflatedFiles map[string]bool WriteIfChanged bool + Filesystem pathtools.FileSystem } const NOQUOTE = '\x00' @@ -246,22 +248,24 @@ func ReadRespFile(bytes []byte) []string { return args } -func Run(args ZipArgs) (err error) { - if args.OutputFilePath == "" { - return fmt.Errorf("output file path must be nonempty") - } - +func ZipTo(args ZipArgs, w io.Writer) error { if args.EmulateJar { args.AddDirectoryEntriesToZip = true } - w := &ZipWriter{ + z := &ZipWriter{ time: jar.DefaultTime, createdDirs: make(map[string]string), createdFiles: make(map[string]string), directories: args.AddDirectoryEntriesToZip, compLevel: args.CompressionLevel, + fs: args.Filesystem, + } + + if z.fs == nil { + z.fs = pathtools.OsFs } + pathMappings := []pathMapping{} noCompression := args.CompressionLevel == 0 @@ -274,11 +278,19 @@ func Run(args ZipArgs) (err error) { for _, src := range srcs { err := fillPathPairs(fa, src, &pathMappings, args.NonDeflatedFiles, noCompression) if err != nil { - log.Fatal(err) + return err } } } + return z.write(w, pathMappings, args.ManifestSourcePath, args.EmulateJar, args.NumParallelJobs) +} + +func Zip(args ZipArgs) error { + if args.OutputFilePath == "" { + return fmt.Errorf("output file path must be nonempty") + } + buf := &bytes.Buffer{} var out io.Writer = buf @@ -298,7 +310,7 @@ func Run(args ZipArgs) (err error) { out = f } - err = w.write(out, pathMappings, args.ManifestSourcePath, args.EmulateJar, args.NumParallelJobs) + err := ZipTo(args, out) if err != nil { return err } @@ -351,13 +363,6 @@ func jarSort(mappings []pathMapping) { sort.SliceStable(mappings, less) } -type readerSeekerCloser interface { - io.Reader - io.ReaderAt - io.Closer - io.Seeker -} - func (z *ZipWriter) write(f io.Writer, pathMappings []pathMapping, manifest string, emulateJar bool, parallelJobs int) error { z.errors = make(chan error) defer close(z.errors) @@ -504,7 +509,7 @@ func (z *ZipWriter) addFile(dest, src string, method uint16, emulateJar bool) er var fileSize int64 var executable bool - if s, err := os.Lstat(src); err != nil { + if s, err := z.fs.Lstat(src); err != nil { return err } else if s.IsDir() { if z.directories { @@ -535,7 +540,7 @@ func (z *ZipWriter) addFile(dest, src string, method uint16, emulateJar bool) er executable = s.Mode()&0100 != 0 } - r, err := os.Open(src) + r, err := z.fs.Open(src) if err != nil { return err } @@ -565,7 +570,21 @@ func (z *ZipWriter) addManifest(dest string, src string, method uint16) error { return err } - fh, buf, err := jar.ManifestFileContents(src) + var contents []byte + if src != "" { + f, err := z.fs.Open(src) + if err != nil { + return err + } + + contents, err = ioutil.ReadAll(f) + f.Close() + if err != nil { + return err + } + } + + fh, buf, err := jar.ManifestFileContents(contents) if err != nil { return err } @@ -575,7 +594,7 @@ func (z *ZipWriter) addManifest(dest string, src string, method uint16) error { return z.writeFileContents(fh, reader) } -func (z *ZipWriter) writeFileContents(header *zip.FileHeader, r readerSeekerCloser) (err error) { +func (z *ZipWriter) writeFileContents(header *zip.FileHeader, r pathtools.ReaderAtSeekerCloser) (err error) { header.SetModTime(z.time) @@ -845,7 +864,7 @@ func (z *ZipWriter) writeSymlink(rel, file string) error { fileHeader.SetModTime(z.time) fileHeader.SetMode(0777 | os.ModeSymlink) - dest, err := os.Readlink(file) + dest, err := z.fs.Readlink(file) if err != nil { return err } |