github.com/docker/compose-on-kubernetes@v0.5.0/internal/convert/stack_test.go (about) 1 package convert 2 3 import ( 4 "testing" 5 6 "github.com/docker/compose-on-kubernetes/internal/stackresources" 7 . "github.com/docker/compose-on-kubernetes/internal/test/builders" 8 "github.com/stretchr/testify/assert" 9 appsv1 "k8s.io/api/apps/v1" 10 ) 11 12 var expectedAnnotationsOnCreate = map[string]string{ 13 expectedGenerationAnnotation: "1", 14 } 15 16 func TestLabels(t *testing.T) { 17 s, err := StackToStack(*Stack("demo", 18 WithService("foo", 19 Image("redis"), 20 WithLabel("foo", "bar"), 21 Deploy(WithDeployLabel("bar", "baz")), 22 ), 23 ), loadBalancerServiceStrategy{}, stackresources.EmptyStackState) 24 assert.NoError(t, err) 25 assert.Equal(t, s.Services["foo"].Labels, map[string]string{ 26 "com.docker.service.id": "demo-foo", 27 "com.docker.service.name": "foo", 28 "com.docker.stack.namespace": "demo", 29 "bar": "baz", 30 }) 31 assert.NotNil(t, s.Deployments["foo"].Labels, map[string]string{ 32 "foo": "bar", 33 }) 34 } 35 36 func TestSample(t *testing.T) { 37 s, err := StackToStack(*Stack("demo", 38 WithService("front", 39 Image("dockerdemos/lab-web"), 40 WithPort(80, Published(80)), 41 ), 42 WithService("back", 43 Image("dockerdemos/lab-words-dispatcher"), 44 ), 45 WithService("words", 46 Image("dockerdemos/lab-words-java"), 47 Deploy( 48 Resources( 49 Limits(Memory(64*1024*1024)), 50 Reservations(Memory(64*1024*1024)), 51 ), 52 ), 53 ), 54 WithService("mongo", Image("mongo:3.5.8")), 55 ), loadBalancerServiceStrategy{}, stackresources.EmptyStackState) 56 assert.NoError(t, err) 57 58 assert.Contains(t, s.Deployments, "back") 59 assertImage(t, "dockerdemos/lab-words-dispatcher", s.Deployments["back"]) 60 61 assert.Contains(t, s.Deployments, "front") 62 assertImage(t, "dockerdemos/lab-web", s.Deployments["front"]) 63 64 assert.Contains(t, s.Deployments, "mongo") 65 assertImage(t, "mongo:3.5.8", s.Deployments["mongo"]) 66 67 assert.Contains(t, s.Deployments, "words") 68 assertImage(t, "dockerdemos/lab-words-java", s.Deployments["words"]) 69 } 70 71 func assertImage(t *testing.T, expected string, deployment appsv1.Deployment) { 72 assert.Equal(t, expected, deployment.Spec.Template.Spec.Containers[0].Image) 73 } 74 75 func TestUnsupportedPVInDaemonSet(t *testing.T) { 76 _, err := StackToStack(*Stack("demo", 77 WithService("front", 78 Image("nginx"), 79 WithVolume(Source("dbdata"), Target("/data"), Volume), 80 Deploy(ModeGlobal), 81 ), 82 ), loadBalancerServiceStrategy{}, stackresources.EmptyStackState) 83 assert.EqualError(t, err, "using persistent volumes in a global service is not supported yet") 84 } 85 86 func TestNilStackSpec(t *testing.T) { 87 stack := Stack("nilstack", 88 WithService("foo", 89 Image("redis"))) 90 stack.Spec = nil 91 _, err := StackToStack(*stack, loadBalancerServiceStrategy{}, stackresources.EmptyStackState) 92 assert.EqualError(t, err, "stack spec is nil") 93 } 94 95 func TestPreserveServiceClusterIPOnDirty(t *testing.T) { 96 s, err := StackToStack(*Stack("demo", 97 WithService("front", 98 Image("dockerdemos/lab-web"), 99 WithPort(80, Published(80)), 100 ), 101 ), loadBalancerServiceStrategy{}, stackresources.EmptyStackState) 102 assert.NoError(t, err) 103 existingService := s.Services["front-published"] 104 existingService.Spec.ClusterIP = "1.2.3.4" 105 newState, err := stackresources.NewStackState(&existingService) 106 assert.NoError(t, err) 107 s, err = StackToStack(*Stack("demo", 108 WithService("front", 109 Image("dockerdemos/lab-web"), 110 WithPort(80, Published(81)), 111 ), 112 ), loadBalancerServiceStrategy{}, newState) 113 assert.NoError(t, err) 114 updatedService := s.Services["front-published"] 115 assert.Equal(t, int32(81), updatedService.Spec.Ports[0].Port) 116 assert.Equal(t, "1.2.3.4", updatedService.Spec.ClusterIP) 117 }