[autotest] add a directAFE class which bypasses rpc calls
This CL adds a directAFE object which inherits from frontend.AFE, but
which replaces the underlying RpcClient.run function (responsible for
turning AFE calls into RPC calls) into a function that just makese
direct calls to rpc_interface and site_rpc_interface, bypassing RPC
process. This is desirable in places like test_that, which use an
in-memory process-local sqlite database to back a local afe.
BUG=chromium:236471
TEST=unit tests
Change-Id: Ib89a28be9ebc6f5c4e6ff93a08721ac63ab8b377
Reviewed-on: https://gerrit.chromium.org/gerrit/50383
Commit-Queue: Aviv Keshet <akeshet@chromium.org>
Reviewed-by: Aviv Keshet <akeshet@chromium.org>
Tested-by: Aviv Keshet <akeshet@chromium.org>
diff --git a/frontend/afe/direct_afe.py b/frontend/afe/direct_afe.py
new file mode 100644
index 0000000..568e7f3
--- /dev/null
+++ b/frontend/afe/direct_afe.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import common
+import autotest_lib.server.frontend as frontend
+from autotest_lib.frontend.afe import site_rpc_interface
+from autotest_lib.frontend.afe import rpc_interface
+
+class directAFE(frontend.AFE):
+ """
+ A wrapper for frontend.AFE which exposes all of the AFE
+ functionality, but makes direct calls to site_rpc_interface and
+ rpc_interface rather than making RPC calls to an RPC server.
+ """
+ def run(self, call, **dargs):
+ func = None
+
+ try:
+ func = rpc_interface.__getattribute__(call)
+ except AttributeError:
+ pass
+
+ try:
+ func = site_rpc_interface.__getattribute__(call)
+ except AttributeError:
+ pass
+
+ if not func:
+ raise AttributeError('No function named %s in either '
+ 'rpc_interface or site_rpc_interface' % call)
+
+ return func(**dargs)
\ No newline at end of file