github.com/docker/compose-on-kubernetes@v0.5.0/internal/controller/childrenstore_test.go (about) 1 package controller 2 3 import ( 4 "reflect" 5 "testing" 6 "time" 7 8 "github.com/docker/compose-on-kubernetes/api/labels" 9 "github.com/stretchr/testify/assert" 10 appstypes "k8s.io/api/apps/v1" 11 coretypes "k8s.io/api/core/v1" 12 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 13 "k8s.io/client-go/tools/cache" 14 ) 15 16 func objectMetaForStack(namespace, name, stackName string) metav1.ObjectMeta { 17 return metav1.ObjectMeta{ 18 Namespace: namespace, 19 Name: name, 20 Labels: labels.ForService(stackName, name), 21 } 22 } 23 24 func testDeploymentForStack(namespace, name, stackName string) interface{} { 25 return &appstypes.Deployment{ 26 ObjectMeta: objectMetaForStack(namespace, name, stackName), 27 } 28 } 29 func testStatefulsetForStack(namespace, name, stackName string) interface{} { 30 return &appstypes.StatefulSet{ 31 ObjectMeta: objectMetaForStack(namespace, name, stackName), 32 } 33 } 34 func testDaemonsetForStack(namespace, name, stackName string) interface{} { 35 return &appstypes.DaemonSet{ 36 ObjectMeta: objectMetaForStack(namespace, name, stackName), 37 } 38 } 39 func testServiceForStack(namespace, name, stackName string) interface{} { 40 return &coretypes.Service{ 41 ObjectMeta: objectMetaForStack(namespace, name, stackName), 42 } 43 } 44 func TestGetCurrentStackState(t *testing.T) { 45 var withinStack []interface{} 46 indexers := cache.Indexers{ 47 "by-stack": byStackIndexer, 48 } 49 deployments := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, indexers) 50 statefulsets := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, indexers) 51 daemonsets := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, indexers) 52 services := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, indexers) 53 54 d := testDeploymentForStack("test-ns", "dep1", "test-stack") 55 deployments.Add(d) 56 withinStack = append(withinStack, d) 57 d = testDaemonsetForStack("test-ns", "daem1", "test-stack") 58 daemonsets.Add(d) 59 withinStack = append(withinStack, d) 60 d = testStatefulsetForStack("test-ns", "stateful1", "test-stack") 61 statefulsets.Add(d) 62 withinStack = append(withinStack, d) 63 d = testServiceForStack("test-ns", "svc1", "test-stack") 64 services.Add(d) 65 withinStack = append(withinStack, d) 66 67 d = testDeploymentForStack("test-ns", "dep2", "other-stack") 68 deployments.Add(d) 69 d = testDaemonsetForStack("test-ns", "daem2", "other-stack") 70 daemonsets.Add(d) 71 d = testStatefulsetForStack("test-ns", "stateful2", "other-stack") 72 statefulsets.Add(d) 73 d = testServiceForStack("test-ns", "svc2", "other-stack") 74 services.Add(d) 75 76 d = testDeploymentForStack("other-ns", "dep3", "test-stack") 77 deployments.Add(d) 78 d = testDaemonsetForStack("other-ns", "daem3", "test-stack") 79 daemonsets.Add(d) 80 d = testStatefulsetForStack("other-ns", "stateful3", "test-stack") 81 statefulsets.Add(d) 82 d = testServiceForStack("other-ns", "svc3", "test-stack") 83 services.Add(d) 84 85 testee := &ChildrenListener{ 86 daemonsets: daemonsets, 87 deployments: deployments, 88 services: services, 89 statefulsets: statefulsets, 90 } 91 92 result, err := testee.getCurrentStackState("test-ns/test-stack") 93 assert.NoError(t, err) 94 flatten := result.FlattenResources() 95 assert.Equal(t, len(withinStack), len(flatten)) 96 for _, item := range withinStack { 97 found := false 98 for _, other := range flatten { 99 if reflect.DeepEqual(other, item) { 100 found = true 101 break 102 } 103 } 104 assert.True(t, found) 105 } 106 } 107 108 func TestRandomDuration(t *testing.T) { 109 for ix := 0; ix < 10000; ix++ { 110 result := randomDuration(time.Hour * 12) 111 assert.True(t, result >= time.Hour*12) 112 assert.True(t, result <= time.Hour*24) 113 } 114 }