1f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 2f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)# found in the LICENSE file. 4f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 55d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)import flakytests 65d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 75d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)from webkitpy.common.checkout.scm.scm_mock import MockSCM 8f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)from webkitpy.tool.commands.commandtest import CommandsTest 9f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)from webkitpy.tool.mocktool import MockTool, MockOptions 10f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 11f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 12f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class FakeBotTestExpectations(object): 13f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def expectation_lines(self, only_ignore_very_flaky=False): 14f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return [] 15f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 16f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 17f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class FakeBotTestExpectationsFactory(object): 185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) def expectations_for_builder(self, builder): 19f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return FakeBotTestExpectations() 20f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 21f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class ChangedExpectationsMockSCM(MockSCM): 235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) def changed_files(self): 245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return ['LayoutTests/FlakyTests'] 255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 27f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class FlakyTestsTest(CommandsTest): 28f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def test_simple(self): 29f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) command = flakytests.FlakyTests() 30f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) factory = FakeBotTestExpectationsFactory() 31f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) lines = command._collect_expectation_lines(['foo'], factory) 32f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) self.assertEqual(lines, []) 33f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 34f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) def test_integration(self): 35f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) command = flakytests.FlakyTests() 365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) tool = MockTool() 37f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) command.expectations_factory = FakeBotTestExpectationsFactory 38f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) options = MockOptions(upload=True) 39f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) expected_stdout = """Updated /mock-checkout/third_party/WebKit/LayoutTests/FlakyTests 40f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)LayoutTests/FlakyTests is not changed, not uploading. 41f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)""" 425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) self.assert_execute_outputs(command, options=options, tool=tool, expected_stdout=expected_stdout) 435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) port = tool.port_factory.get() 455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) self.assertEqual(tool.filesystem.read_text_file(tool.filesystem.join(port.layout_tests_dir(), 'FlakyTests')), command.FLAKY_TEST_CONTENTS % '') 465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) def test_integration_uploads(self): 485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) command = flakytests.FlakyTests() 495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) tool = MockTool() 505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) tool.scm = ChangedExpectationsMockSCM 515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) command.expectations_factory = FakeBotTestExpectationsFactory 525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) reviewer = 'foo@chromium.org' 535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) options = MockOptions(upload=True, reviewers=reviewer) 545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) expected_stdout = """Updated /mock-checkout/third_party/WebKit/LayoutTests/FlakyTests 555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)""" 565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) self.assert_execute_outputs(command, options=options, tool=tool, expected_stdout=expected_stdout) 575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) self.assertEqual(tool.executive.calls, 585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) [ 595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ['git', 'commit', '-m', command.COMMIT_MESSAGE % reviewer, '/mock-checkout/third_party/WebKit/LayoutTests/FlakyTests'], 605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ['git', 'cl', 'upload', '--send-mail', '-f', '--cc', 'ojan@chromium.org,dpranke@chromium.org,eseidel@chromium.org'], 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ]) 625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) port = tool.port_factory.get() 645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) self.assertEqual(tool.filesystem.read_text_file(tool.filesystem.join(port.layout_tests_dir(), 'FlakyTests')), command.FLAKY_TEST_CONTENTS % '') 65