mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
fix: Equals and Clone for configs (#235)
This commit is contained in:
@@ -1,11 +1,19 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// boolPtr is a convenience function to create a pointer to a uint64 value
|
||||
// TODO: Make this a generic function that works for any type
|
||||
func boolPtr(b bool) *bool {
|
||||
return &b
|
||||
}
|
||||
|
||||
func TestServiceSpec_Validate_CaddyAndPorts(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
@@ -197,3 +205,78 @@ func TestServiceSpec_Validate_CaddyAndPorts(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestContainerSpec_Clone(t *testing.T) {
|
||||
mode := os.FileMode(0o644)
|
||||
original := ContainerSpec{
|
||||
Command: []string{"sh", "-c", "echo hello"},
|
||||
Entrypoint: []string{"/bin/bash"},
|
||||
Env: EnvVars{
|
||||
"FOO": "bar",
|
||||
"BAZ": "qux",
|
||||
},
|
||||
Image: "nginx:latest",
|
||||
Init: boolPtr(true),
|
||||
LogDriver: &LogDriver{
|
||||
Name: "json-file",
|
||||
Options: map[string]string{
|
||||
"max-size": "10m",
|
||||
},
|
||||
},
|
||||
Privileged: true,
|
||||
PullPolicy: PullPolicyAlways,
|
||||
Resources: ContainerResources{
|
||||
CPU: 1234,
|
||||
Memory: 2345,
|
||||
MemoryReservation: 3456,
|
||||
},
|
||||
User: "1000:1000",
|
||||
Volumes: []string{"/data", "/config"},
|
||||
VolumeMounts: []VolumeMount{
|
||||
{VolumeName: "data", ContainerPath: "/data"},
|
||||
},
|
||||
ConfigMounts: []ConfigMount{
|
||||
{ConfigName: "app-config", ContainerPath: "/etc/config", Mode: &mode},
|
||||
},
|
||||
}
|
||||
|
||||
cloned := original.Clone()
|
||||
|
||||
// Check ContainerSpec equality
|
||||
assert.True(t, original.Equals(cloned))
|
||||
|
||||
// Verify deep copy by modifying the original
|
||||
stringModified := "modified"
|
||||
original.Command[0] = stringModified
|
||||
original.Entrypoint[0] = stringModified
|
||||
original.Env["FOO"] = stringModified
|
||||
original.LogDriver.Options["max-size"] = stringModified
|
||||
original.Volumes[0] = stringModified
|
||||
original.VolumeMounts[0].ContainerPath = stringModified
|
||||
original.ConfigMounts[0].ContainerPath = stringModified
|
||||
*original.ConfigMounts[0].Mode = 0o755 // Modify the Mode pointer value
|
||||
|
||||
assert.False(t, original.Equals(cloned))
|
||||
// Assert cloned values are unchanged
|
||||
assert.Equal(t, "sh", cloned.Command[0])
|
||||
assert.Equal(t, "/bin/bash", cloned.Entrypoint[0])
|
||||
assert.Equal(t, "bar", cloned.Env["FOO"])
|
||||
assert.Equal(t, "qux", cloned.Env["BAZ"])
|
||||
assert.Equal(t, "nginx:latest", cloned.Image)
|
||||
assert.NotNil(t, cloned.Init)
|
||||
assert.Equal(t, true, *cloned.Init)
|
||||
assert.NotNil(t, cloned.LogDriver)
|
||||
assert.Equal(t, "json-file", cloned.LogDriver.Name)
|
||||
assert.Equal(t, "10m", cloned.LogDriver.Options["max-size"])
|
||||
assert.Equal(t, true, cloned.Privileged)
|
||||
assert.Equal(t, PullPolicyAlways, cloned.PullPolicy)
|
||||
assert.Equal(t, int64(1234), cloned.Resources.CPU)
|
||||
assert.Equal(t, int64(2345), cloned.Resources.Memory)
|
||||
assert.Equal(t, int64(3456), cloned.Resources.MemoryReservation)
|
||||
assert.Equal(t, "1000:1000", cloned.User)
|
||||
assert.Equal(t, "/data", cloned.Volumes[0])
|
||||
assert.Equal(t, "/data", cloned.VolumeMounts[0].ContainerPath)
|
||||
assert.Equal(t, "/etc/config", cloned.ConfigMounts[0].ContainerPath)
|
||||
assert.NotNil(t, cloned.ConfigMounts[0].Mode)
|
||||
assert.Equal(t, os.FileMode(0o644), *cloned.ConfigMounts[0].Mode, "Mode should be deep copied")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user