This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new bbf3ba9f1 chore(e2e): strengthen openapi tests
bbf3ba9f1 is described below
commit bbf3ba9f1ccdac7c615163f02968d592ff1e0ec7
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Thu Nov 7 18:31:02 2024 +0100
chore(e2e): strengthen openapi tests
Ref #5924
---
e2e/common/misc/openapi_test.go | 3 +-
e2e/common/traits/openapi_test.go | 3 +-
e2e/knative/files/petstore-cf.yaml | 43 ++++++++++++++++++++++++
e2e/knative/openapi_test.go | 68 ++++++++++++++++++++++++++++++--------
4 files changed, 102 insertions(+), 15 deletions(-)
diff --git a/e2e/common/misc/openapi_test.go b/e2e/common/misc/openapi_test.go
index e98dd7596..ca4d2a8d9 100644
--- a/e2e/common/misc/openapi_test.go
+++ b/e2e/common/misc/openapi_test.go
@@ -39,7 +39,7 @@ import (
v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
)
-func TestOpenAPI(t *testing.T) {
+func TestOpenAPIContractFirst(t *testing.T) {
t.Parallel()
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
name := RandomizedSuffixName("petstore")
@@ -55,6 +55,7 @@ func TestOpenAPI(t *testing.T) {
g.Eventually(IntegrationConditionStatus(t, ctx, ns, name,
v1.IntegrationConditionReady), TestTimeoutMedium).
Should(Equal(corev1.ConditionTrue))
+ g.Eventually(Service(t, ctx, ns, name),
TestTimeoutShort).ShouldNot(BeNil())
g.Eventually(IntegrationPodPhase(t, ctx, ns,
name)).Should(Equal(corev1.PodRunning))
// Let's make sure the Integration is ready to receive traffic
g.Eventually(IntegrationLogs(t, ctx, ns,
name)).Should(ContainSubstring("Listening on: http://0.0.0.0:8080"))
diff --git a/e2e/common/traits/openapi_test.go
b/e2e/common/traits/openapi_test.go
index 8c61e166b..b87ebee48 100644
--- a/e2e/common/traits/openapi_test.go
+++ b/e2e/common/traits/openapi_test.go
@@ -39,7 +39,7 @@ import (
v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
)
-func TestOpenAPI(t *testing.T) {
+func TestOpenAPITrait(t *testing.T) {
t.Parallel()
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
name := RandomizedSuffixName("petstore")
@@ -55,6 +55,7 @@ func TestOpenAPI(t *testing.T) {
g.Eventually(IntegrationConditionStatus(t, ctx, ns, name,
v1.IntegrationConditionReady), TestTimeoutMedium).
Should(Equal(corev1.ConditionTrue))
+ g.Eventually(Service(t, ctx, ns, name),
TestTimeoutShort).ShouldNot(BeNil())
g.Eventually(IntegrationPodPhase(t, ctx, ns,
name)).Should(Equal(corev1.PodRunning))
// Let's make sure the Integration is ready to receive traffic
g.Eventually(IntegrationLogs(t, ctx, ns,
name)).Should(ContainSubstring("Listening on: http://0.0.0.0:8080"))
diff --git a/e2e/knative/files/petstore-cf.yaml
b/e2e/knative/files/petstore-cf.yaml
new file mode 100644
index 000000000..ca4e483e3
--- /dev/null
+++ b/e2e/knative/files/petstore-cf.yaml
@@ -0,0 +1,43 @@
+# camel-k: language=yaml
+
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+- rest:
+ openApi:
+ specification: petstore-api.yaml
+
+- from:
+ uri: "direct:listPets"
+ steps:
+ - setBody:
+ simple: "listPets"
+ - to: "log:info"
+
+- from:
+ uri: "direct:createPets"
+ steps:
+ - setBody:
+ simple: "createPets"
+ - to: "log:info"
+
+- from:
+ uri: "direct:showPetById"
+ steps:
+ - setBody:
+ simple: "showPetById"
+ - to: "log:info"
diff --git a/e2e/knative/openapi_test.go b/e2e/knative/openapi_test.go
index 30adb9d4e..00ea85fdf 100644
--- a/e2e/knative/openapi_test.go
+++ b/e2e/knative/openapi_test.go
@@ -24,36 +24,78 @@ package knative
import (
"context"
+ "fmt"
+ "os"
"testing"
+ "time"
"io/ioutil"
. "github.com/apache/camel-k/v2/e2e/support"
+ v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
. "github.com/onsi/gomega"
+ "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ corev1 "k8s.io/api/core/v1"
)
-/*
- go test -v -tags=integration ./e2e/knative --run TestOpenAPIService
-*/
-
-func TestOpenAPIService(t *testing.T) {
+func TestOpenAPIKnativeTrait(t *testing.T) {
WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
+ name := RandomizedSuffixName("petstore")
openapiContent, err :=
ioutil.ReadFile("./files/petstore-api.yaml")
require.NoError(t, err)
var cmDataProps = make(map[string]string)
cmDataProps["petstore-api.yaml"] = string(openapiContent)
CreatePlainTextConfigmap(t, ctx, ns, "my-openapi-knative",
cmDataProps)
- g.Expect(KamelRun(t, ctx, ns, "--name", "petstore",
"--open-api", "configmap:my-openapi-knative",
"files/petstore.yaml").Execute()).To(Succeed())
+ g.Expect(KamelRun(t, ctx, ns, "--name", name, "--open-api",
"configmap:my-openapi-knative", "files/petstore.yaml").Execute()).To(Succeed())
- g.Eventually(KnativeService(t, ctx, ns, "petstore"),
TestTimeoutLong).
+ g.Eventually(KnativeService(t, ctx, ns, name), TestTimeoutLong).
Should(Not(BeNil()))
- g.Eventually(IntegrationLogs(t, ctx, ns, "petstore"),
TestTimeoutMedium).
- Should(ContainSubstring("Started listPets
(rest://get:/v1:/pets)"))
- g.Eventually(IntegrationLogs(t, ctx, ns, "petstore"),
TestTimeoutMedium).
- Should(ContainSubstring("Started createPets
(rest://post:/v1:/pets)"))
- g.Eventually(IntegrationLogs(t, ctx, ns, "petstore"),
TestTimeoutMedium).
- Should(ContainSubstring("Started showPetById
(rest://get:/v1:/pets/%7BpetId%7D)"))
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns, name,
v1.IntegrationConditionReady), TestTimeoutMedium).
+ Should(Equal(corev1.ConditionTrue))
+ g.Eventually(IntegrationPodPhase(t, ctx, ns,
name)).Should(Equal(corev1.PodRunning))
+ // Let's make sure the Integration is ready to receive traffic
+ g.Eventually(IntegrationLogs(t, ctx, ns,
name)).Should(ContainSubstring("Listening on: http://0.0.0.0:8080"))
+ pod := IntegrationPod(t, ctx, ns, name)()
+ g.Expect(pod).NotTo(BeNil())
+ response, err := TestClient(t).CoreV1().RESTClient().Get().
+ Timeout(30 * time.Second).
+
AbsPath(fmt.Sprintf("/api/v1/namespaces/%s/pods/%s/proxy/v1/pets",
pod.Namespace, pod.Name)).
+ DoRaw(ctx)
+ require.NoError(t, err)
+ assert.Equal(t, "listPets", string(response))
+ })
+}
+
+func TestOpenAPIKnativeContractFirst(t *testing.T) {
+ t.Parallel()
+ WithNewTestNamespace(t, func(ctx context.Context, g *WithT, ns string) {
+ name := RandomizedSuffixName("petstore")
+ openapiContent, err := os.ReadFile("./files/petstore-api.yaml")
+ require.NoError(t, err)
+ var cmDataProps = make(map[string]string)
+ cmDataProps["petstore-api.yaml"] = string(openapiContent)
+ CreatePlainTextConfigmap(t, ctx, ns, "my-openapi", cmDataProps)
+
+ g.Expect(KamelRun(t, ctx, ns,
+ "--name", name, "--resource", "configmap:my-openapi",
"files/petstore-cf.yaml").
+ Execute()).To(Succeed())
+
+ g.Eventually(KnativeService(t, ctx, ns, name), TestTimeoutLong).
+ Should(Not(BeNil()))
+ g.Eventually(IntegrationConditionStatus(t, ctx, ns, name,
v1.IntegrationConditionReady), TestTimeoutMedium).
+ Should(Equal(corev1.ConditionTrue))
+ g.Eventually(IntegrationPodPhase(t, ctx, ns,
name)).Should(Equal(corev1.PodRunning))
+ // Let's make sure the Integration is ready to receive traffic
+ g.Eventually(IntegrationLogs(t, ctx, ns,
name)).Should(ContainSubstring("Listening on: http://0.0.0.0:8080"))
+ pod := IntegrationPod(t, ctx, ns, name)()
+ g.Expect(pod).NotTo(BeNil())
+ response, err := TestClient(t).CoreV1().RESTClient().Get().
+ Timeout(30 * time.Second).
+
AbsPath(fmt.Sprintf("/api/v1/namespaces/%s/pods/%s/proxy/v1/pets",
pod.Namespace, pod.Name)).
+ DoRaw(ctx)
+ require.NoError(t, err)
+ assert.Equal(t, "listPets", string(response))
})
}