netconf.git
3 weeks agoModernize yanglib-mdsal-writer 08/113908/1
Robert Varga [Wed, 9 Oct 2024 03:45:35 +0000 (05:45 +0200)]
Modernize yanglib-mdsal-writer

Use DataObjectIdentifier instance of InstanceIdentifier.

Change-Id: I9b4ce5f765d2a28ee0cad45cdd2e38f3a5e6ff65
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoAdd ChunkOutputStream 84/113084/17
Robert Varga [Sat, 10 Aug 2024 01:11:25 +0000 (03:11 +0200)]
Add ChunkOutputStream

Address the TODO left by the previous patch: ChunkOutputStream knows
the output and chunkSize, plus it gets a buffer.

write() methods now append to the buffer and frame it to output as
needed.

While we are here, also improve toString() implementations and add more
documentation.

Change-Id: I5cf0b91ab593bd9ab9151051bf828c9877f1386e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoMove EndpointInvariants 44/113844/9
Robert Varga [Sat, 5 Oct 2024 12:24:26 +0000 (14:24 +0200)]
Move EndpointInvariants

EndpointInvariants is a simple DTO, we can just move it to
impl package without exposing anything to the outside world.

JIRA: NETCONF-1379
Change-Id: I282a908b771132bcb71b5098c87f23b3f3b62fa4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoMove SegmentPeeler 45/113845/10
Robert Varga [Mon, 7 Oct 2024 07:51:56 +0000 (09:51 +0200)]
Move SegmentPeeler

SegmentPeeler is a utility useful to all users to transport-http, move
it there.

JIRA: NETCONF-1379
Change-Id: I281d48c548cee2752c58f13ec58320a6fddb8b8e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoFinish RestconfSession/PendingRequest integration 43/113843/8
Robert Varga [Sat, 5 Oct 2024 12:16:16 +0000 (14:16 +0200)]
Finish RestconfSession/PendingRequest integration

We have all the bits and pieces concentrated in RestconfSession, now
implement request tracking as outlined in the FIXMEs, completing the
dispatch integration.

JIRA: NETCONF-1379
Change-Id: Icc5216b5496abda90cd2f1368f99134a07b09306
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoSplit out HTTPServerSession 39/113839/7
Robert Varga [Fri, 4 Oct 2024 20:53:31 +0000 (22:53 +0200)]
Split out HTTPServerSession

RestconfSession has a top-half, which is RESTCONF-specific, and a
bottom-half, which is closely related to HTTPServer's channel setup.

This splits out HTTPServerSession, so that it can be moved to
transport-http and reused by other components if/when the need arises.

JIRA: NETCONF-1379
Change-Id: Iab96baab4b9469a6a5eaf2d3234cfdbb813a59a6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoEliminate Http2Utils 40/113840/6
Robert Varga [Fri, 4 Oct 2024 23:03:21 +0000 (01:03 +0200)]
Eliminate Http2Utils

This class is a case of false sharing:

1. most of the callers of copyStreamId() are server-side, so they
   can squat in ServerSseHandler.

2. connectionHandler() is differentiated by a boolean -- which selects
   the framer and deals with the setup of listeners.

Eliminate the entire class at the cost of duplicating ~15 lines of code.
While that may sound horrible, it is actually what we want to do,
because now we can evolve the setup on client side and server side of
things separately.

JIRA: NETCONF-1379
Change-Id: I3a5f4288f4b0d65fa53cc039e37b2dde70f46e87
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoEliminate RestconfRequest 38/113838/6
Robert Varga [Fri, 4 Oct 2024 19:12:51 +0000 (21:12 +0200)]
Eliminate RestconfRequest

The sole remaining user of this class is RestconfSession, which uses
it just as an indirection.

Fold RestconfRequest.execute() into RestconfSession.executeRequest(), so
that we get all the things in one place.

JIRA: NETCONF-1379
Change-Id: I085d5c1e020d31ab1deb38c5496f1ace0bcd8ce7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoRefactor AbstractRequestProcessorTest wiring 37/113837/6
Robert Varga [Fri, 4 Oct 2024 18:36:31 +0000 (20:36 +0200)]
Refactor AbstractRequestProcessorTest wiring

This patch finishes the 'RequestDispatcher' refactoring saga by wiring
AbstractRequestProcessorTest to RestconfSession so that all requests
we send end up going through all of our validation.

This flushes out the fact we do not add a Host: header, which this patch
adds to all testing messages.

JIRA: NETCONF-1379
Change-Id: I907d689e1524b501070d2ef96a00df77ad37aa25
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoImprove PendingRequest.execute()'s body handling 36/113836/8
Robert Varga [Fri, 4 Oct 2024 18:11:17 +0000 (20:11 +0200)]
Improve PendingRequest.execute()'s body handling

Empty body is not really valid in terms of RESTCONF -- in fact we have
some code to detect empty inputs in restconf-server-api.

Update PendingRequest's contract to allow for null bodies and deal with
that in PendingRequest{With,Without}Body.

With that expressiveness in place, rework RestconfSession's content
reference handling, so that we release the body as soon as the execution
is done.

JIRA: NETCONF-1379
Change-Id: Idb3b92450cabe6fd27661e70863fa8b64e3bc93a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoAdd PendingRequestWithoutBody 35/113835/7
Robert Varga [Fri, 4 Oct 2024 17:36:41 +0000 (19:36 +0200)]
Add PendingRequestWithoutBody

We are getting our body handed as an InputStream and it is critical we
close it.

PendingRequestWithBody already deals with that, now we introduce
PendingRequestWithoutBody, which closes the stream prior to continuing
execution.

In order to prevent accidental mistakes, make AbstractPendingRequest a
sealed class allowing only these two subclasses, so that everybody else
has to pick on which side they are.

JIRA: NETCONF-1379
Change-Id: Ic06c133bb401f8ff8eeb5b1e2df55f074148a546
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoEliminate APIResource.firstSegment() 34/113834/7
Robert Varga [Fri, 4 Oct 2024 17:24:56 +0000 (19:24 +0200)]
Eliminate APIResource.firstSegment()

APIResource should not care how it is reached from EndpointRoot, move
that knownledge out.

JIRA: NETCONF-1379
Change-Id: I79704a1be259265048a0205db397819252dc28e1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoSplit out EndpointRoot 33/113833/7
Robert Varga [Fri, 4 Oct 2024 16:01:21 +0000 (18:01 +0200)]
Split out EndpointRoot

RestconfSession includes more functionality than it should, mostly
because there was no other place to stick it while we had
RestconfRequestDispatcher.

