#include #include "inputcsv.hh" #include "stock.hh" #include #include #include class InputCSV_test: public CxxTest::TestSuite { private: std::string csv_file_name ; // Test CSV file name std::vector csv_lines ; // Test CSV file contents std::vector aps ; // List of test AccessPoint public: InputCSV_test(void) { // If we cannot open the file, we want to stop the test CxxTest::setAbortTestOnFail(true) ; // Clear the stock Stock::clear() ; // Creating AP list aps.push_back(AccessPoint(Point3D(1,2,3), "11:22:33:44:55:01")) ; aps.push_back(AccessPoint(Point3D(4,5,6), "11:22:33:44:55:02")) ; aps.push_back(AccessPoint(Point3D(7,8,9), "11:22:33:44:55:03")) ; // Filling name and contents of the CSV test file csv_file_name = "/tmp/InputCSV_test_csv_file.csv" ; csv_lines.push_back("\ \n \n\ aa:bb:cc:dd:ee:ff;1265120910725;0.00;0.00;0.00;0\ ;" + aps[0].get_mac_addr() + ";-58\ ;" + aps[2].get_mac_addr() + ";-50\ ;" + aps[1].get_mac_addr() + ";-42\ ;" + aps[0].get_mac_addr() + ";-55\ ;" + aps[1].get_mac_addr() + ";-37\ \n") ; csv_lines.push_back("\ aa:bb:cc:dd:ee:77;1265120911234;0.00;0.00;0.00;0\ ;" + aps[2].get_mac_addr() + ";-59\ ;" + aps[0].get_mac_addr() + ";-51\ ;" + aps[1].get_mac_addr() + ";-70\ ;" + aps[1].get_mac_addr() + ";-21\ ;" + aps[0].get_mac_addr() + ";-19\ \n \n\ \n\t\n\ \n \t \n\ \n") ; csv_lines.push_back("\ \taa:bb:cc:dd:ee:ff;1265120912345;0.00;0.00;0.00;0\ ;" + aps[2].get_mac_addr() + ";-56\ ;" + aps[1].get_mac_addr() + ";-45\ ;" + aps[0].get_mac_addr() + ";-54\ ;" + aps[1].get_mac_addr() + ";-23\ ;" + aps[0].get_mac_addr() + ";-32\ \n\n\t\n") ; // Opening the file std::ofstream csv_file ; csv_file.open(csv_file_name.c_str()) ; if (! csv_file) TS_FAIL("Cannot open test CSV file for creation!") ; // Writing contents to the file for (std::vector::const_iterator i = csv_lines.begin() ; i != csv_lines.end() ; ++i) csv_file << *i ; csv_file.close() ; // Back to the normal behaviour (i.e. do not abort on fail) CxxTest::setAbortTestOnFail(false) ; } ~InputCSV_test(void) { // Deleting the test CSV file if (remove(csv_file_name.c_str()) == -1) TS_WARN("Cannot remove test CSV file!") ; // Clear the stock Stock::clear() ; } static InputCSV_test* createSuite(void) { return new InputCSV_test() ; } static void destroySuite(InputCSV_test *suite) { delete suite ; } void test_inputcsv(void) { // Opening file InputCSV inputcsv1(csv_file_name) ; TS_ASSERT(inputcsv1) ; TS_ASSERT(! inputcsv1.eof()) ; Request request1 ; std::tr1::unordered_map measurements ; // First Request // request1 = inputcsv1.get_next_request() ; TS_ASSERT_EQUALS(request1.get_mobile()->get_mac_addr(), "aa:bb:cc:dd:ee:ff") ; TS_ASSERT_EQUALS(request1.get_timestamp().get_timestamp_ms(), 1265120910725llu) ; measurements[aps[0].get_mac_addr()].add_ss(-58) ; measurements[aps[2].get_mac_addr()].add_ss(-50) ; measurements[aps[1].get_mac_addr()].add_ss(-42) ; measurements[aps[0].get_mac_addr()].add_ss(-55) ; measurements[aps[1].get_mac_addr()].add_ss(-37) ; for (std::vector::const_iterator i = aps.begin() ; i != aps.end() ; ++i) { std::tr1::unordered_map::const_iterator measurement_it1 = request1.get_measurements().find(i->get_mac_addr()) ; TS_ASSERT_DIFFERS(request1.get_measurements().end(), measurement_it1) ; TS_ASSERT_EQUALS(measurements[i->get_mac_addr()].get_ss_list(), measurement_it1->second.get_ss_list()) ; } TS_ASSERT(inputcsv1) ; TS_ASSERT(! inputcsv1.eof()) ; // Second Request // request1 = inputcsv1.get_next_request() ; TS_ASSERT_EQUALS(request1.get_mobile()->get_mac_addr(), "aa:bb:cc:dd:ee:77") ; TS_ASSERT_EQUALS(request1.get_timestamp().get_timestamp_ms(), 1265120911234llu) ; measurements.clear() ; measurements[aps[2].get_mac_addr()].add_ss(-59) ; measurements[aps[0].get_mac_addr()].add_ss(-51) ; measurements[aps[1].get_mac_addr()].add_ss(-70) ; measurements[aps[1].get_mac_addr()].add_ss(-21) ; measurements[aps[0].get_mac_addr()].add_ss(-19) ; for (std::vector::const_iterator i = aps.begin() ; i != aps.end() ; ++i) { std::tr1::unordered_map::const_iterator measurement_it1 = request1.get_measurements().find(i->get_mac_addr()) ; TS_ASSERT_DIFFERS(request1.get_measurements().end(), measurement_it1) ; TS_ASSERT_EQUALS(measurements[i->get_mac_addr()].get_ss_list(), measurement_it1->second.get_ss_list()) ; } // Third Request // TS_ASSERT(inputcsv1) ; TS_ASSERT(! inputcsv1.eof()) ; request1 = inputcsv1.get_next_request() ; TS_ASSERT_EQUALS(request1.get_mobile()->get_mac_addr(), "aa:bb:cc:dd:ee:ff") ; TS_ASSERT_EQUALS(request1.get_timestamp().get_timestamp_ms(), 1265120912345llu) ; measurements.clear() ; measurements[aps[2].get_mac_addr()].add_ss(-56) ; measurements[aps[1].get_mac_addr()].add_ss(-45) ; measurements[aps[0].get_mac_addr()].add_ss(-54) ; measurements[aps[1].get_mac_addr()].add_ss(-23) ; measurements[aps[0].get_mac_addr()].add_ss(-32) ; for (std::vector::const_iterator i = aps.begin() ; i != aps.end() ; ++i) { std::tr1::unordered_map::const_iterator measurement_it1 = request1.get_measurements().find(i->get_mac_addr()) ; TS_ASSERT_DIFFERS(request1.get_measurements().end(), measurement_it1) ; TS_ASSERT_EQUALS(measurements[i->get_mac_addr()].get_ss_list(), measurement_it1->second.get_ss_list()) ; } // End of file TS_ASSERT(! inputcsv1) ; TS_ASSERT(inputcsv1.eof()) ; request1 = inputcsv1.get_next_request() ; TS_ASSERT(! request1) ; TS_ASSERT(! inputcsv1) ; TS_ASSERT(inputcsv1.eof()) ; } } ;