Ejemplo n.º 1
0
    def test_blue_not_found(self, app, data_queues, metricsmock, logs):
        """A failed Bluetooth-based lookup emits several metrics."""
        blues = BlueShardFactory.build_batch(2)

        query = self.model_query(blues=blues)

        res = self._call(app, body=query, status=404)
        self.check_response(data_queues, res, "not_found")
        metricsmock.assert_incr_once(
            "request", tags=[self.metric_path, "method:post", "status:404"]
        )
        metricsmock.assert_incr_once(
            self.metric_type + ".request", tags=[self.metric_path, "key:test"]
        )
        metricsmock.assert_incr_once(
            self.metric_type + ".query",
            tags=["key:test", "geoip:false", "blue:many", "cell:none", "wifi:none"],
        )
        metricsmock.assert_incr_once(
            self.metric_type + ".result",
            tags=["key:test", "accuracy:high", "fallback_allowed:false", "status:miss"],
        )
        metricsmock.assert_incr_once(
            self.metric_type + ".source",
            tags=["key:test", "source:internal", "accuracy:high", "status:miss"],
        )
        assert logs.only_entry["blue_valid"] == 2
Ejemplo n.º 2
0
    def test_blue_miss(self, geoip_db, http_session, session, source):
        blues = BlueShardFactory.build_batch(2, samples=10)
        session.flush()

        query = self.model_query(geoip_db, http_session, session, blues=blues)
        results = source.search(query)
        self.check_model_results(results, None)
