1 /* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2010-06-21
7 * Description : CLI test program for switch digiKam DB from sqlite to mysql
8 *
9 * Copyright (C) 2014-2021 by Gilles Caulier, <caulier dot gilles at gmail dot com>
10 *
11 * This program is free software; you can redistribute it
12 * and/or modify it under the terms of the GNU General
13 * Public License as published by the Free Software Foundation;
14 * either version 2, or (at your option)
15 * any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * ============================================================ */
23
24 // Qt includes
25
26 #include <QApplication>
27 #include <QDir>
28 #include <QSqlDatabase>
29 #include <QString>
30 #include <QTimer>
31 #include <QTest>
32 #include <QCommandLineParser>
33
34 // KDE includes
35
36 #include <kaboutdata.h>
37
38 // Local includes
39
40 #include "digikam_debug.h"
41 #include "daboutdata.h"
42 #include "albummanager.h"
43 #include "coredbaccess.h"
44 #include "thumbsdbaccess.h"
45 #include "facedbaccess.h"
46 #include "dbengineparameters.h"
47 #include "scancontroller.h"
48 #include "digikam_version.h"
49
50 using namespace Digikam;
51
52 const QString IMAGE_PATH(QFINDTESTDATA("data/testimages/"));
53
main(int argc,char ** argv)54 int main(int argc, char** argv)
55 {
56 QApplication app(argc, argv);
57
58 if (argc != 2)
59 {
60 qCDebug(DIGIKAM_TESTS_LOG) << "testdatabaseswitch - test database switch";
61 qCDebug(DIGIKAM_TESTS_LOG) << "Usage: <sqliteToMysql | mysqlToSqlite>";
62 return -1;
63 }
64
65 KAboutData aboutData(QLatin1String("digikam"),
66 QLatin1String("digiKam"), // No need i18n here.
67 digiKamVersion());
68
69 QCommandLineParser parser;
70 KAboutData::setApplicationData(aboutData);
71 parser.addVersionOption();
72 parser.addHelpOption();
73 aboutData.setupCommandLine(&parser);
74 parser.process(app);
75 aboutData.processCommandLine(&parser);
76 QString switchCondition = QLatin1String(argv[1]);
77
78 // ------------------------------------------------------------------------------------
79
80 if (switchCondition == QLatin1String("sqliteToMysql"))
81 {
82 qCDebug(DIGIKAM_TESTS_LOG) << "Setup sqlite Database...";
83
84 DbEngineParameters params;
85
86 params.databaseType = DbEngineParameters::SQLiteDatabaseType();
87 params.setCoreDatabasePath(QDir::currentPath() + QLatin1String("/digikam-core-test.db"));
88 params.setThumbsDatabasePath(QDir::currentPath() + QLatin1String("/digikam-thumbs-test.db"));
89 params.setFaceDatabasePath(QDir::currentPath() + QLatin1String("/digikam-faces-test.db"));
90 params.legacyAndDefaultChecks();
91
92 qCDebug(DIGIKAM_TESTS_LOG) << "Initializing database...";
93 bool b = AlbumManager::instance()->setDatabase(params, false, IMAGE_PATH);
94
95 qCDebug(DIGIKAM_TESTS_LOG) << "Database initialization done: " << b;
96
97 QTest::qWait(3000);
98
99 //qCDebug(DIGIKAM_TESTS_LOG) << "Shutting down database";
100 //ScanController::instance()->shutDown();
101 //AlbumManager::instance()->cleanUp();
102
103 qCDebug(DIGIKAM_TESTS_LOG) << "Cleaning DB now";
104 CoreDbAccess::cleanUpDatabase();
105 ThumbsDbAccess::cleanUpDatabase();
106 FaceDbAccess::cleanUpDatabase();
107
108 // ------------------------------------------------------------------------------------
109
110 qCDebug(DIGIKAM_TESTS_LOG) << "Setup mysql Database...";
111
112 params = DbEngineParameters();
113 QString defaultAkDir = DbEngineParameters::internalServerPrivatePath();
114 QString miscDir = QDir(defaultAkDir).absoluteFilePath(QLatin1String("db_misc"));
115 params.databaseType = DbEngineParameters::MySQLDatabaseType();
116 params.databaseNameCore = QLatin1String("digikam");
117 params.databaseNameThumbnails = QLatin1String("digikam");
118 params.databaseNameFace = QLatin1String("digikam");
119 params.userName = QLatin1String("root");
120 params.password = QString();
121 params.internalServer = true;
122 params.internalServerDBPath = QDir::currentPath();
123 params.internalServerMysqlServCmd = DbEngineParameters::defaultMysqlServerCmd();
124 params.internalServerMysqlInitCmd = DbEngineParameters::defaultMysqlInitCmd();
125 params.hostName = QString();
126 params.port = -1;
127 params.connectOptions = QString::fromLatin1("UNIX_SOCKET=%1/mysql.socket").arg(miscDir);
128
129 // ------------------------------------------------------------------------------------
130
131 qCDebug(DIGIKAM_TESTS_LOG) << "Initializing database...";
132 AlbumManager::instance()->changeDatabase(params);
133
134 qCDebug(DIGIKAM_TESTS_LOG) << "Database switch done";
135
136 QTimer::singleShot(5000, &app, SLOT(quit()));
137 app.exec();
138
139 qCDebug(DIGIKAM_TESTS_LOG) << "Shutting down database";
140 ScanController::instance()->shutDown();
141 AlbumManager::instance()->cleanUp();
142
143 qCDebug(DIGIKAM_TESTS_LOG) << "Cleaning DB now";
144 CoreDbAccess::cleanUpDatabase();
145 ThumbsDbAccess::cleanUpDatabase();
146 FaceDbAccess::cleanUpDatabase();
147 }
148
149 else if (switchCondition == QLatin1String("mysqlToSqlite"))
150 {
151 DbEngineParameters params;
152
153 qCDebug(DIGIKAM_TESTS_LOG) << "Setup mysql Database...";
154
155 QString defaultAkDir = DbEngineParameters::internalServerPrivatePath();
156 QString miscDir = QDir(defaultAkDir).absoluteFilePath(QLatin1String("db_misc"));
157 params.databaseType = DbEngineParameters::MySQLDatabaseType();
158 params.databaseNameCore = QLatin1String("digikam");
159 params.databaseNameThumbnails = QLatin1String("digikam");
160 params.databaseNameFace = QLatin1String("digikam");
161 params.userName = QLatin1String("root");
162 params.password = QString();
163 params.internalServer = true;
164 params.internalServerDBPath = QDir::currentPath();
165 params.internalServerMysqlServCmd = DbEngineParameters::defaultMysqlServerCmd();
166 params.internalServerMysqlInitCmd = DbEngineParameters::defaultMysqlInitCmd();
167 params.hostName = QString();
168 params.port = -1;
169 params.connectOptions = QString::fromLatin1("UNIX_SOCKET=%1/mysql.socket").arg(miscDir);
170
171 // ------------------------------------------------------------------------------------
172
173 qCDebug(DIGIKAM_TESTS_LOG) << "Initializing database...";
174 AlbumManager::instance()->changeDatabase(params);
175
176 qCDebug(DIGIKAM_TESTS_LOG) << "Database switch done";
177
178 QTimer::singleShot(5000, &app, SLOT(quit()));
179 app.exec();
180
181 qCDebug(DIGIKAM_TESTS_LOG) << "Shutting down database";
182 ScanController::instance()->shutDown();
183 AlbumManager::instance()->cleanUp();
184
185 qCDebug(DIGIKAM_TESTS_LOG) << "Cleaning DB now";
186 CoreDbAccess::cleanUpDatabase();
187 ThumbsDbAccess::cleanUpDatabase();
188 FaceDbAccess::cleanUpDatabase();
189
190 // ------------------------------------------------------------------------------------
191
192 qCDebug(DIGIKAM_TESTS_LOG) << "Setup sqlite Database...";
193
194 params.databaseType = DbEngineParameters::SQLiteDatabaseType();
195 params.setCoreDatabasePath(QDir::currentPath() + QLatin1String("/digikam-core-test.db"));
196 params.setThumbsDatabasePath(QDir::currentPath() + QLatin1String("/digikam-thumbs-test.db"));
197 params.setFaceDatabasePath(QDir::currentPath() + QLatin1String("/digikam-faces-test.db"));
198 params.legacyAndDefaultChecks();
199
200 qCDebug(DIGIKAM_TESTS_LOG) << "Initializing database...";
201 bool b = AlbumManager::instance()->setDatabase(params, false, IMAGE_PATH);
202
203 qCDebug(DIGIKAM_TESTS_LOG) << "Database initialization done: " << b;
204
205 QTest::qWait(3000);
206
207 //qCDebug(DIGIKAM_TESTS_LOG) << "Shutting down database";
208 //ScanController::instance()->shutDown();
209 //AlbumManager::instance()->cleanUp();
210
211 qCDebug(DIGIKAM_TESTS_LOG) << "Cleaning DB now";
212 CoreDbAccess::cleanUpDatabase();
213 ThumbsDbAccess::cleanUpDatabase();
214 FaceDbAccess::cleanUpDatabase();
215 }
216
217 return 0;
218 }
219