microservices-demo icon indicating copy to clipboard operation
microservices-demo copied to clipboard

[WIP] Use upstream Kubernetes gRPC Health Check feature

Open mathieu-benoit opened this issue 3 years ago • 4 comments
trafficstars

Experimental PR to test/implement https://github.com/GoogleCloudPlatform/microservices-demo/issues/662

This won't work with the current GKE cluster used in CI because it's GKE < 1.24.

In order to test this, you could provision a GKE cluster in 1.24:

gcloud container clusters create test-grpc \
    --release-channel=rapid \
    --cluster-version=1.24

Note: Not an option with 1.23 because it's in alpha and forces users to enable alpha features flag on their Kubernetes clusters.

  • [ ] Test on GKE 1.24
  • [ ] Validate approach for a potential future merge into main
  • [ ] Run image scanning to see differences in terms of CVEs (docker run aquasec/trivy image)
  • [ ] Update CI's + OB Live's GKE clusters to 1.24 to make sure everything works

Once tested/approved, but before thinking about merging it, what are we going to do with this PR?

If we want to support Kubernetes < 1.24 we need to:

  1. either have 2 containers (one with the old bin and the other without) + some Kustomize or Helm or manifests duplication - not ideal here...
  2. or wait for the end of life of 1.23 as an example which is planned for 2023-02-28 (source and source). Apparently for GKE it's 2023-06 (source)

I think 2. is a fair option if we could say that starting 2023-02-28 (or 2023-06) Online Boutique will only work on Kubernetes 1.24+ moving forward?

Complementary information:

Image size locally

  • emailservice: -24%
    • gcr.io/google-samples/microservices-demo/emailservice:v0.3.8: 220MB
    • gcr.io/online-boutique-ci/refs/pull/849/emailservice:849: 190MB
  • paymentservice: -7%
    • gcr.io/google-samples/microservices-demo/paymentservice:v0.3.8: 162MB
    • gcr.io/online-boutique-ci/refs/pull/849/paymentservice:849: 151MB
  • cartservice: -18%
    • gcr.io/google-samples/microservices-demo/cartservice:v0.3.8: 62.1MB
    • gcr.io/online-boutique-ci/refs/pull/849/cartservice:849: 51.2MB
  • frontend: +3% (?)
    • gcr.io/google-samples/microservices-demo/frontend:v0.3.8: 39.9MB
    • gcr.io/online-boutique-ci/refs/pull/849/frontend:849: 41.1MB

mathieu-benoit avatar Jun 09 '22 01:06 mathieu-benoit

@mathieu-benoit Thanks for making progress on this! Also, this (built-in gRPC health-checking) is a really cool features of Kubernetes.

Option 2 is a long wait. Whereas, option 1 seems a bit messy. Especially, considering the fact that we'll just be demonstrating the following:

livenessProbe:
  grpc:
     port: 50051

And also considering the fact that this problem is already well documented. In other words, how much value are we creating by demo-ing the feature on Online Boutique?

I'm leaning toward option 2 (waiting), but still open to either. Let's talk through this during out 1-on-1. For option 2, we need to decide on exactly what to wait on (e.g., wait until the Regular GKE channel becomes 1.24, or just wait until end-of-life for Kubernetes 1.23, etc.). For option 1, we need to determine the engineering effort.

Too Early Today (Jun 9, 2022)

I ran:

gcloud container get-server-config --format "yaml(channels)" --zone us-central1-a

And got (Jun 9, 2022):

Fetching server config for us-central1-a
channels:
- channel: RAPID
  defaultVersion: 1.23.5-gke.2400
  validVersions:
  - 1.24.0-gke.1000
  - 1.23.6-gke.1700
  - 1.23.6-gke.1500
  - 1.23.5-gke.2400
  - 1.22.9-gke.1500
  - 1.22.9-gke.1300
  - 1.22.8-gke.2200
  - 1.21.12-gke.1700
  - 1.21.12-gke.1500
- channel: REGULAR
  defaultVersion: 1.22.8-gke.201
  validVersions:
  - 1.23.5-gke.1501
  - 1.22.8-gke.201
  - 1.21.11-gke.1900
  - 1.21.11-gke.1100
  - 1.20.15-gke.6000
- channel: STABLE
  defaultVersion: 1.21.11-gke.1100
  validVersions:
  - 1.22.8-gke.201
  - 1.22.8-gke.200
  - 1.21.11-gke.1900
  - 1.21.11-gke.1100
  - 1.20.15-gke.6000
  - 1.19.16-gke.11800
  - 1.19.16-gke.11000

Looks like the currently default for GKE's REGULAR channel is 1.22.8-gke.201. Which means, today, it's too early (since the --enable-kubernetes-alpha arg is only supported on Kubernetes 1.23).

NimJay avatar Jun 09 '22 16:06 NimJay

:boom: CI tests failed :see_no_evil:

CI test log

Building go plugin
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=tyk.cov github.com/TykTechnologies/tyk
?   	github.com/TykTechnologies/tyk	[no test files]
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=apidef.cov github.com/TykTechnologies/tyk/apidef
=== RUN   TestSchema
--- PASS: TestSchema (0.02s)
=== RUN   TestEncodeForDB
=== RUN   TestEncodeForDB/update_ScopeClaim_when_Scopes.JWT_is_not_empty_and_OIDC_is_not_enabled
=== RUN   TestEncodeForDB/update_ScopeClaim_when_Scopes.OIDC_is_not_empty_and_OpenID_is_enabled
=== RUN   TestEncodeForDB/EncodeForDB_persist_schema_objects_from_extended_path
--- PASS: TestEncodeForDB (0.00s)
    --- PASS: TestEncodeForDB/update_ScopeClaim_when_Scopes.JWT_is_not_empty_and_OIDC_is_not_enabled (0.00s)
    --- PASS: TestEncodeForDB/update_ScopeClaim_when_Scopes.OIDC_is_not_empty_and_OpenID_is_enabled (0.00s)
    --- PASS: TestEncodeForDB/EncodeForDB_persist_schema_objects_from_extended_path (0.00s)
=== RUN   TestDecodeFromDB
=== RUN   TestDecodeFromDB/update_Scopes.JWT_when_JWTScopeClaimName_is_not_empty
time="Jul 13 19:42:51" level=error msg="Couldn't Decode, leaving as it may be legacy..."
=== RUN   TestDecodeFromDB/update_Scopes.OIDC_when_JWTScopeClaimName_is_not_empty_and_OpenID_is_enabled
time="Jul 13 19:42:51" level=error msg="Couldn't Decode, leaving as it may be legacy..."
--- PASS: TestDecodeFromDB (0.00s)
    --- PASS: TestDecodeFromDB/update_Scopes.JWT_when_JWTScopeClaimName_is_not_empty (0.00s)
    --- PASS: TestDecodeFromDB/update_Scopes.OIDC_when_JWTScopeClaimName_is_not_empty_and_OpenID_is_enabled (0.00s)
