mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 06:32:15 +08:00
98 lines
2.7 KiB
Go
98 lines
2.7 KiB
Go
package admission_test
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"testing"
|
|
|
|
admissionv1 "k8s.io/api/admission/v1"
|
|
v1 "k8s.io/api/authentication/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
example "k8s.io/apiserver/pkg/apis/example/v1"
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
|
"github.com/grafana/grafana/pkg/aggregator/apiserver/plugin/admission"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParseRequest(t *testing.T) {
|
|
exampleObj := example.Pod{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Name: "example",
|
|
},
|
|
Spec: example.PodSpec{
|
|
ServiceAccountName: "example",
|
|
},
|
|
}
|
|
|
|
raw, err := json.Marshal(exampleObj)
|
|
require.NoError(t, err)
|
|
|
|
expectedAR := &admissionv1.AdmissionReview{
|
|
TypeMeta: metav1.TypeMeta{
|
|
Kind: "AdmissionReview",
|
|
APIVersion: admissionv1.SchemeGroupVersion.String(),
|
|
},
|
|
Request: &admissionv1.AdmissionRequest{
|
|
UID: "1234",
|
|
Kind: metav1.GroupVersionKind{Group: "example.k8s.io", Version: "v1", Kind: "Pod"},
|
|
Resource: metav1.GroupVersionResource{Group: "example.k8s.io", Version: "v1", Resource: "pods"},
|
|
Operation: admissionv1.Create,
|
|
UserInfo: v1.UserInfo{},
|
|
Object: runtime.RawExtension{Raw: raw},
|
|
OldObject: runtime.RawExtension{},
|
|
DryRun: new(bool),
|
|
},
|
|
}
|
|
|
|
body, err := json.Marshal(expectedAR)
|
|
require.NoError(t, err)
|
|
|
|
t.Run("should parse request", func(t *testing.T) {
|
|
req, err := http.NewRequest("POST", "/admission", bytes.NewBuffer(body))
|
|
require.NoError(t, err)
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
ar, err := admission.ParseRequest(admission.GetCodecs(), req)
|
|
if err != nil {
|
|
t.Fatalf("failed to parse request: %v", err)
|
|
}
|
|
|
|
require.Equal(t, expectedAR, ar)
|
|
})
|
|
}
|
|
|
|
func TestToAdmissionRequest(t *testing.T) {
|
|
pluginCtx := backend.PluginContext{}
|
|
admissionReview := &admissionv1.AdmissionReview{
|
|
Request: &admissionv1.AdmissionRequest{
|
|
Operation: admissionv1.Update,
|
|
Kind: metav1.GroupVersionKind{
|
|
Group: "example.k8s.io",
|
|
Version: "v1",
|
|
Kind: "Pod",
|
|
},
|
|
Object: runtime.RawExtension{
|
|
Raw: []byte(`{"foo":"bar"}`),
|
|
},
|
|
OldObject: runtime.RawExtension{
|
|
Raw: []byte(`{"bar":"foo"}`),
|
|
},
|
|
},
|
|
}
|
|
|
|
expectedAdmissionRequest := &backend.AdmissionRequest{
|
|
PluginContext: pluginCtx,
|
|
Operation: backend.AdmissionRequestUpdate,
|
|
Kind: backend.GroupVersionKind{Group: "example.k8s.io", Version: "v1", Kind: "Pod"},
|
|
ObjectBytes: []byte(`{"foo":"bar"}`),
|
|
OldObjectBytes: []byte(`{"bar":"foo"}`),
|
|
}
|
|
|
|
admissionRequest, err := admission.ToAdmissionRequest(pluginCtx, admissionReview)
|
|
require.NoError(t, err)
|
|
require.Equal(t, expectedAdmissionRequest, admissionRequest)
|
|
}
|