eqixiacEquinix Infrastructure as Code

Testing and live validation

The offline suites, the three live tiers, what the live validation of 2026-11-11 covered, and the quality gates.

Suites#

SuiteCommandNeeds credentialsSize on 2026-11-11
Unitmvn testNo1571 tests
WireMockmvn test -PwiremockNo1313 tests
Live, read-onlymvn test -Pintegration-readonlyYes274 tests
Live, dry runmvn test -Pintegration-dryrunYesRead-only tier plus the dry-run and validate operations
Live, fullmvn test -Pintegration-full -Dconfirm.destructive=trueYesCreate, update and delete lifecycles

Unit tests cover deserialization, builders, pagination, exception mapping and the design engines. WireMock tests start a local HTTP server and assert the full request and response cycle: URL, verb, headers, body, paging, error mapping and OAuth. The suite holds about 900 request-body assertions.

Live tiers#

Each live tier includes the one before it.

Shell
export EQUINIX_ACCESS_KEY=your-client-id
export EQUINIX_SECRET_KEY=your-client-secret
mvn test -Pintegration-readonly
TierSendsSafe on a production account
integration-readonlyGET, POST .../search, and other readsYes. No mutation.
integration-dryrunAdds dryRun=true creates and updates and the validate operationsYes. No resource is created.
integration-fullReal create, update and delete, with cleanup in reverse orderNo. Use a test account. It needs -Dconfirm.destructive=true as a second opt-in.

run-live.sh and run-live.ps1 wrap these commands. The tests read credentials from environment variables. Earlier releases took them as -D system properties, which the Surefire plugin copied into its XML reports.

Catalog sweep#

All 33 OpenAPI specifications in the Equinix API catalog were swept operation by operation. 280 operations were classified as safe to run against a production account, and each has a live test. 198 operations that look like reads and have side effects, such as quote requests and report generation jobs, were excluded from the read-only tier.

Port create, port delete and Internet Access delete are tested with WireMock only, because a defect in a live run would place an order or delete a resource that cannot be restored.

Skip rule#

A live test is skipped when the service answers 401 or 403, which means that the credential lacks the product. A deserialization error, an unmapped enum value or a 5xx fails the test. A passing read-only run therefore shows that the models read the responses of the live service, in addition to matching the specifications. Each run writes a per-call report to target/integration-report.json.

Live validation of 2026-11-11#

The validation used a real account. It sent reads, dryRun=true creates and public PeeringDB queries, and it ran the MCP server over stdio with read-only toolsets. It sent no update, no delete and no create without dryRun.

ItemResult
IAM hostapi.equinix.com/v1/roles 404; access.eqix.equinix.com 200, 79 roles
Customer Portal page envelopeConfirmed on finance accounts, reports, attachments and asset search
location.metroCode on a service-provider Z-sideRequired: HTTP 400 EQ-3142501 without it, dry run 200 with it
Precision TimeGET /timeServices 502; unfiltered search 200, 586 services
Service-profile ETagQuoted version, "5"
Fabric avgLatencyRound-trip: SV to DC measured 65.8 ms
Live rate cardEvery lookup had failed with 400; fixed; EVPL 1 Gbps in DC is USD 200 per month
PeeringDB netfac?asn=Ignored by PeeringDB; the client now queries by net_id
MCP stdout and secretsstdout pure JSON-RPC; secret masked at debug level

The following table shows the read-only tier before and after the fixes.

RunFailures and errorsSkipped
Before5184
After3584

The remaining 35 failures have three causes, none of which is a response-parsing or request-shape defect in the SDK: IAM project-scoped calls that need an access-policy token, test inputs the services reject (for example a missing IBX account number, or a device type that does not support ping), and server-side 5xx or 404 answers.

Three items were not re-verified live on that date: Peering Intelligence end to end, because PeeringDB throttled anonymous calls for about an hour; the shape of a successful STS token exchange; and the PATCH content types for ports and service tokens. The Beta families under fabric.beta() were not part of the run.

Quality gates#

GateThresholdMeasured on 2026-11-11
JaCoCo line and instruction coverage, whole bundle75%87.2% line, 89.3% instruction, 75.4% branch
JaCoCo per package30%Passes
IAM and STS client packages70%Passes
JavadocA broken {@link} or @see reference fails the buildPasses
PIT mutation testing, design.valueMutation threshold 50, under the opt-in pit profile; part of the release checklistNot run in the default build

Architecture tests fail the build on structural regressions: DependencyHygieneTest (optional dependencies stay optional), ApiParamContractTest (an enum's query form equals its body form), MulticloudPackageContractTest (the multicloud model imports only core, the JDK, Jackson and Lombok).

Samples on this site#

Every Java block on this site is compiled against the SDK classes before publication, which checks names and types. The samples are not run against the service.