blob: 68cc69b80266bf8c5b735709d8f8376ef1c39353 [file] [log] [blame]
#include "sync-core.h"
#include <boost/test/unit_test.hpp>
#include <boost/filesystem.hpp>
using namespace std;
using namespace Ccnx;
using namespace boost::filesystem;
BOOST_AUTO_TEST_SUITE(SyncCoreTests)
SyncStateMsgPtr msg1;
SyncStateMsgPtr msg2;
void callback1(const SyncStateMsgPtr &ptr)
{
msg1 = ptr;
}
void callback2(const SyncStateMsgPtr &ptr)
{
msg2 = ptr;
}
BOOST_AUTO_TEST_CASE(SyncCoreTest)
{
string dir = "./SyncCoreTest";
string dir1 = "./SyncCoreTest/1";
string dir2 = "./SyncCoreTest/2";
Name user1("/joker");
Name loc1("/gotham1");
Name user2("/darkknight");
Name loc2("/gotham2");
Name syncPrefix("/broadcast/darkknight");
CcnxWrapperPtr c1(new CcnxWrapper());
CcnxWrapperPtr c2(new CcnxWrapper());
SchedulerPtr scheduler(new Scheduler());
scheduler->start();
// clean the test dir
path d(dir);
if (exists(d))
{
remove_all(d);
}
SyncCore *core1 = new SyncCore(dir1, user1, loc1, syncPrefix, bind(callback1, _1), c1, scheduler);
usleep(10000);
SyncCore *core2 = new SyncCore(dir2, user2, loc2, syncPrefix, bind(callback2, _1), c2, scheduler);
usleep(10000);
SyncState state;
core1->updateLocalState(1);
usleep(100000);
BOOST_CHECK_EQUAL(msg2->state_size(), 1);
state = msg2->state(0);
BOOST_CHECK_EQUAL(state.seq(), 1);
BOOST_CHECK_EQUAL(user1, state.name());
BOOST_CHECK_EQUAL(loc1, state.locator());
core1->updateLocalState(5);
usleep(100000);
state = msg2->state(0);
BOOST_CHECK_EQUAL(state.seq(), 5);
core2->updateLocalState(10);
usleep(100000);
state = msg1->state(0);
BOOST_CHECK_EQUAL(state.seq(), 10);
// simple simultaneous data generation
core1->updateLocalState(11);
core2->updateLocalState(12);
usleep(100000);
state = msg1->state(0);
BOOST_CHECK_EQUAL(state.seq(), 12);
state = msg2->state(0);
BOOST_CHECK_EQUAL(state.seq(), 11);
// clean the test dir
if (exists(d))
{
remove_all(d);
}
}
BOOST_AUTO_TEST_SUITE_END()