Add LocalDevice for default 27/205227/4
authorDaehyeon Jung <darrenh.jung@samsung.com>
Tue, 30 Apr 2019 09:33:51 +0000 (18:33 +0900)
committerDaehyeon Jung <darrenh.jung@samsung.com>
Wed, 8 May 2019 11:58:50 +0000 (20:58 +0900)
Change-Id: I710de17284669d31fe1612f87d443dd79dcabbbb
Signed-off-by: Daehyeon Jung <darrenh.jung@samsung.com>
CMakeLists.txt
packaging/capmgr.spec
src/common/CMakeLists.txt
src/common/db_manager.cc
src/common/mdg_manager.cc
src/common/mdg_manager.h
src/common/remote_device.h
src/common/sqlite_statement.cc
src/unit_tests/CMakeLists.txt
src/unit_tests/remote_device_manager_test.cc
src/unit_tests/smoke_test.cc

index 15585200f220a1a4a48480901dd6f9a917a18608..52d0f0afaa05c4a1648f66e517246fb93b2144ac 100644 (file)
@@ -38,6 +38,7 @@ PKG_CHECK_MODULES(PKGMGR_DEPS REQUIRED pkgmgr)
 PKG_CHECK_MODULES(PKGMGR_INFO_DEPS REQUIRED pkgmgr-info)
 PKG_CHECK_MODULES(SMACK_DEPS REQUIRED libsmack)
 PKG_CHECK_MODULES(SQLITE_DEPS REQUIRED sqlite3)
+PKG_CHECK_MODULES(SYSINFO_DEPS REQUIRED capi-system-info capi-system-system-settings)
 
 FIND_PACKAGE(Boost REQUIRED COMPONENTS filesystem system)
 
index 48439f875b6c087c4a035ae23e9bbc9574e22933..a7df83ffad3444deb447ab1c0e94c81c5195451b 100644 (file)
@@ -20,6 +20,8 @@ BuildRequires:  pkgconfig(aul)
 BuildRequires:  pkgconfig(bundle)
 BuildRequires:  pkgconfig(capi-base-common)
 BuildRequires:  pkgconfig(capi-network-mdg)
+BuildRequires:  pkgconfig(capi-system-info)
+BuildRequires:  pkgconfig(capi-system-system-settings)
 BuildRequires:  pkgconfig(cynara-creds-gdbus)
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(gio-2.0)
index 3b1070a35ea812fa845725bfbf76e20409fa8e08..d2da4d87b5977c0c9777f949669844d699c779b4 100644 (file)
@@ -20,6 +20,7 @@ APPLY_PKG_CONFIG(${TARGET_LIB_COMMON} PUBLIC
   SQLITE_DEPS
   CYNARA_CREDS_DEPS
   SMACK_DEPS
+  SYSINFO_DEPS
   Boost
 )
 
index fb894d70a82fe62cdf746e3a4e6bc4ba440ceb69..ae396f5ddfcc31af8332042848b6da36f5beacb6 100644 (file)
@@ -28,6 +28,7 @@ const char kQueryInitDevicesTable[] =
     "  platform_ver TEXT,\n"
     "  profile      TEXT,\n"
     "  sw_ver       TEXT,\n"
+    "  local        INTEGER,\n"
     "  PRIMARY KEY (device_id))";
 const char kQueryInitCapsTable[] =
     "CREATE TABLE IF NOT EXISTS capabilities (\n"
@@ -52,13 +53,13 @@ const char kQueryInitRemoteAppsTable[] =
     "  REFERENCES devices (device_id) ON DELETE CASCADE)";
 const char kQueryInsertDev[] =
     "INSERT INTO devices (device_id, model_name, device_name,"
-    "  platform_ver, profile, sw_ver) "
-    "VALUES (?, ?, ?, ?, ?, ?)";
+    "  platform_ver, profile, sw_ver, local) "
+    "VALUES (?, ?, ?, ?, ?, ?, ?)";
 const char kQueryDeleteDev[] =
     "DELETE FROM devices WHERE device_id=?";
 const char kQuerySelectDev[] =
     "SELECT device_id, model_name, device_name, platform_ver,"
-    "  profile, sw_ver FROM devices";
+    "  profile, sw_ver, local FROM devices";
 const char kQueryInsertCap[] =
     "INSERT INTO capabilities (device_id, operation, uri, mime, appid, pkgid) "
     "VALUES (?, ?, ?, ?, ?, ?)";
