...

Source file src/github.com/rogpeppe/go-internal/dirhash/hash_test.go

Documentation: github.com/rogpeppe/go-internal/dirhash

     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.
     4  
     5  package dirhash
     6  
     7  import (
     8  	"archive/zip"
     9  	"crypto/sha256"
    10  	"encoding/base64"
    11  	"fmt"
    12  	"io"
    13  	"io/ioutil"
    14  	"os"
    15  	"path/filepath"
    16  	"strings"
    17  	"testing"
    18  )
    19  
    20  func h(s string) string {
    21  	return fmt.Sprintf("%x", sha256.Sum256([]byte(s)))
    22  }
    23  
    24  func htop(k string, s string) string {
    25  	sum := sha256.Sum256([]byte(s))
    26  	return k + ":" + base64.StdEncoding.EncodeToString(sum[:])
    27  }
    28  
    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
    33  	}
    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)
    36  	if err != nil {
    37  		t.Fatal(err)
    38  	}
    39  	if out != want {
    40  		t.Errorf("Hash1(...) = %s, want %s", out, want)
    41  	}
    42  
    43  	_, err = Hash1([]string{"xyz", "a\nbc"}, open)
    44  	if err == nil {
    45  		t.Error("Hash1: expected error on newline in filenames")
    46  	}
    47  }
    48  
    49  func TestHashDir(t *testing.T) {
    50  	dir, err := ioutil.TempDir("", "dirhash-test-")
    51  	if err != nil {
    52  		t.Fatal(err)
    53  	}
    54  	defer os.RemoveAll(dir)
    55  	if err := ioutil.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0o666); err != nil {
    56  		t.Fatal(err)
    57  	}
    58  	if err := ioutil.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0o666); err != nil {
    59  		t.Fatal(err)
    60  	}
    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)
    63  	if err != nil {
    64  		t.Fatalf("HashDir: %v", err)
    65  	}
    66  	if out != want {
    67  		t.Errorf("HashDir(...) = %s, want %s", out, want)
    68  	}
    69  }
    70  
    71  func TestHashZip(t *testing.T) {
    72  	f, err := ioutil.TempFile("", "dirhash-test-")
    73  	if err != nil {
    74  		t.Fatal(err)
    75  	}
    76  	defer os.Remove(f.Name())
    77  	defer f.Close()
    78  
    79  	z := zip.NewWriter(f)
    80  	w, err := z.Create("prefix/xyz")
    81  	if err != nil {
    82  		t.Fatal(err)
    83  	}
    84  	w.Write([]byte("data for xyz"))
    85  	w, err = z.Create("prefix/abc")
    86  	if err != nil {
    87  		t.Fatal(err)
    88  	}
    89  	w.Write([]byte("data for abc"))
    90  	if err := z.Close(); err != nil {
    91  		t.Fatal(err)
    92  	}
    93  	if err := f.Close(); err != nil {
    94  		t.Fatal(err)
    95  	}
    96  
    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)
    99  	if err != nil {
   100  		t.Fatalf("HashDir: %v", err)
   101  	}
   102  	if out != want {
   103  		t.Errorf("HashDir(...) = %s, want %s", out, want)
   104  	}
   105  }
   106  
   107  func TestDirFiles(t *testing.T) {
   108  	dir, err := ioutil.TempDir("", "dirfiles-test-")
   109  	if err != nil {
   110  		t.Fatal(err)
   111  	}
   112  	defer os.RemoveAll(dir)
   113  	if err := ioutil.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0o666); err != nil {
   114  		t.Fatal(err)
   115  	}
   116  	if err := ioutil.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0o666); err != nil {
   117  		t.Fatal(err)
   118  	}
   119  	if err := os.Mkdir(filepath.Join(dir, "subdir"), 0o777); err != nil {
   120  		t.Fatal(err)
   121  	}
   122  	if err := ioutil.WriteFile(filepath.Join(dir, "subdir", "xyz"), []byte("data for subdir xyz"), 0o666); err != nil {
   123  		t.Fatal(err)
   124  	}
   125  	prefix := "foo/bar@v2.3.4"
   126  	out, err := DirFiles(dir, prefix)
   127  	if err != nil {
   128  		t.Fatalf("DirFiles: %v", err)
   129  	}
   130  	for _, file := range out {
   131  		if !strings.HasPrefix(file, prefix) {
   132  			t.Errorf("Dir file = %s, want prefix %s", file, prefix)
   133  		}
   134  	}
   135  }
   136  

View as plain text