mirror of https://github.com/hashicorp/consul
107 lines
2.9 KiB
Go
107 lines
2.9 KiB
Go
package hcp
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/go-hclog"
|
|
"github.com/stretchr/testify/mock"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/hashicorp/consul/agent/hcp/client"
|
|
"github.com/hashicorp/consul/types"
|
|
)
|
|
|
|
func TestSink(t *testing.T) {
|
|
t.Parallel()
|
|
for name, test := range map[string]struct {
|
|
expect func(*client.MockClient)
|
|
mockCloudCfg client.CloudConfig
|
|
expectedSink bool
|
|
}{
|
|
"success": {
|
|
expect: func(mockClient *client.MockClient) {
|
|
mockClient.EXPECT().FetchTelemetryConfig(mock.Anything).Return(&client.TelemetryConfig{
|
|
Endpoint: "https://test.com",
|
|
MetricsConfig: &client.MetricsConfig{
|
|
Endpoint: "https://test.com",
|
|
},
|
|
}, nil)
|
|
},
|
|
mockCloudCfg: client.MockCloudCfg{},
|
|
expectedSink: true,
|
|
},
|
|
"noSinkWhenServerNotRegisteredWithCCM": {
|
|
expect: func(mockClient *client.MockClient) {
|
|
mockClient.EXPECT().FetchTelemetryConfig(mock.Anything).Return(&client.TelemetryConfig{
|
|
Endpoint: "",
|
|
MetricsConfig: &client.MetricsConfig{
|
|
Endpoint: "",
|
|
},
|
|
}, nil)
|
|
},
|
|
mockCloudCfg: client.MockCloudCfg{},
|
|
},
|
|
"noSinkWhenCCMVerificationFails": {
|
|
expect: func(mockClient *client.MockClient) {
|
|
mockClient.EXPECT().FetchTelemetryConfig(mock.Anything).Return(nil, fmt.Errorf("fetch failed"))
|
|
},
|
|
mockCloudCfg: client.MockCloudCfg{},
|
|
},
|
|
"noSinkWhenMetricsClientInitFails": {
|
|
mockCloudCfg: client.MockCloudCfg{
|
|
ConfigErr: fmt.Errorf("test bad hcp config"),
|
|
},
|
|
expect: func(mockClient *client.MockClient) {
|
|
mockClient.EXPECT().FetchTelemetryConfig(mock.Anything).Return(&client.TelemetryConfig{
|
|
Endpoint: "https://test.com",
|
|
MetricsConfig: &client.MetricsConfig{
|
|
Endpoint: "",
|
|
},
|
|
}, nil)
|
|
},
|
|
},
|
|
"failsWithFetchTelemetryFailure": {
|
|
expect: func(mockClient *client.MockClient) {
|
|
mockClient.EXPECT().FetchTelemetryConfig(mock.Anything).Return(nil, fmt.Errorf("FetchTelemetryConfig error"))
|
|
},
|
|
},
|
|
"failsWithURLParseErr": {
|
|
expect: func(mockClient *client.MockClient) {
|
|
mockClient.EXPECT().FetchTelemetryConfig(mock.Anything).Return(&client.TelemetryConfig{
|
|
// Minimum 2 chars for a domain to be valid.
|
|
Endpoint: "s",
|
|
MetricsConfig: &client.MetricsConfig{
|
|
// Invalid domain chars
|
|
Endpoint: " ",
|
|
},
|
|
}, nil)
|
|
},
|
|
},
|
|
"noErrWithEmptyEndpoint": {
|
|
expect: func(mockClient *client.MockClient) {
|
|
mockClient.EXPECT().FetchTelemetryConfig(mock.Anything).Return(&client.TelemetryConfig{
|
|
Endpoint: "",
|
|
MetricsConfig: &client.MetricsConfig{
|
|
Endpoint: "",
|
|
},
|
|
}, nil)
|
|
},
|
|
},
|
|
} {
|
|
test := test
|
|
t.Run(name, func(t *testing.T) {
|
|
t.Parallel()
|
|
c := client.NewMockClient(t)
|
|
l := hclog.NewNullLogger()
|
|
test.expect(c)
|
|
sinkOpts := sink(c, test.mockCloudCfg, l, types.NodeID("server1234"))
|
|
if !test.expectedSink {
|
|
require.Nil(t, sinkOpts)
|
|
return
|
|
}
|
|
require.NotNil(t, sinkOpts)
|
|
})
|
|
}
|
|
}
|