Ejemplo n.º 1
0
 def test_md5(self):
     evaluator = ApkEvaluator(Criteria(md5={'123', '456'}))
     self.assertTrue(evaluator.satisfies_md5(Apk(md5='123')))
     self.assertFalse(evaluator.satisfies_md5(Apk(md5='789')))
     self.assertTrue(evaluator.satisfies_md5(Apk(md5='456')))
     self.assertFalse(evaluator.satisfies_md5(Apk(md5='035')))
     self.assertFalse(evaluator.satisfies_md5(Apk()))
Ejemplo n.º 2
0
 def test_pkg_name(self):
     evaluator = ApkEvaluator(Criteria(pkg_name=['name1', 'name2']))
     self.assertTrue(evaluator.satisfies_name(Apk(pkg_name='name1')))
     self.assertTrue(evaluator.satisfies_name(Apk(pkg_name='name2')))
     self.assertFalse(evaluator.satisfies_name(Apk(pkg_name='name3')))
     self.assertFalse(evaluator.satisfies_name(Apk(pkg_name='name4')))
     self.assertFalse(evaluator.satisfies_name(Apk()))
Ejemplo n.º 3
0
 def test_sha1(self):
     evaluator = ApkEvaluator(Criteria(sha1={'123', '456'}))
     self.assertTrue(evaluator.satisfies_sha1(Apk(sha1='123')))
     self.assertFalse(evaluator.satisfies_sha1(Apk(sha1='789')))
     self.assertTrue(evaluator.satisfies_sha1(Apk(sha1='456')))
     self.assertFalse(evaluator.satisfies_sha1(Apk(sha1='035')))
     self.assertFalse(evaluator.satisfies_sha1(Apk()))
Ejemplo n.º 4
0
 def setUp(self):
     self.apk = Apk(sha256='1234', pkg_name='apk1')
     self.apk2 = Apk(sha256='5678', pkg_name='apk2')
     self.dataset = Dataset(self.apk, self.apk2)
     self.constructor_mock = mock.create_autospec(UrlConstructor)
     self.constructor_mock.construct.side_effect = lambda apk: ' https://' + apk.sha256  # use sha256 of apk as download url, just for a test
     self.dataset_downloader = DatasetDownloader(
         self.dataset, url_constructor=self.constructor_mock, out_dir='out')
Ejemplo n.º 5
0
 def test_initializes_from_file(self):
     source = Source(input_file='resources/sample.csv')
     expected_apks = [Apk(**{'sha256': '0000003B455A6C7AF837EF90F2EAFFD856E3B5CF49F5E27191430328DE2FA670','sha1':'9C14D537A7ADB4CFC43D291352F73E05E0CCDD4A','md5':'3EDFC78AB53521942798AD551027D04F','dex_date':'2016-04-05 17:58:46','apk_size':'10386469','pkg_name':'com.zte.bamachaye','vercode':'121','vt_detection':'0','vt_scan_date':'2016-06-15 15:26:44','dex_size':'4765888','markets':'anzhi'}),
     Apk(**{'sha256': '00000439A3FFA123C3F9BC45E5E821351B1A5C276871B36447AB80C74261F354','sha1':'375D6FFD167BB5E7E2935B1B927F87D8E44A9AB4','md5':'9283C74DD8356C18BB6D94B88B8FDD9B','dex_date':'2011-10-25 02:30:56','apk_size':'1044597','pkg_name':'bmthx.god102409paperi','vercode':'6','vt_detection':'1','vt_scan_date':'2014-04-27 06:30:31','dex_size':'105660','markets':'appchina'})]
     actual_apks = []
     for apk in source:
         actual_apks.append(apk)
     self.assertEqual(actual_apks, expected_apks)
Ejemplo n.º 6
0
 def test_vt_detection(self):
     evaluator = ApkEvaluator(
         Criteria(vt_detection_from=7, vt_detection_to=40))
     self.assertTrue(evaluator.satisfies_vt_detection(Apk(vt_detection=8)))
     self.assertTrue(evaluator.satisfies_vt_detection(Apk(vt_detection=12)))
     self.assertFalse(evaluator.satisfies_vt_detection(Apk(vt_detection=5)))
     self.assertFalse(
         evaluator.satisfies_vt_detection(Apk(vt_detection=100)))
     self.assertFalse(evaluator.satisfies_vt_detection(Apk()))
