diff options
Diffstat (limited to 'gentoobrowse-api/unittests/testMaintenance.cpp')
-rw-r--r-- | gentoobrowse-api/unittests/testMaintenance.cpp | 109 |
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(); |