Since I have the
Configuration class ready, is time to integrate it into my
FileBot class. As for now, only
loadRemoteFS() is requiring data from INDEX file. Thus, integration should be much easier. Before this, I am using a list for temporary mimic the data available from INDEX file. This is what I do in my unit test (testSearch.cpp):
/***** FileBot.cpp *****/
std::list<string> FileBot::loadRemoteFS(vector<string> fileList, bool showCaptureList) {
for( vector<string>::iterator it = fileList.begin(); it != fileList.end(); it++ ) {
}
...
...
}
/***** testSearch.cpp *****/
BOOST_AUTO_TEST_CASE(TL_5, *boost::unit_test::precondition(skipTest(false)))
{
...
...
vector<string> keyList;
keyList.push_back("/home/puiyee/workspaceqt/debug/FolderA");
keyList.push_back("/home/puiyee/workspaceqt/debug/FolderA/subA/subB/file_3.txt");
vector<string> found;
fb.loadRemoteFS(keyList);
...
}
Now I have replaced this chunk of code with a more elegant piece. I am creating a real XML file to mimic the INDEX file in
createDestinationConfig() during the test. And now the
loadRemoteFS() is no longer taking any
std::list as input parameter, it will digest the INDEX file, it knows what data to look for, shallow it, and then produce the output.
/***** FileBot.cpp *****/
FileNode* FileBot::loadRemoteFS()
{
...
pugi::xpath_node_set fileList = Configuration::getInstance()->retrieveRemoteFiles("/backup/file");
pugi::xpath_node_set::const_iterator it = fileList.begin();
for( ; it != fileList.end(); it++ ) {
}
...
...
}
/***** testSearch.cpp *****/
BOOST_AUTO_TEST_CASE(TL_1, *boost::unit_test::precondition(skipTest(false)))
{
...
...
std::vector<string> keyList;
keyList.push_back("/home/puiyee/workspaceqt/debug/FolderA/subA/subB/file_3.txt");
FileBotUnderTest fb;
fb.createDestinationConfig("/home/puiyee/workspaceqt/debug/FolderA", keyList);
fb.loadRemoteFS();
...
}
Don't confuse that the
keyList mention in the test case above is required by the
createDestinationConfig(). And also the first item of
keyList, which indicate the root path of remote path is also not require anymore. Since it produces output, I need to verify the output to ensure consistency. I use this code at the end of unit test.
BOOST_AUTO_TEST_CASE(TL_1, *boost::unit_test::precondition(skipTest(true)))
{
...
...
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("backup.xml");
if( result ) {
pugi::xpath_node_set files = doc.select_nodes("/backup/file");
BOOST_TEST(files.size() == 0);
files = doc.select_nodes("/backup/recover/dest");
for( pugi::xpath_node_set::const_iterator it = files.begin(); it != files.end(); it++ ) {
pugi::xml_node file = ((pugi::xpath_node)*it).node();
string value = file.text().get();
BOOST_TEST(value.compare("/home/puiyee/workspaceqt/debug/FolderA/sub/file_2.txt") == 0);
}
files = doc.select_nodes("/backup/recover/src");
BOOST_TEST(files.size() == 0);
}
In this unit test, I will load the
backup.xml and then verify the
/backup/recover/dest does created in following format.
<backup>
<recover>
<dest></dest>
</recover>
</backup>
And same goes to
/backup/recover/src.
No comments:
Post a Comment