LoginSignup
0
0

Go 1.21.0からruntime/coverage.WriteCountersDirで-covermode=atomicエラー

Posted at

GoのバージョンをGo 1.21.0に上げた所、
scenarigoを利用して起動しているE2Eテストにて、
カバレッジを出力するAPIにて、下記エラーが出るようになった。

func (h *Handler) Record(gc *gin.Context) {
	err := coverage.WriteCountersDir("./_coverage")
	if err != nil {
		panic(err)
	}
}
2023/12/18 18:36:24 http: panic serving 127.0.0.1:52164: WriteCountersDir invoked for program built with -covermode=set (please use -covermode=atomic)
goroutine 3046 [running]:
net/http.(*conn).serve.func1()

原因

Go 1.21.0から、atomic mode必須に変更されている。

Go 1.20

func WriteCountersDir(dir string) error {
	return emitCounterDataToDirectory(dir)
}

Go 1.21.0

func WriteCountersDir(dir string) error {
	if cmode != coverage.CtrModeAtomic {
		return fmt.Errorf("WriteCountersDir invoked for program built with -covermode=%s (please use -covermode=atomic)", cmode.String())
	}
	return emitCounterDataToDirectory(dir)
}

issues

commit

対策

E2Eがscenarigoを利用し、外部からAPIを叩く方式になっているため、
go testを利用しておらず、-covermode=atomicを設定できないと思われたが、
実は、go runやgo buildにも上記モードが設定できた。

そのため、

scenarigoの対象としているE2E用インスタンスでのアプリ起動時に、下記のようにオプションを付ければ解決できた。

Makefile
go run -cover -covermode atomic app.go

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0