Ejemplo n.º 7
0
 def test_saves_metadata(self):
     dataset = Dataset(
         Apk(pkg_name='apk1',
             apk_size=8,
             dex_date='01-01-2001',
             markets='play'),
         Apk(pkg_name='apk2',
             apk_size=13,
             dex_date='01-03-2001',
             markets='play|china'))
     MetadataSaver(dataset=dataset,
                   out_dir='out').save(['pkg_name', 'apk_size', 'dex_date'])
     self.assertTrue(os.path.exists(r'out\metadata.csv'))
Ejemplo n.º 8
0
 def __next__(self):
     try:
         line = next(self.reader)
     except StopIteration:
         self.input_file.close()
         raise StopIteration
     return Apk(*line)
Ejemplo n.º 9
0
 def __next__(self):
     try:
         line = next(self.input_file)
     except StopIteration:
         self.input_file.close()
         raise StopIteration
     columns = line.strip('\n').replace('"', '').split(',')
     return Apk(*columns)
Ejemplo n.º 10
0
 def test_return_dataset_of_size_n(self):
     subset = RandomPicker().get_random_subset(
         Dataset(Apk('apk1'), Apk('apk2'), Apk('apk3')), 2)
     self.assertEqual(len(subset), 2)
     subset = RandomPicker().get_random_subset(
         Dataset(Apk('apk1'), Apk('apk2'), Apk('apk3'), Apk('apk4')), 3)
     self.assertEqual(len(subset), 3)
Ejemplo n.º 11
0
    def test_saves_metadata(self):
        dataset = Dataset(Apk(pkg_name='apk1', apk_size=8, dex_date='01-01-2001', markets='play'), Apk(pkg_name='apk2', apk_size=13, dex_date='01-03-2001', markets='play|china'))
        MetadataSaver(dataset=dataset, out_dir='out').save(['pkg_name', 'apk_size', 'dex_date', 'markets'])
        expected_out = 'pkg_name,apk_size,dex_date,markets\n\
apk1,8,01-01-2001,play\n\
apk2,13,01-03-2001,china|play\n\
'
        self.assertTrue(os.path.exists(r'out/metadata.csv'))
        with open('out/metadata.csv') as f:
            self.assertEqual(expected_out, f.read())
Ejemplo n.º 12
0
 def test_hadles_commas_in_column(self):
     source = Source(input_file=os.path.join(THIS_DIR, 'resources/commas_in_column.csv'))
     try:
         actual_apk = next(source)
         expected_apk = Apk(**{'sha256': 'BC564D52C6E79E1676C19D9602B1359A33B8714A1DC5FCB8ED602209D0B70266',
                               'sha1': '1E56DD37F5E9DD8DCA2D41720110DAFDEFF89E90',
                               'md5': '25839816B7BBB4BB766EC1816C51C3C3', 'dex_date': '2013-11-23 19:41:08',
                               'apk_size': '8344281', 'pkg_name': 'com.androidemu.gbalvbaoshi,snaggamea',
                               'vercode': '23', 'vt_detection': '31', 'vt_scan_date': '2018-07-23 15:18:33',
                               'dex_size': '358188', 'markets': 'VirusShare'})
     finally:
         source.input_file.close()
     self.assertEqual(actual_apk, expected_apk)
Ejemplo n.º 13
0
 def test_return_subset_of_dataset(self):
     initial_dataset = Dataset(Apk('apk1'), Apk('apk2'), Apk('apk3'),
                               Apk('apk4'), Apk('apk5'), Apk('apk6'))
     subset = RandomPicker().get_random_subset(initial_dataset, 4)
     self.assertTrue(initial_dataset.contains(subset))
     subset = RandomPicker().get_random_subset(initial_dataset, 2)
     self.assertTrue(initial_dataset.contains(subset))
     self.assertEqual(len(subset), 2)