This patch introduces EndpointRoot, which acts as the semantic root
resource of a particular Endpoint, taking care of dispatching between
registered resources.

JIRA: NETCONF-1379
Change-Id: Id59841b92f5a568024463a7355d6bfdf2969a7c9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoFixup OpenApiBodyWriter usage 73/113873/2
Robert Varga [Mon, 7 Oct 2024 16:14:50 +0000 (18:14 +0200)]
Fixup OpenApiBodyWriter usage

OpenApiBodyWriter is a JAX-RS integration capable of streaming an entity
into an OutputStream, but we are misusing it to buffer entities in our
InputStreams.

Introduce OpenApiBodyBuffer to perform exactly the operation we need,
migrating complicated callers.

MetadataStream is straight-up replaced with pushing the MetadataEntity
into Response -- whence it is picked up by OpenApiBodyWriter.

JIRA: NETCONF-1370
Change-Id: Ic6f7b779b7afe28b90739351b48aff2aceedf0e0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoClean up restconf-openapi dependencies 72/113872/1
Robert Varga [Mon, 7 Oct 2024 15:18:14 +0000 (17:18 +0200)]
Clean up restconf-openapi dependencies

We are using jackson-databind only for tests, hence we can work with
just jackson-core.

Update our wiring and clean up dependencies, switch enforcement on, so
we do not regress.

JIRA: NETCONF-1370
Change-Id: Ia553b53e6d580a072eea67813062f8b27729e343
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoBump SSHD to 2.14.0 80/113780/3
Robert Varga [Tue, 1 Oct 2024 09:04:17 +0000 (11:04 +0200)]
Bump SSHD to 2.14.0

https://github.com/apache/mina-sshd/blob/master/docs/changes/2.14.0.md

Change-Id: I14fa8f3641550852705811a93521128768e15246
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoPropagate TransportSession to NettyServerRequest 23/113823/7
Robert Varga [Fri, 4 Oct 2024 14:10:02 +0000 (16:10 +0200)]
Propagate TransportSession to NettyServerRequest

Subscriptions will need to be attaching resources to RestconfSession,
this patch ensures we expose it from ServerRequest.

JIRA: NETCONF-714
Change-Id: I7948ea3f76351de7b69ae0b99a15b20c79cfdc6f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoRename RestconfRequestDispatcher to APIResource 31/113831/7
Robert Varga [Fri, 4 Oct 2024 12:49:46 +0000 (14:49 +0200)]
Rename RestconfRequestDispatcher to APIResource

At this point there is only a teensy-tiny bit of the old 'dispatch()'
logic living in RestconfRequestDispatcher and it now really acts as a
the root of RESTCONF -- i.e. what RFC8040 calls 'API Resource'. Rename
it to match its function.

JIRA: NETCONF-1379
Change-Id: I18437f5346ff6c1c179a477514001a2c4bb692fa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoMove RestconfRequestDispatcher processing 30/113830/7
Robert Varga [Fri, 4 Oct 2024 12:32:05 +0000 (14:32 +0200)]
Move RestconfRequestDispatcher processing

The entire RestconfRequestDispatcher.dispatch() thing is going to be
refactored. Move it to RestconfRequest, as it is completely independent
from RestconfRequestDispatcher.

JIRA: NETCONF-1379
Change-Id: I6a7ea7768fa467002beecc38d806898f46cca55c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoClean up RestconfRequestDispatcher a bit 29/113829/7
Robert Varga [Fri, 4 Oct 2024 12:19:40 +0000 (14:19 +0200)]
Clean up RestconfRequestDispatcher a bit

This class is becoming a normal resource, hence it should not be logging
things on behalf of the entire component.

Move the logging bits to RestconfTransportChannelListener and move the
prepare() method just below the constructor, so that it is clear what is
going away at some point.

JIRA: NETCONF-1379
Change-Id: Ia5b9f168c164ac30341ae3cdc43eb2a34b696b84
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoTrim leaf resource method names 28/113828/7
Robert Varga [Fri, 4 Oct 2024 12:08:21 +0000 (14:08 +0200)]
Trim leaf resource method names

Now that each resource has its own class, we can shorten private method
names.

JIRA: NETCONF-1379
Change-Id: If2c257a3ac0fbda401ab24b12dc71539b89c03a9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoRestconfRequestDispatcher is an AbstractResource 27/113827/6
Robert Varga [Fri, 4 Oct 2024 11:54:16 +0000 (13:54 +0200)]
RestconfRequestDispatcher is an AbstractResource

We now have a clear definition of what a resource is -- but the
prepare() method has some tension between RestconfRequestDispatcher's
and AbstractResource's (and its subclasses') needs.

Resolve this tension by introducing AbstractLeafResource, which is what
DataResource et al. really are.

This allows us to redefine AbstractResource.prepare() to match exactly
what RestconfRequestDispatcher's idea, with AbstractLeafResource
providing the common glue during invocation.

JIRA: NETCONF-1379
Change-Id: I6e060eac0513c6188627a0543bd87708edbdbf6e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoSplit out RESTCONF request preparation 26/113826/6
Robert Varga [Fri, 4 Oct 2024 11:34:02 +0000 (13:34 +0200)]
Split out RESTCONF request preparation

RestconfRequestDispatcher's organization is now such that there are two
three distinct parts to it:

1. the 'RESTCONF API root resource' part, dealing request
2. the preparation of subresources
3. the Netty pipeline part, dealing with interface to RestconfSession

In this patch we introduce AbstractResource to split out utilities and
constants shared for the first two parts. It additionally defines the
prepare() function, which we use from the last part.

We split out {Data,Modules,Operations,YLV}Resource, so that each hosts
only methods specific to them.

JIRA: NETCONF-1379
Change-Id: I0b42a3920146a30f22ce8bfdb3b5fd97693bfcdf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoRefactor RESTCONF request dispatch 93/113793/26
Robert Varga [Tue, 1 Oct 2024 17:05:57 +0000 (19:05 +0200)]
Refactor RESTCONF request dispatch

The act of servicing an HTTP request has four distinct phases:
- request validation and binding, synchronous
- request execution, asynchronous
- result interpretation, synchronous
- result streaming, asynchronous

We have first two cobbled together in RestconfRequestDispatcher, while
the last two are handled synchronously in ResponseUtils and the various
RestconfRequest subclasses.

This patch tackles the problem in RestconfRequestDispatcher, separating
the two phases.

We introduce a prepare() method, whose sole raison d'etre is to
synchronously process the contents of HttpRequest, i.e. method, URI and
headers, so as to arrive at a specific request (and its parameters) that
we want to be executing.

The result is communicated via PreparedRequest, which is a sealed
interface with two specializations:

1. CompletedRequest, holding an immediate result -- typically an error
   response, or a response that is statically known (such as the answer
   to 'OPTIONS /restconf/operations HTTP/1.1')
2. PendingRequest, represents has a number of specializations for the
   various requests we can execute asynchronously

The former is handled by immediate conversion to a FullHttpResponse,
which is then sent to the client. The latter is then fed any request
body, if present and executed, with the results processed in the usual
way.

We also eliminate two implementation hotspots:

1. RequestParameters, which has comindled the various request-related
   concerns in a structure-like blob. We now track the various
   parameters in the various AbstractPendingRequest subclasses, keeping
   them colocated with their users.

2. ResponseUtils along with the message builder -- which are now
   replaces through the Response interface, which offers decoupling of
   response shapes from how they map to HTTP constructs -- which is
   really a pipeline-side concern.

The result is that we have separated out the concerns, so that each
processing stage has a natural view of what it needs to handle --
resulting in much more modular codebase, where individual concerns can
be further evolved without touching others.

Most significantly, the process of turning RestconfServer responses
into ByteBufs is driven completely from PendingRequestListener -- i.e.
fully at the discretion of the Netty pipeline side of the house.

JIRA: NETCONF-1379
Change-Id: I58b89a389faac4a305881f425b5ec6cfac0d77f4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoUse exhaustive switch in sessionEvent() 41/113841/3
Robert Varga [Sat, 5 Oct 2024 05:50:10 +0000 (07:50 +0200)]
Use exhaustive switch in sessionEvent()

We really want full coverage of possible events, use a Java 21 trick
to get that.

Change-Id: I6f7005700406ad713ea302f0ef511c74a0ba1700
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoUse HttpRequest in PrincipalService 22/113822/1
Robert Varga [Thu, 3 Oct 2024 21:00:33 +0000 (23:00 +0200)]
Use HttpRequest in PrincipalService

PrincipalService requires access to headers, nothing else. Make sure it
does not carry the baggage of FullHttpRequest.

JIRA: NETCONF-1379
Change-Id: Icae70e153118dc661fc7a50352a6503337ac7ba2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoSeparate out ugly assert 21/113821/1
Robert Varga [Thu, 3 Oct 2024 19:55:41 +0000 (21:55 +0200)]
Separate out ugly assert

We have a rather funky test here, which happened to work because we had
no guards against thrown exceptions.

Those guards are coming back, hence this late-access to InputStream will
not work.

Refactor the test harness into its own class and mark it for
replacement.

JIRA: NETCONF-1379
Change-Id: I6f233fb4dc3a223b375d0e611e12dc5d8ccd0996
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoAdd restconf.server.ImplementedMethod 19/113819/4
Robert Varga [Thu, 3 Oct 2024 12:45:51 +0000 (14:45 +0200)]
Add restconf.server.ImplementedMethod

We are making a check whether a particular method is implemented via a
Set.contains(). This involves a hash-based lookup and gives us a
boolean.

We can do better: define an ImplementedMethod enum, and use Map.get()
for the same check. This has the same lookup cost, but gives us a
singleton check, which we can use for more efficient dispatch.

JIRA: NETCONF-1379
Change-Id: Ic58a0d2d5cdf836b8acd40f5be5c6f1c40ecced7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoExpose AbstractServerRequest.prettyPrint() 14/113814/1
Robert Varga [Wed, 2 Oct 2024 23:05:03 +0000 (01:05 +0200)]
Expose AbstractServerRequest.prettyPrint()

Having this method limited to subclasses is quite limiting -- it means
that classes in the same package as a subclass cannot reference it.

Rather than requiring subclasses to provide a different method that
bridges to prettyPrint(), make the method public, which does no harm.

JIRA: NETCONF-1379
Change-Id: Ib3f307d650756e405aef2a850a2af8dd579fac1e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoOpenAPI: Actions displayed under /rests/operations 21/113721/3
Oleksandr Zharov [Thu, 26 Sep 2024 16:03:46 +0000 (18:03 +0200)]
OpenAPI: Actions displayed under /rests/operations

Fixed base path for action to be /rests/data instead of
/rests/operations.

JIRA: NETCONF-1395
Change-Id: Iae1043447252d3ff97b0f067a99b5b0a94fdc06d
Signed-off-by: Oleksandr Zharov <oleksandr.zharov@pantheon.tech>
4 weeks agoEliminate extractAcceptTypes() 91/113791/7
Robert Varga [Tue, 1 Oct 2024 19:42:28 +0000 (21:42 +0200)]
Eliminate extractAcceptTypes()

This method is a simple internal intermediary, which actually hides
things from its caller. Inline it and drop a FIXME pointing out the
naivety of responseTypeFromAccept().

JIRA: NETCONF-1379
Change-Id: If22a569be1e740c64673f3675d6095126c197dba
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoExpand usability of MessageEncoding 90/113790/5
Robert Varga [Tue, 1 Oct 2024 19:21:38 +0000 (21:21 +0200)]
Expand usability of MessageEncoding

Now that MessageEncoding is a well-defined, expand its usefulness by
including:
- direct RestconfStream.Encoding constant reference
- the set of producer-compatible media types

JIRA: NETCONF-1379
Change-Id: I586773cd08449224aba5568d90cecdcede9513fc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoSplit out NettyEndpointConfiguration.Encoding 89/113789/4
Robert Varga [Tue, 1 Oct 2024 18:45:49 +0000 (20:45 +0200)]
Split out NettyEndpointConfiguration.Encoding

This encoding enumeration is backed by a well-known specification,
namely RFC8040 section 5.2 "Message Encoding".

Promote this class to a top-level construct, adding the appropriate
documentation to ensure where this is coming from.

Update propagation within o.o.restconf.server, so that we do not
lose type safety to AsciiString.

Furthermore split out the from(String) method to restconf-nb, as its
contract is undocumented and is really only appropriate in parsing
the configuration file there.

JIRA: NETCONF-1379
Change-Id: I60499d255d94463e498d6aa1511715469d1b8ead
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoSplit out bootstrap factory 84/113784/5
Robert Varga [Tue, 1 Oct 2024 08:42:42 +0000 (10:42 +0200)]
Split out bootstrap factory

NettyEndpoint currently allocates its own BootstrapFactory and it fails
to clean it up.

Furthermore the configuration prevents users from sharing threads
between multiple subsystems as well as using split groups fro accepting
connections (boss) and servicing connections (worker).

Fix the leak and plug the capability gap by more closely following the
netconf-nb model -- and have the BootstrapFactory managed separately
outside of NettyEndpointConfiguration.

