...

Source file src/go.opentelemetry.io/otel/sdk/resource/env_test.go

Documentation: go.opentelemetry.io/otel/sdk/resource

     1  // Copyright The OpenTelemetry Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package resource
    16  
    17  import (
    18  	"context"
    19  	"fmt"
    20  	"testing"
    21  
    22  	"github.com/stretchr/testify/assert"
    23  	"github.com/stretchr/testify/require"
    24  
    25  	"go.opentelemetry.io/otel/attribute"
    26  	ottest "go.opentelemetry.io/otel/sdk/internal/internaltest"
    27  	semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
    28  )
    29  
    30  func TestDetectOnePair(t *testing.T) {
    31  	store, err := ottest.SetEnvVariables(map[string]string{
    32  		resourceAttrKey: "key=value",
    33  	})
    34  	require.NoError(t, err)
    35  	defer func() { require.NoError(t, store.Restore()) }()
    36  
    37  	detector := &fromEnv{}
    38  	res, err := detector.Detect(context.Background())
    39  	require.NoError(t, err)
    40  	assert.Equal(t, NewSchemaless(attribute.String("key", "value")), res)
    41  }
    42  
    43  func TestDetectURIEncodingOnePair(t *testing.T) {
    44  	store, err := ottest.SetEnvVariables(map[string]string{
    45  		resourceAttrKey: "key=x+y+z?q=123",
    46  	})
    47  	require.NoError(t, err)
    48  	defer func() { require.NoError(t, store.Restore()) }()
    49  
    50  	detector := &fromEnv{}
    51  	res, err := detector.Detect(context.Background())
    52  	require.NoError(t, err)
    53  	assert.Equal(t, NewSchemaless(attribute.String("key", "x+y+z?q=123")), res)
    54  }
    55  
    56  func TestDetectMultiPairs(t *testing.T) {
    57  	store, err := ottest.SetEnvVariables(map[string]string{
    58  		"x":             "1",
    59  		resourceAttrKey: "key=value, k = v , a= x, a=z, b=c%2Fd",
    60  	})
    61  	require.NoError(t, err)
    62  	defer func() { require.NoError(t, store.Restore()) }()
    63  
    64  	detector := &fromEnv{}
    65  	res, err := detector.Detect(context.Background())
    66  	require.NoError(t, err)
    67  	assert.Equal(t, NewSchemaless(
    68  		attribute.String("key", "value"),
    69  		attribute.String("k", "v"),
    70  		attribute.String("a", "x"),
    71  		attribute.String("a", "z"),
    72  		attribute.String("b", "c/d"),
    73  	), res)
    74  }
    75  
    76  func TestDetectURIEncodingMultiPairs(t *testing.T) {
    77  	store, err := ottest.SetEnvVariables(map[string]string{
    78  		"x":             "1",
    79  		resourceAttrKey: "key=x+y+z,namespace=localhost/test&verify",
    80  	})
    81  	require.NoError(t, err)
    82  	defer func() { require.NoError(t, store.Restore()) }()
    83  
    84  	detector := &fromEnv{}
    85  	res, err := detector.Detect(context.Background())
    86  	require.NoError(t, err)
    87  	assert.Equal(t, NewSchemaless(
    88  		attribute.String("key", "x+y+z"),
    89  		attribute.String("namespace", "localhost/test&verify"),
    90  	), res)
    91  }
    92  
    93  func TestEmpty(t *testing.T) {
    94  	store, err := ottest.SetEnvVariables(map[string]string{
    95  		resourceAttrKey: "   ",
    96  	})
    97  	require.NoError(t, err)
    98  	defer func() { require.NoError(t, store.Restore()) }()
    99  
   100  	detector := &fromEnv{}
   101  	res, err := detector.Detect(context.Background())
   102  	require.NoError(t, err)
   103  	assert.Equal(t, Empty(), res)
   104  }
   105  
   106  func TestNoResourceAttributesSet(t *testing.T) {
   107  	store, err := ottest.SetEnvVariables(map[string]string{
   108  		svcNameKey: "bar",
   109  	})
   110  	require.NoError(t, err)
   111  	defer func() { require.NoError(t, store.Restore()) }()
   112  	detector := &fromEnv{}
   113  	res, err := detector.Detect(context.Background())
   114  	require.NoError(t, err)
   115  	assert.Equal(t, res, NewSchemaless(
   116  		semconv.ServiceName("bar"),
   117  	))
   118  }
   119  
   120  func TestMissingKeyError(t *testing.T) {
   121  	store, err := ottest.SetEnvVariables(map[string]string{
   122  		resourceAttrKey: "key=value,key",
   123  	})
   124  	require.NoError(t, err)
   125  	defer func() { require.NoError(t, store.Restore()) }()
   126  
   127  	detector := &fromEnv{}
   128  	res, err := detector.Detect(context.Background())
   129  	assert.Error(t, err)
   130  	assert.Equal(t, err, fmt.Errorf("%w: %v", errMissingValue, "[key]"))
   131  	assert.Equal(t, res, NewSchemaless(
   132  		attribute.String("key", "value"),
   133  	))
   134  }
   135  
   136  func TestInvalidPercentDecoding(t *testing.T) {
   137  	store, err := ottest.SetEnvVariables(map[string]string{
   138  		resourceAttrKey: "key=%invalid",
   139  	})
   140  	require.NoError(t, err)
   141  	defer func() { require.NoError(t, store.Restore()) }()
   142  
   143  	detector := &fromEnv{}
   144  	res, err := detector.Detect(context.Background())
   145  	assert.NoError(t, err)
   146  	assert.Equal(t, NewSchemaless(
   147  		attribute.String("key", "%invalid"),
   148  	), res)
   149  }
   150  
   151  func TestDetectServiceNameFromEnv(t *testing.T) {
   152  	store, err := ottest.SetEnvVariables(map[string]string{
   153  		resourceAttrKey: "key=value,service.name=foo",
   154  		svcNameKey:      "bar",
   155  	})
   156  	require.NoError(t, err)
   157  	defer func() { require.NoError(t, store.Restore()) }()
   158  
   159  	detector := &fromEnv{}
   160  	res, err := detector.Detect(context.Background())
   161  	require.NoError(t, err)
   162  	assert.Equal(t, res, NewSchemaless(
   163  		attribute.String("key", "value"),
   164  		semconv.ServiceName("bar"),
   165  	))
   166  }
   167  

View as plain text