Exemple #1
0
 def test_satisfies_fail(self):
     wifis = WifiShardFactory.build_batch(2)
     wifi_query = [{'mac': wifi.mac} for wifi in wifis]
     positions = PositionResultList(
         Position(lat=1.0, lon=1.0, accuracy=2500.0, score=2.0))
     query = Query(api_type='locate', wifi=wifi_query)
     self.assertFalse(positions.satisfies(query))
Exemple #2
0
 def test_satisfies_fail(self):
     wifis = WifiShardFactory.build_batch(2)
     wifi_query = [{'macAddress': wifi.mac} for wifi in wifis]
     positions = PositionResultList(
         Position(lat=1.0, lon=1.0, accuracy=2500.0, score=2.0))
     query = Query(api_type='locate', wifi=wifi_query)
     assert not positions.satisfies(query)
Exemple #3
0
 def test_satisfies(self):
     wifis = WifiShardFactory.build_batch(2)
     wifi_query = [{'mac': wifi.mac} for wifi in wifis]
     positions = PositionResultList([
         Position(lat=1.0, lon=1.0, accuracy=100.0, score=0.5),
         Position(lat=1.0, lon=1.0, accuracy=10000.0, score=0.6)])
     query = Query(api_type='locate', wifi=wifi_query)
     self.assertTrue(positions.satisfies(query))
Exemple #4
0
 def test_satisfies(self):
     wifis = WifiShardFactory.build_batch(2)
     wifi_query = [{'mac': wifi.mac} for wifi in wifis]
     positions = PositionResultList([
         Position(lat=1.0, lon=1.0, accuracy=100.0, score=0.5),
         Position(lat=1.0, lon=1.0, accuracy=10000.0, score=0.6)
     ])
     query = Query(api_type='locate', wifi=wifi_query)
     self.assertTrue(positions.satisfies(query))
Exemple #5
0
 def test_satisfies(self):
     wifis = WifiShardFactory.build_batch(2)
     wifi_query = [{"macAddress": wifi.mac} for wifi in wifis]
     positions = PositionResultList(
         [
             Position(lat=1.0, lon=1.0, accuracy=100.0, score=0.5),
             Position(lat=1.0, lon=1.0, accuracy=10000.0, score=0.6),
         ]
     )
     query = Query(api_type="locate", wifi=wifi_query)
     assert positions.satisfies(query)
Exemple #6
0
    def test_best(self):
        gb1 = Position(lat=51.5, lon=-0.1, accuracy=100000.0, score=0.6)
        gb2 = Position(lat=51.5002, lon=-0.1, accuracy=10000.0, score=1.5)
        gb3 = Position(lat=51.7, lon=-0.1, accuracy=1000.0, score=5.0)
        bt1 = Position(lat=27.5002, lon=90.5, accuracy=1000.0, score=0.5)
        bt2 = Position(lat=27.5, lon=90.5, accuracy=2000.0, score=2.0)
        bt3 = Position(lat=27.7, lon=90.7, accuracy=500.0, score=5.0)
        bt4 = Position(lat=27.9, lon=90.7, accuracy=300.0, score=5.0)

        # single result works
        self.assertAlmostEqual(PositionResultList([gb1]).best().lat, 51.5, 4)

        # the lowest accuracy result from the best cluster wins
        self.assertAlmostEqual(
            PositionResultList([bt1, bt2]).best().lat, 27.5002, 4)
        self.assertAlmostEqual(
            PositionResultList([gb1, bt2]).best().lat, 27.5, 4)
        self.assertAlmostEqual(
            PositionResultList([gb1, gb2, bt2]).best().lat, 51.5002, 4)
        self.assertAlmostEqual(
            PositionResultList([gb1, gb3, bt1, bt2]).best().lat, 51.7, 4)
        self.assertAlmostEqual(
            PositionResultList([gb1, gb2, bt2, bt3]).best().lat, 27.7, 4)

        # break tie by accuracy
        self.assertAlmostEqual(
            PositionResultList([gb3, bt3]).best().lat, 27.7, 4)
        self.assertAlmostEqual(
            PositionResultList([bt3, bt4]).best().lat, 27.9, 4)
Exemple #7
0
 def _make_results(self, accuracy=None):
     london = GEOIP_DATA['London']
     return PositionResultList(Position(
         lat=london['latitude'],
         lon=london['longitude'],
         accuracy=accuracy,
         score=0.5))
