package mod import ( "runtime/debug" "testing" ) func TestModuleVersion(t *testing.T) { tests := []struct { name string module string biContent string wantVersion string }{ { name: "returns empty string if build information not available", biContent: ` go go1.20.3 path github.com/docker/docker/builder/builder-next/worker mod github.com/docker/docker (devel) `, module: "github.com/moby/buildkit", wantVersion: "", }, { name: "returns the version of buildkit dependency", biContent: ` go go1.20.3 path github.com/docker/docker/builder/builder-next/worker mod github.com/docker/docker (devel) dep github.com/moby/buildkit v0.11.5 h1:JZvvWzulcnA2G4c/gJiSIqKDUoBjctYw2WMuS+XJexU= `, module: "github.com/moby/buildkit", wantVersion: "v0.11.5", }, { name: "returns the replaced version of buildkit dependency", biContent: ` go go1.20.3 path github.com/docker/docker/builder/builder-next/worker mod github.com/docker/docker (devel) dep github.com/moby/buildkit v0.11.5 h1:JZvvWzulcnA2G4c/gJiSIqKDUoBjctYw2WMuS+XJexU= => github.com/moby/buildkit v0.12.0 h1:3YO8J4RtmG7elEgaWMb4HgmpS2CfY1QlaOz9nwB+ZSs= `, module: "github.com/moby/buildkit", wantVersion: "v0.12.0", }, { name: "returns the base version of pseudo version", biContent: ` go go1.20.3 path github.com/docker/docker/builder/builder-next/worker mod github.com/docker/docker (devel) dep github.com/moby/buildkit v0.10.7-0.20230306143919-70f2ad56d3e5 h1:JZvvWzulcnA2G4c/gJiSIqKDUoBjctYw2WMuS+XJexU= `, module: "github.com/moby/buildkit", wantVersion: "v0.10.6+70f2ad56d3e5", }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { bi, err := debug.ParseBuildInfo(tt.biContent) if err != nil { t.Fatalf("failed to parse build info: %v", err) } if gotVersion := moduleVersion(tt.module, bi); gotVersion != tt.wantVersion { t.Errorf("moduleVersion() = %v, want %v", gotVersion, tt.wantVersion) } }) } }