1 #!/usr/bin/python 2 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 import StringIO 7 import mox 8 import unittest 9 import urllib2 10 11 import mock 12 13 import common 14 from autotest_lib.client.common_lib.cros import retry 15 from autotest_lib.server import site_utils 16 from autotest_lib.server.cros.dynamic_suite import reporting 17 18 19 # Mock retry.retry used in test_push before importing test_push. 20 retry.retry = mock.create_autospec(retry.retry, return_value=lambda func: func) 21 from autotest_lib.site_utils import test_push 22 23 AUTOFILED_COUNT_2 = '%s2' % reporting.Reporter.AUTOFILED_COUNT 24 25 class TestPushUnittests(mox.MoxTestBase): 26 """Unittest for test_push script.""" 27 28 def setUp(self): 29 """Initialize the unittest.""" 30 super(TestPushUnittests, self).setUp() 31 # Overwrite expected test results. 32 test_push.EXPECTED_TEST_RESULTS = { 33 '^SERVER_JOB$': 'GOOD', 34 '.*control.dependency$': 'TEST_NA', 35 '.*dummy_Fail.RetryFail$': 'FAIL', 36 } 37 test_push.TKO = None 38 39 40 def stub_out_methods(self, test_views): 41 """Stub out methods in test_push module with given test results. 42 43 @param test_views: Desired test result views. 44 45 """ 46 self.mox.UnsetStubs() 47 response = StringIO.StringIO('some_value') 48 self.mox.StubOutWithMock(urllib2, 'urlopen') 49 urllib2.urlopen(mox.IgnoreArg()).AndReturn(response) 50 51 self.mox.StubOutWithMock(test_push, 'get_default_build') 52 test_push.get_default_build(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( 53 'stumpy-release/R36-5881-0.0') 54 test_push.get_default_build(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( 55 'quawks-release/R36-5881-0.0') 56 57 self.mox.StubOutWithMock(test_push, 'check_dut_image') 58 test_push.check_dut_image(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn( 59 None) 60 61 self.mox.StubOutWithMock(test_push, 'do_run_suite') 62 test_push.do_run_suite( 63 test_push.PUSH_TO_PROD_SUITE, mox.IgnoreArg(), mox.IgnoreArg(), 64 mox.IgnoreArg(), mox.IgnoreArg()).AndReturn((1)) 65 66 self.mox.StubOutWithMock(site_utils, 'get_test_views_from_tko') 67 site_utils.get_test_views_from_tko(1, None).AndReturn(test_views) 68 69 70 def test_suite_success(self): 71 """Test test_suite method with matching results.""" 72 test_views = {'SERVER_JOB': 'GOOD', 73 'dummy_fail/control.dependency': 'TEST_NA', 74 'dummy_Fail.RetryFail': 'FAIL' 75 } 76 77 self.stub_out_methods(test_views) 78 self.mox.ReplayAll() 79 test_push.test_suite(test_push.PUSH_TO_PROD_SUITE, test_views, 80 arguments=test_push.parse_arguments()) 81 self.mox.VerifyAll() 82 83 84 def test_suite_fail_with_missing_test(self): 85 """Test test_suite method that should fail with missing test.""" 86 test_views = {'SERVER_JOB': 'GOOD', 87 'dummy_fail/control.dependency': 'TEST_NA', 88 } 89 90 self.stub_out_methods(test_views) 91 self.mox.ReplayAll() 92 test_push.test_suite(test_push.PUSH_TO_PROD_SUITE, test_views, 93 arguments=test_push.parse_arguments()) 94 self.mox.VerifyAll() 95 96 97 def test_suite_fail_with_unexpected_test_results(self): 98 """Test test_suite method that should fail with unexpected test results. 99 """ 100 test_views = {'SERVER_JOB': 'FAIL', 101 'dummy_fail/control.dependency': 'TEST_NA', 102 'dummy_Fail.RetryFail': 'FAIL', 103 } 104 105 self.stub_out_methods(test_views) 106 self.mox.ReplayAll() 107 test_push.test_suite(test_push.PUSH_TO_PROD_SUITE, test_views, 108 arguments=test_push.parse_arguments()) 109 self.mox.VerifyAll() 110 111 112 def test_suite_fail_with_extra_test(self): 113 """Test test_suite method that should fail with extra test.""" 114 test_views = {'SERVER_JOB': 'GOOD', 115 'dummy_fail/control.dependency': 'TEST_NA', 116 'dummy_Fail.RetryFail': 'FAIL', 117 'dummy_Fail.ExtraTest': 'GOOD', 118 } 119 120 self.stub_out_methods(test_views) 121 self.mox.ReplayAll() 122 test_push.test_suite(test_push.PUSH_TO_PROD_SUITE, test_views, 123 arguments=test_push.parse_arguments()) 124 self.mox.VerifyAll() 125 126 127 if __name__ == '__main__': 128 unittest.main() 129