Skip to content

Commit 2714a67

Browse files
committed
update tests
Signed-off-by: alex boten <[email protected]>
1 parent 8d05a12 commit 2714a67

File tree

10 files changed

+131
-228
lines changed

10 files changed

+131
-228
lines changed

otelconf/config_common.go

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package otelconf // import "go.opentelemetry.io/contrib/otelconf"
55

66
import (
77
"context"
8-
"encoding/json"
98
"errors"
109
"fmt"
1110
"reflect"
@@ -14,7 +13,6 @@ import (
1413
sdklog "go.opentelemetry.io/otel/sdk/log"
1514
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
1615
sdktrace "go.opentelemetry.io/otel/sdk/trace"
17-
yaml "go.yaml.in/yaml/v3"
1816
)
1917

2018
const (
@@ -323,66 +321,3 @@ func supportedHistogramAggregation(in ExporterDefaultHistogramAggregation) error
323321
}
324322
return newErrInvalid(fmt.Sprintf("invalid histogram aggregation (expected one of %#v): %#v", enumValuesOTLPMetricDefaultHistogramAggregation, in))
325323
}
326-
327-
// MarshalUnmarshaler combines marshal and unmarshal operations.
328-
type MarshalUnmarshaler interface {
329-
Marshal(v any) ([]byte, error)
330-
Unmarshal(data []byte, v any) error
331-
}
332-
333-
// jsonCodec implements MarshalUnmarshaler for JSON.
334-
type jsonCodec struct{}
335-
336-
func (jsonCodec) Marshal(v any) ([]byte, error) {
337-
return json.Marshal(v)
338-
}
339-
340-
func (jsonCodec) Unmarshal(data []byte, v any) error {
341-
return json.Unmarshal(data, v)
342-
}
343-
344-
// yamlCodec implements MarshalUnmarshaler for YAML.
345-
type yamlCodec struct{}
346-
347-
func (yamlCodec) Marshal(v any) ([]byte, error) {
348-
return yaml.Marshal(v)
349-
}
350-
351-
func (yamlCodec) Unmarshal(data []byte, v any) error {
352-
return yaml.Unmarshal(data, v)
353-
}
354-
355-
// setConfigDefaults sets default values for disabled and log_level.
356-
func setConfigDefaults(raw map[string]any, plain *OpenTelemetryConfiguration, codec MarshalUnmarshaler) error {
357-
// Configure if the SDK is disabled or not.
358-
// If omitted or null, false is used.
359-
plain.Disabled = ptr(false)
360-
if v, ok := raw["disabled"]; ok && v != nil {
361-
marshaled, err := codec.Marshal(v)
362-
if err != nil {
363-
return err
364-
}
365-
var disabled bool
366-
if err := codec.Unmarshal(marshaled, &disabled); err != nil {
367-
return err
368-
}
369-
plain.Disabled = &disabled
370-
}
371-
372-
// Configure the log level of the internal logger used by the SDK.
373-
// If omitted, info is used.
374-
plain.LogLevel = ptr("info")
375-
if v, ok := raw["log_level"]; ok && v != nil {
376-
marshaled, err := codec.Marshal(v)
377-
if err != nil {
378-
return err
379-
}
380-
var logLevel string
381-
if err := codec.Unmarshal(marshaled, &logLevel); err != nil {
382-
return err
383-
}
384-
plain.LogLevel = &logLevel
385-
}
386-
387-
return nil
388-
}

otelconf/config_json.go

