145 lines
3.2 KiB
Go
145 lines
3.2 KiB
Go
package apis
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/grafana/grafana/pkg/tests/testinfra"
|
|
"github.com/grafana/grafana/pkg/util/testutil"
|
|
)
|
|
|
|
const pluginsDiscoveryJSON = `[
|
|
{
|
|
"version": "v0alpha1",
|
|
"freshness": "Current",
|
|
"resources": [
|
|
{
|
|
"resource": "metas",
|
|
"responseKind": {
|
|
"group": "",
|
|
"kind": "Meta",
|
|
"version": ""
|
|
},
|
|
"scope": "Namespaced",
|
|
"singularResource": "meta",
|
|
"subresources": [
|
|
{
|
|
"responseKind": {
|
|
"group": "",
|
|
"kind": "Meta",
|
|
"version": ""
|
|
},
|
|
"subresource": "status",
|
|
"verbs": [
|
|
"get",
|
|
"patch",
|
|
"update"
|
|
]
|
|
}
|
|
],
|
|
"verbs": [
|
|
"get",
|
|
"list"
|
|
]
|
|
},
|
|
{
|
|
"resource": "plugins",
|
|
"responseKind": {
|
|
"group": "",
|
|
"kind": "Plugin",
|
|
"version": ""
|
|
},
|
|
"scope": "Namespaced",
|
|
"singularResource": "plugins",
|
|
"subresources": [
|
|
{
|
|
"responseKind": {
|
|
"group": "",
|
|
"kind": "Plugin",
|
|
"version": ""
|
|
},
|
|
"subresource": "status",
|
|
"verbs": [
|
|
"get",
|
|
"patch",
|
|
"update"
|
|
]
|
|
}
|
|
],
|
|
"verbs": [
|
|
"create",
|
|
"delete",
|
|
"deletecollection",
|
|
"get",
|
|
"list",
|
|
"patch",
|
|
"update",
|
|
"watch"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]`
|
|
|
|
func setupHelper(t *testing.T, openFeatureAPIEnabled bool) *K8sTestHelper {
|
|
t.Helper()
|
|
helper := NewK8sTestHelper(t, testinfra.GrafanaOpts{
|
|
AppModeProduction: true,
|
|
DisableAnonymous: true,
|
|
APIServerRuntimeConfig: "plugins.grafana.app/v0alpha1=true",
|
|
OpenFeatureAPIEnabled: openFeatureAPIEnabled,
|
|
})
|
|
t.Cleanup(func() { helper.Shutdown() })
|
|
return helper
|
|
}
|
|
|
|
func TestIntegrationAPIServerRuntimeConfig(t *testing.T) {
|
|
testutil.SkipIntegrationTestInShortMode(t)
|
|
|
|
t.Run("discovery with openfeature api enabled", func(t *testing.T) {
|
|
helper := setupHelper(t, true)
|
|
disco, err := helper.GetGroupVersionInfoJSON("features.grafana.app")
|
|
require.NoError(t, err)
|
|
require.JSONEq(t, `[
|
|
{
|
|
"freshness": "Current",
|
|
"resources": [
|
|
{
|
|
"resource": "noop",
|
|
"responseKind": {
|
|
"group": "",
|
|
"kind": "Status",
|
|
"version": ""
|
|
},
|
|
"scope": "Namespaced",
|
|
"singularResource": "noop",
|
|
"verbs": [
|
|
"get"
|
|
]
|
|
}
|
|
],
|
|
"version": "v0alpha1"
|
|
}
|
|
]`, disco)
|
|
|
|
// plugins should still be discoverable
|
|
disco, err = helper.GetGroupVersionInfoJSON("plugins.grafana.app")
|
|
require.NoError(t, err)
|
|
require.JSONEq(t, pluginsDiscoveryJSON, disco)
|
|
require.NoError(t, err)
|
|
})
|
|
|
|
t.Run("discovery with openfeature api false", func(t *testing.T) {
|
|
helper := setupHelper(t, false)
|
|
_, err := helper.GetGroupVersionInfoJSON("features.grafana.app")
|
|
require.Error(t, err, "expected error when openfeature api is disabled")
|
|
|
|
// plugins should still be discoverable
|
|
disco, err := helper.GetGroupVersionInfoJSON("plugins.grafana.app")
|
|
require.NoError(t, err)
|
|
require.JSONEq(t, pluginsDiscoveryJSON, disco)
|
|
require.NoError(t, err)
|
|
})
|
|
}
|