autotest: Restrict CUPS tests to platforms running cupsd

The DebugDaemonCupsAddPrinter test is failing
on platforms without CUPS.  The test should not
run on those platforms.  Share the check from
platform_CUPSDaemon.

BUG=chromium:735647
TEST=Run bvt-perbuild

Change-Id: Idd30b1914e30904245611a1e6bf8c5416282ab91
Reviewed-on: https://chromium-review.googlesource.com/561973
Commit-Ready: Sean Kau <skau@chromium.org>
Tested-by: Sean Kau <skau@chromium.org>
Reviewed-by: Brian Norris <briannorris@chromium.org>
diff --git a/client/cros/cups.py b/client/cros/cups.py
new file mode 100644
index 0000000..d7cf0c9
--- /dev/null
+++ b/client/cros/cups.py
@@ -0,0 +1,32 @@
+# Copyright 2017 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.
+
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.common_lib import utils as sys_utils
+from autotest_lib.client.cros import upstart
+"""Provides utility methods for CUPS."""
+
+
+def has_cups_upstart():
+  """Returns True if cups is installed under upstart."""
+  return upstart.has_service('cupsd')
+
+
+def has_cups_systemd():
+  """Returns True if cups is running under systemd.
+
+  Attempts to start cups if it is not already running.
+  """
+  return sys_utils.has_systemd() and (
+      (sys_utils.get_service_pid('cups') != 0) or
+      (sys_utils.start_service('cups', ignore_status=True) == 0))
+
+
+def has_cups_or_die():
+  """Checks if the cups dameon is installed.  Raises TestNAError if it is not.
+
+  TestNA skips the test.
+  """
+  if not (has_cups_upstart() or has_cups_systemd()):
+    raise error.TestNAError('No cupsd service found')
diff --git a/client/site_tests/platform_CUPSDaemon/platform_CUPSDaemon.py b/client/site_tests/platform_CUPSDaemon/platform_CUPSDaemon.py
index 61f996f..842771c 100644
--- a/client/site_tests/platform_CUPSDaemon/platform_CUPSDaemon.py
+++ b/client/site_tests/platform_CUPSDaemon/platform_CUPSDaemon.py
@@ -8,6 +8,7 @@
 from autotest_lib.client.bin import test, utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib import utils as sys_utils
+from autotest_lib.client.cros import cups
 from autotest_lib.client.cros import upstart
 
 
@@ -55,9 +56,6 @@
         Run some sanity tests for cupsd and the upstart-socket-bridge
         socket-activation.
         """
-        if not upstart.has_service('cupsd'):
-            raise error.TestNAError('No cupsd service found')
-
         upstart.ensure_running('upstart-socket-bridge')
 
         if not self.wait_for_path_exists(self._CUPS_SOCK_PATH):
@@ -92,12 +90,6 @@
         """
         Check if cupsd is running and responsive.
         """
-        # Check to see if the service is running.
-        if sys_utils.get_service_pid('cups') == 0:
-            # Try to start it.
-            if sys_utils.start_service('cups', ignore_status=True) != 0:
-                raise error.TestNAError('No cupsd service found')
-
         sys_utils.stop_service('cups', ignore_status=False)
         sys_utils.start_service('cups.socket', ignore_status=False)
 
@@ -125,6 +117,9 @@
         """
         Run some sanity tests for cupsd.
         """
+        # Check if CUPS is installed for this system or raise TestNA.
+        cups.has_cups_or_die()
+
         if sys_utils.has_systemd():
             self.run_systemd_tests()
         else:
diff --git a/client/site_tests/platform_DebugDaemonCupsAddPrinters/platform_DebugDaemonCupsAddPrinters.py b/client/site_tests/platform_DebugDaemonCupsAddPrinters/platform_DebugDaemonCupsAddPrinters.py
index b70f24b..af5b434 100644
--- a/client/site_tests/platform_DebugDaemonCupsAddPrinters/platform_DebugDaemonCupsAddPrinters.py
+++ b/client/site_tests/platform_DebugDaemonCupsAddPrinters/platform_DebugDaemonCupsAddPrinters.py
@@ -6,6 +6,7 @@
 
 from autotest_lib.client.bin import test
 from autotest_lib.client.common_lib import error
+from autotest_lib.client.cros import cups
 from autotest_lib.client.cros import debugd_util
 
 _GENERIC_PPD = 'GenericPostScript.ppd.gz'
@@ -128,6 +129,9 @@
         @raises TestError: If an unrecognized situation was used.
 
         """
+        # Exits test if platform does not have CUPS
+        cups.has_cups_or_die()
+
         if situation == 'valid_config':
             self.test_valid_config()
         elif situation == 'lpadmin':