00001
00002
00003
00004
00005 #include "libtorrent/session.hpp"
00006 #include "libtorrent/hasher.hpp"
00007 #include <boost/thread.hpp>
00008 #include <boost/tuple/tuple.hpp>
00009 #include <boost/filesystem/operations.hpp>
00010
00011 #include "test.hpp"
00012 #include "setup_transfer.hpp"
00013 #include "libtorrent/extensions/metadata_transfer.hpp"
00014
00015 using boost::filesystem::remove_all;
00016
00017 void test_transfer(bool clear_files = true, bool disconnect = false)
00018 {
00019 using namespace libtorrent;
00020
00021 session ses1;
00022 session ses2(fingerprint("LT", 0, 1, 0, 0), std::make_pair(49000, 50000));
00023 ses1.add_extension(&create_metadata_plugin);
00024 ses2.add_extension(&create_metadata_plugin);
00025 torrent_handle tor1;
00026 torrent_handle tor2;
00027
00028 boost::tie(tor1, tor2) = setup_transfer(ses1, ses2, clear_files);
00029
00030 for (int i = 0; i < 50; ++i)
00031 {
00032
00033
00034 if (!disconnect) tor2.status();
00035 std::auto_ptr<alert> a;
00036 a = ses1.pop_alert();
00037 if (a.get())
00038 std::cerr << "ses1: " << a->msg() << "\n";
00039
00040 a = ses2.pop_alert();
00041 if (a.get())
00042 std::cerr << "ses2: " << a->msg() << "\n";
00043
00044 if (disconnect && tor2.is_valid()) ses2.remove_torrent(tor2);
00045 if (!disconnect && tor2.has_metadata()) break;
00046 sleep(100);
00047 }
00048
00049 if (disconnect) return;
00050
00051 TEST_CHECK(tor2.has_metadata());
00052 std::cerr << "waiting for transfer to complete\n";
00053
00054 for (int i = 0; i < 50; ++i)
00055 {
00056 tor2.status();
00057 if (tor2.is_seed()) break;
00058 sleep(100);
00059 }
00060
00061 TEST_CHECK(tor2.is_seed());
00062 if (tor2.is_seed()) std::cerr << "done\n";
00063 }
00064
00065 int test_main()
00066 {
00067 using namespace libtorrent;
00068 using namespace boost::filesystem;
00069
00070
00071 test_transfer(true, true);
00072
00073
00074 test_transfer(true);
00075
00076
00077 test_transfer(false);
00078
00079 remove_all("./tmp1");
00080 remove_all("./tmp2");
00081
00082 return 0;
00083 }
00084