Files
MrAlaskan ba1d5f0b7d Fix AliasName subcategory browse continuation (#4040)
### Summary

This PR fixes `AliasNameClient.EnumerateSubCategoriesAsync()` so it
follows OPC UA `Browse` continuation points until the server has
returned every `SubAliasNameCategories` reference, and adds a regression
test covering the paged browse case that was previously truncated after
the first page.

### Problem

`EnumerateSubCategoriesAsync()` is intended to expose the full set of
sub-categories organized beneath an `AliasNameCategoryType` node.
However, the previous implementation only issued a single
`BrowseAsync()` call and immediately enumerated
`BrowseResult.References` from that first response.

Under OPC UA, servers are allowed to split browse results across
multiple pages and return a `ContinuationPoint` when the first response
does not contain the full reference set. In that situation, the client
must continue with `BrowseNext` until the continuation point is
exhausted. Because this helper never consumed the returned continuation
point, it silently dropped every sub-category that appeared after the
first page.

### Changes

- Continue sub-category enumeration with `BrowseNextAsync()` whenever
the initial `BrowseAsync()` response contains a non-empty continuation
point.
- Keep the existing filtering behavior so the helper still returns only
`AliasNameCategoryType` references that can be resolved to local
`NodeId` values.
- Add scriptable `Browse` / `BrowseNext` support to the alias-name
session test harness so paged browse behavior can be covered with a
focused unit test.
- Add a regression test that verifies `EnumerateSubCategoriesAsync()`
returns sub-categories from both the initial browse response and the
follow-up `BrowseNext` response.
2026-07-21 17:55:15 +02:00
..