From cf7e4f874976077134e6ed61f0b0ef975144f986 Mon Sep 17 00:00:00 2001 From: ngosang Date: Sat, 24 Sep 2022 15:48:01 +0200 Subject: [PATCH] Add tests for several known sites --- src/tests_sites.py | 100 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/tests_sites.py diff --git a/src/tests_sites.py b/src/tests_sites.py new file mode 100644 index 0000000..a29369c --- /dev/null +++ b/src/tests_sites.py @@ -0,0 +1,100 @@ +import unittest + +from webtest import TestApp + +from dtos import V1ResponseBase, STATUS_OK +import flaresolverr +import utils + + +def _find_obj_by_key(key: str, value: str, _list: list) -> dict | None: + for obj in _list: + if obj[key] == value: + return obj + return None + + +def asset_cloudflare_solution(self, res, site_url, site_text): + self.assertEqual(res.status_code, 200) + + body = V1ResponseBase(res.json) + self.assertEqual(STATUS_OK, body.status) + self.assertEqual("Challenge solved!", body.message) + self.assertGreater(body.startTimestamp, 10000) + self.assertGreaterEqual(body.endTimestamp, body.startTimestamp) + self.assertEqual(utils.get_flaresolverr_version(), body.version) + + solution = body.solution + self.assertIn(site_url, solution.url) + self.assertEqual(solution.status, 200) + self.assertIs(len(solution.headers), 0) + self.assertIn(site_text, solution.response) + self.assertGreater(len(solution.cookies), 0) + self.assertIn("Chrome/", solution.userAgent) + + cf_cookie = _find_obj_by_key("name", "cf_clearance", solution.cookies) + self.assertIsNotNone(cf_cookie, "Cloudflare cookie not found") + self.assertGreater(len(cf_cookie["value"]), 30) + + +class TestFlareSolverr(unittest.TestCase): + app = TestApp(flaresolverr.app) + + def test_v1_endpoint_request_get_cloudflare(self): + sites_get = [ + ('nowsecure', 'https://nowsecure.nl', 'nowSecure'), + ('0magnet', 'https://0magnet.com/search?q=2022', 'Torrent Search - ØMagnet'), + ('1337x', 'https://1337x.unblockit.cat/cat/Movies/time/desc/1/', ''), + ('avistaz', 'https://avistaz.to/api/v1/jackett/torrents?in=1&type=0&search=', + 'Access denied'), + ('badasstorrents', 'https://badasstorrents.com/torrents/search/720p/date/desc', + 'Latest Torrents - BadassTorrents'), + ('bt4g', 'https://bt4g.org/search/2022', 'Download 2022 Torrents - BT4G'), + ('cinemaz', 'https://cinemaz.to/api/v1/jackett/torrents?in=1&type=0&search=', + 'Access denied'), + ('epublibre', 'https://epublibre.unblockit.cat/catalogo/index/0/nuevo/todos/sin/todos/--/ajax', + 'epublibre - catálogo'), + ('ext', 'https://ext.to/latest/?order=age&sort=desc', + 'Download Latest Torrents - EXT Torrents'), + ('extratorrent', 'https://extratorrent.st/search/?srt=added&order=desc&search=720p&new=1&x=0&y=0', + 'Page 1 - ExtraTorrent'), + ('idope', 'https://idope.se/browse.html', 'Recent Torrents'), + ('limetorrents', 'https://limetorrents.unblockninja.com/latest100', + 'Latest 100 torrents - LimeTorrents'), + ('privatehd', 'https://privatehd.to/api/v1/jackett/torrents?in=1&type=0&search=', + 'Access denied'), + ('torrentcore', 'https://torrentcore.xyz/index', 'Torrent[CORE] - Torrent community.'), + ('torrentqq223', 'https://torrentqq223.com/torrent/newest.html', 'https://torrentqq223.com/ads/'), + ('36dm', 'https://www.36dm.club/1.html', 'https://www.36dm.club/yesterday-1.html'), + ('erai-raws', 'https://www.erai-raws.info/feed/?type=magnet', '403 Forbidden'), + ('teamos', 'https://www.teamos.xyz/torrents/?filename=&freeleech=', + 'Log in | Team OS : Your Only Destination To Custom OS !!'), + ('yts', 'https://yts.unblockninja.com/api/v2/list_movies.json?query_term=&limit=50&sort=date_added', + '{"movie_count":') + ] + for site_name, site_url, site_text in sites_get: + with self.subTest(msg=site_name): + res = self.app.post_json('/v1', { + "cmd": "request.get", + "url": site_url + }) + asset_cloudflare_solution(self, res, site_url, site_text) + + def test_v1_endpoint_request_post_cloudflare(self): + sites_post = [ + ('nnmclub', 'https://nnmclub.to/forum/tracker.php', 'Трекер :: NNM-Club', + 'prev_sd=0&prev_a=0&prev_my=0&prev_n=0&prev_shc=0&prev_shf=1&prev_sha=1&prev_shs=0&prev_shr=0&prev_sht=0&f%5B%5D=-1&o=1&s=2&tm=-1&shf=1&sha=1&ta=-1&sns=-1&sds=-1&nm=&pn=&submit=%CF%EE%E8%F1%EA') + ] + + for site_name, site_url, site_text, post_data in sites_post: + with self.subTest(msg=site_name): + res = self.app.post_json('/v1', { + "cmd": "request.post", + "url": site_url, + "postData": post_data + }) + asset_cloudflare_solution(self, res, site_url, site_text) + + +if __name__ == '__main__': + unittest.main()