| # Copyright (c) 2016 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 os |
| import sys |
| import urllib2 |
| from multiprocessing import Process |
| |
| from autotest_lib.client.bin import utils |
| |
| policy_testserver = None |
| |
| |
| class FakeDMServer(object): |
| """Utility class for policy tests.""" |
| |
| def __init__(self, proto_path): |
| """ |
| Import the DM testserver from chrome source. |
| |
| @param proto_path: location of proto files. |
| |
| """ |
| self.server_url = None |
| telemetry_src = '/usr/local/telemetry/src' |
| for path in ['chrome/browser/policy/test', |
| 'net/tools/testserver', |
| 'third_party/protobuf/python/google', |
| 'third_party/tlslite']: |
| sys.path.append(os.path.join(telemetry_src, path)) |
| sys.path.append(proto_path) |
| global policy_testserver |
| import policy_testserver |
| |
| def start(self, tmpdir, debugdir): |
| """ |
| Start the local DM testserver. |
| |
| @param tmpdir: location of the Autotest tmp dir. |
| @param debugdir: location of the Autotest debug directory. |
| |
| """ |
| policy_server_runner = policy_testserver.PolicyServerRunner() |
| self._policy_location = os.path.join(tmpdir, 'policy.json') |
| port = utils.get_unused_port() |
| # The first argument is always ignored since it is expected to be the |
| # path to the executable. Hence passing an empty string for first |
| # argument. |
| sys.argv = ['', |
| '--config-file=%s' % self._policy_location, |
| '--host=127.0.0.1', |
| '--log-file=%s/dm_server.log' % debugdir, |
| '--log-level=DEBUG', |
| '--port=%d' % port |
| |
| ] |
| self.process = Process(target=policy_server_runner.main) |
| self.process.start() |
| self.server_url = 'http://127.0.0.1:%d/' % port |
| |
| def stop(self): |
| """Terminate the fake DM server instance.""" |
| if urllib2.urlopen('%stest/ping' % self.server_url).getcode() == 200: |
| urllib2.urlopen('%sconfiguration/test/exit' % self.server_url) |
| if self.process.is_alive(): |
| self.process.join() |
| |
| def setup_policy(self, policy_blob): |
| """ |
| Write policy blob to file used by the DM server to read policy. |
| |
| @param policy_blob: JSON policy blob to be written to the policy file. |
| |
| """ |
| with open(self._policy_location, 'w') as f: |
| f.write(policy_blob) |