github.com/netdata/go.d.plugin@v0.58.1/modules/envoy/envoy_test.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package envoy
     4  
     5  import (
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"os"
     9  	"testing"
    10  
    11  	"github.com/netdata/go.d.plugin/pkg/web"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  var (
    18  	dataEnvoyConsulDataplane, _ = os.ReadFile("testdata/consul-dataplane.txt")
    19  	dataEnvoy, _                = os.ReadFile("testdata/envoy.txt")
    20  )
    21  
    22  func Test_testDataIsValid(t *testing.T) {
    23  	for name, data := range map[string][]byte{
    24  		"dataEnvoyConsulDataplane": dataEnvoyConsulDataplane,
    25  		"dataEnvoy":                dataEnvoy,
    26  	} {
    27  		require.NotNilf(t, data, name)
    28  	}
    29  }
    30  
    31  func TestEnvoy_Init(t *testing.T) {
    32  	tests := map[string]struct {
    33  		wantFail bool
    34  		config   Config
    35  	}{
    36  		"success with default": {
    37  			wantFail: false,
    38  			config:   New().Config,
    39  		},
    40  		"fail when URL not set": {
    41  			wantFail: true,
    42  			config: Config{
    43  				HTTP: web.HTTP{
    44  					Request: web.Request{URL: ""},
    45  				},
    46  			},
    47  		},
    48  	}
    49  
    50  	for name, test := range tests {
    51  		t.Run(name, func(t *testing.T) {
    52  			envoy := New()
    53  			envoy.Config = test.config
    54  
    55  			if test.wantFail {
    56  				assert.False(t, envoy.Init())
    57  			} else {
    58  				assert.True(t, envoy.Init())
    59  			}
    60  		})
    61  	}
    62  
    63  }
    64  
    65  func TestEnvoy_Cleanup(t *testing.T) {
    66  	envoy := New()
    67  	assert.NotPanics(t, envoy.Cleanup)
    68  
    69  	require.True(t, envoy.Init())
    70  	assert.NotPanics(t, envoy.Cleanup)
    71  }
    72  
    73  func TestEnvoy_Charts(t *testing.T) {
    74  	envoy, cleanup := prepareCaseEnvoyStats()
    75  	defer cleanup()
    76  
    77  	require.Empty(t, *envoy.Charts())
    78  
    79  	require.True(t, envoy.Init())
    80  	_ = envoy.Collect()
    81  	require.NotEmpty(t, *envoy.Charts())
    82  }
    83  
    84  func TestEnvoy_Check(t *testing.T) {
    85  	tests := map[string]struct {
    86  		prepare  func() (envoy *Envoy, cleanup func())
    87  		wantFail bool
    88  	}{
    89  		"case envoy consul dataplane": {
    90  			wantFail: false,
    91  			prepare:  prepareCaseEnvoyConsulDataplaneStats,
    92  		},
    93  		"case envoy": {
    94  			wantFail: false,
    95  			prepare:  prepareCaseEnvoyStats,
    96  		},
    97  		"case invalid data response": {
    98  			wantFail: true,
    99  			prepare:  prepareCaseInvalidDataResponse,
   100  		},
   101  		"case 404": {
   102  			wantFail: true,
   103  			prepare:  prepareCase404,
   104  		},
   105  	}
   106  
   107  	for name, test := range tests {
   108  		t.Run(name, func(t *testing.T) {
   109  			envoy, cleanup := test.prepare()
   110  			defer cleanup()
   111  
   112  			require.True(t, envoy.Init())
   113  
   114  			if test.wantFail {
   115  				assert.False(t, envoy.Check())
   116  			} else {
   117  				assert.True(t, envoy.Check())
   118  			}
   119  		})
   120  	}
   121  }
   122  
   123  func TestEnvoy_Collect(t *testing.T) {
   124  	tests := map[string]struct {
   125  		prepare     func() (envoy *Envoy, cleanup func())
   126  		wantMetrics map[string]int64
   127  	}{
   128  		"case envoy consul dataplane": {
   129  			prepare: prepareCaseEnvoyConsulDataplaneStats,
   130  			wantMetrics: map[string]int64{
   131  				"envoy_cluster_manager_active_clusters_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           4,
   132  				"envoy_cluster_manager_cluster_added_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                             4,
   133  				"envoy_cluster_manager_cluster_modified_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                          0,
   134  				"envoy_cluster_manager_cluster_removed_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           0,
   135  				"envoy_cluster_manager_cluster_updated_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           2,
   136  				"envoy_cluster_manager_cluster_updated_via_merge_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                 0,
   137  				"envoy_cluster_manager_update_merge_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                    0,
   138  				"envoy_cluster_manager_update_out_of_merge_window_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                0,
   139  				"envoy_cluster_manager_warming_clusters_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                          0,
   140  				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                1,
   141  				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       1,
   142  				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            2,
   143  				"envoy_cluster_membership_change_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              1,
   144  				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
   145  				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     0,
   146  				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          0,
   147  				"envoy_cluster_membership_degraded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
   148  				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
   149  				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     0,
   150  				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          0,
   151  				"envoy_cluster_membership_excluded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
   152  				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                               1,
   153  				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                      1,
   154  				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                           0,
   155  				"envoy_cluster_membership_healthy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                             1,
   156  				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                     0,
   157  				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                            0,
   158  				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                                 0,
   159  				"envoy_cluster_update_empty_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                                   0,
   160  				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                   0,
   161  				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                          0,
   162  				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                               0,
   163  				"envoy_cluster_update_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                                 0,
   164  				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                0,
   165  				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       0,
   166  				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            0,
   167  				"envoy_cluster_update_no_rebuild_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              0,
   168  				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                   0,
   169  				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                          0,
   170  				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                               0,
   171  				"envoy_cluster_update_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                                 0,
   172  				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                               1,
   173  				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                      0,
   174  				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                           0,
   175  				"envoy_cluster_upstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                             2,
   176  				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":            0,
   177  				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                   0,
   178  				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":        0,
   179  				"envoy_cluster_upstream_cx_connect_attempts_exceeded_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":          0,
   180  				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                         0,
   181  				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                0,
   182  				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                     0,
   183  				"envoy_cluster_upstream_cx_connect_fail_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                       0,
   184  				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                      0,
   185  				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                             0,
   186  				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                  0,
   187  				"envoy_cluster_upstream_cx_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                    0,
   188  				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
   189  				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     6507,
   190  				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          1,
   191  				"envoy_cluster_upstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
   192  				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                        0,
   193  				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                               6507,
   194  				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                    0,
   195  				"envoy_cluster_upstream_cx_destroy_local_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                      0,
   196  				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       0,
   197  				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
   198  				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   1,
   199  				"envoy_cluster_upstream_cx_destroy_remote_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     0,
   200  				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                          0,
   201  				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                 0,
   202  				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                      0,
   203  				"envoy_cluster_upstream_cx_http1_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                        2,
   204  				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                          1,
   205  				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                 0,
   206  				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                      0,
   207  				"envoy_cluster_upstream_cx_http2_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                        0,
   208  				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                          0,
   209  				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                 0,
   210  				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                      0,
   211  				"envoy_cluster_upstream_cx_http3_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                        0,
   212  				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                         0,
   213  				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                0,
   214  				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                     0,
   215  				"envoy_cluster_upstream_cx_idle_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                       0,
   216  				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                 0,
   217  				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                        0,
   218  				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":             0,
   219  				"envoy_cluster_upstream_cx_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":               0,
   220  				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                             0,
   221  				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                    0,
   222  				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                         0,
   223  				"envoy_cluster_upstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                           0,
   224  				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                    17,
   225  				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                           0,
   226  				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                0,
   227  				"envoy_cluster_upstream_cx_rx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                  102618,
   228  				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       3853,
   229  				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
   230  				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   8645645,
   231  				"envoy_cluster_upstream_cx_rx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     724779,
   232  				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                1,
   233  				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       6507,
   234  				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            1,
   235  				"envoy_cluster_upstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              2,
   236  				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                    0,
   237  				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                           0,
   238  				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                0,
   239  				"envoy_cluster_upstream_cx_tx_bytes_buffered_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                  0,
   240  				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       114982,
   241  				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
   242  				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   1240,
   243  				"envoy_cluster_upstream_cx_tx_bytes_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     732,
   244  				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                               1,
   245  				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                      0,
   246  				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                           0,
   247  				"envoy_cluster_upstream_rq_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                             1,
   248  				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                            0,
   249  				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                   4749,
   250  				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                        0,
   251  				"envoy_cluster_upstream_rq_cancelled_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                          0,
   252  				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                     0,
   253  				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                            0,
   254  				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                 0,
   255  				"envoy_cluster_upstream_rq_maintenance_mode_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                   0,
   256  				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                 0,
   257  				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                        0,
   258  				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":             0,
   259  				"envoy_cluster_upstream_rq_max_duration_reached_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":               0,
   260  				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                       0,
   261  				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                              0,
   262  				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                   0,
   263  				"envoy_cluster_upstream_rq_pending_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                     0,
   264  				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                0,
   265  				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                       0,
   266  				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":            0,
   267  				"envoy_cluster_upstream_rq_pending_failure_eject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":              0,
   268  				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                     0,
   269  				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                            0,
   270  				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                 0,
   271  				"envoy_cluster_upstream_rq_pending_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                   0,
   272  				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                        1,
   273  				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                               6507,
   274  				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                    1,
   275  				"envoy_cluster_upstream_rq_pending_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                      2,
   276  				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                      0,
   277  				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                             0,
   278  				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                  0,
   279  				"envoy_cluster_upstream_rq_per_try_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                    0,
   280  				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":            0,
   281  				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                   0,
   282  				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":        0,
   283  				"envoy_cluster_upstream_rq_retry_backoff_exponential_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":          0,
   284  				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":            0,
   285  				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                   0,
   286  				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":        0,
   287  				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":          0,
   288  				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                0,
   289  				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       0,
   290  				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            0,
   291  				"envoy_cluster_upstream_rq_retry_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              0,
   292  				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                        0,
   293  				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                               0,
   294  				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                    0,
   295  				"envoy_cluster_upstream_rq_retry_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                      0,
   296  				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                             0,
   297  				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                    0,
   298  				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                         0,
   299  				"envoy_cluster_upstream_rq_rx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                           0,
   300  				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                              0,
   301  				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                     0,
   302  				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                          0,
   303  				"envoy_cluster_upstream_rq_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                            0,
   304  				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                                1,
   305  				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                       1758,
   306  				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                            1,
   307  				"envoy_cluster_upstream_rq_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                              3,
   308  				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_consul-dataplane_mynginx":                             0,
   309  				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_local_app_mynginx":                                    0,
   310  				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_original-destination_mynginx":                         0,
   311  				"envoy_cluster_upstream_rq_tx_reset_consul-sandbox-cluster-0159c9d3_default_default_mynginx_prometheus_backend_mynginx":                           0,
   312  				"envoy_listener_admin_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                       1,
   313  				"envoy_listener_admin_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                      2,
   314  				"envoy_listener_admin_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                     0,
   315  				"envoy_listener_admin_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                              0,
   316  				"envoy_listener_admin_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                        3,
   317  				"envoy_listener_admin_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":             0,
   318  				"envoy_listener_admin_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                              0,
   319  				"envoy_listener_admin_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                           0,
   320  				"envoy_listener_admin_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                    0,
   321  				"envoy_listener_admin_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                   0,
   322  				"envoy_listener_admin_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  0,
   323  				"envoy_listener_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                               1,
   324  				"envoy_listener_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                           0,
   325  				"envoy_listener_downstream_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                             0,
   326  				"envoy_listener_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                              3,
   327  				"envoy_listener_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                          6507,
   328  				"envoy_listener_downstream_cx_destroy_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                            1,
   329  				"envoy_listener_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                             0,
   330  				"envoy_listener_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                         0,
   331  				"envoy_listener_downstream_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                           0,
   332  				"envoy_listener_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                      0,
   333  				"envoy_listener_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                  0,
   334  				"envoy_listener_downstream_cx_overload_reject_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                    0,
   335  				"envoy_listener_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                                4,
   336  				"envoy_listener_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                            6507,
   337  				"envoy_listener_downstream_cx_total_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                              1,
   338  				"envoy_listener_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":     0,
   339  				"envoy_listener_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx": 0,
   340  				"envoy_listener_downstream_cx_transport_socket_connect_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":   0,
   341  				"envoy_listener_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                      0,
   342  				"envoy_listener_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                  0,
   343  				"envoy_listener_downstream_global_cx_overflow_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                    0,
   344  				"envoy_listener_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                   0,
   345  				"envoy_listener_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":               0,
   346  				"envoy_listener_downstream_listener_filter_error_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                 0,
   347  				"envoy_listener_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":            0,
   348  				"envoy_listener_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":        0,
   349  				"envoy_listener_downstream_listener_filter_remote_close_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":          0,
   350  				"envoy_listener_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                           0,
   351  				"envoy_listener_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                       0,
   352  				"envoy_listener_downstream_pre_cx_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                         0,
   353  				"envoy_listener_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_0.0.0.0_20200_mynginx":                          0,
   354  				"envoy_listener_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_10.50.132.6_20000_mynginx":                      0,
   355  				"envoy_listener_downstream_pre_cx_timeout_consul-sandbox-cluster-0159c9d3_default_default_mynginx_127.0.0.1_15001_mynginx":                        0,
   356  				"envoy_listener_manager_listener_added_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                           3,
   357  				"envoy_listener_manager_listener_create_failure_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  0,
   358  				"envoy_listener_manager_listener_create_success_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  6,
   359  				"envoy_listener_manager_listener_in_place_updated_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                0,
   360  				"envoy_listener_manager_listener_modified_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                        0,
   361  				"envoy_listener_manager_listener_removed_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                         0,
   362  				"envoy_listener_manager_listener_stopped_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                         0,
   363  				"envoy_listener_manager_total_listeners_active_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                   3,
   364  				"envoy_listener_manager_total_listeners_draining_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                 0,
   365  				"envoy_listener_manager_total_listeners_warming_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                  0,
   366  				"envoy_server_memory_allocated_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                   7742368,
   367  				"envoy_server_memory_heap_size_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                   14680064,
   368  				"envoy_server_memory_physical_size_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                               19175778,
   369  				"envoy_server_parent_connections_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                 0,
   370  				"envoy_server_state_draining_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                     0,
   371  				"envoy_server_state_initializing_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                 0,
   372  				"envoy_server_state_live_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                         1,
   373  				"envoy_server_state_pre_initializing_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                             0,
   374  				"envoy_server_total_connections_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                  0,
   375  				"envoy_server_uptime_consul-sandbox-cluster-0159c9d3_default_default_mynginx_mynginx":                                                             32527,
   376  			},
   377  		},
   378  		"case envoy": {
   379  			prepare: prepareCaseEnvoyStats,
   380  			wantMetrics: map[string]int64{
   381  				"envoy_cluster_manager_active_clusters":                                       1,
   382  				"envoy_cluster_manager_cluster_added":                                         1,
   383  				"envoy_cluster_manager_cluster_modified":                                      0,
   384  				"envoy_cluster_manager_cluster_removed":                                       0,
   385  				"envoy_cluster_manager_cluster_updated":                                       0,
   386  				"envoy_cluster_manager_cluster_updated_via_merge":                             0,
   387  				"envoy_cluster_manager_update_merge_cancelled":                                0,
   388  				"envoy_cluster_manager_update_out_of_merge_window":                            0,
   389  				"envoy_cluster_manager_warming_clusters":                                      0,
   390  				"envoy_cluster_membership_change_service_envoyproxy_io":                       1,
   391  				"envoy_cluster_membership_degraded_service_envoyproxy_io":                     0,
   392  				"envoy_cluster_membership_excluded_service_envoyproxy_io":                     0,
   393  				"envoy_cluster_membership_healthy_service_envoyproxy_io":                      1,
   394  				"envoy_cluster_update_empty_service_envoyproxy_io":                            0,
   395  				"envoy_cluster_update_failure_service_envoyproxy_io":                          0,
   396  				"envoy_cluster_update_no_rebuild_service_envoyproxy_io":                       0,
   397  				"envoy_cluster_update_success_service_envoyproxy_io":                          1242,
   398  				"envoy_cluster_upstream_cx_active_service_envoyproxy_io":                      0,
   399  				"envoy_cluster_upstream_cx_connect_attempts_exceeded_service_envoyproxy_io":   0,
   400  				"envoy_cluster_upstream_cx_connect_fail_service_envoyproxy_io":                0,
   401  				"envoy_cluster_upstream_cx_connect_timeout_service_envoyproxy_io":             0,
   402  				"envoy_cluster_upstream_cx_destroy_local_service_envoyproxy_io":               0,
   403  				"envoy_cluster_upstream_cx_destroy_remote_service_envoyproxy_io":              0,
   404  				"envoy_cluster_upstream_cx_destroy_service_envoyproxy_io":                     0,
   405  				"envoy_cluster_upstream_cx_http1_total_service_envoyproxy_io":                 0,
   406  				"envoy_cluster_upstream_cx_http2_total_service_envoyproxy_io":                 0,
   407  				"envoy_cluster_upstream_cx_http3_total_service_envoyproxy_io":                 0,
   408  				"envoy_cluster_upstream_cx_idle_timeout_service_envoyproxy_io":                0,
   409  				"envoy_cluster_upstream_cx_max_duration_reached_service_envoyproxy_io":        0,
   410  				"envoy_cluster_upstream_cx_overflow_service_envoyproxy_io":                    0,
   411  				"envoy_cluster_upstream_cx_rx_bytes_buffered_service_envoyproxy_io":           0,
   412  				"envoy_cluster_upstream_cx_rx_bytes_total_service_envoyproxy_io":              0,
   413  				"envoy_cluster_upstream_cx_total_service_envoyproxy_io":                       0,
   414  				"envoy_cluster_upstream_cx_tx_bytes_buffered_service_envoyproxy_io":           0,
   415  				"envoy_cluster_upstream_cx_tx_bytes_total_service_envoyproxy_io":              0,
   416  				"envoy_cluster_upstream_rq_active_service_envoyproxy_io":                      0,
   417  				"envoy_cluster_upstream_rq_cancelled_service_envoyproxy_io":                   0,
   418  				"envoy_cluster_upstream_rq_maintenance_mode_service_envoyproxy_io":            0,
   419  				"envoy_cluster_upstream_rq_max_duration_reached_service_envoyproxy_io":        0,
   420  				"envoy_cluster_upstream_rq_pending_active_service_envoyproxy_io":              0,
   421  				"envoy_cluster_upstream_rq_pending_failure_eject_service_envoyproxy_io":       0,
   422  				"envoy_cluster_upstream_rq_pending_overflow_service_envoyproxy_io":            0,
   423  				"envoy_cluster_upstream_rq_pending_total_service_envoyproxy_io":               0,
   424  				"envoy_cluster_upstream_rq_per_try_timeout_service_envoyproxy_io":             0,
   425  				"envoy_cluster_upstream_rq_retry_backoff_exponential_service_envoyproxy_io":   0,
   426  				"envoy_cluster_upstream_rq_retry_backoff_ratelimited_service_envoyproxy_io":   0,
   427  				"envoy_cluster_upstream_rq_retry_service_envoyproxy_io":                       0,
   428  				"envoy_cluster_upstream_rq_retry_success_service_envoyproxy_io":               0,
   429  				"envoy_cluster_upstream_rq_rx_reset_service_envoyproxy_io":                    0,
   430  				"envoy_cluster_upstream_rq_timeout_service_envoyproxy_io":                     0,
   431  				"envoy_cluster_upstream_rq_total_service_envoyproxy_io":                       0,
   432  				"envoy_cluster_upstream_rq_tx_reset_service_envoyproxy_io":                    0,
   433  				"envoy_listener_admin_downstream_cx_active":                                   2,
   434  				"envoy_listener_admin_downstream_cx_destroy":                                  4,
   435  				"envoy_listener_admin_downstream_cx_overflow":                                 0,
   436  				"envoy_listener_admin_downstream_cx_overload_reject":                          0,
   437  				"envoy_listener_admin_downstream_cx_total":                                    6,
   438  				"envoy_listener_admin_downstream_cx_transport_socket_connect_timeout":         0,
   439  				"envoy_listener_admin_downstream_global_cx_overflow":                          0,
   440  				"envoy_listener_admin_downstream_listener_filter_error":                       0,
   441  				"envoy_listener_admin_downstream_listener_filter_remote_close":                0,
   442  				"envoy_listener_admin_downstream_pre_cx_active":                               0,
   443  				"envoy_listener_admin_downstream_pre_cx_timeout":                              0,
   444  				"envoy_listener_downstream_cx_active_0.0.0.0_10000":                           0,
   445  				"envoy_listener_downstream_cx_destroy_0.0.0.0_10000":                          0,
   446  				"envoy_listener_downstream_cx_overflow_0.0.0.0_10000":                         0,
   447  				"envoy_listener_downstream_cx_overload_reject_0.0.0.0_10000":                  0,
   448  				"envoy_listener_downstream_cx_total_0.0.0.0_10000":                            0,
   449  				"envoy_listener_downstream_cx_transport_socket_connect_timeout_0.0.0.0_10000": 0,
   450  				"envoy_listener_downstream_global_cx_overflow_0.0.0.0_10000":                  0,
   451  				"envoy_listener_downstream_listener_filter_error_0.0.0.0_10000":               0,
   452  				"envoy_listener_downstream_listener_filter_remote_close_0.0.0.0_10000":        0,
   453  				"envoy_listener_downstream_pre_cx_active_0.0.0.0_10000":                       0,
   454  				"envoy_listener_downstream_pre_cx_timeout_0.0.0.0_10000":                      0,
   455  				"envoy_listener_manager_listener_added":                                       1,
   456  				"envoy_listener_manager_listener_create_failure":                              0,
   457  				"envoy_listener_manager_listener_create_success":                              16,
   458  				"envoy_listener_manager_listener_in_place_updated":                            0,
   459  				"envoy_listener_manager_listener_modified":                                    0,
   460  				"envoy_listener_manager_listener_removed":                                     0,
   461  				"envoy_listener_manager_listener_stopped":                                     0,
   462  				"envoy_listener_manager_total_listeners_active":                               1,
   463  				"envoy_listener_manager_total_listeners_draining":                             0,
   464  				"envoy_listener_manager_total_listeners_warming":                              0,
   465  				"envoy_server_memory_allocated":                                               7630184,
   466  				"envoy_server_memory_heap_size":                                               16777216,
   467  				"envoy_server_memory_physical_size":                                           28426958,
   468  				"envoy_server_parent_connections":                                             0,
   469  				"envoy_server_state_draining":                                                 0,
   470  				"envoy_server_state_initializing":                                             0,
   471  				"envoy_server_state_live":                                                     1,
   472  				"envoy_server_state_pre_initializing":                                         0,
   473  				"envoy_server_total_connections":                                              0,
   474  				"envoy_server_uptime":                                                         6225,
   475  			},
   476  		},
   477  		"case invalid data response": {
   478  			prepare:     prepareCaseInvalidDataResponse,
   479  			wantMetrics: nil,
   480  		},
   481  		"case 404": {
   482  			prepare:     prepareCase404,
   483  			wantMetrics: nil,
   484  		},
   485  	}
   486  
   487  	for name, test := range tests {
   488  		t.Run(name, func(t *testing.T) {
   489  			envoy, cleanup := test.prepare()
   490  			defer cleanup()
   491  
   492  			require.True(t, envoy.Init())
   493  
   494  			mx := envoy.Collect()
   495  
   496  			require.Equal(t, test.wantMetrics, mx)
   497  			ensureCollectedHasAllChartsDimsVarsIDs(t, envoy, mx)
   498  		})
   499  	}
   500  }
   501  
   502  func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, envoy *Envoy, mx map[string]int64) {
   503  	for _, chart := range *envoy.Charts() {
   504  		for _, dim := range chart.Dims {
   505  			_, ok := mx[dim.ID]
   506  			assert.Truef(t, ok, "collected metrics has no data for dim '%s' chart '%s'", dim.ID, chart.ID)
   507  		}
   508  		for _, v := range chart.Vars {
   509  			_, ok := mx[v.ID]
   510  			assert.Truef(t, ok, "collected metrics has no data for var '%s' chart '%s'", v.ID, chart.ID)
   511  		}
   512  	}
   513  }
   514  
   515  func prepareCaseEnvoyConsulDataplaneStats() (*Envoy, func()) {
   516  	srv := httptest.NewServer(http.HandlerFunc(
   517  		func(w http.ResponseWriter, r *http.Request) {
   518  			_, _ = w.Write(dataEnvoyConsulDataplane)
   519  		}))
   520  	envoy := New()
   521  	envoy.URL = srv.URL
   522  
   523  	return envoy, srv.Close
   524  }
   525  
   526  func prepareCaseEnvoyStats() (*Envoy, func()) {
   527  	srv := httptest.NewServer(http.HandlerFunc(
   528  		func(w http.ResponseWriter, r *http.Request) {
   529  			_, _ = w.Write(dataEnvoy)
   530  		}))
   531  	envoy := New()
   532  	envoy.URL = srv.URL
   533  
   534  	return envoy, srv.Close
   535  }
   536  
   537  func prepareCaseInvalidDataResponse() (*Envoy, func()) {
   538  	srv := httptest.NewServer(http.HandlerFunc(
   539  		func(w http.ResponseWriter, r *http.Request) {
   540  			_, _ = w.Write([]byte("hello and\n goodbye"))
   541  		}))
   542  	envoy := New()
   543  	envoy.URL = srv.URL
   544  
   545  	return envoy, srv.Close
   546  }
   547  
   548  func prepareCase404() (*Envoy, func()) {
   549  	srv := httptest.NewServer(http.HandlerFunc(
   550  		func(w http.ResponseWriter, r *http.Request) {
   551  			w.WriteHeader(http.StatusNotFound)
   552  		}))
   553  	envoy := New()
   554  	envoy.URL = srv.URL
   555  
   556  	return envoy, srv.Close
   557  }