def test_cell(self): from ichnaea.service.submit.tasks import insert_cell_measure session = self.db_master_session time = datetime.utcnow().replace(microsecond=0) - timedelta(days=1) session.add(Cell(radio=0, mcc=1, mnc=2, lac=3, cid=4, new_measures=2, total_measures=5)) session.add(Score(userid=1, key=SCORE_TYPE['new_cell'], 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=0, ) entries = [ {"mcc": 1, "mnc": 2, "signal": -100}, {"mcc": 1, "mnc": 2, "lac": 3, "cid": 4, "psc": 5, "asu": 8}, {"mcc": 1, "mnc": 2, "lac": 3, "cid": 4, "asu": 8}, {"mcc": 1, "mnc": 2, "lac": 3, "cid": 4, "asu": 15}, {"mcc": 1, "mnc": 2, "lac": 3, "cid": 7}, ] result = insert_cell_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 5) measures = session.query(CellMeasure).all() self.assertEqual(len(measures), 5) self.assertEqual(set([m.mcc for m in measures]), set([1])) self.assertEqual(set([m.mnc for m in measures]), set([2])) self.assertEqual(set([m.asu for m in measures]), set([0, 8, 15])) self.assertEqual(set([m.psc for m in measures]), set([0, 5])) self.assertEqual(set([m.signal for m in measures]), set([0, -100])) cells = session.query(Cell).all() self.assertEqual(len(cells), 2) self.assertEqual(set([c.mcc for c in cells]), set([1])) self.assertEqual(set([c.mnc for c in cells]), set([2])) self.assertEqual(set([c.lac for c in cells]), set([3])) self.assertEqual(set([c.cid for c in cells]), set([4, 7])) self.assertEqual(set([c.new_measures for c in cells]), set([1, 5])) self.assertEqual(set([c.total_measures for c in cells]), set([1, 8])) scores = session.query(Score).all() self.assertEqual(len(scores), 1) self.assertEqual(scores[0].key, SCORE_TYPE['new_cell']) self.assertEqual(scores[0].value, 8) # test duplicate execution result = insert_cell_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 5) # TODO this task isn't idempotent yet measures = session.query(CellMeasure).all() self.assertEqual(len(measures), 10)
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_cell(self): from ichnaea.service.submit.tasks import insert_cell_measure session = self.db_master_session utcnow = datetime.utcnow() session.add( Cell(radio=0, mcc=1, mnc=2, lac=3, cid=4, new_measures=2, total_measures=5)) session.add(Score(userid=1, key=SCORE_TYPE['new_cell'], 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=0, ) entries = [ { "mcc": 1, "mnc": 2, "signal": -100 }, { "mcc": 1, "mnc": 2, "lac": 3, "cid": 4, "psc": 5, "asu": 8 }, { "mcc": 1, "mnc": 2, "lac": 3, "cid": 4, "asu": 8 }, { "mcc": 1, "mnc": 2, "lac": 3, "cid": 4, "asu": 15 }, { "mcc": 1, "mnc": 2, "lac": 3, "cid": 7 }, ] result = insert_cell_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 5) measures = session.query(CellMeasure).all() self.assertEqual(len(measures), 5) self.assertEqual(set([m.mcc for m in measures]), set([1])) self.assertEqual(set([m.mnc for m in measures]), set([2])) self.assertEqual(set([m.asu for m in measures]), set([0, 8, 15])) self.assertEqual(set([m.psc for m in measures]), set([0, 5])) self.assertEqual(set([m.signal for m in measures]), set([0, -100])) cells = session.query(Cell).all() self.assertEqual(len(cells), 2) self.assertEqual(set([c.mcc for c in cells]), set([1])) self.assertEqual(set([c.mnc for c in cells]), set([2])) self.assertEqual(set([c.lac for c in cells]), set([3])) self.assertEqual(set([c.cid for c in cells]), set([4, 7])) self.assertEqual(set([c.new_measures for c in cells]), set([1, 5])) self.assertEqual(set([c.total_measures for c in cells]), set([1, 8])) scores = session.query(Score).all() self.assertEqual(len(scores), 1) self.assertEqual(scores[0].key, SCORE_TYPE['new_cell']) self.assertEqual(scores[0].value, 10) # test duplicate execution result = insert_cell_measure.delay(measure, entries, userid=1) self.assertEqual(result.get(), 5) # TODO this task isn't idempotent yet measures = session.query(CellMeasure).all() self.assertEqual(len(measures), 10)