Hi Brian,

thanks for checking out, yes that I wanted also to write you.
We need it currently in our CI as some dependency scanner tool does not 
work with the "go X.Y.Z." syntax, but I tried, and for my problem it did 
not was the cause.


> If a test fails, I would expect it to terminate with an error (exit code 
1 in this case).

See my second mail, the test case should not fail, it was kinda a typo 
(tried to shorten the reproducer to much in my first mail).

> If I run your reproducer locally (not in Docker) with the modified 
TestHelloer, it works fine(*) and gives me an exit code of 0

Yes, when I run it with golang 1.21.7 it works fine as well, as my problem 
statement is about golang 1.22.0.

> Therefore, if your problem only occurs when using Docker, then you should 
provide a docker-based reproducer (including the Dockerfile)

Happens locally as well. And in my original setup it was using a fresh 
docker container from golang (in an CI/GitLab pipeline) and did this:

$ go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... 
-covermode count || echo "flaky:$?"
example.com/m: open 
/tmp/go-build2233205084/b002/covmeta.f6e4431d5ec1fd71f02b3ce4e56eb691a86525173d917007425576a7d9db7c72:
 
no such file or directory
=== RUN   TestHelloer
--- PASS: TestHelloer (0.00s)
PASS
coverage: 100.0% of statements in ./internal/...
ok   example.com/m/internal 0.004s coverage: 100.0% of statements in 
./internal/...
flaky:1
$ go tool cover -html=coverage.out -o coverage.html
$ go tool cover -func=coverage.out
example.com/m/internal/helloer.go:3: Helloer 100.0%
total: (statements) 100.0%


But I just tried it locally (Windows) and there it happens as well:

C:\dev\git\golang-test-cover>go test -v ./... -coverprofile=coverage.out 
-coverpkg=./internal/... -covermode count
example.com/m: open 
C:\Users\A1524415\AppData\Local\Temp\go-build2423189316\b002\covmeta.f6e4431d5ec1fd71f02b3ce4e56eb691a86525173d917007425576a7d9db7c72:
 
The system cannot find the file specified.
=== RUN   TestHelloer
--- PASS: TestHelloer (0.00s)
PASS
coverage: 100.0% of statements in ./internal/...
ok      example.com/m/internal  15.260s coverage: 100.0% of statements in 
./internal/...


So for now I checked it on:
- windows
- debian (via docker container)
- alpine (via docker container)

All with 1.22.0.

>  since you say that the coverage file is created, and presumably you 
would have noticed the "toolchain not available" error message. In any 
case, you're using a base image with go 1.22.0.

Exactly.
As seen in the output above, further commands (go tool cover) using the 
coverage.out work fine.

On Thursday 8 February 2024 at 10:46:44 UTC+1 Brian Candler wrote:

> I found the solution to the "toolchain not available" problem: put "go 
> 1.22.0" instead of "go 1.22" in go.mod. Clues picked up from #62278 
> <https://github.com/golang/go/issues/62278>.
>
> It's confusing for people who've been using go for a while though, when 
> go.mod used to contain "go X.Y" and it was invalid to put "go X.Y.Z". Now 
> that appears to have swapped around 
> <https://github.com/golang/go/issues/62278#issuecomment-1698829945>.
>
> On Thursday 8 February 2024 at 08:30:25 UTC Brian Candler wrote:
>
>> Is it a bug or exepected behaviour?
>>
>>
>> If a test fails, I would expect it to terminate with an error (exit code 
>> 1 in this case).
>>
>> If I run your reproducer locally (not in Docker) with the modified 
>> TestHelloer, it works fine(*) and gives me an exit code of 0:
>>
>> % go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... 
>> -covermode count
>> ?   example.com/m [no test files]
>> === RUN   TestHelloer
>> --- PASS: TestHelloer (0.00s)
>> PASS
>>
>> coverage: 100.0% of statements in ./internal/...
>> ok   example.com/m/internal 0.135s coverage: 100.0% of statements in 
>> ./internal/...
>> % echo $?
>> 0
>>
>> Therefore, if your problem only occurs when using Docker, then you should 
>> provide a docker-based reproducer (including the Dockerfile)
>>
>> (*) However, I had to change the go.mod file to say version 1.21.  If it 
>> says 1.22, I get an error.
>>
>> Under Linux (go1.21.7):
>>
>> $ go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... 
>> -covermode count
>> go: downloading go1.22 (linux/amd64)
>> go: download go1.22 for linux/amd64: toolchain not available
>>
>> Under macOS (go1.21.6):
>>
>> % go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... 
>> -covermode count
>> go: downloading go1.22 (darwin/arm64)
>> go: download go1.22 for darwin/arm64: toolchain not available
>>
>> I don't *think* this is the same problem as you're seeing, since you say 
>> that the coverage file is created, and presumably you would have noticed 
>> the "toolchain not available" error message. In any case, you're using a 
>> base image with go 1.22.0.
>>
>

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/3bced0cd-74fa-461c-9dc9-f6d9411154ecn%40googlegroups.com.

Reply via email to