def test_wifi_overflow(self): from ichnaea.service.submit.tasks import insert_wifi_measures session = self.db_master_session key = "001234567890" measures = [ dict(id=0, key=key, lat=10000000 + i, lon=20000000 + i) for i in range(3) ] result = insert_wifi_measures.delay(measures) self.assertEqual(result.get(), 3) result = insert_wifi_measures.delay(measures, max_measures_per_wifi=3) self.assertEqual(result.get(), 0) result = insert_wifi_measures.delay(measures, max_measures_per_wifi=10) self.assertEqual(result.get(), 3) result = insert_wifi_measures.delay(measures, max_measures_per_wifi=3) self.assertEqual(result.get(), 0) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 6) wifis = session.query(Wifi).all() self.assertEqual(len(wifis), 1) self.assertEqual(wifis[0].total_measures, 6)
def test_wifi_overflow(self): from ichnaea.service.submit.tasks import insert_wifi_measures session = self.db_master_session key = "001234567890" measures = [dict(id=0, key=key, lat=10000000 + i, lon=20000000 + i) for i in range(3)] result = insert_wifi_measures.delay(measures) self.assertEqual(result.get(), 3) result = insert_wifi_measures.delay(measures, max_measures_per_wifi=3) self.assertEqual(result.get(), 0) result = insert_wifi_measures.delay(measures, max_measures_per_wifi=10) self.assertEqual(result.get(), 3) result = insert_wifi_measures.delay(measures, max_measures_per_wifi=3) self.assertEqual(result.get(), 0) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 6) wifis = session.query(Wifi).all() self.assertEqual(len(wifis), 1) self.assertEqual(wifis[0].total_measures, 6)
def test_database_error(self): from ichnaea.service.submit.tasks import insert_wifi_measures session = self.db_master_session stmt = text("drop table wifi;") session.execute(stmt) entries = [ {"lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 11}, {"lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 3}, {"lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 3}, {"lat": 10000000, "lon": 20000000, "key": "cd34", "channel": 3}, ] try: insert_wifi_measures.delay(entries) except ProgrammingError: pass except Exception as exc: self.fail("Unexpected exception caught: %s" % repr(exc)) find_msg = self.find_heka_messages messages = find_msg("sentry", RAVEN_ERROR, field_name="msg") self.assertEquals(len(messages), 1) payload = messages[0].payload # duplicate raven.base.RavenClient.decode data = json.loads(zlib.decompress(base64.b64decode(payload))) sentry_exc = data["sentry.interfaces.Exception"] self.assertEqual(sentry_exc["module"], ProgrammingError.__module__) self.assertEqual(sentry_exc["type"], "ProgrammingError")
def test_wifi(self): from ichnaea.service.submit.tasks import insert_wifi_measures session = self.db_master_session time = datetime.utcnow().replace(microsecond=0) - timedelta(days=1) session.add(Wifi(key="ab1234567890")) 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": "ab1234567890", "channel": 11, "signal": -80}, {"key": "ab1234567890", "channel": 3, "signal": -90}, {"key": "ab1234567890", "channel": 3, "signal": -80}, {"key": "cd3456789012", "channel": 3, "signal": -90}, ] for e in entries: e.update(measure) result = insert_wifi_measures.delay(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(["ab1234567890", "cd3456789012"])) 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(["ab1234567890", "cd3456789012"])) 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_measures.delay(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)
def test_database_error(self): from ichnaea.service.submit.tasks import insert_wifi_measures session = self.db_master_session stmt = text("drop table wifi;") session.execute(stmt) entries = [ { "lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 11 }, { "lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 3 }, { "lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 3 }, { "lat": 10000000, "lon": 20000000, "key": "cd34", "channel": 3 }, ] try: insert_wifi_measures.delay(entries) except ProgrammingError: pass except Exception as exc: self.fail("Unexpected exception caught: %s" % repr(exc)) find_msg = self.find_heka_messages messages = find_msg('sentry', RAVEN_ERROR, field_name='msg') self.assertEquals(len(messages), 1) payload = messages[0].payload # duplicate raven.base.RavenClient.decode data = json.loads(zlib.decompress(base64.b64decode(payload))) sentry_exc = data['sentry.interfaces.Exception'] self.assertEqual(sentry_exc['module'], ProgrammingError.__module__) self.assertEqual(sentry_exc['type'], 'ProgrammingError')
def test_database_error(self): from ichnaea.service.submit.tasks import insert_wifi_measures session = self.db_master_session stmt = text("drop table wifi;") session.execute(stmt) entries = [ {"lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 11}, {"lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 3}, {"lat": 10000000, "lon": 20000000, "key": "ab12", "channel": 3}, {"lat": 10000000, "lon": 20000000, "key": "cd34", "channel": 3}, ] try: insert_wifi_measures.delay(entries) except ProgrammingError: pass except Exception as exc: self.fail("Unexpected exception caught: %s" % repr(exc)) find_msg = self.find_heka_messages self.assertEquals( len(find_msg('sentry', RAVEN_ERROR, field_name='msg')), 1)
def test_wifi_blacklist(self): from ichnaea.service.submit.tasks import insert_wifi_measures 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}] for e in entries: e.update(measure) result = insert_wifi_measures.delay(entries) self.assertEqual(result.get(), 3) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 3) self.assertEqual(set([m.key for m in measures]), set([bad_key, good_key])) wifis = session.query(Wifi).all() self.assertEqual(len(wifis), 1) self.assertEqual(set([w.key for w in wifis]), set([good_key]))
def test_wifi_blacklist(self): from ichnaea.service.submit.tasks import insert_wifi_measures 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}] for e in entries: e.update(measure) result = insert_wifi_measures.delay(entries) self.assertEqual(result.get(), 3) measures = session.query(WifiMeasure).all() self.assertEqual(len(measures), 3) self.assertEqual( set([m.key for m in measures]), set([bad_key, good_key])) wifis = session.query(Wifi).all() self.assertEqual(len(wifis), 1) self.assertEqual(set([w.key for w in wifis]), set([good_key]))
def test_wifi(self): from ichnaea.service.submit.tasks import insert_wifi_measures 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 }, ] for e in entries: e.update(measure) result = insert_wifi_measures.delay(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_measures.delay(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)