Skip to content

Commit

Permalink
improve test, set insecure option on http
Browse files Browse the repository at this point in the history
Signed-off-by: Alex Boten <[email protected]>
  • Loading branch information
Alex Boten committed Jul 18, 2023
1 parent 127e1a2 commit 2ade22d
Show file tree
Hide file tree
Showing 2 changed files with 190 additions and 13 deletions.
39 changes: 26 additions & 13 deletions service/internal/proctelemetry/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"net/http"
"net/url"
"os"
"strings"
"time"

"github.com/prometheus/client_golang/prometheus"
Expand Down Expand Up @@ -209,18 +210,23 @@ func initPeriodicExporter(ctx context.Context, exporter telemetry.MetricExporter
return nil, nil, fmt.Errorf("no valid exporter")
}

func normalizeEndpoint(endpoint string) string {
if !strings.HasPrefix(endpoint, "https://") && !strings.HasPrefix(endpoint, "http://") {
return fmt.Sprintf("http://%s", endpoint)
}
return endpoint
}

func initOTLPgRPCExporter(ctx context.Context, otlpConfig *telemetry.OtlpMetric) (sdkmetric.Exporter, error) {
opts := []otlpmetricgrpc.Option{}

if len(otlpConfig.Endpoint) > 0 {
endpoint, err := url.Parse(otlpConfig.Endpoint)

u, err := url.ParseRequestURI(normalizeEndpoint(otlpConfig.Endpoint))
if err != nil {
return nil, err
}
opts = append(opts, otlpmetricgrpc.WithEndpoint(endpoint.Host))

if endpoint.Scheme == "http" {
opts = append(opts, otlpmetricgrpc.WithEndpoint(u.Host))
if u.Scheme == "http" {
opts = append(opts, otlpmetricgrpc.WithInsecure())
}
}
Expand All @@ -242,22 +248,29 @@ func initOTLPHTTPExporter(ctx context.Context, otlpConfig *telemetry.OtlpMetric)
opts := []otlpmetrichttp.Option{}

if len(otlpConfig.Endpoint) > 0 {
endpoint, err := url.Parse(otlpConfig.Endpoint)
u, err := url.ParseRequestURI(normalizeEndpoint(otlpConfig.Endpoint))
if err != nil {
return nil, err
}
opts = append(opts, otlpmetrichttp.WithEndpoint(endpoint.Host))
opts = append(opts, otlpmetrichttp.WithEndpoint(u.Host))

if endpoint.Scheme == "http" {
if u.Scheme == "http" {
opts = append(opts, otlpmetrichttp.WithInsecure())
}
if len(endpoint.Path) > 0 {
opts = append(opts, otlpmetrichttp.WithURLPath(endpoint.Path))
if len(u.Path) > 0 {
opts = append(opts, otlpmetrichttp.WithURLPath(u.Path))
}
}
if otlpConfig.Compression != nil {
switch *otlpConfig.Compression {
case "gzip":
opts = append(opts, otlpmetrichttp.WithCompression(otlpmetrichttp.GzipCompression))
case "none":
opts = append(opts, otlpmetrichttp.WithCompression(otlpmetrichttp.NoCompression))
default:
return nil, fmt.Errorf("unsupported compression %s", *otlpConfig.Compression)
}
}
// if otlpConfig.Compression != nil {
// opts = append(opts, otlpmetrichttp.WithCompression(*otlpConfig.Compression)) // TODO: convert this to compression type
// }
if otlpConfig.Timeout != nil {
opts = append(opts, otlpmetrichttp.WithTimeout(time.Millisecond*time.Duration(*otlpConfig.Timeout)))
}
Expand Down
164 changes: 164 additions & 0 deletions service/internal/proctelemetry/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package proctelemetry
import (
"context"
"errors"
"net/url"
"testing"

"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -136,8 +137,43 @@ func TestMetricReader(t *testing.T) {
},
err: errors.New("unsupported protocol http/invalid"),
},
{
name: "periodic/otlp-grpc-exporter-no-endpoint",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "grpc/protobuf",
Compression: strPtr("gzip"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
},
{
name: "periodic/otlp-grpc-exporter",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "grpc/protobuf",
Endpoint: "http://localhost:4317",
Compression: strPtr("gzip"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
},
{
name: "periodic/otlp-grpc-exporter-no-scheme",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Expand All @@ -154,8 +190,98 @@ func TestMetricReader(t *testing.T) {
},
},
},
{
name: "periodic/otlp-grpc-invalid-endpoint",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "grpc/protobuf",
Endpoint: " ",
Compression: strPtr("gzip"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
err: &url.Error{Op: "parse", URL: "http:// ", Err: url.InvalidHostError(" ")},
},
{
name: "periodic/otlp-grpc-invalid-compression",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "grpc/protobuf",
Endpoint: "localhost:4317",
Compression: strPtr("invalid"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
},
{
name: "periodic/otlp-http-exporter",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "http/protobuf",
Endpoint: "http://localhost:4318",
Compression: strPtr("gzip"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
},
{
name: "periodic/otlp-http-exporter-with-path",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "http/protobuf",
Endpoint: "http://localhost:4318/path/123",
Compression: strPtr("none"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
},
{
name: "periodic/otlp-http-exporter-no-endpoint",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "http/protobuf",
Compression: strPtr("gzip"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
},
{
name: "periodic/otlp-http-exporter-no-scheme",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Expand All @@ -172,6 +298,44 @@ func TestMetricReader(t *testing.T) {
},
},
},
{
name: "periodic/otlp-http-invalid-endpoint",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "http/protobuf",
Endpoint: " ",
Compression: strPtr("gzip"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
err: &url.Error{Op: "parse", URL: "http:// ", Err: url.InvalidHostError(" ")},
},
{
name: "periodic/otlp-http-invalid-compression",
reader: telemetry.MetricReader{
Periodic: &telemetry.PeriodicMetricReader{
Exporter: telemetry.MetricExporter{
Otlp: &telemetry.OtlpMetric{
Protocol: "http/protobuf",
Endpoint: "localhost:4318",
Compression: strPtr("invalid"),
Timeout: intPtr(1000),
Headers: map[string]interface{}{
"test": "test1",
},
},
},
},
},
err: errors.New("unsupported compression invalid"),
},
}
for _, tt := range testCases {
t.Run(tt.name, func(t *testing.T) {
Expand Down

0 comments on commit 2ade22d

Please sign in to comment.