2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file test_widget_interface_dao.cpp
18 * @author Lukasz Marek (l.marek@samsung.com)
20 * @brief This is the implementation file of test widget interface dao.
23 #include <sys/types.h>
29 #include <dpl/test/test_runner.h>
30 #include <dpl/log/log.h>
31 #include <Commons/Exception.h>
32 #include <WidgetInterfaceDAO/WidgetInterfaceDAO.h>
35 const std::string FAKE_WIDGET_DIR = "/opt/apps/org.tizen.";
36 const std::string WIDGET_DATA_SUBDIR = "data/";
37 const std::string DATABASE_NAME = "widget_interface.db";
39 //Following variable is an arbitraty number.
40 //It must match value inserted to wrt database by
41 //wrt_plugins_commons_test_prepare_db script.
42 const int FAKE_WIDGET_ID = 65537;
45 using namespace WrtDeviceApis;
47 RUNNER_TEST_GROUP_INIT(WidgetInterfaceDAO)
53 m_fakeWidgetId(FAKE_WIDGET_ID)
55 std::stringstream baseDir;
56 baseDir << FAKE_WIDGET_DIR << m_fakeWidgetId << "/";
57 m_fakeWidgetBaseDir = baseDir.str();
59 std::string widgetDataDir =
60 m_fakeWidgetBaseDir + WIDGET_DATA_SUBDIR;
62 m_fakeWidgetDatabaseFile = widgetDataDir + DATABASE_NAME;
64 if ((mkdir(baseDir.str().c_str(), 0777) < 0) ||
65 (mkdir(widgetDataDir.c_str(), 0777) < 0))
67 LogError("Cannot create test directory");
73 std::string command = "rm -rf ";
74 command.append(m_fakeWidgetBaseDir);
75 int ret = system(command.c_str());
76 if (!WIFEXITED(ret) || WEXITSTATUS(ret))
78 LogWarning("Fake widget directory is not deleted!");
84 return m_fakeWidgetId;
87 std::string dataBaseFile() const
89 return m_fakeWidgetDatabaseFile;
94 std::string m_fakeWidgetBaseDir;
95 std::string m_fakeWidgetDatabaseFile;
98 RUNNER_TEST(DatabaseCreateOnFirstUse)
101 WidgetInterfaceDAO dao(w.widgetId());
103 int ret = access(w.dataBaseFile().c_str(), F_OK);
105 LogDebug("filename " << w.dataBaseFile() << " result " << ret);
107 RUNNER_ASSERT(ret == 0);
110 RUNNER_TEST(GetStorageSize)
113 WidgetInterfaceDAO dao(w.widgetId());
115 RUNNER_ASSERT(dao.getStorageSize() == 0);
117 dao.setItem("key", "value", false);
119 RUNNER_ASSERT(dao.getStorageSize() == 1);
121 dao.removeItem("key");
123 RUNNER_ASSERT(dao.getStorageSize() == 0);
126 RUNNER_TEST(RemoveItem)
129 WidgetInterfaceDAO dao(w.widgetId());
131 RUNNER_ASSERT(dao.getStorageSize() == 0);
133 dao.setItem("key", "value", false);
135 RUNNER_ASSERT(dao.getStorageSize() == 1);
137 dao.setItem("key", "value", true);
139 RUNNER_ASSERT(dao.getStorageSize() == 1);
141 bool exCaught = false;
144 dao.removeItem("key");
146 catch(const Commons::LocalStorageValueNoModifableException &ex)
151 RUNNER_ASSERT(dao.getStorageSize() == 1 && exCaught);
154 RUNNER_TEST(GetValueExisting)
157 WidgetInterfaceDAO dao(w.widgetId());
159 RUNNER_ASSERT(dao.getStorageSize() == 0);
161 dao.setItem("key1", "value1", false);
162 dao.setItem("key2", "value2", false);
164 DPL::Optional<std::string> val1 = dao.getValue("key1");
165 DPL::Optional<std::string> val2 = dao.getValue("key2");
167 RUNNER_ASSERT(!val1.IsNull() && *val1 == "value1");
168 RUNNER_ASSERT(!val2.IsNull() && *val2 == "value2");
172 RUNNER_TEST(GetValueNonExisting)
175 WidgetInterfaceDAO dao(w.widgetId());
177 RUNNER_ASSERT(dao.getStorageSize() == 0);
179 DPL::Optional<std::string> val1 = dao.getValue("key1");
181 RUNNER_ASSERT(val1.IsNull());
187 WidgetInterfaceDAO dao(w.widgetId());
189 RUNNER_ASSERT(dao.getStorageSize() == 0);
191 dao.setItem("key1", "value1", false);
192 dao.setItem("key2", "value1", false);
193 RUNNER_ASSERT(dao.getStorageSize() == 2);
196 RUNNER_ASSERT(dao.getStorageSize() == 0);
198 dao.setItem("key1", "value1", true);
199 dao.setItem("key2", "value1", true);
200 RUNNER_ASSERT(dao.getStorageSize() == 2);
203 RUNNER_ASSERT(dao.getStorageSize() == 2);
206 RUNNER_ASSERT(dao.getStorageSize() == 0);
209 RUNNER_TEST(UpdateValue)
212 WidgetInterfaceDAO dao(w.widgetId());
214 RUNNER_ASSERT(dao.getStorageSize() == 0);
216 dao.setItem("key1", "value1", false);
217 DPL::Optional<std::string> val1 = dao.getValue("key1");
218 RUNNER_ASSERT(!val1.IsNull() && *val1 == "value1");
220 dao.setItem("key1", "value2", false);
221 val1 = dao.getValue("key1");
222 RUNNER_ASSERT(!val1.IsNull() && *val1 == "value2");
224 RUNNER_ASSERT(dao.getStorageSize() == 1);
227 RUNNER_TEST(UpdateReadOnlyValue)
230 WidgetInterfaceDAO dao(w.widgetId());
232 RUNNER_ASSERT(dao.getStorageSize() == 0);
234 dao.setItem("key1", "value1", true);
235 DPL::Optional<std::string> val1 = dao.getValue("key1");
236 RUNNER_ASSERT(!val1.IsNull() && *val1 == "value1");
238 bool exCaught = false;
241 dao.setItem("key1", "value2", false);
243 catch(const Commons::LocalStorageValueNoModifableException &ex)
248 RUNNER_ASSERT(dao.getStorageSize() == 1 && exCaught);
251 RUNNER_TEST(GetValueByIndex)
254 WidgetInterfaceDAO dao(w.widgetId());
256 RUNNER_ASSERT(dao.getStorageSize() == 0);
258 dao.setItem("key1", "value1", false);
259 dao.setItem("key2", "value2", false);
260 RUNNER_ASSERT(dao.getStorageSize() == 2);
262 std::string val1 = dao.getValueByIndex(0);
263 std::string val2 = dao.getValueByIndex(1);
265 RUNNER_ASSERT((val1 == "value1" && val2 == "value2") ||
266 (val2 == "value1" && val1 == "value2"));
269 RUNNER_TEST(DataPersistent)
273 WidgetInterfaceDAO dao(w.widgetId());
275 RUNNER_ASSERT(dao.getStorageSize() == 0);
277 dao.setItem("key1", "value1", false);
278 dao.setItem("key2", "value2", false);
282 WidgetInterfaceDAO dao(w.widgetId());
283 DPL::Optional<std::string> val1 = dao.getValue("key1");
284 DPL::Optional<std::string> val2 = dao.getValue("key2");
286 RUNNER_ASSERT(!val1.IsNull() && *val1 == "value1");
287 RUNNER_ASSERT(!val2.IsNull() && *val2 == "value2");