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  }