Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Intermittent panic when go test with -coverpkg #288

Closed
wwn0594 opened this issue Aug 12, 2022 · 7 comments
Closed

Intermittent panic when go test with -coverpkg #288

wwn0594 opened this issue Aug 12, 2022 · 7 comments

Comments

@wwn0594
Copy link

wwn0594 commented Aug 12, 2022

Miniredis intermittent panic when I run go test with -coverpkg

- GOOS=linux GOARCH=amd64 go test ./... -coverprofile=./cover.out -coverpkg=./...

{"level":"info","time":"2022-08-12T11:05:26Z","message":"No redis set on env, start mini redis."}

panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x956e9c]



goroutine 1 [running]:

github.com/alicebob/miniredis/v2/server.(*Server).Addr(0x0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/server/server.go:122 +0x3c

github.com/alicebob/miniredis/v2.(*Miniredis).Addr(0xc0005142a0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/miniredis.go:290 +0x85

github.tools.sap/aeolia/bff/proxy/model.GetRedisCfg()

	/workspace/proxy/model/redis.go:76 +0xb4

github.tools.sap/aeolia/bff/proxy/model.SetupDefaultRedis()

	/workspace/proxy/model/redis.go:47 +0x50

github.tools.sap/aeolia/bff/proxy/model.init.0()

	/workspace/proxy/model/redis.go:15 +0x25

FAIL	github.tools.sap/aeolia/bff/proxy/btp_auditlog	0.024s

?   	github.tools.sap/aeolia/bff/proxy/cmd	[no test files]

{"level":"info","time":"2022-08-12T11:05:26Z","message":"No redis set on env, start mini redis."}

panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x9622fc]



goroutine 1 [running]:

github.com/alicebob/miniredis/v2/server.(*Server).Addr(0x0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/server/server.go:122 +0x3c

github.com/alicebob/miniredis/v2.(*Miniredis).Addr(0xc0001988a0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/miniredis.go:290 +0x85

github.tools.sap/aeolia/bff/proxy/model.GetRedisCfg()

	/workspace/proxy/model/redis.go:76 +0xb4

github.tools.sap/aeolia/bff/proxy/model.SetupDefaultRedis()

	/workspace/proxy/model/redis.go:47 +0x50

github.tools.sap/aeolia/bff/proxy/model.init.0()

	/workspace/proxy/model/redis.go:15 +0x25

FAIL	github.tools.sap/aeolia/bff/proxy/consts	0.028s

{"level":"info","time":"2022-08-12T11:05:26Z","message":"No redis set on env, start mini redis."}

panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x9f1efc]



goroutine 1 [running]:

github.com/alicebob/miniredis/v2/server.(*Server).Addr(0x0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/server/server.go:122 +0x3c

github.com/alicebob/miniredis/v2.(*Miniredis).Addr(0xc0000ac3c0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/miniredis.go:290 +0x85

github.tools.sap/aeolia/bff/proxy/model.GetRedisCfg()

	/workspace/proxy/model/redis.go:76 +0xb4

github.tools.sap/aeolia/bff/proxy/model.SetupDefaultRedis()

	/workspace/proxy/model/redis.go:47 +0x50

github.tools.sap/aeolia/bff/proxy/model.init.0()

	/workspace/proxy/model/redis.go:15 +0x25

FAIL	github.tools.sap/aeolia/bff/proxy/errors	0.025s

ok  	github.tools.sap/aeolia/bff/proxy/infra	0.270s	coverage: 5.2% of statements in ./...

{"level":"info","time":"2022-08-12T11:05:26Z","message":"No redis set on env, start mini redis."}

panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x91ebdc]



goroutine 1 [running]:

github.com/alicebob/miniredis/v2/server.(*Server).Addr(0x0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/server/server.go:122 +0x3c

github.com/alicebob/miniredis/v2.(*Miniredis).Addr(0xc0000ac060?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/miniredis.go:290 +0x85

github.tools.sap/aeolia/bff/proxy/model.GetRedisCfg()

	/workspace/proxy/model/redis.go:76 +0xb4

github.tools.sap/aeolia/bff/proxy/model.SetupDefaultRedis()

	/workspace/proxy/model/redis.go:47 +0x50

github.tools.sap/aeolia/bff/proxy/model.init.0()

	/workspace/proxy/model/redis.go:15 +0x25

FAIL	github.tools.sap/aeolia/bff/proxy/logger	0.030s

ok  	github.tools.sap/aeolia/bff/proxy/middlewares	0.052s	coverage: 18.4% of statements in ./...

ok  	github.tools.sap/aeolia/bff/proxy/model	0.051s	coverage: 4.6% of statements in ./...

{"level":"info","time":"2022-08-12T11:05:26Z","message":"No redis set on env, start mini redis."}

panic: runtime error: invalid memory address or nil pointer dereference

[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x1289b9c]



goroutine 1 [running]:

github.com/alicebob/miniredis/v2/server.(*Server).Addr(0x0?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/server/server.go:122 +0x3c

github.com/alicebob/miniredis/v2.(*Miniredis).Addr(0xc0001bd260?)

	/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/miniredis.go:290 +0x85

github.tools.sap/aeolia/bff/proxy/model.GetRedisCfg()

	/workspace/proxy/model/redis.go:76 +0xb4

github.tools.sap/aeolia/bff/proxy/model.SetupDefaultRedis()

	/workspace/proxy/model/redis.go:47 +0x50

github.tools.sap/aeolia/bff/proxy/model.init.0()

	/workspace/proxy/model/redis.go:15 +0x25

FAIL	github.tools.sap/aeolia/bff/proxy/routers	0.028s

ok  	github.tools.sap/aeolia/bff/proxy/services	0.030s	coverage: 3.0% of statements in ./...

ok  	github.tools.sap/aeolia/bff/proxy/utils	0.048s	coverage: 8.7% of statements in ./...

FAIL
@alicebob
Copy link
Owner

alicebob commented Aug 12, 2022 via email

@alicebob
Copy link
Owner

/go/pkg/mod/github.com/alicebob/miniredis/v2@v2.23.0/server/server.go:122 +0x3c

That's https://github.com/alicebob/miniredis/blob/master/server/server.go#L122

s.mu.Lock()

I don't get the error locally, and looking at the code, might it be that you start a redis server in a Go routine, and it's not ready starting yet when you use it? Would it otherwise be possible to make a standalone test case?

@wwn0594
Copy link
Author

wwn0594 commented Aug 15, 2022

@alicebob Thanks for investigation! I didn't start redis on go routine, instead I put it on a init() func, and start on a fixed port.

		if addr != "" {
			return addr, "", 0, tls, nil
		}
		log.Info().Msg("No redis set on env, start mini redis.")

		mr := miniredis.NewMiniRedis()
		mr.StartAddr(":15678")

		addr = mr.Addr()
		return addr, "", 0, tls, nil

That's very strange, I met the panic only if set -coverpkg=./... on go test

@alicebob
Copy link
Owner

alicebob commented Aug 15, 2022 via email

@alicebob
Copy link
Owner

Since you give a fixed port there can't be multiple (mini)redises running at the same time, but go test runs separate packages in parallel by default. Try running go test with: go test -p=1 etc, so it'll only run a single test at the same time.

@wwn0594
Copy link
Author

wwn0594 commented Aug 15, 2022

@alicebob aha, got the errMsg

panic: listen tcp :15678: bind: address already in use

It seems -coverpkg=./... makes the tests run concurrence between different package.

@wwn0594
Copy link
Author

wwn0594 commented Aug 15, 2022

Since you give a fixed port there can't be multiple (mini)redises running at the same time, but go test runs separate packages in parallel by default. Try running go test with: go test -p=1 etc, so it'll only run a single test at the same time.

It works! Thanks a lot

@wwn0594 wwn0594 closed this as completed Aug 15, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants