| # 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. |
| |
| """Unittests for upload_goma_info.py""" |
| |
| from __future__ import print_function |
| |
| import collections |
| import datetime |
| import json |
| import os |
| |
| from chromite.lib import cros_build_lib |
| from chromite.lib import cros_test_lib |
| from chromite.lib import gs |
| from chromite.lib import osutils |
| from chromite.scripts import upload_goma_info |
| |
| |
| class TestGomaLogUploader(cros_test_lib.MockTempDirTestCase): |
| """Tests for upload_goma_info.""" |
| |
| def _CreateLogFile(self, name, timestamp): |
| path = os.path.join( |
| self.tempdir, |
| '%s.host.log.INFO.%s' % (name, timestamp.strftime('%Y%m%d-%H%M%S.%f'))) |
| osutils.WriteFile( |
| path, |
| timestamp.strftime('Log file created at: %Y/%m/%d %H:%M:%S')) |
| |
| def testUpload(self): |
| # Prepare two sets of logs. Expect that latter set is reported. |
| self._CreateLogFile( |
| 'compiler_proxy', datetime.datetime(2017, 4, 25, 12, 0, 0)) |
| self._CreateLogFile( |
| 'compiler_proxy-subproc', datetime.datetime(2017, 4, 25, 12, 0, 0)) |
| self._CreateLogFile( |
| 'gomacc', datetime.datetime(2017, 4, 25, 12, 1, 0)) |
| self._CreateLogFile( |
| 'gomacc', datetime.datetime(2017, 4, 25, 12, 2, 0)) |
| |
| self._CreateLogFile( |
| 'compiler_proxy', datetime.datetime(2017, 4, 26, 12, 0, 0)) |
| self._CreateLogFile( |
| 'compiler_proxy-subproc', datetime.datetime(2017, 4, 26, 12, 0, 0)) |
| self._CreateLogFile( |
| 'gomacc', datetime.datetime(2017, 4, 26, 12, 1, 0)) |
| self._CreateLogFile( |
| 'gomacc', datetime.datetime(2017, 4, 26, 12, 2, 0)) |
| |
| # Set env vars. |
| os.environ.update({ |
| 'GLOG_log_dir': self.tempdir, |
| 'BUILDBOT_BUILDERNAME': 'builder-name', |
| 'BUILDBOT_MASTERNAME': 'master-name', |
| 'BUILDBOT_SLAVENAME': 'slave-name', |
| 'BUILDBOT_CLOBBER': '1', |
| }) |
| |
| self.PatchObject(cros_build_lib, 'GetHostName', lambda: 'dummy-host-name') |
| copy_log = [] |
| self.PatchObject( |
| gs.GSContext, 'CopyInto', |
| lambda _, __, remote_dir, filename=None, **kwargs: copy_log.append( |
| (remote_dir, filename, kwargs.get('headers')))) |
| |
| # Set dry_run just in case. |
| upload_goma_info.GomaLogUploader(dry_run=True).Upload( |
| today=datetime.date(2017, 4, 26)) |
| |
| expect_builderinfo = json.dumps(collections.OrderedDict([ |
| ('builder', 'builder-name'), |
| ('master', 'master-name'), |
| ('slave', 'slave-name'), |
| ('clobber', True), |
| ('os', 'chromeos'), |
| ])) |
| self.assertEqual( |
| copy_log, |
| [('gs://chrome-goma-log/2017/04/26/dummy-host-name', |
| 'compiler_proxy-subproc.host.log.INFO.20170426-120000.000000.gz', |
| ['x-goog-meta-builderinfo:' + expect_builderinfo]), |
| ('gs://chrome-goma-log/2017/04/26/dummy-host-name', |
| 'compiler_proxy.host.log.INFO.20170426-120000.000000.gz', |
| ['x-goog-meta-builderinfo:' + expect_builderinfo]), |
| ]) |