github.com/zxy12/go_duplicate_112_new@v0.0.0-20200807091221-747231827200/src/cmd/go/internal/modload/query_test.go (about) 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 modload 6 7 import ( 8 "internal/testenv" 9 "io/ioutil" 10 "log" 11 "os" 12 "path" 13 "path/filepath" 14 "strings" 15 "testing" 16 17 "cmd/go/internal/modfetch" 18 "cmd/go/internal/modfetch/codehost" 19 "cmd/go/internal/module" 20 ) 21 22 func TestMain(m *testing.M) { 23 os.Exit(testMain(m)) 24 } 25 26 func testMain(m *testing.M) int { 27 dir, err := ioutil.TempDir("", "modload-test-") 28 if err != nil { 29 log.Fatal(err) 30 } 31 defer os.RemoveAll(dir) 32 modfetch.PkgMod = filepath.Join(dir, "pkg/mod") 33 codehost.WorkRoot = filepath.Join(dir, "codework") 34 return m.Run() 35 } 36 37 var ( 38 queryRepo = "vcs-test.golang.org/git/querytest.git" 39 queryRepoV2 = queryRepo + "/v2" 40 queryRepoV3 = queryRepo + "/v3" 41 42 // Empty version list (no semver tags), not actually empty. 43 emptyRepo = "vcs-test.golang.org/git/emptytest.git" 44 ) 45 46 var queryTests = []struct { 47 path string 48 query string 49 allow string 50 vers string 51 err string 52 }{ 53 /* 54 git init 55 echo module vcs-test.golang.org/git/querytest.git >go.mod 56 git add go.mod 57 git commit -m v1 go.mod 58 git tag start 59 for i in v0.0.0-pre1 v0.0.0 v0.0.1 v0.0.2 v0.0.3 v0.1.0 v0.1.1 v0.1.2 v0.3.0 v1.0.0 v1.1.0 v1.9.0 v1.9.9 v1.9.10-pre1; do 60 echo before $i >status 61 git add status 62 git commit -m "before $i" status 63 echo at $i >status 64 git commit -m "at $i" status 65 git tag $i 66 done 67 git tag favorite v0.0.3 68 69 git branch v2 start 70 git checkout v2 71 echo module vcs-test.golang.org/git/querytest.git/v2 >go.mod 72 git commit -m v2 go.mod 73 for i in v2.0.0 v2.1.0 v2.2.0 v2.5.5; do 74 echo before $i >status 75 git add status 76 git commit -m "before $i" status 77 echo at $i >status 78 git commit -m "at $i" status 79 git tag $i 80 done 81 echo after v2.5.5 >status 82 git commit -m 'after v2.5.5' status 83 git checkout master 84 zip -r ../querytest.zip 85 gsutil cp ../querytest.zip gs://vcs-test/git/querytest.zip 86 curl 'https://vcs-test.golang.org/git/querytest?go-get=1' 87 */ 88 {path: queryRepo, query: "<v0.0.0", vers: "v0.0.0-pre1"}, 89 {path: queryRepo, query: "<v0.0.0-pre1", err: `no matching versions for query "<v0.0.0-pre1"`}, 90 {path: queryRepo, query: "<=v0.0.0", vers: "v0.0.0"}, 91 {path: queryRepo, query: ">v0.0.0", vers: "v0.0.1"}, 92 {path: queryRepo, query: ">=v0.0.0", vers: "v0.0.0"}, 93 {path: queryRepo, query: "v0.0.1", vers: "v0.0.1"}, 94 {path: queryRepo, query: "v0.0.1+foo", vers: "v0.0.1"}, 95 {path: queryRepo, query: "v0.0.99", err: `unknown revision v0.0.99`}, 96 {path: queryRepo, query: "v0", vers: "v0.3.0"}, 97 {path: queryRepo, query: "v0.1", vers: "v0.1.2"}, 98 {path: queryRepo, query: "v0.2", err: `no matching versions for query "v0.2"`}, 99 {path: queryRepo, query: "v0.0", vers: "v0.0.3"}, 100 {path: queryRepo, query: "latest", vers: "v1.9.9"}, 101 {path: queryRepo, query: "latest", allow: "NOMATCH", err: `no matching versions for query "latest"`}, 102 {path: queryRepo, query: ">v1.9.9", vers: "v1.9.10-pre1"}, 103 {path: queryRepo, query: ">v1.10.0", err: `no matching versions for query ">v1.10.0"`}, 104 {path: queryRepo, query: ">=v1.10.0", err: `no matching versions for query ">=v1.10.0"`}, 105 {path: queryRepo, query: "6cf84eb", vers: "v0.0.2-0.20180704023347-6cf84ebaea54"}, 106 {path: queryRepo, query: "start", vers: "v0.0.0-20180704023101-5e9e31667ddf"}, 107 {path: queryRepo, query: "7a1b6bf", vers: "v0.1.0"}, 108 109 {path: queryRepoV2, query: "<v0.0.0", err: `no matching versions for query "<v0.0.0"`}, 110 {path: queryRepoV2, query: "<=v0.0.0", err: `no matching versions for query "<=v0.0.0"`}, 111 {path: queryRepoV2, query: ">v0.0.0", vers: "v2.0.0"}, 112 {path: queryRepoV2, query: ">=v0.0.0", vers: "v2.0.0"}, 113 {path: queryRepoV2, query: "v0.0.1+foo", vers: "v2.0.0-20180704023347-179bc86b1be3"}, 114 {path: queryRepoV2, query: "latest", vers: "v2.5.5"}, 115 116 {path: queryRepoV3, query: "latest", vers: "v3.0.0-20180704024501-e0cf3de987e6"}, 117 118 {path: emptyRepo, query: "latest", vers: "v0.0.0-20180704023549-7bb914627242"}, 119 {path: emptyRepo, query: ">v0.0.0", err: `no matching versions for query ">v0.0.0"`}, 120 {path: emptyRepo, query: "<v10.0.0", err: `no matching versions for query "<v10.0.0"`}, 121 } 122 123 func TestQuery(t *testing.T) { 124 testenv.MustHaveExternalNetwork(t) 125 126 for _, tt := range queryTests { 127 allow := tt.allow 128 if allow == "" { 129 allow = "*" 130 } 131 allowed := func(m module.Version) bool { 132 ok, _ := path.Match(allow, m.Version) 133 return ok 134 } 135 t.Run(strings.ReplaceAll(tt.path, "/", "_")+"/"+tt.query+"/"+allow, func(t *testing.T) { 136 info, err := Query(tt.path, tt.query, allowed) 137 if tt.err != "" { 138 if err != nil && err.Error() == tt.err { 139 return 140 } 141 t.Fatalf("Query(%q, %q, %v): %v, want error %q", tt.path, tt.query, allow, err, tt.err) 142 } 143 if err != nil { 144 t.Fatalf("Query(%q, %q, %v): %v", tt.path, tt.query, allow, err) 145 } 146 if info.Version != tt.vers { 147 t.Errorf("Query(%q, %q, %v) = %v, want %v", tt.path, tt.query, allow, info.Version, tt.vers) 148 } 149 }) 150 } 151 }