Implement CertInfoParcelable
authorIlho Kim <ilho159.kim@samsung.com>
Wed, 10 Feb 2021 07:57:41 +0000 (16:57 +0900)
committer김일호/Tizen Platform Lab(SR)/Engineer/삼성전자 <ilho159.kim@samsung.com>
Tue, 16 Feb 2021 09:22:33 +0000 (18:22 +0900)
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
src/common/parcel/certinfo_parcelable.cc
src/common/parcel/certinfo_parcelable.hh
test/unit_tests/parcel_utils.cc
test/unit_tests/parcel_utils.hh
test/unit_tests/test_parcel.cc

index 483a25a..b8f231e 100644 (file)
 #include <vector>
 
 #include "pkgmgrinfo_private.h"
+#include "pkgmgr-info.h"
 
 namespace pkgmgr_common {
 namespace parcel {
 
-std::unique_ptr<pkgmgr_certinfo_x> CertInfoParcelable::GetCertInfo() {
-  return nullptr;
+CertInfoParcelable::CertInfoParcelable(pkgmgr_certinfo_x *cert_info)
+    : cert_info_(cert_info) {}
+
+CertInfoParcelable::~CertInfoParcelable() {
+  pkgmgrinfo_pkginfo_destroy_certinfo(cert_info_);
+}
+
+const pkgmgr_certinfo_x *CertInfoParcelable::GetCertInfo() {
+  return cert_info_;
+}
+
+void CertInfoParcelable::WriteToParcel(tizen_base::Parcel* parcel) const {
+  WriteCertInfo(parcel, cert_info_);
+}
+
+void CertInfoParcelable::ReadFromParcel(tizen_base::Parcel* parcel) {
+  ReadCertInfo(parcel);
 }
 
-bool CertInfoParcelable::SetCertInfo(std::unique_ptr<pkgmgr_certinfo_x> certinfo) {
+bool CertInfoParcelable::WriteCertInfo(tizen_base::Parcel* parcel, pkgmgr_certinfo_x *cert_info) const {
+  WriteInt(parcel, cert_info->for_all_users);
+  WriteString(parcel, cert_info->pkgid);
+  WriteString(parcel, cert_info->cert_value);
+  for (int i = 0; i < MAX_CERT_TYPE; ++i)
+    WriteString(parcel, cert_info->cert_info[i]);
+  for (int i = 0; i < MAX_CERT_TYPE; ++i)
+    WriteInt(parcel, cert_info->cert_id[i]);
+
   return true;
 }
 
-std::unique_ptr<AbstractParcelable> CertInfoParcelable::Deserialize(
-    std::vector<unsigned char> data) {
-  return nullptr;
+void CertInfoParcelable::ReadCertInfo(tizen_base::Parcel* parcel) {
+  cert_info_ = reinterpret_cast<pkgmgr_certinfo_x *>(calloc(1, sizeof(pkgmgr_certinfo_x)));
+  ReadInt(parcel, &cert_info_->for_all_users);
+  ReadString(parcel, &cert_info_->pkgid);
+  ReadString(parcel, &cert_info_->cert_value);
+  for (int i = 0; i < MAX_CERT_TYPE; ++i)
+    ReadString(parcel, &cert_info_->cert_info[i]);
+  for (int i = 0; i < MAX_CERT_TYPE; ++i)
+    ReadInt(parcel, &cert_info_->cert_id[i]);
 }
 
 std::unique_ptr<AbstractParcelable> CertInfoParcelable::Factory::CreateParcel() {
index de24ef0..43d8f69 100644 (file)
@@ -20,20 +20,20 @@ class EXPORT_API CertInfoParcelable : public AbstractParcelable {
    public:
     std::unique_ptr<AbstractParcelable> CreateParcel();
   };
-  std::unique_ptr<pkgmgr_certinfo_x> GetCertInfo();
-  bool SetCertInfo(std::unique_ptr<pkgmgr_certinfo_x> certinfo);
-  std::unique_ptr<AbstractParcelable> Deserialize(std::vector<unsigned char> data);
-
-  virtual void WriteToParcel(tizen_base::Parcel* parcel) const {
-    parcel->WriteString("test");
-    parcel->WriteUInt32(32);
-  }
-
-  virtual void ReadFromParcel(tizen_base::Parcel* parcel) {
-    std::string a = parcel->ReadString();
-    unsigned int b;
-    parcel->ReadUInt32(&b);
-  }
+
+  CertInfoParcelable() = default;
+  CertInfoParcelable(pkgmgr_certinfo_x *cert_info);
+  ~CertInfoParcelable();
+  const pkgmgr_certinfo_x *GetCertInfo();
+
+  void WriteToParcel(tizen_base::Parcel* parcel) const override;
+  void ReadFromParcel(tizen_base::Parcel* parcel) override;
+
+ private:
+  bool WriteCertInfo(tizen_base::Parcel* parcel, pkgmgr_certinfo_x *cert_info) const;
+  void ReadCertInfo(tizen_base::Parcel* parcel);
+
+  pkgmgr_certinfo_x *cert_info_;
 };
 
 }  // namespace parcel
index 1a95515..ffec25e 100644 (file)
@@ -680,3 +680,33 @@ bool IsEqualFilter(const pkgmgrinfo_filter_x *filterA,
   std::cout << "bbbbbb" << std::endl;
   }
 }
+
+pkgmgr_certinfo_x *GetTestCertInfo() {
+  pkgmgr_certinfo_x *cert_info;
+  cert_info = reinterpret_cast<pkgmgr_certinfo_x*>(calloc(1, sizeof(pkgmgr_certinfo_x)));
+
+  cert_info->for_all_users = 1;
+  cert_info->pkgid = strdup("test_pkgid");
+  cert_info->cert_value = strdup("test_cert_value");
+  for (int i = 0; i < MAX_CERT_TYPE; ++i) {
+    char buf[1024] = { 0, };
+    snprintf(buf, sizeof(buf), "test_cert_info_%d", i);
+    cert_info->cert_info[i] = strdup(buf);
+  }
+  for (int i = 0; i < MAX_CERT_TYPE; ++i) {
+    cert_info->cert_id[i] = i + 1000;
+  }
+
+  return cert_info;
+}
+
+bool IsEqualCertInfo(const pkgmgr_certinfo_x *certA,
+    const pkgmgr_certinfo_x *certB) {
+  INT_EQ(certA->for_all_users, certB->for_all_users);
+  STR_EQ(certA->pkgid, certB->pkgid);
+  STR_EQ(certA->cert_value, certB->cert_value);
+  for (int i = 0; i < MAX_CERT_TYPE; ++i)
+    STR_EQ(certA->cert_info[i], certB->cert_info[i]);
+  for (int i = 0; i < MAX_CERT_TYPE; ++i)
+    INT_EQ(certA->cert_id[i], certB->cert_id[i]);
+}
index 739a19c..a2d4554 100644 (file)
@@ -33,3 +33,8 @@ pkgmgrinfo_filter_x *GetTestFilter();
 
 bool IsEqualFilter(const pkgmgrinfo_filter_x *filterA,
     const pkgmgrinfo_filter_x *filterB);
+
+pkgmgr_certinfo_x *GetTestCertInfo();
+
+bool IsEqualCertInfo(const pkgmgr_certinfo_x *certA,
+    const pkgmgr_certinfo_x *certB);
index b5376fd..9678711 100644 (file)
@@ -156,3 +156,16 @@ TEST_F(ParcelTest, FilterParcelable) {
       origin_parcelable.GetFilter(), new_parcelable.GetFilter()));
   EXPECT_EQ(origin_parcelable.GetFlag(), new_parcelable.GetFlag());
 }
+
+TEST_F(ParcelTest, CertInfoParcelable) {
+  tizen_base::Parcel parcel;
+  pkgmgr_certinfo_x *certinfo = GetTestCertInfo();
+
+  pp::CertInfoParcelable origin_parcelable(certinfo);
+  pp::CertInfoParcelable new_parcelable;
+  parcel.WriteParcelable(origin_parcelable);
+  parcel.ReadParcelable(&new_parcelable);
+
+  EXPECT_TRUE(IsEqualCertInfo(
+      origin_parcelable.GetCertInfo(), new_parcelable.GetCertInfo()));
+}