Skip to content

Commit 2f62b34

Browse files
committed
cm: updatemanager: implement sending full unit status on cloud connect
Signed-off-by: Oleksandr Grytsov <[email protected]>
1 parent 219849f commit 2f62b34

File tree

12 files changed

+1022
-6
lines changed

12 files changed

+1022
-6
lines changed

src/core/cm/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@ set(INSTALL_HEADERS
2727
aos_core_cm_smcontroller
2828
aos_core_cm_storagestate
2929
aos_core_cm_unitconfig
30-
aos_core_cm_updatemanager
3130
)
3231

33-
set(INSTALL_LIBRARIES aos_core_cm_alerts aos_core_cm_imagemanager aos_core_cm_monitoring aos_core_cm_storagestate)
32+
set(INSTALL_LIBRARIES aos_core_cm_alerts aos_core_cm_imagemanager aos_core_cm_monitoring aos_core_cm_storagestate
33+
aos_core_cm_updatemanager
34+
)
3435

3536
if(WITH_TEST)
3637
list(APPEND INSTALL_HEADERS aos_core_cm_tests_mocks)

src/core/cm/updatemanager/CMakeLists.txt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,31 @@ set(TARGET_NAME updatemanager)
1414
# Headers
1515
# ######################################################################################################################
1616

17-
set(HEADERS itf/sender.hpp itf/updatemanager.hpp)
17+
set(HEADERS itf/sender.hpp itf/updatemanager.hpp updatemanager.hpp unitstatushandler.hpp)
18+
19+
# ######################################################################################################################
20+
# Sources
21+
# ######################################################################################################################
22+
23+
set(SOURCES unitstatushandler.cpp updatemanager.cpp)
1824

1925
# ######################################################################################################################
2026
# Target
2127
# ######################################################################################################################
2228

23-
add_module(TARGET_NAME ${TARGET_NAME} HEADERS ${HEADERS})
29+
add_module(
30+
TARGET_NAME
31+
${TARGET_NAME}
32+
LOG_MODULE
33+
STACK_USAGE
34+
${AOS_STACK_USAGE}
35+
SOURCES
36+
${SOURCES}
37+
HEADERS
38+
${HEADERS}
39+
LIBRARIES
40+
${LIBRARIES}
41+
)
2442

2543
# ######################################################################################################################
2644
# Tests

src/core/cm/updatemanager/tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ set(SOURCES updatemanager.cpp)
1616
# Libraries
1717
# ######################################################################################################################
1818

19-
set(LIBRARIES GTest::gmock_main)
19+
set(LIBRARIES aos::core::cm::updatemanager aos::core::common::tests::utils GTest::gmock_main)
2020

