def test_heka_logging(self): app = self.app cell_data = [ {"radio": "umts", "mcc": 123, "mnc": 1, "lac": 2, "cid": 1234}] res = app.post_json( '/v1/submit', {"items": [{"lat": 12.3456781, "lon": 23.4567892, "accuracy": 10, "altitude": 123, "altitude_accuracy": 7, "radio": "gsm", "cell": cell_data}]}, status=204) self.assertEqual(res.body, '') """ We should be capturing 4 metrics: 1) counter for URL request 2) counter for items.uploaded 3) timer to respond 4) timer for "insert_cell_measure" """ msgs = self.heka_client.stream.msgs self.assertEqual(4, len(msgs)) self.assertEqual(1, len(find_msg(msgs, 'counter', 'http.request'))) self.assertEqual(1, len(find_msg(msgs, 'counter', 'items.uploaded'))) self.assertEqual(1, len(find_msg(msgs, 'timer', 'http.request'))) taskname = 'task.service.submit.insert_cell_measure' self.assertEqual(1, len(find_msg(msgs, 'timer', taskname)))
def test_ok_cell(self): app = self.app session = self.db_slave_session key = dict(mcc=1, mnc=2, lac=3) data = [ Cell(lat=10000000, lon=10000000, radio=2, cid=4, **key), Cell(lat=10020000, lon=10040000, radio=2, cid=5, **key), ] session.add_all(data) session.commit() res = app.post_json( '/v1/search', {"radio": "gsm", "cell": [ dict(radio="umts", cid=4, **key), dict(radio="umts", cid=5, **key), ]}, status=200) self.assertEqual(res.content_type, 'application/json') self.assertEqual(res.body, '{"status": "ok", "lat": 1.0010000, ' '"lon": 1.0020000, "accuracy": 35000}') msgs = self.heka_client.stream.msgs self.assertEquals(1, len(find_msg(msgs, 'counter', 'http.request'))) self.assertEquals(1, len(find_msg(msgs, 'timer', 'http.request'))) self.assertEquals(2, len(msgs))
def test_ok_wifi(self): app = self.app session = self.db_slave_session wifis = [ Wifi(key="A1", lat=10000000, lon=10000000), Wifi(key="B2", lat=10010000, lon=10020000), Wifi(key="C3", lat=10020000, lon=10040000), Wifi(key="D4", lat=None, lon=None), ] session.add_all(wifis) session.commit() res = app.post_json('/v1/search?key=test', {"wifi": [ {"key": "A1"}, {"key": "B2"}, {"key": "C3"}, {"key": "D4"}, ]}, status=200) self.assertEqual(res.content_type, 'application/json') self.assertEqual(res.body, '{"status": "ok", "lat": 1.0010000, ' '"lon": 1.0020000, "accuracy": 500}') msgs = self.heka_client.stream.msgs self.assertEquals(1, len(find_msg(msgs, 'counter', 'http.request'))) self.assertEquals(1, len(find_msg(msgs, 'timer', 'http.request'))) self.assertEquals(2, len(msgs))
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)))