def process_wifi(entries, measure): measure_data = dict( id=measure.id, created=encode_datetime(measure.created), lat=measure.lat, lon=measure.lon, time=encode_datetime(measure.time), accuracy=measure.accuracy, altitude=measure.altitude, altitude_accuracy=measure.altitude_accuracy, ) insert_wifi_measure.delay(measure_data, entries)
def test_wifi(self): from ichnaea.service.submit.tasks import insert_wifi_measure session = self.db_master_session time = datetime.utcnow().replace(microsecond=0) - timedelta(days=1) session.add(Wifi(key="ab12")) session.add(Score(userid=1, key=SCORE_TYPE['new_wifi'], value=7)) session.flush() measure = dict( id=0, created=encode_datetime(time), lat=10000000, lon=20000000, time=encode_datetime(time), accuracy=0, altitude=0, altitude_accuracy=0, radio=-1, ) entries = [ {"key": "ab12", "channel": 11, "signal": -80}, {"key": "ab12", "channel": 3, "signal": -90}, {"key": "ab12", "channel": 3, "signal": -80}, {"key": "cd34", "channel": 3, "signal": -90}, ] result = insert_wifi_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 4) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 4) self.assertEqual(set([m.key for m in measures]), set(["ab12", "cd34"])) self.assertEqual(set([m.channel for m in measures]), set([3, 11])) self.assertEqual(set([m.signal for m in measures]), set([-80, -90])) wifis = session.query(Wifi).all() self.assertEqual(len(wifis), 2) self.assertEqual(set([w.key for w in wifis]), set(["ab12", "cd34"])) self.assertEqual(set([w.new_measures for w in wifis]), set([1, 3])) self.assertEqual(set([w.total_measures for w in wifis]), set([1, 3])) scores = session.query(Score).all() self.assertEqual(len(scores), 1) self.assertEqual(scores[0].key, SCORE_TYPE['new_wifi']) self.assertEqual(scores[0].value, 8) # test duplicate execution result = insert_wifi_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 4) # TODO this task isn't idempotent yet measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 8) # test error case entries[0]['id'] = measures[0].id result = insert_wifi_measure.delay(measure, entries) self.assertEqual(result.get(), 0)
def test_wifi(self): from ichnaea.service.submit.tasks import insert_wifi_measure session = self.db_master_session utcnow = datetime.utcnow() session.add(Wifi(key="ab12")) session.flush() measure = dict( id=0, created=encode_datetime(utcnow), lat=10000000, lon=20000000, time=encode_datetime(utcnow), accuracy=0, altitude=0, altitude_accuracy=0, ) entries = [{"key": "ab12", "channel": 11, "signal": -80}, {"key": "cd34", "channel": 3, "signal": -90}] result = insert_wifi_measure.delay(measure, entries) self.assertEqual(result.get(), 2) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 2) self.assertEqual(set([m.key for m in measures]), set(["ab12", "cd34"])) self.assertEqual(set([m.channel for m in measures]), set([3, 11])) self.assertEqual(set([m.signal for m in measures]), set([-80, -90])) wifis = session.query(Wifi).all() self.assertEqual(len(wifis), 2) self.assertEqual(set([w.key for w in wifis]), set(["ab12", "cd34"])) for wifi in wifis: self.assertEqual(wifi.new_measures, 1) self.assertEqual(wifi.total_measures, 1) # test duplicate execution result = insert_wifi_measure.delay(measure, entries) self.assertEqual(result.get(), 2) # TODO this task isn't idempotent yet measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 4) # test error case entries[0]["id"] = measures[0].id result = insert_wifi_measure.delay(measure, entries) self.assertEqual(result.get(), 0)
def process_measure(data, utcnow, session, userid=None): measure = Measure() measure.created = utcnow measure.time = data["time"] measure.lat = to_precise_int(data["lat"]) measure.lon = to_precise_int(data["lon"]) measure.accuracy = data["accuracy"] measure.altitude = data["altitude"] measure.altitude_accuracy = data["altitude_accuracy"] measure.radio = RADIO_TYPE.get(data["radio"], -1) # get measure.id set session.add(measure) session.flush() measure_data = dict( id=measure.id, created=encode_datetime(measure.created), lat=measure.lat, lon=measure.lon, time=encode_datetime(measure.time), accuracy=measure.accuracy, altitude=measure.altitude, altitude_accuracy=measure.altitude_accuracy, radio=measure.radio, ) if data.get("cell"): insert_cell_measure.delay(measure_data, data["cell"], userid=userid) measure.cell = dumps(data["cell"]) if data.get("wifi"): # filter out old-style sha1 hashes too_long_keys = False for w in data["wifi"]: w["key"] = key = normalize_wifi_key(w["key"]) if len(key) > 12: too_long_keys = True break if not too_long_keys: insert_wifi_measure.delay(measure_data, data["wifi"], userid=userid) measure.wifi = dumps(data["wifi"]) return measure
def test_wifi_blacklist(self): from ichnaea.service.submit.tasks import insert_wifi_measure session = self.db_master_session bad_key = "ab1234567890" good_key = "cd1234567890" black = WifiBlacklist(key=bad_key) session.add(black) session.flush() measure = dict(id=0, lat=10000000, lon=20000000) entries = [{"key": good_key}, {"key": good_key}, {"key": bad_key}] result = insert_wifi_measure.delay(measure, entries) self.assertEqual(result.get(), 2) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 2) self.assertEqual(set([m.key for m in measures]), set([good_key]))
def test_wifi(self): from ichnaea.service.submit.tasks import insert_wifi_measure session = self.db_master_session utcnow = datetime.utcnow() session.add(Wifi(key="ab12")) session.add(Score(userid=1, key=SCORE_TYPE['new_wifi'], value=7)) session.flush() measure = dict( id=0, created=encode_datetime(utcnow), lat=10000000, lon=20000000, time=encode_datetime(utcnow), accuracy=0, altitude=0, altitude_accuracy=0, radio=-1, ) entries = [ { "key": "ab12", "channel": 11, "signal": -80 }, { "key": "ab12", "channel": 3, "signal": -90 }, { "key": "ab12", "channel": 3, "signal": -80 }, { "key": "cd34", "channel": 3, "signal": -90 }, ] result = insert_wifi_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 4) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 4) self.assertEqual(set([m.key for m in measures]), set(["ab12", "cd34"])) self.assertEqual(set([m.channel for m in measures]), set([3, 11])) self.assertEqual(set([m.signal for m in measures]), set([-80, -90])) wifis = session.query(Wifi).all() self.assertEqual(len(wifis), 2) self.assertEqual(set([w.key for w in wifis]), set(["ab12", "cd34"])) self.assertEqual(set([w.new_measures for w in wifis]), set([1, 3])) self.assertEqual(set([w.total_measures for w in wifis]), set([1, 3])) scores = session.query(Score).all() self.assertEqual(len(scores), 1) self.assertEqual(scores[0].key, SCORE_TYPE['new_wifi']) self.assertEqual(scores[0].value, 9) # test duplicate execution result = insert_wifi_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 4) # TODO this task isn't idempotent yet measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 8) # test error case entries[0]['id'] = measures[0].id result = insert_wifi_measure.delay(measure, entries) self.assertEqual(result.get(), 0)