opentelemetry-collector/internal/memorylimiter/config_test.go

115 lines
2.7 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package memorylimiter
import (
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/confmap/confmaptest"
)
func TestUnmarshalConfig(t *testing.T) {
cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
require.NoError(t, err)
cfg := &Config{}
assert.NoError(t, cm.Unmarshal(&cfg))
assert.Equal(t,
&Config{
CheckInterval: 5 * time.Second,
MemoryLimitMiB: 4000,
MemorySpikeLimitMiB: 500,
}, cfg)
}
func TestConfigValidate(t *testing.T) {
tests := []struct {
name string
cfg *Config
err error
}{
{
name: "valid",
cfg: &Config{
MemoryLimitMiB: 5722,
MemorySpikeLimitMiB: 1907,
CheckInterval: 100 * time.Millisecond,
},
err: nil,
},
{
name: "zero check interval",
cfg: &Config{
CheckInterval: 0,
},
err: errCheckIntervalOutOfRange,
},
{
name: "unset memory limit",
cfg: &Config{
CheckInterval: 1 * time.Second,
MemoryLimitMiB: 0,
MemoryLimitPercentage: 0,
},
err: errLimitOutOfRange,
},
{
name: "invalid memory spike limit",
cfg: &Config{
CheckInterval: 1 * time.Second,
MemoryLimitMiB: 10,
MemorySpikeLimitMiB: 10,
},
err: errSpikeLimitOutOfRange,
},
{
name: "invalid memory percentage limit",
cfg: &Config{
CheckInterval: 1 * time.Second,
MemoryLimitPercentage: 101,
},
err: errLimitPercentageOutOfRange,
},
{
name: "invalid memory spike percentage limit",
cfg: &Config{
CheckInterval: 1 * time.Second,
MemoryLimitPercentage: 50,
MemorySpikePercentage: 60,
},
err: errSpikeLimitPercentageOutOfRange,
},
{
name: "invalid gc intervals",
cfg: &Config{
CheckInterval: 100 * time.Millisecond,
MinGCIntervalWhenSoftLimited: 50 * time.Millisecond,
MinGCIntervalWhenHardLimited: 100 * time.Millisecond,
MemoryLimitMiB: 5722,
MemorySpikeLimitMiB: 1907,
},
err: errInconsistentGCMinInterval,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.cfg.Validate()
assert.Equal(t, tt.err, err)
})
}
}
func TestUnmarshalInvalidConfig(t *testing.T) {
cm, err := confmaptest.LoadConf(filepath.Join("testdata", "negative_unsigned_limits_config.yaml"))
require.NoError(t, err)
cfg := &Config{}
err = cm.Unmarshal(&cfg)
require.ErrorContains(t, err, "'limit_mib' cannot parse value as 'uint32': -2000 overflows uint")
require.ErrorContains(t, err, "'spike_limit_mib' cannot parse value as 'uint32': -2300 overflows uint")
}