1 // Copyright 2018 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
20 func h(s
string) string {
21 return fmt
.Sprintf("%x", sha256
.Sum256([]byte(s
)))
24 func htop(k
string, s
string) string {
25 sum
:= sha256
.Sum256([]byte(s
))
26 return k
+ ":" + base64
.StdEncoding
.EncodeToString(sum
[:])
29 func TestHash1(t
*testing
.T
) {
30 files
:= []string{"xyz", "abc"}
31 open
:= func(name
string) (io
.ReadCloser
, error
) {
32 return ioutil
.NopCloser(strings
.NewReader("data for " + name
)), nil
34 want
:= htop("h1", fmt
.Sprintf("%s %s\n%s %s\n", h("data for abc"), "abc", h("data for xyz"), "xyz"))
35 out
, err
:= Hash1(files
, open
)
40 t
.Errorf("Hash1(...) = %s, want %s", out
, want
)
43 _
, err
= Hash1([]string{"xyz", "a\nbc"}, open
)
45 t
.Error("Hash1: expected error on newline in filenames")
49 func TestHashDir(t
*testing
.T
) {
50 dir
, err
:= ioutil
.TempDir("", "dirhash-test-")
54 defer os
.RemoveAll(dir
)
55 if err
:= ioutil
.WriteFile(filepath
.Join(dir
, "xyz"), []byte("data for xyz"), 0666); err
!= nil {
58 if err
:= ioutil
.WriteFile(filepath
.Join(dir
, "abc"), []byte("data for abc"), 0666); err
!= nil {
61 want
:= htop("h1", fmt
.Sprintf("%s %s\n%s %s\n", h("data for abc"), "prefix/abc", h("data for xyz"), "prefix/xyz"))
62 out
, err
:= HashDir(dir
, "prefix", Hash1
)
64 t
.Fatalf("HashDir: %v", err
)
67 t
.Errorf("HashDir(...) = %s, want %s", out
, want
)
71 func TestHashZip(t
*testing
.T
) {
72 f
, err
:= ioutil
.TempFile("", "dirhash-test-")
76 defer os
.Remove(f
.Name())
80 w
, err
:= z
.Create("prefix/xyz")
84 w
.Write([]byte("data for xyz"))
85 w
, err
= z
.Create("prefix/abc")
89 w
.Write([]byte("data for abc"))
90 if err
:= z
.Close(); err
!= nil {
93 if err
:= f
.Close(); err
!= nil {
97 want
:= htop("h1", fmt
.Sprintf("%s %s\n%s %s\n", h("data for abc"), "prefix/abc", h("data for xyz"), "prefix/xyz"))
98 out
, err
:= HashZip(f
.Name(), Hash1
)
100 t
.Fatalf("HashDir: %v", err
)
103 t
.Errorf("HashDir(...) = %s, want %s", out
, want
)
107 func TestDirFiles(t
*testing
.T
) {
108 dir
, err
:= ioutil
.TempDir("", "dirfiles-test-")
112 defer os
.RemoveAll(dir
)
113 if err
:= ioutil
.WriteFile(filepath
.Join(dir
, "xyz"), []byte("data for xyz"), 0666); err
!= nil {
116 if err
:= ioutil
.WriteFile(filepath
.Join(dir
, "abc"), []byte("data for abc"), 0666); err
!= nil {
119 if err
:= os
.Mkdir(filepath
.Join(dir
, "subdir"), 0777); err
!= nil {
122 if err
:= ioutil
.WriteFile(filepath
.Join(dir
, "subdir", "xyz"), []byte("data for subdir xyz"), 0666); err
!= nil {
125 prefix
:= "foo/bar@v2.3.4"
126 out
, err
:= DirFiles(dir
, prefix
)
128 t
.Fatalf("DirFiles: %v", err
)
130 for _
, file
:= range out
{
131 if !strings
.HasPrefix(file
, prefix
) {
132 t
.Errorf("Dir file = %s, want prefix %s", file
, prefix
)