summaryrefslogtreecommitdiff
path: root/gentoobrowse-api/unittests/testMaintenance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gentoobrowse-api/unittests/testMaintenance.cpp')
-rw-r--r--gentoobrowse-api/unittests/testMaintenance.cpp109
1 files changed, 106 insertions, 3 deletions
diff --git a/gentoobrowse-api/unittests/testMaintenance.cpp b/gentoobrowse-api/unittests/testMaintenance.cpp
index 4c3bffe..eab8090 100644
--- a/gentoobrowse-api/unittests/testMaintenance.cpp
+++ b/gentoobrowse-api/unittests/testMaintenance.cpp
@@ -5,8 +5,12 @@
#include <definedDirs.h>
#include <buffer.h>
#include <modifycommand.h>
+#include <git2.h>
+#include <fstream>
-BOOST_GLOBAL_FIXTURE( Maintenance );
+class MaintenanceClientCombined : public Maintenance, public TestClient { };
+
+BOOST_FIXTURE_TEST_SUITE(maintenance, MaintenanceClientCombined)
const boost::filesystem::path treeDir(binDir / "tree" / "gentoobrowse");
const boost::filesystem::path fixturesDir(rootDir / "fixtures");
@@ -36,8 +40,6 @@ class SampleData {
}
};
-BOOST_FIXTURE_TEST_SUITE(tp, TestClient)
-
void dumpDb(DB::ConnectionPtr db);
void
@@ -114,5 +116,106 @@ BOOST_AUTO_TEST_CASE( refreshPackageTree )
m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
+static
+git_oid
+create_initial_commit(git_repository *repo)
+{
+ git_signature * sig;
+ git_index * index;
+ git_oid tree_id, commit_id;
+ git_tree * tree;
+
+ BOOST_REQUIRE_EQUAL(0, git_signature_default(&sig, repo));
+ BOOST_REQUIRE_EQUAL(0, git_repository_index(&index, repo));
+ BOOST_REQUIRE_EQUAL(0, git_index_write_tree(&tree_id, index));
+ BOOST_REQUIRE_EQUAL(0, git_tree_lookup(&tree, repo, &tree_id));
+ BOOST_REQUIRE_EQUAL(0, git_commit_create_v( &commit_id, repo, "HEAD", sig, sig, NULL, "Initial commit", tree, 0));
+
+ git_index_free(index);
+ git_tree_free(tree);
+ git_signature_free(sig);
+ return commit_id;
+}
+
+BOOST_AUTO_TEST_CASE( testUpdateGitRepository )
+{
+ auto db = DB::ConnectionPtr(DB::MockDatabase::openConnectionTo("GentooBrowseAPI"));
+ auto testRepo = binDir / "testrepo";
+ boost::filesystem::remove_all(testRepo);
+ boost::filesystem::create_directories(testRepo);
+ // Create a stub repo to update
+ git_libgit2_init();
+ git_repository * repo;
+ BOOST_REQUIRE_EQUAL(0, git_repository_init(&repo, testRepo.c_str(), false));
+ git_remote * origin;
+ BOOST_REQUIRE_EQUAL(0, git_remote_create(&origin, repo, "origin", "http://git.randomdan.homeip.net/git/portage"));
+ git_remote_free(origin);
+ create_initial_commit(repo);
+ git_repository_free(repo);
+ git_libgit2_shutdown();
+ // Reference it
+ auto insRepo = db->modify("INSERT INTO gentoobrowse.repos(name, path, upstream, branch) VALUES(?, ?, ?, ?)");
+ insRepo->bindParamS(0, "testrepo");
+ insRepo->bindParamS(1, testRepo.string());
+ insRepo->bindParamS(2, "origin");
+ insRepo->bindParamS(3, "master");
+ insRepo->execute();
+
+ // Update
+ m->updateRepositories();
+
+ // Verify checkout
+ BOOST_REQUIRE(boost::filesystem::is_directory(testRepo));
+ BOOST_REQUIRE(boost::filesystem::is_directory(testRepo / "virtual"));
+ BOOST_REQUIRE(boost::filesystem::is_directory(testRepo / "net-misc"));
+ BOOST_REQUIRE(boost::filesystem::is_directory(testRepo / "net-misc" / "gentoobrowse-api"));
+ BOOST_REQUIRE(boost::filesystem::is_regular_file(testRepo / "net-misc" / "gentoobrowse-api" / "Manifest"));
+}
+
+BOOST_AUTO_TEST_CASE( testRefreshGitRepository )
+{
+ auto db = DB::ConnectionPtr(DB::MockDatabase::openConnectionTo("GentooBrowseAPI"));
+ auto insRepo = db->modify("INSERT INTO gentoobrowse.repos(name, path, lastcommit) VALUES(?, ?, ?)");
+ insRepo->bindParamS(0, "gentoo");
+ insRepo->bindParamS(1, "/usr/portage");
+ insRepo->bindParamS(2, "8292397bf6a8c91215b03a558e8bc843aff25b64");
+ insRepo->execute();
+ std::ifstream data((rootDir / "gitdata.sql").string());
+ db->executeScript(data, rootDir);
+
+ BOOST_TEST_CONTEXT("Intiial values") {
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT name FROM gentoobrowse.packages p WHERE p.packageid = 9)SQL", std::string, "libkgapi");
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT p.categoryid FROM gentoobrowse.categories c, gentoobrowse.packages p
+ WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='net-libs')SQL", int64_t, 6);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.packageid = 9)SQL", int64_t, 2);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.ebuildid in (12, 13))SQL", int64_t, 2);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT MIN(e.packageid) FROM gentoobrowse.ebuilds e WHERE e.ebuildid in (12, 13))SQL", int64_t, 9);
+ }
+
+ // Import it
+ m->refreshPackageTreeGit();
+
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT lastCommit FROM gentoobrowse.repos)SQL", std::string, "40539afe6705aee26a55bb861f5e892ae7240057");
+ BOOST_TEST_CONTEXT("libkgapi was moved correctly") {
+ BOOST_TEST_CONTEXT("from net-libs to kde-apps") {
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.categories c, gentoobrowse.packages p
+ WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='kde-apps')SQL", int64_t, 1);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.categories c, gentoobrowse.packages p
+ WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='net-libs')SQL", int64_t, 0);
+ }
+ BOOST_TEST_CONTEXT("And it maintained its original packageId, but changed categoryId") {
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT p.packageid FROM gentoobrowse.categories c, gentoobrowse.packages p
+ WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='kde-apps')SQL", int64_t, 9);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT p.categoryid FROM gentoobrowse.categories c, gentoobrowse.packages p
+ WHERE c.categoryid = p.categoryid AND p.name = 'libkgapi' AND c.name='kde-apps')SQL", int64_t, 8);
+ }
+ BOOST_TEST_CONTEXT("Original ebuilds in moved package were not deleted and replaced") {
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.packageid = 9)SQL", int64_t, 2);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT COUNT(*) FROM gentoobrowse.ebuilds e WHERE e.ebuildid in (12, 13))SQL", int64_t, 2);
+ SQL_REQUIRE_EQUAL(R"SQL(SELECT MIN(e.packageid) FROM gentoobrowse.ebuilds e WHERE e.ebuildid in (12, 13))SQL", int64_t, 9);
+ }
+ }
+}
+
BOOST_AUTO_TEST_SUITE_END();