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 }