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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
import tempfile, os, shutil
from contextlib import contextmanager
from libpathod import utils, test, pathoc
import requests
class DaemonTests:
noweb = False
noapi = False
nohang = False
ssl = False
timeout = None
@classmethod
def setUpAll(self):
self.d = test.Daemon(
staticdir=test_data.path("data"),
anchors=[("/anchor/.*", "202")],
ssl = self.ssl,
sizelimit=1*1024*1024,
noweb = self.noweb,
noapi = self.noapi,
nohang = self.nohang,
timeout = self.timeout,
logreq = True,
logresp = True
)
@classmethod
def tearDownAll(self):
self.d.shutdown()
def setUp(self):
if not (self.noweb or self.noapi):
self.d.clear_log()
def getpath(self, path, params=None):
scheme = "https" if self.ssl else "http"
return requests.get(
"%s://localhost:%s/%s"%(scheme, self.d.port, path), verify=False, params=params
)
def get(self, spec):
return requests.get(self.d.p(spec), verify=False)
def pathoc(self, spec, timeout=None):
c = pathoc.Pathoc("localhost", self.d.port)
c.connect()
if self.ssl:
c.convert_to_ssl()
if timeout:
c.settimeout(timeout)
return c.request(spec)
@contextmanager
def tmpdir(*args, **kwargs):
orig_workdir = os.getcwd()
temp_workdir = tempfile.mkdtemp(*args, **kwargs)
os.chdir(temp_workdir)
yield temp_workdir
os.chdir(orig_workdir)
shutil.rmtree(temp_workdir)
def raises(exc, obj, *args, **kwargs):
"""
Assert that a callable raises a specified exception.
:exc An exception class or a string. If a class, assert that an
exception of this type is raised. If a string, assert that the string
occurs in the string representation of the exception, based on a
case-insenstivie match.
:obj A callable object.
:args Arguments to be passsed to the callable.
:kwargs Arguments to be passed to the callable.
"""
try:
apply(obj, args, kwargs)
except Exception, v:
if isinstance(exc, basestring):
if exc.lower() in str(v).lower():
return
else:
raise AssertionError(
"Expected %s, but caught %s"%(
repr(str(exc)), v
)
)
else:
if isinstance(v, exc):
return
else:
raise AssertionError(
"Expected %s, but caught %s %s"%(
exc.__name__, v.__class__.__name__, str(v)
)
)
raise AssertionError("No exception raised.")
test_data = utils.Data(__name__)
|