路由表檢查工具

注意

以下組態僅適用於路由表檢查工具,並非 Envoy 二進制檔案的一部分。路由表檢查工具是一個獨立的二進制檔案,可用於驗證給定組態檔的 Envoy 路由。

以下指定路由表檢查工具的輸入。路由表檢查工具會檢查由 路由器 傳回的路由是否符合預期。此工具可用於檢查叢集名稱、虛擬叢集名稱、虛擬主機名稱、手動路徑重寫、手動主機重寫、路徑重新導向和標頭欄位比對。可以新增其他測試案例的擴展。有關安裝工具和範例工具輸入/輸出的詳細資訊,請參閱 安裝

路由表檢查工具組態由 JSON 測試物件的陣列組成。每個測試物件都由三個部分組成。

測試名稱

此欄位指定每個測試物件的名稱。

輸入值

輸入值欄位指定要傳遞給路由器的參數。範例輸入欄位包括 :authority、:path 和 :method 標頭欄位。:authority 和 :path 欄位指定傳送給路由器的 URL,並且是必要的。所有其他輸入欄位都是選用的。

驗證

驗證欄位指定要檢查的預期值和測試案例。至少需要一個測試案例。

一個簡單的工具組態 JSON 有一個測試案例,如下所示。該測試預期叢集名稱比對為 "instant-server"。

tests
- test_name: Cluster_name_test
  input:
    authority: api.lyft.com
    path: /api/locations
  validate:
    cluster_name: instant-server
tests
- test_name: ...
  input:
    authority: ...
    path: ...
    method: ...
    internal: ...
    random_value: ...
    ssl: ...
    runtime: ...
    additional_request_headers:
      - key: ...
        value: ...
    additional_response_headers:
      - key: ...
        value: ...
  validate:
    cluster_name: ...
    virtual_cluster_name: ...
    virtual_host_name: ...
    host_rewrite: ...
    path_rewrite: ...
    path_redirect: ...
    request_header_matches:
      - name: ...
        string_match:
          exact: ...
    response_header_matches:
      - name: ...
        string_match:
          exact: ...
      - name: ...
        presence_match: ...
test_name

(必要,字串)測試物件的名稱。

input

(必要,物件)傳送給路由器以決定傳回路由的輸入值。

authority

(必要,字串)URL 授權。此值與 path 參數一起定義要比對的 URL。範例授權值為 “api.lyft.com”。

path

(必要,字串)URL 路徑。範例路徑值為 “/foo”。

method

(必要,字串)請求方法。如果未指定,則預設方法為 GET。

internal

(選用,布林值)一個決定是否將 x-envoy-internal 設定為 "true" 的旗標。如果未指定,或如果 internal 等於 false,則不會設定 x-envoy-internal。

random_value

(選用,整數)一個整數,用於識別加權叢集選擇的目標,並作為路由引擎判斷基於執行期的路由是否生效的因素。random_value 的預設值為 0。對於執行期分數分子為 0 的路由,路由檢查工具會將分子變更為 1,以便可以使用設定為 0 的 random_value 來測試它們,以模擬路由已啟用,並將 random_value 設定為任何整數 >= 1 以模擬路由已停用。

ssl

(選用,布林值)一個決定是否將 x-forwarded-proto 設定為 https 或 http 的旗標。透過將 x-forwarded-proto 設定為給定的協定,此工具能夠模擬用戶端透過 http 或 https 發出請求的行為。預設情況下,ssl 為 false,這對應於將 x-forwarded-proto 設定為 http。

runtime

(選用,字串)一個字串,表示要為測試啟用的執行期設定。執行期設定與 random_value 一起由路由器使用,以決定是否應啟用路由。只有小於路由項目上定義的分數百分比的 random_value 才會啟用路由。

additional_request_headers, additional_response_headers

(選用,陣列)要新增為路由判斷輸入的其他標頭。 "authority"、"path"、"method"、"x-forwarded-proto" 和 "x-envoy-internal" 欄位由其他組態選項指定,不應在此處設定。

key

(必要,字串)要新增的標頭欄位名稱。

value

(必要,字串)要新增的標頭欄位值。

validate

(必要,物件)驗證物件指定要比對的傳回路由參數。必須至少指定一個測試參數。使用 "" (空字串)表示不希望有傳回值。例如,若要測試不希望有叢集比對,請使用 {"cluster_name": ""}。

cluster_name

(選用,字串)比對叢集名稱。

virtual_cluster_name

(選用,字串)比對虛擬叢集名稱。

virtual_host_name

(選用,字串)比對虛擬主機名稱。

host_rewrite

(選用,字串)比對重寫後的主機標頭欄位。

path_rewrite

(選用,字串)比對重寫後的路徑標頭欄位。

path_redirect

(選用,字串)比對傳回的重新導向路徑。

code_redirect

(選用,整數)比對重新導向回應代碼。

request_header_fields, response_header_fields

(選用,陣列,已棄用)比對列出的標頭欄位。範例標頭欄位包括 "path"、"cookie" 和 "date" 欄位。標頭欄位會在所有其他測試案例之後檢查。因此,檢查的標頭欄位將是適用時重新導向或重寫路由的標頭欄位。這些欄位已棄用。請改用 request_header_matches、response_header_matches。

key

(必要,字串)要比對的標頭欄位名稱。

value

(必要,字串)要比對的標頭欄位值。

request_header_matches, response_header_matches

(選用,陣列)列出標頭的比對器。範例標頭欄位包括 "path"、"cookie" 和 "date" 欄位,以及在輸入中設定或由路由設定的自訂標頭。標頭欄位會在所有其他測試案例之後檢查。因此,檢查的標頭欄位將是適用時重新導向或重寫路由的標頭欄位。- 比對器指定為 HeaderMatchers,且行為方式相同。

覆蓋率

路由器檢查工具會在成功執行測試結束時報告路由覆蓋率。

> bazel-bin/test/tools/router_check/router_check_tool --config-path ... --test-path ...
Current route coverage: 0.0744863

透過使用 -f--fail-under 旗標,可以利用此報告來強制執行最小覆蓋率百分比。如果覆蓋率低於此百分比,則測試執行將會失敗。

> bazel-bin/test/tools/router_check/router_check_tool --config-path ... --test-path ... --fail-under 8
Current route coverage: 7.44863%
Failed to meet coverage requirement: 8%

預設情況下,覆蓋率報告透過檢查每個路由是否驗證至少一個欄位來測量測試覆蓋率。但是,這可能會在未驗證欄位且稍後變更的測試中留下漏洞。為了獲得更全面的覆蓋率,您可以新增一個旗標 --covall,它將在計算覆蓋率時考慮所有可以測試的可能欄位。

> bazel-bin/test/tools/router_check/router_check_tool --config-path ... --test-path ... --f 7 --covall
Current route coverage: 6.2948%
Failed to meet coverage requirement: 7%