Imported Upstream version 17.22.1
[platform/upstream/libzypp.git] / tests / zypp / Locks_test.cc
1 #include <stdio.h>
2 #include <iostream>
3 #include <iterator>
4 #include <boost/test/unit_test.hpp>
5 #include <list>
6
7 #include "zypp/PoolQuery.h"
8 #include "zypp/PoolQueryUtil.tcc"
9 #include "zypp/TmpPath.h"
10 #include "zypp/Locks.h"
11 #include "TestSetup.h"
12
13 #define BOOST_TEST_MODULE Locks
14
15 using std::cout;
16 using std::endl;
17 using std::string;
18 using namespace zypp;
19 using namespace boost::unit_test;
20
21 bool isLocked( const sat::Solvable & solvable )
22 {
23   zypp::PoolItem pi( zypp::ResPool::instance().find( solvable ) );
24   if( pi.status().isLocked() )
25     return true;
26   return false;
27 }
28
29 static TestSetup test( TestSetup::initLater );
30 struct TestInit {
31   TestInit() {
32     test = TestSetup( Arch_x86_64 );
33     //test.loadTarget(); // initialize and load target
34     test.loadRepo( TESTS_SRC_DIR "/data/openSUSE-11.1", "opensuse" );
35     test.loadRepo( TESTS_SRC_DIR "/data/OBS_zypp_svn-11.1", "@System" );
36   }
37   ~TestInit() { test.reset(); }
38 };
39 BOOST_GLOBAL_FIXTURE( TestInit );
40
41 /////////////////////////////////////////////////////////////////////////////
42 //  0xx basic queries
43 /////////////////////////////////////////////////////////////////////////////
44
45 // default query + one search string
46 // q.addString("foo");
47 // result: all resolvables having at least one attribute matching foo
48 BOOST_AUTO_TEST_CASE(locks_1)
49 {
50   cout << "****001****"  << endl;
51   PoolQuery q;
52   q.addString("zypper");
53   Locks::instance().addLock(q);
54   for_(it,q.begin(),q.end())
55   {
56     BOOST_CHECK(isLocked(*it));
57   }
58   Locks::instance().removeLock(q); //clear before next test
59 }
60
61 BOOST_AUTO_TEST_CASE(locks_save_load)
62 {
63   cout << "****save/load****"  << endl;
64   Pathname src(TESTS_SRC_DIR);
65     src += "zypp/data/Locks/locks";
66   Locks::instance().readAndApply(src);
67   PoolQuery q;
68   q.addString("zypper");
69   for_(it,q.begin(),q.end())
70   {
71     BOOST_CHECK(isLocked(*it));
72   }
73 #if 1 
74   filesystem::TmpFile testfile;
75   //Pathname testfile(TESTS_SRC_DIR);
76     //  testfile += "/zypp/data/Locks/testlocks";
77   Locks::instance().removeLock(q); 
78   Locks::instance().save(testfile);
79   Locks::instance().readAndApply(testfile);
80   //now unlocked
81   for_(it,q.begin(),q.end())
82   {
83     BOOST_CHECK(!isLocked(*it));
84   }
85   BOOST_CHECK(Locks::instance().size()==0);
86 #endif
87 }
88
89 BOOST_AUTO_TEST_CASE(locks_save_without_redundancy)
90 {
91   cout << "****save without redundancy****"  << endl;
92   PoolQuery q;
93   q.addString("zypper");
94   Locks& locks = Locks::instance();
95   locks.addLock(q);
96   locks.addLock(q);
97   locks.merge();
98   BOOST_CHECK( locks.size()==1 );
99   locks.addLock(q);
100   locks.merge();
101   BOOST_CHECK( locks.size()==1 );
102   locks.removeLock(q);
103   locks.merge();
104   BOOST_CHECK( locks.size() == 0 );
105 }
106
107 BOOST_AUTO_TEST_CASE( locks_empty )
108 {
109   cout << "****test and clear empty locks****"  << endl;
110   PoolQuery q;
111   q.addString("foo-bar-nonexist");
112   Locks& locks = Locks::instance();
113   locks.addLock(q);
114   locks.merge(); //only need merge list
115   BOOST_CHECK( locks.existEmpty() );
116   locks.removeEmpty();
117   BOOST_CHECK( locks.size() == 0 );
118 }