Ejemplo n.º 1
0
    def test_update_geography_empty_data(self):
        command = IpGeobase()
        cities_info = command._update_geography(self.countries, self.regions, self.cities)

        self.assertEqual(set(Country.objects.all().values_list('code', flat=True)), self.countries)
        self.assertEqual(list(Region.objects.all().values('name', 'country__code')), self.regions)
        self.assertEqual(list(City.objects.all().values('name', 'id', 'region__name')), self.cities)
Ejemplo n.º 2
0
    def test_update_geography_empty_data(self):
        command = IpGeobase()
        cities_info = command._update_geography(
            self.countries, self.regions, self.cities,
            self.cidr['city_country_mapping'])

        check_against_countries = [{
            'code': 'FR',
            'name': 'France'
        }, {
            'code': 'UA',
            'name': 'Ukraine'
        }, {
            'code': 'RU',
            'name': 'Russian Federation'
        }]

        self.assertCountEqual(Country.objects.all().values('code', 'name'),
                              check_against_countries)
        self.assertEqual(
            list(Region.objects.all().values('name', 'country__code')),
            self.regions)
        self.assertEqual(
            list(City.objects.all().values('name', 'id', 'region__name')),
            self.cities)
Ejemplo n.º 3
0
    def test_process_cidr_file_with_allowed_countries(self):
        check_against = {
            'cidr': [
                {
                    'start_ip': '37249024',
                    'end_ip': '37251071',
                    'country_id': 'UA',
                    'city_id': '1'
                },
                {
                    'start_ip': '37355520',
                    'end_ip': '37392639',
                    'country_id': 'RU',
                    'city_id': '2176'
                },
            ],
            'countries':
            set(['UA', 'RU']),
            'city_country_mapping': {
                '2176': 'RU',
                '1': 'UA'
            }
        }
        backend = IpGeobase()
        cidr_info = backend._process_cidr_file(
            open(os.path.join(TEST_STATIC_DIR, 'cidr_optim.txt')))

        self.assertEqual(cidr_info['city_country_mapping'],
                         check_against['city_country_mapping'])
        self.assertEqual(cidr_info['countries'], check_against['countries'])
        self.assertEqual(cidr_info['cidr'], check_against['cidr'])
Ejemplo n.º 4
0
    def test_process_cities_file(self):
        city_country_mapping = {'1': 'UA', '1057': 'RU', '2176': 'RU'}

        check_against = {
            'cities': [
                    {'region__name': 'Хмельницкая область', 'name': 'Хмельницкий',
                     'id': '1', 'longitude': Decimal('49.416668'), 'latitude': Decimal('27.000000')},
                    {'region__name': 'Кемеровская область', 'name': 'Березовский',
                     'id': '1057', 'longitude': Decimal('55.572479'), 'latitude': Decimal('86.192734')},
                    {'region__name': 'Ханты-Мансийский автономный округ', 'name': 'Мегион',
                     'id': '2176', 'longitude': Decimal('61.050400'), 'latitude': Decimal('76.113472')},
            ],
            'regions': [
                    {'name':  'Хмельницкая область', 'country__code': 'UA'},
                    {'name':  'Кемеровская область', 'country__code': 'RU'},
                    {'name':  'Ханты-Мансийский автономный округ', 'country__code': 'RU'},
            ]
        }

        backend = IpGeobase()
        cities_info = backend._process_cities_file(io.open(os.path.join(TEST_STATIC_DIR, 'cities.txt'),
                                                   encoding=settings.IPGEOBASE_FILE_ENCODING), city_country_mapping)

        self.assertEqual(cities_info['cities'], check_against['cities'])
        self.assertEqual(cities_info['regions'], check_against['regions'])
Ejemplo n.º 5
0
    def test_update_geography_empty_data(self):
        command = IpGeobase()
        cities_info = command._update_geography(self.countries, self.regions, self.cities)

        check_against_countries = [
            {'code':'FR', 'name':'France'},
            {'code':'UA', 'name':'Ukraine'},
            {'code':'RU', 'name':'Russian Federation'}
        ]

        self.assertCountEqual(Country.objects.all().values('code', 'name'), check_against_countries)
        self.assertEqual(list(Region.objects.all().values('name', 'country__code')), self.regions)
        self.assertEqual(list(City.objects.all().values('name', 'id', 'region__name')), self.cities)
