1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
import os
import logging
import threading
from unittest import TestCase
from stat import S_IFDIR, S_IFREG
from http.server import HTTPServer
from http.server import SimpleHTTPRequestHandler
from httpfs import Httpfs
def translate_path(p):
return "test/testwww/" + p
class Handler(SimpleHTTPRequestHandler):
def translate_path(self, path):
p = super().translate_path(path)
pNew = translate_path(os.path.relpath(p))
logging.info("translated %s to %s", p, pNew)
return pNew
def handle_one_request(self, *a):
SimpleHTTPRequestHandler.handle_one_request(self, *a)
self.server.requests.append(vars(self))
class TestBase(TestCase):
def setUp(self):
self.server = HTTPServer(('', 0), Handler)
self.server.requests = []
self.server_thread = threading.Thread(target=self.server.serve_forever)
self.server_thread.daemon = True
self.server_thread.start()
self.httpfs = Httpfs()
self.port = self.server.socket.getsockname()[1]
def tearDown(self):
self.server.shutdown()
self.server_thread.join()
def basePath(self):
return "/http/localhost:{}".format(self.port)
def stat(self, path):
logging.info("Translate path %s -> %s", path, translate_path(path))
return os.stat(translate_path(path))
class TestZwei(TestBase):
def test_root(self):
r = self.httpfs.readdir(self.basePath(), None)
self.assertEqual(len(self.server.requests), 2) # made 2 requests
self.assertEqual(self.server.requests[0]["command"], "GET")
self.assertEqual(self.server.requests[1]["command"], "HEAD")
files = dict(map(lambda i: (i[0], i[1]), r))
self.assertSetEqual(set(('bla', 'dir', '..', '.')), set(files.keys()))
self.assertEqual(files['.']['st_mode'], S_IFDIR | 0o555)
self.assertEqual(files['.']['st_nlink'], self.stat(".").st_nlink)
self.assertEqual(files['..']['st_mode'], S_IFDIR | 0o555)
self.assertEqual(files['bla']['st_mode'], S_IFREG | 0o444)
self.assertEqual(files['dir']['st_mode'], S_IFDIR | 0o555)
def test_dir(self):
r = self.httpfs.readdir(self.basePath() + "/", None)
self.assertEqual(len(r), 4)
r = self.httpfs.readdir(self.basePath() + "/dir", None)
self.assertEqual(len(r), 4)
def test_read(self):
r = self.httpfs.read(self.basePath() + "/dir/bla1", 1000, 0, None)
self.assertEqual(r.strip(), b"bla1")
|