Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Unified Diff: commit-queue/tests/buildbot_json_test.py

Issue 135363007: Delete public commit queue to avoid confusion after move to internal repo (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « commit-queue/tests/authors_white_list_test.py ('k') | commit-queue/tests/chromium.11299256.json » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: commit-queue/tests/buildbot_json_test.py
===================================================================
--- commit-queue/tests/buildbot_json_test.py (revision 249146)
+++ commit-queue/tests/buildbot_json_test.py (working copy)
@@ -1,461 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unit tests for buildbot_json.py."""
-
-import json
-import logging
-import os
-import cStringIO
-import StringIO
-import sys
-import unittest
-import urllib
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-import find_depot_tools # pylint: disable=W0611
-from testing_support import auto_stub
-
-# in tests/
-import reduce_test_data # pylint: disable=F0401
-
-# In root
-import buildbot_json
-
-
-class BuildbotJsonTest(auto_stub.TestCase):
- def setUp(self):
- super(BuildbotJsonTest, self).setUp()
- # Default mock.
- self.old_urlopen = self.mock(urllib, 'urlopen', self.mockurlopen)
- self.mock(sys, 'stderr', cStringIO.StringIO())
- self.mock(sys, 'stdout', cStringIO.StringIO())
- self.mock(buildbot_json.time, 'time', lambda: 1325394000.01)
- self.url = 'http://build.chromium.org/p/tryserver.chromium'
- self.datadir = os.path.join(ROOT_DIR, 'data')
- if not os.path.isdir(self.datadir):
- os.mkdir(self.datadir)
- self.test_id = self.id().split('BuildbotJsonTest.', 1)[1]
- self.filepath = os.path.join(self.datadir, self.test_id) + '.json'
- self.queue = []
- self.training = False
- if os.path.isfile(self.filepath):
- self.queue = json.load(open(self.filepath))
- # Auto upgrade old data.
- for i in xrange(len(self.queue)):
- url = self.queue[i][0]
- if not url.endswith('filter=1'):
- if '?' in url:
- url += '&filter=1'
- else:
- url += '?filter=1'
- self.queue[i][0] = url
- logging.warn('Auto-convert to training because missing filter=1.')
- self.training = True
- self.queue_index = 0
- self.reducer = reduce_test_data.Filterer()
-
- def tearDown(self):
- try:
- if not self.has_failed():
- if self.queue_index < len(self.queue):
- self.queue = self.queue[:self.queue_index]
- logging.warning('Auto-convert to training because of queue overflow')
- self.training = True
- if self.training:
- json.dump(self.queue, open(self.filepath, 'w'), separators=(',',':'))
- self.assertEqual(self.queue_index, len(self.queue))
- self.assertOut('stderr', '')
- self.assertOut('stdout', '')
- else:
- if self.training:
- logging.error('Not saving data even if in training mode.')
- finally:
- # Make sure the super class tearDown() function is called so stubs are
- # removed.
- super(BuildbotJsonTest, self).tearDown()
- if self.training:
- self.fail(
- 'Don\'t worry, it\'s just updating internal files. Please run '
- 'again.\n%s' % '\n'.join(q[0] for q in self.queue))
-
- def assertOut(self, out, expected):
- """Check stderr/stdout and resets it."""
- self.assertEqual(str(expected), str(getattr(sys, out).getvalue()))
- self.mock(sys, out, cStringIO.StringIO())
-
- def mockurlopen(self, url):
- self.assertTrue(self.queue_index <= len(self.queue))
- if self.queue_index != len(self.queue):
- expected_url, data = self.queue[self.queue_index]
- if url != expected_url:
- logging.warn(
- 'Auto-convert to training because %s != %s.' % (url, expected_url))
- self.training = True
- # Delete the remainder of the queue.
- self.queue = self.queue[:self.queue_index]
-
- if self.queue_index == len(self.queue):
- data = self.old_urlopen(url).read()
- self.training = True
-
- # Re-filter it.
- try:
- data = json.loads(data)
- except ValueError:
- self.fail('Failed to decode %s' % url)
- expected_url, new_data = self.reducer.filter_response(url, data)
- assert new_data
- new_data_json = json.dumps(new_data, separators=(',',':'))
-
- if self.queue_index == len(self.queue):
- self.queue.append((url, new_data_json))
- elif new_data != data:
- logging.warn(
- 'Auto-convert to training because url %s\n%s != %s.' % (
- url, data, new_data))
- self.queue[self.queue_index] = [url, new_data_json]
- self.training = True
- channel = StringIO.StringIO(new_data_json)
- channel.headers = '<mocked headers>'
- self.queue_index += 1
- return channel
-
- def testCommands(self):
- # Assert no new command was added, otherwise a test needs to be written.
- expected = [
- 'busy',
- 'builds',
- 'count',
- 'current',
- 'disconnected',
- 'help',
- 'idle',
- 'interactive',
- 'last_failure',
- 'pending',
- 'run',
- ]
- actual = [i[3:] for i in dir(buildbot_json) if i.startswith('CMD')]
- self.assertEqual(sorted(expected), sorted(actual))
- for i in actual:
- self.assertTrue(hasattr(self, 'testCMD' + i))
-
- def testCMDbusy(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(
- 0,
- buildbot_json.CMDbusy(parser, [self.url, '-b', 'linux']))
- filepath = os.path.join(self.datadir, self.test_id) + '_expected.txt'
- if self.training or not os.path.isfile(filepath):
- # pylint: disable=E1101
- json.dump(sys.stdout.getvalue(), open(filepath, 'w'))
- expected = json.load(open(filepath))
- self.assertOut('stdout', expected)
-
- def testCMDbuilds(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(
- 0,
- buildbot_json.CMDbuilds(
- parser, [self.url, '-b', 'linux', '-s', 'vm146-m4', '-q']))
- filepath = os.path.join(self.datadir, self.test_id) + '_expected.txt'
- if self.training or not os.path.isfile(filepath):
- # pylint: disable=E1101
- json.dump(sys.stdout.getvalue(), open(filepath, 'w'))
- expected = json.load(open(filepath))
- self.assertOut('stdout', expected)
-
- def testCMDcount(self):
- self.mock(buildbot_json.time, 'time', lambda: 1348166285.56)
- parser = buildbot_json.gen_parser()
- self.assertEqual(
- 0,
- buildbot_json.CMDcount(
- parser, [self.url, '-b', 'linux', '-o' '360']))
- filepath = os.path.join(self.datadir, self.test_id) + '_expected.txt'
- if self.training or not os.path.isfile(filepath):
- # pylint: disable=E1101
- json.dump(sys.stdout.getvalue(), open(filepath, 'w'))
- expected = json.load(open(filepath))
- self.assertOut('stdout', expected)
-
- def testCMDdisconnected(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(
- 0,
- buildbot_json.CMDdisconnected(parser, [self.url]))
- self.assertOut(
- 'stdout',
- 'vm112-m4\nvm122-m4\nvm124-m4\nvm131-m4\nvm134-m4\nvm139-m4\nvm143-m4\n'
- 'vm146-m4\nvm157-m4\nvm162-m4\nvm165-m4\nvm60-m4\nvm62-m4\nvm64-m4\n')
-
- def testCMDhelp(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(0, buildbot_json.CMDhelp(parser, []))
- # No need to check exact output here.
- # pylint: disable=E1101
- self.assertTrue(
- 'show program\'s version number and exit\n' in sys.stdout.getvalue())
- self.mock(sys, 'stdout', cStringIO.StringIO())
-
- def testCMDidle(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(
- 0,
- buildbot_json.CMDidle(parser, [self.url, '--builder', 'linux_clang']))
- self.assertOut(
- 'stdout', 'Builder linux_clang: vm104-m4, vm113-m4, vm165-m4\n')
-
- def testCMDinteractive(self):
- self.mock(sys, 'stdin', cStringIO.StringIO('exit()'))
- parser = buildbot_json.gen_parser()
- try:
- # TODO(maruel): Real testing.
- buildbot_json.CMDinteractive(parser, [self.url])
- self.fail()
- except SystemExit:
- pass
- self.assertOut(
- 'stderr',
- 'Buildbot interactive console for "http://build.chromium.org'
- '/p/tryserver.chromium".\nHint: Start with typing: '
- '\'buildbot.printable_attributes\' or \'print str(buildbot)\' to '
- 'explore.\n')
- self.assertOut('stdout', '>>> ')
-
- def testCMDlast_failure(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(
- 0,
- buildbot_json.CMDlast_failure(
- parser, [self.url, '-b', 'linux', '--step', 'compile']))
- self.assertOut(
- 'stdout',
- '27369 on vm136-m4: blame:jam@chromium.org\n'
- '27367 on vm158-m4: blame:jam@chromium.org\n')
-
- def testCMDpending(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(0, buildbot_json.CMDpending(parser, [self.url]))
- self.assertOut('stdout',
- "Builder linux_touch: 2\n"
- " revision: HEAD\n change:\n comment: u''\n"
- " who: saintlou@google.com\n revision: HEAD\n change:\n"
- " comment: u''\n who: saintlou@google.com\n")
-
- def testCMDcurrent(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(0, buildbot_json.CMDcurrent(parser, [self.url]))
- filepath = os.path.join(self.datadir, self.test_id) + '_expected.txt'
- if self.training or not os.path.isfile(filepath):
- # pylint: disable=E1101
- json.dump(sys.stdout.getvalue(), open(filepath, 'w'))
- expected = json.load(open(filepath))
- self.assertOut('stdout', expected)
-
- def testCMDrun(self):
- parser = buildbot_json.gen_parser()
- self.assertEqual(
- 0,
- buildbot_json.CMDrun(
- parser, [self.url, "print '\\n'.join(buildbot.builders.keys)"]))
- self.assertOut('stdout', 'linux\nlinux_clang\nlinux_touch\n')
-
- def testCurrentBuilds(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- actual = []
- for builder in b.builders:
- self.assertEqual([], list(builder.current_builds.cached_children))
- i = 0
- last_build = None
- for c in builder.current_builds:
- self.assertEqual(builder, c.builder)
- actual.append(str(c))
- i += 1
- last_build = c
- if i:
- self.assertEqual(last_build.number, builder.builds[-1].number)
- self.assertEqual(i, len(list(builder.current_builds.cached_children)))
- builder.current_builds.discard()
- self.assertEqual([], list(builder.current_builds.cached_children))
-
- filepath = os.path.join(self.datadir, self.test_id) + '_expected.json'
- if self.training or not os.path.isfile(filepath):
- json.dump(actual, open(filepath, 'w'))
- expected = json.load(open(filepath))
- self.assertEqual(expected, actual)
-
- def test_builds_reverse(self):
- # Check the 2 last builds from 'linux' using iterall() instead of
- # __iter__(). The test also confirms that the build object itself is not
- # loaded.
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- actual = []
- for b in b.builders['linux'].builds.iterall():
- actual.append(b.number)
- # When using iterall() the Build data is delay loaded:
- assert b._data is None # pylint: disable=W0212
- if len(actual) == 2:
- break
-
- filepath = os.path.join(self.datadir, self.test_id) + '_expected.json'
- if self.training or not os.path.isfile(filepath):
- json.dump(actual, open(filepath, 'w'))
- expected = json.load(open(filepath))
- self.assertEqual(expected, actual)
-
- def test_build_results(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- # builds.data['results'] is not present.
- self.assertEqual(
- buildbot_json.SUCCESS, b.builders['linux_clang'].builds[1638].result)
- self.assertEqual(
- buildbot_json.SUCCESS,
- b.builders['linux_clang'].builds[1638].steps[0].result)
-
- def test_build_steps_keys(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- build = b.builders['linux_clang'].builds[1638]
- #self.assertEqual([0, 1, 2, 3], build.steps.keys)
-
- # Grab cached version. There is none.
- actual = [step for step in build.steps.cached_children]
- self.assertEqual([], actual)
-
- # Force load.
- actual = [step for step in build.steps]
- self.assertEqual(
- [buildbot_json.SUCCESS] * 4, [step.result for step in actual])
- self.assertEqual(
- [True] * 4, [step.simplified_result for step in actual])
- self.assertEqual(4, len(actual))
-
- # Grab cached version.
- actual = [step for step in build.steps.cached_children]
- self.assertEqual(
- [buildbot_json.SUCCESS] * 4, [step.result for step in actual])
- self.assertEqual(4, len(actual))
-
- def test_repr(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- self.assertEqual('<Builder key=linux>', repr(b.builders['linux']))
- self.assertEqual("<Builders keys=['linux']>", repr(b.builders))
-
- def test_refresh(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- self.assertEqual(True, b.refresh())
-
- def test_build_step_cached_data(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- build = 30157
- self.assertEqual(
- None, b.builders['linux'].current_builds[build].steps[0].cached_data)
- b.builders['linux'].current_builds[build].steps[0].cache()
- self.assertEqual(
- 'update_scripts',
- b.builders['linux'].current_builds[build].steps[0].name)
- self.assertEqual(
- ['browser_tests', 'ui_tests'],
- b.builders['linux'].current_builds[build].steps.failed)
- self.assertEqual(
- 2,
- b.builders['linux'].current_builds[build].steps[2
- ].cached_data['step_number'])
- b.refresh()
- # cache_keys() does the same thing as cache().
- b.builders['linux'].current_builds[build].steps.cache_keys()
-
- def test_contains(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- self.assertTrue('linux' in b.builders)
- self.assertEqual(3, len(list(b.builders.cached_children)))
- try:
- # The dereference of an invalid key when keys are cached will throw an
- # exception.
- # pylint: disable=W0104
- b.builders['non_existent']
- self.fail()
- except KeyError:
- pass
-
- def test_slaves(self):
- b = buildbot_json.Buildbot('http://build.chromium.org/p/tryserver.chromium')
- self.assertEqual(11, len(b.slaves.names))
- self.assertEqual(False, b.slaves['mini34-m4'].connected)
-
- def test_build_revision(self):
- class Root(object):
- @staticmethod
- def read(_):
- return {'sourceStamp': {'revision': 321}}
- build = buildbot_json.Build(Root(), '123', None)
- self.assertEqual(321, build.revision)
-
- def test_build_revision_none(self):
- class Root(object):
- @staticmethod
- def read(_):
- return {}
- build = buildbot_json.Build(Root(), '123', None)
- self.assertEqual(None, build.revision)
-
- def test_build_duration(self):
- class Root(object):
- @staticmethod
- def read(_):
- return {'times': [3, 15]}
- build = buildbot_json.Build(Root(), '123', None)
- self.assertEqual(12, build.duration)
- self.assertEqual(3, build.start_time)
- self.assertEqual(15, build.end_time)
-
- def test_build_duration_none(self):
- class Root(object):
- @staticmethod
- def read(_):
- return {}
- build = buildbot_json.Build(Root(), '123', None)
- self.assertEqual(None, build.duration)
- self.assertEqual(None, build.start_time)
- self.assertEqual(None, build.end_time)
-
- def test_build_steps_names(self):
- class Root(object):
- @staticmethod
- def read(url): # pylint: disable=E0213
- self.assertEqual('123', url)
- return {'steps': [{'name': 'a'}, {'name': 'b'}]}
- build = buildbot_json.Build(Root(), '123', None)
- self.assertEqual(['a', 'b'], build.steps.keys)
-
- def test_build_step_duration(self):
- class Root(object):
- @staticmethod
- def read(_):
- return {'steps': [{'times': [3, 15], 'isStarted': True}]}
- build = buildbot_json.Build(Root(), '123', None)
- build_step = buildbot_json.BuildStep(buildbot_json.BuildSteps(build), 0)
- self.assertEqual(12, build_step.duration)
- self.assertEqual(True, build_step.is_running)
- self.assertEqual(True, build_step.is_started)
- self.assertEqual(False, build_step.is_finished)
-
- def test_build_step_duration_none(self):
- class Root(object):
- @staticmethod
- def read(_):
- return {'steps': [{}]}
- build = buildbot_json.Build(Root(), '123', None)
- build_step = buildbot_json.BuildStep(buildbot_json.BuildSteps(build), 0)
- self.assertEqual(None, build_step.duration)
-
-
-if __name__ == '__main__':
- logging.basicConfig(level=
- [logging.WARN, logging.INFO, logging.DEBUG][min(2, sys.argv.count('-v'))])
- unittest.main()
« no previous file with comments | « commit-queue/tests/authors_white_list_test.py ('k') | commit-queue/tests/chromium.11299256.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698