mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #56328 from sttts/sttts-openapi-aggregation-integration-test
Automatic merge from submit-queue (batch tested with PRs 56217, 56268, 56263, 56328, 56200). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. kube-apiserver: integration test to smoke test OpenAPI aggregation Replaces https://github.com/kubernetes/kubernetes/pull/51715. This is mostly https://github.com/kubernetes/kubernetes/pull/51715, but rebased to current master.
This commit is contained in:
commit
91920d664d
@ -29,6 +29,7 @@ go_test(
|
|||||||
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/api/networking/v1:go_default_library",
|
"//vendor/k8s.io/api/networking/v1:go_default_library",
|
||||||
|
"//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library",
|
||||||
"//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library",
|
"//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library",
|
||||||
"//vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library",
|
"//vendor/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library",
|
||||||
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
@ -49,6 +50,7 @@ go_test(
|
|||||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
|
"//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
|
||||||
"//vendor/k8s.io/client-go/rest:go_default_library",
|
"//vendor/k8s.io/client-go/rest:go_default_library",
|
||||||
|
"//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,21 +17,25 @@ limitations under the License.
|
|||||||
package master
|
package master
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
appsv1beta1 "k8s.io/api/apps/v1beta1"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
|
"k8s.io/kube-aggregator/pkg/apis/apiregistration"
|
||||||
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
|
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
|
||||||
"k8s.io/kubernetes/test/integration/framework"
|
"k8s.io/kubernetes/test/integration/framework"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRun(t *testing.T) {
|
func TestRun(t *testing.T) {
|
||||||
result := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.SharedEtcd())
|
server := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.SharedEtcd())
|
||||||
defer result.TearDownFn()
|
defer server.TearDownFn()
|
||||||
|
|
||||||
client, err := kubernetes.NewForConfig(result.ClientConfig)
|
client, err := kubernetes.NewForConfig(server.ClientConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
@ -72,3 +76,65 @@ func TestRun(t *testing.T) {
|
|||||||
t.Fatalf("Failed to create deployment: %v", err)
|
t.Fatalf("Failed to create deployment: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestOpenAPIDelegationChainPlumbing is a smoke test that checks for
|
||||||
|
// the existence of some representative paths from the
|
||||||
|
// apiextensions-server and the kube-aggregator server, both part of
|
||||||
|
// the delegation chain in kube-apiserver.
|
||||||
|
func TestOpenAPIDelegationChainPlumbing(t *testing.T) {
|
||||||
|
server := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.SharedEtcd())
|
||||||
|
defer server.TearDownFn()
|
||||||
|
|
||||||
|
kubeclient, err := kubernetes.NewForConfig(server.ClientConfig)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
result := kubeclient.RESTClient().Get().AbsPath("/swagger.json").Do()
|
||||||
|
status := 0
|
||||||
|
result.StatusCode(&status)
|
||||||
|
if status != 200 {
|
||||||
|
t.Fatalf("GET /swagger.json failed: expected status=%d, got=%d", 200, status)
|
||||||
|
}
|
||||||
|
|
||||||
|
raw, err := result.Raw()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
type openAPISchema struct {
|
||||||
|
Paths map[string]interface{} `json:"paths"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var doc openAPISchema
|
||||||
|
err = json.Unmarshal(raw, &doc)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to unmarshal: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
matchedExtension := false
|
||||||
|
extensionsPrefix := "/apis/" + apiextensions.GroupName
|
||||||
|
|
||||||
|
matchedRegistration := false
|
||||||
|
registrationPrefix := "/apis/" + apiregistration.GroupName
|
||||||
|
|
||||||
|
for path := range doc.Paths {
|
||||||
|
if strings.HasPrefix(path, extensionsPrefix) {
|
||||||
|
matchedExtension = true
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(path, registrationPrefix) {
|
||||||
|
matchedRegistration = true
|
||||||
|
}
|
||||||
|
if matchedExtension && matchedRegistration {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !matchedExtension {
|
||||||
|
t.Errorf("missing path: %q", extensionsPrefix)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !matchedRegistration {
|
||||||
|
t.Errorf("missing path: %q", registrationPrefix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user