1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "xwalk/application/common/application_storage_impl.h"
7 #include "base/file_util.h"
8 #include "base/files/scoped_temp_dir.h"
9 #include "base/json/json_file_value_serializer.h"
10 #include "base/logging.h"
11 #include "base/path_service.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "xwalk/application/common/application_storage.h"
14 #include "xwalk/application/common/application_manifest_constants.h"
18 namespace keys = application_manifest_keys;
20 namespace application {
22 class ApplicationStorageImplTest : public testing::Test {
26 ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &tmp));
27 ASSERT_TRUE(temp_dir_.CreateUniqueTempDirUnderPath(tmp));
28 app_storage_impl_.reset(new ApplicationStorageImpl(temp_dir_.path()));
29 ASSERT_TRUE(app_storage_impl_->Init());
33 base::ScopedTempDir temp_dir_;
34 scoped_ptr<ApplicationStorageImpl> app_storage_impl_;
37 TEST_F(ApplicationStorageImplTest, CreateDBFile) {
39 EXPECT_TRUE(base::PathExists(
40 temp_dir_.path().Append(ApplicationStorageImpl::kDBFileName)));
43 TEST_F(ApplicationStorageImplTest, DBInsert) {
45 base::DictionaryValue manifest;
46 manifest.SetString(keys::kNameKey, "no name");
47 manifest.SetString(keys::kXWalkVersionKey, "0");
48 manifest.SetString("a", "b");
50 scoped_refptr<ApplicationData> application = ApplicationData::Create(
52 Manifest::INVALID_TYPE,
56 ASSERT_TRUE(error.empty());
57 ASSERT_TRUE(application);
58 EXPECT_TRUE(app_storage_impl_->AddApplication(application.get(),
59 base::Time::FromDoubleT(0)));
60 ApplicationData::ApplicationDataMap applications;
61 ASSERT_TRUE(app_storage_impl_->GetInstalledApplications(applications));
62 EXPECT_EQ(applications.size(), 1);
63 EXPECT_TRUE(applications[application->ID()]);
66 TEST_F(ApplicationStorageImplTest, DBDelete) {
68 base::DictionaryValue manifest;
69 manifest.SetString(keys::kNameKey, "no name");
70 manifest.SetString(keys::kXWalkVersionKey, "0");
71 manifest.SetString("a", "b");
73 scoped_refptr<ApplicationData> application =
74 ApplicationData::Create(base::FilePath(),
79 ASSERT_TRUE(error.empty());
80 EXPECT_TRUE(application);
81 EXPECT_TRUE(app_storage_impl_->AddApplication(application.get(),
82 base::Time::FromDoubleT(0)));
84 EXPECT_TRUE(app_storage_impl_->RemoveApplication(application->ID()));
85 ApplicationData::ApplicationDataMap applications;
86 ASSERT_TRUE(app_storage_impl_->GetInstalledApplications(applications));
87 EXPECT_EQ(applications.size(), 0);
90 TEST_F(ApplicationStorageImplTest, DBUpgradeToV1) {
92 ASSERT_TRUE(PathService::Get(base::DIR_TEMP, &tmp));
93 ASSERT_TRUE(temp_dir_.CreateUniqueTempDirUnderPath(tmp));
95 scoped_ptr<base::DictionaryValue> db_value(new base::DictionaryValue);
96 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
97 value->SetString("path", "");
98 base::DictionaryValue* manifest = new base::DictionaryValue;
99 manifest->SetString("a", "b");
100 manifest->SetString(keys::kNameKey, "no name");
101 manifest->SetString(keys::kXWalkVersionKey, "0");
102 value->Set("manifest", manifest);
103 value->SetDouble("install_time", 0);
104 db_value->Set("test_id", value.release());
106 base::FilePath v0_db_file(
107 temp_dir_.path().AppendASCII("applications_db"));
108 JSONFileValueSerializer serializer(v0_db_file);
109 ASSERT_TRUE(serializer.Serialize(*db_value.get()));
110 ASSERT_TRUE(base::PathExists(v0_db_file));
112 app_storage_impl_.reset(new ApplicationStorageImpl(temp_dir_.path()));
113 ASSERT_TRUE(app_storage_impl_->Init());
114 ApplicationData::ApplicationDataMap applications;
115 ASSERT_TRUE(app_storage_impl_->GetInstalledApplications(applications));
116 ASSERT_FALSE(base::PathExists(v0_db_file));
117 EXPECT_EQ(applications.size(), 1);
118 EXPECT_TRUE(applications["test_id"]);
121 TEST_F(ApplicationStorageImplTest, DBUpdate) {
123 base::DictionaryValue manifest;
124 manifest.SetString(keys::kNameKey, "no name");
125 manifest.SetString(keys::kXWalkVersionKey, "0");
126 manifest.SetString("a", "b");
128 scoped_refptr<ApplicationData> application =
129 ApplicationData::Create(base::FilePath(),
134 ASSERT_TRUE(error.empty());
135 ASSERT_TRUE(application);
136 EXPECT_TRUE(app_storage_impl_->AddApplication(application.get(),
137 base::Time::FromDoubleT(0)));
139 manifest.SetString("a", "c");
140 scoped_refptr<ApplicationData> new_application =
141 ApplicationData::Create(base::FilePath(),
146 ASSERT_TRUE(error.empty());
147 ASSERT_TRUE(new_application);
148 EXPECT_TRUE(app_storage_impl_->UpdateApplication(new_application.get(),
149 base::Time::FromDoubleT(0)));
150 ApplicationData::ApplicationDataMap applications;
151 ASSERT_TRUE(app_storage_impl_->GetInstalledApplications(applications));
152 EXPECT_EQ(applications.size(), 1);
153 scoped_refptr<ApplicationData> saved_application =
154 applications[new_application->ID()];
155 EXPECT_TRUE(saved_application);
157 EXPECT_TRUE(saved_application->GetManifest()->value()->Equals(
158 new_application->GetManifest()->value()));
161 TEST_F(ApplicationStorageImplTest, SetPermission) {
163 base::DictionaryValue manifest;
164 manifest.SetString(keys::kNameKey, "no name");
165 manifest.SetString(keys::kXWalkVersionKey, "0");
166 manifest.SetString("a", "b");
168 scoped_refptr<ApplicationData> application =
169 ApplicationData::Create(base::FilePath(),
174 ASSERT_TRUE(error.empty());
175 ASSERT_TRUE(application);
176 EXPECT_TRUE(application->SetPermission("permission", ALLOW));
177 EXPECT_TRUE(app_storage_impl_->AddApplication(application.get(),
178 base::Time::FromDoubleT(0)));
180 ApplicationData::ApplicationDataMap applications;
181 ASSERT_TRUE(app_storage_impl_->GetInstalledApplications(applications));
182 EXPECT_EQ(applications.size(), 1);
183 EXPECT_TRUE(applications[application->ID()]);
185 applications[application->ID()]->GetPermission("permission") == ALLOW);
188 } // namespace application