From da04c4472d47d8c3db0f1bb440953f9ca96d0182 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Thu, 29 Mar 2012 15:04:50 +0200
Subject: [PATCH] RemoteApiHandler: Add support for mocked LUXI client

This will be used for providing a type-checking RAPI client for tests.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 lib/rapi/baserlib.py | 6 +++++-
 lib/server/rapi.py   | 5 +++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/rapi/baserlib.py b/lib/rapi/baserlib.py
index 5710000c6..b44d454d2 100644
--- a/lib/rapi/baserlib.py
+++ b/lib/rapi/baserlib.py
@@ -289,7 +289,7 @@ class ResourceBase(object):
   POST_ACCESS = [rapi.RAPI_ACCESS_WRITE]
   DELETE_ACCESS = [rapi.RAPI_ACCESS_WRITE]
 
-  def __init__(self, items, queryargs, req, _client_cls=luxi.Client):
+  def __init__(self, items, queryargs, req, _client_cls=None):
     """Generic resource constructor.
 
     @param items: a list with variables encoded in the URL
@@ -301,6 +301,10 @@ class ResourceBase(object):
     self.items = items
     self.queryargs = queryargs
     self._req = req
+
+    if _client_cls is None:
+      _client_cls = luxi.Client
+
     self._client_cls = _client_cls
 
   def _GetRequestBody(self):
diff --git a/lib/server/rapi.py b/lib/server/rapi.py
index 2bc0dc4f8..9157889c4 100644
--- a/lib/server/rapi.py
+++ b/lib/server/rapi.py
@@ -71,11 +71,12 @@ class RemoteApiHandler(http.auth.HttpServerRequestAuthentication,
   """
   AUTH_REALM = "Ganeti Remote API"
 
-  def __init__(self):
+  def __init__(self, _client_cls=None):
     # pylint: disable=W0233
     # it seems pylint doesn't see the second parent class there
     http.server.HttpServerHandler.__init__(self)
     http.auth.HttpServerRequestAuthentication.__init__(self)
+    self._client_cls = _client_cls
     self._resmap = connector.Mapper()
     self._users = None
 
@@ -132,7 +133,7 @@ class RemoteApiHandler(http.auth.HttpServerRequestAuthentication,
                      self._resmap.getController(req.request_path)
 
       ctx = RemoteApiRequestContext()
-      ctx.handler = HandlerClass(items, args, req)
+      ctx.handler = HandlerClass(items, args, req, _client_cls=self._client_cls)
 
       method = req.request_method.upper()
       try:
-- 
GitLab