-
Notifications
You must be signed in to change notification settings - Fork 3
Get title #23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Get title #23
Changes from all commits
9f055c4
a86be1c
11a5fab
74a9dad
8d8010e
0fcd6da
92723d4
e074b6d
5b529ab
535c8c8
d000256
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
import sys | ||
from pathlib import Path | ||
|
||
__root_dir = Path(__file__).parents[4] | ||
sys.path.append(str(__root_dir)) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#!/usr/bin/env python3 | ||
|
||
from pprint import pprint | ||
from sys import argv | ||
|
||
from src.core.utils.module import run_module | ||
from .module import Runner | ||
|
||
result = run_module( | ||
Runner, args=argv, arg_name="url", arg_default="https://www.vk.com/" | ||
) | ||
pprint(result) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import requests | ||
|
||
from re import search | ||
from src.core.base.recon import ReconRunner | ||
from src.core.utils.response import ScriptResponse | ||
|
||
|
||
class Runner(ReconRunner): | ||
def __init__(self, logger: str = __name__): | ||
super(Runner, self).__init__(logger) | ||
|
||
def run(self, *args, **kwargs): | ||
""" | ||
Try to find http title | ||
:param args: args from core runner | ||
:param kwargs: kwargs from core runner | ||
:return: http title if it's exist | ||
""" | ||
url = kwargs.get("url") | ||
try: | ||
response = requests.get(url, verify=False).text | ||
except Exception as get_err: | ||
return ScriptResponse.error(result=None, message=str(get_err)) | ||
|
||
search_title = search(r"<title>(.*)</title>", response) | ||
result = search_title.group(1) if search_title else None | ||
return ScriptResponse.success( | ||
result=result, | ||
message=f"Successfully found the title for {url}" | ||
if result | ||
else "Can not get the title or bad url", | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
certifi==2020.6.20 | ||
chardet==3.0.4 | ||
idna==2.10 | ||
requests==2.24.0 | ||
urllib3==1.25.9 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
#!/usr/bin/env python3 | ||
|
||
from http.server import HTTPServer, BaseHTTPRequestHandler | ||
from threading import Thread | ||
from unittest import TestCase | ||
|
||
from src.core.values.defaults import TestDefaults | ||
from .module import Runner | ||
|
||
DefaultValues = TestDefaults() | ||
|
||
|
||
class TestClassHTTPRequestHandler(BaseHTTPRequestHandler): | ||
""" | ||
Defines mocking server class | ||
""" | ||
|
||
def do_GET(self) -> None: | ||
""" | ||
Defines basic handlers | ||
:return: None | ||
""" | ||
if self.path == "/": | ||
self.mock_endpoint() | ||
|
||
def mock_endpoint(self) -> None: | ||
""" | ||
Mock '/' endpoint. Return HTML with custom headers. | ||
:return: None | ||
""" | ||
self.send_response(200) | ||
self.send_header("Content-type", "text/html; charset=utf-8") | ||
self.end_headers() | ||
self.wfile.write( | ||
b"<html><body><title>Mock page from Mocking Class</title></body></html>" | ||
) | ||
|
||
|
||
class GetTitleTest(TestCase): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. В этом тесте не тестируется функционал модуля вообще. Т.е., тебе нужно убедиться, что твой модуль правильно находит html тайтл тег и возвращает его значение. Но в этом тесте ты просто поднимаешь сервер и больше не делаешь ничего, связанного с функционалом модуля. Нужно протестировать, что ты можешь забрать тайтл нормально и он соответствует действительности. Для этого нужно в своем локальном сервисе на странице сделать <title></title>, написать какой-то тайтл, и проверить, что твой модуль может его правильно получить и он равен тому же тайтлу, что и на сервере. |
||
|
||
server: Thread or None = None | ||
|
||
def setUp(self): | ||
""" | ||
Setup something before each test function | ||
:return: None | ||
""" | ||
self.runner = Runner() | ||
|
||
@classmethod | ||
def setUpClass(cls) -> None: | ||
""" | ||
Start up server on class initialization in daemon thread | ||
:return: None | ||
""" | ||
super(GetTitleTest, cls).setUpClass() | ||
cls.server = HTTPServer( | ||
server_address=(DefaultValues.HOST, DefaultValues.PORT), | ||
RequestHandlerClass=TestClassHTTPRequestHandler, | ||
) | ||
server_daemon = Thread(target=cls.server.serve_forever, daemon=True) | ||
server_daemon.start() | ||
|
||
@classmethod | ||
def tearDownClass(cls) -> None: | ||
super(GetTitleTest, cls).tearDownClass() | ||
cls.server.shutdown() | ||
|
||
def test_create_runner(self) -> None: | ||
""" | ||
Test creation of the class instance | ||
:return: None | ||
""" | ||
self.assertIsNotNone(self.runner) | ||
self.assertIsInstance(self.runner, Runner) | ||
|
||
def test_local_server(self) -> None: | ||
""" | ||
Test values from the local server | ||
:return: None | ||
""" | ||
response = self.runner.run( | ||
url=f"http://{DefaultValues.HOST}:{DefaultValues.PORT}" | ||
) | ||
self.assertEqual(response.get("status"), "success") | ||
self.assertEqual(response.get("result"), "Mock page from Mocking Class") | ||
|
||
def test_remote_server(self) -> None: | ||
""" | ||
Test values from the remote server | ||
:return: None | ||
""" | ||
response = self.runner.run(url=f"https://dsakdjsalkjdkasjdlksadjlaks.co") | ||
self.assertEqual(response.get("status"), "error") | ||
response = self.runner.run(url=f"https://facebook.com") | ||
self.assertEqual(response.get("status"), "success") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.

Не на всё находит тайтлы