2025-01-29 15:26:17 +08:00
|
|
|
package apis
|
2025-01-28 15:30:53 +08:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2025-08-20 17:05:41 +08:00
|
|
|
"runtime"
|
2025-01-28 15:30:53 +08:00
|
|
|
"testing"
|
|
|
|
|
2025-01-30 14:59:00 +08:00
|
|
|
"github.com/stretchr/testify/require"
|
2025-01-28 15:30:53 +08:00
|
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
|
|
"k8s.io/apimachinery/pkg/util/version"
|
2025-09-09 22:46:46 +08:00
|
|
|
"k8s.io/client-go/kubernetes"
|
2025-01-28 15:30:53 +08:00
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
|
|
|
"github.com/grafana/grafana/pkg/tests/testinfra"
|
|
|
|
"github.com/grafana/grafana/pkg/tests/testsuite"
|
2025-09-08 21:49:49 +08:00
|
|
|
"github.com/grafana/grafana/pkg/util/testutil"
|
2025-01-28 15:30:53 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestMain(m *testing.M) {
|
|
|
|
testsuite.Run(m)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestIntegrationOpenAPIs(t *testing.T) {
|
2025-09-08 21:49:49 +08:00
|
|
|
testutil.SkipIntegrationTestInShortMode(t)
|
2025-01-28 15:30:53 +08:00
|
|
|
|
2025-01-29 15:26:17 +08:00
|
|
|
h := NewK8sTestHelper(t, testinfra.GrafanaOpts{
|
2025-01-28 15:30:53 +08:00
|
|
|
AppModeProduction: true,
|
|
|
|
EnableFeatureToggles: []string{
|
2025-07-30 05:52:57 +08:00
|
|
|
featuremgmt.FlagQueryService, // Query Library
|
2025-01-30 14:59:00 +08:00
|
|
|
featuremgmt.FlagProvisioning,
|
2025-02-18 02:19:22 +08:00
|
|
|
featuremgmt.FlagInvestigationsBackend,
|
2025-04-08 22:38:19 +08:00
|
|
|
featuremgmt.FlagGrafanaAdvisor,
|
2025-08-01 06:56:50 +08:00
|
|
|
featuremgmt.FlagKubernetesAlertingRules,
|
2025-04-17 15:30:35 +08:00
|
|
|
featuremgmt.FlagGrafanaAPIServerWithExperimentalAPIs, // all datasources
|
2025-09-13 07:23:50 +08:00
|
|
|
featuremgmt.FlagKubernetesShortURLs,
|
2025-01-28 15:30:53 +08:00
|
|
|
},
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("check valid version response", func(t *testing.T) {
|
2025-09-09 22:46:46 +08:00
|
|
|
client, err := kubernetes.NewForConfig(h.NewAdminRestConfig())
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
info, err := client.ServerVersion()
|
2025-01-28 15:30:53 +08:00
|
|
|
require.NoError(t, err)
|
2025-08-20 17:05:41 +08:00
|
|
|
require.Equal(t, runtime.Version(), info.GoVersion)
|
2025-09-09 22:46:46 +08:00
|
|
|
require.Equal(t, "1", info.Major)
|
2025-09-16 18:35:20 +08:00
|
|
|
require.Equal(t, "34", info.Minor)
|
2025-01-28 15:30:53 +08:00
|
|
|
|
|
|
|
// Make sure the gitVersion is parsable
|
|
|
|
v, err := version.Parse(info.GitVersion)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, info.Major, fmt.Sprintf("%d", v.Major()))
|
|
|
|
require.Equal(t, info.Minor, fmt.Sprintf("%d", v.Minor()))
|
2025-04-17 15:30:35 +08:00
|
|
|
|
2025-08-20 17:05:41 +08:00
|
|
|
// Check the v3 path resolves properly
|
|
|
|
// NOTE: fetching the v2 schema sometimes returns a 503 in our test infrastructure
|
|
|
|
// Removing the explicit `OneOf` properties from InlineSecureValue in:
|
|
|
|
// https://github.com/grafana/grafana/blob/main/pkg/apimachinery/apis/common/v0alpha1/secure_values.go#L78
|
|
|
|
// will consistently support V2, however kubectl and everything else continues to work
|
2025-09-09 22:46:46 +08:00
|
|
|
disco := h.NewDiscoveryClient()
|
2025-08-20 17:05:41 +08:00
|
|
|
paths, err := disco.OpenAPIV3().Paths()
|
|
|
|
|
|
|
|
require.NoError(t, err, "requesting OpenAPI v3")
|
|
|
|
require.NotEmpty(t, paths, "has registered paths")
|
2025-01-28 15:30:53 +08:00
|
|
|
})
|
|
|
|
|
2025-01-29 15:26:17 +08:00
|
|
|
dir := "openapi_snapshots"
|
|
|
|
|
2025-01-30 00:05:40 +08:00
|
|
|
var groups = []schema.GroupVersion{{
|
2025-01-29 15:26:17 +08:00
|
|
|
Group: "dashboard.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-04-04 01:24:12 +08:00
|
|
|
}, {
|
|
|
|
Group: "dashboard.grafana.app",
|
2025-04-24 01:54:35 +08:00
|
|
|
Version: "v1beta1",
|
2025-04-04 01:24:12 +08:00
|
|
|
}, {
|
|
|
|
Group: "dashboard.grafana.app",
|
|
|
|
Version: "v2alpha1",
|
2025-01-29 15:26:17 +08:00
|
|
|
}, {
|
|
|
|
Group: "folder.grafana.app",
|
2025-04-15 04:20:10 +08:00
|
|
|
Version: "v1beta1",
|
2025-03-25 15:59:03 +08:00
|
|
|
}, {
|
|
|
|
Group: "provisioning.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-02-01 01:12:55 +08:00
|
|
|
}, {
|
|
|
|
Group: "iam.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-02-18 02:19:22 +08:00
|
|
|
}, {
|
|
|
|
Group: "investigations.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-04-08 22:38:19 +08:00
|
|
|
}, {
|
|
|
|
Group: "advisor.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-04-16 20:27:52 +08:00
|
|
|
}, {
|
|
|
|
Group: "playlist.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-04-18 22:14:52 +08:00
|
|
|
}, {
|
|
|
|
Group: "notifications.alerting.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-08-01 06:56:50 +08:00
|
|
|
}, {
|
|
|
|
Group: "rules.alerting.grafana.app",
|
|
|
|
Version: "v0alpha1",
|
2025-09-13 07:23:50 +08:00
|
|
|
}, {
|
|
|
|
Group: "shorturl.grafana.app",
|
|
|
|
Version: "v1alpha1",
|
2025-01-30 00:05:40 +08:00
|
|
|
}}
|
|
|
|
for _, gv := range groups {
|
2025-01-29 15:26:17 +08:00
|
|
|
VerifyOpenAPISnapshots(t, dir, gv, h)
|
|
|
|
}
|
|
|
|
}
|