Exemple #8
0
 def test_no_results(self, geoip_db, metricsmock):
     wifis = WifiShardFactory.build_batch(2)
     results = PositionResultList()
     self._make_query(geoip_db, DataSource.internal, results, wifi=wifis)
     metricsmock.assert_incr_once(
         "locate.source",
         tags=["key:test", "source:internal", "accuracy:high", "status:miss"],
     )
Exemple #9
0
 def _make_results(self, accuracy=None):
     london = GEOIP_DATA["London"]
     return PositionResultList(
         Position(
             lat=london["latitude"],
             lon=london["longitude"],
             accuracy=accuracy,
             score=0.5,
         ))
Exemple #10
0
    def test_check_already_good_result(self, geoip_db, http_session, session, source):
        wifis = WifiShardFactory.build_batch(2)
        results = PositionResultList(
            Position(
                source=DataSource.internal, lat=1.0, lon=1.0, accuracy=100.0, score=1.0
            )
        )

        query = self.model_query(geoip_db, http_session, session, wifis=wifis)
        self.check_should_search(source, query, False, results=results)
Exemple #11
0
 def test_no_results(self):
     wifis = WifiShardFactory.build_batch(2)
     results = PositionResultList()
     self._make_query(DataSource.internal, results, wifi=wifis)
     self.check_stats(counter=[
         ('locate.source', [
             'key:key', 'region:none', 'source:internal', 'accuracy:high',
             'status:miss'
         ]),
     ])
Exemple #12
0
    def test_check_geoip_result(self):
        london = self.london_model
        wifis = WifiShardFactory.build_batch(2)
        results = PositionResultList(
            Position(source=DataSource.geoip,
                     lat=london.lat,
                     lon=london.lon,
                     accuracy=float(london.radius),
                     score=0.6))

        query = self.model_query(wifis=wifis, ip=london.ip)
        self.check_should_search(query, True, results=results)
Exemple #13
0
 def test_no_results(self, geoip_db, metricsmock):
     wifis = WifiShardFactory.build_batch(2)
     results = PositionResultList()
     self._make_query(geoip_db, DataSource.internal, results, wifi=wifis)
     assert metricsmock.has_record(
         "incr",
         "locate.source",
         value=1,
         tags=[
             "key:test",
             "region:none",
             "source:internal",
             "accuracy:high",
             "status:miss",
         ],
     )
Exemple #14
0
    def test_check_geoip_result(self, london_model, geoip_db, http_session,
                                session, source, stats):
        wifis = WifiShardFactory.build_batch(2)
        results = PositionResultList(
            Position(source=DataSource.geoip,
                     lat=london_model.lat,
                     lon=london_model.lon,
                     accuracy=float(london_model.radius),
                     score=0.6))

        query = self.model_query(geoip_db,
                                 http_session,
                                 session,
                                 stats,
                                 wifis=wifis,
                                 ip=london_model.ip)
        self.check_should_search(source, query, True, results=results)
Exemple #15
0
 def _make_results(self, accuracy=None):
     return PositionResultList(
         Position(lat=self.london['latitude'],
                  lon=self.london['longitude'],
                  accuracy=accuracy,
                  score=0.5))
Exemple #16
0
 def test_satisfies_empty(self):
     wifis = WifiShardFactory.build_batch(2)
     wifi_query = [{'macAddress': wifi.mac} for wifi in wifis]
     positions = PositionResultList()
     query = Query(api_type='locate', wifi=wifi_query)
     assert not positions.satisfies(query)
Exemple #17
0
 def test_best_result(self):
     best_result = PositionResultList().best(DataAccuracy.low)
     self.assertTrue(best_result.empty())
     self.assertEqual(type(best_result), Position)
Exemple #18
0
 def test_best_empty(self):
     assert PositionResultList().best() is None
Exemple #19
0
 def test_repr(self):
     assert repr(PositionResultList()).startswith('PositionResultList:')
Exemple #20
0
 def test_repr(self):
     results = PositionResultList()
     self.assertTrue(repr(results).startswith('PositionResultList:'))
Exemple #21
0
 def test_best_empty(self):
     self.assertTrue(PositionResultList().best() is None)
Exemple #22
0
 def test_satisfies_empty(self):
     wifis = WifiShardFactory.build_batch(2)
     wifi_query = [{'mac': wifi.mac} for wifi in wifis]
     positions = PositionResultList()
     query = Query(api_type='locate', wifi=wifi_query)
     self.assertFalse(positions.satisfies(query))