Skip to content
Merged
4 changes: 2 additions & 2 deletions include/aos/common/config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@
* Host device name len.
*/
#ifndef AOS_CONFIG_TYPES_DEVICE_NAME_LEN
#define AOS_CONFIG_TYPES_DEVICE_NAME_LEN 16
#define AOS_CONFIG_TYPES_DEVICE_NAME_LEN 64
#endif

/**
Expand All @@ -236,7 +236,7 @@
* Resource name len.
*/
#ifndef AOS_CONFIG_TYPES_RESOURCE_NAME_LEN
#define AOS_CONFIG_TYPES_RESOURCE_NAME_LEN 16
#define AOS_CONFIG_TYPES_RESOURCE_NAME_LEN 64
#endif

/**
Expand Down
27 changes: 25 additions & 2 deletions include/aos/common/tools/string.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

#include "aos/common/tools/array.hpp"

Expand All @@ -24,6 +25,11 @@ namespace aos {
*/
class String : public Array<char> {
public:
enum class CaseSensitivity {
CaseInsensitive,
CaseSensitive,
};

/**
* Creates string.
*/
Expand Down Expand Up @@ -730,11 +736,11 @@ class String : public Array<char> {
*/
RetWithError<size_t> FindSubstr(size_t startPos, const String& substr) const
{
if (substr.Size() > Size()) {
if (substr.Size() == 0 || substr.Size() > Size()) {
return {Size(), ErrorEnum::eNotFound};
}

for (size_t i = startPos; i < Size() - substr.Size(); i++) {
for (size_t i = startPos; i <= Size() - substr.Size(); i++) {
const auto chunk = Array<char>(CStr() + i, substr.Size());

if (chunk == substr) {
Expand Down Expand Up @@ -765,6 +771,23 @@ class String : public Array<char> {

return {Size(), ErrorEnum::eNotFound};
}

/**
* Compares string with another string.
*
* @param str string to compare with.
* @param caseSensitivity comparation case sensitivity.
* @return int: 0 - if strings are equal, <0 - if current string is less than str,
* >0 - if current string is greater than str.
*/
int Compare(const String& str, CaseSensitivity caseSensitivity = CaseSensitivity::CaseSensitive) const
{
if (caseSensitivity == CaseSensitivity::CaseSensitive) {
return strcmp(CStr(), str.CStr());
}

return strcasecmp(CStr(), str.CStr());
}
};

/**
Expand Down
1 change: 1 addition & 0 deletions include/aos/sm/networkmanager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,7 @@ class NetworkManager : public NetworkManagerItf {
Error CreateNetwork(const NetworkInfo& network);
Error GenerateVlanIfName(String& vlanIfName);
Error DeleteInstanceNetworkConfig(const String& instanceID, const String& networkID);
Error CleanupInstanceNetworkResources(const String& instanceID, const String& networkID);

StorageItf* mStorage {};
cni::CNIItf* mCNI {};
Expand Down
20 changes: 3 additions & 17 deletions src/iam/nodeinfoprovider/nodeinfoprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,13 @@

#include "aos/iam/nodeinfoprovider.hpp"

static bool CaseInsensitiveEqual(const aos::String& lhs, const aos::String& rhs)
{
if (lhs.Size() != rhs.Size()) {
return false;
}

for (size_t i = 0; i < lhs.Size(); ++i) {
if (tolower(lhs[i]) != tolower(rhs[i])) {
return false;
}
}

return true;
}

namespace aos::iam::nodeinfoprovider {

bool IsMainNode(const NodeInfo& nodeInfo)
{
return nodeInfo.mAttrs.FindIf([](const auto& attr) { return CaseInsensitiveEqual(attr.mName, cAttrMainNode); })
!= nodeInfo.mAttrs.end();
return nodeInfo.mAttrs.FindIf([](const auto& attr) {
return !attr.mName.Compare(cAttrMainNode, String::CaseSensitivity::CaseInsensitive);
}) != nodeInfo.mAttrs.end();
}

} // namespace aos::iam::nodeinfoprovider
4 changes: 1 addition & 3 deletions src/sm/launcher/instance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,7 @@ Error Instance::CreateAosEnvVars(oci::RuntimeSpec& runtimeSpec)

Error Instance::ApplyImageConfig(const oci::ImageSpec& imageSpec, oci::RuntimeSpec& runtimeSpec)
{
StaticString<cOSTypeLen> os = imageSpec.mOS;

if (os.ToLower() != cLinuxOS) {
if (imageSpec.mOS.Compare(cLinuxOS, String::CaseSensitivity::CaseInsensitive) != 0) {
return AOS_ERROR_WRAP(Error(ErrorEnum::eNotSupported, "unsupported OS in image config"));
}

Expand Down
49 changes: 33 additions & 16 deletions src/sm/networkmanager/networkmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,32 @@ Error NetworkManager::RemoveInstanceFromNetwork(const String& instanceID, const

Error err;

if (auto errCleanupResources = CleanupInstanceNetworkResources(instanceID, networkID);
!errCleanupResources.IsNone()) {
if (err.IsNone()) {
err = errCleanupResources;
}
}

if (auto errRemoveFromCache = RemoveInstanceFromCache(instanceID, networkID);
!errRemoveFromCache.IsNone() && err.IsNone()) {
err = errRemoveFromCache;
}

if (!err.IsNone()) {
return err;
}

LOG_DBG() << "Instance removed from network" << Log::Field("instanceID", instanceID)
<< Log::Field("networkID", networkID);

return ErrorEnum::eNone;
}

Error NetworkManager::CleanupInstanceNetworkResources(const String& instanceID, const String& networkID)
{
Error err;

if (auto errStopInstanceMonitoring = mNetMonitor->StopInstanceMonitoring(instanceID);
!errStopInstanceMonitoring.IsNone()) {
if (err.IsNone()) {
Expand All @@ -275,28 +301,14 @@ Error NetworkManager::RemoveInstanceFromNetwork(const String& instanceID, const
}
}

if (auto errRemoveInstanceFromCache = RemoveInstanceFromCache(instanceID, networkID);
!errRemoveInstanceFromCache.IsNone()) {
if (err.IsNone()) {
err = errRemoveInstanceFromCache;
}
}

if (auto errRemoveInstanceFromStorage = mStorage->RemoveInstanceNetworkInfo(instanceID);
!errRemoveInstanceFromStorage.IsNone()) {
if (err.IsNone()) {
err = errRemoveInstanceFromStorage;
}
}

if (!err.IsNone()) {
return err;
}

LOG_DBG() << "Instance removed from network" << Log::Field("instanceID", instanceID)
<< Log::Field("networkID", networkID);

return ErrorEnum::eNone;
return err;
}

Error NetworkManager::DeleteInstanceNetworkConfig(const String& instanceID, const String& networkID)
Expand Down Expand Up @@ -1005,10 +1017,15 @@ Error NetworkManager::RemoveNetwork(const String& networkID)
Error err;

for (const auto& instance : provider->mSecond) {
if (auto errRemoveInstance = RemoveInstanceFromNetwork(instance.mFirst, networkID);
if (auto errRemoveInstance = CleanupInstanceNetworkResources(instance.mFirst, networkID);
!errRemoveInstance.IsNone() && err.IsNone()) {
err = errRemoveInstance;
}

if (auto errRemoveFromCache = RemoveInstanceFromCache(instance.mFirst, networkID);
!errRemoveFromCache.IsNone() && err.IsNone()) {
err = errRemoveFromCache;
}
}

return err;
Expand Down
22 changes: 22 additions & 0 deletions tests/common/src/tools/string_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -411,4 +411,26 @@ TEST(StringTest, Replace)
err = str.Replace("Universe", "Aos", 1);
EXPECT_TRUE(err.IsNone());
EXPECT_EQ(str, "Hi Aos! Goodbye Universe!");

str = "Replace the whole string";

err = str.Replace(str, "replaced", 1);
EXPECT_TRUE(err.IsNone());
EXPECT_EQ(str, "replaced");
}

TEST(StringTest, Compare)
{
const auto cLhsStr = String("Test string");

EXPECT_EQ(cLhsStr.Compare("Test string"), 0);
EXPECT_LT(cLhsStr.Compare("Test string1"), 0);
EXPECT_LT(cLhsStr.Compare("Test strinh"), 0);
EXPECT_GT(cLhsStr.Compare("Test strina"), 0);
EXPECT_GT(cLhsStr.Compare("Test"), 0);

EXPECT_EQ(cLhsStr.Compare("Test string", String::CaseSensitivity::CaseInsensitive), 0);
EXPECT_EQ(cLhsStr.Compare("test string", String::CaseSensitivity::CaseInsensitive), 0);
EXPECT_EQ(cLhsStr.Compare("TEST STRING", String::CaseSensitivity::CaseInsensitive), 0);
EXPECT_LT(cLhsStr.Compare("TEST STRING1", String::CaseSensitivity::CaseInsensitive), 0);
}
Loading