@@ -100,6 +101,8 @@ bool DBManager::InsertDevice(const RemoteDevice& device) {
     return false;
   if (!stmt->BindString(idx++, device.sw_ver()))
     return false;
+  if (!stmt->BindInt(idx++, device.local() ? 1 : 0))
+    return false;
 
   if (stmt->Step() != SQLStatement::StepResult::DONE) {
     LOG(ERROR) << "Failed to insert device info into db";
@@ -147,9 +150,10 @@ std::vector<RemoteDevice> DBManager::SelectDevices() {
     std::string platform_ver = stmt->GetColumnString(idx++);
     std::string profile = stmt->GetColumnString(idx++);
     std::string sw_ver = stmt->GetColumnString(idx++);
+    bool local = stmt->GetColumnInt(idx++) > 0;
 
     RemoteDevice dev(device_id, model_name, device_name, platform_ver,
-        profile, sw_ver);
+        profile, sw_ver, local);
     dev_list.push_back(dev);
   }
 
index 114e53b857f1affc5cfeab0af42aad830dbf082a..0611478c0b00edc29a7caeedb44ba95d6f0358b4 100644 (file)
@@ -9,6 +9,8 @@
 #include <mdg_internal.h>
 #include <stdint.h>
 #include <sys/types.h>
+#include <system_info.h>
+#include <system_settings.h>
 #include <unistd.h>
 
 #include <cstring>
@@ -159,6 +161,8 @@ bool MDGManager::Initialize() {
     return false;
   }
 
+  AddLocalDevice();
+
   ret = mdg_set_invited_event_cb(mdg_handle_, &MDGManager::GroupInvitedCb,
       this);
   if (ret != MDG_ERROR_NONE) {
@@ -409,7 +413,7 @@ void MDGManager::HandlePackageEvent(const std::string& pkgid,
     packed = this->pm_->PackPackages(packages);
     package_data = new unsigned char[packed.size()];
     memcpy(package_data, packed.c_str(), packed.size());
-    delete[] info;
+    delete info;
   } else if (event_type == PackageEventListener::EventType::UNINSTALL) {
     package_data = new unsigned char[pkgid.size()];
     memcpy(package_data, pkgid.c_str(), pkgid.size());
@@ -423,7 +427,7 @@ void MDGManager::HandlePackageEvent(const std::string& pkgid,
     packed = info->Serialize();
     package_data = new unsigned char[packed.size()];
     memcpy(package_data, packed.c_str(), packed.size());
-    delete[] info;
+    delete info;
   }
 
   std::vector<RemoteDevice> dev_list = DBManager::SelectDevices();
@@ -450,6 +454,32 @@ void MDGManager::HandlePackageEvent(const std::string& pkgid,
   delete[] package_data;
 }
 
+bool MDGManager::AddLocalDevice() {
+  // critical section: appending device list
+  std::mutex lock;
+  std::lock_guard<std::mutex> guard(lock);
+  LOG(ERROR) << "Add Local Device";
+  char* device_name = nullptr;
+  char* model_name = nullptr;
+  char* platform_ver = nullptr;
+  char* profile = nullptr;
+  system_settings_get_value_string(SYSTEM_SETTINGS_KEY_DEVICE_NAME, &device_name);
+  system_info_get_platform_string("http://tizen.org/system/model_name", &model_name);
+  system_info_get_platform_string("http://tizen.org/feature/platform.version", &platform_ver);
+  system_info_get_platform_string("http://tizen.org/feature/profile", &profile);
+  std::string sw_ver = "5.5";
+
+  RemoteDevice remote_device("localhost", model_name, device_name,
+      platform_ver, profile, sw_ver, true);
+  RemoteDeviceManager::RegisterRemoteDevice("localhost", remote_device);
+
+  std::vector<RemotePackageInfo> infos = pm_->LoadLocalPackages();
+  pm_->StoreRemotePackages("localhost", infos);
+
+  LOG(ERROR) << "Add local device done";
+  return true;
+}
+
 bool MDGManager::AddDevice(const mdg_device_h device) {
   // critical section: appending device list
   std::mutex lock;
@@ -470,10 +500,10 @@ bool MDGManager::AddDevice(const mdg_device_h device) {
   std::string profile = GetProfileFromHandle(device);
   if (profile.empty())
     return false;
-  std::string sw_ver = "5.0";
+  std::string sw_ver = "5.5";
 
   RemoteDevice remote_device(device_id, model_name, device_name,
-      platform_ver, profile, sw_ver);
+      platform_ver, profile, sw_ver, false);
   RemoteDeviceManager::RegisterRemoteDevice(device_id, remote_device);
 
   mdg_device_h dev_clone;
index 0feb9a341cf42512e0f1028010bb8ba25afa28c9..c94d87ad20fe8890008534594bedb51f15489d2c 100644 (file)
@@ -51,6 +51,7 @@ class MDGManager : public ConnectionManager {
   bool Initialize();
   bool FindGroup();
   bool AddDevice(const mdg_device_h device);
+  bool AddLocalDevice();
   int SendData(const std::string& device_id, Command cmd,
       const unsigned char* data, size_t len);
   bool SendReplyData(const std::string& device_id, Command cmd,
index 5608d1430c0829d4bd741e80b1b6b305746b87c0..9c17d485e74d9eecddcb2d8c1c4237927434427b 100644 (file)
@@ -15,11 +15,11 @@ class RemoteDevice {
   explicit RemoteDevice(const std::string& device_id,
       const std::string& model_name, const std::string& device_name,
       const std::string& platform_ver, const std::string& profile,
-      const std::string& sw_ver)
+      const std::string& sw_ver, const bool local)
       : device_id_(std::move(device_id)), model_name_(std::move(model_name)),
         device_name_(std::move(device_name)),
         platform_ver_(std::move(platform_ver)), profile_(std::move(profile)),
-        sw_ver_(std::move(sw_ver)) {}
+        sw_ver_(std::move(sw_ver)), local_(local) {}
 
   const std::string& device_id() const { return device_id_; }
   const std::string& model_name() const { return model_name_; }
@@ -27,6 +27,7 @@ class RemoteDevice {
   const std::string& platform_ver() const { return platform_ver_; }
   const std::string& profile() const { return profile_; }
   const std::string& sw_ver() const { return sw_ver_; }
+  const bool local() const { return local_; }
 
  private:
   std::string device_id_;
@@ -35,6 +36,7 @@ class RemoteDevice {
   std::string platform_ver_;
   std::string profile_;
   std::string sw_ver_;
+  bool local_;
 };
 
 }  // namespace capmgr
index d27133677ff56f8e49f33cb8a772182d4ff82780..09d67fc22534bb2493d59e2273d3ad31b922b130 100644 (file)
@@ -49,7 +49,7 @@ bool SQLiteStatement::BindInt(int pos, int val) {
     sql_conn_->SetErrorCode(r);
     return false;
   }
-  return false;
+  return true;
 }
 
 bool SQLiteStatement::BindString(int pos, const std::string& val) {
index 5b453e1e72126af2cc32bdf18b751d6f72e07623..00910f702f6c9a78685d3d4b625ccdc7491d9644 100644 (file)
@@ -14,6 +14,7 @@ ADD_EXECUTABLE(${TARGET_SQL_TEST} ${SQL_TEST_SRCS})
 ADD_EXECUTABLE(${TARGET_SMOKE_TEST} ${SMOKE_TEST_SRCS})
 
 APPLY_PKG_CONFIG(${TARGET_SQL_TEST} PUBLIC
+  BUNDLE_DEPS
   DLOG_DEPS
   GLIB_DEPS
   GMOCK_DEPS
@@ -22,6 +23,7 @@ APPLY_PKG_CONFIG(${TARGET_SQL_TEST} PUBLIC
 
 APPLY_PKG_CONFIG(${TARGET_SMOKE_TEST} PUBLIC
   Boost
+  BUNDLE_DEPS
   DLOG_DEPS
   GMOCK_DEPS
 )
index 8112b96d1fc536ac8c33fca5c8550181e152249b..b8cf79e17b797d05d348c12cafb178c5d993b080 100644 (file)
@@ -23,7 +23,7 @@ class RemoteDeviceManagerTest : public ::testing::Test {
 
 TEST_F(RemoteDeviceManagerTest, RegisterRemoteDeviceManagerTest) {
   RemoteDevice remote_device("device_id", "model_name", "device_name",
-      "platform_ver", "profile", "sw_ver");
+      "platform_ver", "profile", "sw_ver", true);
   RemoteDeviceManager::RegisterRemoteDevice("device_id", remote_device);
 
   std::vector<RemoteDevice> devices = DBManager::SelectDevices();
@@ -34,7 +34,8 @@ TEST_F(RemoteDeviceManagerTest, RegisterRemoteDeviceManagerTest) {
             d.device_name() == remote_device.device_name() &&
             d.platform_ver() == remote_device.platform_ver() &&
             d.profile() == remote_device.profile() &&
-            d.sw_ver() == remote_device.sw_ver())
+            d.sw_ver() == remote_device.sw_ver() &&
+            d.local() == remote_device.local())
           return true;
         else
           return false;
@@ -44,7 +45,7 @@ TEST_F(RemoteDeviceManagerTest, RegisterRemoteDeviceManagerTest) {
 
 TEST_F(RemoteDeviceManagerTest, RegisterRemoteCapabilitiesTest) {
   RemoteDevice remote_device("device_id2", "model_name2", "device_name2",
-      "platform_ver2", "profile2", "sw_ver2");
+      "platform_ver2", "profile2", "sw_ver2", true);
   RemoteDeviceManager::RegisterRemoteDevice("device_id2", remote_device);
 
   std::vector<Capability> capabilities;
index 43f868bbd81085ea75e61cb823edae783872b00e..f436e04db41c07d9220bcc1da0c3fcdc69ddefa9 100644 (file)
@@ -113,25 +113,25 @@ class SmokeTest : public ::testing::Test {
 };
 
 TEST_F(SmokeTest, InsertDeviceTest) {
-  RemoteDevice dev("insertdev", "tm1", "TM1", "5.0", "mobile", "5.0");
+  RemoteDevice dev("insertdev", "tm1", "TM1", "5.0", "mobile", "5.0", true);
   ASSERT_TRUE(DBManager::InsertDevice(dev));
 }
 
 TEST_F(SmokeTest, DeleteDeviceTest) {
-  RemoteDevice dev("deletedev", "tm1", "TM1", "5.0", "mobile", "5.0");
+  RemoteDevice dev("deletedev", "tm1", "TM1", "5.0", "mobile", "5.0", true);
   ASSERT_TRUE(DBManager::InsertDevice(dev));
   ASSERT_TRUE(DBManager::DeleteDevice(dev));
 }
 
 TEST_F(SmokeTest, InsertCapTest) {
-  RemoteDevice dev("insertcapdev", "tm1", "TM1", "5.0", "mobile", "5.0");
+  RemoteDevice dev("insertcapdev", "tm1", "TM1", "5.0", "mobile", "5.0", true);
   ASSERT_TRUE(DBManager::InsertDevice(dev));
   Capability cap("operation", "uri", "mime", "appid", "pkgid");
   ASSERT_TRUE(DBManager::InsertCapability("insertcapdev", cap));
 }
 
 TEST_F(SmokeTest, DeleteCapTest) {
-  RemoteDevice dev("deletecapdev", "tm1", "TM1", "5.0", "mobile", "5.0");
+  RemoteDevice dev("deletecapdev", "tm1", "TM1", "5.0", "mobile", "5.0", true);
   ASSERT_TRUE(DBManager::InsertDevice(dev));
   Capability cap("operation", "uri", "mime", "appid", "pkgid");
   ASSERT_TRUE(DBManager::InsertCapability("deletecapdev", cap));
@@ -139,7 +139,7 @@ TEST_F(SmokeTest, DeleteCapTest) {
 }
 
 TEST_F(SmokeTest, InsertPkgTest) {
-  RemoteDevice dev("insertpkgdev", "tm1", "TM1", "5.0", "mobile", "5.0");
+  RemoteDevice dev("insertpkgdev", "tm1", "TM1", "5.0", "mobile", "5.0", true);
   ASSERT_TRUE(DBManager::InsertDevice(dev));
   std::vector<std::string> v;
   v.emplace_back("hello1");
@@ -149,7 +149,7 @@ TEST_F(SmokeTest, InsertPkgTest) {
 }
 
 TEST_F(SmokeTest, DeletePkgTest) {
-  RemoteDevice dev("deletepkgdev", "tm1", "TM1", "5.0", "mobile", "5.0");
+  RemoteDevice dev("deletepkgdev", "tm1", "TM1", "5.0", "mobile", "5.0", true);
   ASSERT_TRUE(DBManager::InsertDevice(dev));
   std::vector<std::string> v;
   v.emplace_back("hello1");