opentelemetry-collector/cmd/builder/internal/command_test.go

126 lines
3.3 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package internal
import (
"strings"
"testing"
"github.com/spf13/cobra"
flag "github.com/spf13/pflag"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/cmd/builder/internal/builder"
)
func TestCommand(t *testing.T) {
tests := []struct {
name string
want *cobra.Command
wantErr bool
}{
{
name: "command created",
want: &cobra.Command{
SilenceUsage: true, // Don't print usage on Run error.
SilenceErrors: true, // Don't print errors; main does it.
Use: "ocb",
Long: "OpenTelemetry Collector Builder",
Args: cobra.NoArgs,
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := Command()
if !tt.wantErr {
require.NoErrorf(t, err, "Command()")
assert.Equal(t, tt.want.Aliases, got.Aliases)
assert.Equal(t, tt.want.Annotations, got.Annotations)
assert.Equal(t, tt.want.ValidArgs, got.ValidArgs)
assert.Equal(t, tt.want.ArgAliases, got.ArgAliases)
assert.Equal(t, tt.want.Use, got.Use)
assert.Equal(t, tt.want.SilenceUsage, got.SilenceUsage)
assert.Equal(t, tt.want.SilenceErrors, got.SilenceErrors)
assert.True(t, strings.HasPrefix(got.Long, tt.want.Long))
assert.Empty(t, got.Short)
assert.NotEqual(t, tt.want.HasFlags(), got.Flags().HasFlags())
} else {
require.Error(t, err)
}
})
}
}
func TestApplyFlags(t *testing.T) {
tests := []struct {
name string
flags []string
want *builder.Config
}{
{
name: "Default flag values",
want: &builder.Config{
SkipStrictVersioning: true,
},
},
{
name: "All flag values",
flags: []string{"--skip-generate=true", "--skip-compilation=true", "--skip-get-modules=true", "--skip-strict-versioning=true", "--ldflags=test", "--gcflags=test", "--verbose=true"},
want: &builder.Config{
SkipGenerate: true,
SkipCompilation: true,
SkipGetModules: true,
SkipStrictVersioning: true,
LDFlags: "test",
GCFlags: "test",
Verbose: true,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
flags := flag.NewFlagSet("version=1.0.0", 1)
require.NoError(t, initFlags(flags))
require.NoError(t, flags.Parse(tt.flags))
cfg, err := builder.NewDefaultConfig()
require.NoError(t, err)
require.NoError(t, applyFlags(flags, cfg))
assert.Equal(t, tt.want.SkipGenerate, cfg.SkipGenerate)
assert.Equal(t, tt.want.SkipCompilation, cfg.SkipCompilation)
assert.Equal(t, tt.want.SkipGetModules, cfg.SkipGetModules)
assert.Equal(t, tt.want.SkipStrictVersioning, cfg.SkipStrictVersioning)
assert.Equal(t, tt.want.LDFlags, cfg.LDFlags)
assert.Equal(t, tt.want.Verbose, cfg.Verbose)
})
}
}
func TestInitConfig(t *testing.T) {
tests := []struct {
name string
flags *flag.FlagSet
wantErr bool
}{
{
name: "initConfig created correctly",
flags: flag.NewFlagSet("version=1.0.0", 1),
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
require.NoError(t, initFlags(tt.flags))
_, err := initConfig(tt.flags)
if tt.wantErr {
require.Error(t, err)
return
}
require.NoError(t, err)
})
}
}