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  }