2121
# ######################################################################################################################
2222
# Target
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright (C) 2025 EPAM Systems, Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_IMAGEMANAGERMOCK_HPP_
8+
#define AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_IMAGEMANAGERMOCK_HPP_
9+
10+
#include <gmock/gmock.h>
11+
12+
#include <core/cm/imagemanager/itf/imagemanager.hpp>
13+
14+
namespace aos::cm::imagemanager {
15+
16+
/**
17+
* Image manager mock.
18+
*/
19+
class ImageManagerMock : public ImageManagerItf {
20+
public:
21+
MOCK_METHOD(Error, InstallUpdateItems,
22+
(const Array<UpdateItemInfo>& itemsInfo, const Array<crypto::CertificateInfo>& certificates,
23+
const Array<crypto::CertificateChainInfo>& certificateChains, Array<UpdateItemStatus>& statuses),
24+
(override));
25+
MOCK_METHOD(Error, UninstallUpdateItems,
26+
(const Array<StaticString<cIDLen>>& ids, Array<UpdateItemStatus>& statuses), (override));
27+
MOCK_METHOD(Error, RevertUpdateItems, (const Array<StaticString<cIDLen>>& ids, Array<UpdateItemStatus>& statuses),
28+
(override));
29+
MOCK_METHOD(Error, GetUpdateItemsStatuses, (Array<UpdateItemStatus> & statuses), (override));
30+
MOCK_METHOD(Error, SubscribeListener, (ImageStatusListenerItf & listener), (override));
31+
MOCK_METHOD(Error, UnsubscribeListener, (ImageStatusListenerItf & listener), (override));
32+
};
33+
34+
} // namespace aos::cm::imagemanager
35+
36+
#endif
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (C) 2025 EPAM Systems, Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_INSTANCESTATUSPROVIDERMOCK_HPP_
8+
#define AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_INSTANCESTATUSPROVIDERMOCK_HPP_
9+
10+
#include <gmock/gmock.h>
11+
12+
#include <core/cm/launcher/itf/instancestatusprovider.hpp>
13+
14+
namespace aos::cm::launcher {
15+
16+
/**
17+
* Instance status provider mock.
18+
*/
19+
class InstanceStatusProviderMock : public InstanceStatusProviderItf {
20+
public:
21+
MOCK_METHOD(Error, GetInstancesStatuses, (Array<InstanceStatus> & statuses), (override));
22+
MOCK_METHOD(Error, SubscribeListener, (InstanceStatusListenerItf & listener), (override));
23+
MOCK_METHOD(Error, UnsubscribeListener, (InstanceStatusListenerItf & listener), (override));
24+
};
25+
26+
} // namespace aos::cm::launcher
27+
28+
#endif
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
* Copyright (C) 2025 EPAM Systems, Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_UNITCONFIGMOCK_HPP_
8+
#define AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_UNITCONFIGMOCK_HPP_
9+
10+
#include <gmock/gmock.h>
11+
12+
#include <core/cm/unitconfig/itf/unitconfig.hpp>
13+
14+
namespace aos::cm::unitconfig {
15+
16+
/**
17+
* Unit config mock.
18+
*/
19+
class UnitConfigMock : public UnitConfigItf {
20+
public:
21+
MOCK_METHOD(Error, CheckUnitConfig, (const UnitConfig&), (override));
22+
MOCK_METHOD(Error, UpdateUnitConfig, (const UnitConfig&), (override));
23+
MOCK_METHOD(Error, GetUnitConfigStatus, (UnitConfigStatus&), (override));
24+
};
25+
26+
} // namespace aos::cm::unitconfig
27+
28+
#endif
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright (C) 2025 EPAM Systems, Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#ifndef AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_SENDER_HPP_
8+
#define AOS_CORE_CM_UPDATEMANAGER_TESTS_MOCKS_SENDER_HPP_
9+
10+
#include <condition_variable>
11+
#include <mutex>
12+
13+
#include <core/cm/updatemanager/itf/sender.hpp>
14+
15+
namespace aos::cm::updatemanager {
16+
17+
/**
18+
* Sender stub.
19+
*/
20+
class SenderStub : public SenderItf {
21+
public:
22+
/**
23+
* Sends unit status.
24+
*
25+
* @param unitStatus unit status.
26+
* @return Error.
27+
*/
28+
Error SendUnitStatus(const UnitStatus& unitStatus) override
29+
{
30+
std::lock_guard lock {mMutex};
31+
32+
mUnitStatus = unitStatus;
33+
mSendCalled = true;
34+
mCondVar.notify_one();
35+
36+
return ErrorEnum::eNone;
37+
}
38+
39+
const UnitStatus& WaitSendUnitStatus()
40+
{
41+
std::unique_lock lock {mMutex};
42+
43+
if (!mCondVar.wait_for(lock, cWaitTimeout, [this] { return mSendCalled; })) {
44+
throw std::runtime_error("waiting for unit status timed out");
45+
}
46+
47+
mSendCalled = false;
48+
49+
return mUnitStatus;
50+
}
51+
52+
private:
53+
static constexpr std::chrono::milliseconds cWaitTimeout {5000};
54+
55+
UnitStatus mUnitStatus;
56+
bool mSendCalled {};
57+
std::mutex mMutex;
58+
std::condition_variable mCondVar;
59+
};
60+
61+
} // namespace aos::cm::updatemanager
62+
63+
#endif

0 commit comments

Comments
 (0)