diff --git a/owlps-positioning/Makefile b/owlps-positioning/Makefile index 81c7845..3251868 100644 --- a/owlps-positioning/Makefile +++ b/owlps-positioning/Makefile @@ -1,10 +1,6 @@ .PHONY : all test doc clean purge install uninstall style check -TEST_DIR = tests -TEST_XX = $(TEST_DIR)/tests.cc -TEST_OBJ = $(TEST_DIR)/tests.o -TESTUTIL_OBJ = $(TEST_DIR)/testutil.o -TEST_TARGET = $(TEST_DIR)/tests +TESTS_DIR = tests DOXYGEN_DIR = doc DOXYFILE = Doxyfile @@ -25,7 +21,7 @@ DOXYGEN = doxygen # Compilation tools and flags GXX = g++-4.4 #DEBUG = -g -TESTSGXXFLAGS = -I$(TEST_DIR) -I. +TESTSGXXFLAGS = -I$(TESTS_DIR) -I. GXXFLAGS = $(DEBUG) -Wall -Wextra LD = $(GXX) LDFLAGS = -lm -lrt -lboost_program_options @@ -38,17 +34,26 @@ OBJ = posutil.o stock.o timestamp.o point3d.o referencepoint.o \ inputcsv.o configuration.o userinterface.o input.o OBJ_NOTEST = posexcept.o +TESTS_XX = $(TESTS_DIR)/tests.cc +TESTS_OBJ = $(TESTS_DIR)/tests.o +TESTS_TARGET = $(TESTS_DIR)/tests +TESTUTIL_OBJ = $(TESTS_DIR)/testutil.o +TESTSETUP_OBJ = $(TESTS_DIR)/testsetup.o +SOURCE_TESTS = $(OBJ:%.o=$(TESTS_DIR)/%_test.hh) +OBJ_TESTS = $(TESTUTIL_OBJ) $(TESTSETUP_OBJ) +INCLUDES_TESTS = $(TESTS_DIR)/valuetraits.hh + all: $(TARGET) # Generic targets -%: %.o - $(LD) $(LDFLAGS) -o $@ $^ +$(TESTS_DIR)/%.o: $(TESTS_DIR)/%.cc $(TESTS_DIR)/%.hh + $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< %.o: %.cc %.hh $(GXX) $(GXXFLAGS) -c $< -$(TEST_DIR)/%_test.o: %.o - $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -c $< +%: %.o + $(LD) $(LDFLAGS) -o $@ $^ # Dependencies userinterface.o: configuration.o @@ -67,35 +72,32 @@ input.o: posexcept.o # Specific targets $(TARGET): $(OBJ) $(OBJ_NOTEST) -$(TEST_XX): $(OBJ:%.o=$(TEST_DIR)/%_test.hh) - $(TEST_DIR)/cxxtestgen.pl --error-printer \ - --include=$(TEST_DIR)/valuetraits.hh \ +$(TESTS_XX): $(SOURCE_TESTS) + $(TESTS_DIR)/cxxtestgen.pl --error-printer \ + --include=$(TESTS_DIR)/valuetraits.hh \ --include=$(TESTUTIL_OBJ:.o=.hh) \ -o $@ $^ -$(TEST_OBJ): $(TEST_XX) $(OBJ) $(TESTUTIL_OBJ) $(TEST_DIR)/valuetraits.hh +$(TESTS_OBJ): $(TESTS_XX) $(OBJ) $(INCLUDES_TESTS) $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< -$(TESTUTIL_OBJ): $(TESTUTIL_OBJ:.o=.cc) $(TESTUTIL_OBJ:.o=.hh) - $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< - -$(TEST_TARGET): $(TEST_OBJ) $(TESTUTIL_OBJ) +$(TESTS_TARGET): $(TESTS_OBJ) $(OBJ_TESTS) $(LD) $(LDFLAGS) -o $@ $^ $(OBJ) $(OBJ_NOTEST) -test: $(TEST_TARGET) - @$(TEST_TARGET) +test: $(TESTS_TARGET) + @$(TESTS_TARGET) doc: @$(DOXYGEN) $(DOXYFILE) clean: @$(RM) *~ *.o *.gch *.orig - @$(RM) $(TEST_XX) $(TEST_DIR)/*~ $(TEST_DIR)/*.o \ - $(TEST_DIR)/*.orig + @$(RM) $(TESTS_XX) $(TESTS_DIR)/*~ $(TESTS_DIR)/*.o \ + $(TESTS_DIR)/*.orig purge: clean @$(RM) $(TARGET) - @$(RM) $(TEST_TARGET) + @$(RM) $(TESTS_TARGET) @$(RM_RECURSIVE) $(DOXYGEN_DIR) install: $(TARGET) @@ -113,7 +115,8 @@ style: $(OBJ_NOTEST:.o=.hh) \ $(OBJ_NOTEST:.o=.cc) \ inputmedium.hh \ - $(OBJ:%.o=$(TEST_DIR)/%_test.hh) + $(TESTS_DIR)/*.hh \ + $(TESTS_DIR)/*.cc check: @$(CPPCHECK) \ diff --git a/owlps-positioning/tests/inputcsv_test.hh b/owlps-positioning/tests/inputcsv_test.hh index 396a1d9..930745f 100644 --- a/owlps-positioning/tests/inputcsv_test.hh +++ b/owlps-positioning/tests/inputcsv_test.hh @@ -24,7 +24,7 @@ public: Stock::clear() ; csv_file_name = "/tmp/InputCSV_test_csv_file.csv" ; - aps = TestUtil::create_test_csv_file(csv_file_name) ; + TestUtil::create_test_csv_file(csv_file_name, true) ; // Back to the normal behaviour (i.e. do not abort on fail) CxxTest::setAbortTestOnFail(false) ; @@ -61,30 +61,24 @@ public: 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) ; + TestUtil::mobiles[0].get_mac_addr()) ; + TS_ASSERT_EQUALS(request1.get_timestamp(), + TestUtil::requests[0].get_timestamp()) ; - 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) + for (std::vector::const_iterator i = TestUtil::aps.begin() ; + i != TestUtil::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(), + TS_ASSERT_EQUALS(TestUtil::requests[0].get_measurements(). + at(i->get_mac_addr()).get_ss_list(), measurement_it1->second.get_ss_list()) ; } @@ -95,25 +89,19 @@ public: 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) ; + TestUtil::mobiles[1].get_mac_addr()) ; + TS_ASSERT_EQUALS(request1.get_timestamp(), + TestUtil::requests[1].get_timestamp()) ; - 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) + for (std::vector::const_iterator i = TestUtil::aps.begin() ; + i != TestUtil::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(), + TS_ASSERT_EQUALS(TestUtil::requests[1].get_measurements(). + at(i->get_mac_addr()).get_ss_list(), measurement_it1->second.get_ss_list()) ; } @@ -124,25 +112,19 @@ public: 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) ; + TestUtil::mobiles[0].get_mac_addr()) ; + TS_ASSERT_EQUALS(request1.get_timestamp(), + TestUtil::requests[2].get_timestamp()) ; - 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) + for (std::vector::const_iterator i = TestUtil::aps.begin() ; + i != TestUtil::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(), + TS_ASSERT_EQUALS(TestUtil::requests[2].get_measurements(). + at(i->get_mac_addr()).get_ss_list(), measurement_it1->second.get_ss_list()) ; } diff --git a/owlps-positioning/tests/testsetup.cc b/owlps-positioning/tests/testsetup.cc new file mode 100644 index 0000000..2f113f9 --- /dev/null +++ b/owlps-positioning/tests/testsetup.cc @@ -0,0 +1,19 @@ +#include "testsetup.hh" + + +// Create the global fixture +static TestSetUp testsetup ; + + +bool TestSetUp::setUpWorld(void) +{ + TestUtil::set_up() ; + return true ; +} + + +bool TestSetUp::tearDownWorld(void) +{ + TestUtil::tear_down() ; + return true ; +} diff --git a/owlps-positioning/tests/testsetup.hh b/owlps-positioning/tests/testsetup.hh new file mode 100644 index 0000000..743efd2 --- /dev/null +++ b/owlps-positioning/tests/testsetup.hh @@ -0,0 +1,10 @@ +#include + +#include "testutil.hh" + +class TestSetUp: public CxxTest::GlobalFixture +{ +public: + bool setUpWorld(void) ; + bool tearDownWorld(void) ; +} ; diff --git a/owlps-positioning/tests/testutil.cc b/owlps-positioning/tests/testutil.cc index 9f63ae4..e6c1ff2 100644 --- a/owlps-positioning/tests/testutil.cc +++ b/owlps-positioning/tests/testutil.cc @@ -1,9 +1,100 @@ #include "testutil.hh" #include +#include "measurement.hh" + #include +#include +#include using namespace std ; +using std::tr1::unordered_map ; + +vector TestUtil::aps ; +vector TestUtil::mobiles ; +vector TestUtil::requests ; + + +void TestUtil::tear_down() +{ + aps.clear() ; + mobiles.clear() ; + requests.clear() ; +} + + +void TestUtil::set_up() +{ + tear_down() ; + + // Create mobile list + mobiles.push_back(Mobile("192.168.0.42", "aa:bb:cc:dd:ee:ff")) ; + mobiles.push_back(Mobile("192.168.1.87", "aa:bb:cc:dd:ee:77")) ; + + // Create AP list + aps.push_back(AccessPoint(Point3D(1,2,3), "10.0.0.1", "11:22:33:44:55:01")) ; + aps.push_back(AccessPoint(Point3D(4,5,6), "10.0.0.2", "11:22:33:44:55:02")) ; + aps.push_back(AccessPoint(Point3D(7,8,9), "10.0.0.3", "11:22:33:44:55:03")) ; + + // Create measurement list + vector < unordered_map > measurements(3) ; + Measurement measurement1 ; + + measurement1.add_ss(-58) ; + measurement1.add_ss(-55) ; + measurement1.set_ap(&aps[0]) ; + measurements[0][aps[0].get_mac_addr()] = measurement1 ; + measurement1.clear() ; + measurement1.add_ss(-50) ; + measurement1.set_ap(&aps[2]) ; + measurements[0][aps[2].get_mac_addr()] = measurement1 ; + measurement1.clear() ; + measurement1.add_ss(-42) ; + measurement1.add_ss(-37) ; + measurement1.set_ap(&aps[1]) ; + measurements[0][aps[1].get_mac_addr()] = measurement1 ; + + measurement1.clear() ; + measurement1.add_ss(-51) ; + measurement1.add_ss(-19) ; + measurement1.set_ap(&aps[0]) ; + measurements[1][aps[0].get_mac_addr()] = measurement1 ; + measurement1.clear() ; + measurement1.add_ss(-70) ; + measurement1.add_ss(-21) ; + measurement1.set_ap(&aps[1]) ; + measurements[1][aps[1].get_mac_addr()] = measurement1 ; + measurement1.clear() ; + measurement1.add_ss(-59) ; + measurement1.set_ap(&aps[2]) ; + measurements[1][aps[2].get_mac_addr()] = measurement1 ; + + measurement1.clear() ; + measurement1.add_ss(-54) ; + measurement1.add_ss(-32) ; + measurement1.set_ap(&aps[0]) ; + measurements[2][aps[0].get_mac_addr()] = measurement1 ; + measurement1.clear() ; + measurement1.add_ss(-45) ; + measurement1.add_ss(-23) ; + measurement1.set_ap(&aps[1]) ; + measurements[2][aps[1].get_mac_addr()] = measurement1 ; + measurement1.clear() ; + measurement1.add_ss(-56) ; + measurement1.set_ap(&aps[2]) ; + measurements[2][aps[2].get_mac_addr()] = measurement1 ; + + // Create timestamp list + vector timestamps ; + timestamps.push_back(Timestamp(1265120910725)) ; + timestamps.push_back(Timestamp(1265120911234)) ; + timestamps.push_back(Timestamp(1265120912345)) ; + + // Create request list + requests.push_back(Request(timestamps[0], measurements[0])) ; + requests.push_back(Request(timestamps[1], measurements[1])) ; + requests.push_back(Request(timestamps[2], measurements[2])) ; +} // Create the file output_file_name and fill it with the contents of @@ -34,48 +125,119 @@ void TestUtil::remove_file(const string &file_name) } -vector TestUtil:: -create_test_csv_file(const string &file_name) +void TestUtil:: +create_test_csv_file(const string &file_name, bool with_spaces) { - // Create AP list - vector aps ; - 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")) ; - // Fill name and contents of the test CSV file vector csv_lines ; - csv_lines.push_back("\ -\n \n\ - aa:bb:cc:dd:ee:ff;1265120910725;0;0;0;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;0;0;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\ + ostringstream line ; + + if (with_spaces) + line << "\n \n " ; + line << mobiles[0].get_mac_addr() ; + line << ';' ; + line << requests[0].get_timestamp().get_timestamp_ms() ; + line << ";0;0;0;0;" ; + line << aps[0].get_mac_addr() ; + line << ";" ; + line << requests[0].get_measurements().at(aps[0].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[2].get_mac_addr() ; + line << ";" ; + line << requests[0].get_measurements().at(aps[2].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[1].get_mac_addr() ; + line << ";" ; + line << requests[0].get_measurements().at(aps[1].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[0].get_mac_addr() ; + line << ";" ; + line << requests[0].get_measurements().at(aps[0].get_mac_addr()) + .get_ss_list()[1] ; + line << ";" ; + line << aps[1].get_mac_addr() ; + line << ";" ; + line << requests[0].get_measurements().at(aps[1].get_mac_addr()) + .get_ss_list()[1] ; + line << '\n' ; + csv_lines.push_back(line.str()) ; + + line.str("") ; + line << mobiles[1].get_mac_addr() ; + line << ';' ; + line << requests[1].get_timestamp().get_timestamp_ms() ; + line << ";0;0;0;0;" ; + line << aps[2].get_mac_addr() ; + line << ";" ; + line << requests[1].get_measurements().at(aps[2].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[0].get_mac_addr() ; + line << ";" ; + line << requests[1].get_measurements().at(aps[0].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[1].get_mac_addr() ; + line << ";" ; + line << requests[1].get_measurements().at(aps[1].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[1].get_mac_addr() ; + line << ";" ; + line << requests[1].get_measurements().at(aps[1].get_mac_addr()) + .get_ss_list()[1] ; + line << ";" ; + line << aps[0].get_mac_addr() ; + line << ";" ; + line << requests[1].get_measurements().at(aps[0].get_mac_addr()) + .get_ss_list()[1] ; + line << '\n' ; + if (with_spaces) + line << " \n\ \n\t\n\ \n \t \n\ -\n") ; - csv_lines.push_back("\ -\taa:bb:cc:dd:ee:ff;1265120912345;0;0;0;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") ; +\n" ; + csv_lines.push_back(line.str()) ; + + line.str("") ; + if (with_spaces) + line << '\t' ; + line << mobiles[0].get_mac_addr() ; + line << ';' ; + line << requests[2].get_timestamp().get_timestamp_ms() ; + line << ";0;0;0;0;" ; + line << aps[2].get_mac_addr() ; + line << ";" ; + line << requests[2].get_measurements().at(aps[2].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[1].get_mac_addr() ; + line << ";" ; + line << requests[2].get_measurements().at(aps[1].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[0].get_mac_addr() ; + line << ";" ; + line << requests[2].get_measurements().at(aps[0].get_mac_addr()) + .get_ss_list()[0] ; + line << ";" ; + line << aps[1].get_mac_addr() ; + line << ";" ; + line << requests[2].get_measurements().at(aps[1].get_mac_addr()) + .get_ss_list()[1] ; + line << ";" ; + line << aps[0].get_mac_addr() ; + line << ";" ; + line << requests[2].get_measurements().at(aps[0].get_mac_addr()) + .get_ss_list()[1] ; + line << '\n' ; + if (with_spaces) + line << "\n\t\n" ; + csv_lines.push_back(line.str()) ; // Create and fill the test CSV file fill_file(file_name, csv_lines) ; - - return aps ; } diff --git a/owlps-positioning/tests/testutil.hh b/owlps-positioning/tests/testutil.hh index 2b4db35..40c9479 100644 --- a/owlps-positioning/tests/testutil.hh +++ b/owlps-positioning/tests/testutil.hh @@ -1,20 +1,29 @@ #ifndef _OWLPS_POSITIONING_TESTS_TESTUTIL_HH_ #define _OWLPS_POSITIONING_TESTS_TESTUTIL_HH_ +#include "accesspoint.hh" +#include "mobile.hh" +#include "request.hh" + #include #include -#include "accesspoint.hh" - class TestUtil { public: + static std::vector aps ; + static std::vector mobiles ; + static std::vector requests ; + + static void set_up(void) ; + static void tear_down(void) ; + static void fill_file(const std::string &output_file_name, - const std::vector output_lines) ; + const std::vector output_lines) ; static void remove_file(const std::string &file_name) ; - static std::vector - create_test_csv_file(const std::string &file_name) ; + static void create_test_csv_file(const std::string &file_name, + bool with_spaces = false) ; } ; #endif // _OWLPS_POSITIONING_TESTS_TESTUTIL_HH_