109 lines
2.8 KiB
Go
109 lines
2.8 KiB
Go
|
// Copyright (c) HashiCorp, Inc.
|
||
|
// SPDX-License-Identifier: MPL-2.0
|
||
|
|
||
|
package structs
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/hashicorp/nomad/ci"
|
||
|
"github.com/hashicorp/nomad/helper/pointer"
|
||
|
"github.com/shoenig/test/must"
|
||
|
)
|
||
|
|
||
|
func TestSchedulerConfiguration_WithNodePool(t *testing.T) {
|
||
|
ci.Parallel(t)
|
||
|
|
||
|
testCases := []struct {
|
||
|
name string
|
||
|
schedConfig *SchedulerConfiguration
|
||
|
pool *NodePool
|
||
|
expected *SchedulerConfiguration
|
||
|
}{
|
||
|
{
|
||
|
name: "nil pool returns same config",
|
||
|
schedConfig: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: false,
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
pool: nil,
|
||
|
expected: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: false,
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "nil pool scheduler config returns same config",
|
||
|
schedConfig: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: false,
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
pool: &NodePool{},
|
||
|
expected: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: false,
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "pool with memory oversubscription overwrites config",
|
||
|
schedConfig: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: false,
|
||
|
},
|
||
|
pool: &NodePool{
|
||
|
SchedulerConfiguration: &NodePoolSchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: pointer.Of(true),
|
||
|
},
|
||
|
},
|
||
|
expected: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: true,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "pool with scheduler algorithm overwrites config",
|
||
|
schedConfig: &SchedulerConfiguration{
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmBinpack,
|
||
|
},
|
||
|
pool: &NodePool{
|
||
|
SchedulerConfiguration: &NodePoolSchedulerConfiguration{
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
},
|
||
|
expected: &SchedulerConfiguration{
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "pool without memory oversubscription does not modify config",
|
||
|
schedConfig: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: false,
|
||
|
},
|
||
|
pool: &NodePool{
|
||
|
SchedulerConfiguration: &NodePoolSchedulerConfiguration{},
|
||
|
},
|
||
|
expected: &SchedulerConfiguration{
|
||
|
MemoryOversubscriptionEnabled: false,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "pool without scheduler algorithm does not modify config",
|
||
|
schedConfig: &SchedulerConfiguration{
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
pool: &NodePool{
|
||
|
SchedulerConfiguration: &NodePoolSchedulerConfiguration{},
|
||
|
},
|
||
|
expected: &SchedulerConfiguration{
|
||
|
SchedulerAlgorithm: SchedulerAlgorithmSpread,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tc := range testCases {
|
||
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
got := tc.schedConfig.WithNodePool(tc.pool)
|
||
|
must.Eq(t, tc.expected, got)
|
||
|
must.NotEqOp(t, tc.schedConfig, got)
|
||
|
})
|
||
|
}
|
||
|
}
|