[autotest] audio_test: Move methods from AudioTest to module level

These methods for audio test preparation should be in module level so
other test does not need to inherit AudioTest.
Still, audio_* can inherit AudioTest for convenience.

BUG=chromium:570973
TEST=run audio_AudioBasicExternalMicrophone test.

Change-Id: I8c75f36de90fe56efbcbe1e700a8f24985692987
Reviewed-on: https://chromium-review.googlesource.com/319350
Commit-Ready: Bryan Freed <bfreed@google.com>
Tested-by: Bryan Freed <bfreed@chromium.org>
Reviewed-by: Bryan Freed <bfreed@google.com>
Reviewed-by: Bryan Freed <bfreed@chromium.org>
diff --git a/server/cros/audio/audio_test.py b/server/cros/audio/audio_test.py
index 44988bc..6f8ceae 100644
--- a/server/cros/audio/audio_test.py
+++ b/server/cros/audio/audio_test.py
@@ -28,32 +28,7 @@
         """Warmup for the test before executing main logic of the test."""
         # test.test is an old-style class.
         test.test.warmup(self)
-        self.install_sox()
-        self.check_sox_installed()
-
-
-    def install_sox(self):
-        """Install sox command on autotest drone."""
-        try:
-            lxc.install_package('sox')
-        except error.ContainerError:
-            logging.info('Can not install sox outside of container.')
-
-
-    def check_sox_installed(self):
-        """Checks if sox is installed.
-
-        @raises: error.TestError if sox is not installed.
-
-        """
-        try:
-            utils.run('sox --help')
-            logging.info('Found sox executable.')
-        except error.CmdError:
-            error_message = 'sox command is not installed.'
-            if site_utils.is_inside_chroot():
-                error_message += ' sudo emerge sox to install sox in chroot'
-            raise error.TestError(error_message)
+        audio_test_requirement()
 
 
     def create_remote_facade_factory(self, host):
@@ -65,12 +40,55 @@
                   different functionalities provided by multimedia server.
 
         """
-        try:
-            factory = remote_facade_factory.RemoteFacadeFactory(host)
-        finally:
-            host.get_file(
-                    constants.MULTIMEDIA_XMLRPC_SERVER_LOG_FILE,
-                    os.path.join(
-                            self.resultsdir,
-                            'multimedia_xmlrpc_server.log.init'))
-        return factory
+        return create_remote_facade_factory(host, self.resultsdir)
+
+
+def create_remote_facade_factory(host, result_dir):
+    """Creates a remote facade factory to access multimedia server.
+
+    @param host: A CrosHost object to access Cros device.
+    @param result_dir: A directory to store multimedia server init log.
+
+    @returns: A RemoteFacadeFactory object to create different facade for
+              different functionalities provided by multimedia server.
+
+    """
+    try:
+        factory = remote_facade_factory.RemoteFacadeFactory(host)
+    finally:
+        host.get_file(
+                constants.MULTIMEDIA_XMLRPC_SERVER_LOG_FILE,
+                os.path.join(
+                        result_dir,
+                        'multimedia_xmlrpc_server.log.init'))
+    return factory
+
+
+def audio_test_requirement():
+    """Installs sox and checks it is installed correctly."""
+    install_sox()
+    check_sox_installed()
+
+
+def install_sox():
+    """Install sox command on autotest drone."""
+    try:
+        lxc.install_package('sox')
+    except error.ContainerError:
+        logging.info('Can not install sox outside of container.')
+
+
+def check_sox_installed():
+    """Checks if sox is installed.
+
+    @raises: error.TestError if sox is not installed.
+
+    """
+    try:
+        utils.run('sox --help')
+        logging.info('Found sox executable.')
+    except error.CmdError:
+        error_message = 'sox command is not installed.'
+        if site_utils.is_inside_chroot():
+            error_message += ' sudo emerge sox to install sox in chroot'
+        raise error.TestError(error_message)