Imported Upstream version 16.6.0
[platform/upstream/libzypp.git] / tests / zypp / ExtendedPool_test.cc
1 #include <boost/test/auto_unit_test.hpp>
2
3 #include <iostream>
4
5 #include "TestSetup.h"
6 #include <zypp/base/LogTools.h>
7
8 #include <zypp/ResObjects.h>
9 #include <zypp/ResPool.h>
10
11 using boost::unit_test::test_case;
12 using std::cin;
13 using std::cout;
14 using std::cerr;
15 using std::endl;
16 using namespace zypp;
17
18 static TestSetup test;
19
20 void testcase_init()
21 {
22 //   cout << "+++[repoinit]=======================" << endl;
23   test.loadTestcaseRepos( TESTS_SRC_DIR"/data/PoolReuseIds/SeqA" );
24 //   for ( auto && pi : ResPool::instance() )
25 //     cout << pi << " " << pi.resolvable() << endl;
26 //   cout << "---[repoinit]=======================" << endl;
27 }
28
29 void testcase_init2()
30 {
31 //   cout << "+++[repoinit2]=======================" << endl;
32   sat::Pool::instance().reposEraseAll();
33   test.loadTestcaseRepos( TESTS_SRC_DIR"/data/PoolReuseIds/SeqB" );
34 //   for ( auto && pi : ResPool::instance() )
35 //     cout << pi << " " << pi.resolvable() << endl;
36 //   cout << "---[repoinit2]=======================" << endl;
37 }
38
39 void checkpi( const PoolItem & pi )
40 {
41   BOOST_CHECK( pi.resolvable() );
42   BOOST_CHECK_EQUAL( pi.id(),   pi.resolvable()->id() );
43   BOOST_CHECK_EQUAL( bool(asKind<Package>( pi.resolvable() )),      isKind<Package>(pi) );
44   BOOST_CHECK_EQUAL( bool(asKind<Patch>( pi.resolvable() )),        isKind<Patch>(pi) );
45   BOOST_CHECK_EQUAL( bool(asKind<Pattern>( pi.resolvable() )),      isKind<Pattern>(pi) );
46   BOOST_CHECK_EQUAL( bool(asKind<Product>( pi.resolvable() )),      isKind<Product>(pi) );
47   BOOST_CHECK_EQUAL( bool(asKind<SrcPackage>( pi.resolvable() )),   isKind<SrcPackage>(pi) );
48   BOOST_CHECK_EQUAL( bool(asKind<Application>( pi.resolvable() )),  isKind<Application>(pi) );
49 }
50
51 void repocheck()
52 {
53 //   cout << "+++[repocheck]======================" << endl;
54   for ( auto && pi : ResPool::instance() )
55   {
56 //     cout << "??? " << pi << endl;
57     checkpi( pi );
58   }
59 //   cout << "---[repocheck]======================" << endl;
60 }
61
62 ///////////////////////////////////////////////////////////////////
63 // Check that after ERASING ALL REPOS and loading a new one, ResPool
64 // actually creates new PoolItems rather than reusing already existing
65 // ones.
66 //
67 // Adding/removing repos will not reuse poolIDs unless actually all
68 // repos are removed from the pool. In this case ResPool must invalidate
69 // ALL existing PoolItems (especially the Resolvable Pointers inside).
70 //
71 //  SeqA                  SeqB
72 //  (1)package          - (1)application
73 //  (2)pattern          - (2)package
74 //  ...                   ...
75 //
76 // The two test repos have Resolvables of different kind in different
77 // order. If ResPool fails to recreate the PoolItem, we'll experience
78 // cast errors. PoolItem(1) will claim to be an application, but the
79 // Resolvable is still the original one created for a package...
80 ///////////////////////////////////////////////////////////////////
81
82 BOOST_AUTO_TEST_CASE(t_1)       { testcase_init(); }
83 BOOST_AUTO_TEST_CASE(t_2)       { repocheck(); }
84 BOOST_AUTO_TEST_CASE(t_4)       { testcase_init2(); }
85 BOOST_AUTO_TEST_CASE(t_5)       { repocheck(); }