Ejemplo n.º 14
0
 def test_equals(self):
     self.assertEqual(Dataset(), Dataset())
     dataset2 = Dataset(Apk('apk1'), Apk('apk2'), Apk('apk3'), Apk('apk4'),
                        Apk('apk5'))
     self.assertEqual(self.dataset, dataset2)
     self.assertEqual(hash(self.dataset), hash(dataset2))
     dataset2.add(Apk('apk6'))
     self.assertNotEqual(hash(self.dataset), hash(dataset2))
Ejemplo n.º 15
0
 def test_markets(self):
     evaluator = ApkEvaluator(
         Criteria(markets={'google.play.com', 'chinese.market'}))
     self.assertTrue(
         evaluator.satisfies_markets(Apk(markets='google.play.com')))
     self.assertTrue(
         evaluator.satisfies_markets(Apk(markets='chinese.market')))
     self.assertTrue(
         evaluator.satisfies_markets(
             Apk(markets='google.play.com|chinese.market')))
     self.assertFalse(
         evaluator.satisfies_markets(Apk(markets='another.chinese.market')))
     self.assertFalse(
         evaluator.satisfies_markets(Apk(markets='onemore.chinese.market')))
     self.assertFalse(evaluator.satisfies_markets(Apk()))
Ejemplo n.º 16
0
 def test_all(self):
     evaluator = ApkEvaluator(
         Criteria(dex_date_from='2016-3-3 00:00:01',
                  dex_date_to='2016-3-5 23:59:59',
                  apk_size_from=1,
                  apk_size_to=4,
                  pkg_name=['pkg1', 'pkg2'],
                  vt_detection_from=1,
                  vt_detection_to=5,
                  markets={'market1', 'market2'},
                  sha256={'adf', '789'}))
     self.assertTrue(
         evaluator.satisfies(
             Apk(dex_date='2016-3-4 17:58:00',
                 apk_size=3,
                 pkg_name='pkg1',
                 vt_detection=3,
                 markets='market1',
                 sha256='adf')))
     self.assertTrue(
         evaluator.satisfies(
             Apk(dex_date='2016-3-3 17:58:00',
                 apk_size=4,
                 pkg_name='pkg2',
                 vt_detection=4,
                 markets='market1|market2',
                 sha256='789')))
     self.assertFalse(
         evaluator.satisfies(
             Apk(dex_date='2016-3-3 17:58:00',
                 apk_size=4,
                 pkg_name='pkg2',
                 vt_detection=4,
                 markets='market1|market2')))
     self.assertFalse(
         evaluator.satisfies(
             Apk(dex_date='2016-3-4 17:58:00',
                 apk_size=5,
                 pkg_name='pkg1',
                 vt_detection=3,
                 markets='market1')))
     self.assertFalse(
         evaluator.satisfies(
             Apk(dex_date='2016-3-4 17:58:00',
                 apk_size=3,
                 pkg_name='pkg3',
                 vt_detection=3,
                 markets='market1')))
     self.assertFalse(
         evaluator.satisfies(
             Apk(dex_date='2016-3-4 17:58:00',
                 apk_size=3,
                 pkg_name='pkg1',
                 vt_detection=0,
                 markets='market1')))
     self.assertFalse(
         evaluator.satisfies(
             Apk(dex_date='2016-3-4 17:58:00',
                 apk_size=3,
                 pkg_name='pkg1',
                 vt_detection=3,
                 markets='market8')))
     self.assertFalse(
         evaluator.satisfies(
             Apk(dex_date='2016-3-4 17:58:00',
                 apk_size=3,
                 pkg_name='pkg1',
                 vt_detection=3,
                 markets='market8')))
     self.assertFalse(evaluator.satisfies(Apk()))
