def testCompressingResponseIfInvalidMimetype(): """ Staying backwards compatible. Old clients connect to the server and send an "Accept" with the invalid mimetype "gzip-application/json-rpc". We must respond to these clients because not doing so could result in rendering an opsi landscape unresponding. The returned "content-type" is invalid and makes no sense. Correct would be "application/json". The returned content-encoding is "gzip" but the content is acutally compressed with deflate. """ testHeader = FakeDictHeader({ "Accept": "gzip-application/json-rpc", "invalid": "ignoreme" }) request = FakeRequest(testHeader) worker = WorkerOpsiJsonRpc(service=None, request=request, resource=None) result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['gzip'] == result.headers.getRawHeaders('content-encoding') assert ['gzip-application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') sdata = result.stream.read() data = zlib.decompress(sdata) assert 'null' == data
def __init__(self, service, request, resource): with log_context({'instance': 'software on demand'}): WorkerOpsiJsonRpc.__init__(self, service, request, resource) self._auth_module = None if os.name == 'posix': import OPSI.Backend.Manager.Authentication.PAM # pylint: disable=import-outside-toplevel self._auth_module = OPSI.Backend.Manager.Authentication.PAM.PAMAuthentication( ) elif os.name == 'nt': import OPSI.Backend.Manager.Authentication.NT # pylint: disable=import-outside-toplevel self._auth_module = OPSI.Backend.Manager.Authentication.NT.NTAuthentication( "S-1-5-32-544")
def testReturningPlainCalls(): testHeader = FakeDictHeader({"Accept": "text/plain"}) request = FakeRequest(testHeader) worker = WorkerOpsiJsonRpc(service=None, request=request, resource=None) result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') assert not result.headers.hasHeader('content-encoding') data = result.stream.read() assert 'null' == str(data)
def testHandlingSingleResultConsistingOfList(): """ If a single result is made the result is a list this list must not be unpacked. """ worker = WorkerOpsiJsonRpc(service=None, request=FakeRequest(), resource=None) worker._rpcs = [FakeRPC(["Eins", "Zwei", "Drei"])] result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') assert not result.headers.hasHeader('content-encoding') assert '["Eins", "Zwei", "Drei"]' == str(result.stream.read())
def testHandlingSingleResult(): """ A single RPC result must not be returned in a list. """ worker = WorkerOpsiJsonRpc(service=None, request=FakeRequest(), resource=None) worker._rpcs = [FakeRPC("Hallo Welt")] result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') assert not result.headers.hasHeader('content-encoding') assert '"Hallo Welt"' == str(result.stream.read())
def testReturningEmptyResponse(): """ Making sure that an empty uncompressed response is returned. We check the headers of the request and also make sure that the content is "null". """ worker = WorkerOpsiJsonRpc(service=None, request=FakeRequest(), resource=None) result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') assert not result.headers.hasHeader('content-encoding') assert 'null' == str(result.stream.read())
def testCompressingResponseDataWithDeflate(): """ Responding with data compressed by deflate. """ testHeader = FakeHeader({"Accept-Encoding": "deflate"}) request = FakeRequest(testHeader) worker = WorkerOpsiJsonRpc(service=None, request=request, resource=None) result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') assert ['deflate'] == result.headers.getRawHeaders('content-encoding') sdata = result.stream.read() data = zlib.decompress(sdata) assert 'null' == data
def testHandlingMultipleRPCs(): """ With multiple RPCs the results are returned in a list. We do not use any compression in this testcase. """ worker = WorkerOpsiJsonRpc(service=None, request=FakeRequest(), resource=None) worker._rpcs = [ FakeRPC(), FakeRPC(1), FakeRPC(u"FÄKE!"), FakeRPC({"Narziss": "Morgen Nicht Geboren"}) ] result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') assert not result.headers.hasHeader('content-encoding') assert '[null, 1, "F\xc3\x84KE!", {"Narziss": "Morgen Nicht Geboren"}]' == str(result.stream.read())
def testCompressingResponseDataWithGzip(): """ Responding with data compressed by gzip. """ testHeader = FakeHeader({"Accept-Encoding": "gzip"}) request = FakeRequest(testHeader) worker = WorkerOpsiJsonRpc(service=None, request=request, resource=None) result = worker._generateResponse(None) assert 200 == result.code assert result.headers.hasHeader('content-type') assert ['application/json;charset=utf-8'] == result.headers.getRawHeaders('content-type') assert ['gzip'] == result.headers.getRawHeaders('content-encoding') sdata = result.stream.read() with gzip.GzipFile(fileobj=StringIO(sdata), mode="r") as gzipfile: data = gzipfile.read() assert 'null' == data