Lines changed: 63 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -320,114 +320,110 @@ func (j *BatchSpanProcessor) UnmarshalJSON(b []byte) error {
320320

321321
// UnmarshalJSON implements json.Unmarshaler.
322322
func (j *OpenTelemetryConfiguration) UnmarshalJSON(b []byte) error {
323-
var raw map[string]any
324-
if err := json.Unmarshal(b, &raw); err != nil {
325-
return errors.Join(newErrUnmarshal(j), err)
323+
type Plain OpenTelemetryConfiguration
324+
type shadow struct {
325+
Plain
326+
FileFormat json.RawMessage `json:"file_format"`
327+
LoggerProvider json.RawMessage `json:"logger_provider"`
328+
MeterProvider json.RawMessage `json:"meter_provider"`
329+
TracerProvider json.RawMessage `json:"tracer_provider"`
330+
Propagator json.RawMessage `json:"propagator"`
331+
Resource json.RawMessage `json:"resource"`
332+
InstrumentationDevelopment json.RawMessage `json:"instrumentation/development"`
333+
AttributeLimits json.RawMessage `json:"attribute_limits"`
334+
Disabled json.RawMessage `json:"disabled"`
335+
LogLevel json.RawMessage `json:"log_level"`
326336
}
327-
if _, ok := raw["file_format"]; raw != nil && !ok {
328-
return errors.New("field file_format in OpenTelemetryConfiguration: required")
337+
var sh shadow
338+
if err := json.Unmarshal(b, &sh); err != nil {
339+
return errors.Join(newErrUnmarshal(j), err)
329340
}
330-
type Plain OpenTelemetryConfiguration
331-
var plain Plain
332341

333-
if v, ok := raw["logger_provider"]; ok && v != nil {
334-
marshaled, err := json.Marshal(v)
335-
if err != nil {
336-
return errors.Join(newErrUnmarshal(j), err)
337-
}
338-
var lp LoggerProviderJson
339-
if err := json.Unmarshal(marshaled, &lp); err != nil {
340-
return errors.Join(newErrUnmarshal(j), err)
341-
}
342-
plain.LoggerProvider = &lp
342+
if len(sh.FileFormat) == 0 {
343+
return newErrRequired(j, "file_format")
343344
}
344345

345-
if v, ok := raw["meter_provider"]; ok && v != nil {
346-
marshaled, err := json.Marshal(v)
347-
if err != nil {
348-
return errors.Join(newErrUnmarshal(j), err)
349-
}
350-
351-
var mp MeterProviderJson
352-
if err := json.Unmarshal(marshaled, &mp); err != nil {
353-
return errors.Join(newErrUnmarshal(j), err)
354-
}
355-
plain.MeterProvider = &mp
346+
if err := json.Unmarshal(sh.FileFormat, &sh.Plain.FileFormat); err != nil {
347+
return errors.Join(newErrUnmarshal(j), err)
356348
}
357349

358-
if v, ok := raw["tracer_provider"]; ok && v != nil {
359-
marshaled, err := json.Marshal(v)
360-
if err != nil {
350+
if sh.LoggerProvider != nil {
351+
var l LoggerProviderJson
352+
if err := json.Unmarshal(sh.LoggerProvider, &l); err != nil {
361353
return errors.Join(newErrUnmarshal(j), err)
362354
}
355+
sh.Plain.LoggerProvider = &l
356+
}
363357

364-
var tp TracerProviderJson
365-
if err := json.Unmarshal(marshaled, &tp); err != nil {
358+
if sh.MeterProvider != nil {
359+
var m MeterProviderJson
360+
if err := json.Unmarshal(sh.MeterProvider, &m); err != nil {
366361
return errors.Join(newErrUnmarshal(j), err)
367362
}
368-
plain.TracerProvider = &tp
363+
sh.Plain.MeterProvider = &m
369364
}
370365

371-
if v, ok := raw["propagator"]; ok && v != nil {
372-
marshaled, err := json.Marshal(v)
373-
if err != nil {
366+
if sh.TracerProvider != nil {
367+
var t TracerProviderJson
368+
if err := json.Unmarshal(sh.TracerProvider, &t); err != nil {
374369
return errors.Join(newErrUnmarshal(j), err)
375370
}
371+
sh.Plain.TracerProvider = &t
372+
}
376373

374+
if sh.Propagator != nil {
377375
var p PropagatorJson
378-
if err := json.Unmarshal(marshaled, &p); err != nil {
376+
if err := json.Unmarshal(sh.Propagator, &p); err != nil {
379377
return errors.Join(newErrUnmarshal(j), err)
380378
}
381-
plain.Propagator = &p
379+
sh.Plain.Propagator = &p
382380
}
383381

384-
if v, ok := raw["resource"]; ok && v != nil {
385-
marshaled, err := json.Marshal(v)
386-
if err != nil {
387-
return errors.Join(newErrUnmarshal(j), err)
388-
}
389-
382+
if sh.Resource != nil {
390383
var r ResourceJson
391-
if err := json.Unmarshal(marshaled, &r); err != nil {
384+
if err := json.Unmarshal(sh.Resource, &r); err != nil {
392385
return errors.Join(newErrUnmarshal(j), err)
393386
}
394-
plain.Resource = &r
387+
sh.Plain.Resource = &r
395388
}
396389

397-
if v, ok := raw["instrumentation/development"]; ok && v != nil {
398-
marshaled, err := json.Marshal(v)
399-
if err != nil {
390+
if sh.InstrumentationDevelopment != nil {
391+
var r InstrumentationJson
392+
if err := json.Unmarshal(sh.InstrumentationDevelopment, &r); err != nil {
400393
return errors.Join(newErrUnmarshal(j), err)
401394
}
395+
sh.Plain.InstrumentationDevelopment = &r
396+
}
402397

403-
var i InstrumentationJson
404-
if err := json.Unmarshal(marshaled, &i); err != nil {
398+
if sh.AttributeLimits != nil {
399+
var r AttributeLimits
400+
if err := json.Unmarshal(sh.AttributeLimits, &r); err != nil {
405401
return errors.Join(newErrUnmarshal(j), err)
406402
}
407-
plain.InstrumentationDevelopment = &i
403+
sh.Plain.AttributeLimits = &r
408404
}
409405

410-
if v, ok := raw["attribute_limits"]; ok && v != nil {
411-
marshaled, err := json.Marshal(v)
412-
if err != nil {
406+
if sh.Disabled != nil {
407+
if err := json.Unmarshal(sh.Disabled, &sh.Plain.Disabled); err != nil {
413408
return errors.Join(newErrUnmarshal(j), err)
414409
}
410+
} else {
411+
// Configure if the SDK is disabled or not.
412+
// If omitted or null, false is used.
413+
sh.Plain.Disabled = ptr(false)
414+
}
415415

416-
var a AttributeLimits
417-
if err := json.Unmarshal(marshaled, &a); err != nil {
416+
if sh.LogLevel != nil {
417+
if err := json.Unmarshal(sh.LogLevel, &sh.Plain.LogLevel); err != nil {
418418
return errors.Join(newErrUnmarshal(j), err)
419419
}
420-
plain.AttributeLimits = &a
421-
}
422-
423-
plainConfig := (*OpenTelemetryConfiguration)(&plain)
424-
if err := setConfigDefaults(raw, plainConfig, jsonCodec{}); err != nil {
425-
return errors.Join(newErrUnmarshal(j), err)
420+
} else {
421+
// Configure the log level of the internal logger used by the SDK.
422+
// If omitted, info is used.
423+
sh.Plain.LogLevel = ptr("info")
426424
}
427425

428-
plain.FileFormat = fmt.Sprintf("%v", raw["file_format"])
429-
430-
*j = OpenTelemetryConfiguration(plain)
426+
*j = OpenTelemetryConfiguration(sh.Plain)
431427
return nil
432428
}
433429

otelconf/config_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -981,12 +981,23 @@ func TestUnmarshalOpenTelemetryConfiguration(t *testing.T) {
981981
wantType *OpenTelemetryConfiguration
982982
}{
983983
{
984-
name: "valid empty config",
985-
input: `valid_empty`,
986-
wantErr: nil,
984+
name: "invalid config missing required file_format",
985+
input: `missing_file_format`,
986+
wantErr: newErrRequired(&OpenTelemetryConfiguration{}, "file_format"),
987+
wantType: &OpenTelemetryConfiguration{},
988+
},
989+
{
990+
name: "file_format invalid",
991+
input: `invalid_file_format`,
992+
wantErr: newErrUnmarshal(&OpenTelemetryConfiguration{}),
993+
wantType: &OpenTelemetryConfiguration{},
994+
},
995+
{
996+
name: "valid defaults config",
997+
input: `valid_defaults`,
987998
wantType: &OpenTelemetryConfiguration{
988999
Disabled: ptr(false),
989-
FileFormat: "0.1",
1000+
FileFormat: "1.0",
9901001
LogLevel: ptr("info"),
9911002
},
9921003
},

0 commit comments

Comments
 (0)