open-nomad/nomad/structs/config/limits_test.go

87 lines
2.2 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package config
import (
"testing"
"time"
"github.com/hashicorp/nomad/ci"
"github.com/hashicorp/nomad/helper/pointer"
"github.com/stretchr/testify/require"
)
// TestLimits_Defaults asserts the default limits are valid.
func TestLimits_Defaults(t *testing.T) {
ci.Parallel(t)
l := DefaultLimits()
d, err := time.ParseDuration(l.HTTPSHandshakeTimeout)
require.NoError(t, err)
require.True(t, d > 0)
d, err = time.ParseDuration(l.RPCHandshakeTimeout)
require.NoError(t, err)
require.True(t, d > 0)
}
// TestLimits_Copy asserts Limits structs are deep copied.
func TestLimits_Copy(t *testing.T) {
ci.Parallel(t)
o := DefaultLimits()
c := o.Copy()
// Assert changes to copy are not propagated to the original
c.HTTPSHandshakeTimeout = "1s"
c.HTTPMaxConnsPerClient = pointer.Of(50)
c.RPCHandshakeTimeout = "1s"
c.RPCMaxConnsPerClient = pointer.Of(50)
require.NotEqual(t, c.HTTPSHandshakeTimeout, o.HTTPSHandshakeTimeout)
// Pointers should be different
require.True(t, c.HTTPMaxConnsPerClient != o.HTTPMaxConnsPerClient)
require.NotEqual(t, c.HTTPMaxConnsPerClient, o.HTTPMaxConnsPerClient)
require.NotEqual(t, c.RPCHandshakeTimeout, o.RPCHandshakeTimeout)
// Pointers should be different
require.True(t, c.RPCMaxConnsPerClient != o.RPCMaxConnsPerClient)
require.NotEqual(t, c.RPCMaxConnsPerClient, o.RPCMaxConnsPerClient)
}
// TestLimits_Merge asserts non-zero fields from the method argument take
// precedence over the existing limits.
func TestLimits_Merge(t *testing.T) {
ci.Parallel(t)
l := Limits{}
o := DefaultLimits()
m := l.Merge(o)
// Operands should not change
require.Equal(t, Limits{}, l)
require.Equal(t, DefaultLimits(), o)
// m == o
require.Equal(t, m, DefaultLimits())
o.HTTPSHandshakeTimeout = "10s"
m2 := m.Merge(o)
// Operands should not change
require.Equal(t, m, DefaultLimits())
// Use short struct initialization style so it fails to compile if
// fields are added
expected := Limits{"10s", pointer.Of(100), "5s", pointer.Of(100)}
require.Equal(t, expected, m2)
// Mergin in 0 values should not change anything
m3 := m2.Merge(Limits{})
require.Equal(t, m2, m3)
}