JIRA: NETCONF-1379
Change-Id: I2cd0e93fc29f1413b3b4438ce74a3327f72f3f1a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoRetain Encoding in endpoint configuration 79/113779/6
Robert Varga [Tue, 1 Oct 2024 08:38:44 +0000 (10:38 +0200)]
Retain Encoding in endpoint configuration

Do not peel Encoding, just forward requests for default encoding to it.

JIRA: NETCONF-1379
Change-Id: I8df2f190b030f505023ac6a5e28aeca54eb74343
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoAdd response body example for ROOT operations GET 21/113121/5
Yaroslav Lastivka [Fri, 16 Aug 2024 10:02:00 +0000 (13:02 +0300)]
Add response body example for ROOT operations GET

Hardcoded top-level container "ietf-restconf:operations" for
the OpenAPI-generated example.
Implemented fixed structure to ensure proper schema generation
for both JSON and XML.
Updated unit tests (UT) accordingly to reflect
the new changes.

JIRA: NETCONF-1343
Change-Id: I4aa9f4d782eee929cd49b445913683c3cd1ea33b
Signed-off-by: Yaroslav Lastivka <yaroslav.lastivka@pantheon.tech>
4 weeks agoUpdate Netty RESTCONF API root path configuration 51/113751/12
Robert Varga [Fri, 27 Sep 2024 18:44:48 +0000 (20:44 +0200)]
Update Netty RESTCONF API root path configuration

The 'restconf' configuration property defaults to "rests" for historical
reasons and controls the {+restconf} expansion on the JAX-RS endpoint.

In the Netty endpoint we want to retain the ability to control the path,
but want to start with the default of "restconf", to make the
out-of-the-box experience match RFC8040.

This patch introduces a separate "api-root-path" property, with a
well-documented syntax and semantics.

We propagate this property via NettyEndpointConfiguration in a decoded
form, so there is no confusion as to what the actual semantics are --
which is always a problem with naked Strings.

JIRA: NETCONF-1379
Change-Id: I14ae912082c9407cac796971686e75f0c23cf04f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
4 weeks agoAdd response body example for ROOT data GET 73/113173/10
Oleksandr Zharov [Wed, 21 Aug 2024 19:43:09 +0000 (21:43 +0200)]
Add response body example for ROOT data GET

Added refs to root data GET requests to fill the response
for this path. Controller and devices have different
models wired up to them depending on what you can
actually see after executing GET request to them.

All UT test resources have been adapted for this change.

JIRA: NETCONF-1342
Change-Id: I38ec5df3183809e062fed1af09ba43cf59e1a034
Signed-off-by: Oleksandr Zharov <oleksandr.zharov@pantheon.tech>
5 weeks agoAdd parameters for ROOT data GET 14/112414/6
Yaroslav Lastivka [Tue, 2 Jul 2024 07:42:25 +0000 (10:42 +0300)]
Add parameters for ROOT data GET

Added parameters for GET ROOT path object,
provides possibility to select config or nonconfig data.
Added possibility to set 'Accept' parameter inside header,
included empty content container for proper OpenAPI parsing.

JIRA: NETCONF-1338
Change-Id: I6584e58d1d8857b6abe202b63e14c03d6fd584d9
Signed-off-by: Yaroslav Lastivka <yaroslav.lastivka@pantheon.tech>
5 weeks agoFix request path interpretation 22/113722/11
Robert Varga [Thu, 26 Sep 2024 16:16:53 +0000 (18:16 +0200)]
Fix request path interpretation

We are decoding the request path before processing it, which leads to
our inability to properly target values.

This patch introduces SegmentPeeler, which aids our traversal of the
path -- thus we can examine decoded segments while we still retain the
ability to pick up the remainder of the path in encoded form.

JIRA: NETCONF-1399
Change-Id: Ib7f7b08db8a97da7e9f60528f9834c50e6ce1ee4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoOpenApi: Avoid leaf names duplication 25/113425/3
Oleksandr Zharov [Wed, 4 Sep 2024 12:45:53 +0000 (14:45 +0200)]
OpenApi: Avoid leaf names duplication

Slightly modified schema generation logic to add the name
of the module before augmentation nodes to avoid
duplication error for augmentations with the same name as
the augmented node. This should help to distinguish
between augmented and not augmented nodes.

JIRA: NETCONF-1361
Change-Id: Iddae59522949a147ef3a6877bef30cfba1d24b20
Signed-off-by: Oleksandr Zharov <oleksandr.zharov@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
5 weeks agoRemove NettyEndpointConfiguration.baseUri() 58/113658/5
Robert Varga [Thu, 26 Sep 2024 20:52:49 +0000 (22:52 +0200)]
Remove NettyEndpointConfiguration.baseUri()

The idea that the user needs to configure a hostname for Netty endpoint
is quite wrong: we get an absolute URI with each request and hence can
trivially derive restconfURI that the caller can use to reach us.

Remove the host-configuration knob and streamline
NettyEndpointConfiguration by propagating only the restconf() prefix.

JIRA: NETCONF-1379
Change-Id: Ia4857e74e109e04339865fec31f4261343ab953d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoAdd String-based StorageEntry constructor 48/113748/2
Robert Varga [Fri, 27 Sep 2024 15:02:18 +0000 (17:02 +0200)]
Add String-based StorageEntry constructor

We have two places instantiating StorageEntry from strings:
- TestUtils.storageEntry()
- PlaintextLocalFileStorage.readData()

Expose the appropriate constructor and eliminate and let tests use that.

Change-Id: I4f0225ded5cc925c6197a3b12e36f84f36284856
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoDo not allow StorageEntry to be subverted 47/113747/1
Robert Varga [Fri, 27 Sep 2024 14:53:08 +0000 (16:53 +0200)]
Do not allow StorageEntry to be subverted

Perform a defensive clone on {insert,put}Entry(), so that these cannot
be modified later.

Change-Id: Id41b1a157e3ec1ca30f26b0e37c20d59d7fb983e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoStorageEntry should not be a Map.Entry 44/113744/4
Robert Varga [Fri, 27 Sep 2024 11:02:10 +0000 (13:02 +0200)]
StorageEntry should not be a Map.Entry

StorageEntry is internal storage and as such it does not follow the
Map.Entry contract -- most notably it has a different hashCode().

Stop claiming we are implementing Map.Entry and instead use Map.entry()
to construct the one to give out to users.

Change-Id: I6ef9900f32d65d129edbbc7aa84e89177ca853e3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoUse a iterator mapping 43/113743/2
Robert Varga [Fri, 27 Sep 2024 10:43:01 +0000 (12:43 +0200)]
Use a iterator mapping

