ContainerImage.Pinniped/test/integration/api_discovery_test.go
Ryan Richard 6e59596285 Upon pod startup, update the Status of CredentialIssuerConfig
- Indicate the success or failure of the cluster signing key strategy
- Also introduce the concept of "capabilities" of an integration test
  cluster to allow the integration tests to be run against clusters
  that do or don't allow the borrowing of the cluster signing key
- Tests that are not expected to pass on clusters that lack the
  borrowing of the signing key capability are now ignored by
  calling the new library.SkipUnlessClusterHasCapability test helper
- Rename library.Getenv to library.GetEnv
- Add copyrights where they were missing
2020-08-24 18:07:34 -07:00

104 lines
3.1 KiB
Go

/*
Copyright 2020 VMware, Inc.
SPDX-License-Identifier: Apache-2.0
*/
package integration
import (
"testing"
"github.com/stretchr/testify/require"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/suzerain-io/pinniped/test/library"
)
func TestGetAPIResourceList(t *testing.T) {
library.SkipUnlessIntegration(t)
library.SkipUnlessClusterHasCapability(t, library.ClusterSigningKeyIsAvailable)
client := library.NewPinnipedClientset(t)
groups, resources, err := client.Discovery().ServerGroupsAndResources()
require.NoError(t, err)
groupName := "pinniped.dev"
actualGroup := findGroup(groupName, groups)
require.NotNil(t, actualGroup)
expectedGroup := &metav1.APIGroup{
Name: "pinniped.dev",
Versions: []metav1.GroupVersionForDiscovery{
{
GroupVersion: "pinniped.dev/v1alpha1",
Version: "v1alpha1",
},
},
PreferredVersion: metav1.GroupVersionForDiscovery{
GroupVersion: "pinniped.dev/v1alpha1",
Version: "v1alpha1",
},
}
require.Equal(t, expectedGroup, actualGroup)
actualPinnipedResources := findResources("pinniped.dev/v1alpha1", resources)
require.NotNil(t, actualPinnipedResources)
actualCrdPinnipedResources := findResources("crd.pinniped.dev/v1alpha1", resources)
require.NotNil(t, actualPinnipedResources)
expectedCredentialRequestAPIResource := metav1.APIResource{
Name: "credentialrequests",
Kind: "CredentialRequest",
Verbs: metav1.Verbs([]string{
"create",
}),
Namespaced: false,
// This is currently an empty string in the response; maybe it should not be
// empty? Seems like no harm in keeping it like this for now, but feel free
// to update in the future if there is a compelling reason to do so.
SingularName: "",
}
expectedCredentialIssuerConfigResource := metav1.APIResource{
Name: "credentialissuerconfigs",
SingularName: "credentialissuerconfig",
Namespaced: true,
Kind: "CredentialIssuerConfig",
Verbs: metav1.Verbs([]string{
"delete", "deletecollection", "get", "list", "patch", "create", "update", "watch",
}),
ShortNames: []string{"cic"},
StorageVersionHash: "unknown: to be filled in automatically below",
}
require.Len(t, actualPinnipedResources.APIResources, 1)
require.Equal(t, expectedCredentialRequestAPIResource, actualPinnipedResources.APIResources[0])
require.Len(t, actualCrdPinnipedResources.APIResources, 1)
actualAPIResource := actualCrdPinnipedResources.APIResources[0]
// workaround because its hard to predict the storage version hash (e.g. "t/+v41y+3e4=")
// so just don't worry about comparing that field
expectedCredentialIssuerConfigResource.StorageVersionHash = actualAPIResource.StorageVersionHash
require.Equal(t, expectedCredentialIssuerConfigResource, actualAPIResource)
}
func findGroup(name string, groups []*metav1.APIGroup) *metav1.APIGroup {
for _, group := range groups {
if group.Name == name {
return group
}
}
return nil
}
func findResources(groupVersion string, resources []*metav1.APIResourceList) *metav1.APIResourceList {
for _, resource := range resources {
if resource.GroupVersion == groupVersion {
return resource
}
}
return nil
}