From 83b18b17503a5e1ac221825dd5fe8f3e3d2b2a7f Mon Sep 17 00:00:00 2001 From: Narcis Gemene <7252787+narcis96@users.noreply.github.com> Date: Thu, 10 Oct 2024 01:45:03 +0300 Subject: [PATCH] Improve coverage of mdatagen (#11352) Bump coverage of _cmd/mdatagen/internal/command.go_ from [70.40%](https://app.codecov.io/gh/open-telemetry/opentelemetry-collector/commit/b1f38a2960608b1b95e0f13547f0bddeebed1175?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=open-telemetry) to [79.37%](https://app.codecov.io/gh/open-telemetry/opentelemetry-collector/commit/9ff6b2b9ce557f5b3cd3dce4d1e48bd16a56f86d?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=open-telemetry) Fixes https://github.com/open-telemetry/opentelemetry-collector/issues/11219 --------- Co-authored-by: Alex Boten <223565+codeboten@users.noreply.github.com> --- cmd/mdatagen/internal/command.go | 36 ++++++++++--------- cmd/mdatagen/internal/command_test.go | 24 ++++++++++++- .../internal/testdata/basic_connector.yaml | 6 ++++ .../internal/testdata/basic_receiver.yaml | 6 ++++ .../testdata/readme_with_status_codeowners.md | 2 +- 5 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 cmd/mdatagen/internal/testdata/basic_connector.yaml create mode 100644 cmd/mdatagen/internal/testdata/basic_receiver.yaml diff --git a/cmd/mdatagen/internal/command.go b/cmd/mdatagen/internal/command.go index 49278ad4ea6..8758c8a6ddf 100644 --- a/cmd/mdatagen/internal/command.go +++ b/cmd/mdatagen/internal/command.go @@ -361,6 +361,16 @@ func templatize(tmplFile string, md Metadata) *template.Template { }).ParseFS(TemplateFS, strings.ReplaceAll(tmplFile, "\\", "/"))) } +func executeTemplate(tmplFile string, md Metadata, goPackage string) ([]byte, error) { + tmpl := templatize(tmplFile, md) + buf := bytes.Buffer{} + + if err := tmpl.Execute(&buf, TemplateContext{Metadata: md, Package: goPackage}); err != nil { + return []byte{}, fmt.Errorf("failed executing template: %w", err) + } + return buf.Bytes(), nil +} + func inlineReplace(tmplFile string, outputFile string, md Metadata, start string, end string) error { var readmeContents []byte var err error @@ -373,20 +383,16 @@ func inlineReplace(tmplFile string, outputFile string, md Metadata, start string return nil } - tmpl := templatize(tmplFile, md) - buf := bytes.Buffer{} - if md.GithubProject == "" { md.GithubProject = "open-telemetry/opentelemetry-collector-contrib" } - if err := tmpl.Execute(&buf, TemplateContext{Metadata: md, Package: "metadata"}); err != nil { - return fmt.Errorf("failed executing template: %w", err) + buf, err := executeTemplate(tmplFile, md, "metadata") + if err != nil { + return err } - result := buf.String() - - s := re.ReplaceAllString(string(readmeContents), result) + s := re.ReplaceAllString(string(readmeContents), string(buf)) if err := os.WriteFile(outputFile, []byte(s), 0600); err != nil { return fmt.Errorf("failed writing %q: %w", outputFile, err) } @@ -395,21 +401,17 @@ func inlineReplace(tmplFile string, outputFile string, md Metadata, start string } func generateFile(tmplFile string, outputFile string, md Metadata, goPackage string) error { - tmpl := templatize(tmplFile, md) - buf := bytes.Buffer{} - - if err := tmpl.Execute(&buf, TemplateContext{Metadata: md, Package: goPackage}); err != nil { - return fmt.Errorf("failed executing template: %w", err) - } - if err := os.Remove(outputFile); err != nil && !errors.Is(err, os.ErrNotExist) { return fmt.Errorf("unable to remove generated file %q: %w", outputFile, err) } - result := buf.Bytes() + result, err := executeTemplate(tmplFile, md, goPackage) + if err != nil { + return err + } var formatErr error if strings.HasSuffix(outputFile, ".go") { - if formatted, err := format.Source(buf.Bytes()); err == nil { + if formatted, err := format.Source(result); err == nil { result = formatted } else { formatErr = fmt.Errorf("failed formatting %s:%w", outputFile, err) diff --git a/cmd/mdatagen/internal/command_test.go b/cmd/mdatagen/internal/command_test.go index b19bef13296..fdffe59cc25 100644 --- a/cmd/mdatagen/internal/command_test.go +++ b/cmd/mdatagen/internal/command_test.go @@ -12,11 +12,23 @@ import ( "path/filepath" "testing" + "github.com/spf13/cobra" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" ) +func TestNewCommand(t *testing.T) { + cmd, err := NewCommand() + require.NoError(t, err) + + assert.NotNil(t, cmd) + assert.IsType(t, &cobra.Command{}, cmd) + assert.Equal(t, "mdatagen", cmd.Use) + assert.True(t, cmd.SilenceUsage) +} + func TestRunContents(t *testing.T) { tests := []struct { yml string @@ -36,6 +48,16 @@ func TestRunContents(t *testing.T) { yml: "invalid.yaml", wantErr: true, }, + { + yml: "basic_connector.yaml", + wantErr: false, + wantStatusGenerated: true, + }, + { + yml: "basic_receiver.yaml", + wantErr: false, + wantStatusGenerated: true, + }, { yml: "metrics_and_type.yaml", wantMetricsGenerated: true, @@ -344,7 +366,7 @@ Some info about a component componentClass: "receiver", distros: []string{"contrib"}, codeowners: &Codeowners{ - Active: []string{"foo"}, + Active: []string{"open-telemetry/collector-approvers"}, }, }, { diff --git a/cmd/mdatagen/internal/testdata/basic_connector.yaml b/cmd/mdatagen/internal/testdata/basic_connector.yaml new file mode 100644 index 00000000000..b485572eaca --- /dev/null +++ b/cmd/mdatagen/internal/testdata/basic_connector.yaml @@ -0,0 +1,6 @@ +type: test + +status: + class: connector + stability: + beta: [traces_to_traces] \ No newline at end of file diff --git a/cmd/mdatagen/internal/testdata/basic_receiver.yaml b/cmd/mdatagen/internal/testdata/basic_receiver.yaml new file mode 100644 index 00000000000..3be443ea8f5 --- /dev/null +++ b/cmd/mdatagen/internal/testdata/basic_receiver.yaml @@ -0,0 +1,6 @@ +type: test + +status: + class: receiver + stability: + beta: [logs] \ No newline at end of file diff --git a/cmd/mdatagen/internal/testdata/readme_with_status_codeowners.md b/cmd/mdatagen/internal/testdata/readme_with_status_codeowners.md index f350b593360..ad2f00f8adf 100644 --- a/cmd/mdatagen/internal/testdata/readme_with_status_codeowners.md +++ b/cmd/mdatagen/internal/testdata/readme_with_status_codeowners.md @@ -6,7 +6,7 @@ | Stability | [beta]: metrics | | Distributions | [contrib] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Ffoo%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Ffoo) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Ffoo%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Ffoo) | -| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@foo](https://www.github.com/foo) | +| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@open-telemetry/collector-approvers](https://github.com/orgs/open-telemetry/teams/collector-approvers) | [beta]: https://github.com/open-telemetry/opentelemetry-collector#beta [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib