Skip to content

e2e-tests (3/4): Add gNMI integration tests with envtest#409

Open
nikatza wants to merge 3 commits into
mainfrom
refactor-tests-3
Open

e2e-tests (3/4): Add gNMI integration tests with envtest#409
nikatza wants to merge 3 commits into
mainfrom
refactor-tests-3

Conversation

@nikatza

@nikatza nikatza commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This PR introduces envtest-based gNMI integration tests for the OpenConfig provider, enabling faster validation of the Kubernetes resources to gNMI sequence without requiring a full cluster deployment.

The test architecture uses a per-process gNMI server design that enables parallel test execution with Ginkgo's --procs flag. Each process creates its own suite-level server in BeforeSuite and shares it across tests running serially within that process.

@nikatza
nikatza force-pushed the refactor-tests-3 branch from 78654a7 to d200e98 Compare June 16, 2026 22:11
@nikatza nikatza changed the title e2e-tests (3/4): Add test resources for NXOS e2e-tests (3/4): Add envtest mode for faster in-process e2e testing Jun 17, 2026
@nikatza
nikatza force-pushed the refactor-tests-2 branch from 82d714b to 829e761 Compare June 17, 2026 23:40
@nikatza
nikatza force-pushed the refactor-tests-3 branch from d200e98 to 823e208 Compare June 17, 2026 23:40
@github-actions github-actions Bot added size/XL and removed size/XXL labels Jun 17, 2026
@nikatza
nikatza force-pushed the refactor-tests-3 branch from 823e208 to f735c68 Compare June 17, 2026 23:45
@nikatza
nikatza force-pushed the refactor-tests-2 branch 2 times, most recently from be16d2f to e20ae93 Compare June 18, 2026 07:59
@nikatza
nikatza force-pushed the refactor-tests-3 branch 2 times, most recently from 51d400f to ace1a56 Compare June 18, 2026 08:15
@nikatza
nikatza force-pushed the refactor-tests-2 branch from 8b82070 to e0403cc Compare June 18, 2026 08:54
@nikatza
nikatza force-pushed the refactor-tests-3 branch from ace1a56 to bce5bb0 Compare June 18, 2026 08:54
@nikatza
nikatza changed the base branch from refactor-tests-2 to refactor-tests-1 July 14, 2026 12:20
@nikatza
nikatza force-pushed the refactor-tests-3 branch from bce5bb0 to 2cf82d6 Compare July 14, 2026 17:16
@github-actions github-actions Bot added size/XXL and removed size/XL labels Jul 14, 2026
@nikatza nikatza changed the title e2e-tests (3/4): Add envtest mode for faster in-process e2e testing e2e-tests (3/4): Add gNMI integration tests with envtest Jul 14, 2026
@nikatza
nikatza force-pushed the refactor-tests-3 branch 2 times, most recently from dd3f643 to 5b100a6 Compare July 15, 2026 08:53
@nikatza
nikatza force-pushed the refactor-tests-1 branch 5 times, most recently from f81d9b2 to 47fda5a Compare July 15, 2026 14:22
Base automatically changed from refactor-tests-1 to main July 15, 2026 15:34
@nikatza
nikatza force-pushed the refactor-tests-3 branch 3 times, most recently from 268ae9b to 625b160 Compare July 16, 2026 13:23
@nikatza
nikatza force-pushed the refactor-tests-3 branch 5 times, most recently from e22db40 to 6a91fa7 Compare July 16, 2026 17:09
@github-actions github-actions Bot added size/XL and removed size/XXL labels Jul 16, 2026
@nikatza
nikatza force-pushed the refactor-tests-3 branch from 6a91fa7 to c06cf19 Compare July 16, 2026 17:14
@github-actions github-actions Bot added size/XXL and removed size/XL labels Jul 16, 2026
@nikatza
nikatza marked this pull request as ready for review July 16, 2026 18:32
Comment thread .github/workflows/test-gnmi.yaml Outdated
Comment thread test/gnmi/gnmi_test.go Outdated
Comment thread test/gnmi/json_test.go Outdated
Comment thread .github/workflows/test-gnmi.yaml Outdated
Comment thread .github/workflows/test-gnmi.yaml Outdated
Comment thread .github/workflows/test-gnmi.yaml Outdated
Comment thread .github/workflows/test-gnmi.yaml Outdated
Comment thread test/gnmi/server/server.go Outdated
Comment thread test/gnmi/gnmi_test.go Outdated
Comment thread test/gnmi/gnmi_test.go Outdated
Comment thread test/gnmi/gnmi_test.go Outdated
Comment thread test/gnmi/server/server.go Outdated
Comment thread test/gnmi/server/server.go Outdated
@nikatza
nikatza force-pushed the refactor-tests-3 branch 5 times, most recently from b9e836b to 9e6c201 Compare July 23, 2026 15:06
nikatza added 3 commits July 24, 2026 12:27
This commit introduces envtest-based integration tests for gNMI functionality
using the OpenConfig provider. The tests verify the end-to-end workflow from
Kubernetes resources to provider gNMI payloads without requiring a full cluster
deployment.

