github.com/hashicorp/nomad/api@v0.0.0-20240306165712-3193ac204f65/resources_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package api
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/hashicorp/nomad/api/internal/testutil"
    10  	"github.com/shoenig/test/must"
    11  )
    12  
    13  func TestResources_Canonicalize(t *testing.T) {
    14  	testutil.Parallel(t)
    15  	testCases := []struct {
    16  		name     string
    17  		input    *Resources
    18  		expected *Resources
    19  	}{
    20  		{
    21  			name:     "empty",
    22  			input:    &Resources{},
    23  			expected: DefaultResources(),
    24  		},
    25  		{
    26  			name: "cores",
    27  			input: &Resources{
    28  				Cores:    pointerOf(2),
    29  				MemoryMB: pointerOf(1024),
    30  			},
    31  			expected: &Resources{
    32  				CPU:      pointerOf(0),
    33  				Cores:    pointerOf(2),
    34  				MemoryMB: pointerOf(1024),
    35  			},
    36  		},
    37  		{
    38  			name: "cpu",
    39  			input: &Resources{
    40  				CPU:      pointerOf(500),
    41  				MemoryMB: pointerOf(1024),
    42  			},
    43  			expected: &Resources{
    44  				CPU:      pointerOf(500),
    45  				Cores:    pointerOf(0),
    46  				MemoryMB: pointerOf(1024),
    47  			},
    48  		},
    49  	}
    50  
    51  	for _, tc := range testCases {
    52  		t.Run(tc.name, func(t *testing.T) {
    53  			tc.input.Canonicalize()
    54  			must.Eq(t, tc.expected, tc.input)
    55  		})
    56  	}
    57  }
    58  
    59  func TestResources_Merge(t *testing.T) {
    60  	testutil.Parallel(t)
    61  
    62  	none := &NUMAResource{Affinity: "none"}
    63  	prefer := &NUMAResource{Affinity: "prefer"}
    64  
    65  	cases := []struct {
    66  		name     string
    67  		resource *Resources
    68  		other    *Resources
    69  		exp      *Resources
    70  	}{
    71  		{
    72  			name:     "merge nil numa",
    73  			resource: &Resources{NUMA: none},
    74  			other:    &Resources{NUMA: nil},
    75  			exp:      &Resources{NUMA: none},
    76  		},
    77  		{
    78  			name:     "merge non-nil numa",
    79  			resource: &Resources{NUMA: none},
    80  			other:    &Resources{NUMA: prefer},
    81  			exp:      &Resources{NUMA: prefer},
    82  		},
    83  	}
    84  
    85  	for _, tc := range cases {
    86  		tc.resource.Merge(tc.other)
    87  		must.Eq(t, tc.exp, tc.resource)
    88  	}
    89  }
    90  
    91  func TestNUMAResource_Copy(t *testing.T) {
    92  	testutil.Parallel(t)
    93  
    94  	r1 := &NUMAResource{Affinity: "none"}
    95  	r2 := r1.Copy()
    96  	r1.Affinity = "require"
    97  	must.Eq(t, "require", r1.Affinity)
    98  	must.Eq(t, "none", r2.Affinity)
    99  }
   100  
   101  func TestNUMAResource_Canonicalize(t *testing.T) {
   102  	testutil.Parallel(t)
   103  
   104  	var n1 *NUMAResource
   105  	n1.Canonicalize()
   106  	must.Nil(t, n1)
   107  
   108  	var n2 = &NUMAResource{Affinity: ""}
   109  	n2.Canonicalize()
   110  	must.Eq(t, &NUMAResource{Affinity: "none"}, n2)
   111  }