1d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake# Copyright 2017 The Chromium Authors. All rights reserved. 2d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake# Use of this source code is governed by a BSD-style license that can be 3d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake# found in the LICENSE file. 4d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 5d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake"""This module contains utilities for test to report result to Sponge. 6d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake""" 7d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 8d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peakeimport logging 9d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 10a6bcf7f18aded465d734820b73eef14a5ec10d46Benny Peakefrom autotest_lib.site_utils.sponge_lib import autotest_dynamic_job 11d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peakefrom autotest_lib.client.common_lib import decorators 12d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 13d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peaketry: 14576f3069d472a2c3bb30ee61003f6fbd468c7ff5Benny Peake from sponge import upload_utils 15d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peakeexcept ImportError: 16d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake logging.debug('Module failed to be imported: sponge') 17576f3069d472a2c3bb30ee61003f6fbd468c7ff5Benny Peake upload_utils = None 18d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 19d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 20e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 21e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peakeclass SpongeLogHandler(logging.Handler): 22e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake """Helper log handler for logging during sponge.""" 23e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake def __init__(self, log_func): 24e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake super(SpongeLogHandler, self).__init__() 25e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake self.log_func = log_func 26e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 27e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake def emit(self, record): 28e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake log_entry = self.format(record) 29e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake self.log_func(log_entry) 30e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 31e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 32e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 33576f3069d472a2c3bb30ee61003f6fbd468c7ff5Benny Peake@decorators.test_module_available(upload_utils) 34d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peakedef upload_results(job, log=logging.debug): 35d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake """Upload test results to Sponge with given job details. 36d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 37d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake @param job: A job object created by tko/parsers. 38d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake @param log: Logging method, default is logging.debug. 39d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake 40d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake @return: A url to the Sponge invocation. 41d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake """ 42e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake start_level = logging.getLogger().level 43e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 44e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake log_handler = SpongeLogHandler(log) 45e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake logging.getLogger().addHandler(log_handler) 46e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake logging.getLogger().setLevel(logging.DEBUG) 47e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 48e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake logging.info("added log handler") 49e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake 50d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake try: 51e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake logging.info('Starting sponge upload.') 52a6bcf7f18aded465d734820b73eef14a5ec10d46Benny Peake info = autotest_dynamic_job.DynamicJobInfo(job) 53576f3069d472a2c3bb30ee61003f6fbd468c7ff5Benny Peake return upload_utils.UploadInfo(info) 54d322d3d9427bbc362e07ecbf6f3829d5df6cd57dBenny Peake except: 55395697ddbbcf211271083b05a19531b74fc7e811Dan Shi logging.exception('Failed to upload to sponge.') 56e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake finally: 57e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake logging.getLogger().removeHandler(log_handler) 58e607ba4b31415615c25a71c0b75b6a099be0445fBenny Peake logging.getLogger().setLevel(start_level) 59