3 #ifdef BOOST_AUTO_TEST_MAIN
4 #undef BOOST_AUTO_TEST_MAIN
6 #include <boost/test/auto_unit_test.hpp>
7 #include <boost/test/parameterized_test.hpp>
8 #include <boost/test/unit_test_log.hpp>
10 #include "zypp/MediaSetAccess.h"
17 using namespace boost::unit_test;
20 class SimpleVerifier : public media::MediaVerifierBase
24 SimpleVerifier( const std::string &id )
29 virtual bool isDesiredMedia(const media::MediaAccessRef &ref)
31 return ref->doesFileExist(Pathname("/." + _media_id ));
35 std::string _media_id;
38 bool check_file_exists(const Pathname &path)
42 if ((file = fopen(path.asString().c_str(), "r")) == NULL) return false;
49 * Check how MediaSetAccess::rewriteUrl() works.
51 void msa_url_rewrite()
54 MediaSetAccess::rewriteUrl(Url("iso:/?iso=/path/to/CD1.iso"), 1).asString(),
55 Url("iso:/?iso=/path/to/CD1.iso").asString());
58 MediaSetAccess::rewriteUrl(Url("iso:/?iso=/path/to/CD1.iso"), 2).asString(),
59 Url("iso:/?iso=/path/to/CD2.iso").asString());
62 MediaSetAccess::rewriteUrl(Url("iso:/?iso=/path/to/CD1.iso"), 13).asString(),
63 Url("iso:/?iso=/path/to/CD13.iso").asString());
66 MediaSetAccess::rewriteUrl(Url("iso:/?iso=/path/to/cd1.iso"), 2).asString(),
67 Url("iso:/?iso=/path/to/cd2.iso").asString());
70 MediaSetAccess::rewriteUrl(Url("iso:/?iso=/path/to/cd2.iso"), 1).asString(),
71 Url("iso:/?iso=/path/to/cd1.iso").asString());
74 MediaSetAccess::rewriteUrl(Url("iso:/?iso=/path/to/dvd1.iso"), 2).asString(),
75 Url("iso:/?iso=/path/to/dvd2.iso").asString());
78 MediaSetAccess::rewriteUrl(Url("dir:/path/to/CD1"), 2).asString(),
79 Url("dir:/path/to/CD2").asString());
81 // trailing slash check
83 MediaSetAccess::rewriteUrl(Url("dir:/path/to/CD1/"), 2).asString(),
84 Url("dir:/path/to/CD2/").asString());
87 MediaSetAccess::rewriteUrl(Url("nfs://nfs-server/exported/path/to/dvd1"), 2).asString(),
88 Url("nfs://nfs-server/exported/path/to/dvd2").asString());
90 // single media check shouldn't this fail somehow??
92 MediaSetAccess::rewriteUrl(Url("http://ftp.opensuse.org/pub/opensuse/distribution/SL-OSS-factory/inst-source"), 2).asString(),
93 Url("http://ftp.opensuse.org/pub/opensuse/distribution/SL-OSS-factory/inst-source").asString());
97 * Provide files from set without verifiers.
99 void msa_provide_files_set(const string &urlstr)
102 MediaSetAccess setaccess(url);
104 Pathname file1 = setaccess.provideFile("/test.txt", 1);
105 BOOST_CHECK(check_file_exists(file1) == true);
107 Pathname file2 = setaccess.provideFile("/test.txt", 2);
108 BOOST_CHECK(check_file_exists(file2) == true);
110 Pathname file3 = setaccess.provideFile("/test.txt", 3);
111 BOOST_CHECK(check_file_exists(file3) == true);
115 * Provide files from set with verifiers.
117 void msa_provide_files_set_verified(const string &urlstr)
120 MediaSetAccess setaccess(url);
122 setaccess.setVerifier(1, media::MediaVerifierRef(new SimpleVerifier("media1")));
123 setaccess.setVerifier(2, media::MediaVerifierRef(new SimpleVerifier("media2")));
124 setaccess.setVerifier(3, media::MediaVerifierRef(new SimpleVerifier("media3")));
126 // provide file from media1
127 Pathname file1 = setaccess.provideFile("/test.txt", 1);
128 BOOST_CHECK(check_file_exists(file1) == true);
130 // provide file from invalid media
131 BOOST_CHECK_THROW(setaccess.provideFile("/test.txt", 2),
132 media::MediaNotDesiredException);
134 // provide file from media3
135 Pathname file3 = setaccess.provideFile("/test.txt", 3);
136 BOOST_CHECK(check_file_exists(file3) == true);
140 * Provide file from single media with verifier.
142 void msa_provide_files_single(const string &urlstr)
145 MediaSetAccess setaccess(url);
146 setaccess.setVerifier(1, media::MediaVerifierRef(new SimpleVerifier("media")));
148 // provide file from media
149 Pathname file = setaccess.provideFile("/test.txt", 1);
150 BOOST_CHECK(check_file_exists(file) == true);
152 // provide non-existent file
153 // (default answer from callback should be ABORT)
154 BOOST_CHECK_THROW(setaccess.provideFile("/imnothere", 2),
155 media::MediaFileNotFoundException);
159 * Provide directory from src/cd1.
161 void msa_provide_dir(const string &urlstr)
164 MediaSetAccess setaccess(url);
166 Pathname dir = setaccess.provideDir("/dir", false, 1);
168 Pathname file1 = dir + "/file1";
169 BOOST_CHECK(check_file_exists(file1) == true);
171 Pathname file2 = dir + "/file2";
172 BOOST_CHECK(check_file_exists(file2) == true);
174 // provide non-existent dir
175 // (default answer from callback should be ABORT)
176 BOOST_CHECK_THROW(setaccess.provideDir("/imnothere", 2),
177 media::MediaFileNotFoundException);
179 // This can't be properly tested with 'dir' schema, probably only curl
180 // schemas (http, ftp) where download is actually needed.
181 // Other schemas just get mounted onto a local dir and the whole subtree
182 // is automatically available that way.
183 // BOOST_CHECK(check_file_exists(dir + "/subdir/file") == false);
184 // BOOST_CHECK(check_file_exists(dir + "/subdir") == false);
189 * Provide directory from src/cd1 (recursively).
191 void msa_provide_dirtree(const string &urlstr)
194 MediaSetAccess setaccess(url);
196 Pathname dir = setaccess.provideDir("/dir", true, 1);
198 Pathname file1 = dir + "/file1";
199 BOOST_CHECK(check_file_exists(file1) == true);
201 Pathname file2 = dir + "/file2";
202 BOOST_CHECK(check_file_exists(file2) == true);
204 Pathname file3 = dir + "/subdir/file";
205 BOOST_CHECK(check_file_exists(file3) == true);
211 * test data dir structure:
232 init_unit_test_suite( int argc, char *argv[] )
236 cout << "mediasetaccesstest:"
237 " absolute path to local directory with test data required as parameter"
239 return (test_suite *)0;
242 test_suite* test= BOOST_TEST_SUITE("MediaSetAccessTest");
245 string datadir = argv[1];
246 std::string const params[] = {"dir:" + datadir + "/src1/cd1"};
247 std::string const params_single[] = {"dir:" + datadir + "/src2"};
250 test->add(BOOST_TEST_CASE(&msa_url_rewrite));
252 // provide files from media set
253 test->add(BOOST_PARAM_TEST_CASE(&msa_provide_files_set,
254 (std::string const*)params, params+1));
256 // provide files from media set with verifier
257 test->add(BOOST_PARAM_TEST_CASE(&msa_provide_files_set_verified,
258 (std::string const*)params, params+1));
260 // provide file from single media
261 test->add(BOOST_PARAM_TEST_CASE(&msa_provide_files_single,
262 (std::string const*)params_single, params_single+1));
265 test->add(BOOST_PARAM_TEST_CASE(&msa_provide_dir,
266 (std::string const*)params, params+1));
268 // provide directory tree
269 test->add(BOOST_PARAM_TEST_CASE(&msa_provide_dirtree,
270 (std::string const*)params, params+1));
275 // vim: set ts=2 sts=2 sw=2 ai et: