github.com/docker/compose-on-kubernetes@v0.5.0/internal/registry/tableconvert_test.go (about) 1 package registry 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/docker/compose-on-kubernetes/api/compose/latest" 9 iv "github.com/docker/compose-on-kubernetes/internal/internalversion" 10 "github.com/stretchr/testify/assert" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" 13 "k8s.io/apimachinery/pkg/runtime" 14 ) 15 16 func generateRow(name string, services int, 17 ports string, status string, 18 created metav1.Time, object runtime.Object) metav1beta1.TableRow { 19 return metav1beta1.TableRow{ 20 Object: runtime.RawExtension{Object: object}, 21 Cells: []interface{}{ 22 name, services, ports, status, created, 23 }, 24 } 25 } 26 27 func TestConvertTable(t *testing.T) { 28 stackWithNoSpecNoStatus := &iv.Stack{ 29 ObjectMeta: metav1.ObjectMeta{ 30 Name: "test", 31 }, 32 } 33 stackWithNoSpec := &iv.Stack{ 34 ObjectMeta: metav1.ObjectMeta{ 35 Name: "test", 36 }, 37 Status: &iv.StackStatus{ 38 Phase: iv.StackAvailable, 39 Message: "test message", 40 }, 41 } 42 stack2Services := &iv.Stack{ 43 ObjectMeta: metav1.ObjectMeta{ 44 Name: "test", 45 CreationTimestamp: metav1.Time{Time: time.Now()}, 46 }, 47 Status: &iv.StackStatus{ 48 Phase: iv.StackAvailable, 49 Message: "test message", 50 }, 51 Spec: iv.StackSpec{ 52 Stack: &latest.StackSpec{ 53 Services: []latest.ServiceConfig{ 54 { 55 Name: "no-ports", 56 }, 57 { 58 Name: "with-ports", 59 Ports: []latest.ServicePortConfig{ 60 { 61 Target: 88, 62 Protocol: "", 63 }, 64 { 65 Target: 80, 66 Protocol: "TCP", 67 Published: 80, 68 }, 69 }, 70 }, 71 }, 72 }, 73 }, 74 } 75 cases := []struct { 76 name string 77 object runtime.Object 78 expectedError string 79 expectedRows []metav1beta1.TableRow 80 }{ 81 { 82 name: "not a stack", 83 object: &metav1beta1.Table{}, 84 expectedError: "unexpected object type *v1.Table", 85 }, 86 { 87 name: "single-nospec-nostatus", 88 object: stackWithNoSpecNoStatus, 89 expectedRows: []metav1beta1.TableRow{generateRow("test", 0, "", "", metav1.Time{}, stackWithNoSpecNoStatus)}, 90 }, 91 { 92 name: "list-nospec-nostatus", 93 object: &iv.StackList{ 94 Items: []iv.Stack{*stackWithNoSpecNoStatus}, 95 }, 96 expectedRows: []metav1beta1.TableRow{generateRow("test", 0, "", "", metav1.Time{}, stackWithNoSpecNoStatus)}, 97 }, 98 { 99 name: "list-nospec", 100 object: &iv.StackList{ 101 Items: []iv.Stack{*stackWithNoSpec}, 102 }, 103 expectedRows: []metav1beta1.TableRow{generateRow("test", 0, "", "Available (test message)", metav1.Time{}, stackWithNoSpec)}, 104 }, 105 { 106 name: "single", 107 object: stack2Services, 108 expectedRows: []metav1beta1.TableRow{generateRow("test", 2, "with-ports: *,80", "Available (test message)", stack2Services.CreationTimestamp, stack2Services)}, 109 }, 110 { 111 name: "list-mix", 112 object: &iv.StackList{ 113 Items: []iv.Stack{*stackWithNoSpecNoStatus, *stackWithNoSpec, *stack2Services}, 114 }, 115 expectedRows: []metav1beta1.TableRow{ 116 generateRow("test", 0, "", "", metav1.Time{}, stackWithNoSpecNoStatus), 117 generateRow("test", 0, "", "Available (test message)", metav1.Time{}, stackWithNoSpec), 118 generateRow("test", 2, "with-ports: *,80", "Available (test message)", stack2Services.CreationTimestamp, stack2Services), 119 }, 120 }, 121 } 122 123 for _, c := range cases { 124 t.Run(c.name, func(t *testing.T) { 125 testee := stackTableConvertor{} 126 result, err := testee.ConvertToTable(context.Background(), c.object, nil) 127 if c.expectedError != "" { 128 assert.EqualError(t, err, c.expectedError) 129 } else { 130 assert.NoError(t, err) 131 assert.NotNil(t, result) 132 if result == nil { 133 return 134 } 135 assert.EqualValues(t, c.expectedRows, result.Rows) 136 } 137 }) 138 } 139 }