github.com/docker/compose-on-kubernetes@v0.5.0/internal/registry/strategyprepare_test.go (about)

     1  package registry
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/docker/compose-on-kubernetes/api/compose/latest"
     7  	iv "github.com/docker/compose-on-kubernetes/internal/internalversion"
     8  	"github.com/stretchr/testify/assert"
     9  	"k8s.io/apiserver/pkg/authentication/user"
    10  	genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
    11  )
    12  
    13  func TestPrepareStackOwnership(t *testing.T) {
    14  	testuser := &user.DefaultInfo{
    15  		Name:   "test-user",
    16  		Groups: []string{"group1", "group2"},
    17  		Extra:  map[string][]string{"extra1": {"v1", "v2"}},
    18  	}
    19  	ctx := genericapirequest.WithUser(genericapirequest.NewDefaultContext(), testuser)
    20  	stack := iv.Stack{}
    21  	err := prepareStackOwnership()(ctx, nil, &stack)
    22  	assert.NoError(t, err)
    23  	assert.Equal(t, testuser.Name, stack.Spec.Owner.UserName)
    24  	assert.True(t, assert.ObjectsAreEqual(testuser.Groups, stack.Spec.Owner.Groups))
    25  	assert.True(t, assert.ObjectsAreEqual(testuser.Extra, stack.Spec.Owner.Extra))
    26  }
    27  
    28  func TestPrepareStackOwnershipNoUser(t *testing.T) {
    29  	stack := iv.Stack{}
    30  	err := prepareStackOwnership()(genericapirequest.NewDefaultContext(), nil, &stack)
    31  	assert.Error(t, err)
    32  }
    33  
    34  func TestSetFieldsV1beta1SameCompose(t *testing.T) {
    35  	oldStack := iv.Stack{
    36  		Spec: iv.StackSpec{
    37  			Stack:       &latest.StackSpec{},
    38  			ComposeFile: "test",
    39  		},
    40  	}
    41  	newStack := iv.Stack{
    42  		Spec: iv.StackSpec{
    43  			ComposeFile: "test",
    44  		},
    45  	}
    46  	err := prepareFieldsForUpdate(APIV1beta1)(nil, &oldStack, &newStack)
    47  	assert.NoError(t, err)
    48  	assert.Equal(t, oldStack.Spec.Stack, newStack.Spec.Stack)
    49  }
    50  
    51  func TestSetFieldsV1beta1DifferentCompose(t *testing.T) {
    52  	oldStack := iv.Stack{
    53  		Spec: iv.StackSpec{
    54  			Stack:       &latest.StackSpec{},
    55  			ComposeFile: "test",
    56  		},
    57  	}
    58  	newStack := iv.Stack{
    59  		Spec: iv.StackSpec{
    60  			Stack:       &latest.StackSpec{},
    61  			ComposeFile: "test2",
    62  		},
    63  	}
    64  	err := prepareFieldsForUpdate(APIV1beta1)(nil, &oldStack, &newStack)
    65  	assert.NoError(t, err)
    66  	assert.Nil(t, newStack.Spec.Stack)
    67  }
    68  
    69  func TestSetFieldsV1beta2SameStack(t *testing.T) {
    70  	oldStack := iv.Stack{
    71  		Spec: iv.StackSpec{
    72  			Stack:       &latest.StackSpec{},
    73  			ComposeFile: "test",
    74  		},
    75  	}
    76  	newStack := iv.Stack{
    77  		Spec: iv.StackSpec{
    78  			Stack: &latest.StackSpec{},
    79  		},
    80  	}
    81  	err := prepareFieldsForUpdate(APIV1beta2)(nil, &oldStack, &newStack)
    82  	assert.NoError(t, err)
    83  	assert.Equal(t, oldStack.Spec.ComposeFile, newStack.Spec.ComposeFile)
    84  }
    85  
    86  func TestSetFieldsV1beta2DifferentStack(t *testing.T) {
    87  	oldStack := iv.Stack{
    88  		Spec: iv.StackSpec{
    89  			Stack:       &latest.StackSpec{},
    90  			ComposeFile: "test",
    91  		},
    92  	}
    93  	newStack := iv.Stack{
    94  		Spec: iv.StackSpec{
    95  			Stack: &latest.StackSpec{
    96  				Services: []latest.ServiceConfig{
    97  					{},
    98  				},
    99  			},
   100  		},
   101  	}
   102  	err := prepareFieldsForUpdate(APIV1beta2)(nil, &oldStack, &newStack)
   103  	assert.NoError(t, err)
   104  	assert.Equal(t, composeOutOfDate+oldStack.Spec.ComposeFile, newStack.Spec.ComposeFile)
   105  }
   106  
   107  func TestPrepareStackFromValidComposefile(t *testing.T) {
   108  	stack := iv.Stack{
   109  		Spec: iv.StackSpec{
   110  			ComposeFile: `version: '3.2'
   111  services:
   112    front:
   113      image: nginx:1.12.1-alpine
   114      ports:
   115      - 80:80`,
   116  		},
   117  	}
   118  	err := prepareStackFromComposefile(false)(nil, nil, &stack)
   119  	assert.NoError(t, err)
   120  	assert.NotNil(t, stack.Spec.Stack)
   121  }
   122  
   123  func TestPrepareStackFromInvalidComposefile(t *testing.T) {
   124  	stack := iv.Stack{
   125  		Spec: iv.StackSpec{
   126  			ComposeFile: `test`,
   127  		},
   128  	}
   129  	err := prepareStackFromComposefile(false)(nil, nil, &stack)
   130  	assert.Error(t, err)
   131  }