-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
cli_test.go
115 lines (98 loc) · 3.13 KB
/
cli_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package docsgen
import (
"os"
"path/filepath"
"strings"
"testing"
"text/template"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/otelcol"
"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/configschema"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/components"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver"
)
func TestWriteConfigDoc(t *testing.T) {
cfg := redisreceiver.NewFactory().CreateDefaultConfig()
dr := configschema.NewDirResolver(filepath.Join("..", "..", "..", ".."), configschema.DefaultModule)
outputFilename := ""
tmpl := testTemplate(t)
writeConfigDoc(
tmpl,
dr,
configschema.CfgInfo{
Group: "receiver",
Type: component.MustNewType("redis"),
CfgInstance: cfg,
},
func(dir string, _ []byte, _ os.FileMode) error {
outputFilename = dir
return nil
},
)
expectedPath := filepath.Join("receiver", "redisreceiver", "config.md")
assert.True(t, strings.HasSuffix(outputFilename, expectedPath))
}
func TestHandleCLI_NoArgs(t *testing.T) {
wr := &fakeIOWriter{}
handleCLI(
defaultComponents(t),
configschema.NewDefaultDirResolver(),
testTemplate(t),
func(_ string, _ []byte, _ os.FileMode) error { return nil },
wr,
)
assert.Equal(t, 3, len(wr.lines))
}
func TestHandleCLI_Single(t *testing.T) {
args := []string{"", "receiver", "redis"}
cs := defaultComponents(t)
wr := &fakeFilesystemWriter{}
testHandleCLI(t, cs, wr, args)
assert.Equal(t, 1, len(wr.configFiles))
assert.Equal(t, 1, len(wr.fileContents))
assert.True(t, strings.Contains(wr.fileContents[0], `Redis Receiver Reference`))
}
func TestHandleCLI_All(t *testing.T) {
t.Skip("this test takes > 5m when -race is used")
args := []string{"", "all"}
c := defaultComponents(t)
writer := &fakeFilesystemWriter{}
testHandleCLI(t, c, writer, args)
assert.NotNil(t, writer.configFiles)
assert.NotNil(t, writer.fileContents)
}
func defaultComponents(t *testing.T) otelcol.Factories {
factories, err := components.Components()
require.NoError(t, err)
return factories
}
func testHandleCLI(t *testing.T, cs otelcol.Factories, wr *fakeFilesystemWriter, args []string) {
stdoutWriter := &fakeIOWriter{}
tmpl := testTemplate(t)
dr := configschema.NewDirResolver(filepath.Join("..", "..", "..", ".."), configschema.DefaultModule)
handleCLI(cs, dr, tmpl, wr.writeFile, stdoutWriter, args...)
}
func testTemplate(t *testing.T) *template.Template {
tmpl, err := template.ParseFiles("testdata/test.tmpl")
require.NoError(t, err)
return tmpl
}
type fakeFilesystemWriter struct {
configFiles, fileContents []string
}
func (wr *fakeFilesystemWriter) writeFile(filename string, data []byte, _ os.FileMode) error {
wr.configFiles = append(wr.configFiles, filename)
wr.fileContents = append(wr.fileContents, string(data))
return nil
}
type fakeIOWriter struct {
lines []string
}
func (wr *fakeIOWriter) Write(p []byte) (n int, err error) {
wr.lines = append(wr.lines, string(p))
return 0, nil
}