Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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")
Esempio n. 4
0
    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)
Esempio n. 5
0
    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')
Esempio n. 6
0
    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)
Esempio n. 7
0
    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]))
Esempio n. 8
0
    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]))
Esempio n. 9
0
    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)