Ejemplo n.º 17
0
    def test_dex_date(self):
        evaluator = ApkEvaluator(
            Criteria(dex_date_from='2016-3-3', dex_date_to='2016-3-5'))
        self.assertTrue(
            evaluator.satisfies_date(Apk(dex_date='2016-3-3 17:58:23')))
        self.assertTrue(
            evaluator.satisfies_date(Apk(dex_date='2016-3-4 2:30:00'), ))
        self.assertTrue(
            evaluator.satisfies_date(Apk(dex_date='2016-3-5 00:00:00')))
        self.assertFalse(
            evaluator.satisfies_date(Apk(dex_date='2016-3-2 17:58:07')))
        self.assertFalse(
            evaluator.satisfies_date(Apk(dex_date='2016-3-6 17:58:08')))

        evaluator = ApkEvaluator(
            Criteria(dex_date_from='2016-3-5', dex_date_to='2016-5-5'))
        self.assertTrue(
            evaluator.satisfies_date(Apk(dex_date='2016-3-7 17:58:00')))
        self.assertTrue(
            evaluator.satisfies_date(Apk(dex_date='2016-5-4 17:58:00')))
        self.assertFalse(
            evaluator.satisfies_date(Apk(dex_date='2016-2-13 17:58:00')))
        self.assertFalse(evaluator.satisfies_date(Apk()))

        evaluator = ApkEvaluator(Criteria(dex_date_from='2016-3-3'))
        self.assertTrue(
            evaluator.satisfies_date(Apk(dex_date='2016-4-3 17:58:00')))
        self.assertFalse(
            evaluator.satisfies_date(Apk(dex_date='2016-2-3 17:58:00')))

        evaluator = ApkEvaluator(Criteria(dex_date_to='2016-3-3'))
        self.assertFalse(
            evaluator.satisfies_date(Apk(dex_date='2016-4-3 17:58:00')))
        self.assertTrue(
            evaluator.satisfies_date(Apk(dex_date='2016-2-3 17:58:00')))
Ejemplo n.º 18
0
 def test_apk_size(self):
     evaluator = ApkEvaluator(Criteria(apk_size_from=10, apk_size_to=20))
     self.assertTrue(evaluator.satisfies_size(Apk(apk_size=15)))
     self.assertFalse(evaluator.satisfies_size(Apk(apk_size=5)))
     self.assertTrue(evaluator.satisfies_size(Apk(apk_size=20)))
     self.assertFalse(evaluator.satisfies_size(Apk()))
Ejemplo n.º 19
0
 def test_return_random_subset(self):
     initial_dataset = Dataset(Apk('apk1'), Apk('apk2'), Apk('apk3'),
                               Apk('apk4'), Apk('apk5'), Apk('apk6'))
     picker = RandomPicker(seed=12)
     random_subset1 = picker.get_random_subset(initial_dataset, 3)
     expected_random_subset1 = Dataset(Apk('apk3'), Apk('apk4'),
                                       Apk('apk1'))
     self.assertEqual(random_subset1, expected_random_subset1)
     random_subset2 = picker.get_random_subset(initial_dataset, 3)
     expected_random_subset2 = Dataset(Apk('apk2'), Apk('apk5'),
                                       Apk('apk6'))
     self.assertEqual(random_subset2, expected_random_subset2)
     random_subset3 = picker.get_random_subset(initial_dataset, 3)
     expected_random_subset3 = Dataset(Apk('apk1'), Apk('apk4'),
                                       Apk('apk3'))
     self.assertEqual(random_subset3, expected_random_subset3)
Ejemplo n.º 20
0
 def setUp(self):
     self.dataset = Dataset(Apk('apk1'), Apk('apk2'), Apk('apk3'),
                            Apk('apk4'), Apk('apk5'))
Ejemplo n.º 21
0
 def test_returns_whole_dataset_if_dataset_size_less_then_requested_size(
         self):
     input_dataset = Dataset(Apk('apk1'), Apk('apk2'))
     subset = RandomPicker().get_random_subset(input_dataset, 4)
     self.assertEqual(subset, input_dataset)
Ejemplo n.º 22
0
 def test_create_url(self):
     url = UrlConstructor(base_url=r'http:\\azoo.com\?key={}&sha={}', key='mykey').construct(Apk(sha256=123))
     self.assertEqual(url, r'http:\\azoo.com\?key=mykey&sha=123')
     url = UrlConstructor(base_url=r'http:\\azoo.com\?key={}&sha={}', key='mykey').construct(Apk(sha256=456))
     self.assertEqual(url, r'http:\\azoo.com\?key=mykey&sha=456')