mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-30 04:33:00 +02:00
134 lines
5.0 KiB
Diff
134 lines
5.0 KiB
Diff
From 30d704588fa7eb9d32f66296ec5f6784f082869e Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <tomas.pecka@cesnet.cz>
|
|
Date: Mon, 2 Dec 2024 20:11:32 +0100
|
|
Subject: [PATCH 16/44] tests: make NotificationWatcher reusable
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
Organization: Wires
|
|
|
|
We will need some parts of this in yang push tests
|
|
|
|
Change-Id: I72e60d993f75bbc848af096ac325a75fa3dea61a
|
|
Signed-off-by: Mattias Walström <lazzer@gmail.com>
|
|
---
|
|
tests/event_watchers.cpp | 28 +++++++++++++++++++++++++
|
|
tests/event_watchers.h | 13 ++++++++++++
|
|
tests/restconf-notifications.cpp | 35 --------------------------------
|
|
3 files changed, 41 insertions(+), 35 deletions(-)
|
|
|
|
diff --git a/tests/event_watchers.cpp b/tests/event_watchers.cpp
|
|
index c696bc5..bde96ec 100644
|
|
--- a/tests/event_watchers.cpp
|
|
+++ b/tests/event_watchers.cpp
|
|
@@ -1,3 +1,4 @@
|
|
+#include <spdlog/spdlog.h>
|
|
#include "UniqueResource.h"
|
|
#include "event_watchers.h"
|
|
|
|
@@ -50,3 +51,30 @@ sysrepo::Subscription datastoreNewStateSubscription(sysrepo::Session& session, D
|
|
0,
|
|
sysrepo::SubscribeOptions::DoneOnly);
|
|
}
|
|
+
|
|
+RestconfNotificationWatcher::RestconfNotificationWatcher(const libyang::Context& ctx)
|
|
+ : ctx(ctx)
|
|
+ , dataFormat(libyang::DataFormat::JSON)
|
|
+{
|
|
+}
|
|
+
|
|
+void RestconfNotificationWatcher::setDataFormat(const libyang::DataFormat dataFormat)
|
|
+{
|
|
+ this->dataFormat = dataFormat;
|
|
+}
|
|
+
|
|
+void RestconfNotificationWatcher::operator()(const std::string& msg) const
|
|
+{
|
|
+ spdlog::trace("Client received data: {}", msg);
|
|
+ auto notifDataNode = ctx.parseOp(msg,
|
|
+ dataFormat,
|
|
+ dataFormat == libyang::DataFormat::JSON ? libyang::OperationType::NotificationRestconf : libyang::OperationType::NotificationNetconf);
|
|
+
|
|
+ // parsing nested notifications does not return the data tree root node but the notification data node
|
|
+ auto dataRoot = notifDataNode.op;
|
|
+ while (dataRoot->parent()) {
|
|
+ dataRoot = *dataRoot->parent();
|
|
+ }
|
|
+
|
|
+ data(*dataRoot->printStr(libyang::DataFormat::JSON, libyang::PrintFlags::Shrink));
|
|
+}
|
|
diff --git a/tests/event_watchers.h b/tests/event_watchers.h
|
|
index 5b2429c..b6f2dd2 100644
|
|
--- a/tests/event_watchers.h
|
|
+++ b/tests/event_watchers.h
|
|
@@ -32,3 +32,16 @@ static DatastoreChangesMock testMockForUntrackedModuleWrites;
|
|
#define SUBSCRIBE_MODULE(SUBNAME, SESSION, MODULE) \
|
|
ALLOW_CALL(testMockForUntrackedModuleWrites, change(trompeloeil::_)); \
|
|
auto SUBNAME = datastoreChangesSubscription(SESSION, testMockForUntrackedModuleWrites, MODULE);
|
|
+
|
|
+struct RestconfNotificationWatcher {
|
|
+ libyang::Context ctx;
|
|
+ libyang::DataFormat dataFormat;
|
|
+
|
|
+ RestconfNotificationWatcher(const libyang::Context& ctx);
|
|
+ void setDataFormat(const libyang::DataFormat dataFormat);
|
|
+ void operator()(const std::string& msg) const;
|
|
+
|
|
+ MAKE_CONST_MOCK1(data, void(const std::string&));
|
|
+};
|
|
+
|
|
+#define EXPECT_NOTIFICATION(DATA, SEQ) expectations.emplace_back(NAMED_REQUIRE_CALL(netconfWatcher, data(DATA)).IN_SEQUENCE(SEQ));
|
|
diff --git a/tests/restconf-notifications.cpp b/tests/restconf-notifications.cpp
|
|
index d873512..6c8c51a 100644
|
|
--- a/tests/restconf-notifications.cpp
|
|
+++ b/tests/restconf-notifications.cpp
|
|
@@ -16,45 +16,10 @@ static const auto SERVER_PORT = "10088";
|
|
#include "tests/aux-utils.h"
|
|
#include "tests/pretty_printers.h"
|
|
|
|
-#define EXPECT_NOTIFICATION(DATA, SEQ) expectations.emplace_back(NAMED_REQUIRE_CALL(netconfWatcher, data(DATA)).IN_SEQUENCE(SEQ));
|
|
#define SEND_NOTIFICATION(DATA) notifSession.sendNotification(*ctx.parseOp(DATA, libyang::DataFormat::JSON, libyang::OperationType::NotificationYang).op, sysrepo::Wait::No);
|
|
|
|
using namespace std::chrono_literals;
|
|
|
|
-struct RestconfNotificationWatcher {
|
|
- libyang::Context ctx;
|
|
- libyang::DataFormat dataFormat;
|
|
-
|
|
- RestconfNotificationWatcher(const libyang::Context& ctx)
|
|
- : ctx(ctx)
|
|
- , dataFormat(libyang::DataFormat::JSON)
|
|
- {
|
|
- }
|
|
-
|
|
- void setDataFormat(const libyang::DataFormat dataFormat)
|
|
- {
|
|
- this->dataFormat = dataFormat;
|
|
- }
|
|
-
|
|
- void operator()(const std::string& msg) const
|
|
- {
|
|
- spdlog::trace("Client received data: {}", msg);
|
|
- auto notifDataNode = ctx.parseOp(msg,
|
|
- dataFormat,
|
|
- dataFormat == libyang::DataFormat::JSON ? libyang::OperationType::NotificationRestconf : libyang::OperationType::NotificationNetconf);
|
|
-
|
|
- // parsing nested notifications does not return the data tree root node but the notification data node
|
|
- auto dataRoot = notifDataNode.op;
|
|
- while (dataRoot->parent()) {
|
|
- dataRoot = *dataRoot->parent();
|
|
- }
|
|
-
|
|
- data(*dataRoot->printStr(libyang::DataFormat::JSON, libyang::PrintFlags::Shrink));
|
|
- }
|
|
-
|
|
- MAKE_CONST_MOCK1(data, void(const std::string&));
|
|
-};
|
|
-
|
|
struct SSEClient {
|
|
std::shared_ptr<ng_client::session> client;
|
|
boost::asio::deadline_timer t;
|
|
--
|
|
2.43.0
|
|
|