diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index 576eeb1ce..96cb76c80 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -50,6 +50,8 @@ jobs: java-version: '17' - name: Setup Android SDK uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2 + with: + packages: platform-tools - name: Install NDK run: | java -version diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a47773036..bad283b5f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -132,6 +132,8 @@ jobs: java-version: '17' - name: Setup Android SDK uses: android-actions/setup-android@9fc6c4e9069bf8d3d10b2204b1fb8f6ef7065407 # v3.2.2 + with: + packages: platform-tools - name: Install NDK run: | java -version diff --git a/cmake/MSTelemetryConfig.cmake.in b/cmake/MSTelemetryConfig.cmake.in index a46d7d94c..60a3579c2 100644 --- a/cmake/MSTelemetryConfig.cmake.in +++ b/cmake/MSTelemetryConfig.cmake.in @@ -17,6 +17,7 @@ if(@MATSDK_CONFIG_STATIC_PACKAGE@) SQLite3::SQLite3 "@MATSDK_SQLITE_PROVIDER_RESOLVED@" SQLite3 + LEGACY_TARGET SQLite::SQLite3 ${_matsdk_package_sqlite_args}) matsdk_add_package_system_dependency( MSTelemetry::zlib_dependency diff --git a/cmake/MatsdkDependencyTargets.cmake b/cmake/MatsdkDependencyTargets.cmake index f5f320043..47ddf21a4 100644 --- a/cmake/MatsdkDependencyTargets.cmake +++ b/cmake/MatsdkDependencyTargets.cmake @@ -20,7 +20,7 @@ function(matsdk_add_package_system_dependency dependency_target canonical_target endif() set(options APPLE_SYSTEM) - set(one_value_args APPLE_LIBRARY) + set(one_value_args APPLE_LIBRARY LEGACY_TARGET) cmake_parse_arguments(MATSDK_PACKAGE_DEP "${options}" "${one_value_args}" "" ${ARGN}) if(MATSDK_PACKAGE_DEP_APPLE_SYSTEM) @@ -35,6 +35,12 @@ function(matsdk_add_package_system_dependency dependency_target canonical_target elseif(NOT TARGET "${canonical_target}") find_dependency(${package_name}) endif() + if(NOT TARGET "${canonical_target}" + AND DEFINED MATSDK_PACKAGE_DEP_LEGACY_TARGET + AND TARGET "${MATSDK_PACKAGE_DEP_LEGACY_TARGET}") + matsdk_add_interface_dependency( + "${canonical_target}" "${MATSDK_PACKAGE_DEP_LEGACY_TARGET}") + endif() if(NOT TARGET "${canonical_target}") message(FATAL_ERROR "${package_name} did not create the required ${canonical_target} target.") diff --git a/lib/offline/LogSessionDataProvider.cpp b/lib/offline/LogSessionDataProvider.cpp index 68e152d0e..ea3112c72 100644 --- a/lib/offline/LogSessionDataProvider.cpp +++ b/lib/offline/LogSessionDataProvider.cpp @@ -97,7 +97,8 @@ namespace MAT_NS_BEGIN void LogSessionDataProvider::DeleteLogSessionDataFromFile() { - std::string sessionPath = m_cacheFilePath.empty() ? "" : (m_cacheFilePath + ".ses").c_str(); + std::string sessionPath = + (m_cacheFilePath.empty() || m_cacheFilePath == ":memory:") ? "" : m_cacheFilePath + ".ses"; if (!sessionPath.empty() && MAT::FileExists(sessionPath.c_str())) { MAT::FileDelete(sessionPath.c_str()); @@ -108,7 +109,8 @@ namespace MAT_NS_BEGIN { uint64_t sessionFirstTimeLaunch = 0; std::string sessionSDKUid; - std::string sessionPath = m_cacheFilePath.empty() ? "" : (m_cacheFilePath + ".ses").c_str(); + std::string sessionPath = + (m_cacheFilePath.empty() || m_cacheFilePath == ":memory:") ? "" : m_cacheFilePath + ".ses"; if (!sessionPath.empty()) { if (MAT::FileExists(sessionPath.c_str())) @@ -127,6 +129,11 @@ namespace MAT_NS_BEGIN writeFileContents(sessionPath, sessionFirstTimeLaunch, sessionSDKUid); } } + else if (m_cacheFilePath == ":memory:") + { + sessionFirstTimeLaunch = PAL::getUtcSystemTimeMs(); + sessionSDKUid = PAL::generateUuidString(); + } m_logSessionData.reset(new LogSessionData(sessionFirstTimeLaunch, sessionSDKUid)); } @@ -209,4 +216,3 @@ namespace MAT_NS_BEGIN } } MAT_NS_END - diff --git a/tests/functests/LogSessionDataFuncTests.cpp b/tests/functests/LogSessionDataFuncTests.cpp index f1f1dbe68..9afde6926 100644 --- a/tests/functests/LogSessionDataFuncTests.cpp +++ b/tests/functests/LogSessionDataFuncTests.cpp @@ -14,14 +14,18 @@ using namespace MAT; const std::string SessionFileArgument = "test"; const char* const SessionFile = "test.ses"; +const char* const MemorySessionFile = ":memory:.ses"; class LogSessionDataFuncTests : public ::testing::Test { void CleanupLocalSessionFile() { - if (MAT::FileExists(SessionFile)) + for (const auto* sessionFile : {SessionFile, MemorySessionFile}) { - MAT::FileDelete(SessionFile); + if (MAT::FileExists(sessionFile)) + { + MAT::FileDelete(sessionFile); + } } } @@ -76,6 +80,28 @@ TEST_F(LogSessionDataFuncTests, Constructor_SessionFile_FileCreated) ASSERT_TRUE(MAT::FileExists(SessionFile)); } +TEST_F(LogSessionDataFuncTests, Constructor_InMemoryCache_NoSessionFileCreated) +{ + auto logSessionDataProvider = LogSessionDataProvider(":memory:"); + logSessionDataProvider.CreateLogSessionData(); + const auto* logSessionData = logSessionDataProvider.GetLogSessionData(); + ASSERT_NE(logSessionData, nullptr); + EXPECT_GT(logSessionData->getSessionFirstTime(), 0ull); + EXPECT_FALSE(logSessionData->getSessionSDKUid().empty()); + const auto sessionSDKUid = logSessionData->getSessionSDKUid(); + EXPECT_FALSE(MAT::FileExists(MemorySessionFile)); + + logSessionDataProvider.ResetLogSessionData(); + logSessionData = logSessionDataProvider.GetLogSessionData(); + ASSERT_NE(logSessionData, nullptr); + EXPECT_GT(logSessionData->getSessionFirstTime(), 0ull); + EXPECT_FALSE(logSessionData->getSessionSDKUid().empty()); + EXPECT_NE(logSessionData->getSessionSDKUid(), sessionSDKUid); + EXPECT_FALSE(MAT::FileExists(MemorySessionFile)); + logSessionDataProvider.DeleteLogSessionData(); + EXPECT_FALSE(MAT::FileExists(MemorySessionFile)); +} + TEST_F(LogSessionDataFuncTests, Constructor_ValidSessionFileExists_MembersSetToExistingFile) { const std::string validSessionFirstTime{ "123456" };