diff --git a/CMakeLists.txt b/CMakeLists.txt index 741ff81e5a..1e3f535b42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,6 +156,10 @@ function(ovn_exe t) # ovn + openvswitch; the extra static ovsdb pulls nothing unreferenced). target_link_libraries(${t} PRIVATE ovn ovsdb openvswitch libssl libcrypto pthreadVC3 ${OVN_SYS_LIBS}) + # Embed a UTF-8 active-code-page manifest so the CRT hands argv[] to OVN as + # UTF-8 rather than re-encoding it through the system ANSI code page (LF stdout + # comes from the linked OVS lib's ovs_set_program_name). MSVC adds it via mt.exe. + target_sources(${t} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/windows-utf8.manifest") endfunction() # ovn-controller: Windows has no netlink, so build the *-stub.c variants and drop diff --git a/cmake/windows-utf8.manifest b/cmake/windows-utf8.manifest new file mode 100644 index 0000000000..fd7b04c4ee --- /dev/null +++ b/cmake/windows-utf8.manifest @@ -0,0 +1,13 @@ + + + + + + UTF-8 + + + diff --git a/tests/windows/known-failures.md b/tests/windows/known-failures.md index c025ffd922..1a165e09d3 100644 --- a/tests/windows/known-failures.md +++ b/tests/windows/known-failures.md @@ -1,65 +1,53 @@ -# OVN Windows test suite — known failures (real build bugs) - -These are **real OVN/MSVC build bugs** surfaced by the Windows autotest suite -(`tests/windows/run-windows-testsuite.ps1`). They are deliberately **not** in -`excluded-tests.txt`: the tests must keep running and failing until the bugs are -fixed. Method/feature incompatibilities (which *are* excluded) live in -`excluded-tests.txt` / `excluded-keywords.txt`. - -Baseline run: userspace groups 1–371, **304 pass / 65 fail / 2 skip** (after the -PKI + watchdog fixes; before excluding the method-incompatible tests). **NOTE:** -that local baseline was contaminated by bug #1 below (a stale generated `.inc` -in the local tree), which inflated the failure count; it must be re-measured on -a clean build. - -## 1. `xxreg`/`xreg` register field width wrong — RESOLVED (stale generated `.inc`, not an MSVC bug) - -The symptom: every test using an `xreg`/`xxreg` subfield logged - +# OVN Windows test suite — known failures + +Re-baselined on the xxreg-fixed clean `ovs` head, with OVN built against an OVS +that carries the binary-stdout fix (dbosoft/ovs#52). Real platform/method +incompatibilities are skipped via `excluded-tests.txt` / `excluded-keywords.txt`, +not listed here. + +The suite is **not** wired into CI as a gate. It splits into two very different +populations: + +- **Userspace / control-plane (the original groups 1–371): 65 → 14 failures.** + The drop came from three fixes: the stale-`.inc` guard (the `xxreg`/`xreg` + width corruption — see git history), the OVS UTF-8 argv manifest + this repo's + `cmake/windows-utf8.manifest` on the OVN exes, and OVS binary-mode stdout + (LF, not CRLF) which clears the `ovn-macros.at:992` NB→SB convergence checks + that compared `\r`-laden `ovn-sbctl/nbctl` output (122/132/170 now pass). +- **Integration suites (`ovn.at`, `ovn-controller.at`, …, groups 372+):** + hundreds of scenarios that stand up northd + controller + ovsdb + a simulated + datapath together. These were ordered last and never part of the userspace + baseline; they are a separate, large Windows-porting effort (datapath + simulation, timing, parallelization) and are out of scope for this pass. + +## Dependency + +The CRLF clearance above requires OVS binary-stdout (dbosoft/ovs#52). OVN gets it +by bumping the `ovs` submodule to a `dbosoft-main` that contains #52; until then +the convergence/`ovn-sbctl`-dump comparisons fail on embedded `\r`. + +## Userspace residual (14) — categorized + +| Tests | Cause | Disposition | +|---|---|---| +| 41, 42 `ovn-nbctl mirrors`; 157 NB-SB mirrors sync | The `ovn-nbctl` mirror `Index/Key` integer bug: a 32-bit mirror index is sign-extended into the high 32 bits of a 64-bit value (`-4294967296` for `0`). MSVC integer-width/sign-extension. **Real OVN/MSVC bug.** | Fix (separate change). | +| 100 SNI; 234 northd-parallelization unixctl; 256/258 LSP incremental; 259 SB pb incremental; 268 LR NAT incremental; 290 IGMP incremental (all `parallelization=yes`) | `ovs-macros.at:221` hard failures. These drive northd via `kill -STOP`/`-CONT` (SIGSTOP/SIGCONT) or unixctl pause, and several need `add-br`/`lsp-bind` against a datapath — neither method works for a Windows `--detach` daemon. Same family as the already-excluded incremental-processing tests. | Likely exclude (verify each is signal/datapath-bound, then add to excluded-tests.txt). | +| 165, 166 tunnel ids exhaustion | `ovn-macros.at:944`. | Investigate. | +| 353, 354 `ovn-br-controller` | `create` failure. | Investigate. | + +## Integration suites (sample) + +Not individually triaged. Note: the `ovn.at` expression/register tests +(373 `registers`, 377 `expression parser`, …) show register→OXM/NXM **name** +mismatches (e.g. `xxreg0 = OXM_OF_IP_ECN` vs expected `NXM_NX_XXREG0`). Real flow +generation is correct (the convergence tests pass), so this is an OVS/OVN +**test-expectation version difference** (the dbosoft OVS field set differs from +what OVN's `ovn.at` was written against), not a build bug — it resolves with a +coordinated OVS+OVN resync, not a Windows fix. + +## How to reproduce one test + +```powershell +.\tests\windows\run-windows-testsuite.ps1 -BuildDir -Groups '41' +# detailed log: tests/testsuite.dir//testsuite.log ``` -expr|WARN|xxreg0[64..127]: error parsing xreg0 subfield - (Cannot select bits 64 to 127 of 2-bit field xxreg0.) -``` - -`xxreg0` is **128-bit** and `xreg*` are **64-bit**, but they were reported as -**2-/8-bit**, so the expr parser rejected the subfields and northd flow -generation broke (~16 direct failures plus cascades). - -**Corrected root cause — not MSVC.** A prior in-source autotools build of the -OVS submodule had left stale generated `ovs/lib/*.inc` (`meta-flow.inc`, …) on -disk. A quoted `#include "meta-flow.inc"` from `ovs/lib/meta-flow.c` resolves the -compiland's own directory before any `-I` path, so the stale in-source copy -shadowed the freshly generated `gen/lib/meta-flow.inc`. The stale table had 183 -field entries against today's 211-id `MFF_N_IDS`; with positional initialization -+ direct indexing (`mf_fields[id]`), every field whose enum position had shifted -read the wrong slot, so `xxreg`/`xreg` landed on small fields and reported -2-/8-bit. (OVN's `lib/logical-fields.c` registration was correct all along.) - -These `.inc` are `.gitignore`'d generated artifacts, so a **clean checkout (CI) -was never affected** — this only bites a local tree that was once -autotools-built. Fixed by removing the stale in-source `.inc`; a configure-time -guard in the OVS CMake (`file(REMOVE …)`, dbosoft/ovs) prevents recurrence and -reaches OVN on the next `ovs` submodule bump. Confirmed: after the removal + -rebuild, `ovntest test-ovn parse-expr` normalizes `xxreg0[0..127]` → `xxreg0` -and accepts `xxreg0[64..127]` with no error. - -## 2. `ovn-nbctl` mirror `Index/Key` integer bug - -`ovn-nbctl.at:493` (mirrors, direct + daemon). `mirror-list` prints: - -``` -Index/Key: -4294967296 (expected 0) -Index/Key: -4294967295 (expected 1) -``` - -`-4294967296 = 0xFFFFFFFF00000000`: a 32-bit mirror index sign-extended into the -high 32 bits of a 64-bit value when read from the OVSDB integer column / printed. -MSVC integer-width/sign-extension bug. - -## Still to triage - -~37 failures (mostly `ovn-macros.at:992`/`:944` and `ovs-macros.at:221` macro -"hard failure"s) were attributed to bug #1 (northd producing wrong/incomplete -southbound data from the corrupted register widths). With #1 resolved, **the -baseline must be re-measured on a clean build** — these cascades are expected to -clear. Re-baseline before individually triaging any remainder.