Each of our entries snapshot is immutable, hence we can use iterator
transforms instead of linearizing to array.

Change-Id: Ic41fbfc35a39db704c78de1ccea5381dfd3ecb8b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoCleanup plaintext-localfile dependencies 42/113742/2
Robert Varga [Fri, 27 Sep 2024 10:30:08 +0000 (12:30 +0200)]
Cleanup plaintext-localfile dependencies

We have superfluous dependencies specified and have them misordered. Fix
both up.

Change-Id: I3101f9f581c3eefeb1e92b4b5673028e3936c980
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoRemove superfluous nullness annotations 41/113741/2
Robert Varga [Fri, 27 Sep 2024 09:52:12 +0000 (11:52 +0200)]
Remove superfluous nullness annotations

Annotations are specified in interface contract, there is no point in
repeating them.

Change-Id: I0c346d62b7c1bde2b5978f7c80b707d601c5fe8a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoDo not use Optional during lookup 40/113740/2
Robert Varga [Fri, 27 Sep 2024 09:48:27 +0000 (11:48 +0200)]
Do not use Optional during lookup

We are using Optional only to remap it internally. Rename findByKey() to
lookupEntry() and return a nullable instead.

While we are here, also make sure we reject null keys consistently.

Change-Id: I404247e93e34f3e05405e6e0517d942f6b8a5489
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoSpecialize TransportChannelListeners 19/113719/6
Robert Varga [Thu, 26 Sep 2024 14:27:53 +0000 (16:27 +0200)]
Specialize TransportChannelListeners

Take advantage of the ability to cap which TransportChannels a
particular listeners supports. This allows us to eliminate a cast in
RestconfTransportChannelListener.

JIRA: NETCONF-1400
Change-Id: I1f7000b724eb9f94bc28f9cec51f098165d5f722
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoFix private TransportChanneListener references 20/113720/5
Robert Varga [Thu, 26 Sep 2024 14:18:23 +0000 (16:18 +0200)]
Fix private TransportChanneListener references

Our switch making TransportChanneListener a parameterized interface is
causing quite a few warnings.

This patch addresses warnings private to transport implementations,
without an ABI impact.

JIRA: NETCONF-1400
Change-Id: I5d3aa813f9ef4c859b72e774376031facf614ee5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoParameterize TransportChannelListener 17/113717/6
Robert Varga [Thu, 26 Sep 2024 12:01:01 +0000 (14:01 +0200)]
Parameterize TransportChannelListener

TransportChannel types are exposed to users and some of them provide
useful information. Allow the TransportChannel type to be specified
for TransportChannelListener.

JIRA: NETCONF-1400
Change-Id: Ia5d589ff2496153ee6909350217bb31a4152b4ad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoPropagate Target URI to dispatcher 16/113716/2
Robert Varga [Thu, 26 Sep 2024 11:30:52 +0000 (13:30 +0200)]
Propagate Target URI to dispatcher

We need the Target URI in RestconfRequestDispatcher, so that we can
propagate the correct {+restconf} base, as seen by the client, to the
RestconfServer.

JIRA: NETCONF-1379
Change-Id: Iac3fb12bc708f72496f576260c7de7a0fb09c5c7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoRework resource lookup 08/113708/5
Robert Varga [Wed, 25 Sep 2024 10:36:44 +0000 (12:36 +0200)]
Rework resource lookup

RestconfRequestDispatcher is using indirection via PathParameters to
interpret the requested path.

There are multiple problems here:
- the logic is quite undocumented
- there is an overload of PathArguments.EMPTY to report at least two
  distinct paths
- we are reporting 409 where we should be reporting 404, as noted in
  RFC8040 section 4.3
- the splitting works on decoded path, whereas the ApiPath.parse()
  should always we presented with an encoded path

This patch deals with the first three problems, documenting how we are
peeling the path and what gaps there are relative to the specification.

The last problem is marked with a FIXME and will be addressed in a
follow-up patch.

JIRA: NETCONF-1379
Change-Id: I408626a5e328bb938f727d9a549ca8297c9df3a9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoCorrect well-known error status code 07/113707/3
Robert Varga [Wed, 25 Sep 2024 22:59:54 +0000 (00:59 +0200)]
Correct well-known error status code

We are now reporting unimplemented method from RestconfSession, hence
WellKnownResources can report a proper 405 Method Not Allowed by
default.

JIRA: NETCONF-1379
Change-Id: I62c4323e8bc4f4fe0c0f082bffec18dffab55f01
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoReconstruct Target URI, part two 83/113683/9
Robert Varga [Wed, 25 Sep 2024 16:39:57 +0000 (18:39 +0200)]
Reconstruct Target URI, part two

Reconstructing Target URI from its usual origin-form is a tad more
involved:

1. we need access to the URI scheme being used, which we now have
   conveniently available from HTTPTransportChannel
2. we need to ensure we have a Host header, that it contains only one
   value and that it is a valid authority

We employ java.net.URI for most of the parsing, combining and error
reporting functions. It also allows us to determine in the uri is in
absolute-form, in which case we can pick it up as is.

We use this URI to initialize QueryStringDecoder, so that its uri()
method reports the complete thing.

JIRA: NETCONF-1379
Change-Id: I6641a613f2fd4c63332ae29b0a876ca32a325a03
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoReconstruct Target URI, part one 80/113680/7
Robert Varga [Wed, 25 Sep 2024 12:31:06 +0000 (14:31 +0200)]
Reconstruct Target URI, part one

In order to correctly serve our requests, we need to properly
reconstruct target URI, as per HTTP/1.1 spec.

This patch deals with the simplest case, asterisk-form: it is only
allowed for OPTIONS request and reports all methods implemented by
the server. All other methods fails with either status 400.

That necessitates knowledge as to what methods are requested, hence
we have a statically-populated Set.

JIRA: NETCONF-1379
Change-Id: Id37044799460759d1066ad7a17524ee0c0284060
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoExpose HttpScheme from HTTPTransportChannel 05/113705/4
Robert Varga [Wed, 25 Sep 2024 18:48:46 +0000 (20:48 +0200)]
Expose HttpScheme from HTTPTransportChannel

Downstream users may need to inquire as to whether the channel is secure
or not -- for example to follow RFC9110 Target URI construction.

Expose HttpScheme from HTTPTransportChannel, so that this information is
readility available.

JIRA: NETCONF-1379
Change-Id: Iba7f847246ab9c88a9804caba803f22ab704f406
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoSpecialize HTTPClient 84/113684/4
Robert Varga [Wed, 25 Sep 2024 19:13:36 +0000 (21:13 +0200)]
Specialize HTTPClient

