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  }