4 #include <boost/test/unit_test.hpp>
7 #include "zypp/PoolQuery.h"
8 #include "zypp/PoolQueryUtil.tcc"
9 #include "zypp/TmpPath.h"
10 #include "zypp/Locks.h"
11 #include "TestSetup.h"
13 #define BOOST_TEST_MODULE Locks
19 using namespace boost::unit_test;
21 bool isLocked( const sat::Solvable & solvable )
23 zypp::PoolItem pi( zypp::ResPool::instance().find( solvable ) );
24 if( pi.status().isLocked() )
29 static TestSetup test( TestSetup::initLater );
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" );
37 ~TestInit() { test.reset(); }
39 BOOST_GLOBAL_FIXTURE( TestInit );
41 /////////////////////////////////////////////////////////////////////////////
43 /////////////////////////////////////////////////////////////////////////////
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)
50 cout << "****001****" << endl;
52 q.addString("zypper");
53 Locks::instance().addLock(q);
54 for_(it,q.begin(),q.end())
56 BOOST_CHECK(isLocked(*it));
58 Locks::instance().removeLock(q); //clear before next test
61 BOOST_AUTO_TEST_CASE(locks_save_load)
63 cout << "****save/load****" << endl;
64 Pathname src(TESTS_SRC_DIR);
65 src += "zypp/data/Locks/locks";
66 Locks::instance().readAndApply(src);
68 q.addString("zypper");
69 for_(it,q.begin(),q.end())
71 BOOST_CHECK(isLocked(*it));
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);
81 for_(it,q.begin(),q.end())
83 BOOST_CHECK(!isLocked(*it));
85 BOOST_CHECK(Locks::instance().size()==0);
89 BOOST_AUTO_TEST_CASE(locks_save_without_redundancy)
91 cout << "****save without redundancy****" << endl;
93 q.addString("zypper");
94 Locks& locks = Locks::instance();
98 BOOST_CHECK( locks.size()==1 );
101 BOOST_CHECK( locks.size()==1 );
104 BOOST_CHECK( locks.size() == 0 );
107 BOOST_AUTO_TEST_CASE( locks_empty )
109 cout << "****test and clear empty locks****" << endl;
111 q.addString("foo-bar-nonexist");
112 Locks& locks = Locks::instance();
114 locks.merge(); //only need merge list
115 BOOST_CHECK( locks.existEmpty() );
117 BOOST_CHECK( locks.size() == 0 );