blob: 6e96aaf38611a4772c05e1158d9b0479ddcd2c32 [file] [log] [blame]
//go:build integ
// +build integ
// Copyright Istio Authors
//
// Licensed 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 outboundtrafficpolicy
import (
"net/http"
"testing"
)
import (
"github.com/apache/dubbo-go-pixiu/pkg/test/framework/components/prometheus"
)
func TestOutboundTrafficPolicy_AllowAny(t *testing.T) {
cases := []*TestCase{
{
Name: "HTTP Traffic",
PortName: "http",
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_requests_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "PassthroughCluster",
"response_code": "200",
},
},
StatusCode: http.StatusOK,
Protocol: "HTTP/1.1",
},
},
{
Name: "HTTP H2 Traffic",
PortName: "http",
HTTP2: true,
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_requests_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "PassthroughCluster",
"response_code": "200",
},
},
StatusCode: http.StatusOK,
Protocol: "HTTP/2.0",
},
},
{
Name: "HTTPS Traffic",
PortName: "https",
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_tcp_connections_opened_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "PassthroughCluster",
},
},
StatusCode: http.StatusOK,
Protocol: "HTTP/1.1",
},
},
{
Name: "HTTPS Traffic Conflict",
PortName: "https-conflict",
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_tcp_connections_opened_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "PassthroughCluster",
},
},
StatusCode: http.StatusOK,
Protocol: "HTTP/1.1",
},
},
{
Name: "HTTPS H2 Traffic",
PortName: "https",
HTTP2: true,
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_tcp_connections_opened_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "PassthroughCluster",
},
},
StatusCode: http.StatusOK,
Protocol: "HTTP/2.0",
},
},
{
Name: "HTTPS H2 Traffic Conflict",
PortName: "https-conflict",
HTTP2: true,
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_tcp_connections_opened_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "PassthroughCluster",
},
},
StatusCode: http.StatusOK,
Protocol: "HTTP/2.0",
},
},
{
Name: "HTTP Traffic Egress",
PortName: "http",
Host: "some-external-site.com",
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_requests_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "istio-egressgateway",
"response_code": "200",
},
},
StatusCode: http.StatusOK,
Protocol: "HTTP/1.1",
RequestHeaders: map[string]string{
// We inject this header in the VirtualService
"Handled-By-Egress-Gateway": "true",
},
},
},
{
Name: "HTTP H2 Traffic Egress",
PortName: "http",
HTTP2: true,
Host: "some-external-site.com",
Expected: Expected{
Query: prometheus.Query{
Metric: "istio_requests_total",
Aggregation: "sum",
Labels: map[string]string{
"reporter": "source",
"destination_service_name": "istio-egressgateway",
"response_code": "200",
},
},
StatusCode: http.StatusOK,
// Even though we send h2 to the gateway, the gateway should send h1, as configured by the ServiceEntry
Protocol: "HTTP/1.1",
RequestHeaders: map[string]string{
// We inject this header in the VirtualService
"Handled-By-Egress-Gateway": "true",
},
},
},
// TODO add HTTPS through gateway
{
Name: "TCP",
PortName: "tcp",
Expected: Expected{
// TODO(https://github.com/istio/istio/issues/22717) re-enable TCP
// Metric: "istio_tcp_connections_closed_total",
// PromQueryFormat: `sum(istio_tcp_connections_closed_total{reporter="source",destination_service_name="PassthroughCluster",source_workload="client-v1"})`,
StatusCode: http.StatusOK,
Protocol: "TCP",
},
},
{
Name: "TCP Conflict",
PortName: "tcp",
Expected: Expected{
// TODO(https://github.com/istio/istio/issues/22717) re-enable TCP
// Metric: "istio_tcp_connections_closed_total",
// PromQueryFormat: `sum(istio_tcp_connections_closed_total{reporter="source",destination_service_name="PassthroughCluster",source_workload="client-v1"})`,
StatusCode: http.StatusOK,
Protocol: "TCP",
},
},
}
RunExternalRequest(t, cases, prom, AllowAny)
}