...

Text file src/cmd/go/testdata/script/gotoolchain_local.txt

Documentation: cmd/go/testdata/script

     1# This test uses the fake toolchain switch support in cmd/go/internal/toolchain.Switch
     2# to exercise all the version selection logic without needing actual toolchains.
     3# See gotoolchain_net.txt and gotoolchain_path.txt for tests of network and PATH toolchains.
     4
     5env TESTGO_VERSION=go1.500
     6env TESTGO_VERSION_SWITCH=switch
     7
     8# GOTOOLCHAIN=auto runs default toolchain without a go.mod or go.work
     9env GOTOOLCHAIN=auto
    10go version
    11stdout go1.500
    12
    13# GOTOOLCHAIN=path runs default toolchain without a go.mod or go.work
    14env GOTOOLCHAIN=path
    15go version
    16stdout go1.500
    17
    18# GOTOOLCHAIN=asdf is a syntax error
    19env GOTOOLCHAIN=asdf
    20! go version
    21stderr '^go: invalid GOTOOLCHAIN "asdf"$'
    22
    23# GOTOOLCHAIN=version is used directly.
    24env GOTOOLCHAIN=go1.600
    25go version
    26stdout go1.600
    27
    28env GOTOOLCHAIN=go1.400
    29go version
    30stdout go1.400
    31
    32# GOTOOLCHAIN=version+auto sets a minimum.
    33env GOTOOLCHAIN=go1.600+auto
    34go version
    35stdout go1.600
    36
    37env GOTOOLCHAIN=go1.400.0+auto
    38go version
    39stdout go1.400.0
    40
    41# GOTOOLCHAIN=version+path sets a minimum too.
    42env GOTOOLCHAIN=go1.600+path
    43go version
    44stdout go1.600
    45
    46env GOTOOLCHAIN=go1.400+path
    47go version
    48stdout go1.400
    49
    50# Create a go.mod file and test interactions with auto and path.
    51
    52# GOTOOLCHAIN=auto uses go line if newer than local toolchain.
    53env GOTOOLCHAIN=auto
    54go mod init m
    55go mod edit -go=1.700 -toolchain=none
    56go version
    57stdout 1.700
    58
    59go mod edit -go=1.300 -toolchain=none
    60go version
    61stdout 1.500 # local toolchain is newer
    62
    63go mod edit -go=1.700 -toolchain=go1.300
    64go version
    65stdout go1.700 # toolchain too old, ignored
    66
    67go mod edit -go=1.300 -toolchain=default
    68go version
    69stdout go1.500
    70
    71go mod edit -go=1.700 -toolchain=default
    72go version
    73stdout go1.500 # toolchain local is like GOTOOLCHAIN=local and wins
    74! go build
    75stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; go.mod sets toolchain default\)'
    76
    77# GOTOOLCHAIN=path does the same.
    78env GOTOOLCHAIN=path
    79go mod edit -go=1.700 -toolchain=none
    80go version
    81stdout 1.700
    82
    83go mod edit -go=1.300 -toolchain=none
    84go version
    85stdout 1.500 # local toolchain is newer
    86
    87go mod edit -go=1.700 -toolchain=go1.300
    88go version
    89stdout go1.700 # toolchain too old, ignored
    90
    91go mod edit -go=1.300 -toolchain=default
    92go version
    93stdout go1.500
    94
    95go mod edit -go=1.700 -toolchain=default
    96go version
    97stdout go1.500 # toolchain default applies even if older than go line
    98! go build
    99stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; GOTOOLCHAIN=path; go.mod sets toolchain default\)'
   100
   101# GOTOOLCHAIN=min+auto with toolchain default uses min, not local
   102
   103env GOTOOLCHAIN=go1.400+auto
   104go mod edit -go=1.300 -toolchain=default
   105go version
   106stdout 1.400 # not 1.500 local toolchain
   107
   108env GOTOOLCHAIN=go1.600+auto
   109go mod edit -go=1.300 -toolchain=default
   110go version
   111stdout 1.600 # not 1.500 local toolchain
   112
   113# GOTOOLCHAIN names can have -suffix
   114env GOTOOLCHAIN=go1.800-bigcorp
   115go version
   116stdout go1.800-bigcorp
   117
   118env GOTOOLCHAIN=auto
   119go mod edit -go=1.999 -toolchain=go1.800-bigcorp
   120go version
   121stdout go1.999
   122
   123go mod edit -go=1.777 -toolchain=go1.800-bigcorp
   124go version
   125stdout go1.800-bigcorp
   126
   127# go.work takes priority over go.mod
   128go mod edit -go=1.700 -toolchain=go1.999-wrong
   129go work init
   130go work edit -go=1.400 -toolchain=go1.600-right
   131go version
   132stdout go1.600-right
   133
   134go work edit -go=1.400 -toolchain=default
   135go version
   136stdout go1.500
   137
   138# go.work misconfiguration does not break go work edit
   139# ('go 1.600 / toolchain local' forces use of 1.500 which can't normally load that go.work; allow work edit to fix it.)
   140go work edit -go=1.600 -toolchain=default
   141go version
   142stdout go1.500
   143
   144go work edit -toolchain=none
   145go version
   146stdout go1.600
   147
   148rm go.work
   149
   150# go.mod misconfiguration does not break go mod edit
   151go mod edit -go=1.600 -toolchain=default
   152go version
   153stdout go1.500
   154
   155go mod edit -toolchain=none
   156go version
   157stdout go1.600
   158
   159# toolchain built with a custom version should know how it compares to others
   160
   161env TESTGO_VERSION=go1.500-bigcorp
   162go mod edit -go=1.499 -toolchain=none
   163go version
   164stdout go1.500-bigcorp
   165
   166go mod edit -go=1.499 -toolchain=go1.499
   167go version
   168stdout go1.500-bigcorp
   169
   170go mod edit -go=1.500 -toolchain=none
   171go version
   172stdout go1.500-bigcorp
   173
   174go mod edit -go=1.500 -toolchain=go1.500
   175go version
   176stdout go1.500-bigcorp
   177
   178go mod edit -go=1.501 -toolchain=none
   179go version
   180stdout go1.501
   181
   182	# If toolchain > go, we must upgrade to the indicated toolchain (not just the go version).
   183go mod edit -go=1.499 -toolchain=go1.501
   184go version
   185stdout go1.501
   186
   187env TESTGO_VERSION='go1.500 (bigcorp)'
   188go mod edit -go=1.499 -toolchain=none
   189go version
   190stdout 'go1.500 \(bigcorp\)'
   191
   192go mod edit -go=1.500 -toolchain=none
   193go version
   194stdout 'go1.500 \(bigcorp\)'
   195
   196go mod edit -go=1.501 -toolchain=none
   197go version
   198stdout go1.501
   199
   200go mod edit -go=1.21
   201
   202# avoid two-step switch, first from install target requirement, then from GOTOOLCHAIN min
   203# instead, just jump directly to GOTOOLCHAIN min
   204env TESTGO_VERSION=go1.2.3
   205env GODEBUG=toolchaintrace=1
   206env GOTOOLCHAIN=go1.23.0+auto
   207! go install rsc.io/fortune/nonexist@v0.0.1
   208! stderr 'switching to go1.22.9'
   209stderr 'using go1.23.0'
   210env GOTOOLCHAIN=auto
   211
   212# go install m@v and go run m@v should use the go directive from m@v,
   213# or the go directive in go.mod, whichever is higher.
   214env TESTGO_VERSION=go1.2.3
   215go mod edit -go=1.1.1 -toolchain=go1.1.1
   216
   217! go install rsc.io/fortune/nonexist@v0.0.1
   218stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   219! stderr 'upgrading toolchain'
   220stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   221
   222! go run rsc.io/fortune/nonexist@v0.0.1
   223stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   224! stderr 'upgrading toolchain'
   225stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   226
   227go mod edit -go=1.23rc1 -toolchain=go1.1.1
   228
   229! go install rsc.io/fortune/nonexist@v0.0.1
   230stderr '^go: upgrading toolchain to go1.23rc1 \(required by go line in go.mod; upgrade allowed by GOTOOLCHAIN=auto\)'
   231! stderr 'switching to'
   232stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   233
   234! go run rsc.io/fortune/nonexist@v0.0.1
   235stderr '^go: upgrading toolchain to go1.23rc1 \(required by go line in go.mod; upgrade allowed by GOTOOLCHAIN=auto\)'
   236! stderr 'switching to'
   237stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   238
   239go mod edit -go=1.23rc1 -toolchain=go1.998
   240
   241! go install rsc.io/fortune/nonexist@v0.0.1
   242stderr '^go: upgrading toolchain to go1.998 \(required by toolchain line in go.mod; upgrade allowed by GOTOOLCHAIN=auto\)'
   243! stderr 'switching to'
   244stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   245
   246! go run rsc.io/fortune/nonexist@v0.0.1
   247stderr '^go: upgrading toolchain to go1.998 \(required by toolchain line in go.mod; upgrade allowed by GOTOOLCHAIN=auto\)'
   248! stderr 'switching to'
   249stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   250
   251go mod edit -go=1.1.1 -toolchain=go1.1.1
   252
   253# go install should handle unknown flags to find m@v
   254! go install -unknownflag rsc.io/fortune/nonexist@v0.0.1
   255stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   256stderr '^flag provided but not defined: -unknownflag'
   257
   258! go install -unknownflag arg rsc.io/fortune/nonexist@v0.0.1
   259stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   260stderr '^flag provided but not defined: -unknownflag'
   261
   262env GODEBUG=
   263
   264# go run cannot handle unknown boolean flags
   265! go run -unknownflag rsc.io/fortune/nonexist@v0.0.1
   266! stderr switching
   267stderr '^flag provided but not defined: -unknownflag'
   268
   269! go run -unknownflag oops rsc.io/fortune/nonexist@v0.0.1
   270! stderr switching
   271stderr '^flag provided but not defined: -unknownflag'
   272
   273# go run can handle unknown flag with argument.
   274! go run -unknown=flag rsc.io/fortune/nonexist@v0.0.1
   275stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   276stderr '^flag provided but not defined: -unknown'
   277
   278# go install m@v should handle queries
   279! go install rsc.io/fortune/nonexist@v0.0
   280stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   281stderr '^go: rsc.io/fortune/nonexist@v0.0: module rsc.io/fortune@v0.0 found \(v0.0.1\), but does not contain package rsc.io/fortune/nonexist'
   282
   283# go run m@v should handle queries
   284! go install rsc.io/fortune/nonexist@v0
   285stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   286stderr '^go: rsc.io/fortune/nonexist@v0: module rsc.io/fortune@v0 found \(v0.0.1\), but does not contain package rsc.io/fortune/nonexist'
   287
   288# go install m@v should use local toolchain if not upgrading
   289! go install rsc.io/fortune/nonexist@v1
   290! stderr go1.22.9
   291! stderr switching
   292stderr '^go: downloading rsc.io/fortune v1.0.0$'
   293stderr '^go: rsc.io/fortune/nonexist@v1: module rsc.io/fortune@v1 found \(v1.0.0\), but does not contain package rsc.io/fortune/nonexist'
   294
   295# go run m@v should use local toolchain if not upgrading
   296! go run rsc.io/fortune/nonexist@v1
   297! stderr go1.22.9
   298! stderr switching
   299stderr '^go: rsc.io/fortune/nonexist@v1: module rsc.io/fortune@v1 found \(v1.0.0\), but does not contain package rsc.io/fortune/nonexist'

View as plain text