Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions src/cm/communication/cloudprotocol/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,24 @@ Error ToJSON(const InstanceIdent& instanceIdent, Poco::JSON::Object& json)
{
AosIdentity identity;

identity.mID = instanceIdent.mItemID.CStr();
if (instanceIdent.mPreinstalled) {
identity.mCodename = instanceIdent.mItemID.CStr();
} else {
identity.mID = instanceIdent.mItemID.CStr();
}

json.set("item", CreateAosIdentity(identity));
}

{
AosIdentity identity;

identity.mID = instanceIdent.mSubjectID.CStr();
if (instanceIdent.mPreinstalled) {
identity.mCodename = instanceIdent.mSubjectID.CStr();
} else {
identity.mID = instanceIdent.mSubjectID.CStr();
}

json.set("subject", CreateAosIdentity(identity));
}

Expand Down
16 changes: 16 additions & 0 deletions src/cm/communication/cloudprotocol/tests/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,22 @@ TEST_F(CloudProtocolCommon, InstanceIdent)
EXPECT_EQ(common::utils::Stringify(json), cJSON);
}

TEST_F(CloudProtocolCommon, PreinstalledInstanceIdent)
{
constexpr auto cJSON = R"({"item":{"codename":"item-id"},"subject":{"codename":"subject-id"},"instance":42})";

InstanceIdent instanceIdent;
instanceIdent.mItemID = "item-id";
instanceIdent.mSubjectID = "subject-id";
instanceIdent.mInstance = 42;
instanceIdent.mPreinstalled = true;

auto json = Poco::makeShared<Poco::JSON::Object>(Poco::JSON_PRESERVE_KEY_ORDER);
ASSERT_EQ(ToJSON(instanceIdent, *json), ErrorEnum::eNone);

EXPECT_EQ(common::utils::Stringify(json), cJSON);
}