Ejemplo n.º 6
0
    def test_process_cities_file(self):
        city_country_mapping = {'1': 'UA', '1057': 'RU', '2176': 'RU'}

        check_against = {
            'cities': [
                {
                    'region__name': 'Хмельницкая область',
                    'name': 'Хмельницкий',
                    'id': '1',
                    'latitude': Decimal('49.416668'),
                    'longitude': Decimal('27.000000')
                },
                {
                    'region__name': 'Кемеровская область',
                    'name': 'Березовский',
                    'id': '1057',
                    'latitude': Decimal('55.572479'),
                    'longitude': Decimal('86.192734')
                },
                {
                    'region__name': 'Ханты-Мансийский автономный округ',
                    'name': 'Мегион',
                    'id': '2176',
                    'latitude': Decimal('61.050400'),
                    'longitude': Decimal('76.113472')
                },
            ],
            'regions': [
                {
                    'name': 'Хмельницкая область',
                    'country__code': 'UA'
                },
                {
                    'name': 'Кемеровская область',
                    'country__code': 'RU'
                },
                {
                    'name': 'Ханты-Мансийский автономный округ',
                    'country__code': 'RU'
                },
            ]
        }

        backend = IpGeobase()
        cities_info = backend._process_cities_file(
            io.open(os.path.join(TEST_STATIC_DIR, 'cities.txt'),
                    encoding=settings.IPGEOBASE_FILE_ENCODING),
            city_country_mapping)

        self.assertEqual(cities_info['cities'], check_against['cities'])
        self.assertEqual(cities_info['regions'], check_against['regions'])
Ejemplo n.º 7
0
    def test_update_pre_existing_data(self):
        self.assertTrue(Country.objects.all().count() == 0)
        ua = Country.objects.create(name='Ukraine', code='UA')
        ru = Country.objects.create(name='Russia', code='RU')

        kemerovo = Region.objects.create(name='Кемеровская область', country=ru)
        City.objects.create(name='Березовский', id=1057, region=kemerovo)

        backend = IpGeobase()
        backend._update_geography(self.countries, self.regions, self.cities)

        self.assertEqual(set(Country.objects.all().values_list('code', flat=True)), self.countries)
        self.assertCountEqual(list(Region.objects.all().values('name', 'country__code')), self.regions)
        self.assertEqual(list(City.objects.all().values('name', 'id', 'region__name')), self.cities)
Ejemplo n.º 8
0
    def test_convert_fileline_to_dict(self):
        check_against_dict = {'city_id': u'1',
                              'city_name': u'Хмельницкий',
                              'region_name': u'Хмельницкая область',
                              'district_name': u'Центральная Украина',
                              'longitude': u'49.416668',
                              'latitude': u'27.000000'
        }

        backend = IpGeobase()
        generator = backend._line_to_dict(file=open(os.path.join(TEST_STATIC_DIR, 'cities.txt')),
            field_names=settings.IPGEOBASE_CITIES_FIELDS)
        result = generator.next()
        self.assertEqual(result, check_against_dict)
Ejemplo n.º 9
0
    def test_process_cidr_file_with_allowed_countries(self):
        check_against = {
            'cidr': [
                    {'start_ip': '37249024', 'end_ip': '37251071', 'country_id': 'UA', 'city_id': '1'},
                    {'start_ip': '37355520', 'end_ip': '37392639', 'country_id': 'RU', 'city_id': '2176'},
            ],
            'countries': set(['UA', 'RU']),
            'city_country_mapping': {'2176': 'RU', '1': 'UA'}
        }
        backend = IpGeobase()
        cidr_info = backend._process_cidr_file(open(os.path.join(TEST_STATIC_DIR, 'cidr_optim.txt')))

        self.assertEqual(cidr_info['city_country_mapping'], check_against['city_country_mapping'])
        self.assertEqual(cidr_info['countries'], check_against['countries'])
        self.assertEqual(cidr_info['cidr'], check_against['cidr'])
Ejemplo n.º 10
0
    def test_convert_fileline_to_dict(self):
        check_against_dict = {
            'city_id': '1',
            'city_name': 'Хмельницкий',
            'region_name': 'Хмельницкая область',
            'district_name': 'Центральная Украина',
            'longitude': '49.416668',
            'latitude': '27.000000'
        }

        backend = IpGeobase()
        generator = backend._line_to_dict(
            file=io.open(os.path.join(TEST_STATIC_DIR, 'cities.txt'), encoding=settings.IPGEOBASE_FILE_ENCODING),
            field_names=settings.IPGEOBASE_CITIES_FIELDS)
        result = compat.advance_iterator(generator)
        self.assertEqual(result, check_against_dict)
Ejemplo n.º 11
0
    def test_build_city_region_mapping(self):
        check_against_mapping = {
            1: 1,
            1057: 2,
            1058: 2,
            2176: 3,
        }
        for region in self.regions:
            Region.objects.create(name=region['name'], country_id=region['country__code'])
        for city in self.cities:
            region = Region.objects.get(name=city['region__name'])
            City.objects.create(id=city['id'], name=city['name'], region=region)

        backend = IpGeobase()
        mapping = backend._build_city_region_mapping()

        self.assertCountEqual(mapping, check_against_mapping)
Ejemplo n.º 12
0
    def test_convert_fileline_to_dict(self):
        check_against_dict = {
            'city_id': '1',
            'city_name': 'Хмельницкий',
            'region_name': 'Хмельницкая область',
            'district_name': 'Центральная Украина',
            'latitude': '49.416668',
            'longitude': '27.000000'
        }

        backend = IpGeobase()
        generator = backend._line_to_dict(
            file=io.open(os.path.join(TEST_STATIC_DIR, 'cities.txt'),
                         encoding=settings.IPGEOBASE_FILE_ENCODING),
            field_names=settings.IPGEOBASE_CITIES_FIELDS)
        result = compat.advance_iterator(generator)
        self.assertEqual(result, check_against_dict)
