github.com/april1989/origin-go-tools@v0.0.32/internal/proxydir/proxydir_test.go (about) 1 // Copyright 2020 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 proxydir 6 7 import ( 8 "archive/zip" 9 "fmt" 10 "io/ioutil" 11 "os" 12 "path/filepath" 13 "strings" 14 "testing" 15 ) 16 17 func TestWriteModuleVersion(t *testing.T) { 18 tests := []struct { 19 modulePath, version string 20 files map[string][]byte 21 }{ 22 { 23 modulePath: "mod.test/module", 24 version: "v1.2.3", 25 files: map[string][]byte{ 26 "go.mod": []byte("module mod.com\n\ngo 1.12"), 27 "const.go": []byte("package module\n\nconst Answer = 42"), 28 }, 29 }, 30 { 31 modulePath: "mod.test/module", 32 version: "v1.2.4", 33 files: map[string][]byte{ 34 "go.mod": []byte("module mod.com\n\ngo 1.12"), 35 "const.go": []byte("package module\n\nconst Answer = 43"), 36 }, 37 }, 38 { 39 modulePath: "mod.test/nogomod", 40 version: "v0.9.0", 41 files: map[string][]byte{ 42 "const.go": []byte("package module\n\nconst Other = \"Other\""), 43 }, 44 }, 45 } 46 dir, err := ioutil.TempDir("", "proxydirtest-") 47 if err != nil { 48 t.Fatal(err) 49 } 50 defer os.RemoveAll(dir) 51 for _, test := range tests { 52 // Since we later assert on the contents of /list, don't use subtests. 53 if err := WriteModuleVersion(dir, test.modulePath, test.version, test.files); err != nil { 54 t.Fatal(err) 55 } 56 rootDir := filepath.Join(dir, filepath.FromSlash(test.modulePath), "@v") 57 gomod, err := ioutil.ReadFile(filepath.Join(rootDir, test.version+".mod")) 58 if err != nil { 59 t.Fatal(err) 60 } 61 wantMod, ok := test.files["go.mod"] 62 if !ok { 63 wantMod = []byte("module " + test.modulePath) 64 } 65 if got, want := string(gomod), string(wantMod); got != want { 66 t.Errorf("reading %s/@v/%s.mod: got %q, want %q", test.modulePath, test.version, got, want) 67 } 68 zr, err := zip.OpenReader(filepath.Join(rootDir, test.version+".zip")) 69 if err != nil { 70 t.Fatal(err) 71 } 72 defer zr.Close() 73 74 for _, zf := range zr.File { 75 r, err := zf.Open() 76 if err != nil { 77 t.Fatal(err) 78 } 79 defer r.Close() 80 content, err := ioutil.ReadAll(r) 81 if err != nil { 82 t.Fatal(err) 83 } 84 name := strings.TrimPrefix(zf.Name, fmt.Sprintf("%s@%s/", test.modulePath, test.version)) 85 if got, want := string(content), string(test.files[name]); got != want { 86 t.Errorf("unzipping %q: got %q, want %q", zf.Name, got, want) 87 } 88 delete(test.files, name) 89 } 90 for name := range test.files { 91 t.Errorf("file %q not present in the module zip", name) 92 } 93 } 94 95 lists := []struct { 96 modulePath, want string 97 }{ 98 {"mod.test/module", "v1.2.3\nv1.2.4\n"}, 99 {"mod.test/nogomod", "v0.9.0\n"}, 100 } 101 102 for _, test := range lists { 103 fp := filepath.Join(dir, filepath.FromSlash(test.modulePath), "@v", "list") 104 list, err := ioutil.ReadFile(fp) 105 if err != nil { 106 t.Fatal(err) 107 } 108 if got := string(list); got != test.want { 109 t.Errorf("%q/@v/list: got %q, want %q", test.modulePath, got, test.want) 110 } 111 } 112 }