You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
5.3 KiB

# Copyright 2019 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 json
import os
import shutil
import unittest
import tempfile
import common
from autotest_lib.utils.side_effects import config_loader
from autotest_lib.utils.side_effects.proto import config_pb2
class LoadTestCase(unittest.TestCase):
"""Test loading side_effects_config.json."""
def setUp(self):
self._results_dir = tempfile.mkdtemp()
def tearDown(self):
shutil.rmtree(self._results_dir)
def test_missing_config_file(self):
parsed_config = config_loader.load(self._results_dir)
self.assertIsNone(parsed_config)
def test_full_config(self):
config = {
'tko': {
'proxy_socket': '/file-system/foo-socket',
'mysql_user': 'foo-user',
'mysql_password_file': '/file-system/foo-password-file'
},
'google_storage': {
'bucket': 'foo-bucket',
'credentials_file': '/file-system/foo-creds'
},
'this_field_is_ignored': True
}
path = os.path.join(self._results_dir,
'side_effects_config.json')
with open(path, 'w') as f:
f.write(json.dumps(config))
parsed_config = config_loader.load(self._results_dir)
self.assertEqual(parsed_config.tko.proxy_socket,
'/file-system/foo-socket')
self.assertEqual(parsed_config.tko.mysql_user, 'foo-user')
self.assertEqual(parsed_config.tko.mysql_password_file,
'/file-system/foo-password-file')
self.assertEqual(parsed_config.google_storage.bucket, 'foo-bucket')
self.assertEqual(parsed_config.google_storage.credentials_file,
'/file-system/foo-creds')
self.assertEqual(parsed_config.chrome_perf.enabled, False)
self.assertEqual(parsed_config.cts.enabled, False)
def test_bad_config(self):
path = os.path.join(self._results_dir,
'side_effects_config.json')
with open(path, 'w') as f:
f.write('Not a JSON, hence unparseable')
with self.assertRaisesRegexp(Exception, 'JSON'):
parsed_config = config_loader.load(self._results_dir)
class ValidateTKOTestCase(unittest.TestCase):
"""Test validating the TKO-related fields of a side_effects.Config proto."""
def setUp(self):
self._tempdir = tempfile.mkdtemp()
self._config = config_pb2.Config(
tko=config_pb2.TKOConfig(
proxy_socket=_tempfile(self._tempdir),
mysql_user='foo-user',
mysql_password_file=_tempfile(self._tempdir)
))
def tearDown(self):
shutil.rmtree(self._tempdir)
def test_complete_config(self):
config_loader.validate_tko(self._config)
def test_missing_proxy_socket_path(self):
self._config.tko.proxy_socket = ''
with self.assertRaisesRegexp(ValueError, 'proxy socket'):
config_loader.validate_tko(self._config)
def test_missing_mysql_user(self):
self._config.tko.mysql_user = ''
with self.assertRaisesRegexp(ValueError, 'MySQL user'):
config_loader.validate_tko(self._config)
def test_missing_mysql_password_file_path(self):
self._config.tko.mysql_password_file = ''
with self.assertRaisesRegexp(ValueError, 'MySQL password'):
config_loader.validate_tko(self._config)
def test_missing_proxy_socket_file(self):
os.remove(self._config.tko.proxy_socket)
with self.assertRaisesRegexp(OSError, 'proxy socket'):
config_loader.validate_tko(self._config)
def test_missing_mysql_password_file(self):
os.remove(self._config.tko.mysql_password_file)
with self.assertRaisesRegexp(OSError, 'MySQL password'):
config_loader.validate_tko(self._config)
class ValidateGoogleStorageTestCase(unittest.TestCase):
"""Test validating the TKO-related fields of a side_effects.Config proto."""
def setUp(self):
self._tempdir = tempfile.mkdtemp()
self._config = config_pb2.Config(
google_storage=config_pb2.GoogleStorageConfig(
bucket='foo-bucket',
credentials_file=_tempfile(self._tempdir)
))
def tearDown(self):
shutil.rmtree(self._tempdir)
def test_complete_config(self):
config_loader.validate_google_storage(self._config)
def test_missing_bucket(self):
self._config.google_storage.bucket = ''
with self.assertRaisesRegexp(ValueError, 'bucket'):
config_loader.validate_google_storage(self._config)
def test_missing_credentials_file_path(self):
self._config.google_storage.credentials_file = ''
with self.assertRaisesRegexp(ValueError, 'credentials'):
config_loader.validate_google_storage(self._config)
def test_missing_credentials_file(self):
os.remove(self._config.google_storage.credentials_file)
with self.assertRaisesRegexp(OSError, 'credentials'):
config_loader.validate_google_storage(self._config)
def _tempfile(tempdir):
_, name = tempfile.mkstemp(dir=tempdir)
return name
if __name__ == '__main__':
unittest.main()