def test_hgetall(self): h = {b"f1": b"one", b"f2": b"two"} Entry.register_response("HGETALL hash", h) self.assertEqual(self.rclient.hgetall("hash"), h) self.assertEqual(len(Mocket.request_list()), 1) self.assertEqual(Mocket.request_list()[0].data, b"*2\r\n$7\r\nHGETALL\r\n$4\r\nhash\r\n")
def test_multipart(self): url = "http://httpbin.org/post" data = '--xXXxXXyYYzzz\r\nContent-Disposition: form-data; name="content"\r\nContent-Type: text/plain; charset=utf-8\r\nContent-Length: 68\r\n\r\nAction: comment\nText: Comment with attach\nAttachment: x1.txt, x2.txt\r\n--xXXxXXyYYzzz\r\nContent-Disposition: form-data; name="attachment_2"; filename="x.txt"\r\nContent-Type: text/plain\r\nContent-Length: 4\r\n\r\nbye\n\r\n--xXXxXXyYYzzz\r\nContent-Disposition: form-data; name="attachment_1"; filename="x.txt"\r\nContent-Type: text/plain\r\nContent-Length: 4\r\n\r\nbye\n\r\n--xXXxXXyYYzzz--\r\n' headers = { "Content-Length": "495", "Content-Type": "multipart/form-data; boundary=xXXxXXyYYzzz", "Accept": "text/plain", "User-Agent": "Mocket", "Accept-encoding": "identity", } Entry.register(Entry.POST, url) response = requests.post(url, data=data, headers=headers) self.assertEqual(response.status_code, 200) last_request = Mocket.last_request() self.assertEqual(last_request.method, "POST") self.assertEqual(last_request.path, "/post") self.assertEqual(last_request.body, data) sent_headers = dict(last_request.headers) self.assertEqualHeaders( sent_headers, { "accept": "text/plain", "accept-encoding": "identity", "content-length": "495", "content-type": "multipart/form-data; boundary=xXXxXXyYYzzz", "host": "httpbin.org", "user-agent": "Mocket", "connection": "keep-alive", }, ) self.assertEqual(len(Mocket.request_list()), 1)
def test_sendall_json(self): with mock.patch("time.gmtime") as tt: tt.return_value = time.struct_time((2013, 4, 30, 10, 39, 21, 1, 120, 0)) Entry.single_register( Entry.GET, "http://testme.org/get?a=1&b=2#test", body='{"a": "€"}', headers={"content-type": "application/json"}, ) response = urlopen("http://testme.org/get?b=2&a=1#test", timeout=10) self.assertEqual(response.code, 200) self.assertEqual(response.read(), b'{"a": "\xe2\x82\xac"}') self.assertEqualHeaders( dict(response.headers), { "status": "200", "content-length": "12", "server": "Python/Mocket", "connection": "close", "date": "Tue, 30 Apr 2013 10:39:21 GMT", "content-type": "application/json", }, ) self.assertEqual(len(Mocket.request_list()), 1)
def test_set(self): Entry.register_response('SET mocket "is awesome!"', OK) self.assertTrue(self.rclient.set("mocket", "is awesome!")) self.assertEqual(len(Mocket.request_list()), 1) self.assertEqual( Mocket.last_request().data, b"*3\r\n$3\r\nSET\r\n$6\r\nmocket\r\n$11\r\nis awesome!\r\n", )
def test_lrange(self): l = [b"one", b"two", b"three"] Entry.register_response("LRANGE list 0 -1", l) self.assertEqual(self.rclient.lrange("list", 0, -1), l) self.assertEqual(len(Mocket.request_list()), 1) self.assertEqual( Mocket.last_request().data, b"*4\r\n$6\r\nLRANGE\r\n$4\r\nlist\r\n$1\r\n0\r\n$2\r\n-1\r\n", )
def test_incr(self): Entry.register_responses("INCRBY counter 1", (1, 2, 3)) self.assertEqual(self.rclient.incr("counter"), 1) self.assertEqual(self.rclient.incr("counter"), 2) self.assertEqual(self.rclient.incr("counter"), 3) self.assertEqual(len(Mocket.request_list()), 3) self.assertEqual( Mocket.request_list()[0].data, b"*3\r\n$6\r\nINCRBY\r\n$7\r\ncounter\r\n$1\r\n1\r\n", ) self.assertEqual( Mocket.request_list()[1].data, b"*3\r\n$6\r\nINCRBY\r\n$7\r\ncounter\r\n$1\r\n1\r\n", ) self.assertEqual( Mocket.request_list()[2].data, b"*3\r\n$6\r\nINCRBY\r\n$7\r\ncounter\r\n$1\r\n1\r\n", )
def test_makefile(self): addr = ("localhost", 80) Mocket.register(MocketEntry(addr, ["Show me.\r\n"])) with Mocketizer(): _so = socket.socket(socket.AF_INET, socket.SOCK_STREAM) _so.connect(addr) fp = _so.makefile("rb") _so.sendall(encode_to_bytes("...\r\n")) self.assertEqual(fp.read().strip(), encode_to_bytes("Show me.")) self.assertEqual(len(Mocket.request_list()), 1)
def test_sendall_double(self): Entry.register( Entry.GET, "http://testme.org/", Response(status=404), Response() ) self.assertRaises(HTTPError, urlopen, "http://testme.org/") response = urlopen("http://testme.org/") self.assertEqual(response.code, 200) response = urlopen("http://testme.org/") self.assertEqual(response.code, 200) self.assertEqual(len(Mocket.request_list()), 3)
def test_err(self): Entry.register_response( "INCRBY counter one", ERROR("ERR value is not an integer or out of range")) self.assertRaises(redis.ResponseError, self.rclient.incr, "counter", "one") self.assertEqual(len(Mocket.request_list()), 1) self.assertEqual( Mocket.last_request().data, b"*3\r\n$6\r\nINCRBY\r\n$7\r\ncounter\r\n$3\r\none\r\n", )
def test_mockhttp_entry_collect_duplicates(self): Entry.single_register( Entry.POST, "http://testme.org/", status=200, match_querystring=False ) requests.post( "http://testme.org/?foo=bar", data="{'foo': 'bar'}", headers={"content-type": "application/json"}, ) requests.post("http://testme.org/") self.assertEqual(len(Mocket.request_list()), 2) self.assertEqual(Mocket.last_request().path, "/")
def test_sendall(self): with mock.patch("time.gmtime") as tt: tt.return_value = time.struct_time((2013, 4, 30, 10, 39, 21, 1, 120, 0)) Entry.single_register( Entry.GET, "http://testme.org/get/p/?a=1&b=2", body="test_body" ) resp = urlopen("http://testme.org/get/p/?b=2&a=1", timeout=10) self.assertEqual(resp.code, 200) self.assertEqual(resp.read(), b"test_body") self.assertEqualHeaders( dict(resp.headers), { "Status": "200", "Content-length": "9", "Server": "Python/Mocket", "Connection": "close", "Date": "Tue, 30 Apr 2013 10:39:21 GMT", "Content-type": "text/plain; charset=utf-8", }, ) self.assertEqual(len(Mocket.request_list()), 1)
def test_lastrequest(self): self.assertEqual(Mocket.last_request(), None) Mocket.request_list().extend([1, 2, 3]) self.assertEqual(Mocket.last_request(), 3)
def test_reset(self): Mocket.request_list().extend([1, 2, 3]) self.assertEqual(Mocket.request_list(), [1, 2, 3]) Mocket.reset() self.assertEqual(Mocket.request_list(), [])
def mocketize_teardown(self): self.assertEqual(len(Mocket.request_list()), 0)
def __getattr__(self, name): if name == "last_request": return Mocket.last_request() if name == "latest_requests": return Mocket.request_list() return getattr(Entry, name)
def mocketize_setup(self): Entry.register_response("FLUSHDB", OK) self.rclient.flushdb() self.assertEqual(len(Mocket.request_list()), 1) Mocket.reset()
def test_has_requests(self): Mocket.request_list().extend([1, 2, 3]) self.assertTrue(Mocket.has_requests()) Mocket.reset() self.assertFalse(Mocket.has_requests())
def test_remove_last(self): Mocket._requests = [1, 2] Mocket.remove_last_request() self.assertEqual(Mocket.request_list(), [1])
def test_collect(self): request = "GET /get/p/?b=2&a=1 HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: testme.org\r\nConnection: close\r\nUser-Agent: Python-urllib/2.6\r\n\r\n" Mocket.collect(request) self.assertEqual(Mocket.last_request(), request) self.assertEqual(Mocket.request_list(), [request])
def test_get(self): Entry.register_response("GET mocket", "is awesome!") self.assertEqual(self.rclient.get("mocket"), b"is awesome!") self.assertEqual(len(Mocket.request_list()), 1) self.assertEqual(Mocket.request_list()[0].data, b"*2\r\n$3\r\nGET\r\n$6\r\nmocket\r\n")
def test_remove_last_empty(self): Mocket.remove_last_request() self.assertEqual(Mocket.request_list(), [])
def test_get_unicode(self): Entry.register_response("GET snowman", "\u2603") self.assertEqual(self.rclient.get("snowman"), b"\xe2\x98\x83") self.assertEqual(len(Mocket.request_list()), 1) self.assertEqual(Mocket.last_request().data, b"*2\r\n$3\r\nGET\r\n$7\r\nsnowman\r\n")