We know statically whether a particular client is TLS-enabled, so use
two subclasses, each specialized for the task.

JIRA: NETCONF-1379
Change-Id: Ib46a3c779dd2f3bdf060561a754180f099fdc997
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoMove ResponseUtils.optionsResponse() 73/113673/3
Robert Varga [Tue, 24 Sep 2024 22:56:46 +0000 (00:56 +0200)]
Move ResponseUtils.optionsResponse()

This method is only called from RestconfRequestDispatcher. Move it there
and simplify it by bypassing ResponseBuilder's complexities.

JIRA: NETCONF-1379
Change-Id: Ie7647fcc2eab6b8c1c9112da55283efb1b5819ae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoClean up NettyServerRequest subclasses 72/113672/4
Robert Varga [Tue, 24 Sep 2024 22:42:19 +0000 (00:42 +0200)]
Clean up NettyServerRequest subclasses

Almost all anonymous NettyServerRequest subclasses are inefficient in
that they retain RequestParameters twice:
- once in NettyServerRequest
- once via reference to 'params' method argument

Make sure we reference NettyServerRequest.requestParams instead of
params, reducing memory overhead of each request.

JIRA: NETCONF-1379
Change-Id: I0f7df86dbd8681f2d4e92f7dabefb6f6820709ef
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoAdd FormattableServerRequest 71/113671/3
Robert Varga [Tue, 24 Sep 2024 22:35:36 +0000 (00:35 +0200)]
Add FormattableServerRequest

We have two distinct NettyServerRequest subclasses doing exactly the
same thing. Share a single FormattableServerRequest class between the
two code paths.

JIRA: NETCONF-1379
Change-Id: Id30306ce9073afdd73d790282d3a023dde2c4c07
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoIntroduce RestconfRequest 70/113670/3
Robert Varga [Tue, 24 Sep 2024 22:03:41 +0000 (00:03 +0200)]
Introduce RestconfRequest

The use of FutureCallback is misleading and not very well controlled.
Introduce RestconfRequest, which shows that the onFailure() path is
never taken.

This also provides us with an anchor point for future evolution, as we
must be mindful of asynchronous processing. The requirements are laid
down in a FIXME, which we will address in future improvements.

JIRA: NETCONF-1379
Change-Id: I3e9a25ce6932498654567c12ea431417e27a2c7b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoDo not pass around RestconfServer 69/113669/4
Robert Varga [Tue, 24 Sep 2024 21:31:57 +0000 (23:31 +0200)]
Do not pass around RestconfServer

Now that we have localized request dispatch, we can access
RestconfServer via RestconfRequestDispatcher's field rather than passing
it around to static methods.

JIRA: NETCONF-1379
Change-Id: Ie1fd87d1f873b86d46ce68e8e127b13c4e13d5d8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoLimit the number of candidates for string example 06/113706/2
Sangwook Ha [Wed, 25 Sep 2024 20:32:10 +0000 (13:32 -0700)]
Limit the number of candidates for string example

The number of candidates tried when a string example is generated
with regex & length constraints may increase exponentially as the
string length increases and this may cause out-of-memory error.

For example, if there are 10 transition paths at each step, then
the number of candidates becomes 1 million after just 6 characters.

Limit the maximum number of transitions allowed at each step to prevent
the exponential growth in search paths. This reduces the chance of
generating a conformant example a little, but prevents excessive use
of memory and CPU cycles.

JIRA: NETCONF-1398
Change-Id: I2d926a438da14395f56f93d1a98a56507c1c7ff2
Signed-off-by: Sangwook Ha <sangwook.ha@verizon.com>
5 weeks agoDo not use LinkedList in plaintext-* 74/113674/2
Robert Varga [Wed, 25 Sep 2024 04:19:30 +0000 (06:19 +0200)]
Do not use LinkedList in plaintext-*

Use an ArrayList instead.

Change-Id: I95676a3d3db5870d09d40c54151439d2e1667dd0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoEliminate RequestUtils 68/113668/1
Robert Varga [Tue, 24 Sep 2024 21:12:48 +0000 (23:12 +0200)]
Eliminate RequestUtils

The only production caller is RestconfRequestDispatcher, move these
utility methods there.

Hide them and ensure AbstractRequestProcessorTest uses explicit
calls to ApiPath.parse().

JIRA: NETCONF-1379
Change-Id: I8f5c69f57d23f9bd74e9f49d0519f8e078c2c6da
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoEliminate ModulesRequestProcessor 67/113667/1
Robert Varga [Tue, 24 Sep 2024 21:04:09 +0000 (23:04 +0200)]
Eliminate ModulesRequestProcessor

RestconfRequestDispatcher can host the static methods just as well, and
such organization is actually conducive to structuring dispatch based on
needs, rather than upfront parsing.

Also updates RFC references to point to their canonical web presence.

JIRA: NETCONF-1379
Change-Id: I268ba415f30daf492fe12573a3b09bb9ed8b3a6f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoEliminate OperationsRequestProcessor 66/113666/1
Robert Varga [Tue, 24 Sep 2024 20:56:50 +0000 (22:56 +0200)]
Eliminate OperationsRequestProcessor

RestconfRequestDispatcher can host the static methods just as well, and
such organization is actually conducive to structuring dispatch based on
needs, rather than upfront parsing.

Also updates RFC references to point to their canonical web presence.

JIRA: NETCONF-1379
Change-Id: Ib51a3c83de9400c61304d99d4a3b21f99f502045
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
5 weeks agoEliminate DataRequestProcessor 65/113665/1
Robert Varga [Tue, 24 Sep 2024 20:45:21 +0000 (22:45 +0200)]
Eliminate DataRequestProcessor

RestconfRequestDispatcher can host the static methods just as well, and
such organization is actually conducive to structuring dispatch based on
needs, rather than upfront parsing.

Also updates RFC references to point to their canonical web presence.

JIRA: NETCONF-1379
Change-Id: I0ec4cdd2634cd707e5bbcef2617e4eebc3173923
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
6 weeks agoClarify FIXME for NETCONF-714 09/113609/1
Ivan Hrasko [Mon, 23 Sep 2024 12:56:53 +0000 (14:56 +0200)]
Clarify FIXME for NETCONF-714

Clarify FIXME in NettyServerRequest to be part of NETCONF-714.

JIRA: NETCONF-714.
Change-Id: Idf7192ff65fd9d48a7d8d00f22b15c294a7faa49
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
6 weeks agoFix testtool request failure to netty endpoint 51/113451/5
Ruslan Kashapov [Fri, 6 Sep 2024 08:29:53 +0000 (11:29 +0300)]
Fix testtool request failure to netty endpoint

