diff --git a/.gitignore b/.gitignore index 5b1bb11..f51472a 100644 --- a/.gitignore +++ b/.gitignore @@ -109,3 +109,5 @@ docs/_build/ target/ + +virtenv \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..3e61811 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "3rdLib/fakedns"] + path = 3rdLib/fakedns + url = git@github.com:pathes/fakedns.git diff --git a/3rdLib/fakedns b/3rdLib/fakedns new file mode 160000 index 0000000..76675b9 --- /dev/null +++ b/3rdLib/fakedns @@ -0,0 +1 @@ +Subproject commit 76675b94cece3c9c666e532beb6266585c4b7318 diff --git a/MANIFEST b/MANIFEST index 9b70ca7..0a4f7fe 100644 --- a/MANIFEST +++ b/MANIFEST @@ -3,7 +3,9 @@ setup.py src/__init__.py src/fake_services/__init__.py src/fake_services/service/__init__.py +src/fake_services/service/fake_server_manager.py src/fake_services/service/networkservice/__init__.py +src/fake_services/service/networkservice/fake_dns_server_manager.py src/fake_services/service/webservice/__init__.py src/fake_services/service/webservice/fake_http_request_handler.py src/fake_services/service/webservice/fake_web_server.py diff --git a/example/qemu.sh b/example/qemu.sh new file mode 100644 index 0000000..b969202 --- /dev/null +++ b/example/qemu.sh @@ -0,0 +1,6 @@ +#!/bin/bash +sudo ip addr add 172.20.0.1/16 dev br0 +sudo ip link set br0 up +sudo dnsmasq --interface=br0 --bind-interfaces --dhcp-range=172.20.0.2,172.20.255.254 +sudo modprobe virtio +qemu-system-i386 -m 512 -enable-kvm -net nic -net bridge,br=br0 ~/Downloads/FakeServices32B.i686-0.1.2.qcow2 diff --git a/example/runwebserver.py b/example/runwebserver.py index 62cd829..22dec0f 100644 --- a/example/runwebserver.py +++ b/example/runwebserver.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 __author__ = 'dev' from fake_services.service.webservice.fake_web_server_manager import FakeWebServerManager +from fake_services.service.networkservice.fake_dns_server_manager import FakeDnsServerManager config = { "/test": @@ -30,12 +31,15 @@ config = { "/test4": [ { + "host_pattern": "0.0.0.0:8080", "response_content_path": "request/test.xml" } ] } +dns = FakeDnsServerManager() +dns.start_server() server = FakeWebServerManager(server_port=8080, requests_config=config) server.start_server() #server.stop_server() diff --git a/setup.py b/setup.py index e0c1e8b..1ebdc9c 100644 --- a/setup.py +++ b/setup.py @@ -12,3 +12,4 @@ setup( author_email='stubbfel@gmail.com', description='Helps to create many services on one maschine. Its manage IP-Addesses and response with static content of certain requests' ) + diff --git a/src/fake_services/service/fake_server_manager.py b/src/fake_services/service/fake_server_manager.py new file mode 100644 index 0000000..e49988d --- /dev/null +++ b/src/fake_services/service/fake_server_manager.py @@ -0,0 +1,14 @@ +__author__ = 'dev' +import threading + + +class FakeServerManager: + + def __init__(self, server_class, request_handler_class, server_port, **kwargs): + self.server = server_class(('', server_port), request_handler_class, kwargs) + + def start_server(self): + threading.Thread(target=self.server.serve_forever).start() + + def stop_server(self): + self.server.shutdown() \ No newline at end of file diff --git a/src/fake_services/service/networkservice/fake_dns_server_manager.py b/src/fake_services/service/networkservice/fake_dns_server_manager.py new file mode 100644 index 0000000..5c476a9 --- /dev/null +++ b/src/fake_services/service/networkservice/fake_dns_server_manager.py @@ -0,0 +1,12 @@ +__author__ = 'dev' + +from socketserver import ThreadingUDPServer +from fakedns import DNSHandler +from fake_services.service.fake_server_manager import FakeServerManager + +DEFAULT_DNS_PORT = 53 + + +class FakeDnsServerManager(FakeServerManager): + def __init__(self, server_port=DEFAULT_DNS_PORT): + super().__init__(ThreadingUDPServer, DNSHandler, server_port, **{"bind_and_activate": True}) \ No newline at end of file diff --git a/src/fake_services/service/webservice/fake_http_request_handler.py b/src/fake_services/service/webservice/fake_http_request_handler.py index af1df9a..e6bc50b 100644 --- a/src/fake_services/service/webservice/fake_http_request_handler.py +++ b/src/fake_services/service/webservice/fake_http_request_handler.py @@ -1,13 +1,10 @@ __author__ = 'dev' -import os import re -import urllib.parse from http.server import SimpleHTTPRequestHandler HEADERS_HOST_PARAMETER_KEY_NAME = "Host" REQUEST_LINE_ENCODING = "iso-8859-1" -RESPONSE_PATH_PARAMETER_KEY_NAME = "rpath" HOST_PATTERN_KEY_NAME = "host_pattern" RESPONSE_CONTENT_PATH_KEY_NAME = "response_content_path" diff --git a/src/fake_services/service/webservice/fake_web_server_manager.py b/src/fake_services/service/webservice/fake_web_server_manager.py index dcbe11f..339bbed 100644 --- a/src/fake_services/service/webservice/fake_web_server_manager.py +++ b/src/fake_services/service/webservice/fake_web_server_manager.py @@ -1,17 +1,10 @@ __author__ = 'dev' -import threading from fake_services.service.webservice.fake_http_request_handler import FakeHTTPRequestHandler from fake_services.service.webservice.fake_web_server import FakeWebServer +from fake_services.service.fake_server_manager import FakeServerManager - -class FakeWebServerManager: +class FakeWebServerManager(FakeServerManager): def __init__(self, server_port, requests_config=None): - self.server = FakeWebServer(('', server_port), FakeHTTPRequestHandler, requests_config) - - def start_server(self): - threading.Thread(target=self.server.serve_forever).start() - - def stop_server(self): - self.server.shutdown() \ No newline at end of file + super().__init__(FakeWebServer, FakeHTTPRequestHandler, server_port, **requests_config) \ No newline at end of file diff --git a/test/service/networkservice/test_dns_manager.py b/test/service/networkservice/test_dns_manager.py new file mode 100644 index 0000000..489c998 --- /dev/null +++ b/test/service/networkservice/test_dns_manager.py @@ -0,0 +1,18 @@ +from fake_services.service.networkservice.fake_dns_server_manager import FakeDnsServerManager + +__author__ = 'dev' + +import unittest + + +class TestFakeDns(unittest.TestCase): + + def test_dns_server_start_stop(self): + manager = FakeDnsServerManager(8080) + manager.start_server() + manager.stop_server() + self.assertTrue(True) + + +if __name__ == '__main__': + unittest.main()