Ejemplo n.º 3
0
 def test_blue(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(
         blue=[
             {
                 "macAddress": blue.mac,
                 "age": 1500,
                 "name": "beacon",
                 "signalStrength": -90,
             }
             for blue in blues
         ]
     )
     data = self._call(query.json())
     assert data == {
         "bluetoothBeacons": [
             {
                 "macAddress": blues[0].mac,
                 "age": 1500,
                 "name": "beacon",
                 "signalStrength": -90,
             },
             {
                 "macAddress": blues[1].mac,
                 "age": 1500,
                 "name": "beacon",
                 "signalStrength": -90,
             },
         ],
         "fallbacks": {"lacf": True},
     }
Ejemplo n.º 4
0
 def test_get_blue(self, cache, stats):
     blues = BlueShardFactory.build_batch(2)
     query = self._query(blue=self.blue_model_query(blues))
     assert cache.get(query) is None
     stats.check(counter=[
         ('locate.fallback.cache', 1, 1, ['status:miss']),
     ])
Ejemplo n.º 5
0
    def test_blue_not_found(self, app, data_queues, stats):
        blues = BlueShardFactory.build_batch(2)

        query = self.model_query(blues=blues)

        res = self._call(app, body=query, status=self.not_found.code)
        self.check_response(data_queues, res, 'not_found')
        stats.check(counter=[
            ('request', [
                self.metric_path, 'method:post',
                'status:%s' % self.not_found.code
            ]),
            (self.metric_type + '.request', [self.metric_path, 'key:test']),
            (self.metric_type + '.query', [
                'key:test', 'region:none', 'geoip:false', 'blue:many',
                'cell:none', 'wifi:none'
            ]),
            (self.metric_type + '.result', 'fallback_allowed:false',
             ['key:test', 'region:none', 'accuracy:high', 'status:miss']),
            (self.metric_type + '.source', [
                'key:test', 'region:none', 'source:internal', 'accuracy:high',
                'status:miss'
            ]),
        ],
                    timer=[
                        ('request', [self.metric_path, 'method:post']),
                    ])
Ejemplo n.º 6
0
 def test_blue(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=[{
         'mac': blue.mac,
         'age': 1500,
         'name': 'beacon',
         'signal': -90
     } for blue in blues])
     data = self.schema.deserialize(query.internal_query())
     self.assertEqual(
         data, {
             'bluetoothBeacons': [{
                 'macAddress': blues[0].mac,
                 'age': 1500,
                 'name': 'beacon',
                 'signalStrength': -90,
             }, {
                 'macAddress': blues[1].mac,
                 'age': 1500,
                 'name': 'beacon',
                 'signalStrength': -90,
             }],
             'fallbacks': {
                 'lacf': True
             },
         })
Ejemplo n.º 7
0
    def add_reports(self, num=1, blue_factor=0, cell_factor=1, wifi_factor=2,
                    api_key='test', nickname=None,
                    blue_key=None, cell_mcc=None, wifi_key=None,
                    lat=None, lon=None):
        reports = []
        for i in range(num):
            pos = CellShardFactory.build()
            report = {
                'timestamp': time.time() * 1000.0,
                'position': {},
                'bluetoothBeacons': [],
                'cellTowers': [],
                'wifiAccessPoints': [],
            }
            report['position']['latitude'] = lat or pos.lat
            report['position']['longitude'] = lon or pos.lon
            report['position']['accuracy'] = 17.0 + i

            blues = BlueShardFactory.build_batch(blue_factor,
                                                 lat=pos.lat, lon=pos.lon)
            for blue in blues:
                blue_data = {
                    'macAddress': blue_key or blue.mac,
                    'signalStrength': -100 + i,
                }
                report['bluetoothBeacons'].append(blue_data)

            cells = CellShardFactory.build_batch(cell_factor,
                                                 lat=pos.lat, lon=pos.lon)
            for cell in cells:
                cell_data = {
                    'radioType': cell.radio.name,
                    'mobileCountryCode': cell_mcc or cell.mcc,
                    'mobileNetworkCode': cell.mnc,
                    'locationAreaCode': cell.lac,
                    'cellId': cell.cid,
                    'primaryScramblingCode': cell.psc,
                    'signalStrength': -110 + i,
                }
                report['cellTowers'].append(cell_data)

            wifis = WifiShardFactory.build_batch(wifi_factor,
                                                 lat=pos.lat, lon=pos.lon)
            for wifi in wifis:
                wifi_data = {
                    'macAddress': wifi_key or wifi.mac,
                    'signalStrength': -90 + i,
                    'ssid': 'my-wifi',
                }
                report['wifiAccessPoints'].append(wifi_data)

            reports.append(report)

        items = [{'api_key': api_key,
                  'nickname': nickname,
                  'report': rep} for rep in reports]

        self.incoming_queue.enqueue(items)
        update_incoming.delay().get()
        return reports
Ejemplo n.º 8
0
 def test_blue(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=[{
         'macAddress': blue.mac,
         'age': 1500,
         'name': 'beacon',
         'signalStrength': -90
     } for blue in blues])
     data = OUTBOUND_SCHEMA.deserialize(query.json())
     assert (data == {
         'bluetoothBeacons': [{
             'macAddress': blues[0].mac,
             'age': 1500,
             'name': 'beacon',
             'signalStrength': -90,
         }, {
             'macAddress': blues[1].mac,
             'age': 1500,
             'name': 'beacon',
             'signalStrength': -90,
         }],
         'fallbacks': {
             'lacf': True
         },
     })
Ejemplo n.º 9
0
    def test_blue_miss(self):
        blues = BlueShardFactory.build_batch(2, samples=10)
        self.session.flush()

        query = self.model_query(blues=blues)
        results = self.source.search(query)
        self.check_model_results(results, None)
Ejemplo n.º 10
0
 def test_get_blue(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=self.blue_model_query(blues))
     self.assertEqual(self.cache.get(query), None)
     self.check_stats(counter=[
         ('locate.fallback.cache', 1, 1, ['status:miss']),
     ])
Ejemplo n.º 11
0
 def test_get_blue(self):
     blues = BlueShardFactory.build_batch(2)
     query = self._query(blue=self.blue_model_query(blues))
     self.assertEqual(self.cache.get(query), None)
     self.check_stats(counter=[
         ('locate.fallback.cache', 1, 1, ['status:miss']),
     ])
Ejemplo n.º 12
0
    def test_blue_miss(self, geoip_db, http_session, session, source):
        """Unknown Bluetooth stations fail to determine the region."""
        blues = BlueShardFactory.build_batch(2, samples=10)
        session.flush()

        query = self.model_query(geoip_db, http_session, session, blues=blues)
        results = source.search(query)
        self.check_model_results(results, None)
Ejemplo n.º 13
0
 def test_get_blue(self, cache, stats):
     blues = BlueShardFactory.build_batch(2)
     query = self._query(blue=self.blue_model_query(blues))
     assert cache.get(query) is None
     stats.check(counter=[
         ('locate.fallback.cache', 1, 1,
             [self.fallback_tag, 'status:miss']),
     ])
Ejemplo n.º 14
0
 def test_set_blue(self, cache, metricsmock):
     blues = BlueShardFactory.build_batch(2)
     blue = blues[0]
     query = self._query(blue=self.blue_model_query(blues))
     result = ExternalResult(blue.lat, blue.lon, blue.radius, None)
     cache.set(query, result)
     assert cache.get(query) == result
     metricsmock.assert_incr_once("locate.fallback.cache",
                                  tags=[self.fallback_tag, "status:hit"])
Ejemplo n.º 15
0
    def add_reports(self, num=1, blue_factor=0, cell_factor=1, wifi_factor=2,
                    blue_key=None, cell_mcc=None, wifi_key=None,
                    api_key='test', lat=None, lon=None):
        reports = []
        for i in range(num):
            pos = CellShardFactory.build()
            report = {
                'timestamp': time.time() * 1000.0,
                'position': {},
                'bluetoothBeacons': [],
                'cellTowers': [],
                'wifiAccessPoints': [],
            }
            report['position']['latitude'] = lat or pos.lat
            report['position']['longitude'] = lon or pos.lon
            report['position']['accuracy'] = 17.0 + i

            blues = BlueShardFactory.build_batch(blue_factor,
                                                 lat=pos.lat, lon=pos.lon)
            for blue in blues:
                blue_data = {
                    'macAddress': blue_key or blue.mac,
                    'signalStrength': -100 + i,
                }
                report['bluetoothBeacons'].append(blue_data)

            cells = CellShardFactory.build_batch(cell_factor,
                                                 lat=pos.lat, lon=pos.lon)
            for cell in cells:
                cell_data = {
                    'radioType': cell.radio.name,
                    'mobileCountryCode': cell_mcc or cell.mcc,
                    'mobileNetworkCode': cell.mnc,
                    'locationAreaCode': cell.lac,
                    'cellId': cell.cid,
                    'primaryScramblingCode': cell.psc,
                    'signalStrength': -110 + i,
                }
                report['cellTowers'].append(cell_data)

            wifis = WifiShardFactory.build_batch(wifi_factor,
                                                 lat=pos.lat, lon=pos.lon)
            for wifi in wifis:
                wifi_data = {
                    'macAddress': wifi_key or wifi.mac,
                    'signalStrength': -90 + i,
                    'ssid': 'my-wifi',
                }
                report['wifiAccessPoints'].append(wifi_data)

            reports.append(report)

        items = [{'api_key': api_key, 'report': rep} for rep in reports]

        self.queue.enqueue(items)
        return reports
Ejemplo n.º 16
0
 def test_set_blue(self, cache, stats):
     blues = BlueShardFactory.build_batch(2)
     blue = blues[0]
     query = self._query(blue=self.blue_model_query(blues))
     result = ExternalResult(blue.lat, blue.lon, blue.radius, None)
     cache.set(query, result)
     assert cache.get(query) == result
     stats.check(counter=[
         ('locate.fallback.cache', 1, 1, ['status:hit']),
     ])
Ejemplo n.º 17
0
    def test_blue_miss(self, geoip_db, http_session,
                       session, source, stats):
        blues = BlueShardFactory.build_batch(2, samples=10)
        session.flush()

        query = self.model_query(
            geoip_db, http_session, session, stats,
            blues=blues)
        results = source.search(query)
        self.check_model_results(results, None)
Ejemplo n.º 18
0
 def test_set_blue(self):
     blues = BlueShardFactory.build_batch(2)
     blue = blues[0]
     query = Query(blue=self.blue_model_query(blues))
     result = ExternalResult(blue.lat, blue.lon, blue.radius, None)
     self.cache.set(query, result)
     self.assertEqual(self.cache.get(query), result)
     self.check_stats(counter=[
         ('locate.fallback.cache', 1, 1, ['status:hit']),
     ])
Ejemplo n.º 19
0
    def test_many(self, geoip_db, metricsmock):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(2)
        wifis = WifiShardFactory.build_batch(3)

        self._make_query(
            geoip_db, blue=blues, cell=cells, wifi=wifis, ip=self.london_ip
        )
        metricsmock.assert_incr_once(
            "locate.query", tags=["key:test", "blue:many", "cell:many", "wifi:many"]
        )
Ejemplo n.º 20
0
    def test_many(self):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(2)
        wifis = WifiShardFactory.build_batch(3)

        self._make_query(blue=blues, cell=cells, wifi=wifis, ip=self.london_ip)
        self.check_stats(total=1, counter=[
            ('locate.query',
                ['key:key', 'region:GB',
                 'blue:many', 'cell:many', 'wifi:many']),
        ])
Ejemplo n.º 21
0
 def test_set_blue(self, cache, stats):
     blues = BlueShardFactory.build_batch(2)
     blue = blues[0]
     query = self._query(blue=self.blue_model_query(blues))
     result = ExternalResult(blue.lat, blue.lon, blue.radius, None)
     cache.set(query, result)
     assert cache.get(query) == result
     stats.check(counter=[
         ('locate.fallback.cache', 1, 1,
             [self.fallback_tag, 'status:hit']),
     ])
Ejemplo n.º 22
0
 def test_blue_better(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=[
         {'mac': blues[0].mac, 'signal': -90, 'name': 'my-beacon'},
         {'mac': blues[0].mac, 'signal': -82},
         {'mac': blues[0].mac, 'signal': -85},
         {'mac': blues[1].mac, 'signal': -70},
     ])
     self.assertEqual(len(query.blue), 2)
     self.assertEqual(
         set([blue.signal for blue in query.blue]), set([-70, -82]))
Ejemplo n.º 23
0
 def test_blue_better(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=[
         {'macAddress': blues[0].mac, 'signalStrength': -90,
          'name': 'my-beacon'},
         {'macAddress': blues[0].mac, 'signalStrength': -82},
         {'macAddress': blues[0].mac, 'signalStrength': -85},
         {'macAddress': blues[1].mac, 'signalStrength': -70},
     ])
     assert len(query.blue) == 2
     assert (set([blue.signalStrength for blue in query.blue]) ==
             set([-70, -82]))
Ejemplo n.º 24
0
    def test_blue(self):
        blues = BlueShardFactory.build_batch(2)
        macs = [blue.mac for blue in blues]
        query = Query(blue=self.blue_model_query(blues))

        self.assertEqual(len(query.blue), 2)
        self.assertEqual(query.expected_accuracy, DataAccuracy.high)

        for blue in query.blue:
            self.assertEqual(blue.age, 10)
            self.assertEqual(blue.signal, -85)
            self.assertTrue(blue.mac in macs)
Ejemplo n.º 25
0
    def test_blue(self):
        blues = BlueShardFactory.build_batch(2)
        macs = [blue.mac for blue in blues]
        query = Query(blue=self.blue_model_query(blues))

        self.assertEqual(len(query.blue), 2)
        self.assertEqual(query.expected_accuracy, DataAccuracy.high)

        for blue in query.blue:
            self.assertEqual(blue.age, 10)
            self.assertEqual(blue.signal, -85)
            self.assertTrue(blue.mac in macs)
Ejemplo n.º 26
0
    def test_blue(self):
        blues = BlueShardFactory.build_batch(2)
        macs = [blue.mac for blue in blues]
        query = Query(blue=self.blue_model_query(blues))

        assert len(query.blue) == 2
        assert query.expected_accuracy is DataAccuracy.high

        for blue in query.blue:
            assert blue.age == 10
            assert blue.signalStrength == -85
            assert blue.macAddress in macs
Ejemplo n.º 27
0
    def test_one(self):
        blues = BlueShardFactory.build_batch(1)
        cells = CellShardFactory.build_batch(1)
        wifis = WifiShardFactory.build_batch(1)

        self._make_query(blue=blues, cell=cells, wifi=wifis, ip=self.london_ip)
        self.check_stats(total=1,
                         counter=[
                             ('locate.query', [
                                 'key:key', 'region:GB', 'blue:one',
                                 'cell:one', 'wifi:one'
                             ]),
                         ])
Ejemplo n.º 28
0
    def test_many(self, geoip_db, stats):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(2)
        wifis = WifiShardFactory.build_batch(3)

        self._make_query(
            geoip_db, stats,
            blue=blues, cell=cells, wifi=wifis, ip=self.london_ip)
        stats.check(total=1, counter=[
            ('locate.query',
                ['key:test', 'region:GB',
                 'blue:many', 'cell:many', 'wifi:many']),
        ])
Ejemplo n.º 29
0
    def test_blue(self):
        blues = BlueShardFactory.build_batch(2)
        macs = [blue.mac for blue in blues]
        query = Query(blue=self.blue_model_query(blues))

        assert len(query.blue) == 2
        assert query.expected_accuracy is DataAccuracy.high
        assert query.geoip_only is False

        for blue in query.blue:
            assert blue.age == 10
            assert blue.signalStrength == -85
            assert blue.macAddress in macs
Ejemplo n.º 30
0
    def test_one(self, geoip_db, stats):
        blues = BlueShardFactory.build_batch(1)
        cells = CellShardFactory.build_batch(1)
        wifis = WifiShardFactory.build_batch(1)

        self._make_query(
            geoip_db, stats,
            blue=blues, cell=cells, wifi=wifis, ip=self.london_ip)
        stats.check(total=1, counter=[
            ('locate.query',
                ['key:test', 'region:GB',
                 'blue:one', 'cell:one', 'wifi:one']),
        ])
Ejemplo n.º 31
0
 def test_get_blue(self, cache, metricsmock):
     blues = BlueShardFactory.build_batch(2)
     query = self._query(blue=self.blue_model_query(blues))
     assert cache.get(query) is None
     assert (
         len(
             metricsmock.filter_records(
                 "incr",
                 "locate.fallback.cache",
                 value=1,
                 tags=[self.fallback_tag, "status:miss"],
             )
         )
         == 1
     )
Ejemplo n.º 32
0
    def test_many(self, geoip_db, metricsmock):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(2)
        wifis = WifiShardFactory.build_batch(3)

        self._make_query(geoip_db,
                         blue=blues,
                         cell=cells,
                         wifi=wifis,
                         ip=self.london_ip)
        assert metricsmock.get_records() == [(
            "incr",
            "locate.query",
            1,
            ["key:test", "region:GB", "blue:many", "cell:many", "wifi:many"],
        )]
Ejemplo n.º 33
0
 def test_blue_better(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(
         blue=[
             {
                 "macAddress": blues[0].mac,
                 "signalStrength": -90,
                 "name": "my-beacon",
             },
             {"macAddress": blues[0].mac, "signalStrength": -82},
             {"macAddress": blues[0].mac, "signalStrength": -85},
             {"macAddress": blues[1].mac, "signalStrength": -70},
         ]
     )
     assert len(query.blue) == 2
     assert set([blue.signalStrength for blue in query.blue]) == set([-70, -82])
Ejemplo n.º 34
0
 def test_blue(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=[
         {'mac': blue.mac, 'signal': -90, 'name': 'my'} for blue in blues])
     data = self.schema.deserialize(query.internal_query())
     self.assertEqual(data, {
         'bluetoothBeacons': [{
             'macAddress': blues[0].mac,
             'signalStrength': -90,
             'name': 'my',
         }, {
             'macAddress': blues[1].mac,
             'signalStrength': -90,
             'name': 'my',
         }],
         'fallbacks': {'lacf': True},
     })
Ejemplo n.º 35
0
    def test_blue_not_found(self, app, data_queues, metricsmock):
        blues = BlueShardFactory.build_batch(2)

        query = self.model_query(blues=blues)

        res = self._call(app, body=query, status=self.not_found.code)
        self.check_response(data_queues, res, "not_found")
        assert metricsmock.has_record(
            "incr",
            "request",
            value=1,
            tags=[self.metric_path, "method:post", "status:%s" % self.not_found.code],
        )
        assert metricsmock.has_record(
            "incr",
            self.metric_type + ".request",
            value=1,
            tags=[self.metric_path, "key:test"],
        )
        assert metricsmock.has_record(
            "incr",
            self.metric_type + ".query",
            value=1,
            tags=["key:test", "geoip:false", "blue:many", "cell:none", "wifi:none"],
        )
        assert metricsmock.has_record(
            "incr",
            self.metric_type + ".result",
            value=1,
            tags=[
                "key:test",
                "accuracy:high",
                "fallback_allowed:false",
                "status:miss",
            ],
        )
        assert metricsmock.has_record(
            "incr",
            self.metric_type + ".source",
            value=1,
            tags=["key:test", "source:internal", "accuracy:high", "status:miss"],
        )
        assert metricsmock.has_record(
            "timing", "request.timing", tags=[self.metric_path, "method:post"]
        )
Ejemplo n.º 36
0
 def test_set_blue(self, cache, metricsmock):
     blues = BlueShardFactory.build_batch(2)
     blue = blues[0]
     query = self._query(blue=self.blue_model_query(blues))
     result = ExternalResult(blue.lat, blue.lon, blue.radius, None)
     cache.set(query, result)
     assert cache.get(query) == result
     assert (
         len(
             metricsmock.filter_records(
                 "incr",
                 "locate.fallback.cache",
                 value=1,
                 tags=[self.fallback_tag, "status:hit"],
             )
         )
         == 1
     )
Ejemplo n.º 37
0
    def test_get_mixed(self, cache, stats):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(1)
        wifis = WifiShardFactory.build_batch(2)

        query = self._query(cell=self.cell_model_query(cells),
                            wifi=self.wifi_model_query(wifis))
        assert cache.get(query) is None

        query = self._query(blue=self.blue_model_query(blues),
                            cell=self.cell_model_query(cells))
        assert cache.get(query) is None

        query = self._query(blue=self.blue_model_query(blues),
                            wifi=self.wifi_model_query(wifis))
        assert cache.get(query) is None

        stats.check(counter=[
            ('locate.fallback.cache', 3, 1, ['status:bypassed']),
        ])
Ejemplo n.º 38
0
    def test_get_mixed(self):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(1)
        wifis = WifiShardFactory.build_batch(2)

        query = Query(cell=self.cell_model_query(cells),
                      wifi=self.wifi_model_query(wifis))
        self.assertEqual(self.cache.get(query), None)

        query = Query(blue=self.blue_model_query(blues),
                      cell=self.cell_model_query(cells))
        self.assertEqual(self.cache.get(query), None)

        query = Query(blue=self.blue_model_query(blues),
                      wifi=self.wifi_model_query(wifis))
        self.assertEqual(self.cache.get(query), None)

        self.check_stats(counter=[
            ('locate.fallback.cache', 3, 1, ['status:bypassed']),
        ])
Ejemplo n.º 39
0
    def test_get_mixed(self, cache, metricsmock, mix1, mix2):
        """A fallback query with mixed station types is not cached."""
        kwargs = {}
        mix = set((mix1, mix2))
        assert len(mix) == 2
        if "cell" in mix:
            kwargs["cell"] = self.cell_model_query(
                CellShardFactory.build_batch(1))
        if "blue" in mix:
            kwargs["blue"] = self.blue_model_query(
                BlueShardFactory.build_batch(2))
        if "wifi" in mix:
            kwargs["wifi"] = self.wifi_model_query(
                WifiShardFactory.build_batch(2))

        query = self._query(**kwargs)
        assert cache.get(query) is None
        metricsmock.assert_incr_once(
            "locate.fallback.cache",
            tags=[self.fallback_tag, "status:bypassed"])
Ejemplo n.º 40
0
    def test_get_mixed(self, cache, stats):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(1)
        wifis = WifiShardFactory.build_batch(2)

        query = self._query(cell=self.cell_model_query(cells),
                            wifi=self.wifi_model_query(wifis))
        assert cache.get(query) is None

        query = self._query(blue=self.blue_model_query(blues),
                            cell=self.cell_model_query(cells))
        assert cache.get(query) is None

        query = self._query(blue=self.blue_model_query(blues),
                            wifi=self.wifi_model_query(wifis))
        assert cache.get(query) is None

        stats.check(counter=[
            ('locate.fallback.cache', 3, 1,
                [self.fallback_tag, 'status:bypassed']),
        ])
Ejemplo n.º 41
0
 def test_blue(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=[
         {'macAddress': blue.mac, 'age': 1500, 'name': 'beacon',
          'signalStrength': -90}
         for blue in blues])
     data = self._call(query.json())
     assert (data == {
         'bluetoothBeacons': [{
             'macAddress': blues[0].mac,
             'age': 1500,
             'name': 'beacon',
             'signalStrength': -90,
         }, {
             'macAddress': blues[1].mac,
             'age': 1500,
             'name': 'beacon',
             'signalStrength': -90,
         }],
         'fallbacks': {'lacf': True},
     })
Ejemplo n.º 42
0
    def test_get_mixed(self, cache, metricsmock):
        blues = BlueShardFactory.build_batch(2)
        cells = CellShardFactory.build_batch(1)
        wifis = WifiShardFactory.build_batch(2)

        query = self._query(
            cell=self.cell_model_query(cells), wifi=self.wifi_model_query(wifis)
        )
        assert cache.get(query) is None

        query = self._query(
            blue=self.blue_model_query(blues), cell=self.cell_model_query(cells)
        )
        assert cache.get(query) is None

        query = self._query(
            blue=self.blue_model_query(blues), wifi=self.wifi_model_query(wifis)
        )
        assert cache.get(query) is None

        assert metricsmock.get_records() == [
            (
                "incr",
                "locate.fallback.cache",
                1,
                [self.fallback_tag, "status:bypassed"],
            ),
            (
                "incr",
                "locate.fallback.cache",
                1,
                [self.fallback_tag, "status:bypassed"],
            ),
            (
                "incr",
                "locate.fallback.cache",
                1,
                [self.fallback_tag, "status:bypassed"],
            ),
        ]
Ejemplo n.º 43
0
    def test_blue_not_found(self):
        blues = BlueShardFactory.build_batch(2)

        query = self.model_query(blues=blues)

        res = self._call(body=query, status=self.not_found.code)
        self.check_response(res, 'not_found')
        self.check_stats(counter=[
            ('request', [self.metric_path, 'method:post',
                         'status:%s' % self.not_found.code]),
            (self.metric_type + '.request', [self.metric_path, 'key:test']),
            (self.metric_type + '.query',
                ['key:test', 'region:none',
                 'geoip:false', 'blue:many', 'cell:none', 'wifi:none']),
            (self.metric_type + '.result', 'fallback_allowed:false',
                ['key:test', 'region:none', 'accuracy:high', 'status:miss']),
            (self.metric_type + '.source',
                ['key:test', 'region:none', 'source:internal',
                 'accuracy:high', 'status:miss']),
        ], timer=[
            ('request', [self.metric_path, 'method:post']),
        ])
Ejemplo n.º 44
0
 def test_blue_better(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(blue=[
         {
             'mac': blues[0].mac,
             'signal': -90,
             'name': 'my-beacon'
         },
         {
             'mac': blues[0].mac,
             'signal': -82
         },
         {
             'mac': blues[0].mac,
             'signal': -85
         },
         {
             'mac': blues[1].mac,
             'signal': -70
         },
     ])
     self.assertEqual(len(query.blue), 2)
     self.assertEqual(set([blue.signal for blue in query.blue]),
                      set([-70, -82]))
Ejemplo n.º 45
0
 def test_blue_region(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(
         blue=self.blue_model_query(blues), api_type='region')
     assert query.expected_accuracy is DataAccuracy.low
Ejemplo n.º 46
0
 def test_blue_region(self):
     blues = BlueShardFactory.build_batch(2)
     query = Query(
         blue=self.blue_model_query(blues), api_type='region')
     self.assertEqual(query.expected_accuracy, DataAccuracy.low)
Ejemplo n.º 47
0
 def test_get_blue(self, cache, metricsmock):
     blues = BlueShardFactory.build_batch(2)
     query = self._query(blue=self.blue_model_query(blues))
     assert cache.get(query) is None
     metricsmock.assert_incr_once("locate.fallback.cache",
                                  tags=[self.fallback_tag, "status:miss"])
Ejemplo n.º 48
0
    def add_reports(
        self,
        celery,
        num=1,
        blue_factor=0,
        cell_factor=1,
        wifi_factor=2,
        blue_key=None,
        cell_mcc=None,
        wifi_key=None,
        api_key="test",
        lat=None,
        lon=None,
        source=None,
    ):
        reports = []
        timestamp = int(time.time() * 1000)
        for i in range(num):
            pos = CellShardFactory.build()
            report = {
                "timestamp": timestamp,
                "position": {},
                "bluetoothBeacons": [],
                "cellTowers": [],
                "wifiAccessPoints": [],
            }
            report["position"]["latitude"] = lat or pos.lat
            report["position"]["longitude"] = lon or pos.lon
            report["position"]["accuracy"] = 17.0 + i
            if source is not None:
                report["position"]["source"] = source

            blues = BlueShardFactory.build_batch(blue_factor,
                                                 lat=pos.lat,
                                                 lon=pos.lon)
            for blue in blues:
                blue_data = {
                    "macAddress": blue_key or blue.mac,
                    "signalStrength": -100 + i,
                }
                report["bluetoothBeacons"].append(blue_data)

            cells = CellShardFactory.build_batch(cell_factor,
                                                 lat=pos.lat,
                                                 lon=pos.lon)
            for cell in cells:
                cell_data = {
                    "radioType": cell.radio.name,
                    "mobileCountryCode": cell_mcc or cell.mcc,
                    "mobileNetworkCode": cell.mnc,
                    "locationAreaCode": cell.lac,
                    "cellId": cell.cid,
                    "primaryScramblingCode": cell.psc,
                    "signalStrength": -110 + i,
                }
                report["cellTowers"].append(cell_data)

            wifis = WifiShardFactory.build_batch(wifi_factor,
                                                 lat=pos.lat,
                                                 lon=pos.lon)
            for wifi in wifis:
                wifi_data = {
                    "macAddress": wifi_key or wifi.mac,
                    "signalStrength": -90 + i,
                    "ssid": "my-wifi",
                }
                report["wifiAccessPoints"].append(wifi_data)

            reports.append(report)

        items = [{
            "api_key": api_key,
            "source": rep["position"].get("source", "gnss"),
            "report": rep,
        } for rep in reports]

        self.queue(celery).enqueue(items)
        return reports