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  }