=== RUN   TestSchemaGraphqlConfig
--- PASS: TestSchemaGraphqlConfig (0.01s)
=== RUN   TestAPIDefinition_DecodeFromDB_AuthDeprecation
time="Jul 13 19:42:51" level=error msg="Couldn't Decode, leaving as it may be legacy..."
time="Jul 13 19:42:51" level=error msg="Couldn't Decode, leaving as it may be legacy..."
--- PASS: TestAPIDefinition_DecodeFromDB_AuthDeprecation (0.00s)
=== RUN   TestAPIDefinition_GenerateAPIID
--- PASS: TestAPIDefinition_GenerateAPIID (0.00s)
=== RUN   TestAPIDefinition_MigrateVersioning
--- PASS: TestAPIDefinition_MigrateVersioning (0.00s)
=== RUN   TestAPIDefinition_MigrateVersioning_Disabled
=== RUN   TestAPIDefinition_MigrateVersioning_Disabled/multiple_versions
=== RUN   TestAPIDefinition_MigrateVersioning_Disabled/one_version
--- PASS: TestAPIDefinition_MigrateVersioning_Disabled (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_Disabled/multiple_versions (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_Disabled/one_version (0.00s)
=== RUN   TestAPIDefinition_MigrateVersioning_DefaultEmpty
=== RUN   TestAPIDefinition_MigrateVersioning_DefaultEmpty/Default
--- PASS: TestAPIDefinition_MigrateVersioning_DefaultEmpty (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_DefaultEmpty/Default (0.00s)
=== RUN   TestAPIDefinition_MigrateVersioning_Expires
=== RUN   TestAPIDefinition_MigrateVersioning_Expires/version_enabled
=== RUN   TestAPIDefinition_MigrateVersioning_Expires/version_disabled
--- PASS: TestAPIDefinition_MigrateVersioning_Expires (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_Expires/version_enabled (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_Expires/version_disabled (0.00s)
=== RUN   TestAPIDefinition_MigrateVersioning_OverrideTarget
=== RUN   TestAPIDefinition_MigrateVersioning_OverrideTarget/base
=== RUN   TestAPIDefinition_MigrateVersioning_OverrideTarget/version
--- PASS: TestAPIDefinition_MigrateVersioning_OverrideTarget (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_OverrideTarget/base (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_OverrideTarget/version (0.00s)
=== RUN   TestAPIDefinition_MigrateVersioning_StripPath
=== RUN   TestAPIDefinition_MigrateVersioning_StripPath/url
=== RUN   TestAPIDefinition_MigrateVersioning_StripPath/param
=== RUN   TestAPIDefinition_MigrateVersioning_StripPath/header
--- PASS: TestAPIDefinition_MigrateVersioning_StripPath (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_StripPath/url (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_StripPath/param (0.00s)
    --- PASS: TestAPIDefinition_MigrateVersioning_StripPath/header (0.00s)
=== RUN   TestAPIDefinition_MigrateEndpointMeta
--- PASS: TestAPIDefinition_MigrateEndpointMeta (0.00s)
=== RUN   TestAPIDefinition_MigrateCachePlugin
--- PASS: TestAPIDefinition_MigrateCachePlugin (0.00s)
=== RUN   TestAPIDefinition_MigrateAuthConfigNames
--- PASS: TestAPIDefinition_MigrateAuthConfigNames (0.00s)
=== RUN   TestValidationResult_HasErrors
--- PASS: TestValidationResult_HasErrors (0.00s)
=== RUN   TestValidationResult_FirstError
--- PASS: TestValidationResult_FirstError (0.00s)
=== RUN   TestValidationResult_ErrorStrings
--- PASS: TestValidationResult_ErrorStrings (0.00s)
=== RUN   TestRuleUniqueDataSourceNames_Validate
=== RUN   TestRuleUniqueDataSourceNames_Validate/should_return_invalid_when_data_source_name_is_duplicated
=== RUN   TestRuleUniqueDataSourceNames_Validate/return_valid_when_data_source_names_are_not_duplicated
=== RUN   TestRuleUniqueDataSourceNames_Validate/return_valid_when_there_are_no_data_sources
--- PASS: TestRuleUniqueDataSourceNames_Validate (0.00s)
    --- PASS: TestRuleUniqueDataSourceNames_Validate/should_return_invalid_when_data_source_name_is_duplicated (0.00s)
    --- PASS: TestRuleUniqueDataSourceNames_Validate/return_valid_when_data_source_names_are_not_duplicated (0.00s)
    --- PASS: TestRuleUniqueDataSourceNames_Validate/return_valid_when_there_are_no_data_sources (0.00s)
=== RUN   TestRuleAtLeastEnableOneAuthConfig_Validate
=== RUN   TestRuleAtLeastEnableOneAuthConfig_Validate/should_return_invalid_when_all_sources_are_disabled_for_enabled_auth_mechanisms
=== RUN   TestRuleAtLeastEnableOneAuthConfig_Validate/should_return_valid_when_at_least_one_source_is_enabled_for_enabled_auth_mechanisms
--- PASS: TestRuleAtLeastEnableOneAuthConfig_Validate (0.00s)
    --- PASS: TestRuleAtLeastEnableOneAuthConfig_Validate/should_return_invalid_when_all_sources_are_disabled_for_enabled_auth_mechanisms (0.00s)
    --- PASS: TestRuleAtLeastEnableOneAuthConfig_Validate/should_return_valid_when_at_least_one_source_is_enabled_for_enabled_auth_mechanisms (0.00s)
PASS
coverage: 61.7% of statements
ok  	github.com/TykTechnologies/tyk/apidef	0.074s	coverage: 61.7% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=adapter.cov github.com/TykTechnologies/tyk/apidef/adapter
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_proxy-only_mode
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_internal_proxy-only_api
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_engine_execution_mode_without_error
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_supergraph_execution_mode_without_error
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_supergraph_with_batching_disabled
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_subgraph_without_error
=== RUN   TestGraphQLConfigAdapter_EngineConfigV2/should_return_an_error_for_unsupported_config
--- PASS: TestGraphQLConfigAdapter_EngineConfigV2 (0.04s)
    --- PASS: TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_proxy-only_mode (0.01s)
    --- PASS: TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_internal_proxy-only_api (0.00s)
    --- PASS: TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_engine_execution_mode_without_error (0.01s)
    --- PASS: TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_supergraph_execution_mode_without_error (0.01s)
    --- PASS: TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_supergraph_with_batching_disabled (0.01s)
    --- PASS: TestGraphQLConfigAdapter_EngineConfigV2/should_create_v2_config_for_subgraph_without_error (0.00s)
    --- PASS: TestGraphQLConfigAdapter_EngineConfigV2/should_return_an_error_for_unsupported_config (0.00s)
=== RUN   TestGraphQLConfigAdapter_supergraphDataSourceConfigs
--- PASS: TestGraphQLConfigAdapter_supergraphDataSourceConfigs (0.00s)
=== RUN   TestGraphQLConfigAdapter_engineConfigV2FieldConfigs
--- PASS: TestGraphQLConfigAdapter_engineConfigV2FieldConfigs (0.01s)
=== RUN   TestGraphQLConfigAdapter_engineConfigV2DataSources
--- PASS: TestGraphQLConfigAdapter_engineConfigV2DataSources (0.01s)
PASS
coverage: 88.9% of statements
ok  	github.com/TykTechnologies/tyk/apidef/adapter	0.103s	coverage: 88.9% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=importer.cov github.com/TykTechnologies/tyk/apidef/importer
=== RUN   TestToAPIDefinition_Swagger
--- PASS: TestToAPIDefinition_Swagger (0.00s)
=== RUN   TestToAPIDefinition_WSDL
time="Jul 13 19:42:54" level=error msg="Port for service HolidayService2 not found. Skiping processing of the service"
time="Jul 13 19:42:54" level=error msg="Unsupported transport protocol. Skipping process of the service StockQuoteService"
time="Jul 13 19:42:54" level=error msg="Port for service StockQuoteService not found. Skiping processing of the service"
--- PASS: TestToAPIDefinition_WSDL (0.02s)
PASS
coverage: 65.7% of statements
ok  	github.com/TykTechnologies/tyk/apidef/importer	0.062s	coverage: 65.7% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=oas.cov github.com/TykTechnologies/tyk/apidef/oas
=== RUN   TestAuthentication
=== RUN   TestAuthentication/Fill_just_GoPlugin
--- PASS: TestAuthentication (0.00s)
    --- PASS: TestAuthentication/Fill_just_GoPlugin (0.00s)
=== RUN   TestScopes
--- PASS: TestScopes (0.00s)
=== RUN   TestAuthSources
--- PASS: TestAuthSources (0.00s)
=== RUN   TestAuthSource
=== RUN   TestAuthSource/param
=== RUN   TestAuthSource/cookie
--- PASS: TestAuthSource (0.00s)
    --- PASS: TestAuthSource/param (0.00s)
    --- PASS: TestAuthSource/cookie (0.00s)
=== RUN   TestSignature
--- PASS: TestSignature (0.00s)
=== RUN   TestHMAC
--- PASS: TestHMAC (0.00s)
=== RUN   TestOIDC
--- PASS: TestOIDC (0.00s)
=== RUN   TestGoPlugin
--- PASS: TestGoPlugin (0.00s)
=== RUN   TestCustomPlugin
--- PASS: TestCustomPlugin (0.00s)
=== RUN   TestOAS_BuildDefaultTykExtension
=== PAUSE TestOAS_BuildDefaultTykExtension
=== RUN   TestGetTykExtensionConfigParams
=== RUN   TestGetTykExtensionConfigParams/extract_all_params_when_provided
=== RUN   TestGetTykExtensionConfigParams/nil_when_no_params_provided
=== RUN   TestGetTykExtensionConfigParams/nil_for_middleware_when_params_not_provided
=== RUN   TestGetTykExtensionConfigParams/not_nil_when_at_least_one_parameter_is_provided
--- PASS: TestGetTykExtensionConfigParams (0.00s)
    --- PASS: TestGetTykExtensionConfigParams/extract_all_params_when_provided (0.00s)
    --- PASS: TestGetTykExtensionConfigParams/nil_when_no_params_provided (0.00s)
    --- PASS: TestGetTykExtensionConfigParams/nil_for_middleware_when_params_not_provided (0.00s)
    --- PASS: TestGetTykExtensionConfigParams/not_nil_when_at_least_one_parameter_is_provided (0.00s)
=== RUN   TestOAS_importAuthentication
=== RUN   TestOAS_importAuthentication/security_is_empty
=== RUN   TestOAS_importAuthentication/add_first_authentication_in_case_of_OR_condition
=== RUN   TestOAS_importAuthentication/add_first_authentication_in_case_of_OR_condition/enable=true
=== RUN   TestOAS_importAuthentication/add_first_authentication_in_case_of_OR_condition/enable=false
=== RUN   TestOAS_importAuthentication/update_existing_one
=== RUN   TestOAS_importAuthentication/add_multiple_authentication_with_AND_condition
=== RUN   TestOAS_importAuthentication/add_multiple_authentication_with_AND_condition/enable=true
=== RUN   TestOAS_importAuthentication/add_multiple_authentication_with_AND_condition/enable=false
--- PASS: TestOAS_importAuthentication (0.00s)
    --- PASS: TestOAS_importAuthentication/security_is_empty (0.00s)
    --- PASS: TestOAS_importAuthentication/add_first_authentication_in_case_of_OR_condition (0.00s)
        --- PASS: TestOAS_importAuthentication/add_first_authentication_in_case_of_OR_condition/enable=true (0.00s)
        --- PASS: TestOAS_importAuthentication/add_first_authentication_in_case_of_OR_condition/enable=false (0.00s)
    --- PASS: TestOAS_importAuthentication/update_existing_one (0.00s)
    --- PASS: TestOAS_importAuthentication/add_multiple_authentication_with_AND_condition (0.00s)
        --- PASS: TestOAS_importAuthentication/add_multiple_authentication_with_AND_condition/enable=true (0.00s)
        --- PASS: TestOAS_importAuthentication/add_multiple_authentication_with_AND_condition/enable=false (0.00s)
=== RUN   TestSecuritySchemes_Import
=== RUN   TestSecuritySchemes_Import/token
=== RUN   TestSecuritySchemes_Import/token/enable=true
=== RUN   TestSecuritySchemes_Import/token/enable=false
=== RUN   TestSecuritySchemes_Import/jwt
=== RUN   TestSecuritySchemes_Import/basic
=== RUN   TestSecuritySchemes_Import/oauth
=== RUN   TestSecuritySchemes_Import/unsupported_scheme
=== RUN   TestSecuritySchemes_Import/update_existing_one
--- PASS: TestSecuritySchemes_Import (0.00s)
    --- PASS: TestSecuritySchemes_Import/token (0.00s)
        --- PASS: TestSecuritySchemes_Import/token/enable=true (0.00s)
        --- PASS: TestSecuritySchemes_Import/token/enable=false (0.00s)
    --- PASS: TestSecuritySchemes_Import/jwt (0.00s)
    --- PASS: TestSecuritySchemes_Import/basic (0.00s)
    --- PASS: TestSecuritySchemes_Import/oauth (0.00s)
    --- PASS: TestSecuritySchemes_Import/unsupported_scheme (0.00s)
    --- PASS: TestSecuritySchemes_Import/update_existing_one (0.00s)
=== RUN   TestSecuritySchemes_GetBaseIdentityProvider
=== RUN   TestSecuritySchemes_GetBaseIdentityProvider/empty
=== RUN   TestSecuritySchemes_GetBaseIdentityProvider/empty/zero
=== RUN   TestSecuritySchemes_GetBaseIdentityProvider/empty/one
=== RUN   TestSecuritySchemes_GetBaseIdentityProvider/token
=== RUN   TestSecuritySchemes_GetBaseIdentityProvider/jwt
=== RUN   TestSecuritySchemes_GetBaseIdentityProvider/oauth
--- PASS: TestSecuritySchemes_GetBaseIdentityProvider (0.00s)
    --- PASS: TestSecuritySchemes_GetBaseIdentityProvider/empty (0.00s)
        --- PASS: TestSecuritySchemes_GetBaseIdentityProvider/empty/zero (0.00s)
        --- PASS: TestSecuritySchemes_GetBaseIdentityProvider/empty/one (0.00s)
    --- PASS: TestSecuritySchemes_GetBaseIdentityProvider/token (0.00s)
    --- PASS: TestSecuritySchemes_GetBaseIdentityProvider/jwt (0.00s)
    --- PASS: TestSecuritySchemes_GetBaseIdentityProvider/oauth (0.00s)
=== RUN   TestToken_Import
--- PASS: TestToken_Import (0.00s)
=== RUN   TestAuthSources_Import
=== RUN   TestAuthSources_Import/header
=== RUN   TestAuthSources_Import/query
=== RUN   TestAuthSources_Import/cookie
--- PASS: TestAuthSources_Import (0.00s)
    --- PASS: TestAuthSources_Import/header (0.00s)
    --- PASS: TestAuthSources_Import/query (0.00s)
    --- PASS: TestAuthSources_Import/cookie (0.00s)
=== RUN   TestJWT_Import
--- PASS: TestJWT_Import (0.00s)
=== RUN   TestBasic_Import
--- PASS: TestBasic_Import (0.00s)
=== RUN   TestOAuth_Import
--- PASS: TestOAuth_Import (0.00s)
=== RUN   TestRetainOldServerURL
=== RUN   TestRetainOldServerURL/empty_old_servers
=== RUN   TestRetainOldServerURL/existing_old_servers
=== RUN   TestRetainOldServerURL/duplicate_in_servers
=== RUN   TestRetainOldServerURL/empty_new_servers
=== RUN   TestRetainOldServerURL/empty_old_servers#01
--- PASS: TestRetainOldServerURL (0.00s)
    --- PASS: TestRetainOldServerURL/empty_old_servers (0.00s)
    --- PASS: TestRetainOldServerURL/existing_old_servers (0.00s)
    --- PASS: TestRetainOldServerURL/duplicate_in_servers (0.00s)
    --- PASS: TestRetainOldServerURL/empty_new_servers (0.00s)
    --- PASS: TestRetainOldServerURL/empty_old_servers#01 (0.00s)
=== RUN   TestMiddleware
--- PASS: TestMiddleware (0.00s)
=== RUN   TestGlobal
--- PASS: TestGlobal (0.00s)
=== RUN   TestCORS
--- PASS: TestCORS (0.00s)
=== RUN   TestCache
--- PASS: TestCache (0.00s)
=== RUN   TestExtendedPaths
=== RUN   TestExtendedPaths/empty
=== RUN   TestExtendedPaths/filled
--- PASS: TestExtendedPaths (0.00s)
    --- PASS: TestExtendedPaths/empty (0.00s)
    --- PASS: TestExtendedPaths/filled (0.00s)
=== RUN   TestMockResponse
--- PASS: TestMockResponse (0.00s)
=== RUN   TestOAS
=== PAUSE TestOAS
=== RUN   TestOAS_AddServers
=== PAUSE TestOAS_AddServers
=== RUN   TestOAS_UpdateServers
=== PAUSE TestOAS_UpdateServers
=== RUN   TestOAS_GetSecuritySchemes
--- PASS: TestOAS_GetSecuritySchemes (0.01s)
=== RUN   Test_toStructIfMap
--- PASS: Test_toStructIfMap (0.00s)
=== RUN   TestOAS_MarshalJSON
--- PASS: TestOAS_MarshalJSON (0.00s)
=== RUN   TestShouldOmit
--- PASS: TestShouldOmit (0.00s)
=== RUN   TestOAS_PathsAndOperations
=== PAUSE TestOAS_PathsAndOperations
=== RUN   TestOAS_PathsAndOperationsRegex
=== PAUSE TestOAS_PathsAndOperationsRegex
=== RUN   TestOAS_RegexOperationIDs
=== PAUSE TestOAS_RegexOperationIDs
=== RUN   TestOAS_RegexPaths
=== PAUSE TestOAS_RegexPaths
=== RUN   TestValidateRequest
--- PASS: TestValidateRequest (0.00s)
=== RUN   TestXTykAPIGateway
=== RUN   TestXTykAPIGateway/empty
=== RUN   TestXTykAPIGateway/filled_OAS
=== RUN   TestXTykAPIGateway/filled_old
--- PASS: TestXTykAPIGateway (0.00s)
    --- PASS: TestXTykAPIGateway/empty (0.00s)
    --- SKIP: TestXTykAPIGateway/filled_OAS (0.00s)
    --- SKIP: TestXTykAPIGateway/filled_old (0.00s)
=== RUN   TestInfo
--- PASS: TestInfo (0.00s)
=== RUN   TestState
--- PASS: TestState (0.00s)
=== RUN   TestVersioning
--- PASS: TestVersioning (0.00s)
=== RUN   TestOAS_Security
--- PASS: TestOAS_Security (0.00s)
=== RUN   TestOAS_ApiKeyScheme
=== RUN   TestOAS_ApiKeyScheme/should_not_set_header_name_in_tyk_extension
=== RUN   TestOAS_ApiKeyScheme/should_not_set_query_name_in_tyk_extension
=== RUN   TestOAS_ApiKeyScheme/should_not_set_cookie_name_in_tyk_extension
=== RUN   TestOAS_ApiKeyScheme/already_filled_scheme_in=header_value_should_be_respected
=== RUN   TestOAS_ApiKeyScheme/already_filled_scheme_in=query_value_should_be_respected
=== RUN   TestOAS_ApiKeyScheme/already_filled_scheme_in=cookie_value_should_be_respected
--- PASS: TestOAS_ApiKeyScheme (0.00s)
    --- PASS: TestOAS_ApiKeyScheme/should_not_set_header_name_in_tyk_extension (0.00s)
    --- PASS: TestOAS_ApiKeyScheme/should_not_set_query_name_in_tyk_extension (0.00s)
    --- PASS: TestOAS_ApiKeyScheme/should_not_set_cookie_name_in_tyk_extension (0.00s)
    --- PASS: TestOAS_ApiKeyScheme/already_filled_scheme_in=header_value_should_be_respected (0.00s)
    --- PASS: TestOAS_ApiKeyScheme/already_filled_scheme_in=query_value_should_be_respected (0.00s)
    --- PASS: TestOAS_ApiKeyScheme/already_filled_scheme_in=cookie_value_should_be_respected (0.00s)
=== RUN   TestOAS_Token
--- PASS: TestOAS_Token (0.00s)
=== RUN   TestOAS_Token_MultipleSecuritySchemes
--- PASS: TestOAS_Token_MultipleSecuritySchemes (0.00s)
=== RUN   TestOAS_AppendSecurity
=== RUN   TestOAS_AppendSecurity/append_new
=== RUN   TestOAS_AppendSecurity/append_same
--- PASS: TestOAS_AppendSecurity (0.00s)
    --- PASS: TestOAS_AppendSecurity/append_new (0.00s)
    --- PASS: TestOAS_AppendSecurity/append_same (0.00s)
=== RUN   TestOAS_JWT
--- PASS: TestOAS_JWT (0.00s)
=== RUN   TestOAS_Basic
--- PASS: TestOAS_Basic (0.00s)
=== RUN   TestOAS_OAuth
--- PASS: TestOAS_OAuth (0.00s)
=== RUN   TestOAS_OIDC
--- PASS: TestOAS_OIDC (0.00s)
=== RUN   TestOAS_CustomPlugin
--- PASS: TestOAS_CustomPlugin (0.00s)
=== RUN   TestOAS_GoPlugin
--- PASS: TestOAS_GoPlugin (0.00s)
=== RUN   TestOAS_TykAuthentication_NoOASSecurity
--- PASS: TestOAS_TykAuthentication_NoOASSecurity (0.00s)
=== RUN   TestServer
=== PAUSE TestServer
=== RUN   TestListenPath
=== PAUSE TestListenPath
=== RUN   TestGatewayTags
=== PAUSE TestGatewayTags
=== RUN   TestClientCertificates
=== PAUSE TestClientCertificates
=== RUN   TestCustomDomain
=== RUN   TestCustomDomain/extractTo_api_definition
=== RUN   TestCustomDomain/extractTo_api_definition/enabled=false,_name=nil
=== RUN   TestCustomDomain/extractTo_api_definition/enabled=false,_name=(valid-domain)
=== RUN   TestCustomDomain/extractTo_api_definition/enabled=true,_name=nil
=== RUN   TestCustomDomain/extractTo_api_definition/enabled=true,_name=(valid-domain)
=== RUN   TestCustomDomain/fillFrom_api_definition
=== RUN   TestCustomDomain/fillFrom_api_definition/disabled=false,_name=nil
=== RUN   TestCustomDomain/fillFrom_api_definition/disabled=false,_name=(valid-domain)
=== RUN   TestCustomDomain/fillFrom_api_definition/disabled=true,_name=nil
=== RUN   TestCustomDomain/fillFrom_api_definition/disabled=true,_name=(valid-domain)
--- PASS: TestCustomDomain (0.00s)
    --- PASS: TestCustomDomain/extractTo_api_definition (0.00s)
        --- PASS: TestCustomDomain/extractTo_api_definition/enabled=false,_name=nil (0.00s)
        --- PASS: TestCustomDomain/extractTo_api_definition/enabled=false,_name=(valid-domain) (0.00s)
        --- PASS: TestCustomDomain/extractTo_api_definition/enabled=true,_name=nil (0.00s)
        --- PASS: TestCustomDomain/extractTo_api_definition/enabled=true,_name=(valid-domain) (0.00s)
    --- PASS: TestCustomDomain/fillFrom_api_definition (0.00s)
        --- PASS: TestCustomDomain/fillFrom_api_definition/disabled=false,_name=nil (0.00s)
        --- PASS: TestCustomDomain/fillFrom_api_definition/disabled=false,_name=(valid-domain) (0.00s)
        --- PASS: TestCustomDomain/fillFrom_api_definition/disabled=true,_name=nil (0.00s)
        --- PASS: TestCustomDomain/fillFrom_api_definition/disabled=true,_name=(valid-domain) (0.00s)
=== RUN   TestTagsExportServer
=== PAUSE TestTagsExportServer
=== RUN   TestUpstream
--- PASS: TestUpstream (0.00s)
=== RUN   TestServiceDiscovery
--- PASS: TestServiceDiscovery (0.00s)
=== RUN   TestTest
--- PASS: TestTest (0.00s)
=== RUN   TestUpstreamMutualTLS
=== PAUSE TestUpstreamMutualTLS
=== RUN   TestPinnedPublicKeys
=== PAUSE TestPinnedPublicKeys
=== RUN   TestCertificatePinning
=== RUN   TestCertificatePinning/extractTo_api_definition
=== RUN   TestCertificatePinning/extractTo_api_definition/enabled=false,_domain_to_public_keys_nil
=== RUN   TestCertificatePinning/extractTo_api_definition/enabled=false,_valid_domain_to_public_keys_mapping
=== RUN   TestCertificatePinning/extractTo_api_definition/enabled=true,_valid_domain_to_public_keys_mapping
=== RUN   TestCertificatePinning/extractTo_api_definition/enabled=true,_empty_domain_to_public_keys_mapping
=== RUN   TestCertificatePinning/fillFrom_api_definition
=== RUN   TestCertificatePinning/fillFrom_api_definition/disabled=false,_empty_domain_to_cert_mapping
=== RUN   TestCertificatePinning/fillFrom_api_definition/disabled=true,_empty_domain_to_cert_mapping
=== RUN   TestCertificatePinning/fillFrom_api_definition/disabled=false,_valid_domain_to_cert_mapping
=== RUN   TestCertificatePinning/fillFrom_api_definition/disabled=true,_valid_domain_to_cert_mapping
=== RUN   TestCertificatePinning/empty
=== PAUSE TestCertificatePinning/empty
=== CONT  TestCertificatePinning/empty
--- PASS: TestCertificatePinning (0.00s)
    --- PASS: TestCertificatePinning/extractTo_api_definition (0.00s)
        --- PASS: TestCertificatePinning/extractTo_api_definition/enabled=false,_domain_to_public_keys_nil (0.00s)
        --- PASS: TestCertificatePinning/extractTo_api_definition/enabled=false,_valid_domain_to_public_keys_mapping (0.00s)
        --- PASS: TestCertificatePinning/extractTo_api_definition/enabled=true,_valid_domain_to_public_keys_mapping (0.00s)
        --- PASS: TestCertificatePinning/extractTo_api_definition/enabled=true,_empty_domain_to_public_keys_mapping (0.00s)
    --- PASS: TestCertificatePinning/fillFrom_api_definition (0.00s)
        --- PASS: TestCertificatePinning/fillFrom_api_definition/disabled=false,_empty_domain_to_cert_mapping (0.00s)
        --- PASS: TestCertificatePinning/fillFrom_api_definition/disabled=true,_empty_domain_to_cert_mapping (0.00s)
        --- PASS: TestCertificatePinning/fillFrom_api_definition/disabled=false,_valid_domain_to_cert_mapping (0.00s)
        --- PASS: TestCertificatePinning/fillFrom_api_definition/disabled=true,_valid_domain_to_cert_mapping (0.00s)
    --- PASS: TestCertificatePinning/empty (0.00s)
=== RUN   TestValidateOASObject
=== PAUSE TestValidateOASObject
=== RUN   Test_loadOASSchema
=== PAUSE Test_loadOASSchema
=== RUN   Test_findDefaultVersion
=== PAUSE Test_findDefaultVersion
=== RUN   Test_setDefaultVersion
--- PASS: Test_setDefaultVersion (0.15s)
=== RUN   TestGetOASSchema
=== RUN   TestGetOASSchema/return_default_version_when_req_version_is_empty
=== RUN   TestGetOASSchema/return_minor_version_schema_when_req_version_is_including_patch_version
=== RUN   TestGetOASSchema/return_minor_version_0_when_only_major_version_is_requested
=== RUN   TestGetOASSchema/return_error_when_non_existing_oas_schema_is_requested
=== RUN   TestGetOASSchema/return_error_when_requested_version_is_not_of_semver
--- PASS: TestGetOASSchema (0.16s)
    --- PASS: TestGetOASSchema/return_default_version_when_req_version_is_empty (0.00s)
    --- PASS: TestGetOASSchema/return_minor_version_schema_when_req_version_is_including_patch_version (0.00s)
    --- PASS: TestGetOASSchema/return_minor_version_0_when_only_major_version_is_requested (0.00s)
    --- PASS: TestGetOASSchema/return_error_when_non_existing_oas_schema_is_requested (0.00s)
    --- PASS: TestGetOASSchema/return_error_when_requested_version_is_not_of_semver (0.00s)
=== RUN   TestExtractDocFromXTyk
    xtyk_doc_test.go:28: field Info.Expiration is missing documentation
        field Info.State is missing documentation
        field Info.Versioning is missing documentation
        field Versioning.Enabled is missing documentation
        field Versioning.Name is missing documentation
        field Versioning.Default is missing documentation
        field Versioning.Location is missing documentation
        field Versioning.Key is missing documentation
        field Versioning.Versions is missing documentation
        field VersionToID.Name is missing documentation
        field VersionToID.ID is missing documentation
        field Versioning.StripVersioningData is missing documentation
        field DomainToCertificate.Domain is missing documentation
        field DomainToCertificate.Certificate is missing documentation
        field PinnedPublicKey.Domain is missing documentation
        field PinnedPublicKey.PublicKeys is missing documentation
        field OIDC.SegregateByClientId is missing documentation
        field OIDC.Providers is missing documentation
        field Provider.Issuer is missing documentation
        field Provider.ClientToPolicyMapping is missing documentation
        field ClientToPolicy.ClientID is missing documentation
        field ClientToPolicy.PolicyID is missing documentation
        field OIDC.Scopes is missing documentation
        field Scopes.ClaimName is missing documentation
        field Scopes.ScopeToPolicyMapping is missing documentation
        field ScopeToPolicy.Scope is missing documentation
        field ScopeToPolicy.PolicyID is missing documentation
        field Authentication.SecuritySchemes is missing documentation
        field Global.CORS is missing documentation
        field CORS.Enabled is missing documentation
        field CORS.MaxAge is missing documentation
        field CORS.AllowCredentials is missing documentation
        field CORS.ExposedHeaders is missing documentation
        field CORS.AllowedHeaders is missing documentation
        field CORS.OptionsPassthrough is missing documentation
        field CORS.Debug is missing documentation
        field CORS.AllowedOrigins is missing documentation
        field CORS.AllowedMethods is missing documentation
        field Middleware.Operations is missing documentation
        field Operation.Allow is missing documentation
        field Allowance.Enabled is missing documentation
        field Allowance.IgnoreCase is missing documentation
        field Operation.Block is missing documentation
        field Operation.IgnoreAuthentication is missing documentation
        field Operation.Cache is missing documentation
        field CachePlugin.Enabled is missing documentation
        field CachePlugin.CacheByRegex is missing documentation
        field CachePlugin.CacheResponseCodes is missing documentation
        field Operation.EnforceTimeout is missing documentation
        field EnforceTimeout.Enabled is missing documentation
        field EnforceTimeout.Value is missing documentation
        field Operation.ValidateRequest is missing documentation
        field ValidateRequest.Enabled is missing documentation
        field ValidateRequest.ErrorResponseCode is missing documentation
--- PASS: TestExtractDocFromXTyk (0.04s)
=== RUN   TestExtractDocUtils
=== RUN   TestExtractDocUtils/objParser
=== RUN   TestExtractDocUtils/objParser/empty_scope
=== RUN   TestExtractDocUtils/objParser/field_for_internal_use
=== RUN   TestExtractDocUtils/objParser/ignored_field
=== RUN   TestExtractDocUtils/objParser/parse_inline_field_with_name
=== RUN   TestExtractDocUtils/objParser/field_not_known
=== RUN   TestExtractDocUtils/jsonTagFromBasicLit
=== RUN   TestExtractDocUtils/fieldTypeToMarkdown
=== RUN   TestExtractDocUtils/fieldInfoToMarkdown
=== RUN   TestExtractDocUtils/xTykDocToMarkdown
--- PASS: TestExtractDocUtils (0.00s)
    --- PASS: TestExtractDocUtils/objParser (0.00s)
        --- PASS: TestExtractDocUtils/objParser/empty_scope (0.00s)
        --- PASS: TestExtractDocUtils/objParser/field_for_internal_use (0.00s)
        --- PASS: TestExtractDocUtils/objParser/ignored_field (0.00s)
        --- PASS: TestExtractDocUtils/objParser/parse_inline_field_with_name (0.00s)
        --- PASS: TestExtractDocUtils/objParser/field_not_known (0.00s)
    --- PASS: TestExtractDocUtils/jsonTagFromBasicLit (0.00s)
    --- PASS: TestExtractDocUtils/fieldTypeToMarkdown (0.00s)
    --- PASS: TestExtractDocUtils/fieldInfoToMarkdown (0.00s)
    --- PASS: TestExtractDocUtils/xTykDocToMarkdown (0.00s)
=== CONT  TestOAS_BuildDefaultTykExtension
=== CONT  TestListenPath
=== RUN   TestOAS_BuildDefaultTykExtension/build_tyk_extension_with_no_supplied_params
=== CONT  TestOAS_RegexPaths
--- PASS: TestListenPath (0.00s)
=== RUN   TestOAS_BuildDefaultTykExtension/build_tyk_extension_with_supplied_params
=== RUN   TestOAS_BuildDefaultTykExtension/do_not_override_existing_tyk_extension_by_default
--- PASS: TestOAS_RegexPaths (0.00s)
=== CONT  TestOAS_RegexOperationIDs
=== RUN   TestOAS_BuildDefaultTykExtension/override_existing_tyk_extension_with_supplied_params
--- PASS: TestOAS_RegexOperationIDs (0.00s)
=== CONT  TestServer
--- PASS: TestServer (0.00s)
=== RUN   TestOAS_BuildDefaultTykExtension/error_when_supplied_invalid_upstreamURL_param
=== CONT  TestOAS_PathsAndOperations
--- PASS: TestOAS_PathsAndOperations (0.00s)
=== CONT  TestOAS_PathsAndOperationsRegex
=== RUN   TestOAS_BuildDefaultTykExtension/error_when_no_supplied_params_and_invalid_URL_in_servers
--- PASS: TestOAS_PathsAndOperationsRegex (0.00s)
=== CONT  TestOAS_UpdateServers
=== RUN   TestOAS_UpdateServers/empty_servers
=== RUN   TestOAS_UpdateServers/non-empty_servers_replace_with_new
=== RUN   TestOAS_BuildDefaultTykExtension/error_when_no_supplied_params_and_no_servers
=== RUN   TestOAS_UpdateServers/non-empty_servers_not_replace
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares
--- PASS: TestOAS_UpdateServers (0.00s)
    --- PASS: TestOAS_UpdateServers/empty_servers (0.00s)
    --- PASS: TestOAS_UpdateServers/non-empty_servers_replace_with_new (0.00s)
    --- PASS: TestOAS_UpdateServers/non-empty_servers_not_replace (0.00s)
=== CONT  TestOAS_AddServers
=== RUN   TestOAS_AddServers/empty_servers
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList
=== RUN   TestOAS_AddServers/non-empty_servers
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList/enable_allowList_for_all_paths_when_no_configured_operationID_in_OAS
=== RUN   TestOAS_AddServers/non-empty_servers_having_same_URL_that_of_apiURL
=== RUN   TestOAS_AddServers/non-empty_servers_having_same_URL_that_of_apiURL#01
--- PASS: TestOAS_AddServers (0.00s)
    --- PASS: TestOAS_AddServers/empty_servers (0.00s)
    --- PASS: TestOAS_AddServers/non-empty_servers (0.00s)
    --- PASS: TestOAS_AddServers/non-empty_servers_having_same_URL_that_of_apiURL (0.00s)
    --- PASS: TestOAS_AddServers/non-empty_servers_having_same_URL_that_of_apiURL#01 (0.00s)
=== CONT  TestOAS
=== RUN   TestOAS/empty_paths
=== PAUSE TestOAS/empty_paths
=== RUN   TestOAS/nil_paths
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList/enable_allowList_for_all_paths_when_operationID_is_configured_in_OAS
=== PAUSE TestOAS/nil_paths
=== RUN   TestOAS/extract_paths
=== PAUSE TestOAS/extract_paths
=== RUN   TestOAS/auth_configs
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList/disable_allowList_for_all_paths_when_no_configured_operationID_in_OAS
=== PAUSE TestOAS/auth_configs
=== CONT  TestPinnedPublicKeys
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList/disable_allowList_for_all_paths_when_operationID_is_configured_in_OAS
--- PASS: TestPinnedPublicKeys (0.00s)
=== CONT  Test_loadOASSchema
=== RUN   Test_loadOASSchema/load_OAS
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList/override_allowList_(disable)_configured_in_tyk_extension_-_do_not_toggle_block_list_if_any
=== PAUSE Test_loadOASSchema/load_OAS
=== CONT  TestValidateOASObject
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList/override_allowList_(enable)_configured_in_tyk_extension_-_toggle_enabled_block_list_if_any
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/allowList/do_not_configure_allowList_when_parameter_is_not_provided_(nil)
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/do_not_configure_validateRequest_for_paths_where_request_body_is_not_specified_for_application/json
=== RUN   TestValidateOASObject/valid_OAS_object
=== PAUSE TestValidateOASObject/valid_OAS_object
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/enable_validateRequest_for_all_paths_with_application/json_req_body_when_no_configured_operationID_in_OAS
=== RUN   TestValidateOASObject/invalid_OAS_object
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/enable_validateRequest_for_all_paths_with_application/json_req_body_when_operationID_is_configured_in_OAS
=== PAUSE TestValidateOASObject/invalid_OAS_object
=== RUN   TestValidateOASObject/wrong_typed_OAS_object
=== PAUSE TestValidateOASObject/wrong_typed_OAS_object
=== RUN   TestValidateOASObject/should_error_when_requested_oas_schema_not_found
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/disable_validateRequest_for_all_paths_with_application/json_req_body_when_no_configured_operationID_in_OAS
=== PAUSE TestValidateOASObject/should_error_when_requested_oas_schema_not_found
=== CONT  Test_findDefaultVersion
=== RUN   Test_findDefaultVersion/single_version
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/disable_validateRequest_for_all_paths_with_application/json_req_body_when_operationID_is_configured_in_OAS
=== RUN   Test_findDefaultVersion/multiple_versions
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/override_validateRequest_configured_in_tyk_extension
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/do_not_configure_validateRequest_when_parameter_is_not_provided_(nil)
--- PASS: Test_findDefaultVersion (0.00s)
    --- PASS: Test_findDefaultVersion/single_version (0.00s)
    --- PASS: Test_findDefaultVersion/multiple_versions (0.00s)
=== CONT  TestUpstreamMutualTLS
=== RUN   TestUpstreamMutualTLS/extractTo_api_definition
=== RUN   TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/do_not_configure_validateRequest_when_no_paths_have_application/json_req_body
=== PAUSE TestUpstreamMutualTLS/extractTo_api_definition
=== RUN   TestUpstreamMutualTLS/fillFrom_api_definition
=== PAUSE TestUpstreamMutualTLS/fillFrom_api_definition
=== CONT  TestClientCertificates
--- PASS: TestClientCertificates (0.00s)
=== CONT  TestTagsExportServer
=== RUN   TestTagsExportServer/export_segment_tags_if_enabled
=== PAUSE TestTagsExportServer/export_segment_tags_if_enabled
=== RUN   TestTagsExportServer/export_segment_tags_if_disabled
=== PAUSE TestTagsExportServer/export_segment_tags_if_disabled
=== RUN   TestTagsExportServer/empty_segment_tags
=== PAUSE TestTagsExportServer/empty_segment_tags
=== CONT  TestGatewayTags
=== RUN   TestGatewayTags/Fill_GatewayTags_from_APIDef
=== RUN   TestOAS_BuildDefaultTykExtension/do_not_configure_upstream_URL_with_servers_when_upstream_URL_params_is_not_provided_and_upstream_URL_in_x-tyk_in_not_empty
=== CONT  TestGatewayTags/Fill_GatewayTags_from_APIDef
    server_test.go:76: 
=== RUN   TestGatewayTags/Fill_OAS_GatewayTags_from_APIDef
=== RUN   TestOAS_BuildDefaultTykExtension/do_not_configure_state_active,_internal_or_strip_listen_path_when_not_importing
=== PAUSE TestGatewayTags/Fill_OAS_GatewayTags_from_APIDef
=== CONT  TestOAS/extract_paths
--- PASS: TestOAS_BuildDefaultTykExtension (0.02s)
    --- PASS: TestOAS_BuildDefaultTykExtension/build_tyk_extension_with_no_supplied_params (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/build_tyk_extension_with_supplied_params (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/do_not_override_existing_tyk_extension_by_default (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/override_existing_tyk_extension_with_supplied_params (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/error_when_supplied_invalid_upstreamURL_param (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/error_when_no_supplied_params_and_invalid_URL_in_servers (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/error_when_no_supplied_params_and_no_servers (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/middlewares (0.01s)
        --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList (0.01s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList/enable_allowList_for_all_paths_when_no_configured_operationID_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList/enable_allowList_for_all_paths_when_operationID_is_configured_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList/disable_allowList_for_all_paths_when_no_configured_operationID_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList/disable_allowList_for_all_paths_when_operationID_is_configured_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList/override_allowList_(disable)_configured_in_tyk_extension_-_do_not_toggle_block_list_if_any (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList/override_allowList_(enable)_configured_in_tyk_extension_-_toggle_enabled_block_list_if_any (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/allowList/do_not_configure_allowList_when_parameter_is_not_provided_(nil) (0.00s)
        --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest (0.01s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/do_not_configure_validateRequest_for_paths_where_request_body_is_not_specified_for_application/json (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/enable_validateRequest_for_all_paths_with_application/json_req_body_when_no_configured_operationID_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/enable_validateRequest_for_all_paths_with_application/json_req_body_when_operationID_is_configured_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/disable_validateRequest_for_all_paths_with_application/json_req_body_when_no_configured_operationID_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/disable_validateRequest_for_all_paths_with_application/json_req_body_when_operationID_is_configured_in_OAS (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/override_validateRequest_configured_in_tyk_extension (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/do_not_configure_validateRequest_when_parameter_is_not_provided_(nil) (0.00s)
            --- PASS: TestOAS_BuildDefaultTykExtension/middlewares/validateRequest/do_not_configure_validateRequest_when_no_paths_have_application/json_req_body (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/do_not_configure_upstream_URL_with_servers_when_upstream_URL_params_is_not_provided_and_upstream_URL_in_x-tyk_in_not_empty (0.00s)
    --- PASS: TestOAS_BuildDefaultTykExtension/do_not_configure_state_active,_internal_or_strip_listen_path_when_not_importing (0.00s)
=== CONT  TestOAS/auth_configs
=== CONT  TestOAS/nil_paths
=== CONT  TestOAS/empty_paths
=== CONT  Test_loadOASSchema/load_OAS
--- PASS: TestOAS (0.00s)
    --- PASS: TestOAS/extract_paths (0.00s)
    --- PASS: TestOAS/nil_paths (0.00s)
    --- PASS: TestOAS/auth_configs (0.00s)
    --- PASS: TestOAS/empty_paths (0.00s)
=== CONT  TestValidateOASObject/valid_OAS_object
--- PASS: Test_loadOASSchema (0.00s)
    --- PASS: Test_loadOASSchema/load_OAS (0.15s)
=== CONT  TestValidateOASObject/should_error_when_requested_oas_schema_not_found
=== CONT  TestValidateOASObject/invalid_OAS_object
=== CONT  TestValidateOASObject/wrong_typed_OAS_object
=== CONT  TestUpstreamMutualTLS/fillFrom_api_definition
=== RUN   TestUpstreamMutualTLS/fillFrom_api_definition/disabled=false,_empty_domain_to_cert_mapping
=== RUN   TestUpstreamMutualTLS/fillFrom_api_definition/disabled=true,_empty_domain_to_cert_mapping
=== RUN   TestUpstreamMutualTLS/fillFrom_api_definition/disabled=false,_valid_domain_to_cert_mapping
=== RUN   TestUpstreamMutualTLS/fillFrom_api_definition/disabled=true,_valid_domain_to_cert_mapping
=== CONT  TestUpstreamMutualTLS/extractTo_api_definition
=== RUN   TestUpstreamMutualTLS/extractTo_api_definition/enabled=false,_domain_to_certs_nil
=== RUN   TestUpstreamMutualTLS/extractTo_api_definition/enabled=false,_valid_domain_to_cert_mapping
=== RUN   TestUpstreamMutualTLS/extractTo_api_definition/enabled=true,_valid_domain_to_cert_mapping
=== RUN   TestUpstreamMutualTLS/extractTo_api_definition/enabled=true,_empty_domain_to_cert_mapping
--- PASS: TestUpstreamMutualTLS (0.00s)
    --- PASS: TestUpstreamMutualTLS/fillFrom_api_definition (0.00s)
        --- PASS: TestUpstreamMutualTLS/fillFrom_api_definition/disabled=false,_empty_domain_to_cert_mapping (0.00s)
        --- PASS: TestUpstreamMutualTLS/fillFrom_api_definition/disabled=true,_empty_domain_to_cert_mapping (0.00s)
        --- PASS: TestUpstreamMutualTLS/fillFrom_api_definition/disabled=false,_valid_domain_to_cert_mapping (0.00s)
        --- PASS: TestUpstreamMutualTLS/fillFrom_api_definition/disabled=true,_valid_domain_to_cert_mapping (0.00s)
    --- PASS: TestUpstreamMutualTLS/extractTo_api_definition (0.00s)
        --- PASS: TestUpstreamMutualTLS/extractTo_api_definition/enabled=false,_domain_to_certs_nil (0.00s)
        --- PASS: TestUpstreamMutualTLS/extractTo_api_definition/enabled=false,_valid_domain_to_cert_mapping (0.00s)
        --- PASS: TestUpstreamMutualTLS/extractTo_api_definition/enabled=true,_valid_domain_to_cert_mapping (0.00s)
        --- PASS: TestUpstreamMutualTLS/extractTo_api_definition/enabled=true,_empty_domain_to_cert_mapping (0.00s)
=== CONT  TestTagsExportServer/export_segment_tags_if_disabled
=== CONT  TestTagsExportServer/empty_segment_tags
=== CONT  TestTagsExportServer/export_segment_tags_if_enabled
--- PASS: TestTagsExportServer (0.00s)
    --- PASS: TestTagsExportServer/export_segment_tags_if_disabled (0.00s)
    --- PASS: TestTagsExportServer/empty_segment_tags (0.00s)
    --- PASS: TestTagsExportServer/export_segment_tags_if_enabled (0.00s)
=== CONT  TestGatewayTags/Fill_OAS_GatewayTags_from_APIDef
--- PASS: TestGatewayTags (0.00s)
    --- SKIP: TestGatewayTags/Fill_GatewayTags_from_APIDef (0.00s)
    --- PASS: TestGatewayTags/Fill_OAS_GatewayTags_from_APIDef (0.00s)
--- PASS: TestValidateOASObject (0.00s)
    --- PASS: TestValidateOASObject/should_error_when_requested_oas_schema_not_found (0.00s)
    --- PASS: TestValidateOASObject/valid_OAS_object (0.19s)
    --- PASS: TestValidateOASObject/invalid_OAS_object (0.04s)
    --- PASS: TestValidateOASObject/wrong_typed_OAS_object (0.04s)
PASS
coverage: 91.0% of statements
ok  	github.com/TykTechnologies/tyk/apidef/oas	0.839s	coverage: 91.0% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=schema.cov github.com/TykTechnologies/tyk/apidef/oas/schema
?   	github.com/TykTechnologies/tyk/apidef/oas/schema	[no test files]
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=certs.cov github.com/TykTechnologies/tyk/certs
=== RUN   TestAddCertificate
    util.go:32: Skipping flaky test
--- SKIP: TestAddCertificate (0.00s)
=== RUN   TestCertificateStorage
=== RUN   TestCertificateStorage/File_certificates
time="2022-07-13T19:43:00Z" level=warning msg="Can't retrieve certificate:wrongopen wrong: no such file or directory" prefix=cert_storage
=== RUN   TestCertificateStorage/Remote_storage_certificates
=== RUN   TestCertificateStorage/Private_certificates
=== RUN   TestCertificateStorage/Public_keys
--- PASS: TestCertificateStorage (1.66s)
    --- PASS: TestCertificateStorage/File_certificates (0.00s)
    --- PASS: TestCertificateStorage/Remote_storage_certificates (0.00s)
    --- PASS: TestCertificateStorage/Private_certificates (0.00s)
    --- PASS: TestCertificateStorage/Public_keys (0.00s)
=== RUN   TestStorageIndex
--- PASS: TestStorageIndex (0.43s)
PASS
coverage: 46.5% of statements
ok  	github.com/TykTechnologies/tyk/certs	2.129s	coverage: 46.5% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=checkup.cov github.com/TykTechnologies/tyk/checkup
?   	github.com/TykTechnologies/tyk/checkup	[no test files]
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=cli.cov github.com/TykTechnologies/tyk/cli
?   	github.com/TykTechnologies/tyk/cli	[no test files]
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=bundler.cov github.com/TykTechnologies/tyk/cli/bundler
=== RUN   TestCommands
time="Jul 13 19:43:02" level=info msg="Building bundle using 'manifest.json'" prefix=tyk
time="Jul 13 19:43:02" level=warning msg="Using default bundle path 'bundle.zip'" prefix=tyk
time="Jul 13 19:43:02" level=warning msg="The bundle will be unsigned" prefix=tyk
time="Jul 13 19:43:02" level=info msg="Wrote 'bundle.zip' (377 bytes)" prefix=tyk
--- PASS: TestCommands (0.01s)
=== RUN   TestBuild
=== RUN   TestBuild/Bundle_errors
time="Jul 13 19:43:02" level=info msg="Building bundle using 'manifest.json'" prefix=tyk
time="Jul 13 19:43:02" level=info msg="Building bundle using 'manifest.json'" prefix=tyk
time="Jul 13 19:43:02" level=info msg="Building bundle using 'manifest.json'" prefix=tyk
time="Jul 13 19:43:02" level=info msg="Building bundle using 'manifest.json'" prefix=tyk
time="Jul 13 19:43:02" level=info msg="Building bundle using 'manifest.json'" prefix=tyk
=== RUN   TestBuild/Simple_bundle_build
time="Jul 13 19:43:02" level=info msg="Building bundle using 'manifest.json'" prefix=tyk
time="Jul 13 19:43:02" level=warning msg="Using default bundle path 'bundle.zip'" prefix=tyk
time="Jul 13 19:43:02" level=warning msg="The bundle will be unsigned" prefix=tyk
time="Jul 13 19:43:02" level=info msg="Wrote 'bundle.zip' (506 bytes)" prefix=tyk
--- PASS: TestBuild (0.01s)
    --- PASS: TestBuild/Bundle_errors (0.00s)
    --- PASS: TestBuild/Simple_bundle_build (0.01s)
PASS
coverage: 70.7% of statements
ok  	github.com/TykTechnologies/tyk/cli/bundler	0.062s	coverage: 70.7% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=importer.cov github.com/TykTechnologies/tyk/cli/importer
?   	github.com/TykTechnologies/tyk/cli/importer	[no test files]
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=linter.cov github.com/TykTechnologies/tyk/cli/linter
=== RUN   TestLint
=== RUN   TestLint/InvalidJSON
=== RUN   TestLint/WrongType
=== RUN   TestLint/FieldTypo
=== RUN   TestLint/Empty
=== RUN   TestLint/Default
=== RUN   TestLint/OldMonitor
=== RUN   TestLint/NullObject
=== RUN   TestLint/MissingPath
=== RUN   TestLint/ExtraPort
=== RUN   TestLint/BadHost
=== RUN   TestLint/BadLogLevel
=== RUN   TestLint/BadStorageType
=== RUN   TestLint/BadPolicySource
=== RUN   TestLint/MalformedDnsCacheEntry
=== RUN   TestLint/BadDnsCacheTTL
=== RUN   TestLint/ExtraDnsCacheCheckInterval
=== RUN   TestLint/InvalidDnsCacheMultipleIPsHandleStrategy
--- PASS: TestLint (0.22s)
    --- PASS: TestLint/InvalidJSON (0.00s)
    --- PASS: TestLint/WrongType (0.00s)
    --- PASS: TestLint/FieldTypo (0.01s)
    --- PASS: TestLint/Empty (0.01s)
    --- PASS: TestLint/Default (0.02s)
    --- PASS: TestLint/OldMonitor (0.01s)
    --- PASS: TestLint/NullObject (0.01s)
    --- PASS: TestLint/MissingPath (0.02s)
    --- PASS: TestLint/ExtraPort (0.01s)
    --- PASS: TestLint/BadHost (0.01s)
    --- PASS: TestLint/BadLogLevel (0.01s)
    --- PASS: TestLint/BadStorageType (0.01s)
    --- PASS: TestLint/BadPolicySource (0.01s)
    --- PASS: TestLint/MalformedDnsCacheEntry (0.01s)
    --- PASS: TestLint/BadDnsCacheTTL (0.01s)
    --- PASS: TestLint/ExtraDnsCacheCheckInterval (0.01s)
    --- PASS: TestLint/InvalidDnsCacheMultipleIPsHandleStrategy (0.01s)
PASS
coverage: 89.8% of statements
ok  	github.com/TykTechnologies/tyk/cli/linter	0.267s	coverage: 89.8% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=config.cov github.com/TykTechnologies/tyk/config
=== RUN   TestDefaultValueAndWriteDefaultConf
=== RUN   TestDefaultValueAndWriteDefaultConf/ListenPort
=== RUN   TestDefaultValueAndWriteDefaultConf/DnsCacheEnabled
=== RUN   TestDefaultValueAndWriteDefaultConf/DnsCacheTTL
=== RUN   TestDefaultValueAndWriteDefaultConf/CheckInterval
=== RUN   TestDefaultValueAndWriteDefaultConf/CheckMultipleIPsHandleStrategy
--- PASS: TestDefaultValueAndWriteDefaultConf (0.03s)
    --- PASS: TestDefaultValueAndWriteDefaultConf/ListenPort (0.01s)
    --- PASS: TestDefaultValueAndWriteDefaultConf/DnsCacheEnabled (0.01s)
    --- PASS: TestDefaultValueAndWriteDefaultConf/DnsCacheTTL (0.01s)
    --- PASS: TestDefaultValueAndWriteDefaultConf/CheckInterval (0.01s)
    --- PASS: TestDefaultValueAndWriteDefaultConf/CheckMultipleIPsHandleStrategy (0.01s)
=== RUN   TestConfigFiles
time="Jul 13 19:43:05" level=warning msg="No config file found, writing default to /tmp/tyk323441396/tyk1.conf"
time="Jul 13 19:43:05" level=info msg="Loading default configuration..."
--- PASS: TestConfigFiles (0.03s)
=== RUN   TestConfig_GetEventTriggers
=== RUN   TestConfig_GetEventTriggers/Deprecated_configuration
=== RUN   TestConfig_GetEventTriggers/Current_configuration
=== RUN   TestConfig_GetEventTriggers/Both_configured
time="Jul 13 19:43:05" level=info msg="Both event_trigers_defunct and event_triggers_defunct are configured in the config, event_triggers_defunct will be used."
--- PASS: TestConfig_GetEventTriggers (0.01s)
    --- PASS: TestConfig_GetEventTriggers/Deprecated_configuration (0.00s)
    --- PASS: TestConfig_GetEventTriggers/Current_configuration (0.00s)
    --- PASS: TestConfig_GetEventTriggers/Both_configured (0.00s)
=== RUN   TestLoad_tracing
=== RUN   TestLoad_tracing/Read_and_write_config_with_tracing
=== RUN   TestLoad_tracing/Read_and_write_config_with_tracing/testdata/jaeger.json
=== RUN   TestLoad_tracing/Read_and_write_config_with_tracing/testdata/zipkin.json
=== RUN   TestLoad_tracing/Env_only
=== RUN   TestLoad_tracing/Env_only/testdata/env.jaeger.json
=== RUN   TestLoad_tracing/Env_only/testdata/env.zipkin.json
--- PASS: TestLoad_tracing (0.02s)
    --- PASS: TestLoad_tracing/Read_and_write_config_with_tracing (0.01s)
        --- PASS: TestLoad_tracing/Read_and_write_config_with_tracing/testdata/jaeger.json (0.01s)
        --- PASS: TestLoad_tracing/Read_and_write_config_with_tracing/testdata/zipkin.json (0.00s)
    --- PASS: TestLoad_tracing/Env_only (0.01s)
        --- PASS: TestLoad_tracing/Env_only/testdata/env.jaeger.json (0.01s)
        --- PASS: TestLoad_tracing/Env_only/testdata/env.zipkin.json (0.00s)
=== RUN   TestCustomEnvDecoders
--- PASS: TestCustomEnvDecoders (0.00s)
=== RUN   TestLoadZipkin
=== RUN   TestLoadZipkin/loads_env_vars
--- PASS: TestLoadZipkin (0.00s)
    --- PASS: TestLoadZipkin/loads_env_vars (0.00s)
=== RUN   TestLoadJaeger
=== RUN   TestLoadJaeger/Loads_env_vars
--- PASS: TestLoadJaeger (0.01s)
    --- PASS: TestLoadJaeger/Loads_env_vars (0.01s)
PASS
coverage: 69.8% of statements
ok  	github.com/TykTechnologies/tyk/config	0.153s	coverage: 69.8% of statements
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=coprocess.cov github.com/TykTechnologies/tyk/coprocess
?   	github.com/TykTechnologies/tyk/coprocess	[no test files]
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=grpc.cov github.com/TykTechnologies/tyk/coprocess/grpc
=== RUN   TestGRPCDispatch
time="Jul 13 19:43:09" level=info msg="starting test"
time="Jul 13 19:43:09" level=info msg="gRPC dispatcher was initialized" prefix=coprocess
=== RUN   TestGRPCDispatch/Pre_Hook_with_SetHeaders
=== RUN   TestGRPCDispatch/Pre_Hook_with_UTF-8/non-UTF-8_request_data
=== RUN   TestGRPCDispatch/Post_Hook_with_metadata
=== RUN   TestGRPCDispatch/Response_hook
=== RUN   TestGRPCDispatch/Post_Hook_with_allowed_message_length
    util.go:32: Skipping flaky test
=== RUN   TestGRPCDispatch/Post_Hook_with_with_unallowed_message_length
    util.go:32: Skipping flaky test
redis: 2022/07/13 19:43:10 pubsub.go:159: redis: discarding bad PubSub connection: read tcp [::1]:43196->[::1]:6379: use of closed network connection
--- PASS: TestGRPCDispatch (0.32s)
    --- PASS: TestGRPCDispatch/Pre_Hook_with_SetHeaders (0.01s)
    --- PASS: TestGRPCDispatch/Pre_Hook_with_UTF-8/non-UTF-8_request_data (0.01s)
    --- PASS: TestGRPCDispatch/Post_Hook_with_metadata (0.01s)
    --- PASS: TestGRPCDispatch/Response_hook (0.01s)
    --- SKIP: TestGRPCDispatch/Post_Hook_with_allowed_message_length (0.00s)
    --- SKIP: TestGRPCDispatch/Post_Hook_with_with_unallowed_message_length (0.00s)
=== RUN   TestGRPCIgnore
redis: 2022/07/13 19:43:10 pubsub.go:159: redis: discarding bad PubSub connection: read tcp [::1]:43204->[::1]:6379: use of closed network connection
--- PASS: TestGRPCIgnore (0.28s)
PASS
coverage: [no statements]
ok  	github.com/TykTechnologies/tyk/coprocess/grpc	0.888s	coverage: [no statements]
go test -race -count=1 -failfast -v -timeout 15m -coverprofile=python.cov github.com/TykTechnologies/tyk/coprocess/python
=== RUN   TestValueExtractorHeaderSource
    util.go:32: Skipping flaky test
--- SKIP: TestValueExtractorHeaderSource (0.00s)
=== RUN   TestPythonBundles
time="Jul 13 19:43:13" level=info msg="starting test"
=== RUN   TestPythonBundles/Single-file_bundle_with_authentication_hook
FAIL	github.com/TykTechnologies/tyk/coprocess/python	1.046s
FAIL

gofmt

all ok

goimports

all ok

gogenerate

all ok

If the above are ok, please look at the run or in the Checks tab.

mathieu-benoit avatar Jun 09 '22 20:06 mathieu-benoit

I think just waiting for 1.24 to be default on GKE's STABLE channel should suffice. Like you hinted at, the 5-month footprint might be minor. Also, thank you for listing out the value of this change. That helps!

We shall keep this PR open for now.

NimJay avatar Jun 09 '22 21:06 NimJay

Note for myself for next rotation, let's update this PR with:

  • Merge from main and resolve conflicts
  • Update next steps based on the fact that GKE 1.25 is now in Rapid channel: https://cloud.google.com/kubernetes-engine/docs/release-notes#September_14_2022

mathieu-benoit avatar Sep 14 '22 18:09 mathieu-benoit

Closing this experimental research and tests, first concrete implementation of this there now: https://github.com/GoogleCloudPlatform/microservices-demo/pull/1102

mathieu-benoit avatar Sep 29 '22 13:09 mathieu-benoit