github.com/hernad/nomad@v1.6.112/nomad/structs/operator_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package structs 5 6 import ( 7 "testing" 8 9 "github.com/hernad/nomad/ci" 10 "github.com/hernad/nomad/helper/pointer" 11 "github.com/shoenig/test/must" 12 ) 13 14 func TestSchedulerConfiguration_WithNodePool(t *testing.T) { 15 ci.Parallel(t) 16 17 testCases := []struct { 18 name string 19 schedConfig *SchedulerConfiguration 20 pool *NodePool 21 expected *SchedulerConfiguration 22 }{ 23 { 24 name: "nil pool returns same config", 25 schedConfig: &SchedulerConfiguration{ 26 MemoryOversubscriptionEnabled: false, 27 SchedulerAlgorithm: SchedulerAlgorithmSpread, 28 }, 29 pool: nil, 30 expected: &SchedulerConfiguration{ 31 MemoryOversubscriptionEnabled: false, 32 SchedulerAlgorithm: SchedulerAlgorithmSpread, 33 }, 34 }, 35 { 36 name: "nil pool scheduler config returns same config", 37 schedConfig: &SchedulerConfiguration{ 38 MemoryOversubscriptionEnabled: false, 39 SchedulerAlgorithm: SchedulerAlgorithmSpread, 40 }, 41 pool: &NodePool{}, 42 expected: &SchedulerConfiguration{ 43 MemoryOversubscriptionEnabled: false, 44 SchedulerAlgorithm: SchedulerAlgorithmSpread, 45 }, 46 }, 47 { 48 name: "pool with memory oversubscription overwrites config", 49 schedConfig: &SchedulerConfiguration{ 50 MemoryOversubscriptionEnabled: false, 51 }, 52 pool: &NodePool{ 53 SchedulerConfiguration: &NodePoolSchedulerConfiguration{ 54 MemoryOversubscriptionEnabled: pointer.Of(true), 55 }, 56 }, 57 expected: &SchedulerConfiguration{ 58 MemoryOversubscriptionEnabled: true, 59 }, 60 }, 61 { 62 name: "pool with scheduler algorithm overwrites config", 63 schedConfig: &SchedulerConfiguration{ 64 SchedulerAlgorithm: SchedulerAlgorithmBinpack, 65 }, 66 pool: &NodePool{ 67 SchedulerConfiguration: &NodePoolSchedulerConfiguration{ 68 SchedulerAlgorithm: SchedulerAlgorithmSpread, 69 }, 70 }, 71 expected: &SchedulerConfiguration{ 72 SchedulerAlgorithm: SchedulerAlgorithmSpread, 73 }, 74 }, 75 { 76 name: "pool without memory oversubscription does not modify config", 77 schedConfig: &SchedulerConfiguration{ 78 MemoryOversubscriptionEnabled: false, 79 }, 80 pool: &NodePool{ 81 SchedulerConfiguration: &NodePoolSchedulerConfiguration{}, 82 }, 83 expected: &SchedulerConfiguration{ 84 MemoryOversubscriptionEnabled: false, 85 }, 86 }, 87 { 88 name: "pool without scheduler algorithm does not modify config", 89 schedConfig: &SchedulerConfiguration{ 90 SchedulerAlgorithm: SchedulerAlgorithmSpread, 91 }, 92 pool: &NodePool{ 93 SchedulerConfiguration: &NodePoolSchedulerConfiguration{}, 94 }, 95 expected: &SchedulerConfiguration{ 96 SchedulerAlgorithm: SchedulerAlgorithmSpread, 97 }, 98 }, 99 } 100 101 for _, tc := range testCases { 102 t.Run(tc.name, func(t *testing.T) { 103 got := tc.schedConfig.WithNodePool(tc.pool) 104 must.Eq(t, tc.expected, got) 105 must.NotEqOp(t, tc.schedConfig, got) 106 }) 107 } 108 }