| // Copyright 2021 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package fetch | |
| import ( | |
| "archive/zip" | |
| "bytes" | |
| "io" | |
| "testing" | |
| ) | |
| func TestFSSignature(t *testing.T) { | |
| zip1 := newzip(t, [][2]string{ | |
| {"file1", "abc"}, | |
| {"file2", "def"}, | |
| }) | |
| zip2 := newzip(t, [][2]string{ // same files, different order, different prefix | |
| {"file2", "def"}, | |
| {"file1", "abc"}, | |
| }) | |
| zip3 := newzip(t, [][2]string{ // different files | |
| {"file1", "abc"}, | |
| {"file2d", "ef"}, | |
| }) | |
| sig := func(z []byte) string { | |
| r, err := zip.NewReader(bytes.NewReader(z), int64(len(z))) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| s, err := FSSignature(r) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| return s | |
| } | |
| if sig(zip1) != sig(zip2) { | |
| t.Error("same files, different order: got different signatures, want same") | |
| } | |
| if sig(zip1) == sig(zip3) { | |
| t.Error("different files: got same signatures, wanted different") | |
| } | |
| } | |
| func newzip(t *testing.T, files [][2]string) []byte { | |
| var buf bytes.Buffer | |
| zw := zip.NewWriter(&buf) | |
| for _, f := range files { | |
| fw, err := zw.Create(f[0]) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| io.WriteString(fw, f[1]) | |
| } | |
| if err := zw.Close(); err != nil { | |
| t.Fatal(err) | |
| } | |
| return buf.Bytes() | |
| } |