diff --git a/test/envoye2e/http_metadata_exchange/exchange_test.go b/test/envoye2e/http_metadata_exchange/exchange_test.go index 596edd117c2..c5228235edd 100644 --- a/test/envoye2e/http_metadata_exchange/exchange_test.go +++ b/test/envoye2e/http_metadata_exchange/exchange_test.go @@ -90,6 +90,51 @@ func TestHTTPExchange(t *testing.T) { } } +func TestHTTPExchangeBaggage(t *testing.T) { + params := driver.NewTestParams(t, map[string]string{}, envoye2e.ProxyE2ETests) + params.Vars["ServerMetadata"] = params.LoadTestData("testdata/server_node_metadata.json.tmpl") + params.Vars["ServerHTTPFilters"] = params.LoadTestData("testdata/filters/mx_native_inbound_baggage.yaml.tmpl") + if err := (&driver.Scenario{ + Steps: []driver.Step{ + &driver.XDS{}, + &driver.Update{Node: "server", Version: "0", Listeners: []string{driver.LoadTestData("testdata/listener/server.yaml.tmpl")}}, + &driver.Envoy{Bootstrap: params.LoadTestData("testdata/bootstrap/server.yaml.tmpl")}, + &driver.Sleep{Duration: 1 * time.Second}, + &driver.HTTPCall{ + IP: "127.0.0.2", + Port: params.Ports.ServerPort, + Body: "hello, world!", + RequestHeaders: map[string]string{ + "baggage": "app.version=test-app-v1," + + "app.name=test-app," + + "service.name=canonical-name," + + "k8s.deployment.name=test-deployment," + + "k8s.namespace.name=test-namespace," + + "service.version=v1," + + "k8s.cluster.name=test-cluster," + + "cloud.region=test-region," + + "cloud.availability_zone=test-zone", + }, + ResponseHeaders: map[string]string{ + "baggage": "k8s.deployment.name=ratings-v1," + + "k8s.namespace.name=default," + + "k8s.cluster.name=server-cluster," + + "service.name=ratings," + + "service.version=version-1," + + "app.name=ratings," + + "app.version=v1," + + "k8s.instance.name=ratings-v1-84975bc778-pxz2w", + }, + }, + &driver.Stats{AdminPort: params.Ports.ServerAdmin, Matchers: map[string]driver.StatMatcher{ + "istio_requests_total": &driver.PartialStat{Metric: "testdata/metric/waypoint_downstream_baggage_request.yaml"}, + }}, + }, + }).Run(params); err != nil { + t.Fatal(err) + } +} + func TestNativeHTTPExchange(t *testing.T) { params := driver.NewTestParams(t, map[string]string{}, envoye2e.ProxyE2ETests) params.Vars["ServerMetadata"] = params.LoadTestData("testdata/server_node_metadata.json.tmpl") diff --git a/test/envoye2e/inventory.go b/test/envoye2e/inventory.go index aed10e00316..bb48991fce8 100644 --- a/test/envoye2e/inventory.go +++ b/test/envoye2e/inventory.go @@ -35,6 +35,7 @@ func init() { "TestHTTPExchange", "TestNativeHTTPExchange", "TestHTTPExchangeAdditionalLabels", + "TestHTTPExchangeBaggage", "TestStats403Failure/#00", "TestStatsECDS/#00", "TestStatsEndpointLabels/#00", diff --git a/testdata/filters/mx_native_inbound_baggage.yaml.tmpl b/testdata/filters/mx_native_inbound_baggage.yaml.tmpl new file mode 100644 index 00000000000..8c94d53f56d --- /dev/null +++ b/testdata/filters/mx_native_inbound_baggage.yaml.tmpl @@ -0,0 +1,14 @@ +- name: mx_inbound{{.N}} + typed_config: + "@type": type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/io.istio.http.peer_metadata.Config + value: + downstream_discovery: + - baggage: {} + downstream_propagation: + - baggage: {} + shared_with_upstream: true +- name: stats_inbound{{.N}} + typed_config: + "@type": type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/stats.PluginConfig diff --git a/testdata/metric/waypoint_downstream_baggage_request.yaml b/testdata/metric/waypoint_downstream_baggage_request.yaml new file mode 100644 index 00000000000..54d927e4ff6 --- /dev/null +++ b/testdata/metric/waypoint_downstream_baggage_request.yaml @@ -0,0 +1,56 @@ +name: istio_requests_total +type: COUNTER +metric: +- counter: + value: 1 + label: + - name: reporter + value: destination + - name: source_workload + value: test-deployment + - name: source_canonical_service + value: canonical-name + - name: source_canonical_revision + value: v1 + - name: source_workload_namespace + value: test-namespace + - name: source_principal + value: unknown + - name: source_app + value: canonical-name + - name: source_version + value: v1 + - name: source_cluster + value: test-cluster + - name: destination_workload + value: ratings-v1 + - name: destination_workload_namespace + value: default + - name: destination_principal + value: unknown + - name: destination_app + value: ratings + - name: destination_version + value: v1 + - name: destination_service + value: server.default.svc.cluster.local + - name: destination_canonical_service + value: ratings + - name: destination_canonical_revision + value: version-1 + - name: destination_service_name + value: server + - name: destination_service_namespace + value: default + - name: destination_cluster + value: server-cluster + - name: request_protocol + value: http + - name: response_code + value: "200" + - name: grpc_response_status + value: "" + - name: response_flags + value: "-" + - name: connection_security_policy + value: none