blob: e173c9d808e4c3bdb5a68ebbb6aec6550f067ffc [file] [log] [blame]
#!/usr/bin/python
#
# Copyright (c) 2013 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 unittest
import mox
import common
from autotest_lib.server.cros.dynamic_suite import reporting_utils
class TestMergeBugTemplate(mox.MoxTestBase):
"""Test bug can be properly merged and validated."""
def test_validate_success(self):
"""Test a valid bug can be verified successfully."""
bug_template= {}
bug_template['owner'] = 'someone@company.com'
reporting_utils.BugTemplate.validate_bug_template(bug_template)
def test_validate_success(self):
"""Test a valid bug can be verified successfully."""
# Bug template must be a dictionary.
bug_template = ['test']
self.assertRaises(reporting_utils.InvalidBugTemplateException,
reporting_utils.BugTemplate.validate_bug_template,
bug_template)
# Bug template must contain value for essential attribute, e.g., owner.
bug_template= {'no-owner': 'user1'}
self.assertRaises(reporting_utils.InvalidBugTemplateException,
reporting_utils.BugTemplate.validate_bug_template,
bug_template)
# Bug template must contain value for essential attribute, e.g., owner.
bug_template= {'owner': 'invalid_email_address'}
self.assertRaises(reporting_utils.InvalidBugTemplateException,
reporting_utils.BugTemplate.validate_bug_template,
bug_template)
# Check unexpected attributes.
bug_template= {}
bug_template['random tag'] = 'test'
self.assertRaises(reporting_utils.InvalidBugTemplateException,
reporting_utils.BugTemplate.validate_bug_template,
bug_template)
# Value for cc must be a list
bug_template= {}
bug_template['cc'] = 'test'
self.assertRaises(reporting_utils.InvalidBugTemplateException,
reporting_utils.BugTemplate.validate_bug_template,
bug_template)
# Value for labels must be a list
bug_template= {}
bug_template['labels'] = 'test'
self.assertRaises(reporting_utils.InvalidBugTemplateException,
reporting_utils.BugTemplate.validate_bug_template,
bug_template)
def test_merge_success(self):
"""Test test and suite bug templates can be merged successfully."""
test_bug_template = {
'labels': ['l1'],
'owner': 'user1@chromium.org',
'status': 'Assigned',
'title': None,
'cc': ['cc1@chromium.org', 'cc2@chromium.org']
}
suite_bug_template = {
'labels': ['l2'],
'owner': 'user2@chromium.org',
'status': 'Fixed',
'summary': 'This is a short summary for suite bug',
'title': 'Title for suite bug',
'cc': ['cc2@chromium.org', 'cc3@chromium.org']
}
bug_template = reporting_utils.BugTemplate(suite_bug_template)
merged_bug_template = bug_template.finalize_bug_template(
test_bug_template)
self.assertEqual(merged_bug_template['owner'],
test_bug_template['owner'],
'Value in test bug template should prevail.')
self.assertEqual(merged_bug_template['title'],
suite_bug_template['title'],
'If an attribute has value None in test bug template, '
'use the value given in suite bug template.')
self.assertEqual(merged_bug_template['summary'],
suite_bug_template['summary'],
'If an attribute does not exist in test bug template, '
'but exists in suite bug template, it should be '
'included in the merged template.')
self.assertEqual(merged_bug_template['cc'],
test_bug_template['cc'] + suite_bug_template['cc'],
'List values for an attribute should be merged.')
self.assertEqual(merged_bug_template['labels'],
test_bug_template['labels'] +
suite_bug_template['labels'],
'List values for an attribute should be merged.')
test_bug_template['owner'] = ''
test_bug_template['cc'] = ['']
suite_bug_template['owner'] = ''
suite_bug_template['cc'] = ['']
bug_template = reporting_utils.BugTemplate(suite_bug_template)
merged_bug_template = bug_template.finalize_bug_template(
test_bug_template)
self.assertFalse('owner' in merged_bug_template,
'owner should be removed from the merged template.')
self.assertFalse('cc' in merged_bug_template,
'cc should be removed from the merged template.')
if __name__ == '__main__':
unittest.main()