blob: b6de0a42c32a8b24bb054108936a299117473604 [file] [log] [blame]
// 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.
package gatewayapi
import (
"fmt"
"time"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/apache/apisix-ingress-controller/test/e2e/scaffold"
)
var _ = Describe("TCPRoute E2E Test", Label("networking.k8s.io", "tcproute"), func() {
s := scaffold.NewDefaultScaffold()
Context("TCPRoute Base", func() {
var tcpGateway = `
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: %s
spec:
gatewayClassName: %s
listeners:
- name: tcp
protocol: TCP
port: 80
allowedRoutes:
kinds:
- kind: TCPRoute
infrastructure:
parametersRef:
group: apisix.apache.org
kind: GatewayProxy
name: apisix-proxy-config
`
var tcpRoute = `
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
name: tcp-app-1
spec:
parentRefs:
- name: %s
sectionName: tcp
rules:
- backendRefs:
- name: httpbin-service-e2e-test
port: 80
`
BeforeEach(func() {
// Create GatewayProxy
Expect(s.CreateResourceFromString(s.GetGatewayProxySpec())).
NotTo(HaveOccurred(), "creating GatewayProxy")
// Create GatewayClass
Expect(s.CreateResourceFromString(s.GetGatewayClassYaml())).
NotTo(HaveOccurred(), "creating GatewayClass")
// Create Gateway with TCP listener
Expect(s.CreateResourceFromString(fmt.Sprintf(tcpGateway, s.Namespace(), s.Namespace()))).
NotTo(HaveOccurred(), "creating Gateway")
})
It("should route TCP traffic to backend service", func() {
By("creating TCPRoute")
Expect(s.CreateResourceFromString(fmt.Sprintf(tcpRoute, s.Namespace()))).
NotTo(HaveOccurred(), "creating TCPRoute")
// Verify TCPRoute status becomes programmed
routeYaml, _ := s.GetResourceYaml("TCPRoute", "tcp-app-1")
s.ResourceApplied("TCPRoute", "tcp-app-1", routeYaml, 1)
By("verifying TCPRoute is functional")
s.HTTPOverTCPConnectAssert(true, time.Minute*3) // should be able to connect
By("sending TCP traffic to verify routing")
s.RequestAssert(&scaffold.RequestAssert{
Client: s.NewAPISIXClientOnTCPPort(),
Method: "GET",
Path: "/get",
Check: scaffold.WithExpectedStatus(200),
Timeout: time.Second * 60,
Interval: time.Second * 2,
})
By("deleting TCPRoute")
Expect(s.DeleteResource("TCPRoute", "tcp-app-1")).
NotTo(HaveOccurred(), "deleting TCPRoute")
s.HTTPOverTCPConnectAssert(false, time.Minute*3)
})
})
})