def test_wifi_max_min_range_update(self): from ichnaea.tasks import wifi_location_update session = self.db_master_session k1 = "ab1234567890" k2 = "cd1234567890" data = [ Wifi(key=k1, new_measures=2, total_measures=2), WifiMeasure(lat=10000000, lon=10000000, key=k1), WifiMeasure(lat=10020000, lon=10040000, key=k1), Wifi( key=k2, lat=20000000, lon=-20000000, max_lat=20010000, min_lat=19990000, max_lon=-19990000, min_lon=-20010000, new_measures=2, total_measures=4, ), WifiMeasure(lat=20020000, lon=-20040000, key=k2), WifiMeasure(lat=19980000, lon=-19960000, key=k2), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), (2, 0)) wifis = dict(session.query(Wifi.key, Wifi).all()) self.assertEqual(set(wifis.keys()), set([k1, k2])) self.assertEqual(wifis[k1].lat, 10010000) self.assertEqual(wifis[k1].max_lat, 10020000) self.assertEqual(wifis[k1].min_lat, 10000000) self.assertEqual(wifis[k1].lon, 10020000) self.assertEqual(wifis[k1].max_lon, 10040000) self.assertEqual(wifis[k1].min_lon, 10000000) self.assertEqual(wifis[k2].lat, 20000000) self.assertEqual(wifis[k2].max_lat, 20020000) self.assertEqual(wifis[k2].min_lat, 19980000) self.assertEqual(wifis[k2].lon, -20000000) self.assertEqual(wifis[k2].max_lon, -19960000) self.assertEqual(wifis[k2].min_lon, -20040000) # independent calculation: the k1 bounding box is # (1.000, 1.000) to (1.002, 1.004), and distance # between those is 497.21m, int(round(dist/2.0)) is 249m self.assertEqual(wifis[k1].range, 249) # independent calculation: the k2 bounding box is # (1.998, -2.004) to (2.002, -1.996), and distance # between those is 994.07m, int(round(dist/2.0)) is 497m self.assertEqual(wifis[k2].range, 497)
def test_wifi_max_min_range_update(self): from ichnaea.tasks import wifi_location_update session = self.db_master_session k1 = "ab1234567890" k2 = "cd1234567890" data = [ Wifi(key=k1, new_measures=2, total_measures=2), WifiMeasure(lat=10000000, lon=10000000, key=k1), WifiMeasure(lat=10020000, lon=10040000, key=k1), Wifi(key=k2, lat=20000000, lon=-20000000, max_lat=20010000, min_lat=19990000, max_lon=-19990000, min_lon=-20010000, new_measures=2, total_measures=4), WifiMeasure(lat=20020000, lon=-20040000, key=k2), WifiMeasure(lat=19980000, lon=-19960000, key=k2), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), (2, 0)) wifis = dict(session.query(Wifi.key, Wifi).all()) self.assertEqual(set(wifis.keys()), set([k1, k2])) self.assertEqual(wifis[k1].lat, 10010000) self.assertEqual(wifis[k1].max_lat, 10020000) self.assertEqual(wifis[k1].min_lat, 10000000) self.assertEqual(wifis[k1].lon, 10020000) self.assertEqual(wifis[k1].max_lon, 10040000) self.assertEqual(wifis[k1].min_lon, 10000000) self.assertEqual(wifis[k2].lat, 20000000) self.assertEqual(wifis[k2].max_lat, 20020000) self.assertEqual(wifis[k2].min_lat, 19980000) self.assertEqual(wifis[k2].lon, -20000000) self.assertEqual(wifis[k2].max_lon, -19960000) self.assertEqual(wifis[k2].min_lon, -20040000) # independent calculation: the k1 bounding box is # (1.000, 1.000) to (1.002, 1.004), with centroid # at (1.001, 1.002); worst distance from centroid # to any corner is 249m self.assertEqual(wifis[k1].range, 249) # independent calculation: the k2 bounding box is # (1.998, -2.004) to (2.002, -1.996), with centroid # at (2.000, 2.000); worst distance from centroid # to any corner is 497m self.assertEqual(wifis[k2].range, 497)
def test_wifi_max_min_range_update(self): from ichnaea.tasks import wifi_location_update session = self.db_master_session k1 = "ab1234567890" k2 = "cd1234567890" data = [ Wifi(key=k1, new_measures=2, total_measures=2), WifiMeasure(lat=1.0, lon=1.0, key=k1), WifiMeasure(lat=1.002, lon=1.004, key=k1), Wifi(key=k2, lat=2.0, lon=-2.0, max_lat=2.001, min_lat=1.999, max_lon=-1.999, min_lon=-2.001, new_measures=2, total_measures=4), WifiMeasure(lat=2.002, lon=-2.004, key=k2), WifiMeasure(lat=1.998, lon=-1.996, key=k2), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), (2, 0)) wifis = dict(session.query(Wifi.key, Wifi).all()) self.assertEqual(set(wifis.keys()), set([k1, k2])) self.assertEqual(wifis[k1].lat, 1.001) self.assertEqual(wifis[k1].max_lat, 1.002) self.assertEqual(wifis[k1].min_lat, 1.0) self.assertEqual(wifis[k1].lon, 1.002) self.assertEqual(wifis[k1].max_lon, 1.004) self.assertEqual(wifis[k1].min_lon, 1.0) self.assertEqual(wifis[k2].lat, 2.0) self.assertEqual(wifis[k2].max_lat, 2.002) self.assertEqual(wifis[k2].min_lat, 1.998) self.assertEqual(wifis[k2].lon, -2.0) self.assertEqual(wifis[k2].max_lon, -1.996) self.assertEqual(wifis[k2].min_lon, -2.004) # independent calculation: the k1 bounding box is # (1.000, 1.000) to (1.002, 1.004), with centroid # at (1.001, 1.002); worst distance from centroid # to any corner is 249m self.assertEqual(wifis[k1].range, 249) # independent calculation: the k2 bounding box is # (1.998, -2.004) to (2.002, -1.996), with centroid # at (2.000, 2.000); worst distance from centroid # to any corner is 497m self.assertEqual(wifis[k2].range, 497)
def test_wifi_location_update(self): from ichnaea.tasks import wifi_location_update now = util.utcnow() before = now - timedelta(days=1) session = self.db_master_session k1 = "ab1234567890" k2 = "cd1234567890" data = [ Wifi(key=k1, new_measures=3, total_measures=3), WifiMeasure(lat=1.0, lon=1.0, key=k1), WifiMeasure(lat=1.002, lon=1.003, key=k1), WifiMeasure(lat=1.004, lon=1.006, key=k1), Wifi(key=k2, lat=2.0, lon=2.0, new_measures=2, total_measures=4), # the lat/lon is bogus and mismatches the line above on purpose # to make sure old measures are skipped WifiMeasure(lat=-1.0, lon=-1.0, key=k2, created=before), WifiMeasure(lat=-1.0, lon=-1.0, key=k2, created=before), WifiMeasure(lat=2.002, lon=2.004, key=k2, created=now), WifiMeasure(lat=2.002, lon=2.004, key=k2, created=now), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), (2, 0)) self.check_stats( total=2, timer=['task.wifi_location_update'], gauge=['task.wifi_location_update.new_measures_1_100'], ) wifis = dict(session.query(Wifi.key, Wifi).all()) self.assertEqual(set(wifis.keys()), set([k1, k2])) self.assertEqual(wifis[k1].lat, 1.002) self.assertEqual(wifis[k1].lon, 1.003) self.assertEqual(wifis[k1].new_measures, 0) self.assertEqual(wifis[k2].lat, 2.001) self.assertEqual(wifis[k2].lon, 2.002) self.assertEqual(wifis[k2].new_measures, 0)
def test_wifi_location_update(self): from ichnaea.tasks import wifi_location_update now = datetime.utcnow() before = now - timedelta(days=1) session = self.db_master_session k1 = "ab1234567890" k2 = "cd1234567890" data = [ Wifi(key=k1, new_measures=3, total_measures=3), WifiMeasure(lat=10000000, lon=10000000, key=k1), WifiMeasure(lat=10020000, lon=10030000, key=k1), WifiMeasure(lat=10040000, lon=10060000, key=k1), Wifi(key=k2, lat=20000000, lon=20000000, new_measures=2, total_measures=4), # the lat/lon is bogus and mismatches the line above on purpose # to make sure old measures are skipped WifiMeasure(lat=-10000000, lon=-10000000, key=k2, created=before), WifiMeasure(lat=-10000000, lon=-10000000, key=k2, created=before), WifiMeasure(lat=20020000, lon=20040000, key=k2, created=now), WifiMeasure(lat=20020000, lon=20040000, key=k2, created=now), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), 2) wifis = dict(session.query(Wifi.key, Wifi).all()) self.assertEqual(set(wifis.keys()), set([k1, k2])) self.assertEqual(wifis[k1].lat, 10020000) self.assertEqual(wifis[k1].lon, 10030000) self.assertEqual(wifis[k1].new_measures, 0) self.assertEqual(wifis[k2].lat, 20010000) self.assertEqual(wifis[k2].lon, 20020000) self.assertEqual(wifis[k2].new_measures, 0)
def test_blacklist_moving_wifis(self): from ichnaea.tasks import wifi_location_update now = datetime.utcnow() long_ago = now - timedelta(days=40) session = self.db_master_session k1 = "ab1234567890" k2 = "bc1234567890" k3 = "cd1234567890" k4 = "de1234567890" k5 = "ef1234567890" k6 = "fa1234567890" keys = set([k1, k2, k3, k4, k5, k6]) data = [ # a wifi with an entry but no prior position Wifi(key=k1, new_measures=3, total_measures=0), WifiMeasure(lat=10010000, lon=10010000, key=k1), WifiMeasure(lat=10020000, lon=10050000, key=k1), WifiMeasure(lat=10030000, lon=10090000, key=k1), # a wifi wifi a prior known position Wifi(lat=20000000, lon=20000000, key=k2, new_measures=2, total_measures=1), WifiMeasure(lat=20100000, lon=20000000, key=k2), WifiMeasure(lat=20700000, lon=20000000, key=k2), # a wifi with a very different prior position Wifi(lat=10000000, lon=10000000, key=k3, new_measures=2, total_measures=1), WifiMeasure(lat=30000000, lon=30000000, key=k3), WifiMeasure(lat=-30000000, lon=30000000, key=k3), # another wifi wifi a prior known position (and negative lat) Wifi(lat=-40000000, lon=40000000, key=k4, new_measures=2, total_measures=1), WifiMeasure(lat=-41000000, lon=40000000, key=k4), WifiMeasure(lat=-41600000, lon=40000000, key=k4), # an already blacklisted wifi WifiBlacklist(key=k5), WifiMeasure(lat=50000000, lon=50000000, key=k5), WifiMeasure(lat=51000000, lon=50000000, key=k5), # a wifi with an old different record we ignore, position # estimate has been updated since Wifi(lat=60000000, lon=60000000, key=k6, new_measures=2, total_measures=1), WifiMeasure(lat=69000000, lon=69000000, key=k6, created=long_ago), WifiMeasure(lat=60000000, lon=60000000, key=k6), WifiMeasure(lat=60010000, lon=60000000, key=k6), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), (5, 3)) black = session.query(WifiBlacklist).all() self.assertEqual(set([b.key for b in black]), set([k2, k3, k4, k5])) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 14) self.assertEqual(set([m.key for m in measures]), keys) # test duplicate call result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), 0) msgs = self.heka_client.stream.msgs self.assertEqual(3, len(msgs)) # We made duplicate calls taskname = 'task.wifi_location_update' self.assertEqual(2, len(find_msg(msgs, 'timer', taskname))) # One of those would've scheduled a remove_wifi task taskname = 'task.remove_wifi' self.assertEqual(1, len(find_msg(msgs, 'timer', taskname)))
def test_blacklist_moving_wifis(self): from ichnaea.tasks import wifi_location_update now = datetime.utcnow() long_ago = now - timedelta(days=40) session = self.db_master_session k1 = "ab1234567890" k2 = "bc1234567890" k3 = "cd1234567890" k4 = "de1234567890" k5 = "ef1234567890" k6 = "fa1234567890" keys = set([k1, k2, k3, k4, k5, k6]) # keys k2, k3 and k4 are expected to be detected as moving data = [ # a wifi with an entry but no prior position Wifi(key=k1, new_measures=3, total_measures=0), WifiMeasure(lat=10010000, lon=10010000, key=k1), WifiMeasure(lat=10020000, lon=10050000, key=k1), WifiMeasure(lat=10030000, lon=10090000, key=k1), # a wifi with a prior known position Wifi(lat=20000000, lon=20000000, key=k2, new_measures=2, total_measures=1), WifiMeasure(lat=20100000, lon=20000000, key=k2), WifiMeasure(lat=20700000, lon=20000000, key=k2), # a wifi with a very different prior position Wifi(lat=10000000, lon=10000000, key=k3, new_measures=2, total_measures=1), WifiMeasure(lat=30000000, lon=30000000, key=k3), WifiMeasure(lat=-30000000, lon=30000000, key=k3), # another wifi with a prior known position (and negative lat) Wifi(lat=-40000000, lon=40000000, key=k4, new_measures=2, total_measures=1), WifiMeasure(lat=-41000000, lon=40000000, key=k4), WifiMeasure(lat=-41600000, lon=40000000, key=k4), # an already blacklisted wifi WifiBlacklist(key=k5), WifiMeasure(lat=50000000, lon=50000000, key=k5), WifiMeasure(lat=51000000, lon=50000000, key=k5), # a wifi with an old different record we ignore, position # estimate has been updated since Wifi(lat=60000000, lon=60000000, key=k6, new_measures=2, total_measures=1), WifiMeasure(lat=69000000, lon=69000000, key=k6, created=long_ago), WifiMeasure(lat=60000000, lon=60000000, key=k6), WifiMeasure(lat=60010000, lon=60000000, key=k6), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), (5, 3)) black = session.query(WifiBlacklist).all() self.assertEqual(set([b.key for b in black]), set([k2, k3, k4, k5])) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 14) self.assertEqual(set([m.key for m in measures]), keys) # test duplicate call result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), 0) self.check_expected_heka_messages( total=4, timer=[ # We made duplicate calls ('task.wifi_location_update', 2), # One of those would've scheduled a remove_wifi task ('task.remove_wifi', 1) ])
def test_blacklist_moving_wifis(self): from ichnaea.tasks import wifi_location_update now = util.utcnow() long_ago = now - timedelta(days=40) session = self.db_master_session k1 = "ab1234567890" k2 = "bc1234567890" k3 = "cd1234567890" k4 = "de1234567890" k5 = "ef1234567890" k6 = "fa1234567890" keys = set([k1, k2, k3, k4, k5, k6]) # keys k2, k3 and k4 are expected to be detected as moving data = [ # a wifi with an entry but no prior position Wifi(key=k1, new_measures=3, total_measures=0), WifiMeasure(lat=1.001, lon=1.001, key=k1), WifiMeasure(lat=1.002, lon=1.005, key=k1), WifiMeasure(lat=1.003, lon=1.009, key=k1), # a wifi with a prior known position Wifi(lat=2.0, lon=2.0, key=k2, new_measures=2, total_measures=1), WifiMeasure(lat=2.01, lon=2, key=k2), WifiMeasure(lat=2.07, lon=2, key=k2), # a wifi with a very different prior position Wifi(lat=1.0, lon=1.0, key=k3, new_measures=2, total_measures=1), WifiMeasure(lat=3.0, lon=3.0, key=k3), WifiMeasure(lat=-3.0, lon=3.0, key=k3), # another wifi with a prior known position (and negative lat) Wifi(lat=-4.0, lon=4.0, key=k4, new_measures=2, total_measures=1), WifiMeasure(lat=-4.1, lon=4, key=k4), WifiMeasure(lat=-4.16, lon=4, key=k4), # an already blacklisted wifi WifiBlacklist(key=k5), WifiMeasure(lat=5.0, lon=5.0, key=k5), WifiMeasure(lat=5.1, lon=5.0, key=k5), # a wifi with an old different record we ignore, position # estimate has been updated since Wifi(lat=6.0, lon=6.0, key=k6, new_measures=2, total_measures=1), WifiMeasure(lat=6.9, lon=6.9, key=k6, time=long_ago), WifiMeasure(lat=6.0, lon=6.0, key=k6), WifiMeasure(lat=6.001, lon=6.0, key=k6), ] session.add_all(data) session.commit() result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), (5, 3)) black = session.query(WifiBlacklist).all() self.assertEqual(set([b.key for b in black]), set([k2, k3, k4, k5])) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 14) self.assertEqual(set([m.key for m in measures]), keys) # test duplicate call result = wifi_location_update.delay(min_new=1) self.assertEqual(result.get(), 0) self.check_stats( total=6, timer=[ # We made duplicate calls ('task.wifi_location_update', 2), # One of those would've scheduled a remove_wifi task ('task.remove_wifi', 1) ], gauge=[ ('task.wifi_location_update.new_measures_1_100', 2), ])