Ejemplo n.º 13
0
    def test_update_cidr(self):
        check_against_ranges = [
            {'start_ip': 33554432, 'end_ip': 34603007, 'country_id': 'FR', 'city_id': None, 'region_id': None},
            {'start_ip': 37249024, 'end_ip': 37251071, 'country_id': 'UA', 'city_id': 1, 'region_id': 1},
            {'start_ip': 37355520, 'end_ip': 37392639, 'country_id': 'RU', 'city_id': 2176,'region_id': 3},
        ]

        backend = IpGeobase()
        for region in self.regions:
            Region.objects.create(name=region['name'], country_id=region['country__code'])
        for city in self.cities:
            region = Region.objects.get(name=city['region__name'])
            City.objects.create(id=city['id'], name=city['name'], region=region)
        backend._update_cidr(self.cidr)

        self.assertCountEqual(IpRange.objects.all().values('start_ip', 'end_ip', 'country_id', 'city_id', 'region_id'),
                              check_against_ranges)
Ejemplo n.º 14
0
    def handle(self, *args, **options):
        logger = self.get_logger(options['verbosity'])
        backend = IpGeobase(logger=logger)

        if options.get('clear'):
            backend.clear_database()

        backend.download_files()
        backend.sync_database()
Ejemplo n.º 15
0
    def test_build_city_region_mapping(self):
        check_against_mapping = {
            1: 1,
            1057: 2,
            1058: 2,
            2176: 3,
        }
        for region in self.regions:
            Region.objects.create(name=region['name'],
                                  country_id=region['country__code'])
        for city in self.cities:
            region = Region.objects.get(name=city['region__name'])
            City.objects.create(id=city['id'],
                                name=city['name'],
                                region=region)

        backend = IpGeobase()
        mapping = backend._build_city_region_mapping()

        self.assertCountEqual(mapping, check_against_mapping)
Ejemplo n.º 16
0
    def test_update_pre_existing_data(self):
        self.assertTrue(Country.objects.all().count() == 0)
        ua = Country.objects.create(name='Ukraine', code='UA')
        ru = Country.objects.create(name='Russia', code='RU')

        kemerovo = Region.objects.create(name='Кемеровская область',
                                         country=ru)
        City.objects.create(name='Березовский', id=1057, region=kemerovo)

        backend = IpGeobase()
        backend._update_geography(self.countries, self.regions, self.cities)

        self.assertEqual(
            set(Country.objects.all().values_list('code', flat=True)),
            self.countries)
        self.assertCountEqual(
            list(Region.objects.all().values('name', 'country__code')),
            self.regions)
        self.assertEqual(
            list(City.objects.all().values('name', 'id', 'region__name')),
            self.cities)
Ejemplo n.º 17
0
    def test_update_cidr(self):
        check_against_ranges = [
            {
                'start_ip': 33554432,
                'end_ip': 34603007,
                'country_id': 'FR',
                'city_id': None,
                'region_id': None
            },
            {
                'start_ip': 37249024,
                'end_ip': 37251071,
                'country_id': 'UA',
                'city_id': 1,
                'region_id': 1
            },
            {
                'start_ip': 37355520,
                'end_ip': 37392639,
                'country_id': 'RU',
                'city_id': 2176,
                'region_id': 3
            },
        ]

        backend = IpGeobase()
        for region in self.regions:
            Region.objects.create(name=region['name'],
                                  country_id=region['country__code'])
        for city in self.cities:
            region = Region.objects.get(name=city['region__name'])
            City.objects.create(id=city['id'],
                                name=city['name'],
                                region=region)
        backend._update_cidr(self.cidr)

        self.assertCountEqual(
            IpRange.objects.all().values('start_ip', 'end_ip', 'country_id',
                                         'city_id', 'region_id'),
            check_against_ranges)
Ejemplo n.º 18
0
    def test_download_unpack(self, mock):
        self.opener = mock.return_value
        self.opener.content = io.open(os.path.join(
            TEST_STATIC_DIR, self.IPGEOBASE_ZIP_FILE_PATH),
                                      mode='rb').read()

        result = IpGeobase()._download_extract_archive(
            url=self.IPGEOBASE_MOCK_URL)

        mock.assert_called_once_with(self.IPGEOBASE_MOCK_URL)
        self.assertEqual(len(result), 2)
        self.assertTrue(result['cities'].endswith(
            settings.IPGEOBASE_CITIES_FILENAME))
        self.assertTrue(result['cidr'].endswith(
            settings.IPGEOBASE_CIDR_FILENAME))
Ejemplo n.º 19
0
 def test_download_exception(self, mock):
     mock.side_effect = requests.exceptions.Timeout('Response timeout')
     self.assertRaises(requests.exceptions.Timeout,
                       IpGeobase()._download_extract_archive,
                       self.IPGEOBASE_MOCK_URL)