Running "go test" modifies go.mod & go.sum

183 views
Skip to first unread message

Miki Tebeka

unread,
Nov 1, 2020, 1:06:29 AM11/1/20
to golang-nuts
Hi,

I wrote a regexp linter (https://github.com/tebeka/recheck) that's using golang.org/x/tools/go/analysis.

To test the tool, I run  "go run ./cmd/recheck testdata/ok.go" (using os/exec). The problem is that after the test, go.mod & go.sum are modified since there are some external imports in the go files under testdata.

I've tried using -mod=readonly, building & then running, moving the test file to /tmp - all of them didn't work, the mod files are still changed after the test.

Any idea how can I prevent the test from modifing the mod files?

Thanks,
Miki

Amit Saha

unread,
Nov 1, 2020, 1:43:33 AM11/1/20
to Miki Tebeka, golang-nuts
Your example above suggests you are not using go test to execute your tests? 


Thanks,
Miki

--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/701453b4-eaa7-4a92-a8a1-520ae6d66fcfn%40googlegroups.com.

Miki Tebeka

unread,
Nov 1, 2020, 3:09:52 AM11/1/20
to golang-nuts

Dan Kortschak

unread,
Nov 1, 2020, 3:23:07 AM11/1/20
to Miki Tebeka, golang-nuts
You're using go test, with -mod=readonly, but it's running your code
with go run, without -mod=readonly.

Either you'll need to unconditionally pass -mod=readonly to go run in
the regression_test.go file, or find wether it's been passed to go test
and then conditionally pass it to go run.

Amit Saha

unread,
Nov 1, 2020, 5:47:28 AM11/1/20
to Miki Tebeka, golang-nuts

On 1 Nov 2020, at 7:22 pm, 'Dan Kortschak' via golang-nuts <golan...@googlegroups.com> wrote:

You're using go test, with -mod=readonly, but it's running your code
with go run, without -mod=readonly.

Either you'll need to unconditionally pass -mod=readonly to go run in
the regression_test.go file, or find wether it's been passed to go test
and then conditionally pass it to go run.


On Sun, 2020-11-01 at 01:09 -0700, Miki Tebeka wrote:
I *do* use "go test", see 
https://github.com/tebeka/recheck/blob/master/regression_test.go

I am not sure I don’t see go test in there. But I think Dan already gave you a hint.



On Sunday, November 1, 2020 at 8:43:33 AM UTC+2 amits...@gmail.com
wrote:

On Sun, 1 Nov 2020, 4:07 pm Miki Tebeka, <miki....@gmail.com>
wrote:
Hi,

I wrote a regexp linter (https://github.com/tebeka/recheck)
that's using golang.org/x/tools/go/analysis.

To test the tool, I run  "go run ./cmd/recheck testdata/ok.go"
(using os/exec). The problem is that after the test, go.mod &
go.sum are modified since there are some external imports in the
go files under testdata.

I've tried using -mod=readonly, building & then running, moving
the test file to /tmp - all of them didn't work, the mod files
are still changed after the test.

Any idea how can I prevent the test from modifing the mod files?

Your example above suggests you are not using go test to execute
your tests? 

Thanks,
Miki


-- 
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.

Miki Tebeka

unread,
Nov 1, 2020, 7:52:34 AM11/1/20
to golang-nuts
I try to change the "go run" command to use "-mod=readonly", didn't help.

ma...@eliasnaur.com

unread,
Nov 1, 2020, 12:26:17 PM11/1/20
to golang-nuts
On Sunday, 1 November 2020 at 13:52:34 UTC+1 miki....@gmail.com wrote:
I try to change the "go run" command to use "-mod=readonly", didn't help.
 
Drive-by comment in case you weren't aware: Go 1.16 is switching to -mod=readonly
by default. The proposal and links to the implementation are in

Hope it helps,
Elias
 

seank...@gmail.com

unread,
Nov 1, 2020, 4:32:46 PM11/1/20
to golang-nuts
you're using the analysis packages which have dependencies on calling the go cmd internally
you could try passing readonly via GOFLAGS

the fact that your go.mod/go.sum changed means you should reevaluate what you're doing,
specifically you have an unversioned/untracked dependency on gorilla/mux via your testdata

as an aside, go1.16 readonly by default works (tested with tip)

Dan Kortschak

unread,
Nov 1, 2020, 4:42:43 PM11/1/20
to Miki Tebeka, golang-nuts
Ah, it just clicked.

You're indirectly using go/packages, which will (unless configured not
to), cause changes to the go.mod and go.sum file. This configuration
happens for this by adding "-mod=readonly" to
packages.Config.BuildFlags (I think). But this isn't exposed via the
go/analysis API (the config is populated here[1] where the user can't
access it).

This can be confirmed by seeing that building your checker, resetting
the changes to go.mod and go.sum and then manually running the binary
on your test cases.

I'm not sure what to do about this.

[1]
https://github.com/golang/tools/blob/582c62ec74d06936c88d4b760c63cbc2925e69c7/go/analysis/internal/checker/checker.go#L152-L155
> --
> You received this message because you are subscribed to the Google
> Groups "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it,
> send an email to golang-nuts...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/354542dc-0648-4383-98af-63ff4f7dabcfn%40googlegroups.com
> .


Miki Tebeka

unread,
Nov 2, 2020, 3:02:35 AM11/2/20
to golang-nuts
Thanks. I ended up simplifying the test and remove the dependency on external packages.
Reply all
Reply to author
Forward
0 new messages