github.com/itscaro/cli@v0.0.0-20190705081621-c9db0fe93829/kubernetes/check_test.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gotest.tools/assert"
     7  	is "gotest.tools/assert/cmp"
     8  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     9  )
    10  
    11  func TestGetStackAPIVersion(t *testing.T) {
    12  	var tests = []struct {
    13  		description   string
    14  		groups        *metav1.APIGroupList
    15  		experimental  bool
    16  		err           bool
    17  		expectedStack StackVersion
    18  	}{
    19  		{"no stack api", makeGroups(), false, true, ""},
    20  		{"v1beta1", makeGroups(groupVersion{"compose.docker.com", []string{"v1beta1"}}), false, false, StackAPIV1Beta1},
    21  		{"v1beta2", makeGroups(groupVersion{"compose.docker.com", []string{"v1beta2"}}), false, false, StackAPIV1Beta2},
    22  		{"most recent has precedence", makeGroups(groupVersion{"compose.docker.com", []string{"v1beta1", "v1beta2"}}), false, false, StackAPIV1Beta2},
    23  		{"most recent has precedence", makeGroups(groupVersion{"compose.docker.com", []string{"v1beta1", "v1beta2", "v1alpha3"}}), false, false, StackAPIV1Beta2},
    24  		{"most recent has precedence", makeGroups(groupVersion{"compose.docker.com", []string{"v1beta1", "v1beta2", "v1alpha3"}}), true, false, StackAPIV1Alpha3},
    25  	}
    26  
    27  	for _, test := range tests {
    28  		version, err := getAPIVersion(test.groups, test.experimental)
    29  		if test.err {
    30  			assert.ErrorContains(t, err, "")
    31  		} else {
    32  			assert.NilError(t, err)
    33  		}
    34  		assert.Check(t, is.Equal(test.expectedStack, version))
    35  	}
    36  }
    37  
    38  type groupVersion struct {
    39  	name     string
    40  	versions []string
    41  }
    42  
    43  func makeGroups(versions ...groupVersion) *metav1.APIGroupList {
    44  	groups := make([]metav1.APIGroup, len(versions))
    45  	for i := range versions {
    46  		groups[i].Name = versions[i].name
    47  		for _, v := range versions[i].versions {
    48  			groups[i].Versions = append(groups[i].Versions, metav1.GroupVersionForDiscovery{Version: v})
    49  		}
    50  	}
    51  	return &metav1.APIGroupList{
    52  		Groups: groups,
    53  	}
    54  }