The test architecture uses a per-process gNMI test server to enable parallel
test execution with Ginkgo's --procs flag. Each Ginkgo process creates its own
suite-level server in BeforeSuite, shares it across all tests within that
process, and cleans it up in AfterSuite. Tests within each process run serially,
ensuring proper isolation through per-test namespaces and state clearing between
tests.

Testdata files support optional state/preload sections to set initial gNMI
server state before reconciliation. This is for example required to
successfully reconcile devices: the controller requires the last boot
time. Updated test cases accordingly.

As there is only one gNMI test server per process, all tests share the same device.
This means that test cases must clean up all resources they create, otherwise the
server will be polluted by the left over resources.

As Envtest runs without kube-controller-manager, there is no garbage collector
to cascade deletions, meaning each test needs to explicitly clean up resources it creates,
and it must do so in the correct order to prevent finalizer deadlocks. For example, a
Device cannot be deleted while it still has dependent resources with finalizers.

Additionally, not all custom resources in network-operator have controllers.
Resources like Interface, BGP, and OSPF have reconcilers that add finalizers and
set status conditions. Other resources (typically config-only types) are stored
in the API but have no controller — no finalizer, no conditions.

Thus, the test framework must handle: wait for conditions on controller-managed
resources, prevent blocking indefinitely on config-only ones, and clean up
resources in the correct order without relying on cascading deletion.

The waitForResource helper probes for a finalizer with a short timeout.
Controllers add finalizers early in reconciliation (within ~1 second), so if
none appears after 3 seconds, the resource is assumed to be config-only and the
helper returns immediately. For controller-managed resources, it waits for the
Ready or Configured condition.

The cleanupAllResources helper lists all network-operator resources in the
namespace, then partitions them by checking each resource's finalizers field.
Controller-managed resources (those with finalizers) are deleted first, waiting
for finalizer removal while Device still exists. Config-only resources (no
finalizers) are deleted afterward without waiting. Finally, the Device is
deleted. This approach avoids hardcoded list of resource types.

Signed-off-by: Pujol <enric.pujol@sap.com>
…lacks VLAN support)

The OpenConfig provider does not yet support VLAN interface configuration,
causing the interface_routed_vlan test to fail. Skip this test by renaming
the fixture file to .skip extension until VLAN support is implemented.

Signed-off-by: Pujol <enric.pujol@sap.com>
Add a dedicated GitHub Actions workflow for gNMI integration tests using the
OpenConfig provider. The workflow runs in parallel with other test jobs,
executing tests with dynamic process count via Ginkgo's --procs flag.

Signed-off-by: Pujol <enric.pujol@sap.com>
@nikatza
nikatza force-pushed the refactor-tests-3 branch from 9e6c201 to 5e5733a Compare July 24, 2026 10:28
@github-actions

Copy link
Copy Markdown

Merging this branch will not change overall coverage

Impacted Packages Coverage Δ 🤖
github.com/ironcore-dev/network-operator/test/gnmi 0.00% (ø)
github.com/ironcore-dev/network-operator/test/gnmi/server 0.00% (ø)

Coverage by file

Changed files (no unit tests)

Changed File Coverage Δ Total Covered Missed 🤖
github.com/ironcore-dev/network-operator/test/gnmi/server/server.go 0.00% (ø) 0 0 0

Please note that the "Total", "Covered", and "Missed" counts above refer to code statements instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code.

Changed unit test files

  • github.com/ironcore-dev/network-operator/test/gnmi/gnmi_suite_test.go
  • github.com/ironcore-dev/network-operator/test/gnmi/gnmi_test.go

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants