diff --git a/README.md b/README.md index 16f81f5..bb2a5d2 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,10 @@ Runnable cookbooks live under [`examples/`](examples/README.md). The (nonempty output checks, HTML report) lives under [`pulumi-tests/`](pulumi-tests/README.md) — run with `make pulumi-tests`. +Latest lab run (**2026-07-18**): offline **161 passed**; `test-vsphere` probes +green; full `pulumi-tests` **7/7** with REST matrix **1987/1987** (`critical=0`). +See [pulumi-tests/README.md](pulumi-tests/README.md#latest-lab-run-2026-07-18). + ## Python (requests) against the HTTPS gateway ```python diff --git a/README.ru.md b/README.ru.md index 9df106c..75e3f01 100644 --- a/README.ru.md +++ b/README.ru.md @@ -159,6 +159,11 @@ majors 6–9, редактирование request/response и runtime contract (проверки непустых export'ов, HTML-отчёт) — в [`pulumi-tests/`](pulumi-tests/README.ru.md); запуск: `make pulumi-tests`. +Последний lab-прогон (**2026-07-18**): offline **161 passed**; probes +`test-vsphere` зелёные; полный `pulumi-tests` **7/7**, REST-матрица +**1987/1987** (`critical=0`). См. +[pulumi-tests/README.ru.md](pulumi-tests/README.ru.md#последний-lab-прогон-2026-07-18). + ## Python (requests) через HTTPS gateway ```python diff --git a/docs/compatibility-0.1.0.md b/docs/compatibility-0.1.0.md index b8619e7..cc88bbe 100644 --- a/docs/compatibility-0.1.0.md +++ b/docs/compatibility-0.1.0.md @@ -73,7 +73,7 @@ registered paths — see `.cursor/rules/durable-simulator.mdc`. | External systems | NSX/LDAP/SAML/OIDC/ACME do not contact real remotes; state is simulated locally | | TLS | Local nginx gateway with a checked-in self-signed development key only | | Client certification | pyvmomi/govmomi-style SOAP smoke + Ansible/Terraform/Pulumi cookbooks; not a formal certification suite for every provider version | -| Provider smoke | The `pulumi-vsphere` suite under `pulumi-tests/` (`make pulumi-tests`) exercises SOAP-backed inventory/VM/tag resources with nonempty export checks; semantic depth still varies (deep handlers vs DB-backed stubs) | +| Provider smoke | The `pulumi-vsphere` suite under `pulumi-tests/` (`make pulumi-tests`) exercises SOAP-backed inventory/VM/tag resources with nonempty export checks; semantic depth still varies (deep handlers vs DB-backed stubs). Latest full run (2026-07-18): **7/7** cases, REST **1987/1987**, `critical=0` — see [`pulumi-tests/README.md`](../pulumi-tests/README.md#latest-lab-run-2026-07-18) | Full registry coverage at major 9 means HTTP 501 "handler pending" should not appear for any route in the simulator's registry. Compatibility *quality* diff --git a/docs/compatibility.md b/docs/compatibility.md index 6242178..f8020d3 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -62,6 +62,16 @@ Additional cookbooks under [`examples/`](../examples/README.md) and the `pulumi-vsphere` lab suite under [`pulumi-tests/`](../pulumi-tests/README.md) (`make pulumi-tests`) are manual or CI-optional depending on the stack. +### Latest lab run (2026-07-18) + +| Suite | Result | +|---|---| +| `make test` (offline) | **161 passed** | +| `make test-vsphere` (pytest + surface/matrix/dump/nonempty) | **73** pytest passed; probes **0 failures** (Terraform cookbook binary mismatch only) | +| `make pulumi-tests` (full hybrid) | **7 / 7 passed**; Layer A REST **1987 / 1987**, `critical=0` | + +Details and report paths: [`pulumi-tests/README.md`](../pulumi-tests/README.md#latest-lab-run-2026-07-18). + ## Known behavioural limits | Area | Behaviour | diff --git a/docs/operations.md b/docs/operations.md index 20d0e9c..1d41072 100644 --- a/docs/operations.md +++ b/docs/operations.md @@ -134,8 +134,9 @@ chart — see [Kubernetes / Helm](kubernetes.md). 2. Run migrations (`make db-migrate`). 3. Confirm `/health/ready`. 4. Re-check `/ui/api/compatibility?major=9` and `/api/appliance/system/version`. -5. Re-run `make test-vsphere` / `make vsphere-matrix` if you validate the - surface after upgrading. +5. Re-run `make test-vsphere` / `make vsphere-matrix` / `make pulumi-tests` + if you validate the surface after upgrading. Latest recorded lab numbers: + [Compatibility — Latest lab run](compatibility.md#latest-lab-run-2026-07-18). ## Resetting a lab diff --git a/docs/ru/compatibility-0.1.0.md b/docs/ru/compatibility-0.1.0.md index 1b33fd9..71cb0fa 100644 --- a/docs/ru/compatibility-0.1.0.md +++ b/docs/ru/compatibility-0.1.0.md @@ -73,7 +73,7 @@ evidence-отчётов, перегенерируется через `make evide | Внешние системы | NSX/LDAP/SAML/OIDC/ACME не обращаются к реальным remotes; состояние симулируется локально | | TLS | Локальный nginx gateway только с закоммиченным self-signed development key | | Сертификация клиентов | SOAP smoke в стиле pyvmomi/govmomi + cookbook'и Ansible/Terraform/Pulumi; не формальный certification suite для каждой версии провайдера | -| Smoke провайдера | Набор `pulumi-vsphere` в `pulumi-tests/` (`make pulumi-tests`) гоняет SOAP inventory/VM/tag с проверкой непустых export'ов; семантическая глубина по-прежнему разная (deep handlers vs DB-backed stubs) | +| Smoke провайдера | Набор `pulumi-vsphere` в `pulumi-tests/` (`make pulumi-tests`) гоняет SOAP inventory/VM/tag с проверкой непустых export'ов; семантическая глубина по-прежнему разная (deep handlers vs DB-backed stubs). Последний полный прогон (2026-07-18): **7/7** кейсов, REST **1987/1987**, `critical=0` — см. [`pulumi-tests/README.ru.md`](../../pulumi-tests/README.ru.md#последний-lab-прогон-2026-07-18) | Полное покрытие реестра на major 9 означает, что HTTP 501 «handler pending» не должен появляться ни для одного маршрута в реестре симулятора. *Качество* diff --git a/docs/ru/compatibility.md b/docs/ru/compatibility.md index f680e0e..d26490f 100644 --- a/docs/ru/compatibility.md +++ b/docs/ru/compatibility.md @@ -67,6 +67,17 @@ make vsphere-bundles # стаб-бандлы OpenAPI + журналы evidence [`pulumi-tests/`](../../pulumi-tests/README.ru.md) (`make pulumi-tests`) выполняются вручную или опционально в CI. +### Последний lab-прогон (2026-07-18) + +| Набор | Результат | +|---|---| +| `make test` (offline) | **161 passed** | +| `make test-vsphere` (pytest + surface/matrix/dump/nonempty) | **73** pytest passed; probes **0 failures** (только mismatch бинаря Terraform cookbook) | +| `make pulumi-tests` (полный гибрид) | **7 / 7 passed**; Layer A REST **1987 / 1987**, `critical=0` | + +Подробности и пути к отчёту: +[`pulumi-tests/README.ru.md`](../../pulumi-tests/README.ru.md#последний-lab-прогон-2026-07-18). + ## Известные поведенческие ограничения | Область | Поведение | diff --git a/docs/ru/operations.md b/docs/ru/operations.md index 8b2b5d6..55e376a 100644 --- a/docs/ru/operations.md +++ b/docs/ru/operations.md @@ -138,7 +138,9 @@ Helm-чарт — см. [Kubernetes / Helm](kubernetes.md). 4. Перепроверьте `/ui/api/compatibility?major=9` и `/api/appliance/system/version`. 5. При необходимости заново запустите `make test-vsphere` / - `make vsphere-matrix`, если проверяете поверхность после обновления. + `make vsphere-matrix` / `make pulumi-tests`, если проверяете поверхность + после обновления. Последние зафиксированные lab-цифры: + [Совместимость — Последний lab-прогон](compatibility.md#последний-lab-прогон-2026-07-18). ## Сброс лаборатории diff --git a/pulumi-tests/README.md b/pulumi-tests/README.md index 0551ba0..928f20b 100644 --- a/pulumi-tests/README.md +++ b/pulumi-tests/README.md @@ -1,5 +1,7 @@ # pulumi hybrid lab suite for vmware-api-simulator +**Language / Язык:** [English](README.md) | [Русский](README.ru.md) + Hybrid suite under `pulumi-tests/`: 1. **Layer A (required for “100%”)** — HTTP contract matrix: all `IMPLEMENTED` @@ -12,6 +14,28 @@ Hybrid suite under `pulumi-tests/`: `pulumi-vsphere` alone cannot hit ~1092 REST routes — **100% means the HTTP matrix** (`coverage probed/declared`, `critical=0`), not provider resource count. +## Latest lab run (2026-07-18) + +Full hybrid (`make pulumi-tests`, seed profile `small`): + +| Check | Result | +|-------|--------| +| Cases | **7 / 7 passed** (`PU-INV`, `PU-FOLDER`, `PU-VM`, `PU-TAG`, `PU-REST`, `PU-CRUD`, `PU-SOAP`) | +| Layer A REST matrix | **1987 / 1987** (`critical=0`) across majors 6–9 | +| Verb histogram | GET 682 · HEAD 682 · POST 301 · PUT 96 · PATCH 91 · DELETE 135 | + +Artifacts (local copy from the `lab-reports` volume; directory is gitignored): +`pulumi-tests/reports/pulumi-report.html`, +`pulumi-tests/reports/pulumi-summary.json`. + +Related offline / gateway probes from the same day: + +| Suite | Result | +|-------|--------| +| `make test` (offline unit + contract) | **161 passed** | +| `make test-vsphere` pytest + surface/matrix/dump/nonempty | **73** pytest passed; matrix/surface/nonempty **0 failures** | +| Client cookbooks (part of `test-vsphere`) | Python / Ansible URI / Pulumi-style OK; **Terraform cookbook** failed (`Exec format error` on `.tools/terraform` binary — host/arch mismatch, not an API regression) | + ## Pass rules (Layer A) | Check | Rule | @@ -44,8 +68,17 @@ matrix** (`coverage probed/declared`, `critical=0`), not provider resource count | `PU-CRUD` | Deep REST | Session, folder, tagging, content library, VM | | `PU-SOAP` | SOAP | Existing WSDL ops only | -Artifacts: HTML + JSON + JUnit under the `lab-reports` volume. Look for -`rest.coverage_line`, `rest.critical`, `rest.by_verb` (incl. HEAD). +Artifacts: HTML + JSON + JUnit under the `lab-reports` volume (and optionally +`pulumi-tests/reports/` on the host). Look for `rest.coverage_line`, +`rest.critical`, `rest.by_verb` (incl. HEAD). Open the HTML report after a run: + +```bash +mkdir -p pulumi-tests/reports +cd pulumi-tests && docker compose --profile test run --rm --no-deps \ + -v "$(pwd)/reports:/out" pulumi-runner \ + cp /reports/pulumi-report.html /reports/pulumi-summary.json /out/ +open reports/pulumi-report.html +``` ## Quick start diff --git a/pulumi-tests/README.ru.md b/pulumi-tests/README.ru.md index 4c10ac2..e4d9d17 100644 --- a/pulumi-tests/README.ru.md +++ b/pulumi-tests/README.ru.md @@ -1,5 +1,7 @@ # Гибридный lab-набор pulumi для vmware-api-simulator +**Language / Язык:** [English](README.md) | [Русский](README.ru.md) + Гибрид под `pulumi-tests/`: 1. **Layer A (обязателен для «100%»)** — HTTP contract matrix: все `IMPLEMENTED` @@ -12,6 +14,28 @@ Одним `pulumi-vsphere` закрыть ~1092 REST `verb×path` нельзя — **100% = HTTP-матрица** (`coverage probed/declared`, `critical=0`), а не число provider-ресурсов. +## Последний lab-прогон (2026-07-18) + +Полный гибрид (`make pulumi-tests`, seed-профиль `small`): + +| Проверка | Результат | +|----------|-----------| +| Кейсы | **7 / 7 passed** (`PU-INV`, `PU-FOLDER`, `PU-VM`, `PU-TAG`, `PU-REST`, `PU-CRUD`, `PU-SOAP`) | +| Layer A REST matrix | **1987 / 1987** (`critical=0`) по majors 6–9 | +| Verb histogram | GET 682 · HEAD 682 · POST 301 · PUT 96 · PATCH 91 · DELETE 135 | + +Артефакты (локальная копия с тома `lab-reports`; каталог в `.gitignore`): +`pulumi-tests/reports/pulumi-report.html`, +`pulumi-tests/reports/pulumi-summary.json`. + +Связанные прогоны того же дня: + +| Набор | Результат | +|-------|-----------| +| `make test` (offline unit + contract) | **161 passed** | +| `make test-vsphere` pytest + surface/matrix/dump/nonempty | **73** pytest passed; matrix/surface/nonempty **0 failures** | +| Client cookbooks (часть `test-vsphere`) | Python / Ansible URI / Pulumi-style OK; **Terraform cookbook** упал (`Exec format error` на `.tools/terraform` — несовпадение host/arch, не регрессия API) | + ## Критерии pass (Layer A) | Проверка | Правило | @@ -37,6 +61,16 @@ make pulumi-tests # полный гибрид make pulumi-tests-smoke # PU-INV + Layer A major-9 ``` +После прогона HTML-отчёт: + +```bash +mkdir -p pulumi-tests/reports +cd pulumi-tests && docker compose --profile test run --rm --no-deps \ + -v "$(pwd)/reports:/out" pulumi-runner \ + cp /reports/pulumi-report.html /reports/pulumi-summary.json /out/ +open reports/pulumi-report.html +``` + Шлюз (в compose): `https://api-gateway`. Хост-алиас: `127.0.0.1:28443` (не занимает `https://localhost` / `:18443` основного lab — после тестов `make down`). diff --git a/pulumi-tests/reports/pulumi-report.html b/pulumi-tests/reports/pulumi-report.html index ffe5779..6838c24 100644 --- a/pulumi-tests/reports/pulumi-report.html +++ b/pulumi-tests/reports/pulumi-report.html @@ -2,198 +2,96 @@ - - vSphere API matrix report + pulumi hybrid lab report
-

vSphere API matrix · Pulumi lab suite

-
- Target http://simulator:8080 · generated 2026-07-17T06:37:14.202100+00:00 - · smoke mode -
+

pulumi hybrid lab suite

+
Generated 2026-07-18T06:12:31.657947+00:00 · server api-gateway + · base https://api-gateway + · smoke=False
-
Total cases144
-
Passed144
+
Cases7
+
Passed7
Failed0
-
- -
-

Major 6 · 7.0.0

-

Catalog floor: 23 methods

-

Probed: 23 - (above floor: 0)

-

Failed: 0

-

{"GET": 23}

-
- -
-

Major 7 · 7.0.3

-

Catalog floor: 40 methods

-

Probed: 40 - (above floor: 0)

-

Failed: 0

-

{"GET": 40}

-
- -
-

Major 8 · 8.0.0

-

Catalog floor: 40 methods

-

Probed: 40 - (above floor: 0)

-

Failed: 0

-

{"GET": 40}

-
- -
-

Major 9 · 8.0.2

-

Catalog floor: 40 methods

-

Probed: 40 - (above floor: 0)

-

Failed: 0

-

{"GET": 40}

-
- +
+
REST failed0 + / 1987 probes
+
CRUD failed0 + / 5 flows
+
SOAP failed0 + / 44 ops
-
- - - - - -
- - - - - - - - - - +

Suite cases

+
MajorVersionVerbPathHTTPOutcomeFloorDetail
67.0.0GET/api/appliance/system/version200passedin2xx
67.0.0GET/api/session200passedin2xx
67.0.0GET/api/vcenter/cluster200passedin2xx
67.0.0GET/api/vcenter/datacenter200passedin2xx
67.0.0GET/api/vcenter/datastore200passedin2xx
67.0.0GET/api/vcenter/datastore/{datastore}200passedin2xx
67.0.0GET/api/vcenter/folder200passedin2xx
67.0.0GET/api/vcenter/host200passedin2xx
67.0.0GET/api/vcenter/host/{host}200passedin2xx
67.0.0GET/api/vcenter/network200passedin2xx
67.0.0GET/api/vcenter/resource-pool200passedin2xx
67.0.0GET/api/vcenter/vm200passedin2xx
67.0.0GET/api/vcenter/vm/{vm}200passedin2xx
67.0.0GET/api/vcenter/vm/{vm}/guest/identity200passedin2xx
67.0.0GET/rest/appliance/system/version200passedin2xx
67.0.0GET/rest/com/vmware/cis/session200passedin2xx
67.0.0GET/rest/vcenter/cluster200passedin2xx
67.0.0GET/rest/vcenter/datacenter200passedin2xx
67.0.0GET/rest/vcenter/datastore200passedin2xx
67.0.0GET/rest/vcenter/host200passedin2xx
67.0.0GET/rest/vcenter/network200passedin2xx
67.0.0GET/rest/vcenter/vm200passedin2xx
67.0.0GET/rest/vcenter/vm/{vm}200passedin2xx
77.0.3GET/api/appliance/system/version200passedin2xx
77.0.3GET/api/cis/tagging/category200passedin2xx
77.0.3GET/api/cis/tagging/category/{category_id}200passedin2xx
77.0.3GET/api/cis/tagging/tag200passedin2xx
77.0.3GET/api/cis/tagging/tag/{tag_id}200passedin2xx
77.0.3GET/api/cis/tasks200passedin2xx
77.0.3GET/api/cis/tasks/{task}200passedin2xx
77.0.3GET/api/session200passedin2xx
77.0.3GET/api/vcenter/cluster200passedin2xx
77.0.3GET/api/vcenter/datacenter200passedin2xx
77.0.3GET/api/vcenter/datastore200passedin2xx
77.0.3GET/api/vcenter/datastore/{datastore}200passedin2xx
77.0.3GET/api/vcenter/datastore/{datastore}/files200passedin2xx
77.0.3GET/api/vcenter/folder200passedin2xx
77.0.3GET/api/vcenter/folder/{folder}/children200passedin2xx
77.0.3GET/api/vcenter/host200passedin2xx
77.0.3GET/api/vcenter/host/{host}200passedin2xx
77.0.3GET/api/vcenter/network200passedin2xx
77.0.3GET/api/vcenter/resource-pool200passedin2xx
77.0.3GET/api/vcenter/vm200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/guest/identity200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/guest/networking200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/guest/power200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/hardware200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/hardware/boot200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/hardware/cpu200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/hardware/disk200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/hardware/ethernet200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/hardware/memory200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/snapshots200passedin2xx
77.0.3GET/api/vcenter/vm/{vm}/tools200passedin2xx
77.0.3GET/rest/appliance/system/version200passedin2xx
77.0.3GET/rest/com/vmware/cis/session200passedin2xx
77.0.3GET/rest/vcenter/cluster200passedin2xx
77.0.3GET/rest/vcenter/datacenter200passedin2xx
77.0.3GET/rest/vcenter/datastore200passedin2xx
77.0.3GET/rest/vcenter/host200passedin2xx
77.0.3GET/rest/vcenter/network200passedin2xx
77.0.3GET/rest/vcenter/vm200passedin2xx
88.0.0GET/api/appliance/health/system200passedin2xx
88.0.0GET/api/appliance/networking200passedin2xx
88.0.0GET/api/appliance/system/version200passedin2xx
88.0.0GET/api/appliance/timesync200passedin2xx
88.0.0GET/api/cis/tagging/category200passedin2xx
88.0.0GET/api/cis/tagging/category/{category_id}200passedin2xx
88.0.0GET/api/cis/tagging/tag200passedin2xx
88.0.0GET/api/cis/tagging/tag/{tag_id}200passedin2xx
88.0.0GET/api/cis/tasks200passedin2xx
88.0.0GET/api/cis/tasks/{task}200passedin2xx
88.0.0GET/api/content/library200passedin2xx
88.0.0GET/api/content/library/item200passedin2xx
88.0.0GET/api/session200passedin2xx
88.0.0GET/api/vapi/metadata/authentication/component200passedin2xx
88.0.0GET/api/vapi/metadata/metamodel/service200passedin2xx
88.0.0GET/api/vcenter/activity-history200passedin2xx
88.0.0GET/api/vcenter/authorization/permissions200passedin2xx
88.0.0GET/api/vcenter/authorization/roles200passedin2xx
88.0.0GET/api/vcenter/cluster200passedin2xx
88.0.0GET/api/vcenter/datacenter200passedin2xx
88.0.0GET/api/vcenter/datastore200passedin2xx
88.0.0GET/api/vcenter/datastore/{datastore}200passedin2xx
88.0.0GET/api/vcenter/datastore/{datastore}/files200passedin2xx
88.0.0GET/api/vcenter/folder200passedin2xx
88.0.0GET/api/vcenter/folder/{folder}/children200passedin2xx
88.0.0GET/api/vcenter/host200passedin2xx
88.0.0GET/api/vcenter/host/{host}200passedin2xx
88.0.0GET/api/vcenter/host/{host}/networking200passedin2xx
88.0.0GET/api/vcenter/host/{host}/storage/storage-device200passedin2xx
88.0.0GET/api/vcenter/identity/providers200passedin2xx
88.0.0GET/api/vcenter/network200passedin2xx
88.0.0GET/api/vcenter/network/dvs200passedin2xx
88.0.0GET/api/vcenter/privilege200passedin2xx
88.0.0GET/api/vcenter/resource-pool200passedin2xx
88.0.0GET/api/vcenter/storage/policies200passedin2xx
88.0.0GET/api/vcenter/storage/policies/{policy}/vm200passedin2xx
88.0.0GET/api/vcenter/vm200passedin2xx
88.0.0GET/api/vcenter/vm/{vm}200passedin2xx
88.0.0GET/api/vcenter/vm/{vm}/guest/identity200passedin2xx
88.0.0GET/api/vcenter/vm/{vm}/guest/networking200passedin2xx
98.0.2GET/api/appliance/access/consolecli200passedin2xx
98.0.2GET/api/appliance/access/dcui200passedin2xx
98.0.2GET/api/appliance/access/shell200passedin2xx
98.0.2GET/api/appliance/access/ssh200passedin2xx
98.0.2GET/api/appliance/cores200passedin2xx
98.0.2GET/api/appliance/health200passedin2xx
98.0.2GET/api/appliance/health-check-settings200passedin2xx
98.0.2GET/api/appliance/health/applmgmt200passedin2xx
98.0.2GET/api/appliance/health/database200passedin2xx
98.0.2GET/api/appliance/health/databasestorage200passedin2xx
98.0.2GET/api/appliance/health/load200passedin2xx
98.0.2GET/api/appliance/health/mem200passedin2xx
98.0.2GET/api/appliance/health/softwarepackages200passedin2xx
98.0.2GET/api/appliance/health/storage200passedin2xx
98.0.2GET/api/appliance/health/swap200passedin2xx
98.0.2GET/api/appliance/health/system200passedin2xx
98.0.2GET/api/appliance/infraprofile/configs200passedin2xx
98.0.2GET/api/appliance/local-accounts200passedin2xx
98.0.2GET/api/appliance/local-accounts/policy200passedin2xx
98.0.2GET/api/appliance/logging/forwarding200passedin2xx
98.0.2GET/api/appliance/logging/liagent/log-collection200passedin2xx
98.0.2GET/api/appliance/monitoring200passedin2xx
98.0.2GET/api/appliance/networking200passedin2xx
98.0.2GET/api/appliance/networking/dns/domains200passedin2xx
98.0.2GET/api/appliance/networking/dns/hostname200passedin2xx
98.0.2GET/api/appliance/networking/dns/servers200passedin2xx
98.0.2GET/api/appliance/networking/firewall/inbound200passedin2xx
98.0.2GET/api/appliance/networking/interfaces200passedin2xx
98.0.2GET/api/appliance/networking/interfaces/{interface}200passedin2xx
98.0.2GET/api/appliance/networking/interfaces/{interface}/ipv4200passedin2xx
98.0.2GET/api/appliance/networking/interfaces/{interface}/ipv6200passedin2xx
98.0.2GET/api/appliance/networking/no-proxy200passedin2xx
98.0.2GET/api/appliance/networking/proxy200passedin2xx
98.0.2GET/api/appliance/ntp200passedin2xx
98.0.2GET/api/appliance/recovery200passedin2xx
98.0.2GET/api/appliance/recovery/backup/job200passedin2xx
98.0.2GET/api/appliance/recovery/backup/job/details200passedin2xx
98.0.2GET/api/appliance/recovery/backup/parts200passedin2xx
98.0.2GET/api/appliance/recovery/backup/schedules200passedin2xx
98.0.2GET/api/appliance/recovery/reconciliation/job200passedin2xx
+ +
IDTitleStatusOutputsError
PU-INVInventory data sources (dc/cluster/ds/net/vm/host/folder/pool)passedcluster_id=domain-c21
cluster_name=Cluster
cluster_resource_pool_id=resgroup-22
datacenter_id=datacenter-21
datacenter_name=Datacenter
datastore_id=datastore-31
datastore_name=datastore1
folder_id=group-v100
folder_path=/Datacenter/vm/production
host_id=host-11
host_name=esxi01.lab.local
network_id=network-41
network_name=VM Network
resource_pool_id=resgroup-22
resource_pool_name=Cluster/Resources
vm_id=4200aaaa-bbbb-cccc-dddd-000000000101
vm_name=web-01
PU-FOLDERFolder create/destroypasseddatacenter_id=datacenter-21
folder_id=group-8b2a68
folder_path=pulumi-folder-7ee0f4fd
PU-VMVirtualMachine create/destroypasseddatastore_id=datastore-31
lab_vm_id=4200aaaa-bbbb-cccc-dddd-000000000151
lab_vm_name=pulumi-lab-7bc84995
network_id=network-41
resource_pool_id=resgroup-22
PU-TAGTagCategory + Tag create/destroypassedcategory_id=urn:vmomi:InventoryServiceCategory:3070f3744accd472:GLOBAL
category_name=pulumi-cat-32857be7
tag_id=urn:vmomi:InventoryServiceTag:f1722581807beddf:GLOBAL
tag_name=pulumi-tag-32857be7
PU-RESTREST HTTP matrix majors=[6, 7, 8, 9] (IMPLEMENTED + HEAD; Layer A)passedcoverage=1987/1987
critical=0
probed=1987
declared=1987
by_verb={'GET': 682, 'HEAD': 682, 'POST': 301, 'DELETE': 135, 'PATCH': 91, 'PUT': 96}
majors=[6, 7, 8, 9]
PU-CRUDDeep REST CRUD (session/folder/tag/library/vm)passedtotal=5
failed=0
flows=['session', 'folder', 'tagging', 'content-library', 'vm']
PU-SOAPSOAP WSDL ops (44 operations)passedtotal=44
failed=0
wsdl_ops=44
-
Pass = 2xx or expected client 4xx. Fail = 5xx, unexpected 501, stub/empty inventory on major-9 seeded GETs.
+ +

REST HTTP contract matrix (Layer A)

+

coverage 1987/1987 + · critical=0 + · probed=1987 + · declared=1987 + · verbs: DELETE=135 · GET=682 · HEAD=682 · PATCH=91 · POST=301 · PUT=96 +
100% = HTTP matrix (IMPLEMENTED × majors + HEAD), not pulumi-vsphere resource count.

+ + + + +
MajorVersionDeclaredProbedCoverageCritical2xx4xx5xxdeep/stub
67.0.0525252/520475052/0
77.0.3117117117/117098190117/0
88.0.0170170170/1700147230170/0
98.0.2164816481648/164801617310225/1423
+

REST critical failures (sample)

+ + + +
MajorVerbPathKindStatusDetail
none
+ + +

Deep REST CRUD

+

total=5 · failed=0

+ + + +
FlowStepStatusDetail
sessiondonepassed
folderdonepassedgroup-f69b97
taggingdonepassedurn:vmomi:InventoryServiceCategory:ae660bd2f74e6215:GLOBAL/urn:vmomi:InventoryServiceTag:a38524329d11df43:GLOBAL
content-librarydonepassedlib-e9186bb2c6cb/item-4c7c9504b62d
vmdonepassedvm-160
+ + +

SOAP WSDL ops

+

total=44 · failed=0

+ + + +
OperationHTTPStatusDetail
RetrieveServiceContent200passed
Login200passed
Logout200passed
RetrieveProperties200passed
RetrievePropertiesEx200passed
ContinueRetrievePropertiesEx200passed
CreateFilter200passed
WaitForUpdatesEx200passed
CreateContainerView200passed
DestroyPropertyFilter200passed
FindByInventoryPath200passed
FindByUuid200passed
FindByDnsName200passed
FindByIp200passed
FindChild200passed
CreateVM_Task200passed
CreateChildVM_Task200passed
CreateFolder200passed
PowerOnVM_Task200passed
PowerOffVM_Task200passed
CloneVM_Task200passed
CreateSnapshot_Task200passed
Rename_Task200passed
ReconfigVM_Task200passed
RelocateVM_Task200passed
Destroy_Task200passed
CustomizeVM_Task200passed
CancelTask200passed
CurrentTime200passed
InitiateFileTransferToGuest200passed
InitiateFileTransferFromGuest200passed
ListFilesInGuest200passed
DeleteFileInGuest404passed
MakeDirectoryInGuest200passed
ImportVApp_Task200passed
CreateImportSpec200passed
HttpNfcLeaseComplete200passed
HttpNfcLeaseProgress200passed
HttpNfcLeaseAbort200passed
HttpNfcLeaseGetManifest200passed
QueryConfigOption200passed
QueryConfigOptionEx200passed
QueryConfigOptionDescriptor200passed
QueryConfigTarget200passed
+
- diff --git a/pulumi-tests/reports/pulumi-summary.json b/pulumi-tests/reports/pulumi-summary.json index d5b27ce..39dbc0e 100644 --- a/pulumi-tests/reports/pulumi-summary.json +++ b/pulumi-tests/reports/pulumi-summary.json @@ -1,42 +1,1006 @@ { - "generated_at": "2026-07-17T07:05:07.182576+00:00", + "generated_at": "2026-07-18T06:12:31.657947+00:00", "vsphere_server": "api-gateway", + "vsphere_base": "https://api-gateway", "smoke": false, - "provider": "pulumi-vsphere", + "provider": "pulumi-vsphere+rest+soap", "cases": [ { "id": "PU-INV", - "title": "Inventory data sources (datacenter/cluster/datastore/network/vm)", + "title": "Inventory data sources (dc/cluster/ds/net/vm/host/folder/pool)", "status": "passed", "error": "", "outputs": { "cluster_id": "domain-c21", "cluster_name": "Cluster", + "cluster_resource_pool_id": "resgroup-22", "datacenter_id": "datacenter-21", "datacenter_name": "Datacenter", "datastore_id": "datastore-31", "datastore_name": "datastore1", + "folder_id": "group-v100", + "folder_path": "/Datacenter/vm/production", + "host_id": "host-11", + "host_name": "esxi01.lab.local", "network_id": "network-41", "network_name": "VM Network", "resource_pool_id": "resgroup-22", + "resource_pool_name": "Cluster/Resources", "vm_id": "4200aaaa-bbbb-cccc-dddd-000000000101", "vm_name": "web-01" } }, + { + "id": "PU-FOLDER", + "title": "Folder create/destroy", + "status": "passed", + "error": "", + "outputs": { + "datacenter_id": "datacenter-21", + "folder_id": "group-8b2a68", + "folder_path": "pulumi-folder-7ee0f4fd" + } + }, { "id": "PU-VM", "title": "VirtualMachine create/destroy", - "status": "failed", - "error": " (most recent call last):\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) File \"/root/.pulumi/bin/pulumi-language-python-exec\", line 244, in \n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) executor.shutdown(wait=True)\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) File \"/usr/local/lib/python3.13/concurrent/futures/thread.py\", line 239, in shutdown\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) t.join()\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) ~~~~~~^^\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) File \"/usr/local/lib/python3.13/threading.py\", line 1095, in join\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) self._handle.join(timeout)\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) ~~~~~~~~~~~~~~~~~^^^^^^^^^\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab creating (0s) KeyboardInterrupt\n@ updating........\n + pulumi:pulumi:Stack vsphere-vm-lifecycle-pu-vm-lab **creating failed** 1 error; 27 messages\nDiagnostics:\n pulumi:pulumi:Stack (vsphere-vm-lifecycle-pu-vm-lab):\n error: update failed\n\n Traceback (most recent call last):\n File \"/root/.pulumi/bin/pulumi-language-python-exec\", line 232, in \n loop.run_until_complete(coro)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/usr/local/lib/python3.13/asyncio/base_events.py\", line 712, in run_until_complete\n self.run_forever()\n ~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/asyncio/base_events.py\", line 683, in run_forever\n self._run_once()\n ~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/asyncio/base_events.py\", line 2022, in _run_once\n event_list = self._selector.select(timeout)\n File \"/usr/local/lib/python3.13/selectors.py\", line 452, in select\n fd_event_list = self._selector.poll(timeout, max_ev)\n KeyboardInterrupt\n During handling of the above exception, another exception occurred:\n Traceback (most recent call last):\n File \"/root/.pulumi/bin/pulumi-language-python-exec\", line 244, in \n executor.shutdown(wait=True)\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/concurrent/futures/thread.py\", line 239, in shutdown\n t.join()\n ~~~~~~^^\n File \"/usr/local/lib/python3.13/threading.py\", line 1095, in join\n self._handle.join(timeout)\n ~~~~~~~~~~~~~~~~~^^^^^^^^^\n KeyboardInterrupt\n\n vsphere:index:VirtualMachine (lab-vm):\n error: sdk-v2/provider2.go:572: sdk.helper_schema: error creating virtual machine: ManagedObjectNotFound: provider=vsphere@4.17.0\n error: 1 error occurred:\n \t* error creating virtual machine: ManagedObjectNotFound\n\nResources:\n + 2 created\n 2 errored\n\nDuration: 1s\n\n stderr: ", - "outputs": {} + "status": "passed", + "error": "", + "outputs": { + "datastore_id": "datastore-31", + "lab_vm_id": "4200aaaa-bbbb-cccc-dddd-000000000151", + "lab_vm_name": "pulumi-lab-7bc84995", + "network_id": "network-41", + "resource_pool_id": "resgroup-22" + } }, { "id": "PU-TAG", "title": "TagCategory + Tag create/destroy", - "status": "failed", - "error": "reating (0s) During handling of the above exception, another exception occurred:\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) Traceback (most recent call last):\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) File \"/root/.pulumi/bin/pulumi-language-python-exec\", line 244, in \n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) executor.shutdown(wait=True)\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) ~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) File \"/usr/local/lib/python3.13/concurrent/futures/thread.py\", line 239, in shutdown\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) t.join()\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) ~~~~~~^^\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) File \"/usr/local/lib/python3.13/threading.py\", line 1095, in join\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) self._handle.join(timeout)\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) ~~~~~~~~~~~~~~~~~^^^^^^^^^\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab creating (0s) KeyboardInterrupt\n@ updating........\n + pulumi:pulumi:Stack vsphere-tags-pu-tag-lab **creating failed** 1 error; 27 messages\nDiagnostics:\n pulumi:pulumi:Stack (vsphere-tags-pu-tag-lab):\n error: update failed\n\n Traceback (most recent call last):\n File \"/root/.pulumi/bin/pulumi-language-python-exec\", line 232, in \n loop.run_until_complete(coro)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/usr/local/lib/python3.13/asyncio/base_events.py\", line 712, in run_until_complete\n self.run_forever()\n ~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/asyncio/base_events.py\", line 683, in run_forever\n self._run_once()\n ~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/asyncio/base_events.py\", line 2022, in _run_once\n event_list = self._selector.select(timeout)\n File \"/usr/local/lib/python3.13/selectors.py\", line 452, in select\n fd_event_list = self._selector.poll(timeout, max_ev)\n KeyboardInterrupt\n During handling of the above exception, another exception occurred:\n Traceback (most recent call last):\n File \"/root/.pulumi/bin/pulumi-language-python-exec\", line 244, in \n executor.shutdown(wait=True)\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/concurrent/futures/thread.py\", line 239, in shutdown\n t.join()\n ~~~~~~^^\n File \"/usr/local/lib/python3.13/threading.py\", line 1095, in join\n self._handle.join(timeout)\n ~~~~~~~~~~~~~~~~~^^^^^^^^^\n KeyboardInterrupt\n\n vsphere:index:TagCategory (lab-category):\n error: expected non-nil error with nil state during Create of urn:pulumi:pu-tag-lab::vsphere-tags::vsphere:index/tagCategory:TagCategory::lab-category\n\nResources:\n + 2 created\n 2 errored\n\nDuration: 1s\n\n stderr: ", - "outputs": {} + "status": "passed", + "error": "", + "outputs": { + "category_id": "urn:vmomi:InventoryServiceCategory:3070f3744accd472:GLOBAL", + "category_name": "pulumi-cat-32857be7", + "tag_id": "urn:vmomi:InventoryServiceTag:f1722581807beddf:GLOBAL", + "tag_name": "pulumi-tag-32857be7" + } + }, + { + "id": "PU-REST", + "title": "REST HTTP matrix majors=[6, 7, 8, 9] (IMPLEMENTED + HEAD; Layer A)", + "status": "passed", + "error": "", + "outputs": { + "coverage": "1987/1987", + "critical": 0, + "probed": 1987, + "declared": 1987, + "by_verb": { + "GET": 682, + "HEAD": 682, + "POST": 301, + "DELETE": 135, + "PATCH": 91, + "PUT": 96 + }, + "majors": [ + 6, + 7, + 8, + 9 + ] + }, + "rest": { + "base": "https://api-gateway", + "majors": [ + { + "major": 6, + "version": "7.0.0", + "declared": 52, + "method_count": 31, + "by_verb": { + "GET": 23, + "HEAD": 23, + "POST": 5, + "DELETE": 1 + }, + "probed": 52, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 47, + "client_4xx": 5 + }, + "deep_vs_stub": { + "deep": 52 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "52/52", + "ok": true + }, + { + "major": 7, + "version": "7.0.3", + "declared": 117, + "method_count": 78, + "by_verb": { + "GET": 41, + "HEAD": 41, + "PATCH": 2, + "POST": 25, + "DELETE": 8 + }, + "probed": 117, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 98, + "client_4xx": 19 + }, + "deep_vs_stub": { + "deep": 117 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "117/117", + "ok": true + }, + { + "major": 8, + "version": "8.0.0", + "declared": 170, + "method_count": 110, + "by_verb": { + "GET": 62, + "HEAD": 62, + "PATCH": 2, + "POST": 33, + "DELETE": 11 + }, + "probed": 170, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 147, + "client_4xx": 23 + }, + "deep_vs_stub": { + "deep": 170 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "170/170", + "ok": true + }, + { + "major": 9, + "version": "8.0.2", + "declared": 1648, + "method_count": 1094, + "by_verb": { + "GET": 556, + "HEAD": 556, + "PUT": 96, + "PATCH": 87, + "POST": 238, + "DELETE": 115 + }, + "probed": 1648, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 1617, + "stub_ok": 1423, + "client_4xx": 31 + }, + "deep_vs_stub": { + "stub": 1423, + "deep": 225 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "1648/1648", + "ok": true + } + ], + "by_verb": { + "GET": 682, + "HEAD": 682, + "POST": 301, + "DELETE": 135, + "PATCH": 91, + "PUT": 96 + }, + "declared": 1987, + "probed": 1987, + "total": 1987, + "critical": 0, + "failed": 0, + "failures": [], + "coverage_line": "1987/1987", + "probed_eq_declared": true, + "ok": true + } + }, + { + "id": "PU-CRUD", + "title": "Deep REST CRUD (session/folder/tag/library/vm)", + "status": "passed", + "error": "", + "outputs": { + "total": 5, + "failed": 0, + "flows": [ + "session", + "folder", + "tagging", + "content-library", + "vm" + ] + }, + "crud": { + "flows": [ + { + "flow": "session", + "step": "done", + "status": "passed", + "error": "" + }, + { + "flow": "folder", + "step": "done", + "status": "passed", + "error": "group-f69b97" + }, + { + "flow": "tagging", + "step": "done", + "status": "passed", + "error": "urn:vmomi:InventoryServiceCategory:ae660bd2f74e6215:GLOBAL/urn:vmomi:InventoryServiceTag:a38524329d11df43:GLOBAL" + }, + { + "flow": "content-library", + "step": "done", + "status": "passed", + "error": "lib-e9186bb2c6cb/item-4c7c9504b62d" + }, + { + "flow": "vm", + "step": "done", + "status": "passed", + "error": "vm-160" + } + ], + "total": 5, + "failed": 0, + "failures": [], + "ok": true + } + }, + { + "id": "PU-SOAP", + "title": "SOAP WSDL ops (44 operations)", + "status": "passed", + "error": "", + "outputs": { + "total": 44, + "failed": 0, + "wsdl_ops": 44 + }, + "soap": { + "ops": [ + { + "op": "RetrieveServiceContent", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Login", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Logout", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "RetrieveProperties", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "RetrievePropertiesEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ContinueRetrievePropertiesEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateFilter", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "WaitForUpdatesEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateContainerView", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "DestroyPropertyFilter", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByInventoryPath", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByUuid", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByDnsName", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByIp", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindChild", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateChildVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateFolder", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "PowerOnVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "PowerOffVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CloneVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateSnapshot_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Rename_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ReconfigVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "RelocateVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Destroy_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CustomizeVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CancelTask", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CurrentTime", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "InitiateFileTransferToGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "InitiateFileTransferFromGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ListFilesInGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "DeleteFileInGuest", + "status": 404, + "ok": true, + "error": "" + }, + { + "op": "MakeDirectoryInGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ImportVApp_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateImportSpec", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseComplete", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseProgress", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseAbort", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseGetManifest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigOption", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigOptionEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigOptionDescriptor", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigTarget", + "status": 200, + "ok": true, + "error": "" + } + ], + "total": 44, + "failed": 0, + "failures": [], + "ok": true, + "wsdl_ops": 44 + } } ], - "total_failed": 2 + "total_failed": 0, + "rest": { + "total": 1987, + "probed": 1987, + "declared": 1987, + "critical": 0, + "failed": 0, + "coverage_line": "1987/1987", + "probed_eq_declared": true, + "by_verb": { + "GET": 682, + "HEAD": 682, + "POST": 301, + "DELETE": 135, + "PATCH": 91, + "PUT": 96 + }, + "majors": [ + { + "major": 6, + "version": "7.0.0", + "declared": 52, + "method_count": 31, + "by_verb": { + "GET": 23, + "HEAD": 23, + "POST": 5, + "DELETE": 1 + }, + "probed": 52, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 47, + "client_4xx": 5 + }, + "deep_vs_stub": { + "deep": 52 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "52/52", + "ok": true + }, + { + "major": 7, + "version": "7.0.3", + "declared": 117, + "method_count": 78, + "by_verb": { + "GET": 41, + "HEAD": 41, + "PATCH": 2, + "POST": 25, + "DELETE": 8 + }, + "probed": 117, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 98, + "client_4xx": 19 + }, + "deep_vs_stub": { + "deep": 117 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "117/117", + "ok": true + }, + { + "major": 8, + "version": "8.0.0", + "declared": 170, + "method_count": 110, + "by_verb": { + "GET": 62, + "HEAD": 62, + "PATCH": 2, + "POST": 33, + "DELETE": 11 + }, + "probed": 170, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 147, + "client_4xx": 23 + }, + "deep_vs_stub": { + "deep": 170 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "170/170", + "ok": true + }, + { + "major": 9, + "version": "8.0.2", + "declared": 1648, + "method_count": 1094, + "by_verb": { + "GET": 556, + "HEAD": 556, + "PUT": 96, + "PATCH": 87, + "POST": 238, + "DELETE": 115 + }, + "probed": 1648, + "probed_eq_declared": true, + "buckets": { + "success_2xx": 1617, + "stub_ok": 1423, + "client_4xx": 31 + }, + "deep_vs_stub": { + "stub": 1423, + "deep": 225 + }, + "failures": [], + "failed": 0, + "critical": 0, + "coverage_line": "1648/1648", + "ok": true + } + ], + "failures": [] + }, + "crud": { + "total": 5, + "failed": 0, + "flows": [ + { + "flow": "session", + "step": "done", + "status": "passed", + "error": "" + }, + { + "flow": "folder", + "step": "done", + "status": "passed", + "error": "group-f69b97" + }, + { + "flow": "tagging", + "step": "done", + "status": "passed", + "error": "urn:vmomi:InventoryServiceCategory:ae660bd2f74e6215:GLOBAL/urn:vmomi:InventoryServiceTag:a38524329d11df43:GLOBAL" + }, + { + "flow": "content-library", + "step": "done", + "status": "passed", + "error": "lib-e9186bb2c6cb/item-4c7c9504b62d" + }, + { + "flow": "vm", + "step": "done", + "status": "passed", + "error": "vm-160" + } + ], + "failures": [] + }, + "soap": { + "total": 44, + "failed": 0, + "ops": [ + { + "op": "RetrieveServiceContent", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Login", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Logout", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "RetrieveProperties", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "RetrievePropertiesEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ContinueRetrievePropertiesEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateFilter", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "WaitForUpdatesEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateContainerView", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "DestroyPropertyFilter", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByInventoryPath", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByUuid", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByDnsName", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindByIp", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "FindChild", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateChildVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateFolder", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "PowerOnVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "PowerOffVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CloneVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateSnapshot_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Rename_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ReconfigVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "RelocateVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "Destroy_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CustomizeVM_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CancelTask", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CurrentTime", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "InitiateFileTransferToGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "InitiateFileTransferFromGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ListFilesInGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "DeleteFileInGuest", + "status": 404, + "ok": true, + "error": "" + }, + { + "op": "MakeDirectoryInGuest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "ImportVApp_Task", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "CreateImportSpec", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseComplete", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseProgress", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseAbort", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "HttpNfcLeaseGetManifest", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigOption", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigOptionEx", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigOptionDescriptor", + "status": 200, + "ok": true, + "error": "" + }, + { + "op": "QueryConfigTarget", + "status": 200, + "ok": true, + "error": "" + } + ], + "failures": [] + } } \ No newline at end of file