TEST_F(CloudProtocolCommon, InstanceFilter)
{
constexpr auto cJSON = R"({"item":{"id":"item-id"},"subject":{"id":"subject-id"},"instance":42})";
Expand Down
16 changes: 8 additions & 8 deletions src/cm/communication/cloudprotocol/tests/unitstatus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -311,16 +311,16 @@ TEST_F(CloudProtocolUnitStatus, PreinstalledInstances)
unitStatus->mInstances->Back().mInstances.Back().mError = ErrorEnum::eFailed;

unitStatus->mInstances->EmplaceBack();
unitStatus->mInstances->Back().mItemID = "itemID2";
unitStatus->mInstances->Back().mSubjectID = "subjectID2";
unitStatus->mInstances->Back().mVersion = "version2";
unitStatus->mInstances->Back().mItemID = "itemID2";
unitStatus->mInstances->Back().mSubjectID = "subjectID2";
unitStatus->mInstances->Back().mVersion = "version2";
unitStatus->mInstances->Back().mPreinstalled = true;

unitStatus->mInstances->Back().mInstances.EmplaceBack();
unitStatus->mInstances->Back().mInstances.Back().mPreinstalled = true;
unitStatus->mInstances->Back().mInstances.Back().mInstance = 1;
unitStatus->mInstances->Back().mInstances.Back().mNodeID = "nodeID2";
unitStatus->mInstances->Back().mInstances.Back().mRuntimeID = "runtimeID2";
unitStatus->mInstances->Back().mInstances.Back().mState = InstanceStateEnum::eActivating;
unitStatus->mInstances->Back().mInstances.Back().mInstance = 1;
unitStatus->mInstances->Back().mInstances.Back().mNodeID = "nodeID2";
unitStatus->mInstances->Back().mInstances.Back().mRuntimeID = "runtimeID2";
unitStatus->mInstances->Back().mInstances.Back().mState = InstanceStateEnum::eActivating;

auto json = Poco::makeShared<Poco::JSON::Object>(Poco::JSON_PRESERVE_KEY_ORDER);

Expand Down
8 changes: 2 additions & 6 deletions src/cm/communication/cloudprotocol/unitstatus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,14 +240,10 @@ Poco::JSON::Object::Ptr InstanceToJSON(const UnitInstancesStatuses& statuses)
{
auto json = Poco::makeShared<Poco::JSON::Object>(Poco::JSON_PRESERVE_KEY_ORDER);

const auto isPreinstalled = statuses.mInstances.FindIf([](const UnitInstanceStatus& status) {
return status.mPreinstalled;
}) != statuses.mInstances.end();

{
AosIdentity identity;

if (isPreinstalled) {
if (statuses.mPreinstalled) {
identity.mCodename = statuses.mItemID.CStr();
} else {
identity.mID = statuses.mItemID.CStr();
Expand All @@ -259,7 +255,7 @@ Poco::JSON::Object::Ptr InstanceToJSON(const UnitInstancesStatuses& statuses)
{
AosIdentity identity;

if (isPreinstalled) {
if (statuses.mPreinstalled) {
identity.mCodename = statuses.mSubjectID.CStr();
} else {
identity.mID = statuses.mSubjectID.CStr();
Expand Down
112 changes: 64 additions & 48 deletions src/cm/database/database.cpp

Large diffs are not rendered by default.

9 changes: 6 additions & 3 deletions src/cm/database/database.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -282,12 +282,13 @@ class Database : public storagestate::StorageItf,
eSubjectID,
eInstance,
eType,
ePreinstalled,
eStorageQuota,
eStateQuota,
eStateChecksum
};
using StorageStateInstanceInfoRow
= Poco::Tuple<std::string, std::string, uint64_t, std::string, size_t, size_t, Poco::Data::BLOB>;
= Poco::Tuple<std::string, std::string, uint64_t, std::string, bool, size_t, size_t, Poco::Data::BLOB>;

enum class NetworkManagerNetworkColumns : int { eNetworkID = 0, eSubnet, eVlanID };
using NetworkManagerNetworkRow = Poco::Tuple<std::string, std::string, uint64_t>;
Expand All @@ -300,20 +301,22 @@ class Database : public storagestate::StorageItf,
eSubjectID,
eInstance,
eType,
ePreinstalled,
eNetworkID,
eNodeID,
eIP,
eExposedPorts,
eDNSServers
};
using NetworkManagerInstanceRow = Poco::Tuple<std::string, std::string, uint64_t, std::string, std::string,
using NetworkManagerInstanceRow = Poco::Tuple<std::string, std::string, uint64_t, std::string, bool, std::string,
std::string, std::string, std::string, std::string>;

enum class LauncherInstanceInfoColumns : int {
eItemID = 0,
eSubjectID,
eInstance,
eType,
ePreinstalled,
eManifestDigest,
eNodeID,
ePrevNodeID,
Expand All @@ -328,7 +331,7 @@ class Database : public storagestate::StorageItf,
eSubjectType
};
using LauncherInstanceInfoRow
= Poco::Tuple<std::string, std::string, uint64_t, std::string, std::string, std::string, std::string,
= Poco::Tuple<std::string, std::string, uint64_t, std::string, bool, std::string, std::string, std::string,
std::string, uint32_t, uint32_t, uint64_t, std::string, bool, std::string, std::string, std::string>;

enum class ImageManagerItemInfoColumns : int { eItemID = 0, eVersion, eIndexDigest, eState, eTimestamp };
Expand Down
2 changes: 1 addition & 1 deletion src/cm/database/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ set(SOURCES database.cpp)
# Libraries
# ######################################################################################################################

set(LIBRARIES aos::cm::database GTest::gmock_main)
set(LIBRARIES aos::cm::database aos::core::common::tests::utils GTest::gmock_main)

# ######################################################################################################################
# Target
Expand Down
16 changes: 11 additions & 5 deletions src/cm/database/tests/database.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@

#include <gmock/gmock.h>

#include <core/common/tests/utils/log.hpp>
#include <core/common/tests/utils/utils.hpp>

#include <cm/database/database.hpp>
#include <common/utils/exception.hpp>

Expand All @@ -26,14 +29,15 @@ std::vector<T> ToVector(const Array<T>& src)
}

InstanceIdent CreateInstanceIdent(const char* itemID, const char* subjectID, uint64_t instance,
UpdateItemType itemType = UpdateItemTypeEnum::eService)
UpdateItemType itemType = UpdateItemTypeEnum::eService, bool preinstalled = true)
{
InstanceIdent ident;

ident.mItemID = itemID;
ident.mSubjectID = subjectID;
ident.mInstance = instance;
ident.mType = itemType;
ident.mItemID = itemID;
ident.mSubjectID = subjectID;
ident.mInstance = instance;
ident.mType = itemType;
ident.mPreinstalled = preinstalled;

return ident;
}
Expand Down Expand Up @@ -165,6 +169,8 @@ class TestDatabase : public Database {

class CMDatabaseTest : public Test {
protected:
static void SetUpTestSuite() { tests::utils::InitLog(); }

void SetUp() override
{
// Clean up on start.
Expand Down
10 changes: 6 additions & 4 deletions src/common/pbconvert/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ ::common::v2::InstanceIdent ConvertToProto(const InstanceIdent& src)
result.set_subject_id(src.mSubjectID.CStr());
result.set_instance(src.mInstance);
result.set_type(static_cast<::common::v2::ItemType>(src.mType.GetValue()));
result.set_preinstalled(src.mPreinstalled);

return result;
}
Expand All @@ -73,10 +74,11 @@ InstanceIdent ConvertToAos(const ::common::v2::InstanceIdent& val)
{
InstanceIdent result;

result.mItemID = val.item_id().c_str();
result.mSubjectID = val.subject_id().c_str();
result.mInstance = val.instance();
result.mType = static_cast<UpdateItemTypeEnum>(val.type());
result.mItemID = val.item_id().c_str();
result.mSubjectID = val.subject_id().c_str();
result.mInstance = val.instance();
result.mType = static_cast<UpdateItemTypeEnum>(val.type());
result.mPreinstalled = val.preinstalled();

return result;
}
Expand Down
3 changes: 0 additions & 3 deletions src/common/pbconvert/sm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1047,8 +1047,6 @@ Error ConvertFromProto(const servicemanager::v5::InstanceStatus& src, const Stri
return AOS_ERROR_WRAP(err);
}

dst.mPreinstalled = src.preinstalled();

dst.mError = pbconvert::ConvertFromProto(src.error());

return ErrorEnum::eNone;
Expand Down Expand Up @@ -1152,7 +1150,6 @@ void ConvertToProto(const InstanceStatus& src, servicemanager::v5::InstanceStatu
{
dst.mutable_instance()->CopyFrom(ConvertToProto(static_cast<const InstanceIdent&>(src)));
dst.set_version(src.mVersion.CStr());
dst.set_preinstalled(src.mPreinstalled);
dst.set_runtime_id(src.mRuntimeID.CStr());
dst.set_manifest_digest(src.mManifestDigest.CStr());

Expand Down
7 changes: 6 additions & 1 deletion src/common/pbconvert/tests/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,14 @@ TEST_F(PBConvertCommon, ConvertAosErrorToGrpcStatus)

TEST_F(PBConvertCommon, ConvertInstanceIdentToProto)
{
aos::InstanceIdent param {"item-id", "subject-id", 1, aos::UpdateItemTypeEnum::eComponent};
aos::InstanceIdent param {"item-id", "subject-id", 1, aos::UpdateItemTypeEnum::eComponent, true};
::common::v2::InstanceIdent result = aos::common::pbconvert::ConvertToProto(param);

EXPECT_EQ(result.item_id(), param.mItemID.CStr());
EXPECT_EQ(result.subject_id(), param.mSubjectID.CStr());
EXPECT_EQ(result.instance(), param.mInstance);
EXPECT_EQ(result.type(), ::common::v2::ItemType::COMPONENT);
EXPECT_TRUE(result.preinstalled());
}

TEST_F(PBConvertCommon, ConvertInstanceIdentToAos)
Expand All @@ -100,12 +101,16 @@ TEST_F(PBConvertCommon, ConvertInstanceIdentToAos)
param.set_item_id("item-id");
param.set_subject_id("subject-id");
param.set_instance(1);
param.set_type(::common::v2::ItemType::COMPONENT);
param.set_preinstalled(true);

auto result = aos::common::pbconvert::ConvertToAos(param);

EXPECT_EQ(result.mItemID, aos::String(param.item_id().c_str()));
EXPECT_EQ(result.mSubjectID, aos::String(param.subject_id().c_str()));
EXPECT_EQ(result.mInstance, param.instance());
EXPECT_EQ(result.mType, aos::UpdateItemTypeEnum::eComponent);
EXPECT_TRUE(result.mPreinstalled);
}

TEST_F(PBConvertCommon, ConvertTimestampToAos)
Expand Down
2 changes: 1 addition & 1 deletion src/common/pbconvert/tests/sm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -194,10 +194,10 @@ TEST_F(PBConvertSMTest, ConvertInstanceStatusFromProto)
grpcStatus.mutable_instance()->set_item_id("service1");
grpcStatus.mutable_instance()->set_subject_id("user1");
grpcStatus.mutable_instance()->set_instance(0);
grpcStatus.mutable_instance()->set_preinstalled(true);
grpcStatus.set_version("2.0.0");
grpcStatus.set_runtime_id("runc");
grpcStatus.set_state("active");
grpcStatus.set_preinstalled(true);
grpcStatus.set_manifest_digest("sha256:deadbeef");

auto* envVarStatus1 = grpcStatus.add_env_vars();
Expand Down
22 changes: 13 additions & 9 deletions src/sm/database/database.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -367,10 +367,10 @@ Error Database::GetAllInstancesInfos([[maybe_unused]] Array<InstanceInfo>& infos
try {
std::vector<InstanceInfoRow> rows;

*mSession
<< "SELECT itemID, subjectID, instance, type, version, manifestDigest, runtimeID, ownerID, subjectType, "
"uid, gid, priority, storagePath, statePath, envVars, networkParameters, monitoringParams "
"FROM instances;",
*mSession << "SELECT itemID, subjectID, instance, type, preinstalled, version, manifestDigest, "
"runtimeID, ownerID, subjectType,uid, gid, priority, storagePath, statePath, "
"envVars,networkParameters, monitoringParams "
"FROM instances;",
into(rows), now;

auto instanceInfo = std::make_unique<InstanceInfo>();
Expand Down Expand Up @@ -400,9 +400,10 @@ Error Database::UpdateInstanceInfo(const InstanceInfo& info)

FromAos(info, row);

*mSession << "INSERT OR REPLACE INTO instances (itemID, subjectID, instance, type, version, manifestDigest, "
"runtimeID, ownerID, subjectType, uid, gid, priority, storagePath, statePath, envVars, "
"networkParameters, monitoringParams) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",
*mSession
<< "INSERT OR REPLACE INTO instances (itemID, subjectID, instance, type, preinstalled, version, "
"manifestDigest, runtimeID, ownerID, subjectType, uid, gid, priority, storagePath, statePath, envVars, "
"networkParameters, monitoringParams) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);",
bind(row), now;
} catch (const std::exception& e) {
return AOS_ERROR_WRAP(common::utils::ToAosError(e));
Expand All @@ -420,9 +421,10 @@ Error Database::RemoveInstanceInfo(const InstanceIdent& ident)
try {
Poco::Data::Statement statement {*mSession};

statement << "DELETE FROM instances WHERE itemID = ? AND subjectID = ? AND instance = ? AND type = ?;",
statement << "DELETE FROM instances WHERE itemID = ? AND subjectID = ? AND instance = ? AND type = ? "
"AND preinstalled = ?;",
bind(ident.mItemID.CStr()), bind(ident.mSubjectID.CStr()), bind(ident.mInstance),
bind(ident.mType.ToString().CStr());
bind(ident.mType.ToString().CStr()), bind(ident.mPreinstalled);

if (statement.execute() == 0) {
return AOS_ERROR_WRAP(ErrorEnum::eNotFound);
Expand Down Expand Up @@ -759,6 +761,7 @@ void Database::FromAos(const InstanceInfo& src, InstanceInfoRow& dst)
dst.set<ToInt(InstanceInfoColumns::eSubjectID)>(src.mSubjectID.CStr());
dst.set<ToInt(InstanceInfoColumns::eInstance)>(src.mInstance);
dst.set<ToInt(InstanceInfoColumns::eType)>(src.mType.ToString().CStr());
dst.set<ToInt(InstanceInfoColumns::ePreinstalled)>(src.mPreinstalled);
dst.set<ToInt(InstanceInfoColumns::eVersion)>(src.mVersion.CStr());
dst.set<ToInt(InstanceInfoColumns::eManifestDigest)>(src.mManifestDigest.CStr());
dst.set<ToInt(InstanceInfoColumns::eRuntimeID)>(src.mRuntimeID.CStr());
Expand All @@ -779,6 +782,7 @@ void Database::ToAos(const InstanceInfoRow& src, InstanceInfo& dst)
dst.mItemID = src.get<ToInt(InstanceInfoColumns::eItemID)>().c_str();
dst.mSubjectID = src.get<ToInt(InstanceInfoColumns::eSubjectID)>().c_str();
dst.mInstance = src.get<ToInt(InstanceInfoColumns::eInstance)>();
dst.mPreinstalled = src.get<ToInt(InstanceInfoColumns::ePreinstalled)>();
dst.mVersion = src.get<ToInt(InstanceInfoColumns::eVersion)>().c_str();
dst.mManifestDigest = src.get<ToInt(InstanceInfoColumns::eManifestDigest)>().c_str();
dst.mRuntimeID = src.get<ToInt(InstanceInfoColumns::eRuntimeID)>().c_str();
Expand Down
7 changes: 4 additions & 3 deletions src/sm/database/database.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ class Database : public sm::launcher::StorageItf, public sm::networkmanager::Sto
eSubjectID,
eInstance,
eType,
ePreinstalled,
eVersion,
eManifestDigest,
eRuntimeID,
Expand All @@ -194,9 +195,9 @@ class Database : public sm::launcher::StorageItf, public sm::networkmanager::Sto
eNetworkParameters,
eMonitoringParams
};
using InstanceInfoRow = Poco::Tuple<std::string, std::string, uint64_t, std::string, std::string, std::string,
std::string, std::string, std::string, uint32_t, uint32_t, uint64_t, std::string, std::string, std::string,
std::string, std::string>;
using InstanceInfoRow = Poco::Tuple<std::string, std::string, uint64_t, std::string, uint32_t, std::string,
std::string, std::string, std::string, std::string, uint32_t, uint32_t, uint64_t, std::string, std::string,
std::string, std::string, std::string>;

// Network info columns
enum class NetworkInfoColumns : int { eNetworkID = 0, eIP, eSubnet, eVlanID, eVlanIfName, eBridgeIfName };
Expand Down
3 changes: 2 additions & 1 deletion src/sm/database/migration/3_update.up.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ CREATE TABLE instances (
subjectID TEXT NOT NULL,
instance INTEGER NOT NULL,
type TEXT NOT NULL DEFAULT 'service',
preinstalled INTEGER NOT NULL DEFAULT 0,
version TEXT,
manifestDigest TEXT,
runtimeID TEXT,
Expand All @@ -24,7 +25,7 @@ CREATE TABLE instances (
envVars TEXT,
networkParameters TEXT,
monitoringParams TEXT,
PRIMARY KEY(itemID, subjectID, instance, type)
PRIMARY KEY(itemID, subjectID, instance, type, preinstalled)
);

ALTER TABLE network ADD COLUMN bridgeIfName TEXT;
Expand Down
2 changes: 1 addition & 1 deletion src/sm/database/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ set(SOURCES database.cpp)
# Libraries
# ######################################################################################################################

set(LIBRARIES aos::sm::database GTest::gmock_main)
set(LIBRARIES aos::sm::database aos::core::common::tests::utils GTest::gmock_main)

# ######################################################################################################################
# Target
Expand Down
Loading
Loading