From the MQTT-SN spec:
6.5 Topic Name Registration Procedure
...
At any point in time a client may have only one
REGISTER message outstanding, i.e. it has to wait
for a REGACK message before it can register another
topic name.
...
6.9 Client’s Topic Subscribe/Un-subscribe Procedure
...
As for the REGISTER procedure, a client may have only
one SUBSCRIBE or one UNSUBCRIBE transaction open at a time.
...
Until now, the library did not comply with these requirements.
An additional "waiting" state for topics was introduced:
REGISTER, SUBSCRIBE and UNSUBSCRIBE as an extra step before
switching to REGISTERING, SUBSCRIBING and UNSUBSCRIBING. The
library now makes sure that only one topic can be REGISTERING
and only one topic can be in either SUBSCRIBING or UNSUBSCRIBING.
Additionally, requesting to UNSUBSCRIBE is now denied if the topic
is not yet SUBSCRIBED, to avoid weird race conditions.
Also, added two tests that verify this behavior.
This fixes#84644
Signed-off-by: Rene Beckmann <rene.bckmnn@gmail.com>
The current DNS caching logic is not aware of the IP address version.
If there is a cached address for a query, the caller of
dns_get_addr_info() will receive that address, even if it is not the
same version as the caller requested. For example:
- dns_get_addr_info() is called to resolve an IPv4 address
- the DNS client caches the IPv4 address that was received
- dns_get_addr_info() is called to resolve an IPv6 address
- the DNS client sees that there is a cached IPv4 address for the
given query
- the DNS client does not check that the cached address is of the
requested version (IPv6)
- the cached IPv4 address is returned from dns_get_addr_info()
This changes the DNS client to check IP address version when searching
cached addresses.
Signed-off-by: Noah Olson <noah@wavelynx.com>
After recent kernel changes there's some thread scheduling race when
running tests, therefore add k_yield() at the end of each test to make
sure the server thread has a chance to run and do the cleanup.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
A _res_fallback parameter to HTTP_SERVICE_DEFINE is added to optionally
specify a fallback resource detail, which will be served if no other
resource matches the URL.
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
As the test coverage keeps growing, the test suite no longer fits into
smaller devices, hence add min_flash requirement for the test suite to
filter them out.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Fixes#84198.
If a '?' character is used as part of a wildcard resource, do not treat
this as the end of the string when comparing with a path from the HTTP
request. Only the path from the HTTP request may be terminated by '?'
(in the case of a request with query parameters).
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
Add test case for matching pending replies with received responses.
Cover corner cases that are failing with the current implementation.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Three tests has been added for Content-Range functionality in http
parser:
- test_content_range_supplied: Checks if parser handles range correctly.
- test_content_range_asterisk_total: Checks if parser interprets
astersk as no total size supplied.
- test_double_content_range_error: Checks if parser rejects header with
repeated Content-Range field.
Signed-off-by: Piotr Radecki <piotr.radecki@jrdltd.co.uk>
Add tests cases verifying that the server replies with HTTP 500 Internal
Server Error reply in case of processing error.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Add tests cases verifying that the server replies with HTTP 405 Method
Not Allowed reply in case the client tries to access the resource with a
method it does not allow.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Ensure that HTTP resources can only be served to a client connected on
the specific service(s) that the resource was registered against using
the HTTP_RESOURCE_DEFINE macro.
This allows different resources to be registered to different services,
for example to make some resources only available via an HTTPS service
and not via unencrypted HTTP.
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
For waking up the poll() use eventfd() instead of socketpair()
so we save some buffer space and one file descriptor.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
When using tickless mode, the socketpair()
seem to use heap by default on native_sim, so
add some space for it.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
Add additional test cases which verify that the HTTP server code can
handle PUT/PATCH/DELETE request types.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Make sure that the socket service is properly unregistered when
dispatcher is unregistered.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Testcase uses certificates from the sample application at
samples/net/sockets/http_server. These were modified and moved into a
different folder by a previous commit, causing a build failure in the
test.
Testcase updated to:
- use new path to certificates
- update available cipher suites, since certificates now use ECDSA
- update expected hostname in certificate
The CA certificate in the sample app is also converted to .der format
for inclusion in the test (the content is exactly the same as the PEM
version, just converted to DER).
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
Convert them to native YAML lists. Support for space-separated
lists was deprecated in Twister a long time ago.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Concurrent HTTP POST requests on different HTTP2 concurrent streams
require that the client's header_capture_context is re-used to capture
headers on a second stream before all of the body data has been received
(and sent to the application) on the first stream.
As a result, any captured headers must be sent to the application
callback before any headers can be received on a different stream. In
practice this means that for HTTP2 the application callback is called
for the first time on receiving a headers frame, before any data frames
are received. All subsequent application callbacks will not include the
request header data.
While this mechanism is not necessary for HTTP1, it is also updated to
only send headers in the first application callback for consistency.
Fixes#82273
Signed-off-by: Matt Rodgers <mrodgers@witekio.com>
Add collector parameter to metric creation macros so that it
is possible to bind the metric to collector already at built
time.
Also add optional user_data to metric macro calls so that user
can add optional data there. This will be used by network statistics
Prometheus support in subsequent commits.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Embed "struct prometheus_metric" to individual metric like
counter, gauge, histogram and summary. This way we avoid having
a separate base pointer in specific metrict struct. We also do
not need to search the specific metric from base metric as
we can simply use CONTAINER_OF() macro to get the base metric.
This embedding means that the counter, gauge, histogram and summary
metric define macros are changed as user does not need to create a
separate "struct prometheus_metric".
Convert the tests and sample to use the new macros.
Remove also the static from metric creation macros so that user
can decide whether it needs collector to be static or not.
Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
Refactor tests to be a bit shorter, so its easier to read
and copy-paste for a new testcase
All idioms like "ret = somecall(); zasser.." are replaced with just
"zassert_ok(some_call());"
Commonly used structures are global and initialized once.
To avoid cross-test side-effects, suite_after-function is added
to cleanup all requests.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
Use real-time scheduler with 100x speedup, so timeouts are
accurate enough, but still fast for tests to run.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
Fixes: #78010
This commit adds tests for the "Gateway Advertisement and Discovery"
process. This includes tests for handling SEARCHGW, GWINFO, and ADVERTISE
as well as manually adding a Gateway for use. Gateway pruning when
missing ADVERTISE messages is also tested.
Signed-off-by: Kenneth Witham <kennywitham4@gmail.com>
Add a new API to cancel just one, or mathing requests,
instead of cancelling all ongoing requests.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
CoAP client should be able to push data through functioning socket
while another sockets is failing or reporting poll() errors.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
Add testcase where sending Ack to incomming Confirmable message fails.
This should be reported to application as now the server is unaware
that transmission have succeeded, so we cannot thread it as success.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
* Use sys_rand_get() and seed the CoAP library, so our MIDs are
random.
* Set socket events per socket, so we don't accidentally receive
on wrong socket
* Reply with correct tokens
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
If a string is already present in the provided buffer,
prometheus_format_exposition() appends it instead of overwriting,
hence the buffer needs to be cleared on the test start, otherwise it
works by chance.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
If we receive poll() error during a request, it must
be forwarded to application.
If instead receive poll() error later, it should not be
forwarded as it might be result of application closing the
socket.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
Refactor the CoAP retry handling into the handle_poll() function,
so that we only try to send retries if the socket reports POLLOUT.
Also move the receiving into same loop, so when poll() reports POLLIN
we recv() the message and handle it before proceeding to other sockets.
Also fix tests to handle POLLOUT flag and add support for testing
multiple clients.
Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
Adjust the testcase.yaml files to only allow running on native_sim.
These tests use mocking and are not meant to run on embedded platforms.
Signed-off-by: Maximilian Deubel <maximilian.deubel@nordicsemi.no>
This patch adds tests for the wifi_credentials library.
Both the main functions and the backend implementations are tested.
Signed-off-by: Maximilian Deubel <maximilian.deubel@nordicsemi.no>
Tests for prometheus library support.
It contains integration and unit test
each metric types.
Signed-off-by: Mustafa Abdullah Kus <mustafa.kus@sparsetechnology.com>