mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 05:32:32 +08:00
117 lines
2.9 KiB
Go
117 lines
2.9 KiB
Go
package builder_test
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
|
"k8s.io/apiserver/pkg/server"
|
|
"k8s.io/kube-openapi/pkg/common"
|
|
|
|
"github.com/grafana/grafana/pkg/services/apiserver/builder"
|
|
)
|
|
|
|
func TestAddPostStartHooks(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
builders []builder.APIGroupBuilder
|
|
wantErr bool
|
|
wantHooks []string
|
|
}{
|
|
{
|
|
name: "no builders",
|
|
builders: []builder.APIGroupBuilder{},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "builder without post start hooks",
|
|
builders: []builder.APIGroupBuilder{
|
|
&mockAPIGroupPostStartHookProvider{},
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "builder with post start hooks",
|
|
builders: []builder.APIGroupBuilder{
|
|
&mockAPIGroupPostStartHookProvider{
|
|
hooks: map[string]server.PostStartHookFunc{
|
|
"test-hook": func(server.PostStartHookContext) error { return nil },
|
|
},
|
|
},
|
|
},
|
|
wantErr: false,
|
|
wantHooks: []string{"test-hook"},
|
|
},
|
|
{
|
|
name: "builder with post start hook provider error",
|
|
builders: []builder.APIGroupBuilder{
|
|
&mockAPIGroupPostStartHookProvider{
|
|
hooks: map[string]server.PostStartHookFunc{},
|
|
err: errors.New("hook provider error"),
|
|
},
|
|
},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
scheme := builder.ProvideScheme()
|
|
codecs := builder.ProvideCodecFactory(scheme)
|
|
config := server.NewRecommendedConfig(codecs)
|
|
err := builder.AddPostStartHooks(config, tt.builders)
|
|
if tt.wantErr {
|
|
require.Error(t, err)
|
|
}
|
|
|
|
if len(tt.wantHooks) > 0 {
|
|
for _, hookName := range tt.wantHooks {
|
|
_, ok := config.PostStartHooks[hookName]
|
|
require.True(t, ok)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
var _ builder.APIGroupBuilder = &mockAPIGroupPostStartHookProvider{}
|
|
var _ builder.APIGroupPostStartHookProvider = &mockAPIGroupPostStartHookProvider{}
|
|
|
|
type mockAPIGroupPostStartHookProvider struct {
|
|
hooks map[string]server.PostStartHookFunc
|
|
err error
|
|
}
|
|
|
|
func (m *mockAPIGroupPostStartHookProvider) GetPostStartHooks() (map[string]server.PostStartHookFunc, error) {
|
|
return m.hooks, m.err
|
|
}
|
|
|
|
func (m *mockAPIGroupPostStartHookProvider) GetGroupVersion() schema.GroupVersion {
|
|
return schema.GroupVersion{}
|
|
}
|
|
|
|
func (m *mockAPIGroupPostStartHookProvider) InstallSchema(scheme *runtime.Scheme) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockAPIGroupPostStartHookProvider) AllowedV0Alpha1Resources() []string {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockAPIGroupPostStartHookProvider) UpdateAPIGroupInfo(apiGroupInfo *server.APIGroupInfo, opts builder.APIGroupOptions) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockAPIGroupPostStartHookProvider) GetOpenAPIDefinitions() common.GetOpenAPIDefinitions {
|
|
return nil
|
|
}
|
|
|
|
func (m *mockAPIGroupPostStartHookProvider) GetAuthorizer() authorizer.Authorizer {
|
|
return nil
|
|
}
|