diff --git a/client/site_tests/enterprise_RemoraRequisition/control b/client/site_tests/enterprise_RemoraRequisition/control
deleted file mode 100644
index 4fea538..0000000
--- a/client/site_tests/enterprise_RemoraRequisition/control
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright 2014 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.
-
-AUTHOR = "achuith, zelidrag"
-NAME = "enterprise_RemoraRequisition"
-TIME = "SHORT"
-TEST_CATEGORY = "Enterprise"
-TEST_CLASS = "enterprise"
-TEST_TYPE = "client"
-# Reboot after test ends.
-DEPENDENCIES='cleanup-reboot'
-
-DOC = """
-This test enrolls a Chrome device as a Remora device.
-
-You need a credentials.txt file with user_id:password in this directory for
-this test to succeed. The credentials are used to enroll the device as a Remora
-device.
-"""
-
-job.run_test('enterprise_RemoraRequisition')
diff --git a/client/site_tests/enterprise_RemoraRequisition/enterprise_RemoraRequisition.py b/client/site_tests/enterprise_RemoraRequisition/enterprise_RemoraRequisition.py
deleted file mode 100644
index 558c7a0..0000000
--- a/client/site_tests/enterprise_RemoraRequisition/enterprise_RemoraRequisition.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2014 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 logging, os
-
-from autotest_lib.client.bin import test, utils
-from autotest_lib.client.common_lib import error
-from autotest_lib.client.common_lib.cros import chrome, enrollment
-
-
-class enterprise_RemoraRequisition(test.test):
-    """Enroll as a Remora device."""
-    version = 1
-
-    _HANGOUTS_EXT_ID = 'acdafoiapclbpdkhnighhilgampkglpc'
-
-    def _WaitForHangouts(self, browser):
-        def _HangoutExtContexts():
-            try:
-                ext_contexts = browser.extensions.GetByExtensionId(
-                        self._HANGOUTS_EXT_ID)
-                if len(ext_contexts) > 1:
-                    return ext_contexts
-            except KeyError:
-                pass
-            return []
-        return utils.poll_for_condition(
-                _HangoutExtContexts,
-                exception=error.TestFail('Hangouts app failed to launch'),
-                timeout=30,
-                sleep_interval=1)
-
-    def _CheckHangoutsExtensionContexts(self, browser):
-        ext_contexts = self._WaitForHangouts(browser)
-        ext_urls = set([context.EvaluateJavaScript('location.href;')
-                       for context in ext_contexts])
-        expected_urls = set(
-                ['chrome-extension://' + self._HANGOUTS_EXT_ID + '/' + path
-                for path in ['hangoutswindow.html?windowid=0',
-                             '_generated_background_page.html']])
-        if expected_urls != ext_urls:
-            raise error.TestFail(
-                    'Unexpected extension context urls, expected %s, got %s'
-                    % (expected_urls, ext_urls))
-
-
-    def run_once(self):
-        user_id, password = utils.get_signin_credentials(os.path.join(
-                os.path.dirname(os.path.realpath(__file__)), 'credentials.txt'))
-        if not (user_id and password):
-            logging.warn('No credentials found - exiting test.')
-            return
-
-        with chrome.Chrome(auto_login=False) as cr:
-            enrollment.RemoraEnrollment(cr.browser, user_id, password)
-            self._CheckHangoutsExtensionContexts(cr.browser)