Testtool uses java's HttpClient which includes
HTTP/2 upgrade headers by default when PATCH requests
being sent. This results 413 Entry too large response
from Netty-based server because HttpServerUpgradeHandler
is not expecting non-empty request body with
protocol upgrade request.

The fix limits protocol version for HttpClient to
HTTP 1.1 to omit upgrade headers.

JIRA: NETCONF-1376
Change-Id: I2c07edce78b521417cf073f5c0d757e58f557c91
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
6 weeks agoFix 401 Response headers for HTTP Transport 70/113570/2
Ruslan Kashapov [Fri, 6 Sep 2024 08:29:53 +0000 (11:29 +0300)]
Fix 401 Response headers for HTTP Transport

Auth handler updated to return WWW-Authenticate
header with 401 Unauthorized response.

JIRA: NETCONF-1394
Change-Id: I018b7c37ec08eae4525355001265f4151bafa298
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
6 weeks agoBump versions to 8.0.3-SNAPSHOT 71/113571/1
Robert Varga [Thu, 19 Sep 2024 12:08:56 +0000 (14:08 +0200)]
Bump versions to 8.0.3-SNAPSHOT

This starts the next development iteration.

Change-Id: I02b4ab07c5385f86af946b821f1ede30d58b4ce9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
6 weeks agoRelease netconf v8.0.2
jenkins-releng [Thu, 19 Sep 2024 10:42:16 +0000 (10:42 +0000)]
Release netconf

6 weeks agoDispatch OPTIONS requests to RestconfServer 61/113561/4
Robert Varga [Wed, 18 Sep 2024 15:18:45 +0000 (17:18 +0200)]
Dispatch OPTIONS requests to RestconfServer

RestconfServer is providing guidance as to what kind of resource a
particular path represents. We take advantage of this, to ensure parity
with JaxRsRestconf.

JIRA: NETCONF-1210
Change-Id: Iab8aa05f2183f5f0f9b5f9d283bea9cdd9579eb6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
6 weeks agoFixup OptionsResult 65/113565/1
Robert Varga [Thu, 19 Sep 2024 08:43:24 +0000 (10:43 +0200)]
Fixup OptionsResult

We need to differentiate between RPCs and actions, an unfortunate
side-effect of difference of their invocation modeling.

Split OPERATION into ACTION and RPC, and report them as appropriate.

JIRA: NETCONF-1210
Change-Id: Ia9948998ffedb4e7ff1025cb4e268ffeb1a68ad9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoAdapt docs for netconf-node state encapsulation 45/113545/2
Samuel Schneider [Mon, 16 Sep 2024 15:38:42 +0000 (17:38 +0200)]
Adapt docs for netconf-node state encapsulation

Adapt user guide to changes caused by netconf-node state
encapsulation.

JIRA: NETCONF-1388
Change-Id: I477f14e814c0d4dfa3833454b8803c2a72fdc18e
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
7 weeks agoFix stream URLs for Netty RESTCONF 12/113512/3
Ruslan Kashapov [Fri, 13 Sep 2024 09:42:01 +0000 (12:42 +0300)]
Fix stream URLs for Netty RESTCONF

Restconf URI passed for URL construction require to be ended
with slash otherwise last path element will be dropped by URI#resolve.

JIRA: NETCONF-1390
Change-Id: I1707b8460741bd99a971359fd152152b60440c8c
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
Signed-off-by: Ivan Hrasko <ivan.hrasko@pantheon.tech>
7 weeks agoTranslate RpcCredentials with a switch expression 32/113532/1
Robert Varga [Mon, 16 Sep 2024 09:14:14 +0000 (11:14 +0200)]
Translate RpcCredentials with a switch expression

We have an if/else cascade here, use a switch expression instead.

Change-Id: I6d98c2fcd07ab06f9a161ed663864b00347686ee
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoEncapsulate netconf-node state 82/113482/8
Robert Varga [Mon, 9 Sep 2024 19:27:44 +0000 (21:27 +0200)]
Encapsulate netconf-node state

Encapsulate netconf device related configuration into its own container.
So mandatory credentials requirement is not enforced for anyone who is
not writing that container.

This allows using other custom topologies without issues.

JIRA: NETCONF-1382
Change-Id: If015222df4b4a885c832f8de35f3c482e9dfbc2a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
7 weeks agoAdd {data,operations}OPTIONS() methods 81/113481/17
Robert Varga [Mon, 9 Sep 2024 15:48:50 +0000 (17:48 +0200)]
Add {data,operations}OPTIONS() methods

