diff --git a/conformance/Makefile b/conformance/Makefile index 5d724dbbda..8e2ee41504 100644 --- a/conformance/Makefile +++ b/conformance/Makefile @@ -1,7 +1,8 @@ NKG_TAG = edge NKG_PREFIX = nginx-kubernetes-gateway GATEWAY_CLASS = nginx -SUPPORTED_FEATURES = Gateway,HTTPRoute +SUPPORTED_FEATURES = HTTPRoute,HTTPRouteQueryParamMatching,HTTPRouteMethodMatching,HTTPRoutePortRedirect,HTTPRouteSchemeRedirect +EXEMPT_FEATURES = ReferenceGrant KIND_KUBE_CONFIG_FOLDER = $${HOME}/.kube/kind TAG = latest PREFIX = conformance-test-runner @@ -44,7 +45,7 @@ update-test-kind-config: ## Update kind config .PHONY: run-conformance-tests run-conformance-tests: update-test-kind-config ## Run conformance tests docker run --network=kind --rm -v $(KIND_KUBE_CONFIG_FOLDER):/root/.kube $(PREFIX):$(TAG) \ - go test -v . -tags conformance -args --gateway-class=$(GATEWAY_CLASS) --supported-features=$(SUPPORTED_FEATURES) + go test -timeout 25m -v . -tags conformance -args --gateway-class=$(GATEWAY_CLASS) --debug --supported-features=$(SUPPORTED_FEATURES) --exempt-features=$(EXEMPT_FEATURES) .PHONY: uninstall-nkg uninstall-nkg: ## Uninstall NKG on configured kind cluster diff --git a/conformance/tests/conformance_test.go b/conformance/tests/conformance_test.go index b75ef2d684..f51c9de80a 100644 --- a/conformance/tests/conformance_test.go +++ b/conformance/tests/conformance_test.go @@ -18,9 +18,11 @@ limitations under the License. package tests import ( + "strings" "testing" . "github.com/onsi/gomega" + "k8s.io/apimachinery/pkg/util/sets" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/config" "sigs.k8s.io/gateway-api/apis/v1alpha2" @@ -41,6 +43,9 @@ func TestConformance(t *testing.T) { g.Expect(v1alpha2.AddToScheme(client.Scheme())).To(Succeed()) g.Expect(v1beta1.AddToScheme(client.Scheme())).To(Succeed()) + supportedFeatures := parseSupportedFeatures(*flags.SupportedFeatures) + exemptFeatures := parseSupportedFeatures(*flags.ExemptFeatures) + t.Logf(`Running conformance tests with %s GatewayClass\n cleanup: %t\n`+ `debug: %t\n enable all features: %t \n supported features: [%v]\n exempt features: [%v]`, *flags.GatewayClassName, *flags.CleanupBaseResources, *flags.ShowDebug, @@ -51,9 +56,26 @@ func TestConformance(t *testing.T) { GatewayClassName: *flags.GatewayClassName, Debug: *flags.ShowDebug, CleanupBaseResources: *flags.CleanupBaseResources, - SupportedFeatures: nil, + SupportedFeatures: supportedFeatures, + ExemptFeatures: exemptFeatures, EnableAllSupportedFeatures: *flags.EnableAllSupportedFeatures, }) cSuite.Setup(t) cSuite.Run(t, tests.ConformanceTests) } + +// parseSupportedFeatures parses flag arguments and converts the string to +// sets.Set[suite.SupportedFeature] +// FIXME(kate-osborn): Use exported ParseSupportedFeatures function +// https://github.com/kubernetes-sigs/gateway-api/blob/63e423cf1b837991d2747742199d90863a98b0c3/conformance/utils/suite/suite.go#L235 +// once it's released. https://github.com/nginxinc/nginx-kubernetes-gateway/issues/779 +func parseSupportedFeatures(f string) sets.Set[suite.SupportedFeature] { + if f == "" { + return nil + } + res := sets.Set[suite.SupportedFeature]{} + for _, value := range strings.Split(f, ",") { + res.Insert(suite.SupportedFeature(value)) + } + return res +} diff --git a/internal/nginx/runtime/manager.go b/internal/nginx/runtime/manager.go index 4c4cddda49..88be206d5e 100644 --- a/internal/nginx/runtime/manager.go +++ b/internal/nginx/runtime/manager.go @@ -16,7 +16,7 @@ import ( const ( pidFile = "/etc/nginx/nginx.pid" - pidFileTimeout = 5 * time.Second + pidFileTimeout = 10 * time.Second ) type ( @@ -81,7 +81,7 @@ func findMainProcess( err := wait.PollUntilContextCancel( ctx, - 1*time.Second, + 500*time.Millisecond, true, /* poll immediately */ func(ctx context.Context) (bool, error) { _, err := checkFile(pidFile)