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  }