Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ci/magician/cmd/test_eap_vcr.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ func execTestEAPVCR(changeNumber, genPath, kokoroArtifactsDir string, rnr ExecRu
if err := vt.FetchCassettes(provider.Private, "main", head); err != nil {
return fmt.Errorf("error fetching cassettes: %w", err)
}
replayingResult, testDirs, replayingErr := runReplaying(runFullVCR, provider.Private, services, vt, false, "")
replayingResult, testDirs, replayingErr := runReplaying(runFullVCR, provider.Private, services, vt)
if err := vt.UploadLogs(vcr.UploadLogsOptions{
Head: head,
Mode: vcr.Replaying,
Expand Down
115 changes: 13 additions & 102 deletions .ci/magician/cmd/test_terraform_vcr.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (

"github.com/spf13/cobra"

"magician/cov"
"magician/exec"
"magician/github"
"magician/provider"
Expand Down Expand Up @@ -83,19 +82,6 @@ type recordReplay struct {
BrowseLogBaseUrl string
}

const (
covGCSPrefix = "gs://test-coverage-data"
)

type runCovOpts struct {
repo *source.Repo
buildID string
commitSha string
covGCSPrefix string
testDirs []string
prNumber string
}

var testTerraformVCRCmd = &cobra.Command{
Use: "test-terraform-vcr",
Short: "Run vcr tests for affected packages",
Expand Down Expand Up @@ -148,11 +134,6 @@ The following environment variables are required:
}
ctlr := source.NewController(env["GOPATH"], "modular-magician", env["GITHUB_TOKEN_DOWNSTREAMS"], rnr)

testCovMerger, err := cov.NewTestCovMerger(rnr, filepath.Join(os.TempDir(), "cov"))
if err != nil {
return fmt.Errorf("failed to create testCovMerger: %w", err)
}

vt, err := vcr.NewTester(env, "ci-vcr-cassettes", "ci-vcr-logs", rnr)
if err != nil {
return fmt.Errorf("error creating VCR tester: %w", err)
Expand All @@ -162,7 +143,7 @@ The following environment variables are required:
return fmt.Errorf("wrong number of arguments %d, expected 5", len(args))
}

return execTestTerraformVCR(args[0], args[1], args[2], args[3], args[4], baseBranch, gh, rnr, ctlr, vt, testCovMerger)
return execTestTerraformVCR(args[0], args[1], args[2], args[3], args[4], baseBranch, gh, rnr, ctlr, vt)
},
}

Expand All @@ -174,7 +155,7 @@ func listTTVRequiredEnvironmentVariables() string {
return result
}

func execTestTerraformVCR(prNumber, mmCommitSha, buildID, projectID, buildStep, baseBranch string, gh GithubClient, rnr ExecRunner, ctlr *source.Controller, vt *vcr.Tester, covMerger *cov.Merger) error {
func execTestTerraformVCR(prNumber, mmCommitSha, buildID, projectID, buildStep, baseBranch string, gh GithubClient, rnr ExecRunner, ctlr *source.Controller, vt *vcr.Tester) error {
newBranch := "auto-pr-" + prNumber
oldBranch := newBranch + "-old"

Expand Down Expand Up @@ -230,7 +211,7 @@ func execTestTerraformVCR(prNumber, mmCommitSha, buildID, projectID, buildStep,
return fmt.Errorf("error posting pending status: %w", err)
}

replayingResult, testDirs, replayingErr := runReplaying(runFullVCR, provider.Beta, services, vt, true, covMerger.VcrTestCovDir)
replayingResult, testDirs, replayingErr := runReplaying(runFullVCR, provider.Beta, services, vt)
testState := "success"
if replayingErr != nil {
testState = "failure"
Expand Down Expand Up @@ -314,12 +295,10 @@ func execTestTerraformVCR(prNumber, mmCommitSha, buildID, projectID, buildStep,
var replayingAfterRecordingErr error
if len(recordingResult.PassedTests) > 0 {
replayingAfterRecordingResult, replayingAfterRecordingErr = vt.RunParallel(vcr.RunOptions{
Mode: vcr.Replaying,
Version: provider.Beta,
TestDirs: testDirs,
Tests: recordingResult.PassedTests,
EnableTestCoverage: true,
TestCovDir: covMerger.VcrTestCovDir,
Mode: vcr.Replaying,
Version: provider.Beta,
TestDirs: testDirs,
Tests: recordingResult.PassedTests,
})
if replayingAfterRecordingErr != nil {
testState = "failure"
Expand Down Expand Up @@ -356,25 +335,6 @@ func execTestTerraformVCR(prNumber, mmCommitSha, buildID, projectID, buildStep,
if err != nil {
return fmt.Errorf("error formatting record replay comment: %w", err)
}

// run unit test and generate combined code coverage
if err := genCov(rnr, covMerger, gh, runCovOpts{
repo: tpgbRepo,
buildID: buildID,
commitSha: mmCommitSha,
covGCSPrefix: covGCSPrefix,
testDirs: testDirs,
prNumber: prNumber,
}); err != nil {
fmt.Printf("Failed to generate coverage: %s\n", err)
}

out, err := covMerger.PackageCovComment()
if err != nil {
fmt.Printf("failed to get package coverage: %s\n", err)
} else {
recordReplayComment += "\n\n" + out
}
if err := gh.PostComment(prNumber, recordReplayComment); err != nil {
return fmt.Errorf("error posting comment: %w", err)
}
Expand Down Expand Up @@ -490,17 +450,15 @@ func modifiedPackages(changedFiles []string, version provider.Version) (map[stri
return services, runFullVCR
}

func runReplaying(runFullVCR bool, version provider.Version, services map[string]struct{}, vt *vcr.Tester, enableCov bool, covDir string) (vcr.Result, []string, error) {
func runReplaying(runFullVCR bool, version provider.Version, services map[string]struct{}, vt *vcr.Tester) (vcr.Result, []string, error) {
result := vcr.Result{}
var testDirs []string
var replayingErr error
if runFullVCR {
fmt.Println("runReplaying: full VCR tests")
result, replayingErr = vt.Run(vcr.RunOptions{
Mode: vcr.Replaying,
Version: version,
EnableTestCoverage: enableCov,
TestCovDir: covDir,
Mode: vcr.Replaying,
Version: version,
})
} else if len(services) > 0 {
fmt.Printf("runReplaying: %d specific services: %v\n", len(services), services)
Expand All @@ -509,11 +467,9 @@ func runReplaying(runFullVCR bool, version provider.Version, services map[string
testDirs = append(testDirs, servicePath)
fmt.Println("run VCR tests in ", service)
serviceResult, serviceReplayingErr := vt.Run(vcr.RunOptions{
Mode: vcr.Replaying,
Version: version,
TestDirs: []string{servicePath},
EnableTestCoverage: enableCov,
TestCovDir: covDir,
Mode: vcr.Replaying,
Version: version,
TestDirs: []string{servicePath},
})
replayingErr = errors.Join(replayingErr, serviceReplayingErr)
result.PassedTests = append(result.PassedTests, serviceResult.PassedTests...)
Expand Down Expand Up @@ -580,48 +536,3 @@ func formatRecordReplay(data recordReplay) (string, error) {
data.BrowseLogBaseUrl = fmt.Sprintf("https://console.cloud.google.com/storage/browser/%s", logBasePath)
return formatComment("record_replay.tmpl", recordReplayTmplText, data)
}

func unitTest(rnr ExecRunner, repoPath, covDir string, testDirs []string) error {
if err := rnr.PushDir(repoPath); err != nil {
return fmt.Errorf("error changing to tpgbRepo dir: %w", err)
}

if len(testDirs) == 0 {
if allPackages, err := rnr.Run("go", []string{"list", "./..."}, nil); err != nil {
return err
} else {
for _, dir := range strings.Split(allPackages, "\n") {
if !strings.Contains(dir, "github.com/hashicorp/terraform-provider-google-beta/scripts") {
testDirs = append(testDirs, dir)
}
}
}
}

args := []string{"test", "-p", "4", "-cover"}
args = append(args, testDirs...)
args = append(args, []string{"-args", fmt.Sprintf("-test.gocoverdir=%s", covDir)}...)
_, err := rnr.Run("go", args, nil)
if err != nil {
return fmt.Errorf("unit test failed with error: %s", err)
}
return nil
}

func genCov(rnr ExecRunner, covMerger *cov.Merger, gh GithubClient, opts runCovOpts) error {
fmt.Println("Generating code coverage...")
if err := unitTest(rnr, opts.repo.Path, covMerger.UnitTestCovDir, opts.testDirs); err != nil {
fmt.Println("unit test failed")
}
if err := covMerger.Merge(); err != nil {
return fmt.Errorf("failed to merge test coverage: %w", err)
}
covURL, err := covMerger.UploadToGCS(opts.covGCSPrefix, opts.buildID)
if err != nil {
return fmt.Errorf("failed to upload test coverage: %w", err)
}
if err := gh.PostBuildStatus(opts.prNumber, "test-cov", "success", covURL, opts.commitSha); err != nil {
return fmt.Errorf("error posting pending status: %w", err)
}
return nil
}
49 changes: 0 additions & 49 deletions .ci/magician/cmd/test_terraform_vcr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"strings"
"testing"

"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/assert"

"magician/provider"
Expand Down Expand Up @@ -580,51 +579,3 @@ func TestRecordReplay(t *testing.T) {
})
}
}

func TestUnitTest(t *testing.T) {
tests := []struct {
testName string
testDirs []string
want map[string][]ParameterList
}{
{
"not empty test dir",
[]string{"test-dir"},
map[string][]ParameterList{
"Run": {
{"repo-path", "go", []string{"test", "-p", "4", "-cover", "test-dir", "-args", "-test.gocoverdir=cov-dir"}, map[string]string(nil)},
},
},
},
{
"empty test dir",
[]string{},
map[string][]ParameterList{
"Run": {
{"repo-path", "go", []string{"list", "./..."}, map[string]string(nil)},
{"repo-path", "go", []string{"test", "-p", "4", "-cover", "pkg1", "pkg2", "-args", "-test.gocoverdir=cov-dir"}, map[string]string(nil)},
},
},
},
}
for _, tc := range tests {
t.Run(tc.testName, func(t *testing.T) {
mr := &mockRunner{
cwd: "cwd",
calledMethods: make(map[string][]ParameterList),
cmdResults: map[string]string{
"repo-path go [list ./...] map[]": "pkg1\npkg2",
},
}
err := unitTest(mr, "repo-path", "cov-dir", tc.testDirs)
if err != nil {
t.Fatal(err)
}
if diff := cmp.Diff(tc.want, mr.calledMethods); diff != "" {
t.Errorf("unitTest triggered different called methods(-want, +got): %s", diff)
}

})
}

}
6 changes: 0 additions & 6 deletions .ci/magician/cov/interfaces.go

This file was deleted.

Loading
Loading