blob: 6936d573a4ca64b29b775069cf40efcaf1609d69 [file] [log] [blame]
Zhenkai Zhue29616f2013-01-14 15:40:57 -08001#include "sync-core.h"
2
3#include <boost/test/unit_test.hpp>
4#include <boost/filesystem.hpp>
5
6using namespace std;
7using namespace Ccnx;
8using namespace boost::filesystem;
9
10BOOST_AUTO_TEST_SUITE(SyncCoreTests)
11
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080012void callback(const SyncStateMsgPtr &msg)
Zhenkai Zhue29616f2013-01-14 15:40:57 -080013{
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080014 BOOST_CHECK(msg->state_size() > 0);
Zhenkai Zhue29616f2013-01-14 15:40:57 -080015}
16
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080017void checkRoots(const HashPtr &root1, const HashPtr &root2)
Zhenkai Zhue29616f2013-01-14 15:40:57 -080018{
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080019 BOOST_CHECK_EQUAL(*root1, *root2);
Zhenkai Zhue29616f2013-01-14 15:40:57 -080020}
21
22BOOST_AUTO_TEST_CASE(SyncCoreTest)
23{
24 string dir = "./SyncCoreTest";
Zhenkai Zhu05de64a2013-01-14 15:48:23 -080025 string dir1 = "./SyncCoreTest/1";
26 string dir2 = "./SyncCoreTest/2";
Zhenkai Zhue29616f2013-01-14 15:40:57 -080027 Name user1("/joker");
28 Name loc1("/gotham1");
29 Name user2("/darkknight");
30 Name loc2("/gotham2");
31 Name syncPrefix("/broadcast/darkknight");
32 CcnxWrapperPtr c1(new CcnxWrapper());
33 CcnxWrapperPtr c2(new CcnxWrapper());
Zhenkai Zhub330aed2013-01-17 13:29:37 -080034 SyncLogPtr log1(new SyncLog(dir1, user1.toString()));
35 SyncLogPtr log2(new SyncLog(dir2, user2.toString()));
36
37 SchedulerPtr scheduler(new Scheduler());
Zhenkai Zhue29616f2013-01-14 15:40:57 -080038
39 // clean the test dir
40 path d(dir);
41 if (exists(d))
42 {
43 remove_all(d);
44 }
45
Zhenkai Zhub330aed2013-01-17 13:29:37 -080046 SyncCore *core1 = new SyncCore(log1, user1, loc1, syncPrefix, bind(callback, _1), c1, scheduler);
Zhenkai Zhue29616f2013-01-14 15:40:57 -080047 usleep(10000);
Zhenkai Zhub330aed2013-01-17 13:29:37 -080048 SyncCore *core2 = new SyncCore(log2, user2, loc2, syncPrefix, bind(callback, _1), c2, scheduler);
Zhenkai Zhue573ae82013-01-15 13:15:52 -080049 usleep(1000000);
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080050 checkRoots(core1->root(), core2->root());
Zhenkai Zhu6e7d4d22013-01-15 18:18:18 -080051
52 cout << "\n\n\n\n\n\n----------\n";
Zhenkai Zhue29616f2013-01-14 15:40:57 -080053 core1->updateLocalState(1);
54 usleep(100000);
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080055 checkRoots(core1->root(), core2->root());
56 BOOST_CHECK_EQUAL(core2->seq(user1), 1);
Zhenkai Zhue29616f2013-01-14 15:40:57 -080057
58 core1->updateLocalState(5);
59 usleep(100000);
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080060 checkRoots(core1->root(), core2->root());
61 BOOST_CHECK_EQUAL(core2->seq(user1), 5);
Zhenkai Zhue29616f2013-01-14 15:40:57 -080062
63 core2->updateLocalState(10);
64 usleep(100000);
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080065 checkRoots(core1->root(), core2->root());
66 BOOST_CHECK_EQUAL(core1->seq(user2), 10);
Zhenkai Zhue29616f2013-01-14 15:40:57 -080067
68 // simple simultaneous data generation
Zhenkai Zhu9f31e862013-01-15 23:56:31 -080069 cout << "\n\n\n\n\n\n----------Simultaneous\n";
Zhenkai Zhue29616f2013-01-14 15:40:57 -080070 core1->updateLocalState(11);
Alexander Afanasyevbeee0b42013-01-16 18:25:08 -080071 usleep(100);
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080072 core2->updateLocalState(15);
Zhenkai Zhue573ae82013-01-15 13:15:52 -080073 usleep(1000000);
Zhenkai Zhu9501b8b2013-01-17 12:37:00 -080074 checkRoots(core1->root(), core2->root());
75 BOOST_CHECK_EQUAL(core1->seq(user2), 15);
76 BOOST_CHECK_EQUAL(core2->seq(user1), 11);
Zhenkai Zhue29616f2013-01-14 15:40:57 -080077
78 // clean the test dir
79 if (exists(d))
80 {
81 remove_all(d);
82 }
83}
84
85BOOST_AUTO_TEST_SUITE_END()