From 150788e11e14ded9004f97797c33abfd9154c942 Mon Sep 17 00:00:00 2001 From: stubbfel Date: Wed, 1 Apr 2015 01:25:04 +0200 Subject: [PATCH] dns manager draft --- .gitignore | 2 ++ .gitmodules | 3 +++ 3rdLib/fakedns | 1 + example/qemu.sh | 6 +++++ .../service/fake_server_manager.py | 14 ++++++++++ .../service/networkservice/dns_service.py | 27 ------------------- .../networkservice/fake_dns_server_manager.py | 13 +++++++++ .../webservice/fake_web_server_manager.py | 13 +++------ .../networkservice/test_dns_manager.py | 18 +++++++++++++ 9 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 .gitmodules create mode 160000 3rdLib/fakedns create mode 100644 example/qemu.sh create mode 100644 src/fake_services/service/fake_server_manager.py delete mode 100644 src/fake_services/service/networkservice/dns_service.py create mode 100644 src/fake_services/service/networkservice/fake_dns_server_manager.py create mode 100644 test/service/networkservice/test_dns_manager.py 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..3e6d00b --- /dev/null +++ b/3rdLib/fakedns @@ -0,0 +1 @@ +Subproject commit 3e6d00b9f3009889af8d583c9a5ab781dfc78e0d 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/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/dns_service.py b/src/fake_services/service/networkservice/dns_service.py deleted file mode 100644 index d5d1129..0000000 --- a/src/fake_services/service/networkservice/dns_service.py +++ /dev/null @@ -1,27 +0,0 @@ -__author__ = 'dev' - -import socket - - -def resolve(name): - if name == "mpapp.nobies.in": - return "172.16.45.84" - else : - # you ought to add some basic checking of name here - return socket.gethostbyname(name) - -host = '' -port = 50000 -backlog = 5 -size = 1024 -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -s.bind((host,port)) -s.listen(backlog) -while 1: - client, address = s.accept() - data = client.recv(size).decode("utf8") - if data: - bits = data.split(":") - if bits[0] == 'h': - client.send(bytes(resolve(bits[1]), "utf8")) - client.close() \ 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..c4170f6 --- /dev/null +++ b/src/fake_services/service/networkservice/fake_dns_server_manager.py @@ -0,0 +1,13 @@ +from fake_services.service.fake_server_manager import FakeServerManager + +__author__ = 'dev' + +import threading +from socketserver import ThreadingUDPServer +from fakedns import DNSHandler + + +class FakeDnsServerManager(FakeServerManager): + def __init__(self, server_port): + super().__init__(ThreadingUDPServer, DNSHandler, server_port, **{"bind_and_activate": True}) + #self.server = ThreadingUDPServer(('', server_port), DNSHandler) 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..8bc1c1a 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,12 @@ +from fake_services.service.fake_server_manager import FakeServerManager + __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 -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..ac95166 --- /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.assertEqual(True, False) + + +if __name__ == '__main__': + unittest.main()