fix(dockerCompose): add ServiceDeploy.MergeFirstWin()
This commit is contained in:
parent
23290fbd5d
commit
4c3c6cd5d2
@ -732,6 +732,28 @@ func (sd *ServiceDeploy) Equal(equalable Equalable) bool {
|
||||
}
|
||||
}
|
||||
|
||||
// MergeFirstWin merges adds or overwrite the attributes of the passed
|
||||
// serviceDeploy with the existing one.
|
||||
func (sd *ServiceDeploy) MergeFirstWin(serviceDeploy *ServiceDeploy) {
|
||||
switch {
|
||||
case sd == nil && serviceDeploy == nil:
|
||||
fallthrough
|
||||
case sd != nil && serviceDeploy == nil:
|
||||
return
|
||||
|
||||
// WARN: It's not possible to change the memory pointer sd *ServiceDeploy
|
||||
// to a new initialized serviceDeploy without returning the ServiceDeploy
|
||||
// it self.
|
||||
//
|
||||
// case sd == nil && serviceDeploy != nil:
|
||||
// sd = NewServiceDeploy()
|
||||
// fallthrough
|
||||
|
||||
default:
|
||||
sd.mergeFirstWinDeployResources(serviceDeploy.Resources)
|
||||
}
|
||||
}
|
||||
|
||||
// MergeLastWin merges adds or overwrite the attributes of the passed
|
||||
// serviceDeploy with the existing one.
|
||||
func (sd *ServiceDeploy) MergeLastWin(serviceDeploy *ServiceDeploy) {
|
||||
@ -754,6 +776,19 @@ func (sd *ServiceDeploy) MergeLastWin(serviceDeploy *ServiceDeploy) {
|
||||
}
|
||||
}
|
||||
|
||||
func (sd *ServiceDeploy) mergeFirstWinDeployResources(resources *ServiceDeployResources) {
|
||||
switch {
|
||||
case sd.Resources == nil && resources != nil:
|
||||
sd.Resources = resources
|
||||
case sd.Resources != nil && resources == nil:
|
||||
fallthrough
|
||||
case sd.Resources == nil && resources == nil:
|
||||
return
|
||||
default:
|
||||
sd.Resources.MergeFirstWin(resources)
|
||||
}
|
||||
}
|
||||
|
||||
func (sd *ServiceDeploy) mergeLastWinDeployResources(resources *ServiceDeployResources) {
|
||||
switch {
|
||||
case sd.Resources == nil && resources != nil:
|
||||
|
@ -1295,6 +1295,68 @@ func TestSecretDeploy_Equal(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceDeploy_MergeFirstWin(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
testCases := []struct {
|
||||
serviceDeploymentA *dockerCompose.ServiceDeploy
|
||||
serviceDeploymentB *dockerCompose.ServiceDeploy
|
||||
expectedServiceDeployment *dockerCompose.ServiceDeploy
|
||||
}{
|
||||
{
|
||||
serviceDeploymentA: nil,
|
||||
serviceDeploymentB: nil,
|
||||
expectedServiceDeployment: nil,
|
||||
},
|
||||
{
|
||||
serviceDeploymentA: &dockerCompose.ServiceDeploy{
|
||||
Resources: nil,
|
||||
},
|
||||
serviceDeploymentB: &dockerCompose.ServiceDeploy{
|
||||
Resources: nil,
|
||||
},
|
||||
expectedServiceDeployment: &dockerCompose.ServiceDeploy{
|
||||
Resources: nil,
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentA: &dockerCompose.ServiceDeploy{
|
||||
Resources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
},
|
||||
serviceDeploymentB: &dockerCompose.ServiceDeploy{
|
||||
Resources: nil,
|
||||
},
|
||||
expectedServiceDeployment: &dockerCompose.ServiceDeploy{
|
||||
Resources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentA: &dockerCompose.ServiceDeploy{
|
||||
Resources: nil,
|
||||
},
|
||||
serviceDeploymentB: &dockerCompose.ServiceDeploy{
|
||||
Resources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
},
|
||||
expectedServiceDeployment: &dockerCompose.ServiceDeploy{
|
||||
Resources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for i, testCase := range testCases {
|
||||
testCase.serviceDeploymentA.MergeLastWin(testCase.serviceDeploymentB)
|
||||
require.True(testCase.expectedServiceDeployment.Equal(testCase.serviceDeploymentA), "Failed test case %v", i)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceDeploy_MergeLastWin(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
@ -1414,135 +1476,6 @@ func TestSecretDeployResources_Equal(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceDeployResources_MergeLastWin(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
testCases := []struct {
|
||||
serviceDeploymentResourcesA *dockerCompose.ServiceDeployResources
|
||||
serviceDeploymentResourcesB *dockerCompose.ServiceDeployResources
|
||||
expectedServiceDeploymentResources *dockerCompose.ServiceDeployResources
|
||||
}{
|
||||
{
|
||||
serviceDeploymentResourcesA: nil,
|
||||
serviceDeploymentResourcesB: nil,
|
||||
expectedServiceDeploymentResources: nil,
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: nil,
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: nil,
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for i, testCase := range testCases {
|
||||
testCase.serviceDeploymentResourcesA.MergeLastWin(testCase.serviceDeploymentResourcesB)
|
||||
require.True(testCase.expectedServiceDeploymentResources.Equal(testCase.serviceDeploymentResourcesA), "Failed test case %v", i)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceDeployResources_MergeFirstWin(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
@ -1692,6 +1625,135 @@ func TestServiceDeployResources_MergeFirstWin(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceDeployResources_MergeLastWin(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
testCases := []struct {
|
||||
serviceDeploymentResourcesA *dockerCompose.ServiceDeployResources
|
||||
serviceDeploymentResourcesB *dockerCompose.ServiceDeployResources
|
||||
expectedServiceDeploymentResources *dockerCompose.ServiceDeployResources
|
||||
}{
|
||||
{
|
||||
serviceDeploymentResourcesA: nil,
|
||||
serviceDeploymentResourcesB: nil,
|
||||
expectedServiceDeploymentResources: nil,
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Limits: nil,
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Limits: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: nil,
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: nil,
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
serviceDeploymentResourcesA: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "1",
|
||||
Memory: "500",
|
||||
},
|
||||
},
|
||||
serviceDeploymentResourcesB: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
expectedServiceDeploymentResources: &dockerCompose.ServiceDeployResources{
|
||||
Reservations: &dockerCompose.ServiceDeployResourcesLimits{
|
||||
CPUs: "2",
|
||||
Memory: "1000",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for i, testCase := range testCases {
|
||||
testCase.serviceDeploymentResourcesA.MergeLastWin(testCase.serviceDeploymentResourcesB)
|
||||
require.True(testCase.expectedServiceDeploymentResources.Equal(testCase.serviceDeploymentResourcesA), "Failed test case %v", i)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceDeployResourcesLimits_Equal(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user