github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/nomad/structs/config/limits_test.go (about)

     1  package config
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/hashicorp/nomad/ci"
     8  	"github.com/hashicorp/nomad/helper/pointer"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  // TestLimits_Defaults asserts the default limits are valid.
    13  func TestLimits_Defaults(t *testing.T) {
    14  	ci.Parallel(t)
    15  
    16  	l := DefaultLimits()
    17  	d, err := time.ParseDuration(l.HTTPSHandshakeTimeout)
    18  	require.NoError(t, err)
    19  	require.True(t, d > 0)
    20  
    21  	d, err = time.ParseDuration(l.RPCHandshakeTimeout)
    22  	require.NoError(t, err)
    23  	require.True(t, d > 0)
    24  }
    25  
    26  // TestLimits_Copy asserts Limits structs are deep copied.
    27  func TestLimits_Copy(t *testing.T) {
    28  	ci.Parallel(t)
    29  
    30  	o := DefaultLimits()
    31  	c := o.Copy()
    32  
    33  	// Assert changes to copy are not propagated to the original
    34  	c.HTTPSHandshakeTimeout = "1s"
    35  	c.HTTPMaxConnsPerClient = pointer.Of(50)
    36  	c.RPCHandshakeTimeout = "1s"
    37  	c.RPCMaxConnsPerClient = pointer.Of(50)
    38  
    39  	require.NotEqual(t, c.HTTPSHandshakeTimeout, o.HTTPSHandshakeTimeout)
    40  
    41  	// Pointers should be different
    42  	require.True(t, c.HTTPMaxConnsPerClient != o.HTTPMaxConnsPerClient)
    43  
    44  	require.NotEqual(t, c.HTTPMaxConnsPerClient, o.HTTPMaxConnsPerClient)
    45  	require.NotEqual(t, c.RPCHandshakeTimeout, o.RPCHandshakeTimeout)
    46  
    47  	// Pointers should be different
    48  	require.True(t, c.RPCMaxConnsPerClient != o.RPCMaxConnsPerClient)
    49  
    50  	require.NotEqual(t, c.RPCMaxConnsPerClient, o.RPCMaxConnsPerClient)
    51  }
    52  
    53  // TestLimits_Merge asserts non-zero fields from the method argument take
    54  // precedence over the existing limits.
    55  func TestLimits_Merge(t *testing.T) {
    56  	ci.Parallel(t)
    57  
    58  	l := Limits{}
    59  	o := DefaultLimits()
    60  	m := l.Merge(o)
    61  
    62  	// Operands should not change
    63  	require.Equal(t, Limits{}, l)
    64  	require.Equal(t, DefaultLimits(), o)
    65  
    66  	// m == o
    67  	require.Equal(t, m, DefaultLimits())
    68  
    69  	o.HTTPSHandshakeTimeout = "10s"
    70  	m2 := m.Merge(o)
    71  
    72  	// Operands should not change
    73  	require.Equal(t, m, DefaultLimits())
    74  
    75  	// Use short struct initialization style so it fails to compile if
    76  	// fields are added
    77  	expected := Limits{"10s", pointer.Of(100), "5s", pointer.Of(100)}
    78  	require.Equal(t, expected, m2)
    79  
    80  	// Mergin in 0 values should not change anything
    81  	m3 := m2.Merge(Limits{})
    82  	require.Equal(t, m2, m3)
    83  }