JAX-RS endpoint is doing a number of bad things w.r.t OPTIONS:
- it does not produce Accept-Patch header
- it exposes implementation structure via WADL
- it is not accurate for /data/* resources

Enrich RestconfServer API to allow querying the nature of a particular
data item and existence of operations -- which in turn allows us to
report accurate OPTIONS.

JIRA: NETCONF-1210
Change-Id: Iee4171eb9500bb996a63e682c946c20d6e401145
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoSet correct SchemaInferenceStack for list example 07/113507/5
Peter Suna [Thu, 12 Sep 2024 16:32:09 +0000 (18:32 +0200)]
Set correct SchemaInferenceStack for list example

In the method prepareFirstListExample, SchemaInferenceStack points
to the list, which is incorrect as we are processing its child.

This method is called only when the min-elements constraint is set.

JIRA: NETCONF-1389
Change-Id: I4ffb371751a71012ead461837f775a89957fd111
Signed-off-by: Peter Suna <peter.suna@pantheon.tech>
7 weeks agoFix string example generation error 08/113508/2
Sangwook Ha [Fri, 13 Sep 2024 04:03:03 +0000 (21:03 -0700)]
Fix string example generation error

Following a single regex transition path does not guarantee an example
conforming to the regex & length constraints.

Search all transition paths adding a character at a time until the
minimum length requirement & regex pattern are satisfied or the maximum
length limit is reached.

This guarantees the shortest possible example that satisfies the regex
& length constraints.

JIRA: NETCONF-1386
Change-Id: Ib7b7714330b5176541fe928dc5660c20579f8b2d
Signed-off-by: Sangwook Ha <sangwook.ha@verizon.com>
7 weeks agoEliminate Http2SettingsFilter 50/113450/4
Robert Varga [Fri, 6 Sep 2024 09:50:11 +0000 (11:50 +0200)]
Eliminate Http2SettingsFilter

We need Http2SettingsFilter only because Http2Utils.connectionHandler()
configures Http2ToHttpAdapter to send it out.

Do not override the default configuration, leading to HTTPClient's
adapter not sending these -- and hence we can ditch the filter.

JIRA: NETCONF-1379
Change-Id: I0be0ec6b7375b12c183bc2076276c0c6932455ba
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoClean up restconf-nb dependencies 03/113503/3
Robert Varga [Wed, 11 Sep 2024 15:46:23 +0000 (17:46 +0200)]
Clean up restconf-nb dependencies

The dependencies are quite inaccurate now, clean them a up a bit.

Change-Id: I19229a1f8d9027173ea1f42f5fdfa90d336a2acc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoClean up odl-restconf-nb 05/113505/1
Robert Varga [Thu, 12 Sep 2024 08:01:04 +0000 (10:01 +0200)]
Clean up odl-restconf-nb

Clean up packaging, so we do not pull in duplicate bundles.

Change-Id: I379e1ebbdb203c23c0d8ae21554d04b9e3f32203
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoAdd odl-restconf-(server-)api 04/113504/1
Robert Varga [Wed, 11 Sep 2024 16:11:37 +0000 (18:11 +0200)]
Add odl-restconf-(server-)api

Package restconf-api as a separate feature, so that it can be used from
other places.

Change-Id: I5b40e2814ec15b78b74948c1e2120010425dca7d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoMove restconf-server-jaxrs tests 01/113501/4
Robert Varga [Wed, 11 Sep 2024 10:39:37 +0000 (12:39 +0200)]
Move restconf-server-jaxrs tests

Move tests into the artifact they are actually testing.

Change-Id: I2d504bcd40c98bb9f0bead309c7e5c7ef6c8e0bf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoPackage transport-http in odl-netconf-transport 02/113502/1
Robert Varga [Wed, 11 Sep 2024 14:20:38 +0000 (16:20 +0200)]
Package transport-http in odl-netconf-transport

transport-http does not have a home. Make sure to include it in
odl-netconf-transport.

JIRA: NETCONF-1379
Change-Id: Ia6d12e1866a1eb22609586aee578015bb11688d2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoIntegrate transformation to NettyServerRequest 95/113495/3
Robert Varga [Tue, 10 Sep 2024 14:06:52 +0000 (16:06 +0200)]
Integrate transformation to NettyServerRequest

Make NettyServerRequest abstract, with a transform() method. This makes
it clear what specializations we have and also reduces the amount of
objects we allocate.

JIRA: NETCONF-1379
Change-Id: Ifddc410b929f6b8e64adbf2e94c40bc08856fea5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoSlice XRD/JRD resource 00/113500/1
Robert Varga [Wed, 11 Sep 2024 08:17:51 +0000 (10:17 +0200)]
Slice XRD/JRD resource

We need to use ByteBuf.slice() so the reader index on shared buffer does
not get updated.

JIRA: NETCONF-1379
Change-Id: Ibd69b480748094fbbe227ef767f47f14b91943cb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoUse a switch expression with DataPostResult 96/113496/2
Robert Varga [Tue, 10 Sep 2024 14:14:58 +0000 (16:14 +0200)]
Use a switch expression with DataPostResult

We have a sealed hierarchy, hence using a switch expression is
exhaustive and we can eliminate an impossible case. The same thing
applies to both RESTCONF endpoints.

Change-Id: Ia06223bbccb7fda2a33c67cc129c04cd1cc4a335
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoUse OPTIONS * for upgrade 75/113475/2
Robert Varga [Mon, 9 Sep 2024 15:09:50 +0000 (17:09 +0200)]
Use OPTIONS * for upgrade

GET / is a resource operation, which may result a ton of data, be
subject to access control, or actually be unimplemented.

Use OPTIONS *, which is well-documented to be a 'no-op' kind of HTTP
request.

Change-Id: I9e112ffa1817d09b77109171a3a221ed34c9bf6b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoAdvertize "defaults" RESTCONF capability 74/113474/3
Robert Varga [Mon, 9 Sep 2024 14:21:13 +0000 (16:21 +0200)]
Advertize "defaults" RESTCONF capability

Advertizement of "defaults" RESTCONF capability is mandatory, yet we do
not do that.

Advertize it with basic-mode=explicit, which most closely matches the
semantics of the MD-SAL datastore.

JIRA: NETCONF-1380
Change-Id: I48577e606383fc7413a3cd2e95a5c8cbb52fb49f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoDo not use karaf-services-maven-plugin 94/113494/1
Robert Varga [Tue, 10 Sep 2024 11:31:26 +0000 (13:31 +0200)]
Do not use karaf-services-maven-plugin

We are not really using services -- just publishing Karaf commands.

Add the MANIFEST header and ditch use of karaf-services-maven-plugin --
fixing a build-time warnings and eliminating the unnecessary code it
packages in the bundle.

Change-Id: Ia9dc9cf8f837ac77f0f9998a2943dc1bd73f5712
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoFix truststore-api dependencies 93/113493/1
Robert Varga [Tue, 10 Sep 2024 11:24:05 +0000 (13:24 +0200)]
Fix truststore-api dependencies

We are using nullness annotations, declare them to fix a warning.

Change-Id: I6ed2b81420fecb2023038b773cfaf3db2683ece8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 weeks agoFix dependency issues in keystore/* 92/113492/1
Robert Varga [Tue, 10 Sep 2024 11:23:11 +0000 (13:23 +0200)]
Fix dependency issues in keystore/*

We have two dependency issues reported here, fix them up.

Change-Id: I9bdcc0ae7c7ca4289276e2d445ea6b34e20877bc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
8 weeks agoFix create-notification-stream implementation 87/113487/2
Robert Varga [Mon, 9 Sep 2024 23:13:17 +0000 (01:13 +0200)]
Fix create-notification-stream implementation

We have a mismatch in the output leaf name, as sal-remote.yang has a
day-0 modeling bug: what was supposed to be 'stream-name' is named
'notification-stream-identifier' instead.

Fix the implementation to use the correct container.

JIRA: NETCONF-1295
Change-Id: I9ea3d4b3bb6c70b4c087e597f67456a9a095f789
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
8 weeks agoEliminate ResponseUtils.allowHeaderValue() 60/113460/4
Robert Varga [Sat, 7 Sep 2024 20:46:20 +0000 (22:46 +0200)]
Eliminate ResponseUtils.allowHeaderValue()

This creates a static string, from a set of methods. Rather than
performing magic, let's use hand-crafted equivalents.

Also do not share these strings with tests, but rather have tests assert
them separately.

JIRA: NETCONF-1379
Change-Id: Id241430ac633f3bb8c1166dea3e65c34c9266975
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>