Delete public commit queue to avoid confusion after move to internal repo
BUG=340808
Review URL: https://codereview.chromium.org/135363007
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/commit-queue@249148 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 451b2ac..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.pyc
-/logs-*
-/subversion_config/README.txt
-/subversion_config/auth
-/subversion_config/servers
-/workdir/*
diff --git a/DEPS b/DEPS
deleted file mode 100644
index 0fbdcd2..0000000
--- a/DEPS
+++ /dev/null
@@ -1,12 +0,0 @@
-deps = {
- "depot_tools": "/trunk/tools/depot_tools",
-}
-
-hooks = [
- {
- "pattern": ".",
- "action": [
- "python", "commit-queue/get_appengine.py"
- ],
- },
-]
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
deleted file mode 100644
index 3f1d809..0000000
--- a/PRESUBMIT.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Top-level presubmit script for commit-queue.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into gcl.
-"""
-
-
-def CommonChecks(input_api, output_api):
- import sys
- def join(*args):
- return input_api.os_path.join(input_api.PresubmitLocalPath(), *args)
-
- output = []
-
- sys_path_backup = sys.path
- try:
- # Note that this won't work on the commit queue.
- sys.path = [join('..', 'commit-queue-internal')] + sys.path
- black_list = list(input_api.DEFAULT_BLACK_LIST) + [
- r'^workdir/.*',
- r'^tests/.+',
- ]
- output.extend(input_api.canned_checks.RunPylint(
- input_api, output_api, black_list=black_list))
-
- sys.path = [join('tests')] + sys.path
- black_list = list(input_api.DEFAULT_BLACK_LIST) + [
- r'^workdir/.*',
- ]
- white_list = [ r'tests/.+\.py$' ]
- output.extend(input_api.canned_checks.RunPylint(
- input_api, output_api, black_list=black_list, white_list=white_list))
- finally:
- sys.path = sys_path_backup
-
- output.extend(input_api.canned_checks.RunUnitTestsInDirectory(
- input_api, output_api, 'tests', whitelist=[r'.*_test\.py$']))
- return output
-
-
-def CheckChangeOnUpload(input_api, output_api):
- return CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
- return CommonChecks(input_api, output_api)
diff --git a/README b/README
deleted file mode 100644
index 1d14ca1..0000000
--- a/README
+++ /dev/null
@@ -1,30 +0,0 @@
-Commit queue master process scripts.
-
-This script requires privileged access to be able to impersonate svn
-credentials. When it detects it's not run on the main server, it will run in
-'dry run' mode where it has no effect; it doesn't modify issues on rietveld or
-commit patches.
-
-
-Design overview:
-
-The commit queue process runs a tight loop that does 2 things in parallel:
-- Scans for new reviews on a rietveld instance with commit bit (c+) set and
- enqueue these to the commit queue.
-- Manages the pending entries in the commit queue by testing each item
- independently and committing as soon as all the signals for a specific review
- are green.
-
-The life of a pending commit is:
-- If any of the following steps fail; mark the review c-, remove from the queue
- and add a comment on the review.
- - Run presubmit scripts and make sure there is a LGTM from a valid reviewer.
- - Send the patch to the try server on relevant builders and run relevant
- tests.
- - Wait for all try jobs completes and be green.
- - Sync local checkout to HEAD.
- - Apply the patch.
- - Commit as the user.
-
-Each verification step is done through a Verifier plug-in. Every Verifier is a
-single python file in verifications/.
diff --git a/WATCHLISTS b/WATCHLISTS
deleted file mode 100644
index 2dcfca7..0000000
--- a/WATCHLISTS
+++ /dev/null
@@ -1,20 +0,0 @@
-# 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.
-
-# Watchlist Rules
-# Refer: http://dev.chromium.org/developers/contributing-code/watchlists
-
-{
- 'WATCHLIST_DEFINITIONS': {
- 'all': {
- 'filepath': '.+',
- },
- },
- 'WATCHLISTS': {
- 'all': [
- 'cmp-cc@chromium.org',
- 'ilevy-cc@chromium.org',
- ],
- },
-}
diff --git a/async_push.py b/async_push.py
deleted file mode 100644
index 2e6d861..0000000
--- a/async_push.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# 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.
-"""Out of band HTTP push."""
-
-import Queue
-import json
-import logging
-import os
-import threading
-import time
-import traceback
-import urllib
-
-import errors
-from verification import base
-
-
-class AsyncPushNoop(object):
- url = 'http://localhost'
- def close(self):
- pass
-
- def send(self, pending, packet):
- pass
-
- @staticmethod
- def _package(pending, packet):
- data = {
- 'done': pending.get_state() not in (base.PROCESSING, base.IGNORED),
- 'issue': pending.issue,
- 'owner': pending.owner,
- 'patchset': pending.patchset,
- 'timestamp': time.time(),
- }
- if packet:
- data.update(packet)
- return data
-
-
-class AsyncPushStore(AsyncPushNoop):
- """Saves all the events into workdir/events.json for later analysis.
-
- Thread-safe.
- """
- def __init__(self):
- super(AsyncPushStore, self).__init__()
- self.lock = threading.Lock()
- self.queue = []
-
- def close(self):
- with self.lock:
- with open(os.path.join('workdir', 'events.json'), 'w') as f:
- json.dump(self.queue, f, indent=2)
-
- def send(self, pending, packet):
- with self.lock:
- self.queue.append(self._package(pending, packet))
-
-
-class AsyncPush(AsyncPushNoop):
- """Sends HTTP Post asynchronously to the tree status application.
-
- This object uses a background worker thread, and is thread-safe.
- """
- _TERMINATE = object()
-
- def __init__(self, url, password, resource='/receiver'):
- super(AsyncPush, self).__init__()
- assert url
- assert password
- self.url = url
- self.resource = resource
- self.password = password
- self.queue = Queue.Queue()
- self.thread = threading.Thread(target=self._worker_thread)
- self.thread.daemon = True
- self.thread.start()
-
- def close(self):
- self.queue.put(self._TERMINATE)
- self.thread.join()
-
- def send(self, pending, packet):
- """Queues a packet."""
- logging.debug('For issue %d, queuing for send: %s', pending.issue, packet)
- self.queue.put(self._package(pending, packet))
-
- def _get_items(self):
- """Waits for an item to be queued and returns up to 10 next items if queued
- fast enough.
- """
- items = [self.queue.get()]
- try:
- for _ in range(9):
- items.append(self.queue.get_nowait())
- except Queue.Empty:
- pass
- return items
-
- def _worker_thread(self):
- """Sends the packets in a loop through HTTP POST."""
- params = {
- 'Content-type': 'application/x-www-form-urlencoded',
- 'Accept': 'text/plain'
- }
- done = False
- try:
- while not done:
- items = self._get_items()
- if self._TERMINATE in items:
- done = True
- logging.debug('Worker thread exiting')
- items.remove(self._TERMINATE)
- url = self.url + self.resource
- logging.debug('Sending %d items to %s: %r', len(items), url, items)
- try:
- data = [('p', json.dumps(item)) for item in items]
- data.append(('password', self.password))
- urllib.urlopen(url, urllib.urlencode(data), params).read()
- except IOError as e:
- logging.error(e)
- for item in items:
- self.queue.put(item)
- if not done:
- time.sleep(1)
- # Don't retry if done.
- except Exception as e:
- traceback.print_exc()
- errors.send_stack(e)
diff --git a/buildbot_json.py b/buildbot_json.py
deleted file mode 100755
index c8a0925..0000000
--- a/buildbot_json.py
+++ /dev/null
@@ -1,1455 +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 at
-# http://src.chromium.org/viewvc/chrome/trunk/src/LICENSE
-# This file is NOT under GPL.
-
-"""Queries buildbot through the json interface.
-"""
-
-__author__ = 'maruel@chromium.org'
-__version__ = '1.2'
-
-import code
-import datetime
-import functools
-import json
-import logging
-import optparse
-import time
-import urllib
-import urllib2
-import sys
-
-try:
- from natsort import natsorted
-except ImportError:
- # natsorted is a simple helper to sort "naturally", e.g. "vm40" is sorted
- # after "vm7". Defaults to normal sorting.
- natsorted = sorted
-
-
-# These values are buildbot constants used for Build and BuildStep.
-# This line was copied from master/buildbot/status/builder.py.
-SUCCESS, WARNINGS, FAILURE, SKIPPED, EXCEPTION, RETRY = range(6)
-
-
-## Generic node caching code.
-
-
-class Node(object):
- """Root class for all nodes in the graph.
-
- Provides base functionality for any node in the graph, independent if it has
- children or not or if its content can be addressed through an url or needs to
- be fetched as part of another node.
-
- self.printable_attributes is only used for self documentation and for str()
- implementation.
- """
- printable_attributes = []
-
- def __init__(self, parent, url):
- self.printable_attributes = self.printable_attributes[:]
- if url:
- self.printable_attributes.append('url')
- url = url.rstrip('/')
- if parent is not None:
- self.printable_attributes.append('parent')
- self.url = url
- self.parent = parent
-
- def __str__(self):
- return self.to_string()
-
- def __repr__(self):
- """Embeds key if present."""
- key = getattr(self, 'key', None)
- if key is not None:
- return '<%s key=%s>' % (self.__class__.__name__, key)
- cached_keys = getattr(self, 'cached_keys', None)
- if cached_keys is not None:
- return '<%s keys=%s>' % (self.__class__.__name__, cached_keys)
- return super(Node, self).__repr__()
-
- def to_string(self, maximum=100):
- out = ['%s:' % self.__class__.__name__]
- assert not 'printable_attributes' in self.printable_attributes
-
- def limit(txt):
- txt = str(txt)
- if maximum > 0:
- if len(txt) > maximum + 2:
- txt = txt[:maximum] + '...'
- return txt
-
- for k in sorted(self.printable_attributes):
- if k == 'parent':
- # Avoid infinite recursion.
- continue
- out.append(limit(' %s: %r' % (k, getattr(self, k))))
- return '\n'.join(out)
-
- def refresh(self):
- """Refreshes the data."""
- self.discard()
- return self.cache()
-
- def cache(self): # pragma: no cover
- """Caches the data."""
- raise NotImplementedError()
-
- def discard(self): # pragma: no cover
- """Discards cached data.
-
- Pretty much everything is temporary except completed Build.
- """
- raise NotImplementedError()
-
- def read_non_json(self, suburl):
- """Returns raw data for a suburl.
-
- Contrary to self.read(), self.read_non_json() is always available since
- suburl is rooted at the base url. read() is only accessible for resources
- that have an URI.
- """
- return self.parent.read_non_json(suburl)
-
-
-class AddressableBaseDataNode(Node): # pylint: disable=W0223
- """A node that contains a dictionary of data that can be fetched with an url.
-
- The node is directly addressable. It also often can be fetched by the parent.
- """
- printable_attributes = Node.printable_attributes + ['data']
-
- def __init__(self, parent, url, data):
- super(AddressableBaseDataNode, self).__init__(parent, url)
- self._data = data
-
- @property
- def cached_data(self):
- return self._data
-
- @property
- def data(self):
- self.cache()
- return self._data
-
- def cache(self):
- if self._data is None:
- self._data = self._readall()
- return True
- return False
-
- def discard(self):
- self._data = None
-
- def read(self, suburl):
- assert self.url, self.__class__.__name__
- url = self.url
- if suburl:
- url = '%s/%s' % (self.url, suburl)
- return self.parent.read(url)
-
- def _readall(self):
- return self.read('')
-
-
-class AddressableDataNode(AddressableBaseDataNode): # pylint: disable=W0223
- """Automatically encodes the url."""
-
- def __init__(self, parent, url, data):
- super(AddressableDataNode, self).__init__(parent, urllib.quote(url), data)
-
-
-class NonAddressableDataNode(Node): # pylint: disable=W0223
- """A node that cannot be addressed by an unique url.
-
- The data comes directly from the parent.
- """
- def __init__(self, parent, subkey):
- super(NonAddressableDataNode, self).__init__(parent, None)
- self.subkey = subkey
-
- @property
- def cached_data(self):
- if self.parent.cached_data is None:
- return None
- return self.parent.cached_data[self.subkey]
-
- @property
- def data(self):
- return self.parent.data[self.subkey]
-
- def cache(self):
- self.parent.cache()
-
- def discard(self): # pragma: no cover
- """Avoid invalid state when parent recreate the object."""
- raise AttributeError('Call parent discard() instead')
-
-
-class VirtualNodeList(Node):
- """Base class for every node that has children.
-
- Adds partial supports for keys and iterator functionality. 'key' can be a
- string or a int. Not to be used directly.
- """
- printable_attributes = Node.printable_attributes + ['keys']
-
- def __init__(self, parent, url):
- super(VirtualNodeList, self).__init__(parent, url)
- # Keeps the keys independently when ordering is needed.
- self._is_cached = False
- self._has_keys_cached = False
-
- def __contains__(self, key):
- """Enables 'if i in obj:'."""
- return key in self.keys
-
- def __iter__(self):
- """Enables 'for i in obj:'. It returns children."""
- self.cache_keys()
- for key in self.keys:
- yield self[key]
-
- def __len__(self):
- """Enables 'len(obj)' to get the number of childs."""
- return len(self.keys)
-
- def discard(self):
- """Discards data.
-
- The default behavior is to not invalidate cached keys. The only place where
- keys need to be invalidated is with Builds.
- """
- self._is_cached = False
- self._has_keys_cached = False
-
- @property
- def cached_children(self): # pragma: no cover
- """Returns an iterator over the children that are cached."""
- raise NotImplementedError()
-
- @property
- def cached_keys(self): # pragma: no cover
- raise NotImplementedError()
-
- @property
- def keys(self): # pragma: no cover
- """Returns the keys for every children."""
- raise NotImplementedError()
-
- def __getitem__(self, key): # pragma: no cover
- """Returns a child, without fetching its data.
-
- The children could be invalid since no verification is done.
- """
- raise NotImplementedError()
-
- def cache(self): # pragma: no cover
- """Cache all the children."""
- raise NotImplementedError()
-
- def cache_keys(self): # pragma: no cover
- """Cache all children's keys."""
- raise NotImplementedError()
-
-
-class NodeList(VirtualNodeList): # pylint: disable=W0223
- """Adds a cache of the keys."""
- def __init__(self, parent, url):
- super(NodeList, self).__init__(parent, url)
- self._keys = []
-
- @property
- def cached_keys(self):
- return self._keys
-
- @property
- def keys(self):
- self.cache_keys()
- return self._keys
-
-
-class NonAddressableNodeList(VirtualNodeList): # pylint: disable=W0223
- """A node that contains children but retrieves all its data from its parent.
-
- I.e. there's no url to get directly this data.
- """
- # Child class object for children of this instance. For example, BuildSteps
- # has BuildStep children.
- _child_cls = None
-
- def __init__(self, parent, subkey):
- super(NonAddressableNodeList, self).__init__(parent, None)
- self.subkey = subkey
- assert (
- not isinstance(self._child_cls, NonAddressableDataNode) and
- issubclass(self._child_cls, NonAddressableDataNode)), (
- self._child_cls.__name__)
-
- @property
- def cached_children(self):
- if self.parent.cached_data is not None:
- for i in xrange(len(self.parent.cached_data[self.subkey])):
- yield self[i]
-
- @property
- def cached_data(self):
- if self.parent.cached_data is None:
- return None
- return self.parent.data.get(self.subkey, None)
-
- @property
- def cached_keys(self):
- if self.parent.cached_data is None:
- return None
- return range(len(self.parent.data.get(self.subkey, [])))
-
- @property
- def data(self):
- return self.parent.data[self.subkey]
-
- def cache(self):
- self.parent.cache()
-
- def cache_keys(self):
- self.parent.cache()
-
- def discard(self): # pragma: no cover
- """Avoid infinite recursion by having the caller calls the parent's
- discard() explicitely.
- """
- raise AttributeError('Call parent discard() instead')
-
- def __iter__(self):
- """Enables 'for i in obj:'. It returns children."""
- if self.data:
- for i in xrange(len(self.data)):
- yield self[i]
-
- def __getitem__(self, key):
- """Doesn't cache the value, it's not needed.
-
- TODO(maruel): Cache?
- """
- if isinstance(key, int) and key < 0:
- key = len(self.data) + key
- # pylint: disable=E1102
- return self._child_cls(self, key)
-
-
-class AddressableNodeList(NodeList):
- """A node that has children that can be addressed with an url."""
-
- # Child class object for children of this instance. For example, Builders has
- # Builder children and Builds has Build children.
- _child_cls = None
-
- def __init__(self, parent, url):
- super(AddressableNodeList, self).__init__(parent, url)
- self._cache = {}
- assert (
- not isinstance(self._child_cls, AddressableDataNode) and
- issubclass(self._child_cls, AddressableDataNode)), (
- self._child_cls.__name__)
-
- @property
- def cached_children(self):
- for item in self._cache.itervalues():
- if item.cached_data is not None:
- yield item
-
- @property
- def cached_keys(self):
- return self._cache.keys()
-
- def __getitem__(self, key):
- """Enables 'obj[i]'."""
- if self._has_keys_cached and not key in self._keys:
- raise KeyError(key)
-
- if not key in self._cache:
- # Create an empty object.
- self._create_obj(key, None)
- return self._cache[key]
-
- def cache(self):
- if not self._is_cached:
- data = self._readall()
- for key in sorted(data):
- self._create_obj(key, data[key])
- self._is_cached = True
- self._has_keys_cached = True
-
- def cache_partial(self, children):
- """Caches a partial number of children.
-
- This method is more efficient since it does a single request for all the
- children instead of one request per children.
-
- It only grab objects not already cached.
- """
- # pylint: disable=W0212
- if not self._is_cached:
- to_fetch = [
- child for child in children
- if not (child in self._cache and self._cache[child].cached_data)
- ]
- if to_fetch:
- # Similar to cache(). The only reason to sort is to simplify testing.
- params = '&'.join(
- 'select=%s' % urllib.quote(str(v)) for v in sorted(to_fetch))
- data = self.read('?' + params)
- for key in sorted(data):
- self._create_obj(key, data[key])
-
- def cache_keys(self):
- """Implement to speed up enumeration. Defaults to call cache()."""
- if not self._has_keys_cached:
- self.cache()
- assert self._has_keys_cached
-
- def discard(self):
- """Discards temporary children."""
- super(AddressableNodeList, self).discard()
- for v in self._cache.itervalues():
- v.discard()
-
- def read(self, suburl):
- assert self.url, self.__class__.__name__
- url = self.url
- if suburl:
- url = '%s/%s' % (self.url, suburl)
- return self.parent.read(url)
-
- def _create_obj(self, key, data):
- """Creates an object of type self._child_cls."""
- # pylint: disable=E1102
- obj = self._child_cls(self, key, data)
- # obj.key and key may be different.
- # No need to overide cached data with None.
- if data is not None or obj.key not in self._cache:
- self._cache[obj.key] = obj
- if obj.key not in self._keys:
- self._keys.append(obj.key)
-
- def _readall(self):
- return self.read('')
-
-
-class SubViewNodeList(VirtualNodeList): # pylint: disable=W0223
- """A node that shows a subset of children that comes from another structure.
-
- The node is not addressable.
-
- E.g. the keys are retrieved from parent but the actual data comes from
- virtual_parent.
- """
-
- def __init__(self, parent, virtual_parent, subkey):
- super(SubViewNodeList, self).__init__(parent, None)
- self.subkey = subkey
- self.virtual_parent = virtual_parent
- assert isinstance(self.parent, AddressableDataNode)
- assert isinstance(self.virtual_parent, NodeList)
-
- @property
- def cached_children(self):
- if self.parent.cached_data is not None:
- for item in self.keys:
- if item in self.virtual_parent.keys:
- child = self[item]
- if child.cached_data is not None:
- yield child
-
- @property
- def cached_keys(self):
- return (self.parent.cached_data or {}).get(self.subkey, [])
-
- @property
- def keys(self):
- self.cache_keys()
- return self.parent.data.get(self.subkey, [])
-
- def cache(self):
- """Batch request for each child in a single read request."""
- if not self._is_cached:
- self.virtual_parent.cache_partial(self.keys)
- self._is_cached = True
-
- def cache_keys(self):
- if not self._has_keys_cached:
- self.parent.cache()
- self._has_keys_cached = True
-
- def discard(self):
- if self.parent.cached_data is not None:
- for child in self.virtual_parent.cached_children:
- if child.key in self.keys:
- child.discard()
- self.parent.discard()
- super(SubViewNodeList, self).discard()
-
- def __getitem__(self, key):
- """Makes sure the key is in our key but grab it from the virtual parent."""
- return self.virtual_parent[key]
-
- def __iter__(self):
- self.cache()
- return super(SubViewNodeList, self).__iter__()
-
-
-###############################################################################
-## Buildbot-specific code
-
-
-class Slave(AddressableDataNode):
- printable_attributes = AddressableDataNode.printable_attributes + [
- 'name', 'key', 'connected', 'version',
- ]
-
- def __init__(self, parent, name, data):
- super(Slave, self).__init__(parent, name, data)
- self.name = name
- self.key = self.name
- # TODO(maruel): Add SlaveBuilders and a 'builders' property.
- # TODO(maruel): Add a 'running_builds' property.
-
- @property
- def connected(self):
- return self.data.get('connected', False)
-
- @property
- def version(self):
- return self.data.get('version')
-
-
-class Slaves(AddressableNodeList):
- _child_cls = Slave
- printable_attributes = AddressableNodeList.printable_attributes + ['names']
-
- def __init__(self, parent):
- super(Slaves, self).__init__(parent, 'slaves')
-
- @property
- def names(self):
- return self.keys
-
-
-class BuilderSlaves(SubViewNodeList):
- """Similar to Slaves but only list slaves connected to a specific builder.
- """
- printable_attributes = SubViewNodeList.printable_attributes + ['names']
-
- def __init__(self, parent):
- super(BuilderSlaves, self).__init__(
- parent, parent.parent.parent.slaves, 'slaves')
-
- @property
- def names(self):
- return self.keys
-
-
-class BuildStep(NonAddressableDataNode):
- printable_attributes = NonAddressableDataNode.printable_attributes + [
- 'name', 'number', 'start_time', 'end_time', 'duration', 'is_started',
- 'is_finished', 'is_running',
- 'result', 'simplified_result',
- ]
-
- def __init__(self, parent, number):
- """It's already pre-loaded by definition since the data is retrieve via the
- Build object.
- """
- assert isinstance(number, int)
- super(BuildStep, self).__init__(parent, number)
- self.number = number
-
- @property
- def build(self):
- """Returns the Build object for this BuildStep."""
- # Build.BuildSteps.BuildStep
- return self.parent.parent
-
- @property
- def start_time(self):
- if self.data.get('times'):
- return int(round(self.data['times'][0]))
-
- @property
- def end_time(self):
- times = self.data.get('times')
- if times and len(times) == 2 and times[1]:
- return int(round(times[1]))
-
- @property
- def duration(self):
- if self.start_time:
- return (self.end_time or int(round(time.time()))) - self.start_time
-
- @property
- def name(self):
- return self.data['name']
-
- @property
- def is_started(self):
- return self.data.get('isStarted', False)
-
- @property
- def is_finished(self):
- return self.data.get('isFinished', False)
-
- @property
- def is_running(self):
- return self.is_started and not self.is_finished
-
- @property
- def result(self):
- result = self.data.get('results')
- if result is None:
- # results may be 0, in that case with filter=1, the value won't be
- # present.
- if self.data.get('isFinished'):
- result = self.data.get('results', 0)
- while isinstance(result, list):
- result = result[0]
- return result
-
- @property
- def simplified_result(self):
- """Returns a simplified 3 state value, True, False or None."""
- result = self.result
- if result in (SUCCESS, WARNINGS):
- return True
- elif result in (FAILURE, EXCEPTION, RETRY):
- return False
- assert result in (None, SKIPPED), (result, self.data)
- return None
-
- @property
- def stdio(self):
- """Returns the stdio for this step or None if not available."""
- # Parents ordering is BuildSteps / Build / Builds / Builders
- # A bit hackish but works.
- build = self.build
- builder = build.builder
- suburl = 'builders/%s/builds/%d/steps/%s/logs/stdio/text' % (
- builder.name, build.number, self.name)
- return self.read_non_json(suburl)
-
-
-class BuildSteps(NonAddressableNodeList):
- """Duplicates keys to support lookup by both step number and step name."""
- printable_attributes = NonAddressableNodeList.printable_attributes + [
- 'failed',
- ]
- _child_cls = BuildStep
-
- def __init__(self, parent):
- """It's already pre-loaded by definition since the data is retrieve via the
- Build object.
- """
- super(BuildSteps, self).__init__(parent, 'steps')
-
- @property
- def keys(self):
- """Returns the steps name in order."""
- return [i['name'] for i in (self.data or [])]
-
- @property
- def failed(self):
- """Shortcuts that lists the step names of steps that failed."""
- return [step.name for step in self if step.simplified_result is False]
-
- def __getitem__(self, key):
- """Accept step name in addition to index number."""
- if isinstance(key, basestring):
- # It's a string, try to find the corresponding index.
- for i, step in enumerate(self.data):
- if step['name'] == key:
- key = i
- break
- else:
- raise KeyError(key)
- return super(BuildSteps, self).__getitem__(key)
-
-
-class Build(AddressableDataNode):
- printable_attributes = AddressableDataNode.printable_attributes + [
- 'key', 'number', 'steps', 'blame', 'reason', 'revision', 'result',
- 'simplified_result', 'start_time', 'end_time', 'duration', 'slave',
- 'properties', 'completed',
- ]
-
- def __init__(self, parent, key, data):
- super(Build, self).__init__(parent, str(key), data)
- self.number = int(key)
- self.key = self.number
- self.steps = BuildSteps(self)
-
- @property
- def blame(self):
- return self.data.get('blame', [])
-
- @property
- def builder(self):
- """Returns the Builder object.
-
- Goes up the hierarchy to find the Buildbot.builders[builder] instance.
- """
- return self.parent.parent.parent.parent.builders[self.data['builderName']]
-
- @property
- def start_time(self):
- if self.data.get('times'):
- return int(round(self.data['times'][0]))
-
- @property
- def end_time(self):
- times = self.data.get('times')
- if times and len(times) == 2 and times[1]:
- return int(round(times[1]))
-
- @property
- def duration(self):
- if self.start_time:
- return (self.end_time or int(round(time.time()))) - self.start_time
-
- @property
- def eta(self):
- return self.data.get('eta', 0)
-
- @property
- def completed(self):
- return self.data.get('currentStep') is None
-
- @property
- def properties(self):
- return self.data.get('properties', [])
-
- @property
- def properties_as_dict(self):
- """Converts the 3-tuple properties into a dict(p[0]: p[1]) and ignores the
- property's source.
- """
- return dict((p[0], p[1]) for p in self.properties)
-
- @property
- def reason(self):
- return self.data.get('reason')
-
- @property
- def result(self):
- result = self.data.get('results')
- while isinstance(result, list):
- result = result[0]
- if result is None and self.steps:
- # results may be 0, in that case with filter=1, the value won't be
- # present.
- result = self.steps[-1].result
- return result
-
- @property
- def revision(self):
- return self.data.get('sourceStamp', {}).get('revision')
-
- @property
- def simplified_result(self):
- """Returns a simplified 3 state value, True, False or None."""
- result = self.result
- if result in (SUCCESS, WARNINGS, SKIPPED):
- return True
- elif result in (FAILURE, EXCEPTION, RETRY):
- return False
- assert result is None, (result, self.data)
- return None
-
- @property
- def slave(self):
- """Returns the Slave object.
-
- Goes up the hierarchy to find the Buildbot.slaves[slave] instance.
- """
- return self.parent.parent.parent.parent.slaves[self.data['slave']]
-
- def discard(self):
- """Completed Build isn't discarded."""
- if self._data and self.result is None:
- assert not self.steps or not self.steps[-1].data.get('isFinished')
- self._data = None
-
-
-class CurrentBuilds(SubViewNodeList):
- """Lists of the current builds."""
- def __init__(self, parent):
- super(CurrentBuilds, self).__init__(
- parent, parent.builds, 'currentBuilds')
-
-
-class PendingBuilds(AddressableDataNode):
- def __init__(self, parent):
- super(PendingBuilds, self).__init__(parent, 'pendingBuilds', None)
-
-
-class Builds(AddressableNodeList):
- """Supports iteration.
-
- Recommends using .cache() to speed up if a significant number of builds are
- iterated over.
- """
- _child_cls = Build
-
- def __init__(self, parent):
- super(Builds, self).__init__(parent, 'builds')
-
- def __getitem__(self, key):
- """Adds supports for negative reference and enables retrieving non-cached
- builds.
-
- e.g. -1 is the last build, -2 is the previous build before the last one.
- """
- key = int(key)
- if key < 0:
- # Convert negative to positive build number.
- self.cache_keys()
- # Since the negative value can be outside of the cache keys range, use the
- # highest key value and calculate from it.
- key = max(self._keys) + key + 1
-
- if not key in self._cache:
- # Create an empty object.
- self._create_obj(key, None)
- return self._cache[key]
-
- def __iter__(self):
- """Returns cached Build objects in reversed order.
-
- The most recent build is returned first and then in reverse chronological
- order, up to the oldest cached build by the server. Older builds can be
- accessed but will trigger significantly more I/O so they are not included by
- default in the iteration.
-
- To access the older builds, use self.iterall() instead.
- """
- self.cache()
- return reversed(self._cache.values())
-
- def iterall(self):
- """Returns Build objects in decreasing order unbounded up to build 0.
-
- The most recent build is returned first and then in reverse chronological
- order. Older builds can be accessed and will trigger significantly more I/O
- so use this carefully.
- """
- # Only cache keys here.
- self.cache_keys()
- if self._keys:
- for i in xrange(max(self._keys), -1, -1):
- yield self[i]
-
- def cache_keys(self):
- """Grabs the keys (build numbers) from the builder."""
- if not self._has_keys_cached:
- for i in self.parent.data.get('cachedBuilds', []):
- i = int(i)
- self._cache.setdefault(i, Build(self, i, None))
- if i not in self._keys:
- self._keys.append(i)
- self._has_keys_cached = True
-
- def discard(self):
- super(Builds, self).discard()
- # Can't keep keys.
- self._has_keys_cached = False
-
- def _readall(self):
- return self.read('_all')
-
-
-class Builder(AddressableDataNode):
- printable_attributes = AddressableDataNode.printable_attributes + [
- 'name', 'key', 'builds', 'slaves', 'pending_builds', 'current_builds',
- ]
-
- def __init__(self, parent, name, data):
- super(Builder, self).__init__(parent, name, data)
- self.name = name
- self.key = name
- self.builds = Builds(self)
- self.slaves = BuilderSlaves(self)
- self.current_builds = CurrentBuilds(self)
- self.pending_builds = PendingBuilds(self)
-
- def discard(self):
- super(Builder, self).discard()
- self.builds.discard()
- self.slaves.discard()
- self.current_builds.discard()
-
-
-class Builders(AddressableNodeList):
- """Root list of builders."""
- _child_cls = Builder
-
- def __init__(self, parent):
- super(Builders, self).__init__(parent, 'builders')
-
-
-class Buildbot(AddressableBaseDataNode):
- """If a master restart occurs, this object should be recreated as it caches
- data.
- """
- # Throttle fetches to not kill the server.
- auto_throttle = None
- printable_attributes = AddressableDataNode.printable_attributes + [
- 'slaves', 'builders', 'last_fetch',
- ]
-
- def __init__(self, url):
- super(Buildbot, self).__init__(None, url, None)
- self._builders = Builders(self)
- self._slaves = Slaves(self)
- self.last_fetch = None
-
- @property
- def builders(self):
- return self._builders
-
- @property
- def slaves(self):
- return self._slaves
-
- def discard(self):
- """Discards information about Builders and Slaves."""
- super(Buildbot, self).discard()
- self._builders.discard()
- self._slaves.discard()
-
- def read(self, suburl):
- """Returns json decoded data for the suburl."""
- if self.auto_throttle:
- if self.last_fetch:
- delta = datetime.datetime.utcnow() - self.last_fetch
- remaining = (datetime.timedelta(seconds=self.auto_throttle) -
- delta)
- if remaining > datetime.timedelta(seconds=0):
- logging.debug('Sleeping for %ss' % remaining)
- time.sleep(remaining.seconds)
- self.last_fetch = datetime.datetime.utcnow()
- url = '%s/json/%s' % (self.url, suburl)
- if '?' in url:
- url += '&filter=1'
- else:
- url += '?filter=1'
- logging.debug('read(%s)' % suburl)
- try:
- channel = urllib.urlopen(url)
- data = channel.read()
- except IOError as e:
- logging.warning('caught %s while fetching "%s"; re-throwing' % (
- str(e), url))
- raise
- try:
- return json.loads(data)
- except ValueError:
- if channel.getcode() >= 400:
- # Convert it into an HTTPError for easier processing.
- raise urllib2.HTTPError(
- url, channel.getcode(), '%s:\n%s' % (url, data), channel.headers,
- None)
- raise
-
- def read_non_json(self, suburl):
- """Returns data for an arbitrary suburl outside of the /json/ path."""
- logging.debug('read_non_json(%s)' % suburl)
- return urllib.urlopen('%s/%s' % (self.url, suburl)).read()
-
- def _readall(self):
- return self.read('project')
-
-
-###############################################################################
-## Controller code
-
-
-def usage(more):
- def hook(fn):
- fn.func_usage_more = more
- return fn
- return hook
-
-
-def need_buildbot(fn):
- """Post-parse args to create a buildbot object."""
- @functools.wraps(fn)
- def hook(parser, args, *extra_args, **kwargs):
- old_parse_args = parser.parse_args
- def new_parse_args(args):
- options, args = old_parse_args(args)
- if len(args) < 1:
- parser.error('Need to pass the root url of the buildbot')
- url = args.pop(0)
- if not url.startswith('http'):
- url = 'http://' + url
- buildbot = Buildbot(url)
- buildbot.auto_throttle = options.throttle
- return options, args, buildbot
- parser.parse_args = new_parse_args
- # Call the original function with the modified parser.
- return fn(parser, args, *extra_args, **kwargs)
-
- hook.func_usage_more = '[options] <url>'
- return hook
-
-
-@need_buildbot
-def CMDpending(parser, args):
- """Lists pending jobs."""
- parser.add_option(
- '-b', '--builder', dest='builders', action='append', default=[],
- help='Builders to filter on')
- options, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- if not options.builders:
- options.builders = buildbot.builders.keys
- for builder in options.builders:
- builder = buildbot.builders[builder]
- pending_builds = builder.data.get('pendingBuilds', 0)
- if not pending_builds:
- continue
- print 'Builder %s: %d' % (builder.name, pending_builds)
- if not options.quiet:
- for pending in builder.pending_builds.data:
- if 'revision' in pending['source']:
- print ' revision: %s' % pending['source']['revision']
- for change in pending['source']['changes']:
- print ' change:'
- print ' comment: %r' % unicode(change['comments'][:50])
- print ' who: %s' % change['who']
- return 0
-
-
-@usage('[options] <url> [commands] ...')
-@need_buildbot
-def CMDrun(parser, args):
- """Runs commands passed as parameters.
-
- When passing commands on the command line, each command will be run as if it
- was on its own line.
- """
- parser.add_option('-f', '--file', help='Read script from file')
- parser.add_option(
- '-i', dest='use_stdin', action='store_true', help='Read script on stdin')
- # Variable 'buildbot' is not used directly.
- # pylint: disable=W0612
- options, args, buildbot = parser.parse_args(args)
- if (bool(args) + bool(options.use_stdin) + bool(options.file)) != 1:
- parser.error('Need to pass only one of: <commands>, -f <file> or -i')
- if options.use_stdin:
- cmds = sys.stdin.read()
- elif options.file:
- cmds = open(options.file).read()
- else:
- cmds = '\n'.join(args)
- compiled = compile(cmds, '<cmd line>', 'exec')
- eval(compiled, globals(), locals())
- return 0
-
-
-@need_buildbot
-def CMDinteractive(parser, args):
- """Runs an interactive shell to run queries."""
- _, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- prompt = (
- 'Buildbot interactive console for "%s".\n'
- 'Hint: Start with typing: \'buildbot.printable_attributes\' or '
- '\'print str(buildbot)\' to explore.') % buildbot.url
- local_vars = {
- 'buildbot': buildbot,
- 'b': buildbot,
- }
- code.interact(prompt, None, local_vars)
-
-
-@need_buildbot
-def CMDidle(parser, args):
- """Lists idle slaves."""
- return find_idle_busy_slaves(parser, args, True)
-
-
-@need_buildbot
-def CMDbusy(parser, args):
- """Lists idle slaves."""
- return find_idle_busy_slaves(parser, args, False)
-
-
-@need_buildbot
-def CMDdisconnected(parser, args):
- """Lists disconnected slaves."""
- _, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- for slave in buildbot.slaves:
- if not slave.connected:
- print slave.name
- return 0
-
-
-def find_idle_busy_slaves(parser, args, show_idle):
- parser.add_option(
- '-b', '--builder', dest='builders', action='append', default=[],
- help='Builders to filter on')
- parser.add_option(
- '-s', '--slave', dest='slaves', action='append', default=[],
- help='Slaves to filter on')
- options, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- if not options.builders:
- options.builders = buildbot.builders.keys
- for builder in options.builders:
- builder = buildbot.builders[builder]
- if options.slaves:
- # Only the subset of slaves connected to the builder.
- slaves = list(set(options.slaves).intersection(set(builder.slaves.names)))
- if not slaves:
- continue
- else:
- slaves = builder.slaves.names
- busy_slaves = [build.slave.name for build in builder.current_builds]
- if show_idle:
- slaves = natsorted(set(slaves) - set(busy_slaves))
- else:
- slaves = natsorted(set(slaves) & set(busy_slaves))
- if options.quiet:
- for slave in slaves:
- print slave
- else:
- if slaves:
- print 'Builder %s: %s' % (builder.name, ', '.join(slaves))
- return 0
-
-
-def last_failure(
- buildbot, builders=None, slaves=None, steps=None, no_cache=False):
- """Generator returning Build object that were the last failure with the
- specific filters.
- """
- builders = builders or buildbot.builders.keys
- for builder in builders:
- builder = buildbot.builders[builder]
- if slaves:
- # Only the subset of slaves connected to the builder.
- builder_slaves = list(set(slaves).intersection(set(builder.slaves.names)))
- if not builder_slaves:
- continue
- else:
- builder_slaves = builder.slaves.names
-
- if not no_cache and len(builder.slaves) > 2:
- # Unless you just want the last few builds, it's often faster to
- # fetch the whole thing at once, at the cost of a small hickup on
- # the buildbot.
- # TODO(maruel): Cache only N last builds or all builds since
- # datetime.
- builder.builds.cache()
-
- found = []
- for build in builder.builds:
- if build.slave.name not in builder_slaves or build.slave.name in found:
- continue
- # Only add the slave for the first completed build but still look for
- # incomplete builds.
- if build.completed:
- found.append(build.slave.name)
-
- if steps:
- if any(build.steps[step].simplified_result is False for step in steps):
- yield build
- elif build.simplified_result is False:
- yield build
-
- if len(found) == len(builder_slaves):
- # Found all the slaves, quit.
- break
-
-
-@need_buildbot
-def CMDlast_failure(parser, args):
- """Lists all slaves that failed on that step on their last build.
-
- Example: to find all slaves where their last build was a compile failure,
- run with --step compile"""
- parser.add_option(
- '-S', '--step', dest='steps', action='append', default=[],
- help='List all slaves that failed on that step on their last build')
- parser.add_option(
- '-b', '--builder', dest='builders', action='append', default=[],
- help='Builders to filter on')
- parser.add_option(
- '-s', '--slave', dest='slaves', action='append', default=[],
- help='Slaves to filter on')
- parser.add_option(
- '-n', '--no_cache', action='store_true',
- help='Don\'t load all builds at once')
- options, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- print_builders = not options.quiet and len(options.builders) != 1
- last_builder = None
- for build in last_failure(
- buildbot, builders=options.builders,
- slaves=options.slaves, steps=options.steps,
- no_cache=options.no_cache):
-
- if print_builders and last_builder != build.builder:
- print build.builder.name
- last_builder = build.builder
-
- if options.quiet:
- if options.slaves:
- print '%s: %s' % (build.builder.name, build.slave.name)
- else:
- print build.slave.name
- else:
- out = '%d on %s: blame:%s' % (
- build.number, build.slave.name, ', '.join(build.blame))
- if print_builders:
- out = ' ' + out
- print out
-
- if len(options.steps) != 1:
- for step in build.steps:
- if step.simplified_result is False:
- # Assume the first line is the text name anyway.
- summary = ', '.join(step.data['text'][1:])[:40]
- out = ' %s: "%s"' % (step.data['name'], summary)
- if print_builders:
- out = ' ' + out
- print out
- return 0
-
-
-@need_buildbot
-def CMDcurrent(parser, args):
- """Lists current jobs."""
- parser.add_option(
- '-b', '--builder', dest='builders', action='append', default=[],
- help='Builders to filter on')
- parser.add_option(
- '--blame', action='store_true', help='Only print the blame list')
- options, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- if not options.builders:
- options.builders = buildbot.builders.keys
-
- if options.blame:
- blame = set()
- for builder in options.builders:
- for build in buildbot.builders[builder].current_builds:
- if build.blame:
- for blamed in build.blame:
- blame.add(blamed)
- print '\n'.join(blame)
- return 0
-
- for builder in options.builders:
- builder = buildbot.builders[builder]
- if not options.quiet and builder.current_builds:
- print builder.name
- for build in builder.current_builds:
- if options.quiet:
- print build.slave.name
- else:
- out = '%4d: slave=%10s' % (build.number, build.slave.name)
- out += ' duration=%5d' % (build.duration or 0)
- if build.eta:
- out += ' eta=%5.0f' % build.eta
- else:
- out += ' '
- if build.blame:
- out += ' blame=' + ', '.join(build.blame)
- print out
-
- return 0
-
-
-@need_buildbot
-def CMDbuilds(parser, args):
- """Lists all builds.
-
- Example: to find all builds on a single slave, run with -b bar -s foo
- """
- parser.add_option(
- '-r', '--result', type='int', help='Build result to filter on')
- parser.add_option(
- '-b', '--builder', dest='builders', action='append', default=[],
- help='Builders to filter on')
- parser.add_option(
- '-s', '--slave', dest='slaves', action='append', default=[],
- help='Slaves to filter on')
- parser.add_option(
- '-n', '--no_cache', action='store_true',
- help='Don\'t load all builds at once')
- options, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- builders = options.builders or buildbot.builders.keys
- for builder in builders:
- builder = buildbot.builders[builder]
- for build in builder.builds:
- if not options.slaves or build.slave.name in options.slaves:
- if options.quiet:
- out = ''
- if options.builders:
- out += '%s/' % builder.name
- if len(options.slaves) != 1:
- out += '%s/' % build.slave.name
- out += '%d revision:%s result:%s blame:%s' % (
- build.number, build.revision, build.result, ','.join(build.blame))
- print out
- else:
- print build
- return 0
-
-
-@need_buildbot
-def CMDcount(parser, args):
- """Count the number of builds that occured during a specific period.
- """
- parser.add_option(
- '-o', '--over', type='int', help='Number of seconds to look for')
- parser.add_option(
- '-b', '--builder', dest='builders', action='append', default=[],
- help='Builders to filter on')
- options, args, buildbot = parser.parse_args(args)
- if args:
- parser.error('Unrecognized parameters: %s' % ' '.join(args))
- if not options.over:
- parser.error(
- 'Specify the number of seconds, e.g. --over 86400 for the last 24 '
- 'hours')
- builders = options.builders or buildbot.builders.keys
- counts = {}
- since = time.time() - options.over
- for builder in builders:
- builder = buildbot.builders[builder]
- counts[builder.name] = 0
- if not options.quiet:
- print builder.name
- for build in builder.builds.iterall():
- try:
- start_time = build.start_time
- except urllib2.HTTPError:
- # The build was probably trimmed.
- print >> sys.stderr, (
- 'Failed to fetch build %s/%d' % (builder.name, build.number))
- continue
- if start_time >= since:
- counts[builder.name] += 1
- else:
- break
- if not options.quiet:
- print '.. %d' % counts[builder.name]
-
- align_name = max(len(b) for b in counts)
- align_number = max(len(str(c)) for c in counts.itervalues())
- for builder in sorted(counts):
- print '%*s: %*d' % (align_name, builder, align_number, counts[builder])
- print 'Total: %d' % sum(counts.itervalues())
- return 0
-
-
-class OptionParser(optparse.OptionParser):
- def parse_args(self, args=None, values=None):
- """Adds common parsing."""
- options, args = optparse.OptionParser.parse_args(self, args, values)
- levels = (logging.WARNING, logging.INFO, logging.DEBUG)
- logging.basicConfig(level=levels[min(options.verbose, len(levels)-1)])
- return options, args
-
- def format_description(self, _):
- """Removes description formatting."""
- return self.description
-
-
-def gen_parser():
- """Returns an OptionParser instance with default options.
-
- It should be then processed with gen_usage() before being used.
- """
- parser = OptionParser(version=__version__)
- parser.add_option(
- '-v', '--verbose', action='count', default=0,
- help='Use multiple times to increase logging leve')
- parser.add_option(
- '-q', '--quiet', action='store_true',
- help='Reduces the output to be parsed by scripts, independent of -v')
- parser.add_option(
- '--throttle', type='float',
- help='Minimum delay to sleep between requests')
- return parser
-
-
-###############################################################################
-## Generic subcommand handling code
-
-
-def Command(name):
- return getattr(sys.modules[__name__], 'CMD' + name, None)
-
-
-@usage('<command>')
-def CMDhelp(parser, args):
- """Print list of commands or use 'help <command>'."""
- _, args = parser.parse_args(args)
- if len(args) == 1:
- return main(args + ['--help'])
- parser.print_help()
- return 0
-
-
-def gen_usage(parser, command):
- """Modifies an OptionParser object with the command's documentation.
-
- The documentation is taken from the function's docstring.
- """
- obj = Command(command)
- more = getattr(obj, 'func_usage_more')
- # OptParser.description prefer nicely non-formatted strings.
- parser.description = obj.__doc__ + '\n'
- parser.set_usage('usage: %%prog %s %s' % (command, more))
-
-
-def main(args=None):
- # Do it late so all commands are listed.
- # pylint: disable=E1101
- CMDhelp.__doc__ += '\n\nCommands are:\n' + '\n'.join(
- ' %-12s %s' % (fn[3:], Command(fn[3:]).__doc__.split('\n', 1)[0])
- for fn in dir(sys.modules[__name__]) if fn.startswith('CMD'))
-
- parser = gen_parser()
- if args is None:
- args = sys.argv[1:]
- if args:
- command = Command(args[0])
- if command:
- # "fix" the usage and the description now that we know the subcommand.
- gen_usage(parser, args[0])
- return command(parser, args[1:])
-
- # Not a known command. Default to help.
- gen_usage(parser, 'help')
- return CMDhelp(parser, args)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/codereview.settings b/codereview.settings
deleted file mode 100644
index 7339497..0000000
--- a/codereview.settings
+++ /dev/null
@@ -1,6 +0,0 @@
-# This file is used by gcl to get repository specific information.
-CODE_REVIEW_SERVER: codereview.chromium.org
-CC_LIST: chromium-reviews@chromium.org
-VIEW_VC: http://src.chromium.org/viewvc/chrome?view=rev&revision=
-GITCL_PREUPLOAD: http://src.chromium.org/viewvc/chrome/trunk/tools/depot_tools/git-cl-upload-hook?revision=HEAD
-GITCL_PREDCOMMIT: http://src.chromium.org/viewvc/chrome/trunk/tools/depot_tools/git-cl-upload-hook?revision=HEAD
diff --git a/commit_queue.py b/commit_queue.py
deleted file mode 100755
index fce6c33..0000000
--- a/commit_queue.py
+++ /dev/null
@@ -1,397 +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.
-"""Commit queue executable.
-
-Reuse Rietveld and the Chromium Try Server to process and automatically commit
-patches.
-"""
-
-import logging
-import logging.handlers
-import optparse
-import os
-import shutil
-import signal
-import socket
-import sys
-import tempfile
-import time
-
-import find_depot_tools # pylint: disable=W0611
-import checkout
-import fix_encoding
-import rietveld
-import subprocess2
-
-import async_push
-import cq_alerts
-import creds
-import errors
-import projects
-import sig_handler
-
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-
-
-class OnlyIssueRietveld(rietveld.Rietveld):
- """Returns a single issue for end-to-end in prod testing."""
- def __init__(self, url, email, password, extra_headers, only_issue):
- super(OnlyIssueRietveld, self).__init__(url, email, password, extra_headers)
- self._only_issue = only_issue
-
- def get_pending_issues(self):
- """If it's set to return a single issue, only return this one."""
- if self._only_issue:
- return [self._only_issue]
- return []
-
- def get_issue_properties(self, issue, messages):
- """Hacks the result to fake that the issue has the commit bit set."""
- data = super(OnlyIssueRietveld, self).get_issue_properties(issue, messages)
- if issue == self._only_issue:
- data['commit'] = True
- return data
-
- def set_flag(self, issue, patchset, flag, value):
- if issue == self._only_issue and flag == 'commit' and value == 'False':
- self._only_issue = None
- return super(OnlyIssueRietveld, self).set_flag(issue, patchset, flag, value)
-
-
-class FakeCheckout(object):
- def __init__(self):
- self.project_path = os.getcwd()
- self.project_name = os.path.basename(self.project_path)
-
- @staticmethod
- def prepare(_revision):
- logging.info('FakeCheckout is syncing')
- return unicode('FAKE')
-
- @staticmethod
- def apply_patch(*_args):
- logging.info('FakeCheckout is applying a patch')
-
- @staticmethod
- def commit(*_args):
- logging.info('FakeCheckout is committing patch')
- return 'FAKED'
-
- @staticmethod
- def get_settings(_key):
- return None
-
- @staticmethod
- def revisions(*_args):
- return None
-
-
-def AlertOnUncleanCheckout():
- """Sends an alert if the cq is running live with local edits."""
- diff = subprocess2.capture(['gclient', 'diff'], cwd=ROOT_DIR).strip()
- if diff:
- cq_alerts.SendAlert(
- 'CQ running with local diff.',
- ('Ruh-roh! Commit queue was started with an unclean checkout.\n\n'
- '$ gclient diff\n%s' % diff))
-
-
-def SetupLogging(options):
- """Configures the logging module."""
- logging.getLogger().setLevel(logging.DEBUG)
- if options.verbose:
- level = logging.DEBUG
- else:
- level = logging.INFO
- console_logging = logging.StreamHandler()
- console_logging.setFormatter(logging.Formatter(
- '%(asctime)s %(levelname)7s %(message)s'))
- console_logging.setLevel(level)
- logging.getLogger().addHandler(console_logging)
-
- log_directory = 'logs-' + options.project
- if not os.path.exists(log_directory):
- os.mkdir(log_directory)
-
- logging_rotating_file = logging.handlers.RotatingFileHandler(
- filename=os.path.join(log_directory, 'commit_queue.log'),
- maxBytes= 10*1024*1024,
- backupCount=50)
- logging_rotating_file.setLevel(logging.DEBUG)
- logging_rotating_file.setFormatter(logging.Formatter(
- '%(asctime)s %(levelname)-8s %(module)15s(%(lineno)4d): %(message)s'))
- logging.getLogger().addHandler(logging_rotating_file)
-
-
-class SignalInterrupt(Exception):
- """Exception that indicates being interrupted by a caught signal."""
-
- def __init__(self, signal_set=None, *args, **kwargs):
- super(SignalInterrupt, self).__init__(*args, **kwargs)
- self.signal_set = signal_set
-
-
-def SaveDatabaseCopyForDebugging(db_path):
- """Saves database file for debugging. Returns name of the saved file."""
- with tempfile.NamedTemporaryFile(
- dir=os.path.dirname(db_path),
- prefix='db.debug.',
- suffix='.json',
- delete=False) as tmp_file:
- with open(db_path) as db_file:
- shutil.copyfileobj(db_file, tmp_file)
- return tmp_file.name
-
-
-def main():
- # Set a default timeout for sockets. This is critical when talking to remote
- # services like AppEngine and buildbot.
- # TODO(phajdan.jr): This used to be 70s. Investigate lowering it again.
- socket.setdefaulttimeout(60.0 * 15)
-
- parser = optparse.OptionParser(
- description=sys.modules['__main__'].__doc__)
- project_choices = projects.supported_projects()
- parser.add_option('-v', '--verbose', action='store_true')
- parser.add_option(
- '--no-dry-run',
- action='store_false',
- dest='dry_run',
- default=True,
- help='Run for real instead of dry-run mode which is the default. '
- 'WARNING: while the CQ won\'t touch rietveld in dry-run mode, the '
- 'Try Server will. So it is recommended to use --only-issue')
- parser.add_option(
- '--only-issue',
- type='int',
- help='Limits to a single issue. Useful for live testing; WARNING: it '
- 'will fake that the issue has the CQ bit set, so only try with an '
- 'issue you don\'t mind about.')
- parser.add_option(
- '--fake',
- action='store_true',
- help='Run with a fake checkout to speed up testing')
- parser.add_option(
- '--no-try',
- action='store_true',
- help='Don\'t send try jobs.')
- parser.add_option(
- '-p',
- '--poll-interval',
- type='int',
- default=10,
- help='Minimum delay between each polling loop, default: %default')
- parser.add_option(
- '--query-only',
- action='store_true',
- help='Return internal state')
- parser.add_option(
- '--project',
- choices=project_choices,
- help='Project to run the commit queue against: %s' %
- ', '.join(project_choices))
- parser.add_option(
- '-u',
- '--user',
- default='commit-bot@chromium.org',
- help='User to use instead of %default')
- parser.add_option(
- '--rietveld',
- default='https://codereview.chromium.org',
- help='Rietveld server to use instead of %default')
- options, args = parser.parse_args()
- if args:
- parser.error('Unsupported args: %s' % args)
- if not options.project:
- parser.error('Need to pass a valid project to --project.\nOptions are: %s' %
- ', '.join(project_choices))
-
- SetupLogging(options)
- try:
- work_dir = os.path.join(ROOT_DIR, 'workdir')
- # Use our specific subversion config.
- checkout.SvnMixIn.svn_config = checkout.SvnConfig(
- os.path.join(ROOT_DIR, 'subversion_config'))
-
- url = options.rietveld
- gaia_creds = creds.Credentials(os.path.join(work_dir, '.gaia_pwd'))
- if options.dry_run:
- logging.debug('Dry run - skipping SCM check.')
- if options.only_issue:
- parser.error('--only-issue is not supported with dry run')
- else:
- print('Using read-only Rietveld')
- # Make sure rietveld is not modified. Pass empty email and
- # password to bypass authentication; this additionally
- # guarantees rietveld will not allow any changes.
- rietveld_obj = rietveld.ReadOnlyRietveld(url, email='', password='')
- else:
- AlertOnUncleanCheckout()
- print('WARNING: The Commit Queue is going to commit stuff')
- if options.only_issue:
- print('Using only issue %d' % options.only_issue)
- rietveld_obj = OnlyIssueRietveld(
- url,
- options.user,
- gaia_creds.get(options.user),
- None,
- options.only_issue)
- else:
- rietveld_obj = rietveld.Rietveld(
- url,
- options.user,
- gaia_creds.get(options.user),
- None)
-
- pc = projects.load_project(
- options.project,
- options.user,
- work_dir,
- rietveld_obj,
- options.no_try)
-
- if options.dry_run:
- if options.fake:
- # Disable the checkout.
- print 'Using no checkout'
- pc.context.checkout = FakeCheckout()
- else:
- print 'Using read-only checkout'
- pc.context.checkout = checkout.ReadOnlyCheckout(pc.context.checkout)
- # Save pushed events on disk.
- print 'Using read-only chromium-status interface'
- pc.context.status = async_push.AsyncPushStore()
-
- landmine_path = os.path.join(work_dir,
- pc.context.checkout.project_name + '.landmine')
- db_path = os.path.join(work_dir, pc.context.checkout.project_name + '.json')
- if os.path.isfile(db_path):
- if os.path.isfile(landmine_path):
- debugging_path = SaveDatabaseCopyForDebugging(db_path)
- os.remove(db_path)
- logging.warning(('Deleting database because previous shutdown '
- 'was unclean. The copy of the database is saved '
- 'as %s.') % debugging_path)
- else:
- try:
- pc.load(db_path)
- except ValueError as e:
- debugging_path = SaveDatabaseCopyForDebugging(db_path)
- os.remove(db_path)
- logging.warning(('Failed to parse database (%r), deleting it. '
- 'The copy of the database is saved as %s.') %
- (e, debugging_path))
- raise e
-
- # Create a file to indicate unclean shutdown.
- with open(landmine_path, 'w'):
- pass
-
- sig_handler.installHandlers(
- signal.SIGINT,
- signal.SIGHUP
- )
-
- # Sync every 5 minutes.
- SYNC_DELAY = 5*60
- try:
- if options.query_only:
- pc.look_for_new_pending_commit()
- pc.update_status()
- print(str(pc.queue))
- os.remove(landmine_path)
- return 0
-
- now = time.time()
- next_loop = now + options.poll_interval
- # First sync is on second loop.
- next_sync = now + options.poll_interval * 2
- while True:
- # In theory, we would gain in performance to parallelize these tasks. In
- # practice I'm not sure it matters.
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- pc.scan_results()
- if sig_handler.getTriggeredSignals():
- raise SignalInterrupt(signal_set=sig_handler.getTriggeredSignals())
- # Save the db at each loop. The db can easily be in the 1mb range so
- # it's slowing down the CQ a tad but it in the 100ms range even for that
- # size.
- pc.save(db_path)
-
- # More than a second to wait and due to sync.
- now = time.time()
- if (next_loop - now) >= 1 and (next_sync - now) <= 0:
- if sys.stdout.isatty():
- sys.stdout.write('Syncing while waiting \r')
- sys.stdout.flush()
- try:
- pc.context.checkout.prepare(None)
- except subprocess2.CalledProcessError as e:
- # Don't crash, most of the time it's the svn server that is dead.
- # How fun. Send a stack trace to annoy the maintainer.
- errors.send_stack(e)
- next_sync = time.time() + SYNC_DELAY
-
- now = time.time()
- next_loop = max(now, next_loop)
- while True:
- # Abort if any signals are set
- if sig_handler.getTriggeredSignals():
- raise SignalInterrupt(signal_set=sig_handler.getTriggeredSignals())
- delay = next_loop - now
- if delay <= 0:
- break
- if sys.stdout.isatty():
- sys.stdout.write('Sleeping for %1.1f seconds \r' % delay)
- sys.stdout.flush()
- time.sleep(min(delay, 0.1))
- now = time.time()
- if sys.stdout.isatty():
- sys.stdout.write('Running (please do not interrupt) \r')
- sys.stdout.flush()
- next_loop = time.time() + options.poll_interval
- except: # Catch all fatal exit conditions.
- logging.exception('CQ loop terminating')
- raise
- finally:
- logging.warning('Saving db...')
- pc.save(db_path)
- pc.close()
- logging.warning('db save successful.')
- except SignalInterrupt:
- # This is considered a clean shutdown: we only throw this exception
- # from selected places in the code where the database should be
- # in a known and consistent state.
- os.remove(landmine_path)
-
- print 'Bye bye (SignalInterrupt)'
- # 23 is an arbitrary value to signal loop.sh that it must stop looping.
- return 23
- except KeyboardInterrupt:
- # This is actually an unclean shutdown. Do not remove the landmine file.
- # One example of this is user hitting ctrl-c twice at an arbitrary point
- # inside the CQ loop. There are no guarantees about consistent state
- # of the database then.
-
- print 'Bye bye (KeyboardInterrupt - this is considered unclean shutdown)'
- # 23 is an arbitrary value to signal loop.sh that it must stop looping.
- return 23
- except errors.ConfigurationError as e:
- parser.error(str(e))
- return 1
-
- # CQ generally doesn't exit by itself, but if we ever get here, it looks
- # like a clean shutdown so remove the landmine file.
- # TODO(phajdan.jr): Do we ever get here?
- os.remove(landmine_path)
- return 0
-
-
-if __name__ == '__main__':
- fix_encoding.fix_encoding()
- sys.exit(main())
diff --git a/context.py b/context.py
deleted file mode 100644
index 60ae828..0000000
--- a/context.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2011 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.
-
-
-class Context(object):
- """Class to hold context about a the current code review and checkout."""
- def __init__(self, rietveld, checkout, status, server_hooks_missing=False):
- """
- Args:
- rietveld: Instance of rietveld.Rietveld.
- checkout: Instance of checkout.SvnCheckout
- status: Instance of async_push.AsyncPush.
- server_hooks_missing: True if the project's SVN repository does not have
- server-side hooks configured.
- """
- self.rietveld = rietveld
- self.checkout = checkout
- self.status = status
- self.server_hooks_missing = server_hooks_missing
diff --git a/cq_alerts.py b/cq_alerts.py
deleted file mode 100644
index bfaf647..0000000
--- a/cq_alerts.py
+++ /dev/null
@@ -1,57 +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.
-"""Send automated email alerts."""
-
-import logging
-import os
-import re
-import smtplib
-import socket
-import sys
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..', 'commit-queue-internal'))
-
-# These come from commit-queue-internal.
-try:
- import alert_settings # pylint: disable=F0401
-except ImportError:
- alert_settings = None
-
-
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-
-
-def SendAlert(subject, message):
- """Send an alert to troopers.
-
- Use the golo smtp relay to prevent accidental leaks from local checkouts.
- """
- hostname = socket.getfqdn()
- if (alert_settings and
- re.match(r'cq\d?\.golo\.chromium\.org$', hostname)):
- logging.warning('Sending alert, subject %s', subject)
- body = """\
-From: %s
-To: %s
-Subject: [cq alert] %s
-
-host: %s
-script dir: %s
-cwd: %s
-argv: %s
-
-
-%s""" % (alert_settings.FROM_ADDRESS, ', '.join(alert_settings.TO_ADDRESSES),
- subject, hostname, SCRIPT_DIR, os.getcwd(), sys.argv, message)
-
- server = smtplib.SMTP(alert_settings.SMTP_RELAY)
- server.sendmail(
- alert_settings.FROM_ADDRESS, alert_settings.TO_ADDRESSES, body)
- server.quit()
- else:
- logging.warning('\n '.join([
- 'Would send alert if running in production.',
- 'Subject: %s' % subject, ''] + message.splitlines()[:20]))
diff --git a/creds.py b/creds.py
deleted file mode 100644
index a26ffa8..0000000
--- a/creds.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2011 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.
-"""Loads credentials."""
-
-import os
-
-import errors
-
-
-class Credentials(object):
- """Keeps a dictionary of accounts."""
-
- def __init__(self, pwd_path):
- try:
- content = open(pwd_path, 'r').read()
- except IOError:
- raise errors.ConfigurationError(
- '%s is missing. Please read workdir/README.' %
- os.path.basename(pwd_path))
- lines = [l.strip() for l in content.splitlines()]
- lines = [l for l in lines if l and not l.startswith('#')]
- self.creds = {}
- for l in lines:
- items = l.split(':', 1)
- self.creds[items[0].strip()] = items[1].strip()
-
- def get(self, user):
- return self.creds.get(user, None)
diff --git a/errors.py b/errors.py
deleted file mode 100644
index ffe43d3..0000000
--- a/errors.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2011 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.
-
-"""Defines errors and stack trace utility funciton."""
-
-import breakpad
-import sys
-import traceback
-
-
-class ConfigurationError(Exception):
- """Configuration issues that prevents startup."""
-
-
-def send_stack(e):
- breakpad.SendStack(e,
- ''.join(traceback.format_tb(sys.exc_info()[2])),
- maxlen=2000)
diff --git a/find_depot_tools.py b/find_depot_tools.py
deleted file mode 100644
index 64cb3f4..0000000
--- a/find_depot_tools.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2010 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.
-"""Small utility function to find depot_tools and add it to the python path.
-
-Will throw an ImportError exception if depot_tools can't be found since it
-imports breakpad.
-"""
-
-import os
-import sys
-
-def add_depot_tools_to_path():
- """Search for depot_tools and add it to sys.path."""
- # First look if depot_tools is already in PYTHONPATH.
- for i in sys.path:
- if i.rstrip(os.sep).endswith('depot_tools'):
- return i
- # Then look if depot_tools is in PATH, common case.
- for i in os.environ['PATH'].split(os.pathsep):
- if i.rstrip(os.sep).endswith('depot_tools'):
- sys.path.insert(0, i.rstrip(os.sep))
- return i
- # Rare case, it's not even in PATH, look upward up to root.
- root_dir = os.path.dirname(os.path.abspath(__file__))
- while root_dir:
- if os.path.isfile(os.path.join(root_dir, 'depot_tools', 'breakpad.py')):
- i = os.path.join(root_dir, 'depot_tools')
- sys.path.insert(0, i)
- return i
- root_dir = os.path.dirname(root_dir)
- print >> sys.stderr, 'Failed to find depot_tools'
- return None
-
-add_depot_tools_to_path()
-
-# pylint: disable=W0611
-import breakpad
diff --git a/get_appengine.py b/get_appengine.py
deleted file mode 100755
index 339923e..0000000
--- a/get_appengine.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-
-import logging
-import optparse
-import os
-import re
-import shutil
-import sys
-import tempfile
-import urllib
-import zipfile
-
-BASE_DIR = os.path.dirname(os.path.abspath(__file__))
-
-
-def get_gae_sdk_version(gae_path):
- """Returns the installed GAE SDK version or None."""
- version_path = os.path.join(gae_path, 'VERSION')
- if os.path.isfile(version_path):
- values = dict(
- map(lambda x: x.strip(), l.split(':'))
- for l in open(version_path) if ':' in l)
- if 'release' in values:
- return values['release'].strip('"')
-
-
-def get_latest_gae_sdk_url(name):
- """Returns the url to get the latest GAE SDK and its version."""
- url = 'https://code.google.com/appengine/downloads.html'
- logging.debug('%s', url)
- content = urllib.urlopen(url).read()
- regexp = (
- r'(http\:\/\/googleappengine\.googlecode.com\/files\/'
- + re.escape(name) + r'[0-9\.]+?\.zip)')
- m = re.search(regexp, content)
- url = m.group(1)
- # Calculate the version from the url.
- new_version = re.search(re.escape(name) + r'(.+?).zip', url).group(1)
- # Upgrade to https
- return url.replace('http://', 'https://'), new_version
-
-
-def extract_zip(z, root_path):
- """Extracts files in a zipfile but keep the executable bits."""
- count = 0
- for f in z.infolist():
- perm = (f.external_attr >> 16L) & 0777
- filepath = os.path.join(root_path, f.filename)
- logging.debug('Extracting %s' % f.filename)
- if f.filename.endswith('/'):
- os.mkdir(filepath, perm)
- else:
- z.extract(f, root_path)
- os.chmod(filepath, perm)
- count += 1
- print('Extracted %d files' % count)
-
-
-def install_latest_gae_sdk(root_path, fetch_go, dry_run):
- if fetch_go:
- if sys.platform == 'darwin':
- name = 'go_appengine_sdk_darwin_amd64-'
- else:
- # Add other platforms as needed.
- name = 'go_appengine_sdk_linux_amd64-'
- else:
- name = 'google_appengine_'
-
- # The zip file already contains 'google_appengine' in its path so it's a bit
- # awkward to unzip otherwise. Hard code the path in for now.
- gae_path = os.path.join(root_path, 'google_appengine')
- print('Looking up path %s' % gae_path)
- version = get_gae_sdk_version(gae_path)
- if version:
- print('Found installed version %s' % version)
- else:
- print('Didn\'t find an SDK')
-
- url, new_version = get_latest_gae_sdk_url(name)
- print('New version is %s' % new_version)
- if version == new_version:
- return 0
-
- if os.path.isdir(gae_path):
- print('Removing previous version')
- if not dry_run:
- shutil.rmtree(gae_path)
-
- print('Fetching %s' % url)
- if not dry_run:
- with tempfile.NamedTemporaryFile() as f:
- urllib.urlretrieve(url, f.name)
- # Assuming we're extracting there. In fact, we have no idea.
- print('Extracting into %s' % gae_path)
- z = zipfile.ZipFile(f.name, 'r')
- try:
- extract_zip(z, root_path)
- finally:
- z.close()
- return 0
-
-
-def main():
- parser = optparse.OptionParser()
- parser.add_option('-v', '--verbose', action='store_true')
- parser.add_option(
- '-g', '--go', action='store_true', help='Defaults to python SDK')
- parser.add_option(
- '-d', '--dest', default=os.path.dirname(BASE_DIR), help='Output')
- parser.add_option('--dry-run', action='store_true', help='Do not download')
- options, args = parser.parse_args()
- if args:
- parser.error('Unsupported args: %s' % ' '.join(args))
- logging.basicConfig(level=logging.DEBUG if options.verbose else logging.ERROR)
- return install_latest_gae_sdk(
- os.path.abspath(options.dest), options.go, options.dry_run)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/heartbeats/cq-heartbeat.py b/heartbeats/cq-heartbeat.py
deleted file mode 100755
index bb855a7..0000000
--- a/heartbeats/cq-heartbeat.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/env python
-# Display health information on commit queue.
-
-import Queue
-import multiprocessing
-import os
-import re
-import subprocess
-import threading
-import time
-
-CQ_LOGS = ['/b/commit-queue/logs-chromium/commit_queue.log',
- '/b/commit-queue/logs-chromium_deps/commit_queue.log',
- '/b/commit-queue/logs-nacl/commit_queue.log',
- '/b/commit-queue/logs-skia/commit_queue.log',
- '/b/commit-queue/logs-tools/commit_queue.log',]
-
-
-def call(args, timeout=None, shell=False):
- """Returns (code, stdout, stderr)"""
- def _run_proc(args, output):
- proc = subprocess.Popen(
- args, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, shell=shell)
- output.put(proc)
- output.put((proc.wait(),) + proc.communicate())
-
- def _timer(output, timeout):
- time.sleep(timeout)
- output.put([618, '', 'Process timed out.'])
-
- output = Queue.Queue()
- thr = threading.Thread(target=_run_proc, args=[args, output])
- thr.daemon = True
- thr.start()
- # First item passed through output is always the Popen object.
- proc = output.get()
-
- # Wait for process to finish, or timeout.
- if timeout:
- timer_thread = threading.Thread(target=_timer, args=[output, timeout])
- timer_thread.daemon = True
- timer_thread.start()
-
- # Get the first output that comes out, which is either an error from _timer()
- # or the desired output from the process.
- code, out, err = output.get()
- if code == 618:
- # Kill the child process if it timed out.
- try:
- proc.terminate()
- time.sleep(0.5)
- if proc.poll() is None:
- proc.kill()
- except OSError:
- pass
-
- return code, out, err
-
-def test_num_proc_factory(proc_name):
- def test_num_proc():
- cmd = 'pgrep %s' % proc_name
- _, out, _ = call(cmd, 15, True)
- numproc = len(out.splitlines())
- if numproc < 300:
- return (0, 'OK - %d' % numproc)
- else:
- return (1, 'FAIL - %d. This CQ is probably overloaded.' % numproc)
- return test_num_proc
-
-def test_load():
- code , out, _ = call('uptime', 15, True)
- if code == 618:
- return (1, 'FAIL - Process timed out.')
-
- cpuload_m = re.search(r'(\d+\.\d+)\s*$', out)
- if cpuload_m:
- cpuload = float(cpuload_m.group(1))
- if cpuload < multiprocessing.cpu_count():
- return (0, 'OK - %2f' % cpuload)
- else:
- return (1, 'FAIL - %2f. This CQ is probably overloaded.' % cpuload)
- else:
- return (1, 'FAIL - Can\'t find cpu load: %s' % out)
-
-def test_log_mod_time_factory(name):
- def test_log_mod_time():
- if not os.path.exists(name):
- return (1, 'FAIL - %s does not exist' % name)
- time_since_modified = time.time() - os.path.getmtime(name)
- if time_since_modified > 120.0:
- return (1, 'FAIL - %d seconds ago.' % time_since_modified)
- return (0, 'OK - %d seconds ago.' % time_since_modified)
- return test_log_mod_time
-
-tests = [
- ('number of python_runtime procs',
- test_num_proc_factory('_python_runtime')),
- ('cpu load', test_load)]
-for log_name in CQ_LOGS:
- tests.append(('%s last modified' % log_name,
- test_log_mod_time_factory(log_name)))
-
-def main():
- return_code = 0
- for test_name, test in tests:
- code, msg = test()
- return_code += code
- print '%s: %s' % (test_name, msg)
- print 'status: %d' % return_code
-
-if __name__ == '__main__':
- main()
diff --git a/loop.sh b/loop.sh
deleted file mode 100755
index 868054d..0000000
--- a/loop.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-# 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.
-#
-# Runs a command in a loop. This is to have the commit queue automatically
-# restart. 23 is an arbitrary value to signal that the loop must stop.
-
-while true; do
- "$@"
- if [ $? -eq 23 ]; then
- break
- fi
-done
diff --git a/model.py b/model.py
deleted file mode 100644
index 6892381..0000000
--- a/model.py
+++ /dev/null
@@ -1,406 +0,0 @@
-# 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.
-
-"""Defines the PersistentMixIn utility class to easily convert classes to and
-from dict for serialization.
-
-This class is aimed at json-compatible serialization, so it supports the limited
-set of structures supported by json; strings, numbers as int or float, list and
-dictionaries.
-
-PersistentMixIn._persistent_members() returns a dict of each member with the
-tuple of expected types. Each member can be decoded in multiple types, for
-example, a subversion revision number could have (None, int, str), meaning that
-the revision could be None, when not known, an int or the int as a string
-representation. The tuple is listed in the prefered order of conversions.
-
-Composites types that cannot be represented exactly in json like tuple, set and
-frozenset are converted from and back to list automatically. Any class instance
-that has been serialized can be unserialized in the same class instance or into
-a bare dict.
-
-See tests/model_tests.py for examples.
-"""
-
-import json
-import logging
-import os
-
-# Set in the output dict to be able to know which class was serialized to help
-# deserialization.
-TYPE_FLAG = '__persistent_type__'
-
-# Marker to tell the deserializer that we don't know the expected type, used in
-# composite types.
-_UNKNOWN = object()
-
-
-def as_dict(value):
- """Recursively converts an object into a dictionary.
-
- Converts tuple,set,frozenset into list and recursively process each items.
- """
- if hasattr(value, 'as_dict') and callable(value.as_dict):
- return value.as_dict()
- elif isinstance(value, (list, tuple, set, frozenset)):
- return [as_dict(v) for v in value]
- elif isinstance(value, dict):
- return dict((as_dict(k), as_dict(v))
- for k, v in value.iteritems())
- elif isinstance(value, (bool, float, int, basestring)) or value is None:
- return value
- else:
- raise AttributeError('Can\'t type %s into a dictionary' % type(value))
-
-
-def _inner_from_dict(name, value, member_types):
- """Recursively regenerates an object.
-
- For each of the allowable types, try to convert it. If None is an allowable
- type, any data that can't be parsed will be parsed as None and will be
- silently discarded. Otherwise, an exception will be raise.
- """
- logging.debug('_inner_from_dict(%s, %r, %s)', name, value, member_types)
- result = None
- if member_types is _UNKNOWN:
- # Use guesswork a bit more and accept anything.
- if isinstance(value, dict):
- if TYPE_FLAG in value:
- result = PersistentMixIn.from_dict(value, _UNKNOWN)
- else:
- # Unserialize it as a raw dict.
- result = dict(
- (_inner_from_dict(None, k, _UNKNOWN),
- _inner_from_dict(None, v, _UNKNOWN))
- for k, v in value.iteritems())
- elif isinstance(value, list):
- # All of these are serialized to list.
- result = [_inner_from_dict(None, v, _UNKNOWN) for v in value]
- elif isinstance(value, (bool, float, int, unicode)):
- result = value
- else:
- raise TypeError('No idea how to convert %r' % value)
- else:
- for member_type in member_types:
- # Explicitly leave None out of this loop.
- if issubclass(member_type, PersistentMixIn):
- if isinstance(value, dict) and TYPE_FLAG in value:
- result = PersistentMixIn.from_dict(value, member_type)
- break
- elif member_type is dict:
- if isinstance(value, dict):
- result = dict(
- (_inner_from_dict(None, k, _UNKNOWN),
- _inner_from_dict(None, v, _UNKNOWN))
- for k, v in value.iteritems())
- break
- elif member_type in (list, tuple, set, frozenset):
- # All of these are serialized to list.
- if isinstance(value, list):
- result = member_type(
- _inner_from_dict(None, v, _UNKNOWN) for v in value)
- break
- elif member_type in (bool, float, int, str, unicode):
- if isinstance(value, member_type):
- result = member_type(value)
- break
- elif member_type is None.__class__ and value is None:
- result = None
- break
- else:
- logging.info(
- 'Ignored %s: didn\'t fit types %s; %s',
- name,
- ', '.join(i.__name__ for i in member_types),
- repr(value)[:200])
- _check_type_value(name, result, member_types)
- return result
-
-
-def to_yaml(obj):
- """Converts a PersistentMixIn into a yaml-inspired format.
-
- Warning: Not unit tested, use at your own risk!
- """
- def align(x):
- y = x.splitlines(True)
- if len(y) > 1:
- return ''.join(y[0:1] + [' ' + z for z in y[1:]])
- return x
- def align_value(x):
- if '\n' in x:
- return '\n ' + align(x)
- return x
-
- if hasattr(obj, 'as_dict') and callable(obj.as_dict):
- out = (to_yaml(obj.as_dict()),)
- elif isinstance(obj, (bool, float, int, unicode)) or obj is None:
- out = (align(str(obj)),)
- elif isinstance(obj, dict):
- if TYPE_FLAG in obj:
- out = ['%s:' % obj[TYPE_FLAG]]
- else:
- out = []
- for k, v in obj.iteritems():
- # Skips many members resolving to bool() == False
- if k.startswith('__') or v in (None, '', False, 0):
- continue
- r = align_value(to_yaml(v))
- if not r:
- continue
- out.append('- %s: %s' % (k, r))
- elif hasattr(obj, '__iter__') and callable(obj.__iter__):
- out = ['- %s' % align(to_yaml(x)) for x in obj]
- else:
- out = ('%s' % obj.__class__.__name__,)
- return '\n'.join(out)
-
-
-def _default_value(member_types):
- """Returns an instance of the first allowed type. Special case None."""
- if member_types[0] is None.__class__:
- return None
- else:
- return member_types[0]()
-
-
-def _check_type_value(name, value, member_types):
- """Raises a TypeError exception if value is not one of the allowed types in
- member_types.
- """
- if not isinstance(value, member_types):
- prefix = '%s e' % name if name else 'E'
- raise TypeError(
- '%sxpected type(s) %s; got %r' %
- (prefix, ', '.join(i.__name__ for i in member_types), value))
-
-
-
-class PersistentMixIn(object):
- """Class to be used as a base class to persistent data in a simplistic way.
-
- Persistent class member needs to be set to a tuple containing the instance
- member variable that needs to be saved or loaded. The first item will be
- default value, e.g.:
- foo = (None, str, dict)
- Will default initialize self.foo to None.
- """
- # Cache of all the subclasses of PersistentMixIn.
- __persistent_classes_cache = None
-
- _read_only = False
-
- def __init__(self, **kwargs):
- """Initializes with the default members."""
- super(PersistentMixIn, self).__init__()
- persistent_members = self._persistent_members()
- for member, member_types in persistent_members.iteritems():
- if member in kwargs:
- value = kwargs.pop(member)
- if isinstance(value, str):
- # Assume UTF-8 all the time. Note: This is explicitly when the object
- # is constructed in the code. This code path is never used when
- # deserializing the object.
- value = value.decode('utf-8')
- else:
- value = _default_value(member_types)
- _check_type_value(member, value, member_types)
- setattr(self, member, value)
- if kwargs:
- raise AttributeError('Received unexpected initializers: %s' % kwargs)
-
- def __setattr__(self, name, value):
- """Enforces immutability if cls._read_only is True."""
- if self._read_only:
- raise TypeError()
- return super(PersistentMixIn, self).__setattr__(name, value)
-
- @classmethod
- def _persistent_members(cls):
- """Returns the persistent items as a dict.
-
- Each entry value can be a tuple when the member can be assigned different
- types.
- """
- # Note that here, cls is the subclass, not PersistentMixIn.
- # TODO(maruel): Cache the results. It's tricky because setting
- # cls.__persistent_members_cache on a class will implicitly set it on its
- # subclass. So in a class hierarchy with A -> B -> PersistentMixIn, calling
- # B()._persistent_members() will incorrectly set the cache for A.
- persistent_members_cache = {}
- # Enumerate on the subclass, not on an instance.
- for item in dir(cls):
- if item.startswith('_'):
- continue
- item_value = getattr(cls, item)
- if isinstance(item_value, type):
- item_value = (item_value,)
- if not isinstance(item_value, tuple):
- continue
- if not all(i is None or i.__class__ == type for i in item_value):
- continue
- if any(i is str for i in item_value):
- raise TypeError(
- '%s is type \'str\' which is currently not supported' % item)
- item_value = tuple(
- f if f is not None else None.__class__ for f in item_value)
- persistent_members_cache[item] = item_value
- return persistent_members_cache
-
- @staticmethod
- def _get_subclass(typename):
- """Returns the PersistentMixIn subclass with the name |typename|."""
- subclass = None
- if PersistentMixIn.__persistent_classes_cache is not None:
- subclass = PersistentMixIn.__persistent_classes_cache.get(typename)
- if not subclass:
- # Get the subclasses recursively.
- PersistentMixIn.__persistent_classes_cache = {}
- def recurse(c):
- for s in c.__subclasses__():
- assert s.__name__ not in PersistentMixIn.__persistent_classes_cache
- PersistentMixIn.__persistent_classes_cache[s.__name__] = s
- recurse(s)
- recurse(PersistentMixIn)
-
- subclass = PersistentMixIn.__persistent_classes_cache.get(typename)
- if not subclass:
- raise KeyError('Couldn\'t find type %s' % typename)
- return subclass
-
- def as_dict(self):
- """Create a dictionary out of this object, i.e. Serialize the object."""
- out = {}
- for member, member_types in self._persistent_members().iteritems():
- value = getattr(self, member)
- _check_type_value(member, value, member_types)
- out[member] = as_dict(value)
- out[TYPE_FLAG] = self.__class__.__name__
- return out
-
- @staticmethod
- def from_dict(data, subclass=_UNKNOWN):
- """Returns an instance of a class inheriting from PersistentMixIn,
- initialized with 'data' dict, i.e. Deserialize the object.
- """
- logging.debug('from_dict(%r, %s)', data, subclass)
- if subclass is _UNKNOWN:
- subclass = PersistentMixIn._get_subclass(data[TYPE_FLAG])
- # This initializes the instance with the default values.
-
- # pylint: disable=W0212
- kwargs = {}
- for member, member_types in subclass._persistent_members().iteritems():
- if member in data:
- try:
- value = _inner_from_dict(member, data[member], member_types)
- except TypeError:
- # pylint: disable=E1103
- logging.error(
- 'Failed to instantiate %s because of member %s',
- subclass.__name__, member)
- raise
- else:
- value = _default_value(member_types)
- _check_type_value(member, value, member_types)
- kwargs[member] = value
- try:
- obj = subclass(**kwargs)
- except TypeError:
- # pylint: disable=E1103
- logging.error('Failed to instantiate %s: %r', subclass.__name__, kwargs)
- raise
- assert isinstance(obj, PersistentMixIn) and obj.__class__ != PersistentMixIn
- return obj
-
- def __str__(self):
- return to_yaml(self)
-
- def __eq__(self, _):
- raise TypeError()
-
- # pylint: disable=R0201
- def __ne__(self, _):
- raise TypeError()
-
-
-def is_equivalent(lhs, rhs):
- """Implements the equivalent of __eq__.
-
- The reason for not implementing __eq__ is to not encourage bad behavior by
- implicitly and recursively using __eq__() in a list().remove() call.
- """
- # pylint: disable=W0212
- if lhs._persistent_members() != rhs._persistent_members():
- return False
- for i in lhs._persistent_members():
- if getattr(lhs, i) != getattr(rhs, i):
- return False
- return True
-
-
-def immutable(func):
- """Member function decorators that convert 'self' to an immutable object.
-
- Member functions of the object can't be called unless they are immutable too.
- Properties can be looked up, this function assumes properties do not mutate
- the object.
-
- Note: a user can still call classmethod and do mutation on the class, or they
- can lookup a member object and mutate this one. Don't be silly.
- """
- class Immutable(object):
- def __init__(self, obj):
- object.__setattr__(self, '__ref', obj)
-
- def __getattribute__(self, name):
- ref = object.__getattribute__(self, '__ref')
- value = getattr(ref, name)
- if not callable(value):
- return value
- if getattr(value, 'is_immutable', None):
- # It is immutable too.
- return value
- if getattr(value, 'im_self', None) == None:
- # It is static.
- return value
- raise TypeError(
- 'Can\'t call mutable member function \'%s\' on an immutable '
- 'instance of %s' % (name, ref.__class__.__name__))
-
- def __setattr__(self, name, _value):
- ref = object.__getattribute__(self, '__ref')
- raise TypeError(
- 'Can\'t change attribute \'%s\' on an immutable instance of \'%s\'' %
- (name, ref.__class__.__name__))
-
- def __delattr__(self, name):
- ref = object.__getattribute__(self, '__ref')
- raise TypeError(
- 'Can\'t delete attribute \'%s\' on an immutable instance of \'%s\'' %
- (name, ref.__class__.__name__))
-
- def hook(self, *args, **kwargs):
- return func(Immutable(self), *args, **kwargs)
-
- hook.is_immutable = True
- return hook
-
-
-def load_from_json_file(filename):
- """Loads one object from a JSON file."""
- with open(filename, 'r') as f:
- return PersistentMixIn.from_dict(json.load(f))
-
-
-def save_to_json_file(filename, obj):
- """Save one object in a JSON file."""
- try:
- old = filename + '.old'
- if os.path.exists(filename):
- os.rename(filename, old)
- finally:
- with open(filename, 'wb') as f:
- json.dump(obj.as_dict(), f, sort_keys=True, indent=2)
- f.write('\n')
diff --git a/natsort.py b/natsort.py
deleted file mode 100755
index 701a27b..0000000
--- a/natsort.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-"""Intelligent natural sort implementation."""
-
-import re
-
-
-def natcmp(a, b):
- """Natural string comparison, case sensitive."""
- try_int = lambda s: int(s) if s.isdigit() else s
- def natsort_key(s):
- if not isinstance(s, basestring):
- # Since re.findall() generates a list out of a string, returns a list here
- # to balance the comparison done in cmp().
- return [s]
- return map(try_int, re.findall(r'(\d+|\D+)', s))
- return cmp(natsort_key(a), natsort_key(b))
-
-
-def try_lower(x):
- """Opportunistically lower() a string if it is a string."""
- return x.lower() if hasattr(x, 'lower') else x
-
-
-def naticasecmp(a, b):
- """Natural string comparison, ignores case."""
- return natcmp(try_lower(a), try_lower(b))
-
-
-def natsort(seq, cmp=natcmp, *args, **kwargs): # pylint: disable=W0622
- """In-place natural string sort.
- >>> a = ['3A2', '3a1']
- >>> natsort(a, key=try_lower)
- >>> a
- ['3a1', '3A2']
- >>> a = ['3a2', '3A1']
- >>> natsort(a, key=try_lower)
- >>> a
- ['3A1', '3a2']
- >>> a = ['3A2', '3a1']
- >>> natsort(a, cmp=naticasecmp)
- >>> a
- ['3a1', '3A2']
- >>> a = ['3a2', '3A1']
- >>> natsort(a, cmp=naticasecmp)
- >>> a
- ['3A1', '3a2']
- """
- seq.sort(cmp=cmp, *args, **kwargs)
-
-
-def natsorted(seq, cmp=natcmp, *args, **kwargs): # pylint: disable=W0622
- """Returns a copy of seq, sorted by natural string sort.
-
- >>> natsorted(i for i in [4, '3a', '2', 1])
- [1, '2', '3a', 4]
- >>> natsorted(['a4', 'a30'])
- ['a4', 'a30']
- >>> natsorted(['3A2', '3a1'], key=try_lower)
- ['3a1', '3A2']
- >>> natsorted(['3a2', '3A1'], key=try_lower)
- ['3A1', '3a2']
- >>> natsorted(['3A2', '3a1'], cmp=naticasecmp)
- ['3a1', '3A2']
- >>> natsorted(['3a2', '3A1'], cmp=naticasecmp)
- ['3A1', '3a2']
- >>> natsorted(['3A2', '3a1'])
- ['3A2', '3a1']
- >>> natsorted(['3a2', '3A1'])
- ['3A1', '3a2']
- """
- return sorted(seq, cmp=cmp, *args, **kwargs)
-
-
-if __name__ == '__main__':
- import doctest
- doctest.testmod()
diff --git a/pending_manager.py b/pending_manager.py
deleted file mode 100644
index 4ef64d6..0000000
--- a/pending_manager.py
+++ /dev/null
@@ -1,601 +0,0 @@
-# coding=utf8
-# 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.
-"""Commit queue manager class.
-
-Security implications:
-
-The following hypothesis are made:
-- Commit queue:
- - Impersonate the same svn credentials that the patchset owner.
- - Can't impersonate a non committer.
- - SVN will check the committer write access.
-"""
-
-import datetime
-import errno
-import logging
-import os
-import socket
-import ssl
-import time
-import traceback
-import urllib2
-
-import find_depot_tools # pylint: disable=W0611
-import checkout
-import git_cl
-import patch
-import subprocess2
-
-import errors
-import model
-from verification import base
-
-
-class PendingCommit(base.Verified):
- """Represents a pending commit that is being processed."""
- # Important since they tell if we need to revalidate and send try jobs
- # again or not if any of these value changes.
- issue = int
- patchset = int
- description = unicode
- files = list
- # Only a cache, these values can be regenerated.
- owner = unicode
- reviewers = list
- base_url = unicode
- messages = list
- relpath = unicode
- sort_key = unicode
- # Only used after a patch was committed. Keeping here for try job retries.
- revision = (None, int, unicode)
-
- def __init__(self, **kwargs):
- super(PendingCommit, self).__init__(**kwargs)
- for message in self.messages:
- # Save storage, no verifier really need 'text', just 'approval'.
- if 'text' in message:
- del message['text']
-
- def pending_name(self):
- """The name that should be used for try jobs.
-
- It makes it possible to regenerate the try_jobs array if ever needed."""
- return '%d-%d' % (self.issue, self.patchset)
-
- def prepare_for_patch(self, context_obj):
- self.revision = context_obj.checkout.prepare(self.revision)
- # Verify revision consistency.
- if not self.revision:
- raise base.DiscardPending(
- self, 'Internal error: failed to checkout. Please try again.')
-
- def apply_patch(self, context_obj, prepare):
- """Applies the pending patch to the checkout and throws if it fails."""
- try:
- if prepare:
- self.prepare_for_patch(context_obj)
- patches = context_obj.rietveld.get_patch(self.issue, self.patchset)
- if not patches:
- raise base.DiscardPending(
- self, 'No diff was found for this patchset.')
- if self.relpath:
- patches.set_relpath(self.relpath)
- self.files = [p.filename for p in patches]
- if not self.files:
- raise base.DiscardPending(
- self, 'No file was found in this patchset.')
- context_obj.checkout.apply_patch(patches)
- except (checkout.PatchApplicationFailed, patch.UnsupportedPatchFormat) as e:
- raise base.DiscardPending(self, str(e))
- except subprocess2.CalledProcessError as e:
- out = 'Failed to apply the patch.'
- if e.stdout:
- out += '\n%s' % e.stdout
- raise base.DiscardPending(self, out)
- except (ssl.SSLError, urllib2.HTTPError, urllib2.URLError) as e:
- raise base.DiscardPending(
- self,
- ('Failed to request the patch to try. Please note that binary files '
- 'are still unsupported at the moment, this is being worked on.\n\n'
- 'Thanks for your patience.\n\n%s') % e)
-
-
-class PendingQueue(model.PersistentMixIn):
- """Represents the queue of pending commits being processed.
-
- Each entry is keyed by the issue number as a string to be json-compatible.
- There can only be one pending commit per issue and they are fine to be
- processed out of order.
- """
- pending_commits = dict
-
- def add(self, item):
- self.pending_commits[str(item.issue)] = item
-
- def get(self, key):
- return self.pending_commits[str(key)]
-
- def iterate(self):
- """Returns the items sorted by .sort_key to ease testability."""
- return sorted(self.pending_commits.itervalues(), key=lambda x: x.sort_key)
-
- def remove(self, key):
- self.pending_commits.pop(str(key), None)
-
-
-class PendingManager(object):
- """Fetch new issues from rietveld, pass the issues through all of verifiers
- and then commit the patches with checkout.
- """
- FAILED_NO_MESSAGE = (
- 'Commit queue patch verification failed without an error message.\n'
- 'Something went wrong, probably a crash, a hickup or simply\n'
- 'the monkeys went out for dinner.\n'
- 'Please email commit-bot@chromium.org with the CL url.')
- INTERNAL_EXCEPTION = (
- 'Commit queue had an internal error.\n'
- 'Something went really wrong, probably a crash, a hickup or\n'
- 'simply the monkeys went out for dinner.\n'
- 'Please email commit-bot@chromium.org with the CL url.')
- DESCRIPTION_UPDATED = (
- 'Commit queue rejected this change because the description was changed\n'
- 'between the time the change entered the commit queue and the time it\n'
- 'was ready to commit. You can safely check the commit box again.')
- TRYING_PATCH = 'CQ is trying da patch. Follow status at\n'
- # Maximum number of commits done in a burst.
- MAX_COMMIT_BURST = 4
- # Delay (secs) between commit bursts.
- COMMIT_BURST_DELAY = 8*60
-
- def __init__(self, context_obj, pre_patch_verifiers, verifiers,
- project_name=''):
- """
- Args:
- pre_patch_verifiers: Verifiers objects that are run before applying the
- patch.
- verifiers: Verifiers object run after applying the patch.
- """
- if not(len(pre_patch_verifiers) or len(verifiers)):
- raise ValueError('at least one verifier should be defined (in project %s)'
- % project_name)
-
- self.context = context_obj
- self.pre_patch_verifiers = pre_patch_verifiers or []
- self.verifiers = verifiers or []
- self.all_verifiers = pre_patch_verifiers + verifiers
- self.queue = PendingQueue()
- # Keep the timestamps of the last few commits so that we can control the
- # pace (burstiness) of commits.
- self.recent_commit_timestamps = []
- # Assert names are unique.
- names = [x.name for x in pre_patch_verifiers + verifiers]
- assert len(names) == len(set(names))
- for verifier in self.pre_patch_verifiers:
- assert not isinstance(verifier, base.VerifierCheckout)
-
- def _get_user(self):
- """Get the CQ's rietveld user name.
-
- We need it to look for messages posted by the CQ, to figure out
- when the commit box was checked. TODO(sergeyberezin): when
- Rietveld can tell this info natively, this function will be
- obsolete.
- """
- # Rietveld object or its email may be missing in some unittests.
- if self.context.rietveld and self.context.rietveld.email:
- return self.context.rietveld.email
- else:
- return 'commit-bot@chromium.org'
-
- def _set_sort_key(self, issue_data):
- """Compute the sorting key. Must add .sort_key to issue_data.
-
- Previously we used issue id, but a better key is the last
- timestamp when Commit box was checked.
- """
- for m in issue_data['messages']:
- if (m['sender'] == self._get_user() and
- 'CQ is trying da patch.' in m['text']):
- issue_data['sort_key'] = m['date']
- if 'sort_key' not in issue_data:
- # Set a default value: the current time.
- issue_data['sort_key'] = str(datetime.datetime.utcnow())
-
- def look_for_new_pending_commit(self):
- """Looks for new reviews on self.context.rietveld with c+ set.
-
- Calls _new_pending_commit() on all new review found.
- """
- try:
- new_issues = self.context.rietveld.get_pending_issues()
- except urllib2.URLError as e:
- if 'timed out' in e.reason:
- # Handle timeouts gracefully. Log them and pretend there are no
- # pending issues. We'll retry on the next iteration.
- logging.warn('request to fetch pending issues timed out: %s' % e)
- return
-
- raise
-
- # If there is an issue in processed_issues that is not in new_issues,
- # discard it.
- for pending in self.queue.iterate():
- # Note that pending.issue is a int but self.queue.pending_commits keys
- # are str due to json support.
- if pending.issue not in new_issues:
- logging.info('Flushing issue %d' % pending.issue)
- self.context.status.send(
- pending,
- { 'verification': 'abort',
- 'payload': {
- 'output': 'CQ bit was unchecked on CL. Ignoring.' }})
- pending.get_state = lambda: base.IGNORED
- self._discard_pending(pending, None)
-
- # Find new issues.
- for issue_id in new_issues:
- if str(issue_id) not in self.queue.pending_commits:
- try:
- issue_data = self.context.rietveld.get_issue_properties(
- issue_id, True)
- self._set_sort_key(issue_data)
- except urllib2.HTTPError as e:
- if e.code in (500, 502, 503):
- # Temporary AppEngine hiccup. Just log it and continue.
- logging.warning('%s while accessing %s. Ignoring error.' % (
- str(e), e.url))
- continue
- raise
- except urllib2.URLError as e:
- # Temporary AppEngine hiccup. Just log it and continue.
- if 'timed out' in e.reason:
- logging.warning(
- '%s while accessing rietveld issue %s. Ignoring error.' % (
- str(e), str(issue_id)))
- continue
- raise
- except socket.error as e:
- # Temporary AppEngine hiccup. Just log it and continue.
- if e.errno == errno.ECONNRESET:
- logging.warning(
- '%s while accessing rietveld issue %s. Ignoring error.' % (
- str(e), str(issue_id)))
- continue
- raise
- except IOError as e:
- # Temporary AppEngine hiccup. Just log it and continue.
- if e.errno == 'socket error':
- logging.warning(
- '%s while accessing rietveld issue %s. Ignoring error.' % (
- str(e), str(issue_id)))
- continue
- raise
- # This assumption needs to hold.
- assert issue_id == issue_data['issue']
- if issue_data['patchsets'] and issue_data['commit']:
- logging.info('Found new issue %d' % issue_id)
- self.queue.add(
- PendingCommit(
- issue=issue_id,
- owner=issue_data['owner_email'],
- reviewers=issue_data['reviewers'],
- patchset=issue_data['patchsets'][-1],
- base_url=issue_data['base_url'],
- description=issue_data['description'].replace('\r', ''),
- messages=issue_data['messages'],
- sort_key=issue_data['sort_key']))
-
- def process_new_pending_commit(self):
- """Starts verification on newly found pending commits."""
- expected = set(i.name for i in self.all_verifiers)
- for pending in self.queue.iterate():
- try:
- # Take in account the case where a verifier was removed.
- done = set(pending.verifications.keys())
- missing = expected - done
- if (not missing or pending.get_state() != base.PROCESSING):
- continue
- logging.info(
- 'Processing issue %s @ %s (%s, %d)' % (
- pending.issue, pending.sort_key, missing, pending.get_state()))
- self._verify_pending(pending)
- except base.DiscardPending as e:
- self._discard_pending(e.pending, e.status)
-
- def update_status(self):
- """Updates the status for each pending commit verifier."""
- why_nots = dict((p.issue, p.why_not()) for p in self.queue.iterate())
-
- for verifier in self.all_verifiers:
- try:
- verifier.update_status(self.queue.iterate())
- except base.DiscardPending as e:
- # It's not efficient since it takes a full loop for each pending
- # commit to discard.
- self._discard_pending(e.pending, e.status)
-
- for pending in self.queue.iterate():
- why_not = pending.why_not()
- if why_nots[pending.issue] != why_not:
- self.context.status.send(
- pending,
- {'verification': 'why not',
- 'payload': {'message': why_not}})
-
-
- def scan_results(self):
- """Scans pending commits that can be committed or discarded."""
- for pending in self.queue.iterate():
- state = pending.get_state()
- if state == base.FAILED:
- self._discard_pending(
- pending, pending.error_message() or self.FAILED_NO_MESSAGE)
- elif state == base.SUCCEEDED:
- if self._throttle(pending):
- continue
- try:
- # Runs checks. It's be nice to run the test before the postpone,
- # especially if the tree is closed for a long moment but at the same
- # time it would keep fetching the rietveld status constantly.
- self._last_minute_checks(pending)
- self.context.status.send(
- pending,
- {'verification': 'why not',
- 'payload': {'message': ''}})
-
- self._commit_patch(pending)
- except base.DiscardPending as e:
- self._discard_pending(e.pending, e.status)
- except Exception as e:
- self._discard_pending(pending, self.INTERNAL_EXCEPTION)
- raise
- else:
- # When state is IGNORED, we need to keep this issue so it's not fetched
- # another time but we can't discard it since we don't want to remove the
- # commit bit for another project hosted on the same code review
- # instance.
- assert state in (base.PROCESSING, base.IGNORED)
-
- def _verify_pending(self, pending):
- """Initiates all the verifiers on a pending change."""
- # Do not apply the patch if not necessary. It will be applied at commit
- # time anyway so if the patch doesn't apply, it'll be catch later.
- if not self._pending_run_verifiers(pending, self.pre_patch_verifiers):
- return
-
- if self.verifiers:
- pending.prepare_for_patch(self.context)
-
- # This CL is real business, alert the user that we're going to try his
- # patch. Note that this is done *after* syncing but *before* applying the
- # patch.
- self.context.status.send(
- pending,
- { 'verification': 'initial',
- 'payload': {'revision': pending.revision}})
- self.context.rietveld.add_comment(
- pending.issue,
- self.TRYING_PATCH + '%s/%s/%d/%d\n' % (
- self.context.status.url, pending.owner,
- pending.issue, pending.patchset))
-
- if self.verifiers:
- pending.apply_patch(self.context, False)
- previous_cwd = os.getcwd()
- try:
- os.chdir(self.context.checkout.project_path)
- self._pending_run_verifiers(pending, self.verifiers)
- finally:
- os.chdir(previous_cwd)
-
- # Send the initial 'why not' message.
- if pending.why_not():
- self.context.status.send(
- pending,
- {'verification': 'why not',
- 'payload': {'message': pending.why_not()}})
-
- @classmethod
- def _pending_run_verifiers(cls, pending, verifiers):
- """Runs verifiers on a pending change.
-
- Returns True if all Verifiers were run.
- """
- for verifier in verifiers:
- assert verifier.name not in pending.verifications
- verifier.verify(pending)
- assert verifier.name in pending.verifications
- if pending.get_state() == base.IGNORED:
- assert pending.verifications[verifier.name].get_state() == base.IGNORED
- # Remove all the other verifiers since we need to keep it in the
- # 'datastore' to not retry this issue constantly.
- for key in pending.verifications.keys():
- if key != verifier.name:
- del pending.verifications[key]
- return False
- if pending.get_state() == base.FAILED:
- # Throw if it didn't pass, so the error message is not lost.
- raise base.DiscardPending(
- pending, pending.error_message() or cls.FAILED_NO_MESSAGE)
- return True
-
- def _last_minute_checks(self, pending):
- """Does last minute checks on Rietvld before committing a pending patch."""
- pending_data = self.context.rietveld.get_issue_properties(
- pending.issue, True)
- if pending_data['commit'] != True:
- raise base.DiscardPending(pending, None)
- if pending_data['closed'] != False:
- raise base.DiscardPending(pending, None)
- if pending.description != pending_data['description'].replace('\r', ''):
- raise base.DiscardPending(pending, self.DESCRIPTION_UPDATED)
- commit_user = set([self.context.rietveld.email])
- expected = set(pending.reviewers) - commit_user
- actual = set(pending_data['reviewers']) - commit_user
- # Try to be nice, if there was a drive-by review and the new reviewer left
- # a lgtm, don't abort.
- def is_approver(r):
- return any(
- m.get('approval') for m in pending_data['messages']
- if m['sender'] == r)
- drivers_by = [r for r in (actual - expected) if not is_approver(r)]
- if drivers_by:
- # That annoying driver-by.
- raise base.DiscardPending(
- pending,
- 'List of reviewers changed. %s did a drive-by without LGTM\'ing!' %
- ','.join(drivers_by))
- if pending.patchset != pending_data['patchsets'][-1]:
- raise base.DiscardPending(pending,
- 'Commit queue failed due to new patchset.')
-
- def _discard_pending(self, pending, message):
- """Discards a pending commit. Attach an optional message to the review."""
- logging.debug('_discard_pending(%s, %s)', pending.issue, message)
- try:
- try:
- if pending.get_state() != base.IGNORED:
- self.context.rietveld.set_flag(
- pending.issue, pending.patchset, 'commit', False)
- except urllib2.HTTPError as e:
- logging.error(
- 'Failed to set the flag to False for %s with message %s' % (
- pending.pending_name(), message))
- traceback.print_stack()
- logging.error(str(e))
- errors.send_stack(e)
- if message:
- try:
- self.context.rietveld.add_comment(pending.issue, message)
- except urllib2.HTTPError as e:
- logging.error(
- 'Failed to add comment for %s with message %s' % (
- pending.pending_name(), message))
- traceback.print_stack()
- errors.send_stack(e)
- self.context.status.send(
- pending,
- { 'verification': 'abort',
- 'payload': {
- 'output': message }})
- finally:
- # Most importantly, remove the PendingCommit from the queue.
- self.queue.remove(pending.issue)
-
- def _commit_patch(self, pending):
- """Commits the pending patch to the repository.
-
- Do the checkout and applies the patch.
- """
- try:
- try:
- # Make sure to apply on HEAD.
- pending.revision = None
- pending.apply_patch(self.context, True)
- # Commit it.
- commit_desc = git_cl.ChangeDescription(pending.description)
- if (self.context.server_hooks_missing and
- self.context.rietveld.email != pending.owner):
- commit_desc.update_reviewers(pending.reviewers)
- commit_desc.append_footer('Author: ' + pending.owner)
- commit_desc.append_footer('Review URL: %s/%s' % (
- self.context.rietveld.url,
- pending.issue))
- pending.revision = self.context.checkout.commit(
- commit_desc.description, pending.owner)
- if not pending.revision:
- raise base.DiscardPending(pending, 'Failed to commit patch.')
-
- # Note that the commit succeeded for commit throttling.
- self.recent_commit_timestamps.append(time.time())
- self.recent_commit_timestamps = (
- self.recent_commit_timestamps[-(self.MAX_COMMIT_BURST + 1):])
-
- viewvc_url = self.context.checkout.get_settings('VIEW_VC')
- issue_desc = git_cl.ChangeDescription(pending.description)
- msg = 'Committed: %s' % pending.revision
- if viewvc_url:
- viewvc_url = '%s%s' % (viewvc_url.rstrip('/'), pending.revision)
- msg = 'Committed: %s' % viewvc_url
- issue_desc.append_footer(msg)
-
- # Update the CQ dashboard.
- self.context.status.send(
- pending,
- { 'verification': 'commit',
- 'payload': {
- 'revision': pending.revision,
- 'output': msg,
- 'url': viewvc_url}})
-
- # Closes the issue on Rietveld.
- # TODO(csharp): Retry if exceptions are encountered.
- try:
- self.context.rietveld.close_issue(pending.issue)
- self.context.rietveld.update_description(
- pending.issue, issue_desc.description)
- self.context.rietveld.add_comment(
- pending.issue, 'Change committed as %s' % pending.revision)
- except (urllib2.HTTPError, urllib2.URLError) as e:
- # Ignore AppEngine flakiness.
- logging.warning('Unable to fully close the issue')
- # And finally remove the issue. If the close_issue() call above failed,
- # it is possible the dashboard will be confused but it is harmless.
- try:
- self.queue.get(pending.issue)
- except KeyError:
- logging.error('Internal inconsistency for %d', pending.issue)
- self.queue.remove(pending.issue)
- except (
- checkout.PatchApplicationFailed, patch.UnsupportedPatchFormat) as e:
- raise base.DiscardPending(pending, str(e))
- except subprocess2.CalledProcessError as e:
- stdout = getattr(e, 'stdout', None)
- out = 'Failed to apply the patch.'
- if stdout:
- out += '\n%s' % stdout
- raise base.DiscardPending(pending, out)
- except base.DiscardPending as e:
- self._discard_pending(e.pending, e.status)
-
- def _throttle(self, pending):
- """Returns True if a commit should be delayed."""
- if pending.postpone():
- self.context.status.send(
- pending,
- {'verification': 'why not',
- 'payload': {
- 'message': pending.why_not()}})
- return True
- if not self.recent_commit_timestamps:
- return False
- cutoff = time.time() - self.COMMIT_BURST_DELAY
- bursted = len([True for i in self.recent_commit_timestamps if i > cutoff])
-
- if bursted >= self.MAX_COMMIT_BURST:
- self.context.status.send(
- pending,
- {'verification': 'why not',
- 'payload': {
- 'message': ('Patch is ready to commit, but the CQ is delaying '
- 'it because CQ has already submitted %d patches in '
- 'the last %d seconds' %
- (self.MAX_COMMIT_BURST, self.COMMIT_BURST_DELAY))}})
- return True
-
- return False
-
- def load(self, filename):
- """Loads the commit queue state from a JSON file."""
- self.queue = model.load_from_json_file(filename)
-
- def save(self, filename):
- """Save the commit queue state in a simple JSON file."""
- model.save_to_json_file(filename, self.queue)
-
- def close(self):
- """Close all the active pending manager items."""
- self.context.status.close()
diff --git a/post_processors/chromium_copyright.py b/post_processors/chromium_copyright.py
deleted file mode 100644
index 28c38f6..0000000
--- a/post_processors/chromium_copyright.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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.
-
-import datetime
-import os
-import re
-
-import errors
-
-
-def process(checkout, patch):
- """Enforces current year in Chromium copyright."""
- pattern = (
- r'^(.*)Copyright (?:\(c\) )?\d{4}(|-\d{4}) The Chromium Authors. '
- r'All rights reserved.$')
- replacement = (
- r'\1Copyright %s The Chromium Authors. All rights reserved.' %
- datetime.date.today().year)
-
- if not patch.is_new or patch.is_binary:
- return
- filepath = os.path.join(checkout.project_path, patch.filename)
- try:
- with open(filepath, 'rb') as f:
- lines = f.read().splitlines(True)
- except IOError, e:
- errors.send_stack(e)
- lines = None
- if not lines:
- return
- modified = False
- for i in xrange(min(5, len(lines))):
- old_line = lines[i]
- lines[i] = re.sub(pattern, replacement, lines[i])
- if old_line != lines[i]:
- modified = True
- break
- if modified:
- with open(filepath, 'wb') as f:
- f.write(''.join(lines))
diff --git a/projects.py b/projects.py
deleted file mode 100644
index 4a5b66d..0000000
--- a/projects.py
+++ /dev/null
@@ -1,778 +0,0 @@
-# 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.
-"""Define the supported projects."""
-
-import json
-import logging
-import os
-import re
-import sys
-import urllib2
-
-import find_depot_tools # pylint: disable=W0611
-import checkout
-
-import async_push
-import context
-import errors
-import pending_manager
-from post_processors import chromium_copyright
-from verification import presubmit_check
-from verification import project_base
-from verification import reviewer_lgtm
-from verification import tree_status
-from verification import trigger_experimental_try_job
-from verification import try_job_steps
-from verification import try_job_on_rietveld
-from verification import try_server
-
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-INTERNAL_DIR = os.path.abspath(
- os.path.join(ROOT_DIR, os.pardir, 'commit-queue-internal'))
-
-# These come from commit-queue in the internal repo.
-if os.path.isdir(INTERNAL_DIR):
- sys.path.insert(0, INTERNAL_DIR)
- import chromium_committers # pylint: disable=F0401
- import gyp_committers # pylint: disable=F0401
- import nacl_committers # pylint: disable=F0401
- import skia_committers # pylint: disable=F0401
-else:
- print >> sys.stderr, (
- 'Failed to find commit-queue-internal; will fail to start!')
- chromium_committers = None
- gyp_committers = None
- nacl_committers = None
- skia_committers = None
-
-
-# It's tricky here because 'chrome' is remapped to 'svn' on src.chromium.org but
-# the other repositories keep their repository name. So don't list it here.
-SVN_HOST_ALIASES = [
- 'svn://svn.chromium.org',
- 'svn://chrome-svn',
- 'svn://chrome-svn.corp',
- 'svn://chrome-svn.corp.google.com'
-]
-
-CHROME_SVN_BASES = [item + '/chrome' for item in SVN_HOST_ALIASES] + [
- 'http://src.chromium.org/svn',
- 'https://src.chromium.org/svn',
- 'http://src.chromium.org/chrome',
- 'https://src.chromium.org/chrome',
-]
-
-BLINK_SVN_BASES = [item + '/blink' for item in SVN_HOST_ALIASES] + [
- 'http://src.chromium.org/blink',
- 'https://src.chromium.org/blink',
-]
-
-# Steps that are never considered to determine the try job success.
-IGNORED_STEPS = (
- 'svnkill', 'update_scripts', 'taskkill', 'cleanup_temp', 'process_dumps')
-
-# To be used in a regexp to match the branch part of an git url.
-BRANCH_MATCH = r'\@[a-zA-Z0-9\-_\.]+'
-
-
-def _read_lines(filepath, what):
- try:
- return open(filepath).readlines()
- except IOError:
- raise errors.ConfigurationError('Put the %s in %s' % (what, filepath))
-
-
-def _get_chromium_committers():
- """Gets the list of all allowed committers."""
- if not chromium_committers:
- # Fake values.
- entries = ['georges']
- else:
- entries = chromium_committers.get_list()
- logging.info('Found %d committers' % len(entries))
- return ['^%s$' % re.escape(i) for i in entries]
-
-
-def _get_skia_committers():
- """Gets the list of all allowed committers."""
- if not skia_committers:
- # Fake values.
- entries = ['georges']
- else:
- entries = skia_committers.get_list()
- logging.info('Found %d committers' % len(entries))
- return ['^%s$' % re.escape(i) for i in entries]
-
-
-def _get_nacl_committers():
- """Gets the list of all allowed committers."""
- if not nacl_committers:
- # Fake values.
- entries = ['georges']
- else:
- entries = nacl_committers.get_list()
- logging.info('Found %d committers' % len(entries))
- return ['^%s$' % re.escape(i) for i in entries]
-
-
-def _get_gyp_committers():
- """Gets the list of all allowed committers."""
- if not gyp_committers:
- # Fake values.
- entries = ['georges']
- else:
- entries = gyp_committers.get_list()
- logging.info('Found %d committers' % len(entries))
- return ['^%s$' % re.escape(i) for i in entries]
-
-
-def _chromium_lkgr():
- try:
- return int(
- urllib2.urlopen('https://chromium-status.appspot.com/lkgr').read())
- except (ValueError, IOError):
- return None
-
-
-def _nacl_lkgr():
- try:
- return int(
- urllib2.urlopen('https://nativeclient-status.appspot.com/lkgr').read())
- except (ValueError, IOError):
- return None
-
-
-def _chromium_status_pwd(root_dir):
- filepath = os.path.join(root_dir, '.chromium_status_pwd')
- return _read_lines(filepath, 'chromium-status password')[0].strip()
-
-
-def _gen_blink(user, root_dir, rietveld_obj, no_try):
- """Generates a PendingManager commit queue for blink/trunk."""
- local_checkout = checkout.SvnCheckout(
- root_dir,
- 'blink',
- user,
- None,
- 'svn://svn.chromium.org/blink/trunk',
- [])
- context_obj = context.Context(
- rietveld_obj,
- local_checkout,
- async_push.AsyncPush(
- 'https://chromium-status.appspot.com/cq',
- _chromium_status_pwd(root_dir)))
-
- project_bases = [
- '^%s/trunk(|/.*)$' % re.escape(base) for base in BLINK_SVN_BASES]
- project_bases.append(
- r'^https?\:\/\/chromium.googlesource.com\/chromium\/blink(?:\.git)?%s$' %
- BRANCH_MATCH)
- verifiers_no_patch = [
- project_base.ProjectBaseUrlVerifier(project_bases),
- reviewer_lgtm.ReviewerLgtmVerifier(
- _get_chromium_committers(),
- [re.escape(user)]),
- ]
- verifiers = []
- prereq_builder = 'blink_presubmit'
- prereq_tests = ['presubmit']
- step_verifiers = [
- try_job_steps.TryJobSteps(builder_name=prereq_builder,
- steps=prereq_tests)]
- if not no_try:
- blink_tests = [
- 'blink_heap_unittests',
- 'blink_platform_unittests',
- 'webkit_lint',
- 'webkit_python_tests',
- 'webkit_tests',
- 'webkit_unit_tests',
- 'wtf_unittests',
- ]
-
- # A "compile-only" bot runs the webkit_lint tests (which are fast)
- # in order to pick up the default build targets. We don't use the
- # "compile" step because that will build all the chromium targets, not
- # just the blink-specific ones.
- compile_only = [ 'webkit_lint' ]
-
- builders_and_tests = {
- 'mac_layout': compile_only,
- 'win_layout': compile_only,
-
- 'linux_blink': blink_tests,
- 'linux_blink_rel': blink_tests,
- 'mac_blink_rel': blink_tests,
- 'win_blink_rel': blink_tests,
- }
-
- step_verifiers += [
- try_job_steps.TryJobSteps(builder_name=b, prereq_builder=prereq_builder,
- prereq_tests=prereq_tests, steps=s)
- for b, s in builders_and_tests.iteritems()
- ]
-
- verifiers.append(try_job_on_rietveld.TryRunnerRietveld(
- context_obj,
- 'http://build.chromium.org/p/tryserver.chromium/',
- user,
- step_verifiers,
- IGNORED_STEPS,
- 'src'))
-
- verifiers.append(tree_status.TreeStatusVerifier(
- 'https://blink-status.appspot.com'))
- return pending_manager.PendingManager(
- context_obj,
- verifiers_no_patch,
- verifiers)
-
-
-def _gen_chromium(user, root_dir, rietveld_obj, no_try):
- """Generates a PendingManager commit queue for chrome/trunk/src."""
- local_checkout = checkout.SvnCheckout(
- root_dir,
- 'chromium',
- user,
- None,
- 'svn://svn.chromium.org/chrome/trunk/src',
- [chromium_copyright.process])
- context_obj = context.Context(
- rietveld_obj,
- local_checkout,
- async_push.AsyncPush(
- 'https://chromium-status.appspot.com/cq',
- _chromium_status_pwd(root_dir)))
-
- project_bases = [
- '^%s/trunk/src(|/.*)$' % re.escape(base) for base in CHROME_SVN_BASES]
-
- aliases = (
- # Old path.
- 'git.chromium.org/git/chromium',
- # New path.
- 'git.chromium.org/chromium/src',
- 'chromium.googlesource.com/chromium/src',
- 'chromium.googlesource.com/a/chromium/src',
- )
- project_bases.extend(
- r'^https?\:\/\/%s(?:\.git)?%s$' % (re.escape(i), BRANCH_MATCH)
- for i in aliases)
- verifiers_no_patch = [
- project_base.ProjectBaseUrlVerifier(project_bases),
- reviewer_lgtm.ReviewerLgtmVerifier(
- _get_chromium_committers(),
- [re.escape(user)]),
- ]
- verifiers = []
- prereq_builder = 'chromium_presubmit'
- prereq_tests = ['presubmit']
- step_verifiers = [
- try_job_steps.TryJobSteps(builder_name=prereq_builder,
- steps=prereq_tests)]
- if not no_try:
- # To add tests to this list, they MUST be in
- # /chrome/trunk/tools/build/masters/master.chromium/master_gatekeeper_cfg.py
- # or somehow close the tree whenever they break.
- standard_tests = [
- 'base_unittests',
- 'browser_tests',
- 'cacheinvalidation_unittests',
- 'check_deps',
- 'check_deps2git',
- 'content_browsertests',
- 'content_unittests',
- 'crypto_unittests',
- #'gfx_unittests',
- # Broken in release.
- #'url_unittests',
- 'gpu_unittests',
- 'ipc_tests',
- 'interactive_ui_tests',
- 'jingle_unittests',
- 'media_unittests',
- 'net_unittests',
- 'ppapi_unittests',
- 'printing_unittests',
- 'sql_unittests',
- 'sync_unit_tests',
- 'unit_tests',
- #'webkit_unit_tests',
- ]
- # Use a smaller set of tests for *_aura, since there's a lot of overlap with
- # the corresponding *_rel builders.
- # Note: *_aura are Release builders even if their names convey otherwise.
- linux_aura_tests = [
- 'app_list_unittests',
- 'aura_unittests',
- 'browser_tests',
- 'compositor_unittests',
- 'content_browsertests',
- 'content_unittests',
- 'events_unittests',
- 'interactive_ui_tests',
- 'unit_tests',
- ]
- builders_and_tests = {
- # TODO(maruel): Figure out a way to run 'sizes' where people can
- # effectively update the perf expectation correctly. This requires a
- # clobber=True build running 'sizes'. 'sizes' is not accurate with
- # incremental build. Reference:
- # http://chromium.org/developers/tree-sheriffs/perf-sheriffs.
- # TODO(maruel): An option would be to run 'sizes' but not count a failure
- # of this step as a try job failure.
- 'android_dbg': ['slave_steps'],
- 'android_clang_dbg': ['slave_steps'],
- 'android_aosp': ['compile'],
- 'ios_dbg_simulator': [
- 'compile',
- 'base_unittests',
- 'components_unittests',
- 'content_unittests',
- 'crypto_unittests',
- 'url_unittests',
- 'net_unittests',
- 'sql_unittests',
- 'ui_unittests',
- ],
- 'ios_rel_device': ['compile'],
- 'ios_rel_device_ninja': ['compile'],
- 'linux_aura': linux_aura_tests,
- 'linux_clang': ['compile'],
- 'linux_chromeos_clang': ['compile'],
- # Note: It is a Release builder even if its name convey otherwise.
- 'linux_chromeos': standard_tests + [
- 'app_list_unittests',
- 'aura_unittests',
- 'ash_unittests',
- 'chromeos_unittests',
- 'components_unittests',
- 'dbus_unittests',
- 'device_unittests',
- 'events_unittests',
- 'google_apis_unittests',
- 'sandbox_linux_unittests',
- ],
- 'linux_rel': standard_tests + [
- 'cc_unittests',
- 'chromedriver_unittests',
- 'components_unittests',
- 'google_apis_unittests',
- 'nacl_integration',
- 'remoting_unittests',
- 'sandbox_linux_unittests',
- 'sync_integration_tests',
- 'telemetry_perf_unittests',
- 'telemetry_unittests',
- ],
- 'mac': ['compile'],
- 'mac_rel': standard_tests + [
- 'app_list_unittests',
- 'cc_unittests',
- 'chromedriver_unittests',
- 'components_unittests',
- 'google_apis_unittests',
- 'message_center_unittests',
- 'nacl_integration',
- 'remoting_unittests',
- 'sync_integration_tests',
- 'telemetry_perf_unittests',
- 'telemetry_unittests',
- ],
- 'win': ['compile'],
- 'win_rel': standard_tests + [
- 'app_list_unittests',
- 'ash_unittests',
- 'aura_unittests',
- 'cc_unittests',
- 'chrome_elf_unittests',
- 'chromedriver_unittests',
- 'components_unittests',
- 'compositor_unittests',
- 'events_unittests',
- 'google_apis_unittests',
- 'installer_util_unittests',
- 'mini_installer_test',
- 'nacl_integration',
- 'remoting_unittests',
- 'sync_integration_tests',
- 'telemetry_perf_unittests',
- 'telemetry_unittests',
- 'views_unittests',
- ],
- 'win_x64_rel': [
- 'base_unittests',
- ],
- }
-
- swarm_enabled_tests = (
- 'base_unittests',
- 'browser_tests',
- 'interactive_ui_tests',
- 'net_unittests',
- 'unit_tests',
- )
-
- # pylint: disable=W0612
- swarm_test_map = dict(
- (test, test + '_swarm') for test in swarm_enabled_tests)
-
- # Commenting out the items below will make the CQ not use swarm for its
- # execution. Uncomment to make the CQ use Swarming again.
- swarm_enabled_builders_and_tests = {
- ('linux_rel', 'linux_swarm_triggered'): swarm_test_map,
- ('mac_rel', 'mac_swarm_triggered'): swarm_test_map,
- ('win_rel', 'win_swarm_triggered'): swarm_test_map,
- }
-
- step_verifiers += [
- try_job_steps.TryJobSteps(
- builder_name=b, prereq_builder=prereq_builder,
- prereq_tests=prereq_tests, steps=s)
- for b, s in builders_and_tests.iteritems()
- if b not in swarm_enabled_builders_and_tests
- ] + [
- try_job_steps.TryJobTriggeredSteps(
- builder_name='android_dbg_triggered_tests',
- trigger_name='android_dbg',
- prereq_builder=prereq_builder,
- prereq_tests=prereq_tests,
- steps={'slave_steps': 'slave_steps'}),
- ]
-
- # Add the swarm enabled builders with swarm accepted tests.
- for (builder, triggered), builder_swarm_enabled_tests in (
- swarm_enabled_builders_and_tests.iteritems()):
- regular_tests = list(set(builders_and_tests[builder]) -
- set(builder_swarm_enabled_tests))
-
- step_verifiers.append(
- try_job_steps.TryJobTriggeredOrNormalSteps(
- builder_name=triggered,
- trigger_name=builder,
- prereq_builder=prereq_builder,
- prereq_tests=prereq_tests,
- steps=builder_swarm_enabled_tests,
- trigger_bot_steps=regular_tests,
- use_triggered_bot=False))
-
- # Experimental recipe-based Chromium trybots. To avoid possible capacity
- # problems, only enable for a small percentage of try runs.
- #
- # Note how we pass revision=None . In presence of safesync_url
- # this makes a difference: no revision uses safesync_url,
- # while HEAD ignores it and always fetches latest revision.
- verifiers.append(
- trigger_experimental_try_job.TriggerExperimentalTryJobVerifier(
- context_obj,
- percentage=0.25,
- revision=None,
- try_job_description={
- 'linux_chromium_rel': ['defaulttests'],
- 'mac_chromium_rel': ['defaulttests'],
- }))
-
- verifiers.append(try_job_on_rietveld.TryRunnerRietveld(
- context_obj,
- 'http://build.chromium.org/p/tryserver.chromium/',
- user,
- step_verifiers,
- IGNORED_STEPS,
- 'src'))
-
- verifiers.append(tree_status.TreeStatusVerifier(
- 'https://chromium-status.appspot.com'))
- return pending_manager.PendingManager(
- context_obj,
- verifiers_no_patch,
- verifiers)
-
-
-def _skia_status_pwd(root_dir):
- filepath = os.path.join(root_dir, '.skia_status_pwd')
- return _read_lines(filepath, 'skia-status password')[0].strip()
-
-
-def _gen_skia(user, root_dir, rietveld_obj, no_try):
- """Generates a PendingManager commit queue for Skia.
-
- Adds the following verifiers to the PendingManager:
- * ProjectBaseUrlVerifier
- * ReviewerLgtmVerifier
- * PresubmitCheckVerifier
- * TreeStatusVerifier
- * TryRunnerRietveld (runs compile trybots)
- """
- naked_url = '://skia.googlecode.com/svn/trunk'
- local_checkout = checkout.SvnCheckout(
- root_dir,
- 'skia',
- user,
- None,
- 'https' + naked_url)
- context_obj = context.Context(
- rietveld_obj,
- local_checkout,
- async_push.AsyncPush(
- 'https://skia-tree-status.appspot.com/cq',
- _skia_status_pwd(root_dir)),
- server_hooks_missing=True)
-
- project_bases = [
- '^%s(|/.*)$' % re.escape(base + naked_url) for base in ('http', 'https')
- ]
- project_bases.append(
- r'^https?\:\/\/skia.googlesource.com\/skia(?:\.git)?%s$' %
- BRANCH_MATCH)
- verifiers_no_patch = [
- project_base.ProjectBaseUrlVerifier(project_bases),
- reviewer_lgtm.ReviewerLgtmVerifier(
- _get_skia_committers(),
- [re.escape(user)]),
- ]
- verifiers = [
- presubmit_check.PresubmitCheckVerifier(context_obj),
- tree_status.TreeStatusVerifier(
- 'https://skia-tree-status.appspot.com')
- ]
-
- if not no_try:
- # TODO(skia-infrastructure-team): Use skia.org instead of the below when it
- # is ready.
- try_server_url = 'http://108.170.219.164:10117/'
-
- # Get the required build steps and builder names from the try server.
- compile_required_build_steps = json.load(
- urllib2.urlopen(
- try_server_url + 'json/cq_required_steps'))['cq_required_steps']
- builder_names = list(
- json.load(urllib2.urlopen(try_server_url + 'json/cqtrybots')))
-
- step_verifiers = []
- for builder_name in builder_names:
- step_verifiers.append(
- try_job_steps.TryJobSteps(
- builder_name=builder_name,
- steps=compile_required_build_steps))
- verifiers.append(try_job_on_rietveld.TryRunnerRietveld(
- context_obj=context_obj,
- try_server_url=try_server_url,
- commit_user=user,
- step_verifiers=step_verifiers,
- ignored_steps=[],
- solution='src'))
-
- return pending_manager.PendingManager(
- context_obj,
- verifiers_no_patch,
- verifiers)
-
-
-def _gen_nacl(user, root_dir, rietveld_obj, no_try):
- """Generates a PendingManager commit queue for Native Client."""
- offset = 'trunk/src/native_client'
- local_checkout = checkout.SvnCheckout(
- root_dir,
- 'nacl',
- user,
- None,
- 'svn://svn.chromium.org/native_client/' + offset)
- context_obj = context.Context(
- rietveld_obj,
- local_checkout,
- async_push.AsyncPush(
- 'https://nativeclient-status.appspot.com/cq',
- _chromium_status_pwd(root_dir)))
-
- host_aliases = SVN_HOST_ALIASES + [
- 'http://src.chromium.org', 'https://src.chromium.org']
- svn_bases = [i + '/native_client' for i in host_aliases]
- project_bases = [
- '^%s/%s(|/.*)$' % (re.escape(base), offset) for base in svn_bases
- ]
- aliases = (
- 'git.chromium.org/native_client/src/native_client',
- 'chromium.googlesource.com/native_client/src/native_client',
- )
- project_bases.extend(
- r'^https?\:\/\/%s(?:\.git)?%s$' % (re.escape(i), BRANCH_MATCH)
- for i in aliases)
- verifiers_no_patch = [
- project_base.ProjectBaseUrlVerifier(project_bases),
- reviewer_lgtm.ReviewerLgtmVerifier(
- _get_nacl_committers(),
- [re.escape(user)]),
- ]
- verifiers = [
- presubmit_check.PresubmitCheckVerifier(context_obj),
- ]
- if not no_try:
- # Grab the list of all the builders here. The commit queue needs to know
- # which builders were triggered. TODO: makes this more automatic.
- url = 'http://build.chromium.org/p/tryserver.nacl/json/builders'
- builders_and_tests = dict(
- (key, []) for key in json.load(urllib2.urlopen(url))
- if (key.startswith('nacl-') and
- 'toolchain' not in key and
- 'valgrind' not in key and
- 'perf_panda' not in key and
- 'arm_hw' not in key and
- 'shared' not in key and
- 'coverage' not in key)
- )
- verifiers.append(try_server.TryRunnerSvn(
- context_obj,
- 'http://build.chromium.org/p/tryserver.nacl/',
- user,
- builders_and_tests,
- IGNORED_STEPS,
- 'native_client',
- ['--root', 'native_client'],
- _nacl_lkgr))
-
- verifiers.append(tree_status.TreeStatusVerifier(
- 'https://nativeclient-status.appspot.com'))
- return pending_manager.PendingManager(
- context_obj,
- verifiers_no_patch,
- verifiers)
-
-
-def _gen_gyp(user, root_dir, rietveld_obj, no_try):
- """Generates a PendingManager commit queue for GYP."""
- naked_url = '://gyp.googlecode.com/svn/trunk'
- local_checkout = checkout.SvnCheckout(
- root_dir,
- 'gyp',
- user,
- None,
- 'https' + naked_url)
- context_obj = context.Context(
- rietveld_obj,
- local_checkout,
- async_push.AsyncPush(
- 'https://chromium-status.appspot.com/cq/receiver',
- _chromium_status_pwd(root_dir)))
-
- project_bases = [
- '^%s(|/.*)$' % re.escape(base + naked_url) for base in ('http', 'https')
- ]
- verifiers_no_patch = [
- project_base.ProjectBaseUrlVerifier(project_bases),
- reviewer_lgtm.ReviewerLgtmVerifier(
- _get_gyp_committers(),
- [re.escape(user)]),
- ]
- verifiers = []
- if not no_try:
- # Grab the list of all the builders here. The commit queue needs to know
- # which builders were triggered. TODO: makes this more automatic.
- # GYP is using the Nacl try server.
- url = 'http://build.chromium.org/p/tryserver.nacl/json/builders'
- builders_and_tests = dict(
- (key, []) for key in json.load(urllib2.urlopen(url))
- if key.startswith('gyp-')
- )
- verifiers.append(try_server.TryRunnerSvn(
- context_obj,
- 'http://build.chromium.org/p/tryserver.nacl/',
- user,
- builders_and_tests,
- IGNORED_STEPS,
- 'gyp',
- ['--root', 'gyp'],
- lambda: None))
-
- verifiers.append(tree_status.TreeStatusVerifier(
- 'https://gyp-status.appspot.com/status'))
- return pending_manager.PendingManager(
- context_obj,
- verifiers_no_patch,
- verifiers)
-
-
-def _gen_tools(user, root_dir, rietveld_obj, _no_try):
- """Generates a PendingManager commit queue for everything under
- chrome/trunk/tools.
-
- These don't have a try server but have presubmit checks.
- """
- # Ignore no_try.
- path = 'tools'
- project_bases = [
- '^%s/trunk/%s(|/.*)$' % (re.escape(base), path)
- for base in CHROME_SVN_BASES
- ]
- aliases = (
- # Old path.
- 'git.chromium.org/git/chromium/tools',
- # New path.
- 'git.chromium.org/chromium/tools',
- 'chromium.googlesource.com/chromium/tools',
- 'chromium.googlesource.com/a/chromium/tools',
- )
- project_bases.extend(
- r'^https?\:\/\/%s\/([a-z0-9\-_]+)(?:\.git)?%s$' % (
- re.escape(i), BRANCH_MATCH) for i in aliases)
- return _internal_simple(path, project_bases, user, root_dir, rietveld_obj)
-
-
-def _gen_chromium_deps(user, root_dir, rietveld_obj, _no_try):
- """Generates a PendingManager commit queue for
- chrome/trunk/deps/.
- """
- # Ignore no_try.
- path = 'deps'
- project_bases = [
- '^%s/trunk/%s(|/.*)$' % (re.escape(base), path)
- for base in CHROME_SVN_BASES
- ]
- return _internal_simple(path, project_bases, user, root_dir, rietveld_obj)
-
-
-def _internal_simple(path, project_bases, user, root_dir, rietveld_obj):
- """Generates a PendingManager commit queue for chrome/trunk/tools/build."""
- local_checkout = checkout.SvnCheckout(
- root_dir,
- os.path.basename(path),
- user,
- None,
- 'svn://svn.chromium.org/chrome/trunk/' + path,
- [chromium_copyright.process])
- context_obj = context.Context(
- rietveld_obj,
- local_checkout,
- async_push.AsyncPush(
- 'https://chromium-status.appspot.com/cq',
- _chromium_status_pwd(root_dir)))
-
- verifiers_no_patch = [
- project_base.ProjectBaseUrlVerifier(project_bases),
- reviewer_lgtm.ReviewerLgtmVerifier(
- _get_chromium_committers(),
- [re.escape(user)]),
- ]
- verifiers = [
- presubmit_check.PresubmitCheckVerifier(context_obj, timeout=900),
- ]
-
- return pending_manager.PendingManager(
- context_obj,
- verifiers_no_patch,
- verifiers)
-
-
-def supported_projects():
- """List the projects that can be managed by the commit queue."""
- return sorted(
- x[5:] for x in dir(sys.modules[__name__]) if x.startswith('_gen_'))
-
-
-def load_project(project, user, root_dir, rietveld_obj, no_try):
- """Loads the specified project."""
- assert os.path.isabs(root_dir)
- return getattr(sys.modules[__name__], '_gen_' + project)(
- user, root_dir, rietveld_obj, no_try)
diff --git a/sig_handler.py b/sig_handler.py
deleted file mode 100644
index 59f42a2..0000000
--- a/sig_handler.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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.
-
-import logging as _logging
-import signal as _signal
-import threading as _threading
-
-_OK_HANDLERS = set((
- _signal.SIG_DFL,
- _signal.SIG_IGN,
- _signal.default_int_handler,
-))
-
-# Only manipulated on the main thread, so it doesn't need a lock.
-_PREV_HANDLERS = {}
-
-_SET_SIGNALS_LOCK = _threading.Lock()
-_SET_SIGNALS = set()
-
-
-def _handler(signal_num, _):
- with _SET_SIGNALS_LOCK:
- _SET_SIGNALS.add(signal_num)
- _signal.signal(signal_num, _PREV_HANDLERS[signal_num])
- _logging.warn(
- '\n'
- 'commit-queue will exit at the end of this processing loop.\n'
- 'Hit Ctrl-C again to exit immediately.'
- )
-
-
-def getTriggeredSignals():
- with _SET_SIGNALS_LOCK:
- return _SET_SIGNALS.copy()
-
-
-def installHandlers(*signal_numbers):
- for signal_num in signal_numbers:
- cur_handler = _signal.getsignal(signal_num)
- if cur_handler == _handler:
- continue
-
- assert cur_handler in _OK_HANDLERS, \
- 'A signal handler is already installed for signal %d' % signal_num
-
- _PREV_HANDLERS[signal_num] = cur_handler
- _signal.signal(signal_num, _handler)
diff --git a/subversion_config/config b/subversion_config/config
deleted file mode 100644
index 83d1afe..0000000
--- a/subversion_config/config
+++ /dev/null
@@ -1,54 +0,0 @@
-# Chromium-specific config file to put at ~/.subversion/config or %USERPROFILE%\AppData\Roaming\Subversion\config
-# Inspired by http://src.chromium.org/svn/trunk/tools/build/slave/config
-
-[auth]
-# Warning, this is insecure.
-store-passwords=yes
-
-[miscellany]
-global-ignores = *.pyc *.user *.suo *.bak *~ #*# *.ncb *.o *.lo *.la .*~ .#* .DS_Store .*.swp *.mk *.Makefile *.sln *.vcproj *.rules *.xcodeproj
-enable-auto-props = yes
-
-[auto-props]
-*.afm = svn:eol-style=LF
-*.asm = svn:eol-style=LF
-*.bat = svn:eol-style=CRLF
-*.c = svn:eol-style=LF
-*.cc = svn:eol-style=LF
-*.cpp = svn:eol-style=LF
-*.css = svn:eol-style=LF;svn:mime-type=text/css
-*.def = svn:eol-style=LF
-*.dll = svn:executable
-*.exe = svn:executable
-*.grd = svn:eol-style=LF
-*.gyp = svn:eol-style=LF
-*.gypi = svn:eol-style=LF
-*.h = svn:eol-style=LF
-*.htm = svn:eol-style=LF;svn:mime-type=text/html
-*.html = svn:eol-style=LF;svn:mime-type=text/html
-*.idl = svn:eol-style=LF
-*.jpg = svn:mime-type=image/jpeg
-*.java = svn:eol-style=LF
-*.js = svn:eol-style=LF;svn:mime-type=text/javascript
-*.json = svn:eol-style=LF
-*.m = svn:eol-style=LF
-*.make = svn:eol-style=LF
-*.mm = svn:eol-style=LF
-*.mock-http-headers = svn:eol-style=LF
-*.obsolete = svn:eol-style=LF
-*.pdf = svn:mime-type=application/pdf
-*.pl = svn:eol-style=LF
-*.pm = svn:eol-style=LF
-*.png = svn:mime-type=image/png
-*.py = svn:eol-style=LF
-*.pyd = svn:executable
-*.s = svn:eol-style=LF
-*.S = svn:eol-style=LF
-*.sh = svn:eol-style=LF;svn:executable
-*.svg = svn:eol-style=LF
-*.txt = svn:eol-style=LF
-*.webp = svn:mime-type=image/webp
-*.xml = svn:eol-style=LF;svn:mime-type=text/xml
-*.xtb = svn:eol-style=LF
-DEPS = svn:eol-style=LF
-Makefile = svn:eol-style=LF
diff --git a/tests/authors_white_list_test.py b/tests/authors_white_list_test.py
deleted file mode 100755
index feb0675..0000000
--- a/tests/authors_white_list_test.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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 verification/authors_white_list.py."""
-
-import os
-import sys
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-from verification import base
-from verification import authors_white_list
-
-# From tests/
-import mocks
-
-
-class AuthorTest(mocks.TestCase):
- def test_rejected(self):
- self.pending.owner = 'georges@micro.com'
- self._check(
- 'Can\'t commit because the owner %s not in whitelist' %
- self.pending.owner)
-
- def test_allowed(self):
- self.pending.owner = 'georges@example.com'
- self._check(None)
-
- def _check(self, error_message):
- ver = authors_white_list.AuthorVerifier([r'^[\-\w]+\@example\.com$'])
- ver.verify(self.pending)
- ver.update_status([self.pending])
- name = authors_white_list.AuthorVerifier.name
- self.assertEqual(self.pending.verifications.keys(), [name])
- self.assertEqual(
- self.pending.verifications[name].error_message, error_message)
- if error_message:
- self.assertEqual(
- self.pending.verifications[name].get_state(), base.FAILED)
- else:
- self.assertEqual(
- self.pending.verifications[name].get_state(), base.SUCCEEDED)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/buildbot_json_test.py b/tests/buildbot_json_test.py
deleted file mode 100755
index 561e59a..0000000
--- a/tests/buildbot_json_test.py
+++ /dev/null
@@ -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()
diff --git a/tests/chromium.11299256.json b/tests/chromium.11299256.json
deleted file mode 100644
index d1fa236..0000000
--- a/tests/chromium.11299256.json
+++ /dev/null
@@ -1,969 +0,0 @@
-{
- "__persistent_type__": "PendingQueue",
- "pending_commits": {
- "11299256": {
- "__persistent_type__": "PendingCommit",
- "base_url": "svn://svn.chromium.org/chrome/trunk/src",
- "description": "Add rmsousa@ and remove simonmorris@ from remoting/OWNERS.\n",
- "files": [
- "remoting/OWNERS"
- ],
- "issue": 11299256,
- "messages": [
- {
- "approval": false,
- "date": "2012-11-29 18:47:47.726380",
- "disapproval": false,
- "recipients": [
- "wez@chromium.org",
- "jamiewalch@chromium.org",
- "chromium-reviews@chromium.org",
- "jamiewalch+watch@chromium.org",
- "dcaiafa+watch@chromium.org",
- "simonmorris+watch@chromium.org",
- "hclam+watch@chromium.org",
- "wez+watch@chromium.org",
- "amit@chromium.org",
- "sanjeevr@chromium.org",
- "garykac+watch@chromium.org",
- "lambroslambrou+watch@chromium.org",
- "rmsousa+watch@chromium.org",
- "alexeypa+watch@chromium.org",
- "sergeyu+watch@chromium.org"
- ],
- "sender": "wez@chromium.org"
- },
- {
- "approval": true,
- "date": "2012-11-29 19:00:14.872770",
- "disapproval": false,
- "recipients": [
- "wez@chromium.org",
- "jamiewalch@chromium.org",
- "chromium-reviews@chromium.org",
- "jamiewalch+watch@chromium.org",
- "dcaiafa+watch@chromium.org",
- "simonmorris+watch@chromium.org",
- "hclam+watch@chromium.org",
- "wez+watch@chromium.org",
- "amit@chromium.org",
- "sanjeevr@chromium.org",
- "garykac+watch@chromium.org",
- "lambroslambrou+watch@chromium.org",
- "rmsousa+watch@chromium.org",
- "alexeypa+watch@chromium.org",
- "sergeyu+watch@chromium.org"
- ],
- "sender": "jamiewalch@chromium.org"
- },
- {
- "approval": false,
- "date": "2012-11-29 19:08:50.400220",
- "disapproval": false,
- "recipients": [
- "wez@chromium.org",
- "jamiewalch@chromium.org",
- "chromium-reviews@chromium.org",
- "jamiewalch+watch@chromium.org",
- "dcaiafa+watch@chromium.org",
- "simonmorris+watch@chromium.org",
- "hclam+watch@chromium.org",
- "wez+watch@chromium.org",
- "amit@chromium.org",
- "sanjeevr@chromium.org",
- "garykac+watch@chromium.org",
- "lambroslambrou+watch@chromium.org",
- "rmsousa+watch@chromium.org",
- "alexeypa+watch@chromium.org",
- "sergeyu+watch@chromium.org"
- ],
- "sender": "commit-bot@chromium.org"
- },
- {
- "approval": false,
- "date": "2012-11-29 19:33:59.872790",
- "disapproval": false,
- "recipients": [
- "wez@chromium.org",
- "jamiewalch@chromium.org",
- "chromium-reviews@chromium.org",
- "jamiewalch+watch@chromium.org",
- "dcaiafa+watch@chromium.org",
- "simonmorris+watch@chromium.org",
- "hclam+watch@chromium.org",
- "wez+watch@chromium.org",
- "amit@chromium.org",
- "sanjeevr@chromium.org",
- "garykac+watch@chromium.org",
- "lambroslambrou+watch@chromium.org",
- "rmsousa+watch@chromium.org",
- "alexeypa+watch@chromium.org",
- "sergeyu+watch@chromium.org"
- ],
- "sender": "commit-bot@chromium.org"
- }
- ],
- "owner": "wez@chromium.org",
- "patchset": 1,
- "relpath": "",
- "reviewers": [
- "jamiewalch@chromium.org"
- ],
- "revision": 170244,
- "verifications": {
- "presubmit": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "project_bases": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "reviewer_lgtm": {
- "__persistent_type__": "LgtmStatus",
- "error_message": null,
- "state": 0
- },
- "tree status": {
- "__persistent_type__": "TreeStatus",
- "error_message": null,
- "issue": 11299256,
- "last_tree_status": "",
- "tree_status_url": "http://chromium-status.appspot.com"
- },
- "try job rietveld": {
- "__persistent_type__": "RietveldTryJobs",
- "step_verifiers": [
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_dbg",
- "steps": ["build"]
- },
- {
- "__persistent_type__": "TryJobTriggeredSteps",
- "builder_name": "android_dbg_triggered_tests",
- "trigger_name": "android_dbg",
- "steps": {
- "build": "build"
- }
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_dbg_simulator",
- "steps": [
- "compile",
- "base_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "sql_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_rel_device",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_aura",
- "steps": [
- "aura_unittests",
- "content_unittests",
- "content_browsertests",
- "views_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_chromeos",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "aura_unittests",
- "chromeos_unittests",
- "dbus_unittests",
- "device_unittests",
- "sandbox_linux_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_clang",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "nacl_integration",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win_aura",
- "steps": [
- "aura_unittests",
- "content_unittests",
- "content_browsertests",
- "views_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "installer_util_unittests",
- "mini_installer_test",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- }
- ],
- "error_message": null,
- "irrelevant": [],
- "pendings": [
- {
- "__persistent_type__": "RietveldTryJobPending",
- "builder": "ios_rel_device",
- "clobber": false,
- "requested_steps": [
- "compile"
- ],
- "revision": null,
- "tries": 1
- }
- ],
- "skipped": false,
- "try_jobs": {
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBi6Fww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 2303,
- "builder": "linux_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1354224851.51483,
- "parent_key": null,
- "requested_steps": [
- "content_unittests"
- ],
- "revision": "HEAD",
- "started": 1354224034,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "content_unittests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiJJww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 18148,
- "builder": "android_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1354224029.184685,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216383,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "trigger",
- "Environment setup",
- "compile",
- "findbugs",
- "Zip build"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiKJww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 2256,
- "builder": "linux_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1354224028.894632,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216382,
- "steps_failed": [
- "content_unittests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "views_unittests",
- "aura_unittests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiRTgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 39097,
- "builder": "win",
- "clobber": false,
- "completed": true,
- "init_time": 1354224028.846184,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216383,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiSTgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 85200,
- "builder": "win_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1354224029.232662,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216383,
- "steps_failed": [
- "compile"
- ],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiiHww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 67189,
- "builder": "linux_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1354224028.993626,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216382,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBipRgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 77603,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1354226386.79798,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216383,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBj5VQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 5853,
- "builder": "win_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1354224029.040092,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216383,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "content_unittests",
- "views_unittests",
- "aura_unittests",
- "content_browsertests",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBj6VQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 85346,
- "builder": "win_rel",
- "clobber": true,
- "completed": true,
- "init_time": 1354245707.031492,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "installer_util_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "mini_installer_test",
- "nacl_integration",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sql_unittests",
- "sync_integration_tests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1354229009,
- "steps_failed": [
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "chrome_frame_net_tests",
- "nacl_integration"
- ],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "installer_util_unittests",
- "mini_installer_test",
- "chrome_frame_unittests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjBPgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 18456,
- "builder": "mac",
- "clobber": false,
- "completed": true,
- "init_time": 1354224028.797491,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216383,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjCPgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 85204,
- "builder": "win_rel",
- "clobber": true,
- "completed": true,
- "init_time": 1354224029.088897,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216934,
- "steps_failed": [
- "compile"
- ],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjEPgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 85487,
- "builder": "win_rel",
- "clobber": true,
- "completed": true,
- "init_time": 1354246399.951257,
- "parent_key": null,
- "requested_steps": [
- "browser_tests"
- ],
- "revision": "HEAD",
- "started": 1354240964,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "browser_tests",
- "process_dumps"
- ],
- "tries": 2
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjJZQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 63013,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1354224851.513158,
- "parent_key": null,
- "requested_steps": [
- "interactive_ui_tests"
- ],
- "revision": "HEAD",
- "started": 1354224073,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjZNgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 62909,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1354224028.748252,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216396,
- "steps_failed": [
- "interactive_ui_tests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "aura_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjrBww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 79258,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1354224028.9432,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216383,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjsBww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 85513,
- "builder": "win_rel",
- "clobber": true,
- "completed": true,
- "init_time": 1354248931.120074,
- "parent_key": null,
- "requested_steps": [
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "content_browsertests",
- "installer_util_unittests",
- "mini_installer_test",
- "nacl_integration",
- "sync_integration_tests"
- ],
- "revision": "HEAD",
- "started": 1354243436,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "content_browsertests",
- "installer_util_unittests",
- "mini_installer_test",
- "sync_integration_tests",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "nacl_integration",
- "process_dumps"
- ],
- "tries": 3
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjxLgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10539,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1354224029.279309,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216507,
- "steps_failed": [
- "compile"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjyLgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10544,
- "builder": "ios_dbg_simulator",
- "clobber": true,
- "completed": true,
- "init_time": 1354224029.13632,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354216934,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "sql_unittests"
- ],
- "tries": 0
- },
- "android_dbg_triggered_tests/15307_triggered_ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiJJww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 15307,
- "builder": "android_dbg_triggered_tests",
- "clobber": false,
- "completed": true,
- "init_time": 1354224029.327454,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYuNOxBQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiJJww",
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1354217400,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "Environment setup",
- "Device Status Check",
- "Download and extract build",
- "Rebooting phones",
- "base_unittests",
- "cc_unittests",
- "content_unittests",
- "gpu_unittests",
- "ipc_tests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "ui_unittests",
- "unit_tests",
- "webkit_compositor_bindings_unittests",
- "Install ContentShell.apk",
- "Run instrumentation tests ContentShellTest",
- "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ContentShellTest",
- "Install ChromiumTestShell.apk",
- "Run instrumentation tests ChromiumTestShellTest",
- "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ChromiumTestShellTest",
- "Logcat dump"
- ],
- "tries": 0
- }
- }
- }
- }
- }
- }
-}
diff --git a/tests/chromium.12208028.json b/tests/chromium.12208028.json
deleted file mode 100644
index ab348d1..0000000
--- a/tests/chromium.12208028.json
+++ /dev/null
@@ -1,953 +0,0 @@
-{
- "__persistent_type__": "PendingQueue",
- "pending_commits": {
- "12208028": {
- "__persistent_type__": "PendingCommit",
- "base_url": "svn://svn.chromium.org/chrome/trunk/src",
- "description": "Exclude duplicate gmock_mutant functor templates in WIN64\n\nOn WIN64, there is only one calling convention. Therefore,\nimplicit calling conventions and __stdcall are the same, hence\ntemplate redefinition errors occur in the previous gmock_mutant.h\non WIN64.\n\nBUG=173697, 166496\nTEST=media_unittests target builds without template redefinition errors. With other build errors fixed in privates (ignore C4267 & lift MEDIA...INTRINSICS... definition into yuv_convert.h and use it to not link in methods that use MMX intrinsics), media_unittests executes\n",
- "files": [
- "testing/generate_gmock_mutant.py",
- "testing/gmock_mutant.h"
- ],
- "issue": 12208028,
- "messages": [
- {
- "approval": false,
- "date": "2013-02-07 02:03:59.852570",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "commit-bot@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-05 21:38:46.793380",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "stoyan@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "wolenetz@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-05 21:03:00.049410",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "stoyan@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "wolenetz@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-06 18:44:41.797260",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "wolenetz@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-07 00:05:38.370650",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "wolenetz@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-05 21:07:38.316000",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "stoyan@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "dalecurtis@chromium.org"
- },
- {
- "approval": true,
- "date": "2013-02-05 21:40:24.800270",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "stoyan@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "dalecurtis@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-06 18:45:19.341030",
- "disapproval": false,
- "recipients": [
- "wolenetz@chromium.org",
- "dalecurtis@chromium.org",
- "chromium-reviews@chromium.org"
- ],
- "sender": "commit-bot@chromium.org"
- }
- ],
- "owner": "wolenetz@chromium.org",
- "patchset": 1,
- "relpath": "",
- "reviewers": [
- "dalecurtis@chromium.org"
- ],
- "revision": 181323,
- "verifications": {
- "presubmit": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "project_bases": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "reviewer_lgtm": {
- "__persistent_type__": "LgtmStatus",
- "error_message": null,
- "state": 0
- },
- "tree status": {
- "__persistent_type__": "TreeStatus",
- "error_message": null,
- "issue": 12208028,
- "last_tree_status": "",
- "tree_status_url": "http://chromium-status.appspot.com"
- },
- "try job rietveld": {
- "__persistent_type__": "RietveldTryJobs",
- "error_message": null,
- "irrelevant": [
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY2Q8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY2w8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY3Q8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYqUYM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY3g8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY0w8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY1w8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY2A8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY1A8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY1g8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY3A8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY2g8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY1Q8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY0g8M"
- ],
- "pendings": [],
- "skipped": false,
- "step_verifiers": [
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_chromeos",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "aura_unittests",
- "chromeos_unittests",
- "components_unittests",
- "dbus_unittests",
- "device_unittests",
- "sandbox_linux_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_dbg",
- "steps": [
- "build"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chromedriver_unittests",
- "components_unittests",
- "nacl_integration",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_aura",
- "steps": [
- "aura_unittests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win7_aura",
- "steps": [
- "aura_unittests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests",
- "ash_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_clang_dbg",
- "steps": [
- "build"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_dbg_simulator",
- "steps": [
- "compile",
- "base_unittests",
- "content_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "ui_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_rel_device",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_clang",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "installer_util_unittests",
- "mini_installer_test",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chromedriver_unittests",
- "components_unittests",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobTriggeredSteps",
- "builder_name": "android_dbg_triggered_tests",
- "steps": {
- "build": "build"
- },
- "trigger_name": "android_dbg"
- }
- ],
- "try_jobs": {
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYBAw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 27594,
- "builder": "mac",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176382,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY-VUM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 33887,
- "builder": "android_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176349,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "trigger",
- "Environment setup",
- "compile",
- "findbugs",
- "Zip build"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY3TYM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 96633,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176382,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY3jYM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 96908,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176383,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY4V0M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 8311,
- "builder": "win7_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360179999,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "content_unittests",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY6wcM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 81675,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360180324,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "browser_tests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY8y4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 48283,
- "builder": "win",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176384,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY9C4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 108936,
- "builder": "win_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176384,
- "steps_failed": [
- "interactive_ui_tests"
- ],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "installer_util_unittests",
- "mini_installer_test",
- "sync_integration_tests",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "nacl_integration",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYkk4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 81631,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176380,
- "steps_failed": [
- "browser_tests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "components_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "aura_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYox8M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 17853,
- "builder": "android_clang_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176349,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "update_clang",
- "cleanup_temp",
- "build",
- "Environment setup",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYpB8M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 24496,
- "builder": "ios_rel_device",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176377,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYq0YM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 8281,
- "builder": "win7_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176384,
- "steps_failed": [
- "content_unittests"
- ],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "unit_tests",
- "content_browsertests",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYrEYM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 108973,
- "builder": "win_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360180000,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYwj4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 25575,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176349,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "content_unittests",
- "media_unittests",
- "net_unittests",
- "ui_unittests",
- "sql_unittests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYwz4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 15073,
- "builder": "linux_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176379,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "content_unittests",
- "views_unittests",
- "aura_unittests",
- "compositor_unittests",
- "unit_tests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQYxD4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 81884,
- "builder": "linux_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360176381,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "android_dbg_triggered_tests/28973_triggered_ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY-VUM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 28973,
- "builder": "android_dbg_triggered_tests",
- "clobber": false,
- "completed": true,
- "init_time": 1360256765.102551,
- "is_stewed": false,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUYnI_pBQwLEghQYXRjaFNldBjxLgwLEgxUcnlKb2JSZXN1bHQY-VUM",
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360177384,
- "steps_failed": [
- "build",
- "test_report"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "Environment setup",
- "Download and extract build",
- "Run tests",
- "Reboot devices",
- "device_status_check",
- "TestWebKitAPI",
- "android_webview_unittests",
- "base_unittests",
- "cc_unittests",
- "components_unittests",
- "content_unittests",
- "gpu_unittests",
- "ipc_tests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "ui_unittests",
- "unit_tests",
- "webkit_compositor_bindings_unittests",
- "webkit_unit_tests",
- "androidwebview_instrumentation_tests",
- "chromiumtestshell_instrumentation_tests",
- "contentshell_instrumentation_tests",
- "logcat_dump"
- ],
- "tries": 0
- }
- }
- }
- }
- }
- }
-}
diff --git a/tests/chromium.12253015.json b/tests/chromium.12253015.json
deleted file mode 100755
index 733003e..0000000
--- a/tests/chromium.12253015.json
+++ /dev/null
@@ -1,1091 +0,0 @@
-{
- "__persistent_type__": "PendingQueue",
- "pending_commits": {
- "12253015": {
- "__persistent_type__": "PendingCommit",
- "base_url": "svn://svn.chromium.org/chrome/trunk/src",
- "description": "Fix dependency on scoped_ptr::reset sequencing in IndexedDB code.\n\nscoped_ptr<T>::reset() currently guarantees that it deletes the old\nstored pointer before assigning its argument to the stored pointer.\nThis is unsafe, because getting the deleter may result in the\ndestruction of the scoped_ptr<T> itself. unique_ptr<T> addresses this by\nassigning its argument to the stored pointer before deleting the old\nvalue of the stored pointer.\n\nUnfortunately, this breaks code that assumes that the value of the\nscoped_ptr will not change during scoped_ptr::reset() before destruction\nof the old value is complete.\n\nBUG=176091\n",
- "files": [
- "content/browser/in_process_webkit/indexed_db_dispatcher_host.cc",
- "content/browser/in_process_webkit/indexed_db_dispatcher_host.h"
- ],
- "issue": 12253015,
- "messages": [
- {
- "approval": false,
- "date": "2013-02-14 00:10:57.524660",
- "disapproval": false,
- "recipients": [
- "dcheng@chromium.org",
- "alecflett@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "jam@chromium.org",
- "darin-cc@chromium.org",
- "ajwong@chromium.org"
- ],
- "sender": "commit-bot@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-13 22:40:22.541970",
- "disapproval": false,
- "recipients": [
- "dcheng@chromium.org",
- "alecflett@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "jam@chromium.org",
- "darin-cc@chromium.org",
- "ajwong@chromium.org"
- ],
- "sender": "dcheng@chromium.org"
- },
- {
- "approval": true,
- "date": "2013-02-13 23:31:16.098120",
- "disapproval": false,
- "recipients": [
- "dcheng@chromium.org",
- "alecflett@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "jam@chromium.org",
- "darin-cc@chromium.org",
- "ajwong@chromium.org"
- ],
- "sender": "alecflett@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-02-13 23:51:36.277590",
- "disapproval": false,
- "recipients": [
- "dcheng@chromium.org",
- "alecflett@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "jam@chromium.org",
- "darin-cc@chromium.org",
- "ajwong@chromium.org"
- ],
- "sender": "commit-bot@chromium.org"
- }
- ],
- "owner": "dcheng@chromium.org",
- "patchset": 1,
- "relpath": "",
- "reviewers": [
- "alecflett@chromium.org"
- ],
- "revision": 182374,
- "verifications": {
- "presubmit": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "project_bases": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "reviewer_lgtm": {
- "__persistent_type__": "LgtmStatus",
- "error_message": null,
- "state": 0
- },
- "tree status": {
- "__persistent_type__": "TreeStatus",
- "error_message": null,
- "issue": 12253015,
- "last_tree_status": "",
- "tree_status_url": "http://chromium-status.appspot.com"
- },
- "try job rietveld": {
- "__persistent_type__": "RietveldTryJobs",
- "error_message": null,
- "irrelevant": [
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYwT4M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY0w8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYqUYM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY1Q8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYpB8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYsW0M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY1A8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYyWUM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY4l0M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYqkYM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY8i4M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYkU4M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY-lUM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY-1UM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYwz4M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY1g8M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYy2UM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYuxcM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYymUM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYq0YM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYwj4M",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYrEYM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY-VUM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYiicM",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY4V0M"
- ],
- "pendings": [],
- "skipped": false,
- "step_verifiers": [
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_chromeos",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "aura_unittests",
- "chromeos_unittests",
- "components_unittests",
- "dbus_unittests",
- "device_unittests",
- "sandbox_linux_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_dbg",
- "steps": [
- "build"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chromedriver_unittests",
- "components_unittests",
- "nacl_integration",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_aura",
- "steps": [
- "aura_unittests",
- "browser_tests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win7_aura",
- "steps": [
- "aura_unittests",
- "browser_tests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests",
- "ash_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_clang_dbg",
- "steps": [
- "build"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_dbg_simulator",
- "steps": [
- "compile",
- "base_unittests",
- "content_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "ui_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_rel_device",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_clang",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chrome_frame_net_tests",
- "chrome_frame_tests",
- "chrome_frame_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "installer_util_unittests",
- "mini_installer_test",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chromedriver_unittests",
- "components_unittests",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobTriggeredSteps",
- "builder_name": "android_dbg_triggered_tests",
- "steps": {
- "build": "build"
- },
- "trigger_name": "android_dbg"
- }
- ],
- "try_jobs": {
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY1g8M_old": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10475,
- "builder": "win7_aura",
- "clobber": false,
- "completed": false,
- "init_time": 1360826040.4839389,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "browser_tests"
- ],
- "revision": "HEAD",
- "started": 1360825991,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler"
- ],
- "tries": 2
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY2jYM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10813,
- "builder": "win7_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1360864189.7725151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "ash_unittests",
- "aura_unittests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests"
- ],
- "revision": "HEAD",
- "started": 1360864082,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "content_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "unit_tests",
- "content_browsertests",
- "process_dumps"
- ],
- "tries": 3
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY410M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 84539,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "aura_unittests",
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chromeos_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "device_unittests",
- "gpu_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1360863115,
- "steps_failed": [
- "browser_tests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "components_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "aura_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_browsertests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY7AcM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 27626,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "compile",
- "content_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "ui_unittests"
- ],
- "revision": "HEAD",
- "started": 1360863114,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "content_unittests",
- "media_unittests",
- "net_unittests",
- "ui_unittests",
- "sql_unittests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY8y4M_old": {
- "__persistent_type__": "RietveldTryJob",
- "build": 111583,
- "builder": "win_rel",
- "clobber": true,
- "completed": false,
- "init_time": 1360809218.1383779,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chrome_frame_net_tests",
- "chrome_frame_tests",
- "chrome_frame_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "installer_util_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "mini_installer_test",
- "nacl_integration",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sql_unittests",
- "sync_integration_tests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1360809203,
- "steps_failed": [
- "update_scripts"
- ],
- "steps_passed": [
- "svnkill",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY9C4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 17272,
- "builder": "linux_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "aura_unittests",
- "browser_tests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests"
- ],
- "revision": "HEAD",
- "started": 1360863114,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "content_unittests",
- "views_unittests",
- "aura_unittests",
- "compositor_unittests",
- "unit_tests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQY9S4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 84573,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1360867308.2716911,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "browser_tests"
- ],
- "revision": "HEAD",
- "started": 1360867169,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "browser_tests"
- ],
- "tries": 2
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYiycM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 84020,
- "builder": "linux_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1360863122,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYkk4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 36320,
- "builder": "android_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "build"
- ],
- "revision": "HEAD",
- "started": 1360863112,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "trigger",
- "Environment setup",
- "Check licenses for WebView",
- "compile",
- "findbugs",
- "Zip build"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYrUYM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 28767,
- "builder": "mac",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1360863125,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYsm0M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 49499,
- "builder": "win",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1360863125,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "process_dumps"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYvBcM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 26517,
- "builder": "ios_rel_device",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1360863114,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYxD4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 19962,
- "builder": "android_clang_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "build"
- ],
- "revision": "HEAD",
- "started": 1360863111,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "update_clang",
- "cleanup_temp",
- "build",
- "Environment setup",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYxT4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 99083,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chromedriver_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "nacl_integration",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sql_unittests",
- "sync_integration_tests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1360863125,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYzGUM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 99713,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1360863146.4530151,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chromedriver_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "nacl_integration",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sql_unittests",
- "sync_integration_tests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1360863126,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 1
- },
- "android_dbg_triggered_tests/30874_triggered_ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYqUYM": {
- "__persistent_type__": "RietveldTryJob",
- "build": 30874,
- "builder": "android_dbg_triggered_tests",
- "clobber": false,
- "completed": true,
- "init_time": 1360809176.8618159,
- "is_stewed": false,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYqUYM",
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360800523,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "Environment setup",
- "Download and extract build",
- "Run tests",
- "Reboot devices",
- "device_status_check",
- "TestWebKitAPI",
- "android_webview_unittests",
- "base_unittests",
- "cc_unittests",
- "components_unittests",
- "content_unittests",
- "gpu_unittests",
- "ipc_tests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "ui_unittests",
- "unit_tests",
- "webkit_compositor_bindings_unittests",
- "webkit_unit_tests",
- "androidwebview_instrumentation_tests",
- "chromiumtestshell_instrumentation_tests",
- "contentshell_instrumentation_tests",
- "logcat_dump",
- "test_report"
- ],
- "tries": 0
- },
- "android_dbg_triggered_tests/31069_triggered_ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYkk4M": {
- "__persistent_type__": "RietveldTryJob",
- "build": 31069,
- "builder": "android_dbg_triggered_tests",
- "clobber": false,
- "completed": true,
- "init_time": 1360865395.6493821,
- "is_stewed": false,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY1-7rBQwLEghQYXRjaFNldBjSDwwLEgxUcnlKb2JSZXN1bHQYkk4M",
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1360865454,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "Environment setup",
- "Download and extract build",
- "Run tests",
- "Reboot devices",
- "device_status_check",
- "TestWebKitAPI",
- "android_webview_unittests",
- "base_unittests",
- "cc_unittests",
- "components_unittests",
- "content_unittests",
- "gpu_unittests",
- "ipc_tests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "ui_unittests",
- "unit_tests",
- "webkit_compositor_bindings_unittests",
- "webkit_unit_tests",
- "androidwebview_instrumentation_tests",
- "chromiumtestshell_instrumentation_tests",
- "contentshell_instrumentation_tests",
- "logcat_dump",
- "test_report"
- ],
- "tries": 0
- }
- }
- }
- }
- }
- }
-}
diff --git a/tests/chromium.12633013.json b/tests/chromium.12633013.json
deleted file mode 100755
index 9cbed39..0000000
--- a/tests/chromium.12633013.json
+++ /dev/null
@@ -1,1197 +0,0 @@
-{
- "__persistent_type__": "PendingQueue",
- "pending_commits": {
- "12633013": {
- "__persistent_type__": "PendingCommit",
- "base_url": "svn://svn.chromium.org/chrome/trunk/src",
- "description": "Improve the v8::Object uniqueness check in V8ValueConverterImpl\n\nPreviously it used a set with identity hashes of the objects.\nThose are not necessarily unique, so now it also stores the handle (with the id hashes as keys), and checks the handle equality for objects with identical hashes.\n\n\nBUG=177662\n",
- "files": [
- "content/renderer/v8_value_converter_impl.cc",
- "content/renderer/v8_value_converter_impl.h",
- "content/renderer/v8_value_converter_impl_unittest.cc"
- ],
- "issue": 12633013,
- "messages": [
- {
- "approval": false,
- "date": "2013-03-14 14:24:19.801300",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "vabr@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-03-14 18:29:21.200190",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "vabr@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-03-14 17:21:09.585570",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "eaugusti@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-03-14 18:19:35.532920",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "eaugusti@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-03-14 17:59:37.322420",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "vabr@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-03-15 08:58:16.558770",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "svenpanne@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-03-15 14:37:45.719170",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "vabr@chromium.org"
- },
- {
- "approval": true,
- "date": "2013-03-15 16:55:55.960590",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "eaugusti@chromium.org"
- },
- {
- "approval": false,
- "date": "2013-03-15 17:00:08.433720",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "jamesr@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "vabr@chromium.org"
- },
- {
- "approval": true,
- "date": "2013-03-18 01:23:55.542360",
- "disapproval": false,
- "recipients": [
- "vabr@chromium.org",
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "jamesr@chromium.org",
- "chromium-reviews@chromium.org",
- "joi+watch-content@chromium.org",
- "darin-cc@chromium.org",
- "jam@chromium.org"
- ],
- "sender": "jamesr@chromium.org"
- }
- ],
- "owner": "vabr@chromium.org",
- "patchset": 1,
- "relpath": "",
- "reviewers": [
- "eaugusti@chromium.org",
- "asargent@chromium.org",
- "svenpanne@chromium.org",
- "jamesr@chromium.org"
- ],
- "revision": 188696,
- "verifications": {
- "presubmit": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "project_bases": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "reviewer_lgtm": {
- "__persistent_type__": "LgtmStatus",
- "error_message": null,
- "state": 0
- },
- "tree status": {
- "__persistent_type__": "TreeStatus",
- "error_message": null,
- "issue": 12633013,
- "last_tree_status": "",
- "tree_status_url": "http://chromium-status.appspot.com"
- },
- "try job rietveld": {
- "__persistent_type__": "RietveldTryJobs",
- "error_message": null,
- "irrelevant": [
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNuMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GKnDAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNOMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNyMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNSMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNWMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNaMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIxCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GJp1DA",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNeMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNiMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GN2MAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNmMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GOCMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GN-MAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GN6MAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNqMAQw",
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNKMAQw"
- ],
- "pendings": [],
- "skipped": false,
- "step_verifiers": [
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win_x64_rel",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_chromeos",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "aura_unittests",
- "ash_unittests",
- "chromeos_unittests",
- "components_unittests",
- "dbus_unittests",
- "device_unittests",
- "sandbox_linux_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_chromeos_clang",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_dbg",
- "steps": [
- "slave_steps"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chromedriver_unittests",
- "components_unittests",
- "nacl_integration",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_aura",
- "steps": [
- "aura_unittests",
- "browser_tests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win7_aura",
- "steps": [
- "aura_unittests",
- "browser_tests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests",
- "ash_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_clang_dbg",
- "steps": [
- "slave_steps"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_dbg_simulator",
- "steps": [
- "compile",
- "base_unittests",
- "content_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "ui_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_rel_device",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_clang",
- "steps": [
- "compile"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chrome_frame_net_tests",
- "chrome_frame_tests",
- "chrome_frame_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "installer_util_unittests",
- "mini_installer_test",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chromedriver_unittests",
- "components_unittests",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobTriggeredSteps",
- "builder_name": "android_dbg_triggered_tests",
- "steps": {
- "slave_steps": "slave_steps"
- },
- "trigger_name": "android_dbg"
- }
- ],
- "try_jobs": {
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIxCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GOsHDA": {
- "__persistent_type__": "RietveldTryJob",
- "build": 20733,
- "builder": "win7_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "ash_unittests",
- "aura_unittests",
- "browser_tests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests"
- ],
- "revision": "HEAD",
- "started": 1363595731,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "content_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "unit_tests",
- "browser_tests",
- "content_browsertests",
- "process_dumps"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GIH6AQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 35676,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "compile",
- "content_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "ui_unittests"
- ],
- "revision": "HEAD",
- "started": 1363595722,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "content_unittests",
- "media_unittests",
- "net_unittests",
- "ui_unittests",
- "sql_unittests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GImhAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 108404,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chromedriver_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "nacl_integration",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sql_unittests",
- "sync_integration_tests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GIqhAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 3482,
- "builder": "win_x64_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "process_dumps"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GJnyAQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 45419,
- "builder": "android_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "slave_steps"
- ],
- "revision": "HEAD",
- "started": 1363595722,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "slave_steps",
- "trigger",
- "Environment setup",
- "Check licenses for WebView",
- "compile",
- "findbugs",
- "Zip build"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GJryAQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 16028,
- "builder": "linux_chromeos_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1363595729,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GJvyAQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 109927,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chromedriver_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "nacl_integration",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sql_unittests",
- "sync_integration_tests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "sync_integration_tests",
- "nacl_integration"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GKGZAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 92062,
- "builder": "linux_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GLHqAQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 28024,
- "builder": "android_clang_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "slave_steps"
- ],
- "revision": "HEAD",
- "started": 1363595722,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "update_clang",
- "cleanup_temp",
- "slave_steps",
- "Environment setup",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GLmRAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 94239,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "ash_unittests",
- "aura_unittests",
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chromeos_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "device_unittests",
- "gpu_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "components_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "aura_unittests",
- "ash_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GMriAQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 36259,
- "builder": "mac",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GMviAQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 123715,
- "builder": "win_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "base_unittests",
- "browser_tests",
- "cacheinvalidation_unittests",
- "check_deps",
- "chrome_frame_net_tests",
- "chrome_frame_tests",
- "chrome_frame_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "installer_util_unittests",
- "interactive_ui_tests",
- "ipc_tests",
- "jingle_unittests",
- "media_unittests",
- "mini_installer_test",
- "nacl_integration",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "sql_unittests",
- "sync_integration_tests",
- "sync_unit_tests",
- "unit_tests"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromedriver_unittests",
- "components_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "installer_util_unittests",
- "mini_installer_test",
- "sync_integration_tests",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "chrome_frame_tests",
- "nacl_integration",
- "process_dumps"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNGJAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 25112,
- "builder": "linux_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "aura_unittests",
- "browser_tests",
- "compositor_unittests",
- "content_browsertests",
- "content_unittests",
- "interactive_ui_tests",
- "unit_tests",
- "views_unittests"
- ],
- "revision": "HEAD",
- "started": 1363595729,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "content_unittests",
- "views_unittests",
- "aura_unittests",
- "compositor_unittests",
- "unit_tests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNKJAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 57236,
- "builder": "win",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1363595730,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "process_dumps"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GNmwAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 45426,
- "builder": "android_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1363599007.1860321,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "slave_steps"
- ],
- "revision": "HEAD",
- "started": 1363598970,
- "steps_failed": [
- "slave_steps",
- "findbugs"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "Environment setup",
- "Check licenses for WebView",
- "compile",
- "Zip build"
- ],
- "tries": 2
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GOmBAgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 34321,
- "builder": "ios_rel_device",
- "clobber": false,
- "completed": true,
- "init_time": 1363595745.427537,
- "is_stewed": false,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1363595722,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "android_dbg_triggered_tests/38700_triggered_ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GJnyAQw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 38700,
- "builder": "android_dbg_triggered_tests",
- "clobber": false,
- "completed": true,
- "init_time": 1363596552.4653699,
- "is_stewed": false,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYtYeDBgwLEghQYXRjaFNldBi5lAEMCxIMVHJ5Sm9iUmVzdWx0GJnyAQw",
- "requested_steps": [],
- "revision": "HEAD",
- "started": 1363596645,
- "steps_failed": [
- "slave_steps",
- "webkit_unit_tests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "Environment setup",
- "Download and extract build",
- "Run tests",
- "Environment setup",
- "Reboot devices",
- "device_status_check",
- "TestWebKitAPI",
- "android_webview_unittests",
- "base_unittests",
- "cc_unittests",
- "components_unittests",
- "content_unittests",
- "gpu_unittests",
- "ipc_tests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "ui_unittests",
- "unit_tests",
- "webkit_compositor_bindings_unittests",
- "androidwebview_instrumentation_tests",
- "chromiumtestshell_instrumentation_tests",
- "contentshell_instrumentation_tests",
- "logcat_dump",
- "test_report"
- ],
- "tries": 0
- }
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/tests/chromium.31337.json b/tests/chromium.31337.json
deleted file mode 100644
index 5fcf0aa..0000000
--- a/tests/chromium.31337.json
+++ /dev/null
@@ -1,1063 +0,0 @@
-{
- "__persistent_type__": "PendingQueue",
- "pending_commits": {
- "31337": {
- "__persistent_type__": "PendingCommit",
- "base_url": "svn://svn.chromium.org/chrome/trunk/src",
- "description": "Remove compositor_test_support\n\nIt is not needed anymore after https://codereview.chromium.org/11415089/\n\nBUG=159278\n",
- "files": [
- "ash/ash.gyp",
- "ash/shell/content_client/shell_browser_main_parts.cc",
- "ash/test/test_suite.cc",
- "chrome/chrome_tests_unit.gypi",
- "chrome/test/base/view_event_test_base.cc",
- "ui/app_list/app_list.gyp",
- "ui/app_list/test/app_list_test_suite.cc",
- "ui/aura/aura.gyp",
- "ui/aura/bench/bench_main.cc",
- "ui/aura/demo/demo_main.cc",
- "ui/aura/test/test_suite.cc",
- "ui/compositor/compositor.gyp",
- "ui/compositor/test/test_suite.cc",
- "ui/views/run_all_unittests.cc",
- "ui/views/views.gyp",
- "webkit/gpu/webkit_gpu.gypi",
- "ui/compositor/test/compositor_test_support.cc",
- "ui/compositor/test/compositor_test_support.h"
- ],
- "issue": 31337,
- "messages": [
- {
- "approval": true,
- "date": "2012-11-26 23:09:14.950530",
- "disapproval": false,
- "recipients": [
- "piman@chromium.org",
- "ben@chromium.org",
- "chromium-reviews@chromium.org",
- "sadrul@chromium.org",
- "backer@chromium.org",
- "vollick@chromium.org",
- "tfarina@chromium.org",
- "ben+watch@chromium.org",
- "apatrick@chromium.org",
- "darin-cc@chromium.org",
- "piman+watch@chromium.org",
- "cc-bugs@chromium.org"
- ],
- "sender": "ben@chromium.org"
- },
- {
- "approval": false,
- "date": "2012-11-26 22:16:25.886110",
- "disapproval": false,
- "recipients": [
- "piman@chromium.org",
- "ben@chromium.org",
- "chromium-reviews@chromium.org",
- "sadrul@chromium.org",
- "backer@chromium.org",
- "vollick@chromium.org",
- "tfarina@chromium.org",
- "ben+watch@chromium.org",
- "apatrick@chromium.org",
- "darin-cc@chromium.org",
- "piman+watch@chromium.org",
- "cc-bugs@chromium.org"
- ],
- "sender": "piman@chromium.org"
- }
- ],
- "owner": "piman@chromium.org",
- "patchset": 1,
- "relpath": "",
- "reviewers": [
- "ben@chromium.org"
- ],
- "revision": 169538,
- "verifications": {
- "presubmit": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "project_bases": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "reviewer_lgtm": {
- "__persistent_type__": "LgtmStatus",
- "error_message": null,
- "state": 0
- },
- "tree status": {
- "__persistent_type__": "TreeStatus",
- "error_message": null,
- "issue": 0,
- "tree_status_url": "http://chromium-status.appspot.com"
- },
- "try job rietveld": {
- "__persistent_type__": "RietveldTryJobs",
- "step_verifiers" : [
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_dbg",
- "steps": ["build"]
- },
- {
- "__persistent_type__": "TryJobTriggeredSteps",
- "builder_name": "android_dbg_triggered_tests",
- "trigger_name": "android_dbg",
- "steps": {
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build"
- }
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_dbg_simulator",
- "steps": [
- "compile",
- "base_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "sql_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_rel_device",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_chromeos",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "sandbox_linux_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_clang",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "nacl_integration",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win_rel",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "installer_util_unittests",
- "mini_installer_test",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ]
- }
- ],
- "error_message": null,
- "irrelevant": [
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjBPgw"
- ],
- "pendings": [],
- "skipped": false,
- "try_jobs": {
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiKJww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 38286,
- "builder": "win",
- "clobber": false,
- "completed": true,
- "init_time": 1353978189.597217,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1353976103,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "process_dumps"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiiHww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 76339,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353982979.267107,
- "parent_key": null,
- "requested_steps": [
- "sync_integration_tests"
- ],
- "revision": "HEAD",
- "started": 1353976234,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "sync_integration_tests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjBPgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 83507,
- "builder": "win_rel",
- "clobber": false,
- "completed": false,
- "init_time": 1353978256.387578,
- "parent_key": null,
- "requested_steps": [
- "sync_integration_tests"
- ],
- "revision": "HEAD",
- "started": 1353976103,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjRDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 1703,
- "builder": "linux_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.587522,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965617,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "cacheinvalidation_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ui_unittests",
- "views_unittests",
- "aura_unittests",
- "compositor_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjSDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 61429,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.150669,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965617,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "ui_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjTDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 2913,
- "builder": "android_clang_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.445479,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965618,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "update_clang",
- "cleanup_temp",
- "build",
- "Environment setup",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjUDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10314,
- "builder": "linux_asan",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.377217,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965618,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "cacheinvalidation_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjVDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 8591,
- "builder": "linux_chromeos_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.66063,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965628,
- "steps_failed": [
- "compile"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjWDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 5470,
- "builder": "win_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.79809,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965629,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "content_unittests",
- "device_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "unit_tests",
- "browser_tests",
- "content_browsertests",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjXDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 83395,
- "builder": "win_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.256027,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965631,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "views_unittests",
- "browser_tests",
- "content_browsertests",
- "installer_util_unittests",
- "mini_installer_test",
- "webkit_compositor_bindings_unittests",
- "sizes",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "chrome_frame_tests",
- "nacl_integration",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjYDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 9542,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1353976069.08479,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965632,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "crypto_unittests",
- "sql_unittests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjZDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 9249,
- "builder": "ios_rel_device",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.875008,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965632,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjZNgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 17840,
- "builder": "mac",
- "clobber": false,
- "completed": true,
- "init_time": 1353977599.814764,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1353976749,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjaDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 17075,
- "builder": "android_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.224824,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965633,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "trigger",
- "Environment setup",
- "compile",
- "findbugs",
- "Zip build"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjbDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 2605,
- "builder": "linux_chromeos_asan",
- "clobber": false,
- "completed": true,
- "init_time": 1353982979.269344,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353972562,
- "steps_failed": [
- "sandbox_linux_unittests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "ui_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjcDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 66206,
- "builder": "linux_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.016905,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965633,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjdDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10661,
- "builder": "mac_asan",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.933554,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965636,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "webkit_compositor_bindings_unittests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjeDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 76261,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.489474,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965637,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "webkit_compositor_bindings_unittests",
- "sizes",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjfDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 77827,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.707563,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965637,
- "steps_failed": [
- "content_browsertests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "sandbox_linux_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "browser_tests",
- "webkit_compositor_bindings_unittests",
- "sizes",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjgDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 77929,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353977599.816735,
- "parent_key": null,
- "requested_steps": [
- "content_browsertests",
- "sync_integration_tests"
- ],
- "revision": "HEAD",
- "started": 1353976102,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "content_browsertests",
- "sync_integration_tests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjxLgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 9616,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1353977599.824174,
- "parent_key": null,
- "requested_steps": [
- "googleurl_unittests"
- ],
- "revision": "HEAD",
- "started": 1353976102,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "googleurl_unittests"
- ],
- "tries": 1
- },
- "android_dbg_triggered_tests/14382_triggered_ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjaDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 14382,
- "builder": "android_dbg_triggered_tests",
- "clobber": false,
- "completed": true,
- "init_time": 1353976069.296137,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjaDww",
- "requested_steps": [],
- "revision": "169445",
- "started": 1353966702,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "Environment setup",
- "Device Status Check",
- "Download and extract build",
- "Rebooting phones",
- "base_unittests",
- "cc_unittests",
- "content_unittests",
- "gpu_unittests",
- "ipc_tests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "ui_unittests",
- "unit_tests",
- "webkit_compositor_bindings_unittests",
- "Install ContentShell.apk",
- "Run instrumentation tests ContentShellTest",
- "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ContentShellTest",
- "Install ChromiumTestShell.apk",
- "Run instrumentation tests ChromiumTestShellTest",
- "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ChromiumTestShellTest",
- "Logcat dump"
- ],
- "tries": 0
- }
- }
- }
- }
- }
- }
-}
diff --git a/tests/chromium.666.json b/tests/chromium.666.json
deleted file mode 100644
index 210b1d5..0000000
--- a/tests/chromium.666.json
+++ /dev/null
@@ -1,1071 +0,0 @@
-{
- "__persistent_type__": "PendingQueue",
- "pending_commits": {
- "666": {
- "__persistent_type__": "PendingCommit",
- "base_url": "svn://svn.chromium.org/chrome/trunk/src",
- "description": "Test swarm tests in CQ\n",
- "files": [
- "swarm/fake_file.cc"
- ],
- "issue": 666,
- "messages": [],
- "owner": "swarm@chromium.org",
- "patchset": 1,
- "relpath": "",
- "reviewers": [
- "swarm-reviewer@chromium.org"
- ],
- "revision": 169538,
- "verifications": {
- "presubmit": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "project_bases": {
- "__persistent_type__": "SimpleStatus",
- "error_message": null,
- "state": 0
- },
- "reviewer_lgtm": {
- "__persistent_type__": "LgtmStatus",
- "error_message": null,
- "state": 0
- },
- "tree status": {
- "__persistent_type__": "TreeStatus",
- "error_message": null,
- "issue": 0,
- "tree_status_url": "http://chromium-status.appspot.com"
- },
- "try job rietveld": {
- "__persistent_type__": "RietveldTryJobs",
- "step_verifiers" : [
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "android_dbg",
- "steps": ["build"]
- },
- {
- "__persistent_type__": "TryJobTriggeredSteps",
- "builder_name": "android_dbg_triggered_tests",
- "trigger_name": "android_dbg",
- "steps": {
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build",
- "build": "build"
- }
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_dbg_simulator",
- "steps": [
- "compile",
- "base_unittests",
- "crypto_unittests",
- "googleurl_unittests",
- "sql_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "ios_rel_device",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_chromeos",
- "steps": [
- "base_unittests",
- "browser_tests",
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "unit_tests",
- "sandbox_linux_unittests"
- ]
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "linux_clang",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobTriggeredOrNormalSteps",
- "builder_name": "swarm_triggered",
- "trigger_name": "linux_rel",
- "steps": {
- "base_unittests": "base_unittests_swarm",
- "browser_tests": "browser_tests_swarm",
- "net_unittests": "net_unittests_swarm",
- "unit_tests": "unit_tests_swarm"
- },
- "trigger_bot_steps": [
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "nacl_integration",
- "remoting_unittests",
- "sandbox_linux_unittests",
- "sync_integration_tests"
- ],
- "use_triggered_bot": false
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "mac",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobTriggeredOrNormalSteps",
- "builder_name": "swarm_triggered",
- "trigger_name": "mac_rel",
- "steps": {
- "base_unittests": "base_unittests_swarm",
- "browser_tests": "browser_tests_swarm",
- "net_unittests": "net_unittests_swarm",
- "unit_tests": "unit_tests_swarm"
- },
- "trigger_bot_steps": [
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ],
- "use_triggered_bot": false
- },
- {
- "__persistent_type__": "TryJobSteps",
- "builder_name": "win",
- "steps": ["compile"]
- },
- {
- "__persistent_type__": "TryJobTriggeredOrNormalSteps",
- "builder_name": "swarm_triggered",
- "trigger_name": "win_rel",
- "steps": {
- "base_unittests": "base_unittests_swarm",
- "browser_tests": "browser_tests_swarm",
- "net_unittests": "net_unittests_swarm",
- "unit_tests": "unit_tests_swarm"
- },
- "trigger_bot_steps": [
- "check_deps",
- "cacheinvalidation_unittests",
- "content_browsertests",
- "content_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "ipc_tests",
- "interactive_ui_tests",
- "jingle_unittests",
- "media_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "installer_util_unittests",
- "mini_installer_test",
- "nacl_integration",
- "remoting_unittests",
- "sync_integration_tests"
- ],
- "use_triggered_bot": false
- }
- ],
- "error_message": null,
- "irrelevant": [
- ],
- "pendings": [],
- "skipped": false,
- "try_jobs": {
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiKJww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 38286,
- "builder": "win",
- "clobber": false,
- "completed": true,
- "init_time": 1353978189.597217,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1353976103,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "process_dumps"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBiiHww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 76339,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353982979.267107,
- "parent_key": null,
- "requested_steps": [
- "sync_integration_tests"
- ],
- "revision": "HEAD",
- "started": 1353976234,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "sync_integration_tests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjBPgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 83507,
- "builder": "win_rel",
- "clobber": false,
- "completed": false,
- "init_time": 1353978256.387578,
- "parent_key": null,
- "requested_steps": [
- "sync_integration_tests"
- ],
- "revision": "HEAD",
- "started": 1353976103,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "sync_integration_tests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjRDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 1703,
- "builder": "linux_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.587522,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965617,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "cacheinvalidation_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ui_unittests",
- "views_unittests",
- "aura_unittests",
- "compositor_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjSDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 61429,
- "builder": "linux_chromeos",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.150669,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965617,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "sandbox_linux_unittests",
- "ui_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjTDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 2913,
- "builder": "android_clang_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.445479,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965618,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "update_clang",
- "cleanup_temp",
- "build",
- "Environment setup",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjUDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10314,
- "builder": "linux_asan",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.377217,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965618,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "cacheinvalidation_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjVDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 8591,
- "builder": "linux_chromeos_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.66063,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965628,
- "steps_failed": [
- "compile"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjWDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 5470,
- "builder": "win_aura",
- "clobber": false,
- "completed": true,
- "init_time": 1353976067.79809,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965629,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "content_unittests",
- "device_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "unit_tests",
- "browser_tests",
- "content_browsertests",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjXDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 83395,
- "builder": "win_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.256027,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965631,
- "steps_failed": [],
- "steps_passed": [
- "svnkill",
- "update_scripts",
- "taskkill",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "start_crash_handler",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "ipc_tests",
- "sync_unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "views_unittests",
- "content_browsertests",
- "installer_util_unittests",
- "mini_installer_test",
- "webkit_compositor_bindings_unittests",
- "sizes",
- "chrome_frame_net_tests",
- "chrome_frame_unittests",
- "chrome_frame_tests",
- "nacl_integration",
- "process_dumps"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjYDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 9542,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1353976069.08479,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965632,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "base_unittests",
- "crypto_unittests",
- "sql_unittests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjZDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 9249,
- "builder": "ios_rel_device",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.875008,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965632,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjZNgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 17840,
- "builder": "mac",
- "clobber": false,
- "completed": true,
- "init_time": 1353977599.814764,
- "parent_key": null,
- "requested_steps": [
- "compile"
- ],
- "revision": "HEAD",
- "started": 1353976749,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjaDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 17075,
- "builder": "android_dbg",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.224824,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965633,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "trigger",
- "Environment setup",
- "compile",
- "findbugs",
- "Zip build"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjbDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 2605,
- "builder": "linux_chromeos_asan",
- "clobber": false,
- "completed": true,
- "init_time": 1353982979.269344,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353972562,
- "steps_failed": [
- "sandbox_linux_unittests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "chromeos_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "content_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "ui_unittests",
- "views_unittests",
- "aura_unittests",
- "ash_unittests",
- "compositor_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "browser_tests",
- "content_browsertests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjcDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 66206,
- "builder": "linux_clang",
- "clobber": false,
- "completed": true,
- "init_time": 1353976068.016905,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965633,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjdDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 10661,
- "builder": "mac_asan",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.933554,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965636,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "base_unittests",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "net_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "ipc_tests",
- "sync_unit_tests",
- "unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "browser_tests",
- "content_browsertests",
- "webkit_compositor_bindings_unittests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjeDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 76261,
- "builder": "mac_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.489474,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965637,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "update_clang",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "ipc_tests",
- "sync_unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "content_browsertests",
- "webkit_compositor_bindings_unittests",
- "sizes",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjfDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 77827,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353976066.707563,
- "parent_key": null,
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965637,
- "steps_failed": [
- "content_browsertests"
- ],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "interactive_ui_tests",
- "check_deps2git",
- "check_deps2submodules",
- "check_deps",
- "cacheinvalidation_unittests",
- "cc_unittests",
- "crypto_unittests",
- "dbus_unittests",
- "gpu_unittests",
- "jingle_unittests",
- "device_unittests",
- "media_unittests",
- "ppapi_unittests",
- "printing_unittests",
- "remoting_unittests",
- "test_shell_tests",
- "sandbox_linux_unittests",
- "ipc_tests",
- "sync_unit_tests",
- "sql_unittests",
- "ui_unittests",
- "content_unittests",
- "webkit_compositor_bindings_unittests",
- "sizes",
- "nacl_integration"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjgDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 77929,
- "builder": "linux_rel",
- "clobber": false,
- "completed": true,
- "init_time": 1353977599.816735,
- "parent_key": null,
- "requested_steps": [
- "content_browsertests",
- "sync_integration_tests"
- ],
- "revision": "HEAD",
- "started": 1353976102,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "content_browsertests",
- "sync_integration_tests"
- ],
- "tries": 1
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjxLgw": {
- "__persistent_type__": "RietveldTryJob",
- "build": 9616,
- "builder": "ios_dbg_simulator",
- "clobber": false,
- "completed": true,
- "init_time": 1353977599.824174,
- "parent_key": null,
- "requested_steps": [
- "googleurl_unittests"
- ],
- "revision": "HEAD",
- "started": 1353976102,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "runhooks",
- "cleanup_temp",
- "compile",
- "googleurl_unittests"
- ],
- "tries": 1
- },
- "android_dbg_triggered_tests/14382_triggered_ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjaDww": {
- "__persistent_type__": "RietveldTryJob",
- "build": 14382,
- "builder": "android_dbg_triggered_tests",
- "clobber": false,
- "completed": true,
- "init_time": 1353976069.296137,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjaDww",
- "requested_steps": [],
- "revision": "169445",
- "started": 1353966702,
- "steps_failed": [],
- "steps_passed": [
- "update_scripts",
- "update",
- "apply_issue",
- "cleanup_temp",
- "build",
- "Environment setup",
- "Device Status Check",
- "Download and extract build",
- "Rebooting phones",
- "base_unittests",
- "cc_unittests",
- "content_unittests",
- "gpu_unittests",
- "ipc_tests",
- "media_unittests",
- "net_unittests",
- "sql_unittests",
- "sync_unit_tests",
- "ui_unittests",
- "unit_tests",
- "webkit_compositor_bindings_unittests",
- "Install ContentShell.apk",
- "Run instrumentation tests ContentShellTest",
- "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ContentShellTest",
- "Install ChromiumTestShell.apk",
- "Run instrumentation tests ChromiumTestShellTest",
- "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ChromiumTestShellTest",
- "Logcat dump"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjeDw7": {
- "__persistent_type__": "RietveldTryJob",
- "build": 83395,
- "builder": "swarm_triggered",
- "clobber": false,
- "completed": true,
- "init_time": 1353976076.707563,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjeDww",
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965631,
- "steps_failed": [
- "browser_tests"
- ],
- "steps_passed": [
- "swarm_trigger_tests",
- "base_unittests",
- "net_unittests",
- "unit_tests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjXDw7": {
- "__persistent_type__": "RietveldTryJob",
- "build": 83395,
- "builder": "swarm_triggered",
- "clobber": false,
- "completed": true,
- "init_time": 1353976076.256027,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjXDww",
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965631,
- "steps_failed": [
- "browser_tests"
- ],
- "steps_passed": [
- "swarm_trigger_tests",
- "base_unittests",
- "net_unittests",
- "unit_tests"
- ],
- "tries": 0
- },
- "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjfDw7": {
- "__persistent_type__": "RietveldTryJob",
- "build": 83395,
- "builder": "swarm_triggered",
- "clobber": false,
- "completed": true,
- "init_time": 1353976076.707563,
- "parent_key": "ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIvCxIFSXNzdWUYnvy4BQwLEghQYXRjaFNldBgBDAsSDFRyeUpvYlJlc3VsdBjfDww",
- "requested_steps": [],
- "revision": "169445",
- "started": 1353965631,
- "steps_failed": [
- "browser_tests"
- ],
- "steps_passed": [
- "swarm_trigger_tests",
- "base_unittests",
- "net_unittests",
- "unit_tests"
- ],
- "tries": 0
- }
- }
- }
- }
- }
- }
-}
diff --git a/tests/chromium_copyright_test.py b/tests/chromium_copyright_test.py
deleted file mode 100755
index 07bb158..0000000
--- a/tests/chromium_copyright_test.py
+++ /dev/null
@@ -1,135 +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 post_processors/chromium_copyright.py."""
-
-import datetime
-import os
-import sys
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-PROJECT_DIR = os.path.join(ROOT_DIR, '..')
-sys.path.insert(0, PROJECT_DIR)
-
-import find_depot_tools # pylint: disable=W0611
-from testing_support import trial_dir
-import patch
-
-from post_processors import chromium_copyright
-
-
-GIT_NEW = (
- 'diff --git a/foo b/foo\n'
- 'new file mode 100644\n'
- 'index 0000000..5716ca5\n'
- '--- /dev/null\n'
- '+++ b/foo\n'
- '@@ -0,0 +1 @@\n'
- '+bar\n')
-
-GIT_PATCH = (
- 'diff --git a/foo3 b/foo3\n'
- 'index 257cc56..5716ca5\n'
- '--- a/foo3\n'
- '+++ b/foo3\n'
- '@@ -1 +1 @@\n'
- '-foo\n'
- '+bar\n')
-
-class CCTest(trial_dir.TestCase):
- def setUp(self):
- super(CCTest, self).setUp()
- class FakeCheckout(object):
- project_path = self.root_dir
- self.checkout = FakeCheckout()
- open(self.path('foo1'), 'w').write('bar')
-
- @staticmethod
- def get_patch():
- return patch.PatchSet([
- patch.FilePatchDelete('foo2', True),
- patch.FilePatchDiff('foo', GIT_NEW, []),
- patch.FilePatchBinary('foo1', 'data', [], True),
- patch.FilePatchDiff('foo3', GIT_PATCH, []),
- ])
-
- def path(self, base_file):
- return os.path.join(self.root_dir, base_file)
-
- def full_check(self, content, expected):
- """End-to-end test. That's all that matters."""
- foo_path = self.path('foo')
- foo3_path = self.path('foo3')
- open(foo_path, 'w').write(content)
- open(foo3_path, 'w').write(content)
- for p in self.get_patch():
- chromium_copyright.process(self.checkout, p)
- self.assertEquals(expected, open(foo_path).read())
- self.assertEquals(content, open(foo3_path).read())
-
- def test_2_times(self):
- content = (
- 'Copyright (c) 2010 The Chromium Authors. All rights reserved.\n'
- 'Copyright (c) 2010 The Chromium Authors. All rights reserved.\n')
- expected = (
- 'Copyright %s The Chromium Authors. All rights reserved.\n'
- 'Copyright (c) 2010 The Chromium Authors. All rights reserved.\n') % (
- datetime.date.today().year)
- self.full_check(content, expected)
-
- def test_5_lines(self):
- content = (
- '0\n'
- '1\n'
- '2\n'
- '3\n'
- 'Copyright (c) 2010 The Chromium Authors. All rights reserved.\n')
- expected = (
- '0\n'
- '1\n'
- '2\n'
- '3\n'
- 'Copyright %s The Chromium Authors. All rights reserved.\n') % (
- datetime.date.today().year)
- self.full_check(content, expected)
-
- def test_6_lines(self):
- content = (
- '0\n'
- '1\n'
- '2\n'
- '3\n'
- '4\n'
- 'Copyright (c) 2010 The Chromium Authors. All rights reserved.\n')
- expected = content
- self.full_check(content, expected)
-
- def test_re(self):
- input_base = 'Copyright (c) 2010 The Chromium Authors. All rights reserved.'
- input_no_copyright = ('Copyright 2010 The Chromium Authors. '
- 'All rights reserved.')
- expected_base = ('Copyright %s The Chromium Authors. All rights reserved.' %
- datetime.date.today().year)
- self.full_check(input_base, expected_base)
- self.full_check('a ' + input_base, 'a ' + expected_base)
- self.full_check('// ' + input_base, '// ' + expected_base)
- self.full_check('// ' + input_base + '\n', '// ' + expected_base + '\n')
- self.full_check(input_base + '\n', expected_base + '\n')
- self.full_check(input_no_copyright, expected_base)
- self.full_check('a ' + input_no_copyright, 'a ' + expected_base)
- self.full_check('// ' + input_no_copyright, '// ' + expected_base)
- self.full_check('// ' + input_no_copyright + '\n', '// ' + expected_base +
- '\n')
- self.full_check(input_no_copyright + '\n', expected_base + '\n')
- ## \r are not supported.
- #self.full_check(
- # '// Copyright (c) 2010 The Chromium Authors. All rights reserved.\r\n',
- # '// Copyright %s The Chromium Authors. All rights reserved.\r\n' %
- # datetime.date.today().year)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/commit_queue_test.py b/tests/commit_queue_test.py
deleted file mode 100755
index d9c5ecc..0000000
--- a/tests/commit_queue_test.py
+++ /dev/null
@@ -1,193 +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 commit_queue.py."""
-
-import logging
-import os
-import StringIO
-import sys
-import time
-import traceback
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-import commit_queue
-import context
-import creds
-
-from testing_support import auto_stub
-
-# From /tests
-import mocks
-
-
-class Stop(Exception):
- pass
-
-
-class PendingManagerMock(auto_stub.SimpleMock):
- def __init__(self, unit_test):
- super(PendingManagerMock, self).__init__(unit_test)
- self.context = context.Context(
- mocks.RietveldMock(unit_test), mocks.SvnCheckoutMock(unit_test), None)
- self.count = 0
-
- def load(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def save(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def close(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def look_for_new_pending_commit(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
- self.count += 1
- if self.count > 3:
- raise Stop()
-
- def process_new_pending_commit(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def update_status(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def scan_results(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
-
-class CredentialsMock(object):
- @staticmethod
- def get(user):
- return '1%s1' % user
-
-
-class CommitQueueTest(auto_stub.TestCase):
- def setUp(self):
- super(CommitQueueTest, self).setUp()
- self.mock(sys, 'argv', ['commit_queue.py'])
- self.mock(sys, 'stdout', StringIO.StringIO())
- self.mock(sys, 'stderr', StringIO.StringIO())
- self.mock(commit_queue.projects, 'load_project', None)
- self.mock(commit_queue, 'SetupLogging', lambda _: None)
- # Setup logging attached to the mocked sys.stderr, printing
- # only the exception name to make tests less fragile.
- handler = logging.StreamHandler()
- formatter = logging.Formatter()
- formatter.formatException = lambda _: traceback.format_exc(0)
- handler.setFormatter(formatter)
- logging.getLogger().handlers = [handler]
- self._time = 1
- self.mock(time, 'time', self._get_time)
- self.mock(creds, 'Credentials', self._get_cred)
-
- def tearDown(self):
- try:
- if not self.has_failed():
- self._check('stdout', '')
- self._check('stderr', '')
- finally:
- super(CommitQueueTest, self).tearDown()
-
- def _check(self, pipe, expected):
- self.assertEqual(expected, self._pop(pipe))
-
- def _get_time(self):
- self._time += 10
- return self._time
-
- @staticmethod
- def _pop(pipe):
- data = getattr(sys, pipe).getvalue()
- setattr(sys, pipe, StringIO.StringIO())
- return data
-
- def _get_cred(self, pwd):
- rootdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- workdir = os.path.join(rootdir, 'workdir')
- self.assertEqual(os.path.join(workdir, '.gaia_pwd'), pwd)
- return CredentialsMock()
-
- def testHelp(self):
- sys.argv.append('--help')
- try:
- commit_queue.main()
- self.fail()
- except SystemExit as e:
- self.assertEqual(0, e.code)
- output = self._pop('stdout')
- # Cannot compare for the exact string since the formatting depends on the
- # screen size.
- self.assertIn('Minimum delay between each polling loop', output)
- self.assertIn('Run for real instead of dry-run mode which', output)
- self.assertLess(600, len(output), output)
-
- def testChromium(self):
- sys.argv.extend(('--project', 'chromium'))
- calls = []
- def load_project(*args):
- calls.append(args)
- return PendingManagerMock(self)
-
- self.mock(commit_queue.projects, 'load_project', load_project)
- try:
- commit_queue.main()
- self.fail()
- except Stop:
- pass
- self.assertEqual(1, len(calls))
- self.assertEqual('chromium', calls[0][0])
- self.assertEqual('commit-bot@chromium.org', calls[0][1])
- self.assertEqual(
- os.path.join(os.path.dirname(ROOT_DIR), 'workdir'), calls[0][2])
- self.assertEqual(None, calls[0][4])
- self._check(
- 'stdout',
- 'Using read-only Rietveld\n'
- 'Using read-only checkout\n'
- 'Using read-only chromium-status interface\n')
- self._check(
- 'stderr',
- 'CQ loop terminating\n'
- 'Traceback (most recent call last):\n'
- 'Stop\n\n'
- 'Saving db...\ndb save successful.\n')
-
- def testDryRun(self):
- sys.argv.extend(('--project', 'chromium'))
- pc = PendingManagerMock(self)
- self.mock(
- commit_queue.projects,
- 'load_project',
- lambda *args: pc)
- try:
- commit_queue.main()
- self.fail()
- except Stop:
- pass
- self.assertEqual(
- 'ReadOnlyCheckout', pc.context.checkout.__class__.__name__)
- # Ugh.
- self.assertEqual(
- 'RietveldMock', pc.context.rietveld.__class__.__name__)
- self._check(
- 'stdout',
- 'Using read-only Rietveld\n'
- 'Using read-only checkout\n'
- 'Using read-only chromium-status interface\n')
- self._check(
- 'stderr',
- 'CQ loop terminating\n'
- 'Traceback (most recent call last):\n'
- 'Stop\n\n'
- 'Saving db...\ndb save successful.\n')
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/count_test.py b/tests/count_test.py
deleted file mode 100755
index 301c337..0000000
--- a/tests/count_test.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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 tools/count.py."""
-
-import os
-import sys
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-PROJECT_DIR = os.path.join(ROOT_DIR, '..')
-sys.path.insert(0, PROJECT_DIR)
-
-
-import find_depot_tools # pylint: disable=W0611
-import subprocess2
-
-
-class TestCount(unittest.TestCase):
- def test_2011_04_09(self):
- # Verifies commits done on that day.
- # TODO(maruel): Import directly and do not use live data.
- expected = (
- "Getting data from 2011-04-09 for 1 days\n"
- "Top users: 3 out of 3 total users 100.00%\n"
- " Committed 3 out of 3 CQ'ed commits 100.00%\n"
- "\n"
- "Total commits: 26\n"
- "Total commits by commit bot: 3 ( 11.5%)\n")
- exe_path = os.path.join(PROJECT_DIR, 'tools', 'count.py')
- args = [sys.executable, exe_path, '-s', '2011-04-09', '-d', '1', '-o']
- self.assertEqual(expected, subprocess2.check_output(args))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/data/testCMDbuilds.json b/tests/data/testCMDbuilds.json
deleted file mode 100644
index 83fcbb9..0000000
--- a/tests/data/testCMDbuilds.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/_all?filter=1","{\"33762\":{\"slave\":\"vm140-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/cacheinvalidation_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/jingle_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":33762,\"times\":[1308849595.175241,1308853736.1849461],\"blame\":[\"mirandac@chromium.org\"],\"reason\":\"'mirandac: tabfinder' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2618,2692.8313249813064]],\"isStarted\":true,\"times\":[1308849595.1773751,1308849610.2867391],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",55676,104403.28136333823]],\"isStarted\":true,\"times\":[1308849610.2874589,1308849788.218452],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",140974,475042.40157507674]],\"isStarted\":true,\"times\":[1308849788.219141,1308850531.266047],\"text\":[\"compile\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/compile/logs/stdio\"]]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000596049]],\"isStarted\":true,\"times\":[1308850531.2663779,1308850592.0389409],\"text\":[\"check_deps\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/check_deps/logs/stdio\"]]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89196,89381.052763815955]],\"isStarted\":true,\"times\":[1308850592.0393119,1308850637.528332],\"text\":[\"base_unittests\",\"4 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/base_unittests/logs/stdio\"]]},{\"name\":\"cacheinvalidation_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",111431,111659.38675553762]],\"isStarted\":true,\"times\":[1308850637.5289299,1308850638.0098779],\"text\":[\"cacheinvalidation_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/cacheinvalidation_unittests/logs/stdio\"]]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",7023,7022.8856304280935]],\"isStarted\":true,\"times\":[1308850638.010401,1308850639.004504],\"text\":[\"crypto_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/crypto_unittests/logs/stdio\"]]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",6183,6214.8066191007474]],\"isStarted\":true,\"times\":[1308850639.0050149,1308850639.4549389],\"text\":[\"googleurl_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/googleurl_unittests/logs/stdio\"]]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",1258071,1258072.4165155331]],\"isStarted\":true,\"times\":[1308850639.4554451,1308850642.3813419],\"text\":[\"gpu_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/gpu_unittests/logs/stdio\"]]},{\"name\":\"jingle_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",15410,15409.179622135725]],\"isStarted\":true,\"times\":[1308850642.381748,1308850646.829128],\"text\":[\"jingle_unittests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/jingle_unittests/logs/stdio\"]]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",33779,33784.570660509184]],\"isStarted\":true,\"times\":[1308850646.829668,1308850653.652715],\"text\":[\"media_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/media_unittests/logs/stdio\"]]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",602714,602914.94115878304]],\"isStarted\":true,\"times\":[1308850653.6532891,1308850799.4372289],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/net_unittests/logs/stdio\"]]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",2897,2896.3685750027248]],\"isStarted\":true,\"times\":[1308850799.4375839,1308850800.03269],\"text\":[\"printing_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/printing_unittests/logs/stdio\"]]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",48391,48397.09783720968]],\"isStarted\":true,\"times\":[1308850800.033185,1308850809.959028],\"text\":[\"remoting_unittests\",\"4 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/remoting_unittests/logs/stdio\"]]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",91479,91469.966941036575]],\"isStarted\":true,\"times\":[1308850809.959533,1308850878.8998649],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/test_shell_tests/logs/stdio\"]]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",33345,33163.301894515615]],\"isStarted\":true,\"times\":[1308850878.900188,1308850894.330982],\"text\":[\"safe_browsing_tests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/safe_browsing_tests/logs/stdio\"]]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",13906,14041.925619726822]],\"isStarted\":true,\"times\":[1308850894.3315611,1308850904.8690629],\"text\":[\"ipc_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/ipc_tests/logs/stdio\"]]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",72945,72982.662395054271]],\"isStarted\":true,\"times\":[1308850904.8696091,1308850915.106755],\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/sync_unit_tests/logs/stdio\"]]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",541149,552752.41732045054]],\"isStarted\":true,\"times\":[1308850915.1072769,1308851014.644017],\"text\":[\"unit_tests\",\"7 disabled\",\"5 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/unit_tests/logs/stdio\"]]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",4514,4600.4527870989141]],\"isStarted\":true,\"times\":[1308851014.6444731,1308851018.2240651],\"text\":[\"app_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/app_unittests/logs/stdio\"]]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",17736,17777.997544329672]],\"isStarted\":true,\"times\":[1308851018.2244909,1308851037.7886569],\"text\":[\"gfx_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/gfx_unittests/logs/stdio\"]]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",717858,723190.28619638516]],\"isStarted\":true,\"times\":[1308851037.7892029,1308852488.6994181],\"text\":[\"browser_tests\",\"22 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/browser_tests/logs/stdio\"]]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",276957,260623.74079161257]],\"isStarted\":true,\"times\":[1308852488.6999879,1308853341.9219739],\"text\":[\"ui_tests\",\"25 disabled\",\"67 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/ui_tests/logs/stdio\"]]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",1593,1641.0055725567508]],\"isStarted\":true,\"times\":[1308853341.9225349,1308853344.984514],\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/nacl_ui_tests/logs/stdio\"]]},{\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",488266,484790.3957553833]],\"isStarted\":true,\"times\":[1308853344.985131,1308853559.9914949],\"text\":[\"nacl_integration\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/nacl_integration/logs/stdio\"]]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":25,\"expectations\":[[\"output\",49838,49978.611878035234]],\"isStarted\":true,\"times\":[1308853559.992058,1308853730.3407381],\"text\":[\"interactive_ui_tests\",\"9 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/interactive_ui_tests/logs/stdio\"]]},{\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":26,\"expectations\":[[\"output\",17959,17966.04413858927]],\"isStarted\":true,\"times\":[1308853730.3411641,1308853736.1840551],\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33762/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"changes\":[{\"who\":\"mirandac@chromium.org\",\"when\":1308849594.8467109}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:19:55.109468\",\"patchset\":1,\"issue\":7247010,\"job_name\":\"tabfinder\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"mirandac@chromium.org\",\"when\":1308849594.8467109}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:19:55.109468\",\"patchset\":1,\"issue\":7247010,\"job_name\":\"tabfinder\",\"revision\":90030},\"submittedAt\":1308849595.1210749,\"builds\":[33762],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:19:54\\nChanged By: mirandac@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"mirandac@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33762,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm140-m4\",\"BuildSlave\"]]},\"33763\":{\"slave\":\"vm122-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/compile/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"compile\"],\"number\":33763,\"results\":2,\"blame\":[\"sky@chromium.org\"],\"reason\":\"'sky: prerender_crash#6786b' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2511,2692.8313249813064]],\"isStarted\":true,\"times\":[1308849635.760854,1308849653.643919],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",115494,104403.28136333823]],\"isStarted\":true,\"times\":[1308849653.6444099,1308849882.8415771],\"text\":[\"update\",\"r90125\",\"webkit r89393\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"results\":[2,[\"compile\"]],\"isStarted\":true,\"expectations\":[[\"output\",239823,475042.40157507674]],\"text\":[\"compile\",\"failed\"],\"times\":[1308849882.8421879,1308850464.0212851],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33763/steps/compile/logs/stdio\"]]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000596049]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,89381.052763815955]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running cacheinvalidation_unittests\"],\"expectations\":[[\"output\",null,111659.38675553762]],\"name\":\"cacheinvalidation_unittests\"},{\"step_number\":6,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7022.8856304280935]],\"name\":\"crypto_unittests\"},{\"step_number\":7,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6214.8066191007474]],\"name\":\"googleurl_unittests\"},{\"step_number\":8,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1258072.4165155331]],\"name\":\"gpu_unittests\"},{\"step_number\":9,\"text\":[\"running jingle_unittests\"],\"expectations\":[[\"output\",null,15409.179622135725]],\"name\":\"jingle_unittests\"},{\"step_number\":10,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33784.570660509184]],\"name\":\"media_unittests\"},{\"step_number\":11,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,602914.94115878304]],\"name\":\"net_unittests\"},{\"step_number\":12,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.3685750027248]],\"name\":\"printing_unittests\"},{\"step_number\":13,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48397.09783720968]],\"name\":\"remoting_unittests\"},{\"step_number\":14,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,91469.966941036575]],\"name\":\"test_shell_tests\"},{\"step_number\":15,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,33163.301894515615]],\"name\":\"safe_browsing_tests\"},{\"step_number\":16,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14041.925619726822]],\"name\":\"ipc_tests\"},{\"step_number\":17,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,72982.662395054271]],\"name\":\"sync_unit_tests\"},{\"step_number\":18,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,552752.41732045054]],\"name\":\"unit_tests\"},{\"step_number\":19,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,4600.4527870989141]],\"name\":\"app_unittests\"},{\"step_number\":20,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,17777.997544329672]],\"name\":\"gfx_unittests\"},{\"step_number\":21,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,723190.28619638516]],\"name\":\"browser_tests\"},{\"step_number\":22,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,260623.74079161257]],\"name\":\"ui_tests\"},{\"step_number\":23,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1641.0055725567508]],\"name\":\"nacl_ui_tests\"},{\"step_number\":24,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,484790.3957553833]],\"name\":\"nacl_integration\"},{\"step_number\":25,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,49978.611878035234]],\"name\":\"interactive_ui_tests\"},{\"step_number\":26,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,17966.04413858927]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"sky@chromium.org\",\"when\":1308849635.7077761,\"revision\":\"90125\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:20:35.707832\",\"patchset\":1,\"issue\":7246012,\"job_name\":\"prerender_crash#6786b\",\"revision\":\"90125\"},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"sky@chromium.org\",\"when\":1308849635.7077761,\"revision\":\"90125\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:20:35.707832\",\"patchset\":1,\"issue\":7246012,\"job_name\":\"prerender_crash#6786b\",\"revision\":\"90125\"},\"submittedAt\":1308849635.714309,\"builds\":[33763],\"builderName\":\"linux\"}],\"times\":[1308849635.758812,1308850464.022275],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:20:35\\nChanged By: sky@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"sky@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33763,\"Build\"],[\"got_revision\",\"90125\",\"Source\"],[\"got_webkit_revision\",\"89393\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"90125\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm122-m4\",\"BuildSlave\"]]},\"33771\":{\"slave\":\"vm134-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/compile/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"compile\"],\"number\":33771,\"results\":2,\"blame\":[\"dominich@chromium.org\"],\"reason\":\"'dominich: remove_xhr_cancel#848adb' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2511,2546.1509789056659]],\"isStarted\":true,\"times\":[1308850915.133724,1308850931.3612781],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",59229,109231.19629260432]],\"isStarted\":true,\"times\":[1308850931.3619421,1308851104.857317],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"results\":[2,[\"compile\"]],\"isStarted\":true,\"expectations\":[[\"output\",49031,309187.38754922117]],\"text\":[\"compile\",\"failed\"],\"times\":[1308851104.8579891,1308851949.4550569],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33771/steps/compile/logs/stdio\"]]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.1250000074506]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,89346.876648869249]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running cacheinvalidation_unittests\"],\"expectations\":[[\"output\",null,111708.1733444422]],\"name\":\"cacheinvalidation_unittests\"},{\"step_number\":6,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7022.7357038035116]],\"name\":\"crypto_unittests\"},{\"step_number\":7,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6209.1814568468981]],\"name\":\"googleurl_unittests\"},{\"step_number\":8,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1258073.3020644416]],\"name\":\"gpu_unittests\"},{\"step_number\":9,\"text\":[\"running jingle_unittests\"],\"expectations\":[[\"output\",null,15409.272452766965]],\"name\":\"jingle_unittests\"},{\"step_number\":10,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33783.392833140912]],\"name\":\"media_unittests\"},{\"step_number\":11,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,611397.90441121196]],\"name\":\"net_unittests\"},{\"step_number\":12,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2895.1710718753407]],\"name\":\"printing_unittests\"},{\"step_number\":13,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48397.012229651213]],\"name\":\"remoting_unittests\"},{\"step_number\":14,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,92257.745867629565]],\"name\":\"test_shell_tests\"},{\"step_number\":15,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,33369.162736814455]],\"name\":\"safe_browsing_tests\"},{\"step_number\":16,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,13975.810175616463]],\"name\":\"ipc_tests\"},{\"step_number\":17,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,73009.83279938178]],\"name\":\"sync_unit_tests\"},{\"step_number\":18,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,554458.63804126414]],\"name\":\"unit_tests\"},{\"step_number\":19,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,4560.357899596841]],\"name\":\"app_unittests\"},{\"step_number\":20,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,17823.749693041209]],\"name\":\"gfx_unittests\"},{\"step_number\":21,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,726862.16077454807]],\"name\":\"browser_tests\"},{\"step_number\":22,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,261956.84259895157]],\"name\":\"ui_tests\"},{\"step_number\":23,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1693.5006965695939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":24,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,492440.2994694229]],\"name\":\"nacl_integration\"},{\"step_number\":25,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,49766.826484754405]],\"name\":\"interactive_ui_tests\"},{\"step_number\":26,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,17962.630517323658]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"dominich@chromium.org\",\"when\":1308850914.83285}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:41:54.996740\",\"patchset\":1006,\"issue\":7247012,\"job_name\":\"remove_xhr_cancel#848adb\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"dominich@chromium.org\",\"when\":1308850914.83285}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:41:54.996740\",\"patchset\":1006,\"issue\":7247012,\"job_name\":\"remove_xhr_cancel#848adb\",\"revision\":90030},\"submittedAt\":1308850915.0024769,\"builds\":[33771],\"builderName\":\"linux\"}],\"times\":[1308850915.1316619,1308851949.456038],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:41:54\\nChanged By: dominich@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"dominich@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33771,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm134-m4\",\"BuildSlave\"]]},\"33770\":{\"slave\":\"vm137-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/cacheinvalidation_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/jingle_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":33770,\"times\":[1308850687.2172639,1308855079.5076721],\"blame\":[\"zmo@google.com\"],\"reason\":\"'zmo: size' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2511,2604.3019578113317]],\"isStarted\":true,\"times\":[1308850687.218658,1308850702.3014071],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",165291,160695.39258520864]],\"isStarted\":true,\"times\":[1308850702.3022101,1308850974.9911499],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",612137,567511.77509844233]],\"isStarted\":true,\"times\":[1308850974.9918311,1308852066.0239921],\"text\":[\"compile\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/compile/logs/stdio\"]]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.2500000149012]],\"isStarted\":true,\"times\":[1308852066.024596,1308852126.1444249],\"text\":[\"check_deps\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/check_deps/logs/stdio\"]]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89191,89495.753297738498]],\"isStarted\":true,\"times\":[1308852126.1450341,1308852169.237612],\"text\":[\"base_unittests\",\"4 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/base_unittests/logs/stdio\"]]},{\"name\":\"cacheinvalidation_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",111459,112000.3466888844]],\"isStarted\":true,\"times\":[1308852169.238245,1308852169.6350181],\"text\":[\"cacheinvalidation_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/cacheinvalidation_unittests/logs/stdio\"]]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",7021,7022.4714076070231]],\"isStarted\":true,\"times\":[1308852169.6355219,1308852170.699465],\"text\":[\"crypto_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/crypto_unittests/logs/stdio\"]]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",6185,6233.3629136937961]],\"isStarted\":true,\"times\":[1308852170.6999879,1308852172.1963451],\"text\":[\"googleurl_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/googleurl_unittests/logs/stdio\"]]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",1258072,1258074.6041288832]],\"isStarted\":true,\"times\":[1308852172.196732,1308852177.2146609],\"text\":[\"gpu_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/gpu_unittests/logs/stdio\"]]},{\"name\":\"jingle_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",15410,15409.54490553393]],\"isStarted\":true,\"times\":[1308852177.215091,1308852183.239598],\"text\":[\"jingle_unittests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/jingle_unittests/logs/stdio\"]]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",33781,33784.785666281823]],\"isStarted\":true,\"times\":[1308852183.2399161,1308852192.4930301],\"text\":[\"media_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/media_unittests/logs/stdio\"]]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",602448,604005.80882242392]],\"isStarted\":true,\"times\":[1308852192.4935739,1308852340.4342029],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/net_unittests/logs/stdio\"]]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",2897,2896.3421437506813]],\"isStarted\":true,\"times\":[1308852340.4347341,1308852341.1025989],\"text\":[\"printing_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/printing_unittests/logs/stdio\"]]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",48392,48402.024459302418]],\"isStarted\":true,\"times\":[1308852341.1030891,1308852345.5660651],\"text\":[\"remoting_unittests\",\"4 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/remoting_unittests/logs/stdio\"]]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",91466,91807.491735259144]],\"isStarted\":true,\"times\":[1308852345.5665979,1308852411.749408],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/test_shell_tests/logs/stdio\"]]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",33348,33390.325473628902]],\"isStarted\":true,\"times\":[1308852411.7499721,1308852429.81721],\"text\":[\"safe_browsing_tests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/safe_browsing_tests/logs/stdio\"]]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",14042,14044.620351232927]],\"isStarted\":true,\"times\":[1308852429.8177731,1308852440.702678],\"text\":[\"ipc_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/ipc_tests/logs/stdio\"]]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",72942,73019.66559876356]],\"isStarted\":true,\"times\":[1308852440.7032261,1308852450.9221821],\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/sync_unit_tests/logs/stdio\"]]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",541229,557797.27608252817]],\"isStarted\":true,\"times\":[1308852450.9227171,1308852552.038635],\"text\":[\"unit_tests\",\"7 disabled\",\"5 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/unit_tests/logs/stdio\"]]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",4642,4604.715799193682]],\"isStarted\":true,\"times\":[1308852552.0391231,1308852552.753752],\"text\":[\"app_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/app_unittests/logs/stdio\"]]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",17733,17909.499386082418]],\"isStarted\":true,\"times\":[1308852552.754102,1308852573.1758151],\"text\":[\"gfx_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/gfx_unittests/logs/stdio\"]]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",717267,724350.32154909626]],\"isStarted\":true,\"times\":[1308852573.1761861,1308854018.9887841],\"text\":[\"browser_tests\",\"22 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/browser_tests/logs/stdio\"]]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",260187,271733.68519790313]],\"isStarted\":true,\"times\":[1308854018.9891641,1308854691.8153689],\"text\":[\"ui_tests\",\"25 disabled\",\"67 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/ui_tests/logs/stdio\"]]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",1656,1794.0013931391877]],\"isStarted\":true,\"times\":[1308854691.8159239,1308854699.1062911],\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/nacl_ui_tests/logs/stdio\"]]},{\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",480517,487791.5989388458]],\"isStarted\":true,\"times\":[1308854699.1067009,1308854913.047756],\"text\":[\"nacl_integration\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/nacl_integration/logs/stdio\"]]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":25,\"expectations\":[[\"output\",51718,49205.65296950881]],\"isStarted\":true,\"times\":[1308854913.048305,1308855073.730231],\"text\":[\"interactive_ui_tests\",\"9 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/interactive_ui_tests/logs/stdio\"]]},{\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":26,\"expectations\":[[\"output\",17956,17959.261034647316]],\"isStarted\":true,\"times\":[1308855073.730557,1308855079.5072491],\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33770/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"changes\":[{\"who\":\"zmo@google.com\",\"when\":1308850686.243767}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:38:06.406052\",\"patchset\":5001,\"issue\":7238008,\"job_name\":\"size\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"zmo@google.com\",\"when\":1308850686.243767}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:38:06.406052\",\"patchset\":5001,\"issue\":7238008,\"job_name\":\"size\",\"revision\":90030},\"submittedAt\":1308850686.416399,\"builds\":[33770],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:38:06\\nChanged By: zmo@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"zmo@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33770,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm137-m4\",\"BuildSlave\"]]},\"33766\":{\"slave\":\"vm149-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/compile/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"compile\"],\"number\":33766,\"results\":2,\"blame\":[\"mad@chromium.org\"],\"reason\":\"'mad: Snap2' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",3659,2590.4156624906532]],\"isStarted\":true,\"times\":[1308850015.357034,1308850031.0261481],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",52938,80977.140681669116]],\"isStarted\":true,\"times\":[1308850031.0266249,1308850188.9555709],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"results\":[2,[\"compile\"]],\"isStarted\":true,\"expectations\":[[\"output\",22025,262952.20078753837]],\"text\":[\"compile\",\"failed\"],\"times\":[1308850188.9561601,1308850437.271107],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33766/steps/compile/logs/stdio\"]]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.5000000298024]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,89293.026381907985]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running cacheinvalidation_unittests\"],\"expectations\":[[\"output\",null,111541.69337776881]],\"name\":\"cacheinvalidation_unittests\"},{\"step_number\":6,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7021.9428152140463]],\"name\":\"crypto_unittests\"},{\"step_number\":7,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6199.9033095503737]],\"name\":\"googleurl_unittests\"},{\"step_number\":8,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1258075.2082577664]],\"name\":\"gpu_unittests\"},{\"step_number\":9,\"text\":[\"running jingle_unittests\"],\"expectations\":[[\"output\",null,15411.089811067863]],\"name\":\"jingle_unittests\"},{\"step_number\":10,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33783.285330254592]],\"name\":\"media_unittests\"},{\"step_number\":11,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,610870.47057939158]],\"name\":\"net_unittests\"},{\"step_number\":12,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2895.6842875013626]],\"name\":\"printing_unittests\"},{\"step_number\":13,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48394.048918604836]],\"name\":\"remoting_unittests\"},{\"step_number\":14,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,92080.983470518288]],\"name\":\"test_shell_tests\"},{\"step_number\":15,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,33255.650947257804]],\"name\":\"safe_browsing_tests\"},{\"step_number\":16,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14041.962809863411]],\"name\":\"ipc_tests\"},{\"step_number\":17,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,72971.331197527135]],\"name\":\"sync_unit_tests\"},{\"step_number\":18,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,551904.20866022527]],\"name\":\"unit_tests\"},{\"step_number\":19,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,4588.7263935494575]],\"name\":\"app_unittests\"},{\"step_number\":20,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,17756.998772164836]],\"name\":\"gfx_unittests\"},{\"step_number\":21,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,721055.64309819252]],\"name\":\"browser_tests\"},{\"step_number\":22,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,259718.37039580627]],\"name\":\"ui_tests\"},{\"step_number\":23,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1617.0027862783754]],\"name\":\"nacl_ui_tests\"},{\"step_number\":24,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,490588.19787769165]],\"name\":\"nacl_integration\"},{\"step_number\":25,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,50160.30593901762]],\"name\":\"interactive_ui_tests\"},{\"step_number\":26,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,17964.522069294635]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"mad@chromium.org\",\"when\":1308850015.0817201}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:26:55.254390\",\"patchset\":1003,\"issue\":7246010,\"job_name\":\"Snap2\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"mad@chromium.org\",\"when\":1308850015.0817201}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:26:55.254390\",\"patchset\":1003,\"issue\":7246010,\"job_name\":\"Snap2\",\"revision\":90030},\"submittedAt\":1308850015.265362,\"builds\":[33766],\"builderName\":\"linux\"}],\"times\":[1308850015.354583,1308850437.2721939],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:26:55\\nChanged By: mad@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"mad@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33766,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm149-m4\",\"BuildSlave\"]]},\"33767\":{\"slave\":\"vm129-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/compile/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"compile\"],\"number\":33767,\"results\":2,\"blame\":[\"gagansingh@google.com\"],\"reason\":\"'gagansingh: warmest_socket_first' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",3848,2590.4156624906532]],\"isStarted\":true,\"times\":[1308850045.1404309,1308850057.3060701],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",55299,80977.140681669116]],\"isStarted\":true,\"times\":[1308850057.3067729,1308850225.7784641],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"results\":[2,[\"compile\"]],\"isStarted\":true,\"expectations\":[[\"output\",30934,262952.20078753837]],\"text\":[\"compile\",\"failed\"],\"times\":[1308850225.779083,1308850592.043354],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33767/steps/compile/logs/stdio\"]]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.5000000298024]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,89293.026381907985]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running cacheinvalidation_unittests\"],\"expectations\":[[\"output\",null,111541.69337776881]],\"name\":\"cacheinvalidation_unittests\"},{\"step_number\":6,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7021.9428152140463]],\"name\":\"crypto_unittests\"},{\"step_number\":7,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6199.9033095503737]],\"name\":\"googleurl_unittests\"},{\"step_number\":8,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1258075.2082577664]],\"name\":\"gpu_unittests\"},{\"step_number\":9,\"text\":[\"running jingle_unittests\"],\"expectations\":[[\"output\",null,15411.089811067863]],\"name\":\"jingle_unittests\"},{\"step_number\":10,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33783.285330254592]],\"name\":\"media_unittests\"},{\"step_number\":11,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,610870.47057939158]],\"name\":\"net_unittests\"},{\"step_number\":12,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2895.6842875013626]],\"name\":\"printing_unittests\"},{\"step_number\":13,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48394.048918604836]],\"name\":\"remoting_unittests\"},{\"step_number\":14,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,92080.983470518288]],\"name\":\"test_shell_tests\"},{\"step_number\":15,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,33255.650947257804]],\"name\":\"safe_browsing_tests\"},{\"step_number\":16,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14041.962809863411]],\"name\":\"ipc_tests\"},{\"step_number\":17,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,72971.331197527135]],\"name\":\"sync_unit_tests\"},{\"step_number\":18,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,551904.20866022527]],\"name\":\"unit_tests\"},{\"step_number\":19,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,4588.7263935494575]],\"name\":\"app_unittests\"},{\"step_number\":20,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,17756.998772164836]],\"name\":\"gfx_unittests\"},{\"step_number\":21,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,721055.64309819252]],\"name\":\"browser_tests\"},{\"step_number\":22,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,259718.37039580627]],\"name\":\"ui_tests\"},{\"step_number\":23,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1617.0027862783754]],\"name\":\"nacl_ui_tests\"},{\"step_number\":24,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,490588.19787769165]],\"name\":\"nacl_integration\"},{\"step_number\":25,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,50160.30593901762]],\"name\":\"interactive_ui_tests\"},{\"step_number\":26,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,17964.522069294635]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"gagansingh@google.com\",\"when\":1308850044.8455319}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:27:25.022002\",\"patchset\":25289,\"issue\":7189055,\"job_name\":\"warmest_socket_first\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"gagansingh@google.com\",\"when\":1308850044.8455319}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:27:25.022002\",\"patchset\":25289,\"issue\":7189055,\"job_name\":\"warmest_socket_first\",\"revision\":90030},\"submittedAt\":1308850045.0471251,\"builds\":[33767],\"builderName\":\"linux\"}],\"times\":[1308850045.138366,1308850592.044023],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:27:24\\nChanged By: gagansingh@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"gagansingh@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33767,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm129-m4\",\"BuildSlave\"]]},\"33764\":{\"slave\":\"vm146-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/app_unittests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":33764,\"times\":[1308849854.9228051,1308851571.8095751],\"blame\":[\"commit-bot@chromium.org\",\"zea@chromium.org\"],\"reason\":\"'commit-bot: 7246011-1' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2511,2590.4156624906532]],\"isStarted\":true,\"times\":[1308849854.9245901,1308849871.2794721],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",171334,80977.140681669116]],\"isStarted\":true,\"times\":[1308849871.2801421,1308850182.5900841],\"text\":[\"update\",\"r90227\",\"webkit r89566\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",609812,262952.20078753837]],\"isStarted\":true,\"times\":[1308850182.590662,1308851256.3686621],\"text\":[\"compile\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/compile/logs/stdio\"]]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,1004.5000000298024]],\"text\":[\"running check_deps\"],\"times\":[1308851256.369287,1308851256.3784921]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89519,89293.026381907985]],\"isStarted\":true,\"times\":[1308851256.3789721,1308851301.409734],\"text\":[\"base_unittests\",\"4 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/base_unittests/logs/stdio\"]]},{\"name\":\"cacheinvalidation_unittests\",\"isFinished\":true,\"step_number\":5,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,111541.69337776881]],\"text\":[\"running cacheinvalidation_unittests\"],\"times\":[1308851301.4103379,1308851301.4258671]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":6,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,7021.9428152140463]],\"text\":[\"running crypto_unittests\"],\"times\":[1308851301.4263389,1308851301.4274051]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",6248,6199.9033095503737]],\"isStarted\":true,\"times\":[1308851301.4278769,1308851301.8853691],\"text\":[\"googleurl_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/googleurl_unittests/logs/stdio\"]]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":8,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,1258075.2082577664]],\"text\":[\"running gpu_unittests\"],\"times\":[1308851301.8858449,1308851301.8889451]},{\"name\":\"jingle_unittests\",\"isFinished\":true,\"step_number\":9,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,15411.089811067863]],\"text\":[\"running jingle_unittests\"],\"times\":[1308851301.88942,1308851301.8904469]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",33783,33783.285330254592]],\"isStarted\":true,\"times\":[1308851301.8909271,1308851307.313292],\"text\":[\"media_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/media_unittests/logs/stdio\"]]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",602476,610870.47057939158]],\"isStarted\":true,\"times\":[1308851307.3138299,1308851457.903456],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/net_unittests/logs/stdio\"]]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":12,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,2895.6842875013626]],\"text\":[\"running printing_unittests\"],\"times\":[1308851457.904284,1308851457.9970601]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":13,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,48394.048918604836]],\"text\":[\"running remoting_unittests\"],\"times\":[1308851457.997617,1308851458.0148129]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":14,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,92080.983470518288]],\"text\":[\"running test_shell_tests\"],\"times\":[1308851458.0151529,1308851458.0190289]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":15,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,33255.650947257804]],\"text\":[\"running safe_browsing_tests\"],\"times\":[1308851458.019357,1308851458.020479]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",14041,14041.962809863411]],\"isStarted\":true,\"times\":[1308851458.020822,1308851468.1549511],\"text\":[\"ipc_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/ipc_tests/logs/stdio\"]]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":17,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,72971.331197527135]],\"text\":[\"running sync_unit_tests\"],\"times\":[1308851468.1554821,1308851468.1565371]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",561646,551904.20866022527]],\"isStarted\":true,\"times\":[1308851468.1570051,1308851571.0418479],\"text\":[\"unit_tests\",\"7 disabled\",\"5 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/unit_tests/logs/stdio\"]]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",4642,4588.7263935494575]],\"isStarted\":true,\"times\":[1308851571.0422161,1308851571.5373001],\"text\":[\"app_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33764/steps/app_unittests/logs/stdio\"]]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":20,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,17756.998772164836]],\"text\":[\"running gfx_unittests\"],\"times\":[1308851571.537642,1308851571.56951]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":21,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,721055.64309819252]],\"text\":[\"running browser_tests\"],\"times\":[1308851571.5698709,1308851571.6118729]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":22,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,259718.37039580627]],\"text\":[\"running ui_tests\"],\"times\":[1308851571.612241,1308851571.662678]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":23,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,1617.0027862783754]],\"text\":[\"running nacl_ui_tests\"],\"times\":[1308851571.663029,1308851571.7117989]},{\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":24,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,490588.19787769165]],\"text\":[\"running nacl_integration\"],\"times\":[1308851571.7121639,1308851571.747324]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":25,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,50160.30593901762]],\"text\":[\"running interactive_ui_tests\"],\"times\":[1308851571.7476721,1308851571.7811179]},{\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":26,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,17964.522069294635]],\"text\":[\"running webkit_unit_tests\"],\"times\":[1308851571.781476,1308851571.8092461]}],\"sourceStamp\":{\"timestamp\":\"2011-06-23T17:24:14.889013\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1308849854.888906,\"revision\":\"90227\"},{\"who\":\"zea@chromium.org\",\"when\":1308849854.8889401,\"revision\":\"90227\"}],\"job_name\":\"7246011-1\",\"revision\":\"90227\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-23T17:24:14.889013\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1308849854.888906,\"revision\":\"90227\"},{\"who\":\"zea@chromium.org\",\"when\":1308849854.8889401,\"revision\":\"90227\"}],\"job_name\":\"7246011-1\",\"revision\":\"90227\"},\"submittedAt\":1308849854.889384,\"builds\":[33764],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:24:14\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Thu 23 Jun 2011 10:24:14\\nChanged By: zea@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"commit-bot@chromium.org\",\"zea@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33764,\"Build\"],[\"got_revision\",\"90227\",\"Source\"],[\"got_webkit_revision\",\"89566\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"90227\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm146-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]},\"33765\":{\"slave\":\"vm142-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/cacheinvalidation_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/jingle_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":33765,\"times\":[1308849935.320405,1308854455.382549],\"blame\":[\"rharrison@chromium.org\"],\"reason\":\"'rharrison: keyboard_animation#f7291' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",3848,2590.4156624906532]],\"isStarted\":true,\"times\":[1308849935.3224399,1308849947.4356599],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",500333,80977.140681669116]],\"isStarted\":true,\"times\":[1308849947.4367371,1308850181.3491001],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1022634,262952.20078753837]],\"isStarted\":true,\"times\":[1308850181.3497031,1308851452.282315],\"text\":[\"compile\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/compile/logs/stdio\"]]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.5000000298024]],\"isStarted\":true,\"times\":[1308851452.2830131,1308851515.1236219],\"text\":[\"check_deps\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/check_deps/logs/stdio\"]]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89223,89293.026381907985]],\"isStarted\":true,\"times\":[1308851515.1242559,1308851560.8960021],\"text\":[\"base_unittests\",\"4 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/base_unittests/logs/stdio\"]]},{\"name\":\"cacheinvalidation_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",112437,111541.69337776881]],\"isStarted\":true,\"times\":[1308851560.8963549,1308851561.3928299],\"text\":[\"cacheinvalidation_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/cacheinvalidation_unittests/logs/stdio\"]]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",7021,7021.9428152140463]],\"isStarted\":true,\"times\":[1308851561.393364,1308851562.411242],\"text\":[\"crypto_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/crypto_unittests/logs/stdio\"]]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",6183,6199.9033095503737]],\"isStarted\":true,\"times\":[1308851562.4118071,1308851562.850893],\"text\":[\"googleurl_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/googleurl_unittests/logs/stdio\"]]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",1258071,1258075.2082577664]],\"isStarted\":true,\"times\":[1308851562.8514099,1308851575.5080669],\"text\":[\"gpu_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/gpu_unittests/logs/stdio\"]]},{\"name\":\"jingle_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",15410,15411.089811067863]],\"isStarted\":true,\"times\":[1308851575.508486,1308851582.5568571],\"text\":[\"jingle_unittests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/jingle_unittests/logs/stdio\"]]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",33794,33783.285330254592]],\"isStarted\":true,\"times\":[1308851582.557375,1308851587.810832],\"text\":[\"media_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/media_unittests/logs/stdio\"]]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",605624,610870.47057939158]],\"isStarted\":true,\"times\":[1308851587.811388,1308851735.2036719],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/net_unittests/logs/stdio\"]]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",2895,2895.6842875013626]],\"isStarted\":true,\"times\":[1308851735.204241,1308851735.875823],\"text\":[\"printing_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/printing_unittests/logs/stdio\"]]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",48408,48394.048918604836]],\"isStarted\":true,\"times\":[1308851735.8763411,1308851741.0884061],\"text\":[\"remoting_unittests\",\"4 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/remoting_unittests/logs/stdio\"]]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",91504,92080.983470518288]],\"isStarted\":true,\"times\":[1308851741.0887561,1308851810.4108191],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/test_shell_tests/logs/stdio\"]]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",33525,33255.650947257804]],\"isStarted\":true,\"times\":[1308851810.4114261,1308851834.4310119],\"text\":[\"safe_browsing_tests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/safe_browsing_tests/logs/stdio\"]]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",14056,14041.962809863411]],\"isStarted\":true,\"times\":[1308851834.4313431,1308851846.294687],\"text\":[\"ipc_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/ipc_tests/logs/stdio\"]]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",73063,72971.331197527135]],\"isStarted\":true,\"times\":[1308851846.295229,1308851858.0083971],\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/sync_unit_tests/logs/stdio\"]]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",541523,551904.20866022527]],\"isStarted\":true,\"times\":[1308851858.0087559,1308851959.226023],\"text\":[\"unit_tests\",\"7 disabled\",\"5 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/unit_tests/logs/stdio\"]]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",4640,4588.7263935494575]],\"isStarted\":true,\"times\":[1308851959.2275579,1308851959.8142891],\"text\":[\"app_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/app_unittests/logs/stdio\"]]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",17739,17756.998772164836]],\"isStarted\":true,\"times\":[1308851959.8148329,1308851979.3257079],\"text\":[\"gfx_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/gfx_unittests/logs/stdio\"]]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",719773,721055.64309819252]],\"isStarted\":true,\"times\":[1308851979.3262489,1308853428.4730439],\"text\":[\"browser_tests\",\"22 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/browser_tests/logs/stdio\"]]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",255589,259718.37039580627]],\"isStarted\":true,\"times\":[1308853428.4736669,1308854064.450928],\"text\":[\"ui_tests\",\"25 disabled\",\"67 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/ui_tests/logs/stdio\"]]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",1593,1617.0027862783754]],\"isStarted\":true,\"times\":[1308854064.451407,1308854069.178915],\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/nacl_ui_tests/logs/stdio\"]]},{\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",487348,490588.19787769165]],\"isStarted\":true,\"times\":[1308854069.1793621,1308854281.6949251],\"text\":[\"nacl_integration\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/nacl_integration/logs/stdio\"]]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":25,\"expectations\":[[\"output\",49989,50160.30593901762]],\"isStarted\":true,\"times\":[1308854281.695431,1308854451.916374],\"text\":[\"interactive_ui_tests\",\"9 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/interactive_ui_tests/logs/stdio\"]]},{\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":26,\"expectations\":[[\"output\",17963,17964.522069294635]],\"isStarted\":true,\"times\":[1308854451.91699,1308854455.382134],\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33765/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"changes\":[{\"who\":\"rharrison@chromium.org\",\"when\":1308849934.8159909}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:25:35.119070\",\"patchset\":5,\"issue\":7247007,\"job_name\":\"keyboard_animation#f7291\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"rharrison@chromium.org\",\"when\":1308849934.8159909}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:25:35.119070\",\"patchset\":5,\"issue\":7247007,\"job_name\":\"keyboard_animation#f7291\",\"revision\":90030},\"submittedAt\":1308849935.140455,\"builds\":[33765],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:25:34\\nChanged By: rharrison@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"rharrison@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33765,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm142-m4\",\"BuildSlave\"]]},\"33768\":{\"slave\":\"vm151-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/cacheinvalidation_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/jingle_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/stdio\"],[\"EnableAppModeTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EnableAppModeTest\"],[\"Assertion\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Assertion\"],[\"CloseBrowserWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CloseBrowserWindow\"],[\"CloseTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CloseTab\"],[\"DuplicateTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DuplicateTab\"],[\"FindInPage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FindInPage\"],[\"Home\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Home\"],[\"IncognitoWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IncognitoWindow\"],[\"Navigate\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Navigate\"],[\"OpenBrowserWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/OpenBrowserWindow\"],[\"OpenCloseBrowserWindowWithAccelerator\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/OpenCloseBrowserWindowWithAccelerator\"],[\"OpenNewTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/OpenNewTab\"],[\"RestoreTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreTab\"],[\"SelectTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SelectTab\"],[\"ShowBookmarkBar\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ShowBookmarkBar\"],[\"ShowDownloads\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ShowDownloads\"],[\"ShowHistory\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ShowHistory\"],[\"LargeSnapshot\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LargeSnapshot\"],[\"AcceleratorDownloads\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorDownloads\"],[\"AcceleratorExtensions\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorExtensions\"],[\"AcceleratorHistory\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorHistory\"],[\"AcceleratorNewTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorNewTab\"],[\"ActivateTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ActivateTab\"],[\"Cookies\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Cookies\"],[\"GetActiveTabIndex\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetActiveTabIndex\"],[\"GetBrowserWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetBrowserWindow\"],[\"GetBrowserWindowCount\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetBrowserWindowCount\"],[\"GetCurrentURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetCurrentURL\"],[\"GetTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetTab\"],[\"GetTabCount\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetTabCount\"],[\"GoBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GoBackForward\"],[\"NavigateToURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavigateToURL\"],[\"NavigateToURLAsync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavigateToURLAsync\"],[\"GetActiveTabIndex\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetActiveTabIndex\"],[\"GetTabTitle\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetTabTitle\"],[\"FrameDocumentCanBeAccessed\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FrameDocumentCanBeAccessed\"],[\"BooleanValueIsEchoedByDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BooleanValueIsEchoedByDomAutomationController\"],[\"NumberValueIsEchoedByDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NumberValueIsEchoedByDomAutomationController\"],[\"StringValueIsEchoedByDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/StringValueIsEchoedByDomAutomationController\"],[\"TestLifetimeOfDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestLifetimeOfDomAutomationController\"],[\"AppendTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AppendTab\"],[\"WindowGetViewBounds\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WindowGetViewBounds\"],[\"BookmarksLoaded\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BookmarksLoaded\"],[\"CommandAgainGoesBackToBookmarksTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CommandAgainGoesBackToBookmarksTab\"],[\"CommandOpensBookmarksTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CommandOpensBookmarksTab\"],[\"TwoCommandsOneTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TwoCommandsOneTab\"],[\"TestEncodingAliasMapping\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestEncodingAliasMapping\"],[\"PosixSessionEnd\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PosixSessionEnd\"],[\"CheckFails\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CheckFails\"],[\"ReuseBrowserInstanceWhenOpeningFile\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ReuseBrowserInstanceWhenOpeningFile\"],[\"SecondLaunch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SecondLaunch\"],[\"SecondLaunchFromIncognitoWithNormalUrl\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SecondLaunchFromIncognitoWithNormalUrl\"],[\"SecondLaunchWithIncognitoUrl\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SecondLaunchWithIncognitoUrl\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"EventLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EventLayoutTests\"],[\"LocalStorageLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LocalStorageLayoutTests\"],[\"RootLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RootLayoutTests\"],[\"SessionStorageLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SessionStorageLayoutTests\"],[\"DefaultPluginLoadTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DefaultPluginLoadTest\"],[\"File\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/File\"],[\"EmptyDirAfterClear\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EmptyDirAfterClear\"],[\"EmptyDirAfterGet\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EmptyDirAfterGet\"],[\"DOMCorePerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DOMCorePerf\"],[\"JSLibPerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/JSLibPerf\"],[\"DOMCorePerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DOMCorePerf\"],[\"JSLibPerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/JSLibPerf\"],[\"DNSError_Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DNSError_Basic\"],[\"DNSError_GoBack1\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DNSError_GoBack1\"],[\"IFrameDNSError_Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IFrameDNSError_Basic\"],[\"IFrameDNSError_GoBack\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IFrameDNSError_GoBack\"],[\"IFrameDNSError_GoBackAndForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IFrameDNSError_GoBackAndForward\"],[\"Page404\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Page404\"],[\"EnableDisable\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EnableDisable\"],[\"NoSuchExtension\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NoSuchExtension\"],[\"Uninstall\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Uninstall\"],[\"UITestCanLaunchWithOSMesa\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UITestCanLaunchWithOSMesa\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"ConsiderRedirectAfterGestureAsUserInitiated\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ConsiderRedirectAfterGestureAsUserInitiated\"],[\"ConsiderSlowRedirectAsUserInitiated\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ConsiderSlowRedirectAsUserInitiated\"],[\"VerifyHistoryLength1\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VerifyHistoryLength1\"],[\"VerifyHistoryLength2\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VerifyHistoryLength2\"],[\"VerifyHistoryLength3\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VerifyHistoryLength3\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"InEmptyFrame\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/InEmptyFrame\"],[\"AnimatedGIFs\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AnimatedGIFs\"],[\"EnableKioskModeTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EnableKioskModeTest\"],[\"NPObjectReleasedOnDestruction\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectReleasedOnDestruction\"],[\"NPObjectSetException\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectSetException\"],[\"UnloadNoCrash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UnloadNoCrash\"],[\"TestStart\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestStart\"],[\"TestStart\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestStart\"],[\"TestStart\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestStart\"],[\"CancelRedundantAuths\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CancelRedundantAuths\"],[\"SupplyRedundantAuths\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SupplyRedundantAuths\"],[\"TestBasicAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestBasicAuth\"],[\"TestDigestAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestDigestAuth\"],[\"TestTwoAuths\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestTwoAuths\"],[\"VideoBearSilentTheora\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearSilentTheora\"],[\"VideoBearSilentWebm\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearSilentWebm\"],[\"VideoBearTheora\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearTheora\"],[\"VideoBearWav\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearWav\"],[\"VideoBearWebm\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearWebm\"],[\"CloseRenderersNormally\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CloseRenderersNormally\"],[\"LoadAllBlockedPlugins\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LoadAllBlockedPlugins\"],[\"PrivateEnabled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PrivateEnabled\"],[\"Arguments\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Arguments\"],[\"GetJavaScriptURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetJavaScriptURL\"],[\"GetJavaScriptURL2\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetJavaScriptURL2\"],[\"GetURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetURL\"],[\"ManyPlugins\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ManyPlugins\"],[\"NPObjectIdentity\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectIdentity\"],[\"NPObjectProxy\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectProxy\"],[\"PluginThreadAsyncCall\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PluginThreadAsyncCall\"],[\"PrivateDisabled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PrivateDisabled\"],[\"ScheduleTimer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ScheduleTimer\"],[\"ClickToPlay\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClickToPlay\"],[\"GetURLRequestFailWrite\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetURLRequestFailWrite\"],[\"PluginReferrerTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PluginReferrerTest\"],[\"SelfDeletePluginInNewStream\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SelfDeletePluginInNewStream\"],[\"BasicNamedInterface\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BasicNamedInterface\"],[\"NavBeforeNTPCommits\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavBeforeNTPCommits\"],[\"ChromeHangInNTP\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ChromeHangInNTP\"],[\"UpdateUserPrefsVersion\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UpdateUserPrefsVersion\"],[\"NoStartupWindowBasicTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NoStartupWindowBasicTest\"],[\"LoadOptionsByURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LoadOptionsByURL\"],[\"NavBarCheck\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavBarCheck\"],[\"Buffer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Buffer\"],[\"Broker\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Broker\"],[\"Buffer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Buffer\"],[\"CharSet\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CharSet\"],[\"CursorControl\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CursorControl\"],[\"FileRef\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FileRef\"],[\"Graphics2D\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Graphics2D\"],[\"ImageData\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ImageData\"],[\"PaintAggregator\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PaintAggregator\"],[\"PostMessage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PostMessage\"],[\"Scrollbar\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Scrollbar\"],[\"Transport\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Transport\"],[\"URLLoader\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/URLLoader\"],[\"URLUtil\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/URLUtil\"],[\"Var\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Var\"],[\"VarDeprecated\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VarDeprecated\"],[\"LoadPrintPreviewByURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LoadPrintPreviewByURL\"],[\"PrintCommandDisabled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PrintCommandDisabled\"],[\"CreateChecksCompatibilitySocket\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CreateChecksCompatibilitySocket\"],[\"CreateFailsWithExistingBrowser\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CreateFailsWithExistingBrowser\"],[\"NotifyOtherProcessHostChanged\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessHostChanged\"],[\"NotifyOtherProcessNoSuicide\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessNoSuicide\"],[\"NotifyOtherProcessOrCreate_BadCookie\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessOrCreate_BadCookie\"],[\"NotifyOtherProcessSuccess\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessSuccess\"],[\"Client\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Client\"],[\"ClientCancelled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClientCancelled\"],[\"ClientFragments\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClientFragments\"],[\"ClientServerServer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClientServerServer\"],[\"Server\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Server\"],[\"ServerReference\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ServerReference\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"TestDoubleReload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestDoubleReload\"],[\"TestLoginAfterRepost\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestLoginAfterRepost\"],[\"ContentDispositionEmpty\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ContentDispositionEmpty\"],[\"ContentDispositionInline\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ContentDispositionInline\"],[\"CrossOriginRedirectBlocked\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossOriginRedirectBlocked\"],[\"CrossSiteFailedRequest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteFailedRequest\"],[\"CrossSiteImmediateLoadOnunloadCookie\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteImmediateLoadOnunloadCookie\"],[\"CrossSiteNavigationErrorPage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteNavigationErrorPage\"],[\"CrossSiteNavigationNonBuffered\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteNavigationNonBuffered\"],[\"CrossSiteNoUnloadOn204\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteNoUnloadOn204\"],[\"CrossSiteOnunloadCookie\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteOnunloadCookie\"],[\"DoNotSniffHTMLFromImageGIF\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DoNotSniffHTMLFromImageGIF\"],[\"DoNotSniffHTMLFromTextPlain\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DoNotSniffHTMLFromTextPlain\"],[\"RespectNoSniffDirective\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RespectNoSniffDirective\"],[\"SniffHTMLWithNoContentType\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SniffHTMLWithNoContentType\"],[\"SniffNoContentTypeNoData\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SniffNoContentTypeNoData\"],[\"RunInBackgroundBasicTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RunInBackgroundBasicTest\"],[\"DisallowFileUrlUniversalAccessTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DisallowFileUrlUniversalAccessTest\"],[\"BasicBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BasicBackForward\"],[\"FragmentBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FragmentBackForward\"],[\"FrameBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FrameBackForward\"],[\"LocationChangeInSubframe\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LocationChangeInSubframe\"],[\"Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Basic\"],[\"ClosedTabStaysClosed\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClosedTabStaysClosed\"],[\"DontRestorePrintPreviewTabTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DontRestorePrintPreviewTabTest\"],[\"NormalAndPopup\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NormalAndPopup\"],[\"RestoresCrossSiteForwardAndBackwardNavs\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoresCrossSiteForwardAndBackwardNavs\"],[\"RestoresForwardAndBackwardNavs\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoresForwardAndBackwardNavs\"],[\"TwoTabsSecondSelected\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TwoTabsSecondSelected\"],[\"TwoWindowsCloseOneRestoreOnlyOne\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TwoWindowsCloseOneRestoreOnlyOne\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Basic\"],[\"BasicRestoreFromClosedWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BasicRestoreFromClosedWindow\"],[\"DontLoadRestoredTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DontLoadRestoredTab\"],[\"MiddleTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MiddleTab\"],[\"RestoreCrossSiteWithExistingSiteInstance\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreCrossSiteWithExistingSiteInstance\"],[\"RestoreIntoSameWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreIntoSameWindow\"],[\"RestoreTabWithSpecialURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreTabWithSpecialURL\"],[\"RestoreTabWithSpecialURLOnBack\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreTabWithSpecialURLOnBack\"],[\"RestoreToDifferentWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreToDifferentWindow\"],[\"RestoreWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreWindow\"],[\"RestoreWindowAndTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreWindowAndTab\"],[\"RestoreWithExistingSiteInstance\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreWithExistingSiteInstance\"],[\"MediaUILayoutTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MediaUILayoutTest\"],[\"BrowserCloseBeforeUnloadCancel\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseBeforeUnloadCancel\"],[\"BrowserCloseBeforeUnloadOK\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseBeforeUnloadOK\"],[\"BrowserCloseInfiniteBeforeUnload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteBeforeUnload\"],[\"BrowserCloseInfiniteBeforeUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteBeforeUnloadAlert\"],[\"BrowserCloseInfiniteUnload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteUnload\"],[\"BrowserCloseInfiniteUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteUnloadAlert\"],[\"BrowserCloseNoUnloadListeners\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseNoUnloadListeners\"],[\"BrowserCloseTabWhenOtherTabHasListener\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTabWhenOtherTabHasListener\"],[\"BrowserCloseTwoSecondBeforeUnload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTwoSecondBeforeUnload\"],[\"BrowserCloseTwoSecondBeforeUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTwoSecondBeforeUnloadAlert\"],[\"BrowserCloseTwoSecondUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTwoSecondUnloadAlert\"],[\"CrossSiteInfiniteBeforeUnloadSync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteInfiniteBeforeUnloadSync\"],[\"CrossSiteInfiniteUnloadSync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteInfiniteUnloadSync\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"DoesBrowserConsumeViewSourcePrefix\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DoesBrowserConsumeViewSourcePrefix\"],[\"ViewSourceInMenuEnabledOnANormalPage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ViewSourceInMenuEnabledOnANormalPage\"],[\"WindowOpenClose\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WindowOpenClose\"],[\"AsyncOperations\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AsyncOperations\"],[\"FileEntryToURISync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FileEntryToURISync\"],[\"Persistent\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Persistent\"],[\"SyncOperations\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SyncOperations\"],[\"SyncTemporary\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SyncTemporary\"],[\"Temporary\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Temporary\"],[\"MultipleSharedWorkers\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MultipleSharedWorkers\"],[\"MultipleWorkers\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MultipleWorkers\"],[\"SharedWorkerHttpAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SharedWorkerHttpAuth\"],[\"SingleSharedWorker\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SingleSharedWorker\"],[\"SingleWorker\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SingleWorker\"],[\"StressJSExecution\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/StressJSExecution\"],[\"UseMachineStack\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UseMachineStack\"],[\"WorkerCall\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerCall\"],[\"WorkerCloseFast\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerCloseFast\"],[\"WorkerContextGc\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerContextGc\"],[\"WorkerContextMultiPort\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerContextMultiPort\"],[\"WorkerEventListener\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerEventListener\"],[\"WorkerGC\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerGC\"],[\"WorkerHttpAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerHttpAuth\"],[\"WorkerInit\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerInit\"],[\"WorkerLocation\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerLocation\"],[\"WorkerMessagePort\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerMessagePort\"],[\"WorkerMessagePortGC\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerMessagePortGC\"],[\"WorkerMultiPort\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerMultiPort\"],[\"WorkerReplaceGlobalConstructor\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerReplaceGlobalConstructor\"],[\"WorkerReplaceSelf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerReplaceSelf\"],[\"WorkerScriptError\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerScriptError\"],[\"WorkerTerminate\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerTerminate\"],[\"WorkerTimeout\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerTimeout\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/stdio\"],[\"DoubleDisplay\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/DoubleDisplay\"],[\"NavigateAway\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/NavigateAway\"],[\"SlowTermination\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/SlowTermination\"],[\"TestInfoBarsCloseOnNewTheme\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/TestInfoBarsCloseOnNewTheme\"],[\"TestOnMouseOut\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/TestOnMouseOut\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"ui_tests\",\"interactive_ui_tests\"],\"number\":33768,\"results\":2,\"blame\":[\"mad@chromium.org\"],\"reason\":\"'mad: Snap3' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2511,2763.6039156226634]],\"isStarted\":true,\"times\":[1308850435.2006359,1308850450.2804749],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",34207,149208.78517041728]],\"isStarted\":true,\"times\":[1308850450.2811849,1308850632.3041689],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",330383,525211.55019688467]],\"isStarted\":true,\"times\":[1308850632.304523,1308851594.1453099],\"text\":[\"compile\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/compile/logs/stdio\"]]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.2500000149012]],\"isStarted\":true,\"times\":[1308851594.1458819,1308851643.1028309],\"text\":[\"check_deps\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/check_deps/logs/stdio\"]]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89122,89471.506595476996]],\"isStarted\":true,\"times\":[1308851643.10337,1308851686.710171],\"text\":[\"base_unittests\",\"4 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/base_unittests/logs/stdio\"]]},{\"name\":\"cacheinvalidation_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",109399,112000.3466888844]],\"isStarted\":true,\"times\":[1308851686.7106071,1308851691.684366],\"text\":[\"cacheinvalidation_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/cacheinvalidation_unittests/logs/stdio\"]]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",7021,7022.4714076070231]],\"isStarted\":true,\"times\":[1308851691.6849561,1308851693.0079119],\"text\":[\"crypto_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/crypto_unittests/logs/stdio\"]]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",6187,6218.7258273875932]],\"isStarted\":true,\"times\":[1308851693.008419,1308851699.640012],\"text\":[\"googleurl_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/googleurl_unittests/logs/stdio\"]]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",1258067,1258074.6041288832]],\"isStarted\":true,\"times\":[1308851699.64043,1308851703.1384909],\"text\":[\"gpu_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/gpu_unittests/logs/stdio\"]]},{\"name\":\"jingle_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",15406,15409.54490553393]],\"isStarted\":true,\"times\":[1308851703.1388471,1308851708.3867371],\"text\":[\"jingle_unittests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/jingle_unittests/logs/stdio\"]]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",33760,33787.571332563646]],\"isStarted\":true,\"times\":[1308851708.387306,1308851713.9292099],\"text\":[\"media_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/media_unittests/logs/stdio\"]]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",596526,605428.61764484784]],\"isStarted\":true,\"times\":[1308851713.9297359,1308851864.2343571],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/net_unittests/logs/stdio\"]]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",2895,2896.3421437506813]],\"isStarted\":true,\"times\":[1308851864.2348771,1308851864.7895031],\"text\":[\"printing_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/printing_unittests/logs/stdio\"]]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",48360,48402.024459302418]],\"isStarted\":true,\"times\":[1308851864.7901199,1308851869.3017111],\"text\":[\"remoting_unittests\",\"4 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/remoting_unittests/logs/stdio\"]]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",91405,91807.491735259144]],\"isStarted\":true,\"times\":[1308851869.3024819,1308851935.9604471],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/test_shell_tests/logs/stdio\"]]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",32994,33390.325473628902]],\"isStarted\":true,\"times\":[1308851935.9609921,1308851958.3859329],\"text\":[\"safe_browsing_tests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/safe_browsing_tests/logs/stdio\"]]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",14010,14047.240702465853]],\"isStarted\":true,\"times\":[1308851958.386359,1308851969.654176],\"text\":[\"ipc_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ipc_tests/logs/stdio\"]]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",72717,73019.66559876356]],\"isStarted\":true,\"times\":[1308851969.6545579,1308851979.2979159],\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/sync_unit_tests/logs/stdio\"]]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",540453,554196.55216505635]],\"isStarted\":true,\"times\":[1308851979.2985201,1308852064.6665671],\"text\":[\"unit_tests\",\"7 disabled\",\"5 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/unit_tests/logs/stdio\"]]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",4625,4632.4315983873639]],\"isStarted\":true,\"times\":[1308852064.667232,1308852065.0911829],\"text\":[\"app_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/app_unittests/logs/stdio\"]]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",17723,17909.499386082418]],\"isStarted\":true,\"times\":[1308852065.091692,1308852087.8438101],\"text\":[\"gfx_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/gfx_unittests/logs/stdio\"]]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",724464,724350.32154909626]],\"isStarted\":true,\"times\":[1308852087.844214,1308853515.090451],\"text\":[\"browser_tests\",\"22 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/browser_tests/logs/stdio\"]]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":22,\"results\":[2,[\"ui_tests\"]],\"isStarted\":true,\"expectations\":[[\"output\",658452,271733.68519790313]],\"text\":[\"ui_tests\",\"25 disabled\",\"67 flaky\",\"failed 250\"],\"times\":[1308853515.0913529,1308854237.7504289],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/stdio\"],[\"EnableAppModeTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EnableAppModeTest\"],[\"Assertion\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Assertion\"],[\"CloseBrowserWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CloseBrowserWindow\"],[\"CloseTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CloseTab\"],[\"DuplicateTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DuplicateTab\"],[\"FindInPage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FindInPage\"],[\"Home\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Home\"],[\"IncognitoWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IncognitoWindow\"],[\"Navigate\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Navigate\"],[\"OpenBrowserWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/OpenBrowserWindow\"],[\"OpenCloseBrowserWindowWithAccelerator\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/OpenCloseBrowserWindowWithAccelerator\"],[\"OpenNewTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/OpenNewTab\"],[\"RestoreTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreTab\"],[\"SelectTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SelectTab\"],[\"ShowBookmarkBar\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ShowBookmarkBar\"],[\"ShowDownloads\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ShowDownloads\"],[\"ShowHistory\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ShowHistory\"],[\"LargeSnapshot\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LargeSnapshot\"],[\"AcceleratorDownloads\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorDownloads\"],[\"AcceleratorExtensions\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorExtensions\"],[\"AcceleratorHistory\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorHistory\"],[\"AcceleratorNewTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AcceleratorNewTab\"],[\"ActivateTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ActivateTab\"],[\"Cookies\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Cookies\"],[\"GetActiveTabIndex\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetActiveTabIndex\"],[\"GetBrowserWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetBrowserWindow\"],[\"GetBrowserWindowCount\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetBrowserWindowCount\"],[\"GetCurrentURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetCurrentURL\"],[\"GetTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetTab\"],[\"GetTabCount\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetTabCount\"],[\"GoBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GoBackForward\"],[\"NavigateToURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavigateToURL\"],[\"NavigateToURLAsync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavigateToURLAsync\"],[\"GetActiveTabIndex\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetActiveTabIndex\"],[\"GetTabTitle\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetTabTitle\"],[\"FrameDocumentCanBeAccessed\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FrameDocumentCanBeAccessed\"],[\"BooleanValueIsEchoedByDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BooleanValueIsEchoedByDomAutomationController\"],[\"NumberValueIsEchoedByDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NumberValueIsEchoedByDomAutomationController\"],[\"StringValueIsEchoedByDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/StringValueIsEchoedByDomAutomationController\"],[\"TestLifetimeOfDomAutomationController\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestLifetimeOfDomAutomationController\"],[\"AppendTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AppendTab\"],[\"WindowGetViewBounds\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WindowGetViewBounds\"],[\"BookmarksLoaded\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BookmarksLoaded\"],[\"CommandAgainGoesBackToBookmarksTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CommandAgainGoesBackToBookmarksTab\"],[\"CommandOpensBookmarksTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CommandOpensBookmarksTab\"],[\"TwoCommandsOneTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TwoCommandsOneTab\"],[\"TestEncodingAliasMapping\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestEncodingAliasMapping\"],[\"PosixSessionEnd\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PosixSessionEnd\"],[\"CheckFails\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CheckFails\"],[\"ReuseBrowserInstanceWhenOpeningFile\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ReuseBrowserInstanceWhenOpeningFile\"],[\"SecondLaunch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SecondLaunch\"],[\"SecondLaunchFromIncognitoWithNormalUrl\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SecondLaunchFromIncognitoWithNormalUrl\"],[\"SecondLaunchWithIncognitoUrl\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SecondLaunchWithIncognitoUrl\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"EventLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EventLayoutTests\"],[\"LocalStorageLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LocalStorageLayoutTests\"],[\"RootLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RootLayoutTests\"],[\"SessionStorageLayoutTests\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SessionStorageLayoutTests\"],[\"DefaultPluginLoadTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DefaultPluginLoadTest\"],[\"File\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/File\"],[\"EmptyDirAfterClear\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EmptyDirAfterClear\"],[\"EmptyDirAfterGet\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EmptyDirAfterGet\"],[\"DOMCorePerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DOMCorePerf\"],[\"JSLibPerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/JSLibPerf\"],[\"DOMCorePerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DOMCorePerf\"],[\"JSLibPerf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/JSLibPerf\"],[\"DNSError_Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DNSError_Basic\"],[\"DNSError_GoBack1\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DNSError_GoBack1\"],[\"IFrameDNSError_Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IFrameDNSError_Basic\"],[\"IFrameDNSError_GoBack\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IFrameDNSError_GoBack\"],[\"IFrameDNSError_GoBackAndForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/IFrameDNSError_GoBackAndForward\"],[\"Page404\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Page404\"],[\"EnableDisable\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EnableDisable\"],[\"NoSuchExtension\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NoSuchExtension\"],[\"Uninstall\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Uninstall\"],[\"UITestCanLaunchWithOSMesa\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UITestCanLaunchWithOSMesa\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"ConsiderRedirectAfterGestureAsUserInitiated\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ConsiderRedirectAfterGestureAsUserInitiated\"],[\"ConsiderSlowRedirectAsUserInitiated\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ConsiderSlowRedirectAsUserInitiated\"],[\"VerifyHistoryLength1\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VerifyHistoryLength1\"],[\"VerifyHistoryLength2\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VerifyHistoryLength2\"],[\"VerifyHistoryLength3\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VerifyHistoryLength3\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"InEmptyFrame\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/InEmptyFrame\"],[\"AnimatedGIFs\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AnimatedGIFs\"],[\"EnableKioskModeTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/EnableKioskModeTest\"],[\"NPObjectReleasedOnDestruction\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectReleasedOnDestruction\"],[\"NPObjectSetException\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectSetException\"],[\"UnloadNoCrash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UnloadNoCrash\"],[\"TestStart\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestStart\"],[\"TestStart\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestStart\"],[\"TestStart\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestStart\"],[\"CancelRedundantAuths\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CancelRedundantAuths\"],[\"SupplyRedundantAuths\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SupplyRedundantAuths\"],[\"TestBasicAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestBasicAuth\"],[\"TestDigestAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestDigestAuth\"],[\"TestTwoAuths\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestTwoAuths\"],[\"VideoBearSilentTheora\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearSilentTheora\"],[\"VideoBearSilentWebm\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearSilentWebm\"],[\"VideoBearTheora\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearTheora\"],[\"VideoBearWav\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearWav\"],[\"VideoBearWebm\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VideoBearWebm\"],[\"CloseRenderersNormally\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CloseRenderersNormally\"],[\"LoadAllBlockedPlugins\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LoadAllBlockedPlugins\"],[\"PrivateEnabled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PrivateEnabled\"],[\"Arguments\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Arguments\"],[\"GetJavaScriptURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetJavaScriptURL\"],[\"GetJavaScriptURL2\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetJavaScriptURL2\"],[\"GetURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetURL\"],[\"ManyPlugins\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ManyPlugins\"],[\"NPObjectIdentity\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectIdentity\"],[\"NPObjectProxy\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NPObjectProxy\"],[\"PluginThreadAsyncCall\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PluginThreadAsyncCall\"],[\"PrivateDisabled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PrivateDisabled\"],[\"ScheduleTimer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ScheduleTimer\"],[\"ClickToPlay\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClickToPlay\"],[\"GetURLRequestFailWrite\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/GetURLRequestFailWrite\"],[\"PluginReferrerTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PluginReferrerTest\"],[\"SelfDeletePluginInNewStream\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SelfDeletePluginInNewStream\"],[\"BasicNamedInterface\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BasicNamedInterface\"],[\"NavBeforeNTPCommits\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavBeforeNTPCommits\"],[\"ChromeHangInNTP\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ChromeHangInNTP\"],[\"UpdateUserPrefsVersion\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UpdateUserPrefsVersion\"],[\"NoStartupWindowBasicTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NoStartupWindowBasicTest\"],[\"LoadOptionsByURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LoadOptionsByURL\"],[\"NavBarCheck\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NavBarCheck\"],[\"Buffer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Buffer\"],[\"Broker\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Broker\"],[\"Buffer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Buffer\"],[\"CharSet\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CharSet\"],[\"CursorControl\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CursorControl\"],[\"FileRef\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FileRef\"],[\"Graphics2D\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Graphics2D\"],[\"ImageData\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ImageData\"],[\"PaintAggregator\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PaintAggregator\"],[\"PostMessage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PostMessage\"],[\"Scrollbar\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Scrollbar\"],[\"Transport\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Transport\"],[\"URLLoader\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/URLLoader\"],[\"URLUtil\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/URLUtil\"],[\"Var\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Var\"],[\"VarDeprecated\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/VarDeprecated\"],[\"LoadPrintPreviewByURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LoadPrintPreviewByURL\"],[\"PrintCommandDisabled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/PrintCommandDisabled\"],[\"CreateChecksCompatibilitySocket\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CreateChecksCompatibilitySocket\"],[\"CreateFailsWithExistingBrowser\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CreateFailsWithExistingBrowser\"],[\"NotifyOtherProcessHostChanged\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessHostChanged\"],[\"NotifyOtherProcessNoSuicide\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessNoSuicide\"],[\"NotifyOtherProcessOrCreate_BadCookie\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessOrCreate_BadCookie\"],[\"NotifyOtherProcessSuccess\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NotifyOtherProcessSuccess\"],[\"Client\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Client\"],[\"ClientCancelled\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClientCancelled\"],[\"ClientFragments\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClientFragments\"],[\"ClientServerServer\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClientServerServer\"],[\"Server\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Server\"],[\"ServerReference\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ServerReference\"],[\"Crash\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Crash\"],[\"TestDoubleReload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestDoubleReload\"],[\"TestLoginAfterRepost\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TestLoginAfterRepost\"],[\"ContentDispositionEmpty\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ContentDispositionEmpty\"],[\"ContentDispositionInline\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ContentDispositionInline\"],[\"CrossOriginRedirectBlocked\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossOriginRedirectBlocked\"],[\"CrossSiteFailedRequest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteFailedRequest\"],[\"CrossSiteImmediateLoadOnunloadCookie\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteImmediateLoadOnunloadCookie\"],[\"CrossSiteNavigationErrorPage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteNavigationErrorPage\"],[\"CrossSiteNavigationNonBuffered\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteNavigationNonBuffered\"],[\"CrossSiteNoUnloadOn204\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteNoUnloadOn204\"],[\"CrossSiteOnunloadCookie\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteOnunloadCookie\"],[\"DoNotSniffHTMLFromImageGIF\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DoNotSniffHTMLFromImageGIF\"],[\"DoNotSniffHTMLFromTextPlain\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DoNotSniffHTMLFromTextPlain\"],[\"RespectNoSniffDirective\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RespectNoSniffDirective\"],[\"SniffHTMLWithNoContentType\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SniffHTMLWithNoContentType\"],[\"SniffNoContentTypeNoData\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SniffNoContentTypeNoData\"],[\"RunInBackgroundBasicTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RunInBackgroundBasicTest\"],[\"DisallowFileUrlUniversalAccessTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DisallowFileUrlUniversalAccessTest\"],[\"BasicBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BasicBackForward\"],[\"FragmentBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FragmentBackForward\"],[\"FrameBackForward\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FrameBackForward\"],[\"LocationChangeInSubframe\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/LocationChangeInSubframe\"],[\"Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Basic\"],[\"ClosedTabStaysClosed\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ClosedTabStaysClosed\"],[\"DontRestorePrintPreviewTabTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DontRestorePrintPreviewTabTest\"],[\"NormalAndPopup\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/NormalAndPopup\"],[\"RestoresCrossSiteForwardAndBackwardNavs\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoresCrossSiteForwardAndBackwardNavs\"],[\"RestoresForwardAndBackwardNavs\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoresForwardAndBackwardNavs\"],[\"TwoTabsSecondSelected\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TwoTabsSecondSelected\"],[\"TwoWindowsCloseOneRestoreOnlyOne\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/TwoWindowsCloseOneRestoreOnlyOne\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"Basic\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Basic\"],[\"BasicRestoreFromClosedWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BasicRestoreFromClosedWindow\"],[\"DontLoadRestoredTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DontLoadRestoredTab\"],[\"MiddleTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MiddleTab\"],[\"RestoreCrossSiteWithExistingSiteInstance\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreCrossSiteWithExistingSiteInstance\"],[\"RestoreIntoSameWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreIntoSameWindow\"],[\"RestoreTabWithSpecialURL\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreTabWithSpecialURL\"],[\"RestoreTabWithSpecialURLOnBack\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreTabWithSpecialURLOnBack\"],[\"RestoreToDifferentWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreToDifferentWindow\"],[\"RestoreWindow\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreWindow\"],[\"RestoreWindowAndTab\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreWindowAndTab\"],[\"RestoreWithExistingSiteInstance\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/RestoreWithExistingSiteInstance\"],[\"MediaUILayoutTest\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MediaUILayoutTest\"],[\"BrowserCloseBeforeUnloadCancel\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseBeforeUnloadCancel\"],[\"BrowserCloseBeforeUnloadOK\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseBeforeUnloadOK\"],[\"BrowserCloseInfiniteBeforeUnload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteBeforeUnload\"],[\"BrowserCloseInfiniteBeforeUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteBeforeUnloadAlert\"],[\"BrowserCloseInfiniteUnload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteUnload\"],[\"BrowserCloseInfiniteUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseInfiniteUnloadAlert\"],[\"BrowserCloseNoUnloadListeners\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseNoUnloadListeners\"],[\"BrowserCloseTabWhenOtherTabHasListener\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTabWhenOtherTabHasListener\"],[\"BrowserCloseTwoSecondBeforeUnload\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTwoSecondBeforeUnload\"],[\"BrowserCloseTwoSecondBeforeUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTwoSecondBeforeUnloadAlert\"],[\"BrowserCloseTwoSecondUnloadAlert\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/BrowserCloseTwoSecondUnloadAlert\"],[\"CrossSiteInfiniteBeforeUnloadSync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteInfiniteBeforeUnloadSync\"],[\"CrossSiteInfiniteUnloadSync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/CrossSiteInfiniteUnloadSync\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"Perf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Perf\"],[\"DoesBrowserConsumeViewSourcePrefix\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/DoesBrowserConsumeViewSourcePrefix\"],[\"ViewSourceInMenuEnabledOnANormalPage\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/ViewSourceInMenuEnabledOnANormalPage\"],[\"WindowOpenClose\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WindowOpenClose\"],[\"AsyncOperations\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/AsyncOperations\"],[\"FileEntryToURISync\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/FileEntryToURISync\"],[\"Persistent\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Persistent\"],[\"SyncOperations\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SyncOperations\"],[\"SyncTemporary\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SyncTemporary\"],[\"Temporary\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/Temporary\"],[\"MultipleSharedWorkers\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MultipleSharedWorkers\"],[\"MultipleWorkers\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/MultipleWorkers\"],[\"SharedWorkerHttpAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SharedWorkerHttpAuth\"],[\"SingleSharedWorker\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SingleSharedWorker\"],[\"SingleWorker\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/SingleWorker\"],[\"StressJSExecution\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/StressJSExecution\"],[\"UseMachineStack\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/UseMachineStack\"],[\"WorkerCall\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerCall\"],[\"WorkerCloseFast\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerCloseFast\"],[\"WorkerContextGc\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerContextGc\"],[\"WorkerContextMultiPort\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerContextMultiPort\"],[\"WorkerEventListener\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerEventListener\"],[\"WorkerGC\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerGC\"],[\"WorkerHttpAuth\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerHttpAuth\"],[\"WorkerInit\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerInit\"],[\"WorkerLocation\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerLocation\"],[\"WorkerMessagePort\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerMessagePort\"],[\"WorkerMessagePortGC\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerMessagePortGC\"],[\"WorkerMultiPort\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerMultiPort\"],[\"WorkerReplaceGlobalConstructor\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerReplaceGlobalConstructor\"],[\"WorkerReplaceSelf\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerReplaceSelf\"],[\"WorkerScriptError\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerScriptError\"],[\"WorkerTerminate\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerTerminate\"],[\"WorkerTimeout\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/ui_tests/logs/WorkerTimeout\"]]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",1530,1794.0013931391877]],\"isStarted\":true,\"times\":[1308854237.7514689,1308854238.1329761],\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/nacl_ui_tests/logs/stdio\"]]},{\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",494653,487791.5989388458]],\"isStarted\":true,\"times\":[1308854238.1334741,1308854469.7575619],\"text\":[\"nacl_integration\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/nacl_integration/logs/stdio\"]]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":25,\"results\":[2,[\"interactive_ui_tests\"]],\"isStarted\":true,\"expectations\":[[\"output\",58401,49205.65296950881]],\"text\":[\"interactive_ui_tests\",\"9 flaky\",\"failed 5\"],\"times\":[1308854469.7582409,1308854648.4004509],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/stdio\"],[\"DoubleDisplay\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/DoubleDisplay\"],[\"NavigateAway\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/NavigateAway\"],[\"SlowTermination\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/SlowTermination\"],[\"TestInfoBarsCloseOnNewTheme\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/TestInfoBarsCloseOnNewTheme\"],[\"TestOnMouseOut\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/interactive_ui_tests/logs/TestOnMouseOut\"]]},{\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":26,\"expectations\":[[\"output\",17965,17959.261034647316]],\"isStarted\":true,\"times\":[1308854648.4008579,1308854654.5559101],\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33768/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"changes\":[{\"who\":\"mad@chromium.org\",\"when\":1308850434.874059}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:33:55.097496\",\"patchset\":1004,\"issue\":7246010,\"job_name\":\"Snap3\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"mad@chromium.org\",\"when\":1308850434.874059}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:33:55.097496\",\"patchset\":1004,\"issue\":7246010,\"job_name\":\"Snap3\",\"revision\":90030},\"submittedAt\":1308850435.10814,\"builds\":[33768],\"builderName\":\"linux\"}],\"times\":[1308850435.1985149,1308854654.5563371],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:33:54\\nChanged By: mad@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"mad@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33768,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm151-m4\",\"BuildSlave\"]]},\"33769\":{\"slave\":\"vm132-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/cacheinvalidation_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/jingle_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":33769,\"times\":[1308850635.09602,1308854885.9023221],\"blame\":[\"gagansingh@google.com\"],\"reason\":\"'gagansingh: warmest_socket_first' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2511,2763.6039156226634]],\"isStarted\":true,\"times\":[1308850635.0983939,1308850649.2867899],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/update_scripts/logs/stdio\"]]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",117737,149208.78517041728]],\"isStarted\":true,\"times\":[1308850649.287503,1308850878.893652],\"text\":[\"update\",\"r90030\",\"webkit r89412\"],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/update/logs/stdio\"]]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",311728,525211.55019688467]],\"isStarted\":true,\"times\":[1308850878.8940439,1308851819.2985139],\"text\":[\"compile\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/compile/logs/stdio\"]]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.2500000149012]],\"isStarted\":true,\"times\":[1308851819.2989459,1308851886.1455081],\"text\":[\"check_deps\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/check_deps/logs/stdio\"]]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89195,89471.506595476996]],\"isStarted\":true,\"times\":[1308851886.145973,1308851930.0293241],\"text\":[\"base_unittests\",\"4 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/base_unittests/logs/stdio\"]]},{\"name\":\"cacheinvalidation_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",111429,112000.3466888844]],\"isStarted\":true,\"times\":[1308851930.0299311,1308851930.6008911],\"text\":[\"cacheinvalidation_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/cacheinvalidation_unittests/logs/stdio\"]]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",7026,7022.4714076070231]],\"isStarted\":true,\"times\":[1308851930.6014049,1308851933.7706831],\"text\":[\"crypto_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/crypto_unittests/logs/stdio\"]]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",6184,6218.7258273875932]],\"isStarted\":true,\"times\":[1308851933.77104,1308851934.244421],\"text\":[\"googleurl_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/googleurl_unittests/logs/stdio\"]]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",1258071,1258074.6041288832]],\"isStarted\":true,\"times\":[1308851934.24494,1308851937.244864],\"text\":[\"gpu_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/gpu_unittests/logs/stdio\"]]},{\"name\":\"jingle_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",15408,15409.54490553393]],\"isStarted\":true,\"times\":[1308851937.245259,1308851943.884259],\"text\":[\"jingle_unittests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/jingle_unittests/logs/stdio\"]]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",33780,33787.571332563646]],\"isStarted\":true,\"times\":[1308851943.8846159,1308851949.265976],\"text\":[\"media_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/media_unittests/logs/stdio\"]]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",618729,605428.61764484784]],\"isStarted\":true,\"times\":[1308851949.266309,1308852101.8053491],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/net_unittests/logs/stdio\"]]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",2897,2896.3421437506813]],\"isStarted\":true,\"times\":[1308852101.8057139,1308852102.5709591],\"text\":[\"printing_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/printing_unittests/logs/stdio\"]]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",48392,48402.024459302418]],\"isStarted\":true,\"times\":[1308852102.571491,1308852110.614933],\"text\":[\"remoting_unittests\",\"4 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/remoting_unittests/logs/stdio\"]]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",92468,91807.491735259144]],\"isStarted\":true,\"times\":[1308852110.6154649,1308852183.234813],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/test_shell_tests/logs/stdio\"]]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",33345,33390.325473628902]],\"isStarted\":true,\"times\":[1308852183.2352951,1308852200.9568679],\"text\":[\"safe_browsing_tests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/safe_browsing_tests/logs/stdio\"]]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",14042,14047.240702465853]],\"isStarted\":true,\"times\":[1308852200.957468,1308852212.569068],\"text\":[\"ipc_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/ipc_tests/logs/stdio\"]]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",73010,73019.66559876356]],\"isStarted\":true,\"times\":[1308852212.5696039,1308852226.447623],\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/sync_unit_tests/logs/stdio\"]]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",551116,554196.55216505635]],\"isStarted\":true,\"times\":[1308852226.448184,1308852337.554848],\"text\":[\"unit_tests\",\"7 disabled\",\"5 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/unit_tests/logs/stdio\"]]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",4525,4632.4315983873639]],\"isStarted\":true,\"times\":[1308852337.5552559,1308852339.2839489],\"text\":[\"app_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/app_unittests/logs/stdio\"]]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",17730,17909.499386082418]],\"isStarted\":true,\"times\":[1308852339.284312,1308852360.976485],\"text\":[\"gfx_unittests\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/gfx_unittests/logs/stdio\"]]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",711968,724350.32154909626]],\"isStarted\":true,\"times\":[1308852360.977073,1308853816.6270599],\"text\":[\"browser_tests\",\"22 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/browser_tests/logs/stdio\"]]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",183522,271733.68519790313]],\"isStarted\":true,\"times\":[1308853816.62762,1308854460.393955],\"text\":[\"ui_tests\",\"25 disabled\",\"67 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/ui_tests/logs/stdio\"]]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",1593,1794.0013931391877]],\"isStarted\":true,\"times\":[1308854460.394428,1308854462.372586],\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/nacl_ui_tests/logs/stdio\"]]},{\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",492204,487791.5989388458]],\"isStarted\":true,\"times\":[1308854462.373095,1308854679.784091],\"text\":[\"nacl_integration\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/nacl_integration/logs/stdio\"]]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":25,\"expectations\":[[\"output\",47636,49205.65296950881]],\"isStarted\":true,\"times\":[1308854679.784641,1308854881.8564961],\"text\":[\"interactive_ui_tests\",\"9 flaky\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/interactive_ui_tests/logs/stdio\"]]},{\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":26,\"expectations\":[[\"output\",17969,17959.261034647316]],\"isStarted\":true,\"times\":[1308854881.856848,1308854885.90189],\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/33769/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"changes\":[{\"who\":\"gagansingh@google.com\",\"when\":1308850634.8213639}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:37:14.994372\",\"patchset\":29242,\"issue\":7189055,\"job_name\":\"warmest_socket_first\",\"revision\":90030},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"gagansingh@google.com\",\"when\":1308850634.8213639}],\"hasPatch\":true,\"timestamp\":\"2011-06-23T17:37:14.994372\",\"patchset\":29242,\"issue\":7189055,\"job_name\":\"warmest_socket_first\",\"revision\":90030},\"submittedAt\":1308850635.0202899,\"builds\":[33769],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Thu 23 Jun 2011 10:37:14\\nChanged By: gagansingh@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"gagansingh@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",33769,\"Build\"],[\"got_revision\",\"90030\",\"Source\"],[\"got_webkit_revision\",\"89412\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",90030,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm132-m4\",\"BuildSlave\"]]}}"]]
\ No newline at end of file
diff --git a/tests/data/testCMDbuilds_expected.txt b/tests/data/testCMDbuilds_expected.txt
deleted file mode 100644
index 120bdb3..0000000
--- a/tests/data/testCMDbuilds_expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-"linux/33764 revision:90227 result:3 blame:commit-bot@chromium.org,zea@chromium.org\n"
\ No newline at end of file
diff --git a/tests/data/testCMDbusy.json b/tests/data/testCMDbusy.json
deleted file mode 100644
index a892fe4..0000000
--- a/tests/data/testCMDbusy.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux?filter=1","{\"state\":\"building\",\"basedir\":\"linux\",\"cachedBuilds\":[29989,29990,29991,29992,29993,29994,29995,29996,29997,29998],\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[29974,29976,29978,29979,29980,29981,29982,29983,29984,29985,29986,29987,29988,29989,29990,29991,29992,29993,29994,29995,29996,29997,29998]}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/?select=29974&select=29976&select=29978&select=29979&select=29980&select=29981&select=29982&select=29983&select=29984&select=29985&select=29986&select=29987&select=29988&select=29989&select=29990&select=29991&select=29992&select=29993&select=29994&select=29995&select=29996&select=29997&select=29998&filter=1","{\"29989\":{\"slave\":\"vm158-m4\",\"builderName\":\"linux\",\"number\":29989,\"currentStep\":{\"name\":\"test_shell_tests\",\"step_number\":12,\"expectations\":[[\"output\",35940,88872.957486858126]],\"isStarted\":true,\"times\":[1306962599.0325451,null],\"eta\":27.890528387504496,\"text\":[\"running test_shell_tests\"]},\"times\":[1306961391.1087201,null],\"blame\":[\"asvitkine@chromium.org\"],\"reason\":\"'asvitkine: sessions_webui' try job\",\"eta\":1895.5449573993683,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961391.1110189,1306961408.2622659]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",50445,103995.78669216442]],\"isStarted\":true,\"times\":[1306961408.262949,1306961592.6703391],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",53939,390640.26791972376]],\"isStarted\":true,\"times\":[1306961592.6710639,1306962344.1808901],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962344.181284,1306962400.664686],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88916,88903.959994856181]],\"isStarted\":true,\"times\":[1306962400.6653049,1306962443.1107061],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962443.1115401,1306962444.3372409],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962444.3377409,1306962444.8290241],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254431,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962444.8295071,1306962447.7929311],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33007,33181.805471766304]],\"isStarted\":true,\"times\":[1306962447.7932911,1306962451.0277641],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598767,597808.24562881095]],\"isStarted\":true,\"times\":[1306962451.02829,1306962593.6460791],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2895,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962593.6466191,1306962594.4495161],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48998,48877.535366709162]],\"isStarted\":true,\"times\":[1306962594.4502659,1306962599.0320561],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"step_number\":12,\"expectations\":[[\"output\",35940,88872.957486858126]],\"isStarted\":true,\"times\":[1306962599.0325451,null],\"eta\":27.890528387504496,\"text\":[\"running test_shell_tests\"]},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961390.917593}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:51.059757\",\"patchset\":13001,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961390.917593}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:51.059757\",\"patchset\":13001,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"submittedAt\":1306961391.0699761,\"builds\":[29989],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:49:50\\nChanged By: asvitkine@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"asvitkine@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29989,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm158-m4\",\"BuildSlave\"]]},\"29988\":{\"slave\":\"vm164-m4\",\"builderName\":\"linux\",\"number\":29988,\"currentStep\":{\"name\":\"base_unittests\",\"step_number\":4,\"expectations\":[[\"output\",24831,88903.959994856181]],\"isStarted\":true,\"times\":[1306962632.070729,null],\"eta\":30.81891843155033,\"text\":[\"running base_unittests\"]},\"times\":[1306961381.2477441,null],\"blame\":[\"asvitkine@chromium.org\"],\"reason\":\"'asvitkine: sessions_webui' try job\",\"eta\":2100.7474067211151,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2383,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961381.2499211,1306961396.2598579]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",174203,103995.78669216442]],\"isStarted\":true,\"times\":[1306961396.2605529,1306961674.6092999],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",486108,390640.26791972376]],\"isStarted\":true,\"times\":[1306961674.609736,1306962561.9770319],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962561.977668,1306962632.07022],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"step_number\":4,\"expectations\":[[\"output\",24831,88903.959994856181]],\"isStarted\":true,\"times\":[1306962632.070729,null],\"eta\":30.81891843155033,\"text\":[\"running base_unittests\"]},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961380.9357319}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:41.077131\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961380.9357319}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:41.077131\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"submittedAt\":1306961381.087553,\"builds\":[29988],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:49:40\\nChanged By: asvitkine@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"asvitkine@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29988,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm164-m4\",\"BuildSlave\"]]},\"29981\":{\"slave\":\"vm137-m4\",\"builderName\":\"linux\",\"number\":29981,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",970818,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961623.2440629,null],\"eta\":219.42427366157415,\"text\":[\"running browser_tests\"]},\"times\":[1306960131.107188,null],\"blame\":[\"scr@chromium.org\"],\"reason\":\"'scr: 82437-jstests#28450' try job\",\"eta\":1217.4288907051086,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2300.6369009182272]],\"isStarted\":true,\"times\":[1306960131.1092,1306960152.275573]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",64769,52905.293537315316]],\"isStarted\":true,\"times\":[1306960152.276346,1306960348.7229531],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",427195,65668.143357789944]],\"isStarted\":true,\"times\":[1306960348.723501,1306961141.512723],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306961141.513355,1306961194.278477],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89019,88847.679958849418]],\"isStarted\":true,\"times\":[1306961194.279021,1306961236.682672],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7088.0088203261084]],\"isStarted\":true,\"times\":[1306961236.6831501,1306961238.118331],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6087.2433796111509]],\"isStarted\":true,\"times\":[1306961238.118824,1306961238.5931699],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254431,1254428.2502360516]],\"isStarted\":true,\"times\":[1306961238.593657,1306961243.3313911],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33010,33075.44377413045]],\"isStarted\":true,\"times\":[1306961243.331846,1306961246.7033451],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598566,592834.96503048821]],\"isStarted\":true,\"times\":[1306961246.703851,1306961393.9137149],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2895,2894.348897114488]],\"isStarted\":true,\"times\":[1306961393.914042,1306961394.5560529],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48999,48961.141466836656]],\"isStarted\":true,\"times\":[1306961394.556555,1306961399.1603279],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89073,89033.829947432503]],\"isStarted\":true,\"times\":[1306961399.160825,1306961464.3310831],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34860,34515.790712442118]],\"isStarted\":true,\"times\":[1306961464.331696,1306961478.283402],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14043,14008.694404856571]],\"isStarted\":true,\"times\":[1306961478.283917,1306961488.9671221],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71503,71277.759120703849]],\"isStarted\":true,\"times\":[1306961488.9676299,1306961500.2276011],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532488,531903.36805738043]],\"isStarted\":true,\"times\":[1306961500.2281041,1306961603.243546],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9215,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961603.244189,1306961617.173692],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12298,12298.48766945175]],\"isStarted\":true,\"times\":[1306961617.1740611,1306961623.2435279],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",970818,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961623.2440629,null],\"eta\":219.42427366157415,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,532422.81009651895]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"scr@chromium.org\",\"when\":1306960130.8990719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:28:51.043179\",\"patchset\":5010,\"issue\":7087014,\"job_name\":\"82437-jstests#28450\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"scr@chromium.org\",\"when\":1306960130.8990719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:28:51.043179\",\"patchset\":5010,\"issue\":7087014,\"job_name\":\"82437-jstests#28450\",\"revision\":87468},\"submittedAt\":1306960131.048722,\"builds\":[29981],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:28:50\\nChanged By: scr@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"scr@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29981,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm137-m4\",\"BuildSlave\"]]},\"29980\":{\"slave\":\"vm141-m4\",\"builderName\":\"linux\",\"number\":29980,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",263564,532422.81009651895]],\"isStarted\":true,\"times\":[1306962350.485816,null],\"eta\":338.65950134459763,\"text\":[\"running ui_tests\"]},\"times\":[1306959781.1732881,null],\"blame\":[\"lipalani@google.com\"],\"reason\":\"'lipalani: b63#482f89' try job\",\"eta\":666.01455593109131,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2300.6369009182272]],\"isStarted\":true,\"times\":[1306959781.175313,1306959794.25546]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51798,52905.293537315316]],\"isStarted\":true,\"times\":[1306959794.2560861,1306959960.4006319],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",22022,65668.143357789944]],\"isStarted\":true,\"times\":[1306959960.401207,1306960605.258157],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306960605.2586961,1306960658.9057081],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88849,88847.679958849418]],\"isStarted\":true,\"times\":[1306960658.906306,1306960701.4604111],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7087,7088.0088203261084]],\"isStarted\":true,\"times\":[1306960701.4608181,1306960703.239259],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6087.2433796111509]],\"isStarted\":true,\"times\":[1306960703.2397749,1306960703.6719601],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254428.2502360516]],\"isStarted\":true,\"times\":[1306960703.672318,1306960706.7599471],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32981,33075.44377413045]],\"isStarted\":true,\"times\":[1306960706.7603159,1306960710.0132411],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592660,592834.96503048821]],\"isStarted\":true,\"times\":[1306960710.0137489,1306960851.3933589],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2894.348897114488]],\"isStarted\":true,\"times\":[1306960851.393955,1306960852.097194],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48961.141466836656]],\"isStarted\":true,\"times\":[1306960852.097688,1306960856.6250601],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89006,89033.829947432503]],\"isStarted\":true,\"times\":[1306960856.625567,1306960920.4685969],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34515.790712442118]],\"isStarted\":true,\"times\":[1306960920.4691131,1306960936.2251191],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14011,14008.694404856571]],\"isStarted\":true,\"times\":[1306960936.2256579,1306960946.2483251],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71234,71277.759120703849]],\"isStarted\":true,\"times\":[1306960946.248884,1306960958.2707789],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531716,531903.36805738043]],\"isStarted\":true,\"times\":[1306960958.2713361,1306961070.0343339],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9193,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961070.034883,1306961084.752321],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12300,12298.48766945175]],\"isStarted\":true,\"times\":[1306961084.7526751,1306961090.9703109],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1222793,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961090.970917,1306962350.485306],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",263564,532422.81009651895]],\"isStarted\":true,\"times\":[1306962350.485816,null],\"eta\":338.65950134459763,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306959780.9012151}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:23:01.039593\",\"patchset\":1,\"issue\":7057059,\"job_name\":\"b63#482f89\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306959780.9012151}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:23:01.039593\",\"patchset\":1,\"issue\":7057059,\"job_name\":\"b63#482f89\",\"revision\":87468},\"submittedAt\":1306959781.06563,\"builds\":[29980],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:23:00\\nChanged By: lipalani@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"lipalani@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29980,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm141-m4\",\"BuildSlave\"]]},\"29983\":{\"slave\":\"vm136-m4\",\"builderName\":\"linux\",\"number\":29983,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",820009,1217741.796717932]],\"isStarted\":true,\"times\":[1306961794.6645501,null],\"eta\":377.57978633108621,\"text\":[\"running browser_tests\"]},\"times\":[1306960451.091033,null],\"blame\":[\"wjia@chromium.org\"],\"reason\":\"'wjia: dib_mac' try job\",\"eta\":1447.2475526332855,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2305.3184504591136]],\"isStarted\":true,\"times\":[1306960451.0926819,1306960464.2721491]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",52745,58259.146768657658]],\"isStarted\":true,\"times\":[1306960464.272846,1306960637.659935],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",9017,190806.07167889498]],\"isStarted\":true,\"times\":[1306960637.66047,1306961311.2264121],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000009]],\"isStarted\":true,\"times\":[1306961311.2269461,1306961364.465807],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88850,88879.839979424709]],\"isStarted\":true,\"times\":[1306961364.4663119,1306961406.3275239],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7085,7088.5044101630538]],\"isStarted\":true,\"times\":[1306961406.3280411,1306961407.9918571],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6083.6216898055754]],\"isStarted\":true,\"times\":[1306961407.9923379,1306961408.431469],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254430,1254429.1251180258]],\"isStarted\":true,\"times\":[1306961408.431988,1306961411.6696579],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32984,33042.221887065229]],\"isStarted\":true,\"times\":[1306961411.6700289,1306961414.9646029],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592697,595767.98251524405]],\"isStarted\":true,\"times\":[1306961414.965106,1306961559.2084689],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.674448557244]],\"isStarted\":true,\"times\":[1306961559.2090499,1306961559.7660279],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48957,48981.070733418324]],\"isStarted\":true,\"times\":[1306961559.7665269,1306961564.7019429],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89010,89052.914973716252]],\"isStarted\":true,\"times\":[1306961564.7023201,1306961628.859467],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34687.895356221059]],\"isStarted\":true,\"times\":[1306961628.859967,1306961643.565053],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13875,13993.347202428286]],\"isStarted\":true,\"times\":[1306961643.5656171,1306961653.5401101],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71264,71172.879560351925]],\"isStarted\":true,\"times\":[1306961653.540627,1306961664.382376],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531910,531560.18402869022]],\"isStarted\":true,\"times\":[1306961664.382885,1306961772.8153701],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9201,9187.3315718330432]],\"isStarted\":true,\"times\":[1306961772.8157561,1306961788.2472701],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12301,12298.243834725876]],\"isStarted\":true,\"times\":[1306961788.247762,1306961794.664067],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",820009,1217741.796717932]],\"isStarted\":true,\"times\":[1306961794.6645501,null],\"eta\":377.57978633108621,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,535436.90504825953]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.0615236721969]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,448696.0361404547]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100296.75597514361]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.26979008361]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:34:11.047558\",\"hasPatch\":true,\"changes\":[{\"who\":\"wjia@chromium.org\",\"when\":1306960450.8969829}],\"job_name\":\"dib_mac\",\"revision\":87468},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:34:11.047558\",\"hasPatch\":true,\"changes\":[{\"who\":\"wjia@chromium.org\",\"when\":1306960450.8969829}],\"job_name\":\"dib_mac\",\"revision\":87468},\"submittedAt\":1306960451.058042,\"builds\":[29983],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:34:10\\nChanged By: wjia@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"wjia@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29983,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm136-m4\",\"BuildSlave\"]]},\"29982\":{\"slave\":\"vm140-m4\",\"builderName\":\"linux\",\"number\":29982,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",956642,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961535.3754971,null],\"eta\":232.05354242556825,\"text\":[\"running browser_tests\"]},\"times\":[1306960221.0897329,null],\"blame\":[\"sergeyu@chromium.org\"],\"reason\":\"'sergeyu: key_exch#728cab' try job\",\"eta\":1230.0581586360931,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2300.6369009182272]],\"isStarted\":true,\"times\":[1306960221.0920441,1306960234.269839]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",50564,52905.293537315316]],\"isStarted\":true,\"times\":[1306960234.2705381,1306960408.1440661],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",10668,65668.143357789944]],\"isStarted\":true,\"times\":[1306960408.1448219,1306961059.0115371],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306961059.0121169,1306961107.605588],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88851,88847.679958849418]],\"isStarted\":true,\"times\":[1306961107.6061189,1306961149.846652],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7088.0088203261084]],\"isStarted\":true,\"times\":[1306961149.847182,1306961150.9103999],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6087.2433796111509]],\"isStarted\":true,\"times\":[1306961150.910989,1306961151.3203161],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254428.2502360516]],\"isStarted\":true,\"times\":[1306961151.3207991,1306961154.953999],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32980,33075.44377413045]],\"isStarted\":true,\"times\":[1306961154.95434,1306961158.2824769],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592568,592834.96503048821]],\"isStarted\":true,\"times\":[1306961158.282974,1306961298.3375261],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2893,2894.348897114488]],\"isStarted\":true,\"times\":[1306961298.338032,1306961298.8939731],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48961.141466836656]],\"isStarted\":true,\"times\":[1306961298.894459,1306961303.6929209],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88997,89033.829947432503]],\"isStarted\":true,\"times\":[1306961303.6933391,1306961367.3030491],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34491,34515.790712442118]],\"isStarted\":true,\"times\":[1306961367.3035829,1306961383.343451],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14008,14008.694404856571]],\"isStarted\":true,\"times\":[1306961383.3437891,1306961393.8958189],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71229,71277.759120703849]],\"isStarted\":true,\"times\":[1306961393.896332,1306961402.2659011],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531739,531903.36805738043]],\"isStarted\":true,\"times\":[1306961402.2664499,1306961512.3977411],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9195,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961512.398232,1306961529.1797221],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12299,12298.48766945175]],\"isStarted\":true,\"times\":[1306961529.1802609,1306961535.374975],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",956642,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961535.3754971,null],\"eta\":232.05354242556825,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,532422.81009651895]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"sergeyu@chromium.org\",\"when\":1306960220.8978751}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:30:21.054081\",\"patchset\":20,\"issue\":7006029,\"job_name\":\"key_exch#728cab\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"sergeyu@chromium.org\",\"when\":1306960220.8978751}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:30:21.054081\",\"patchset\":20,\"issue\":7006029,\"job_name\":\"key_exch#728cab\",\"revision\":87468},\"submittedAt\":1306960221.0643461,\"builds\":[29982],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:30:20\\nChanged By: sergeyu@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"sergeyu@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29982,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm140-m4\",\"BuildSlave\"]]},\"29985\":{\"slave\":\"vm155-m4\",\"builderName\":\"linux\",\"number\":29985,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",49336,1217741.796717932]],\"isStarted\":true,\"times\":[1306962605.150058,null],\"eta\":554.6016690879959,\"text\":[\"running browser_tests\"]},\"times\":[1306961050.948127,null],\"blame\":[\"tfarina@chromium.org\"],\"reason\":\"'tfarina: views-focusable#a0101' try job\",\"eta\":1089.4367961883545,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2283.1592252295568]],\"isStarted\":true,\"times\":[1306961050.9501891,1306961065.5608289]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",68316,74425.573384328833]],\"isStarted\":true,\"times\":[1306961065.561291,1306961248.845613],\"text\":[\"update\",\"r87519\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",322657,308086.53583944752]],\"isStarted\":true,\"times\":[1306961248.8461871,1306962064.161891],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000005]],\"isStarted\":true,\"times\":[1306962064.1624401,1306962130.8471119],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88941,88894.919989712362]],\"isStarted\":true,\"times\":[1306962130.8477311,1306962174.5000939],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7102,7088.5044101630538]],\"isStarted\":true,\"times\":[1306962174.500669,1306962176.001009],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6094,6112.3108449027877]],\"isStarted\":true,\"times\":[1306962176.001524,1306962176.4279399],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254448,1254429.1251180258]],\"isStarted\":true,\"times\":[1306962176.4284339,1306962180.0695629],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33680,33351.610943532614]],\"isStarted\":true,\"times\":[1306962180.069922,1306962183.5146799],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598673,597202.49125762202]],\"isStarted\":true,\"times\":[1306962183.5152211,1306962347.405988],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2913,2896.674448557244]],\"isStarted\":true,\"times\":[1306962347.4063389,1306962348.641937],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",49021,48981.070733418324]],\"isStarted\":true,\"times\":[1306962348.642432,1306962353.6349969],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88970,89052.914973716252]],\"isStarted\":true,\"times\":[1306962353.6355469,1306962424.426975],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34141,34687.895356221059]],\"isStarted\":true,\"times\":[1306962424.4273379,1306962444.20766],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13995,14015.173601214143]],\"isStarted\":true,\"times\":[1306962444.2082119,1306962456.0770919],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71088,71172.879560351925]],\"isStarted\":true,\"times\":[1306962456.077569,1306962468.6812789],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531126,531965.09201434511]],\"isStarted\":true,\"times\":[1306962468.681644,1306962583.33869],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9192,9199.6657859165207]],\"isStarted\":true,\"times\":[1306962583.339191,1306962598.598623],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12318,12298.243834725876]],\"isStarted\":true,\"times\":[1306962598.5991261,1306962605.1495371],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",49336,1217741.796717932]],\"isStarted\":true,\"times\":[1306962605.150058,null],\"eta\":554.6016690879959,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,535436.90504825953]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.0615236721969]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,448696.0361404547]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100296.75597514361]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.26979008361]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"tfarina@chromium.org\",\"when\":1306961050.90747,\"revision\":\"HEAD\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:44:10.907567\",\"patchset\":1,\"issue\":7020040,\"job_name\":\"views-focusable#a0101\",\"revision\":\"HEAD\"},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"tfarina@chromium.org\",\"when\":1306961050.90747,\"revision\":\"HEAD\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:44:10.907567\",\"patchset\":1,\"issue\":7020040,\"job_name\":\"views-focusable#a0101\",\"revision\":\"HEAD\"},\"submittedAt\":1306961050.9183781,\"builds\":[29985],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:44:10\\nChanged By: tfarina@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"tfarina@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29985,\"Build\"],[\"got_revision\",\"87519\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"HEAD\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm155-m4\",\"BuildSlave\"]]},\"29984\":{\"slave\":\"vm135-m4\",\"builderName\":\"linux\",\"number\":29984,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",580617,1217741.796717932]],\"isStarted\":true,\"times\":[1306962101.9466491,null],\"eta\":302.42102244757905,\"text\":[\"running browser_tests\"]},\"times\":[1306960621.204798,null],\"blame\":[\"asvitkine@chromium.org\"],\"reason\":\"'asvitkine: sessions_webui' try job\",\"eta\":837.25614953041077,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2283.1592252295568]],\"isStarted\":true,\"times\":[1306960621.2071669,1306960634.3419981]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51795,74425.573384328833]],\"isStarted\":true,\"times\":[1306960634.342705,1306960840.320363],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",66195,308086.53583944752]],\"isStarted\":true,\"times\":[1306960840.3207581,1306961585.6757619],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000005]],\"isStarted\":true,\"times\":[1306961585.6762969,1306961649.7442291],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88922,88894.919989712362]],\"isStarted\":true,\"times\":[1306961649.744735,1306961693.762104],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7088.5044101630538]],\"isStarted\":true,\"times\":[1306961693.7624631,1306961697.2947969],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6082,6112.3108449027877]],\"isStarted\":true,\"times\":[1306961697.2951369,1306961697.9824491],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254429.1251180258]],\"isStarted\":true,\"times\":[1306961697.9829581,1306961700.9834809],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33008,33351.610943532614]],\"isStarted\":true,\"times\":[1306961700.9838991,1306961704.410785],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598742,597202.49125762202]],\"isStarted\":true,\"times\":[1306961704.411299,1306961854.975668],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.674448557244]],\"isStarted\":true,\"times\":[1306961854.9762759,1306961855.604152],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",49000,48981.070733418324]],\"isStarted\":true,\"times\":[1306961855.6046331,1306961860.1587651],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89070,89052.914973716252]],\"isStarted\":true,\"times\":[1306961860.159261,1306961925.794353],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34860,34687.895356221059]],\"isStarted\":true,\"times\":[1306961925.7948849,1306961941.0395491],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14039,14015.173601214143]],\"isStarted\":true,\"times\":[1306961941.040169,1306961951.4838309],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71463,71172.879560351925]],\"isStarted\":true,\"times\":[1306961951.484437,1306961964.223958],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532539,531965.09201434511]],\"isStarted\":true,\"times\":[1306961964.2245519,1306962080.9425881],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9100,9199.6657859165207]],\"isStarted\":true,\"times\":[1306962080.9430799,1306962095.7984509],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12298,12298.243834725876]],\"isStarted\":true,\"times\":[1306962095.7989781,1306962101.946039],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",580617,1217741.796717932]],\"isStarted\":true,\"times\":[1306962101.9466491,null],\"eta\":302.42102244757905,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,535436.90504825953]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.0615236721969]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,448696.0361404547]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100296.75597514361]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.26979008361]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306960620.8988791}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:37:01.060807\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306960620.8988791}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:37:01.060807\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"submittedAt\":1306960621.0713129,\"builds\":[29984],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:37:00\\nChanged By: asvitkine@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"asvitkine@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29984,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm135-m4\",\"BuildSlave\"]]},\"29987\":{\"slave\":\"vm146-m4\",\"builderName\":\"linux\",\"number\":29987,\"currentStep\":{\"name\":\"unit_tests\",\"step_number\":16,\"expectations\":[[\"output\",238312,531258.54600717255]],\"isStarted\":true,\"times\":[1306962596.487438,null],\"eta\":58.016262276475537,\"text\":[\"running unit_tests\"]},\"times\":[1306961243.0145979,null],\"blame\":[\"sanjeevr@chromium.org\"],\"reason\":\"'sanjeevr: cp_cleanup#fae5eb' try job\",\"eta\":1794.1171133518219,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961243.016789,1306961256.2481871]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",59257,103995.78669216442]],\"isStarted\":true,\"times\":[1306961256.248878,1306961452.4130111],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",315859,390640.26791972376]],\"isStarted\":true,\"times\":[1306961452.413451,1306962229.2223461],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962229.2228861,1306962286.29351],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88914,88903.959994856181]],\"isStarted\":true,\"times\":[1306962286.2940199,1306962329.1074879],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962329.1079891,1306962330.4657021],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962330.466197,1306962330.8937731],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254430,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962330.894691,1306962333.921128],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33012,33181.805471766304]],\"isStarted\":true,\"times\":[1306962333.9214759,1306962337.4628971],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597097,597808.24562881095]],\"isStarted\":true,\"times\":[1306962337.463397,1306962485.539254],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962485.539793,1306962486.1850531],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48914,48877.535366709162]],\"isStarted\":true,\"times\":[1306962486.1855719,1306962490.6676829],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88987,88872.957486858126]],\"isStarted\":true,\"times\":[1306962490.6683011,1306962558.4741549],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34128,34772.447678110533]],\"isStarted\":true,\"times\":[1306962558.474704,1306962572.4974029],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13996,14026.08680060707]],\"isStarted\":true,\"times\":[1306962572.4979999,1306962583.6733079],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71259,71292.439780175962]],\"isStarted\":true,\"times\":[1306962583.6736619,1306962596.4869211],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"step_number\":16,\"expectations\":[[\"output\",238312,531258.54600717255]],\"isStarted\":true,\"times\":[1306962596.487438,null],\"eta\":58.016262276475537,\"text\":[\"running unit_tests\"]},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"sanjeevr@chromium.org\",\"when\":1306961241.9955399}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:47:22.142293\",\"patchset\":13001,\"issue\":7074023,\"job_name\":\"cp_cleanup#fae5eb\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"sanjeevr@chromium.org\",\"when\":1306961241.9955399}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:47:22.142293\",\"patchset\":13001,\"issue\":7074023,\"job_name\":\"cp_cleanup#fae5eb\",\"revision\":87468},\"submittedAt\":1306961242.1657071,\"builds\":[29987],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:47:21\\nChanged By: sanjeevr@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"sanjeevr@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29987,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm146-m4\",\"BuildSlave\"]]},\"29986\":{\"slave\":\"vm163-m4\",\"builderName\":\"linux\",\"number\":29986,\"currentStep\":{\"name\":\"unit_tests\",\"step_number\":16,\"expectations\":[[\"output\",448251,531258.54600717255]],\"isStarted\":true,\"times\":[1306962503.4796729,null],\"eta\":16.439134120942398,\"text\":[\"running unit_tests\"]},\"times\":[1306961191.500041,null],\"blame\":[\"cdn@chromium.org\"],\"reason\":\"'cdn: ext_homepage' try job\",\"eta\":1752.5399842262268,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961191.502362,1306961203.3107109]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51825,103995.78669216442]],\"isStarted\":true,\"times\":[1306961203.311439,1306961367.932735],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",11530,390640.26791972376]],\"isStarted\":true,\"times\":[1306961367.9333141,1306962062.1993141],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962062.20017,1306962143.6093161],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88857,88903.959994856181]],\"isStarted\":true,\"times\":[1306962143.609652,1306962187.79231],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962187.7928369,1306962189.2273009],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6079,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962189.2278099,1306962189.6895411],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254430,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962189.690047,1306962193.6960809],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32983,33181.805471766304]],\"isStarted\":true,\"times\":[1306962193.696435,1306962197.1008799],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592748,597808.24562881095]],\"isStarted\":true,\"times\":[1306962197.1014211,1306962354.174366],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962354.174897,1306962355.024555],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48877.535366709162]],\"isStarted\":true,\"times\":[1306962355.0250621,1306962361.1539209],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89042,88872.957486858126]],\"isStarted\":true,\"times\":[1306962361.1546049,1306962442.815454],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34772.447678110533]],\"isStarted\":true,\"times\":[1306962442.81602,1306962474.0110409],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14011,14026.08680060707]],\"isStarted\":true,\"times\":[1306962474.0116949,1306962484.4346621],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71299,71292.439780175962]],\"isStarted\":true,\"times\":[1306962484.435199,1306962503.4789541],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"step_number\":16,\"expectations\":[[\"output\",448251,531258.54600717255]],\"isStarted\":true,\"times\":[1306962503.4796729,null],\"eta\":16.439134120942398,\"text\":[\"running unit_tests\"]},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"cdn@chromium.org\",\"when\":1306961190.9132719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:46:31.079602\",\"patchset\":1,\"issue\":7089014,\"job_name\":\"ext_homepage\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"cdn@chromium.org\",\"when\":1306961190.9132719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:46:31.079602\",\"patchset\":1,\"issue\":7089014,\"job_name\":\"ext_homepage\",\"revision\":87468},\"submittedAt\":1306961191.0905321,\"builds\":[29986],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:46:30\\nChanged By: cdn@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"cdn@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29986,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm163-m4\",\"BuildSlave\"]]},\"29974\":{\"slave\":\"vm127-m4\",\"builderName\":\"linux\",\"number\":29974,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",421451,518081.24038607569]],\"isStarted\":true,\"times\":[1306961867.354568,null],\"eta\":130.86393008727771,\"text\":[\"running ui_tests\"]},\"times\":[1306958941.0838301,null],\"blame\":[\"yoz@chromium.org\"],\"reason\":\"'yoz: view-source#2f0c4' try job\",\"eta\":450.14554238319397,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2358.0952073458188]],\"isStarted\":true,\"times\":[1306958941.086163,1306958956.2960939]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",118299,53133.348298522513]],\"isStarted\":true,\"times\":[1306958956.296747,1306959168.539382],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",441721,87470.146862319525]],\"isStarted\":true,\"times\":[1306959168.539968,1306959952.903126],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1005,1004.0000000000146]],\"isStarted\":true,\"times\":[1306959952.903583,1306960058.346354],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89189,88860.439670795269]],\"isStarted\":true,\"times\":[1306960058.3468969,1306960109.240973],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7087.0352813044337]],\"isStarted\":true,\"times\":[1306960109.2415841,1306960110.914571],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6082,6085.9470368892098]],\"isStarted\":true,\"times\":[1306960110.914978,1306960111.4913349],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254426.000944206]],\"isStarted\":true,\"times\":[1306960111.4918499,1306960114.3251691],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33010,33070.5501930436]],\"isStarted\":true,\"times\":[1306960114.3255301,1306960117.8979311],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598611,593993.72024390544]],\"isStarted\":true,\"times\":[1306960117.898442,1306960318.7522769],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2902,2894.3955884579509]],\"isStarted\":true,\"times\":[1306960318.7528551,1306960322.061327],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48997,48966.565867346624]],\"isStarted\":true,\"times\":[1306960322.0619371,1306960330.9071259],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89094,89014.319789729983]],\"isStarted\":true,\"times\":[1306960330.9074719,1306960410.019491],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34860,34581.16284976848]],\"isStarted\":true,\"times\":[1306960410.019999,1306960424.6524751],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13902,14007.555238852576]],\"isStarted\":true,\"times\":[1306960424.652796,1306960435.7890301],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71462,71286.036482815427]],\"isStarted\":true,\"times\":[1306960435.7895401,1306960449.2458539],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532538,532167.94445904391]],\"isStarted\":true,\"times\":[1306960449.2463541,1306960577.366797],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9216,9180.3051493286839]],\"isStarted\":true,\"times\":[1306960577.367403,1306960594.393502],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12300,12298.950677806999]],\"isStarted\":true,\"times\":[1306960594.3940589,1306960600.6806769],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1228085,1215034.3737434549]],\"isStarted\":true,\"times\":[1306960600.681299,1306961867.3539469],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",421451,518081.24038607569]],\"isStarted\":true,\"times\":[1306961867.354568,null],\"eta\":130.86393008727771,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.492189377575]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449747.28912363731]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98922.047801148816]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.158320668881]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"yoz@chromium.org\",\"when\":1306958940.906662}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:09:01.045546\",\"patchset\":1,\"issue\":7006030,\"job_name\":\"view-source#2f0c4\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"yoz@chromium.org\",\"when\":1306958940.906662}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:09:01.045546\",\"patchset\":1,\"issue\":7006030,\"job_name\":\"view-source#2f0c4\",\"revision\":87468},\"submittedAt\":1306958941.056422,\"builds\":[29974],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:09:00\\nChanged By: yoz@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"yoz@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29974,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm127-m4\",\"BuildSlave\"]]},\"29976\":{\"slave\":\"vm151-m4\",\"builderName\":\"linux\",\"text\":[\"net_unittests\"],\"number\":29976,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",41811,528969.6201930379]],\"isStarted\":true,\"times\":[1306962586.94206,null],\"eta\":545.21271277070002,\"text\":[\"running ui_tests\"]},\"times\":[1306959341.026825,null],\"blame\":[\"jhawkins@chromium.org\"],\"reason\":\"'jhawkins: syncpassphrase#b8dbb8' try job\",\"eta\":836.37640929222107,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2340.2738018364548]],\"isStarted\":true,\"times\":[1306959341.0288789,1306959364.340538]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",68508,55132.587074630632]],\"isStarted\":true,\"times\":[1306959364.3412399,1306959643.2814119],\"text\":[\"update\",\"r87515\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",322517,114219.28671557989]],\"isStarted\":true,\"times\":[1306959643.281805,1306960561.5649381],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000036]],\"isStarted\":true,\"times\":[1306960561.565563,1306960617.1999199],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88913,88841.359917698821]],\"isStarted\":true,\"times\":[1306960617.2005031,1306960659.816062],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7087,7087.0176406522169]],\"isStarted\":true,\"times\":[1306960659.816607,1306960662.582243],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.4867592223027]],\"isStarted\":true,\"times\":[1306960662.5828309,1306960662.9677839],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254427.500472103]],\"isStarted\":true,\"times\":[1306960662.968262,1306960666.0465419],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33636,33168.8875482609]],\"isStarted\":true,\"times\":[1306960666.046896,1306960669.470685],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"results\":[2,[\"net_unittests\"]],\"isStarted\":true,\"expectations\":[[\"output\",592980,592984.93006097642]],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\",\"failed 1\"],\"times\":[1306960669.4712019,1306961055.6697409]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2894.6977942289755]],\"isStarted\":true,\"times\":[1306961055.6707621,1306961056.329133],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48962.282933673312]],\"isStarted\":true,\"times\":[1306961056.3296349,1306961060.871639],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89036,89009.659894864992]],\"isStarted\":true,\"times\":[1306961060.8722489,1306961130.1032619],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34491,34537.581424884236]],\"isStarted\":true,\"times\":[1306961130.1037929,1306961146.3753891],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14007,14008.388809713144]],\"isStarted\":true,\"times\":[1306961146.3759041,1306961155.31534],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71247,71266.518241407714]],\"isStarted\":true,\"times\":[1306961155.3158309,1306961167.5497651],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531686,531805.73611476098]],\"isStarted\":true,\"times\":[1306961167.55024,1306961273.7771039],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9125,9196.326287332171]],\"isStarted\":true,\"times\":[1306961273.7777269,1306961287.7196109],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12299,12297.9753389035]],\"isStarted\":true,\"times\":[1306961287.720129,1306961293.9179001],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1217548,1216346.1868717275]],\"isStarted\":true,\"times\":[1306961293.9182191,1306962586.9415541],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",41811,528969.6201930379]],\"isStarted\":true,\"times\":[1306962586.94206,null],\"eta\":545.21271277070002,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.2460946887875]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452865.14456181868]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98991.023900574408]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16583.079160334441]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"jhawkins@chromium.org\",\"when\":1306959340.954771,\"revision\":\"87515\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:15:40.954863\",\"patchset\":1,\"issue\":7027037,\"job_name\":\"syncpassphrase#b8dbb8\",\"revision\":\"87515\"},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"jhawkins@chromium.org\",\"when\":1306959340.954771,\"revision\":\"87515\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:15:40.954863\",\"patchset\":1,\"issue\":7027037,\"job_name\":\"syncpassphrase#b8dbb8\",\"revision\":\"87515\"},\"submittedAt\":1306959340.979852,\"builds\":[29976],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:15:40\\nChanged By: jhawkins@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jhawkins@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29976,\"Build\"],[\"got_revision\",\"87515\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87515\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm151-m4\",\"BuildSlave\"]]},\"29978\":{\"slave\":\"vm123-m4\",\"builderName\":\"linux\",\"text\":[\"browser_tests\"],\"number\":29978,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",322460,528969.6201930379]],\"isStarted\":true,\"times\":[1306962181.137372,null],\"eta\":231.11911720679063,\"text\":[\"running ui_tests\"]},\"times\":[1306959641.1467819,null],\"blame\":[\"zelidrag@chromium.org\"],\"reason\":\"'zelidrag: monitor' try job\",\"eta\":522.28281283378601,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2340.2738018364548]],\"isStarted\":true,\"times\":[1306959641.1487429,1306959653.253159]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51124,55132.587074630632]],\"isStarted\":true,\"times\":[1306959653.2538991,1306959819.494679],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",26984,114219.28671557989]],\"isStarted\":true,\"times\":[1306959819.495281,1306960427.703151],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000036]],\"isStarted\":true,\"times\":[1306960427.7036591,1306960485.645787],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88851,88841.359917698821]],\"isStarted\":true,\"times\":[1306960485.6464059,1306960527.983372],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7087.0176406522169]],\"isStarted\":true,\"times\":[1306960527.9839129,1306960529.2520881],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.4867592223027]],\"isStarted\":true,\"times\":[1306960529.2525899,1306960529.6079099],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254431,1254427.500472103]],\"isStarted\":true,\"times\":[1306960529.6083879,1306960532.466197],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32982,33168.8875482609]],\"isStarted\":true,\"times\":[1306960532.466619,1306960535.6729519],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592632,592984.93006097642]],\"isStarted\":true,\"times\":[1306960535.673461,1306960677.7149899],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2894,2894.6977942289755]],\"isStarted\":true,\"times\":[1306960677.715574,1306960678.2348571],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48958,48962.282933673312]],\"isStarted\":true,\"times\":[1306960678.2353361,1306960682.6804249],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89000,89009.659894864992]],\"isStarted\":true,\"times\":[1306960682.681,1306960747.9629581],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34537.581424884236]],\"isStarted\":true,\"times\":[1306960747.9634299,1306960762.6868589],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14007,14008.388809713144]],\"isStarted\":true,\"times\":[1306960762.687413,1306960771.5671389],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71253,71266.518241407714]],\"isStarted\":true,\"times\":[1306960771.567672,1306960780.976691],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531657,531805.73611476098]],\"isStarted\":true,\"times\":[1306960780.97733,1306960881.0457029],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9190,9196.326287332171]],\"isStarted\":true,\"times\":[1306960881.0462661,1306960894.652003],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12300,12297.9753389035]],\"isStarted\":true,\"times\":[1306960894.652596,1306960902.886066],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"results\":[2,[\"browser_tests\"]],\"isStarted\":true,\"expectations\":[[\"output\",1209155,1216346.1868717275]],\"text\":[\"browser_tests\",\"21 flaky\",\"did not complete\",\"failed 1\"],\"times\":[1306960902.8864729,1306962181.1362269]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",322460,528969.6201930379]],\"isStarted\":true,\"times\":[1306962181.137372,null],\"eta\":231.11911720679063,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.2460946887875]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452865.14456181868]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98991.023900574408]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16583.079160334441]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306959640.903054}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:20:41.054664\",\"patchset\":17018,\"issue\":7076040,\"job_name\":\"monitor\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306959640.903054}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:20:41.054664\",\"patchset\":17018,\"issue\":7076040,\"job_name\":\"monitor\",\"revision\":87468},\"submittedAt\":1306959641.075568,\"builds\":[29978],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:20:40\\nChanged By: zelidrag@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"zelidrag@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29978,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm123-m4\",\"BuildSlave\"]]},\"29979\":{\"slave\":\"vm138-m4\",\"builderName\":\"linux\",\"number\":29979,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",274461,532422.81009651895]],\"isStarted\":true,\"times\":[1306962333.7081161,null],\"eta\":324.93343975551574,\"text\":[\"running ui_tests\"]},\"times\":[1306959771.0873139,null],\"blame\":[\"cevans@chromium.org\"],\"reason\":\"'chris: ssl' try job\",\"eta\":652.28849339485168,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2300.6369009182272]],\"isStarted\":true,\"times\":[1306959771.0896349,1306959784.0636711]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",58447,52905.293537315316]],\"isStarted\":true,\"times\":[1306959784.064364,1306959961.449892],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",315856,65668.143357789944]],\"isStarted\":true,\"times\":[1306959961.4505191,1306960665.859158],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306960665.859549,1306960712.512187],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88911,88847.679958849418]],\"isStarted\":true,\"times\":[1306960712.5128131,1306960756.9383891],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7088.0088203261084]],\"isStarted\":true,\"times\":[1306960756.9389801,1306960757.859484],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6077,6087.2433796111509]],\"isStarted\":true,\"times\":[1306960757.859997,1306960758.2648449],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254426,1254428.2502360516]],\"isStarted\":true,\"times\":[1306960758.265322,1306960761.3644371],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33008,33075.44377413045]],\"isStarted\":true,\"times\":[1306960761.3648469,1306960764.6949041],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597692,592834.96503048821]],\"isStarted\":true,\"times\":[1306960764.695401,1306960905.6157429],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2892,2894.348897114488]],\"isStarted\":true,\"times\":[1306960905.616339,1306960905.9836659],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48913,48961.141466836656]],\"isStarted\":true,\"times\":[1306960905.9841681,1306960910.4500289],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88924,89033.829947432503]],\"isStarted\":true,\"times\":[1306960910.4506121,1306960971.0046771],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34128,34515.790712442118]],\"isStarted\":true,\"times\":[1306960971.005229,1306960985.1776979],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13977,14008.694404856571]],\"isStarted\":true,\"times\":[1306960985.1782169,1306960993.7922699],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71063,71277.759120703849]],\"isStarted\":true,\"times\":[1306960993.792798,1306961003.4971459],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531179,531903.36805738043]],\"isStarted\":true,\"times\":[1306961003.4975441,1306961103.9689169],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9188,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961103.969547,1306961117.6934209],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12298,12298.48766945175]],\"isStarted\":true,\"times\":[1306961117.693965,1306961123.7588661],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1215011,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961123.7594609,1306962333.707741],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",274461,532422.81009651895]],\"isStarted\":true,\"times\":[1306962333.7081161,null],\"eta\":324.93343975551574,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"cevans@chromium.org\",\"when\":1306959770.914638}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:22:51.054929\",\"patchset\":1,\"issue\":7020043,\"job_name\":\"ssl\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"cevans@chromium.org\",\"when\":1306959770.914638}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:22:51.054929\",\"patchset\":1,\"issue\":7020043,\"job_name\":\"ssl\",\"revision\":87468},\"submittedAt\":1306959771.0553501,\"builds\":[29979],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:22:50\\nChanged By: cevans@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"cevans@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29979,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm138-m4\",\"BuildSlave\"]]},\"29998\":{\"slave\":\"vm162-m4\",\"builderName\":\"linux\",\"number\":29998,\"currentStep\":{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",51931,103995.78669216442]],\"isStarted\":true,\"times\":[1306962514.2696991,null],\"eta\":116.80526356719446,\"text\":[\"updating\",\"r87468\"]},\"times\":[1306962501.219476,null],\"blame\":[\"zelidrag@chromium.org\"],\"reason\":\"'zelidrag: spdy' try job\",\"eta\":3122.0060503482819,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306962501.2216711,1306962514.2689681]},{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",51931,103995.78669216442]],\"isStarted\":true,\"times\":[1306962514.2696991,null],\"eta\":116.80526356719446,\"text\":[\"updating\",\"r87468\"]},{\"step_number\":2,\"text\":[\"compiling\"],\"expectations\":[[\"output\",null,390640.26791972376]],\"name\":\"compile\"},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306962500.9443829}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:08:21.099234\",\"patchset\":4001,\"issue\":7105024,\"job_name\":\"spdy\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306962500.9443829}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:08:21.099234\",\"patchset\":4001,\"issue\":7105024,\"job_name\":\"spdy\",\"revision\":87468},\"submittedAt\":1306962501.1196489,\"builds\":[29998],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:08:20\\nChanged By: zelidrag@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"zelidrag@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29998,\"Build\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm162-m4\",\"BuildSlave\"]]},\"29992\":{\"slave\":\"vm145-m4\",\"builderName\":\"linux\",\"number\":29992,\"currentStep\":{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",22805,597808.24562881095]],\"isStarted\":true,\"times\":[1306962635.4351211,null],\"eta\":138.08037633247073,\"text\":[\"running net_unittests\"]},\"times\":[1306961472.8767109,null],\"blame\":[\"commit-bot@chromium.org\",\"wez@chromium.org\"],\"reason\":\"'commit-bot: 7065026-7004' try job\",\"eta\":2056.388596534729,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961472.8778141,1306961486.293294]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",100403,103995.78669216442]],\"isStarted\":true,\"times\":[1306961486.2939661,1306961709.5708411],\"text\":[\"update\",\"r87522\",\"webkit r87815\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",473806,390640.26791972376]],\"isStarted\":true,\"times\":[1306961709.571434,1306962532.6637249],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962532.664108,1306962587.961072],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88916,88903.959994856181]],\"isStarted\":true,\"times\":[1306962587.961551,1306962631.3554029],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,7086.2522050815269]],\"text\":[\"running crypto_unittests\"],\"times\":[1306962631.3559611,1306962631.3589399]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6141,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962631.35941,1306962632.02703],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,1254195.5625590128]],\"text\":[\"running gpu_unittests\"],\"times\":[1306962632.0275209,1306962632.067493]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33666,33181.805471766304]],\"isStarted\":true,\"times\":[1306962632.0680289,1306962635.4346581],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",22805,597808.24562881095]],\"isStarted\":true,\"times\":[1306962635.4351211,null],\"eta\":138.08037633247073,\"text\":[\"running net_unittests\"]},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:51:12.848309\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961472.848232,\"revision\":\"87522\"},{\"who\":\"wez@chromium.org\",\"when\":1306961472.848258,\"revision\":\"87522\"}],\"job_name\":\"7065026-7004\",\"revision\":\"87522\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:51:12.848309\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961472.848232,\"revision\":\"87522\"},{\"who\":\"wez@chromium.org\",\"when\":1306961472.848258,\"revision\":\"87522\"}],\"job_name\":\"7065026-7004\",\"revision\":\"87522\"},\"submittedAt\":1306961472.8485579,\"builds\":[29992],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:51:12\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 01 Jun 2011 13:51:12\\nChanged By: wez@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"commit-bot@chromium.org\",\"wez@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29992,\"Build\"],[\"got_revision\",\"87522\",\"Source\"],[\"got_webkit_revision\",\"87815\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87522\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm145-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]},\"29993\":{\"slave\":\"vm157-m4\",\"builderName\":\"linux\",\"number\":29993,\"currentStep\":{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",20025,597808.24562881095]],\"isStarted\":true,\"times\":[1306962642.069308,null],\"eta\":138.74796116633453,\"text\":[\"running net_unittests\"]},\"times\":[1306961593.246151,null],\"blame\":[\"jochen@chromium.org\"],\"reason\":\"'eisinger: localstorage-ipc#41e1b' try job\",\"eta\":2057.0561814308167,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961593.2484269,1306961607.395093]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",50105,103995.78669216442]],\"isStarted\":true,\"times\":[1306961607.3957889,1306961787.1042199],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",8664,390640.26791972376]],\"isStarted\":true,\"times\":[1306961787.105108,1306962531.6247611],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962531.625345,1306962590.896951],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88853,88903.959994856181]],\"isStarted\":true,\"times\":[1306962590.8975761,1306962634.351455],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962634.3520529,1306962635.370981],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962635.371496,1306962635.839566],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962635.840059,1306962638.869097],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32981,33181.805471766304]],\"isStarted\":true,\"times\":[1306962638.869453,1306962642.0687101],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",20025,597808.24562881095]],\"isStarted\":true,\"times\":[1306962642.069308,null],\"eta\":138.74796116633453,\"text\":[\"running net_unittests\"]},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"jochen@chromium.org\",\"when\":1306961592.9803679}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:53:13.171302\",\"patchset\":1,\"issue\":7106001,\"job_name\":\"localstorage-ipc#41e1b\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"jochen@chromium.org\",\"when\":1306961592.9803679}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:53:13.171302\",\"patchset\":1,\"issue\":7106001,\"job_name\":\"localstorage-ipc#41e1b\",\"revision\":87468},\"submittedAt\":1306961593.182061,\"builds\":[29993],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:53:12\\nChanged By: jochen@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jochen@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29993,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm157-m4\",\"BuildSlave\"]]},\"29990\":{\"slave\":\"vm129-m4\",\"builderName\":\"linux\",\"number\":29990,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",156648,1205823.898358966]],\"isStarted\":true,\"times\":[1306962390.2100401,null],\"eta\":758.02357918806524,\"text\":[\"running browser_tests\"]},\"times\":[1306961401.1220551,null],\"blame\":[\"bolms@chromium.org\"],\"reason\":\"'bolms: TwoExtensionShutdownWhileCrashed_flakiness#5680d4' try job\",\"eta\":1604.3653106689453,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961401.123723,1306961414.255091]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",34268,103995.78669216442]],\"isStarted\":true,\"times\":[1306961414.2557571,1306961585.460793],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",315856,390640.26791972376]],\"isStarted\":true,\"times\":[1306961585.461395,1306962334.496284],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962334.496815,1306962390.1964381],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,88903.959994856181]],\"text\":[\"running base_unittests\"],\"times\":[1306962390.196943,1306962390.1975241]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,7086.2522050815269]],\"text\":[\"running crypto_unittests\"],\"times\":[1306962390.197989,1306962390.1983409]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,6096.1554224513939]],\"text\":[\"running googleurl_unittests\"],\"times\":[1306962390.1988001,1306962390.199136]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,1254195.5625590128]],\"text\":[\"running gpu_unittests\"],\"times\":[1306962390.1995959,1306962390.1999309]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,33181.805471766304]],\"text\":[\"running media_unittests\"],\"times\":[1306962390.2005069,1306962390.200896]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,597808.24562881095]],\"text\":[\"running net_unittests\"],\"times\":[1306962390.2013471,1306962390.2017369]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,2896.8372242786218]],\"text\":[\"running printing_unittests\"],\"times\":[1306962390.2022181,1306962390.2025521]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,48877.535366709162]],\"text\":[\"running remoting_unittests\"],\"times\":[1306962390.2030101,1306962390.203351]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,88872.957486858126]],\"text\":[\"running test_shell_tests\"],\"times\":[1306962390.2038119,1306962390.204149]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,34772.447678110533]],\"text\":[\"running safe_browsing_tests\"],\"times\":[1306962390.204608,1306962390.2049401]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,14026.08680060707]],\"text\":[\"running ipc_tests\"],\"times\":[1306962390.205404,1306962390.2057381]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,71292.439780175962]],\"text\":[\"running sync_unit_tests\"],\"times\":[1306962390.2062199,1306962390.2071011]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,531258.54600717255]],\"text\":[\"running unit_tests\"],\"times\":[1306962390.2075591,1306962390.207967]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,9162.8328929582603]],\"text\":[\"running app_unittests\"],\"times\":[1306962390.208432,1306962390.20877]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,12298.621917362938]],\"text\":[\"running gfx_unittests\"],\"times\":[1306962390.2092299,1306962390.209569]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",156648,1205823.898358966]],\"isStarted\":true,\"times\":[1306962390.2100401,null],\"eta\":758.02357918806524,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:50:01.047497\",\"hasPatch\":true,\"changes\":[{\"who\":\"bolms@chromium.org\",\"when\":1306961400.912472}],\"job_name\":\"TwoExtensionShutdownWhileCrashed_flakiness#5680d4\",\"revision\":87468},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:50:01.047497\",\"hasPatch\":true,\"changes\":[{\"who\":\"bolms@chromium.org\",\"when\":1306961400.912472}],\"job_name\":\"TwoExtensionShutdownWhileCrashed_flakiness#5680d4\",\"revision\":87468},\"submittedAt\":1306961401.0478361,\"builds\":[29990],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:50:00\\nChanged By: bolms@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"bolms@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29990,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",\"--gtest_filter=ExtensionCrashRecoveryTest.TwoExtensionsShutdownWhileCrashed*\",\"Scheduler\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm129-m4\",\"BuildSlave\"],[\"testfilters\",[\"browser_tests:ExtensionCrashRecoveryTest.TwoExtensionsShutdownWhileCrashed*\"],\"Scheduler\"]]},\"29991\":{\"slave\":\"vm142-m4\",\"builderName\":\"linux\",\"number\":29991,\"currentStep\":{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",314159,597808.24562881095]],\"isStarted\":true,\"times\":[1306962550.467422,null],\"eta\":68.115084359247632,\"text\":[\"running net_unittests\"]},\"times\":[1306961401.137337,null],\"blame\":[\"commit-bot@chromium.org\",\"eroman@chromium.org\"],\"reason\":\"'commit-bot: 7057043-2001' try job\",\"eta\":1986.4233033657074,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961401.1393991,1306961418.4415541]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",67073,103995.78669216442]],\"isStarted\":true,\"times\":[1306961418.4422121,1306961664.032793],\"text\":[\"update\",\"r87520\",\"webkit r87815\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",235474,390640.26791972376]],\"isStarted\":true,\"times\":[1306961664.0333509,1306962445.7123389],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962445.712862,1306962503.6022429],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88850,88903.959994856181]],\"isStarted\":true,\"times\":[1306962503.6027491,1306962546.6838889],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,7086.2522050815269]],\"text\":[\"running crypto_unittests\"],\"times\":[1306962546.6844151,1306962546.6854651]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6141,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962546.6859269,1306962547.1053319],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,1254195.5625590128]],\"text\":[\"running gpu_unittests\"],\"times\":[1306962547.1058021,1306962547.106899]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33635,33181.805471766304]],\"isStarted\":true,\"times\":[1306962547.1073649,1306962550.466903],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",314159,597808.24562881095]],\"isStarted\":true,\"times\":[1306962550.467422,null],\"eta\":68.115084359247632,\"text\":[\"running net_unittests\"]},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:50:01.077010\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961401.076942,\"revision\":\"87520\"},{\"who\":\"eroman@chromium.org\",\"when\":1306961401.076962,\"revision\":\"87520\"}],\"job_name\":\"7057043-2001\",\"revision\":\"87520\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:50:01.077010\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961401.076942,\"revision\":\"87520\"},{\"who\":\"eroman@chromium.org\",\"when\":1306961401.076962,\"revision\":\"87520\"}],\"job_name\":\"7057043-2001\",\"revision\":\"87520\"},\"submittedAt\":1306961401.0780511,\"builds\":[29991],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:50:01\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 01 Jun 2011 13:50:01\\nChanged By: eroman@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"commit-bot@chromium.org\",\"eroman@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29991,\"Build\"],[\"got_revision\",\"87520\",\"Source\"],[\"got_webkit_revision\",\"87815\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87520\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm142-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]},\"29996\":{\"slave\":\"vm131-m4\",\"builderName\":\"linux\",\"number\":29996,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",7706,390640.26791972376]],\"isStarted\":true,\"times\":[1306962388.8568549,null],\"eta\":820.50696366006173,\"text\":[\"compiling\"]},\"times\":[1306962181.4022839,null],\"blame\":[\"robertshield@chromium.org\"],\"reason\":\"'robertshield: l5f6' try job\",\"eta\":2988.6892664432526,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306962181.4047301,1306962197.5246511]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",48670,103995.78669216442]],\"isStarted\":true,\"times\":[1306962197.5256319,1306962388.8562889],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",7706,390640.26791972376]],\"isStarted\":true,\"times\":[1306962388.8568549,null],\"eta\":820.50696366006173,\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"robertshield@chromium.org\",\"when\":1306962181.1449499}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:03:01.286802\",\"patchset\":6001,\"issue\":7080058,\"job_name\":\"l5f6\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"robertshield@chromium.org\",\"when\":1306962181.1449499}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:03:01.286802\",\"patchset\":6001,\"issue\":7080058,\"job_name\":\"l5f6\",\"revision\":87468},\"submittedAt\":1306962181.296056,\"builds\":[29996],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:03:01\\nChanged By: robertshield@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"robertshield@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29996,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm131-m4\",\"BuildSlave\"]]},\"29997\":{\"slave\":\"vm150-m4\",\"builderName\":\"linux\",\"number\":29997,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",1142,390640.26791972376]],\"isStarted\":true,\"times\":[1306962638.7911251,null],\"eta\":834.57153860323115,\"text\":[\"compiling\"]},\"times\":[1306962371.1272061,null],\"blame\":[\"jar@google.com\"],\"reason\":\"'jar: timedprediction' try job\",\"eta\":3002.7538421154022,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306962371.1291699,1306962384.3646801]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",109592,103995.78669216442]],\"isStarted\":true,\"times\":[1306962384.365391,1306962638.790719],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",1142,390640.26791972376]],\"isStarted\":true,\"times\":[1306962638.7911251,null],\"eta\":834.57153860323115,\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"jar@google.com\",\"when\":1306962370.9023459}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:06:11.051707\",\"patchset\":22001,\"issue\":6960001,\"job_name\":\"timedprediction\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"jar@google.com\",\"when\":1306962370.9023459}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:06:11.051707\",\"patchset\":22001,\"issue\":6960001,\"job_name\":\"timedprediction\",\"revision\":87468},\"submittedAt\":1306962371.0624759,\"builds\":[29997],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:06:10\\nChanged By: jar@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jar@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29997,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm150-m4\",\"BuildSlave\"]]},\"29994\":{\"slave\":\"vm143-m4\",\"builderName\":\"linux\",\"number\":29994,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",322191,390640.26791972376]],\"isStarted\":true,\"times\":[1306961924.3229451,null],\"eta\":146.66512164260098,\"text\":[\"compiling\"]},\"times\":[1306961731.1459939,null],\"blame\":[\"lipalani@google.com\"],\"reason\":\"'lipalani: b61#60b62' try job\",\"eta\":2314.8474254608154,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961731.148015,1306961744.2664399]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",70021,103995.78669216442]],\"isStarted\":true,\"times\":[1306961744.2670951,1306961924.32232],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",322191,390640.26791972376]],\"isStarted\":true,\"times\":[1306961924.3229451,null],\"eta\":146.66512164260098,\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306961730.8897979}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:55:31.048133\",\"patchset\":15001,\"issue\":7078023,\"job_name\":\"b61#60b62\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306961730.8897979}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:55:31.048133\",\"patchset\":15001,\"issue\":7078023,\"job_name\":\"b61#60b62\",\"revision\":87468},\"submittedAt\":1306961731.0734811,\"builds\":[29994],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:55:30\\nChanged By: lipalani@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"lipalani@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29994,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm143-m4\",\"BuildSlave\"]]},\"29995\":{\"slave\":\"vm139-m4\",\"builderName\":\"linux\",\"number\":29995,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",471104,390640.26791972376]],\"isStarted\":true,\"times\":[1306962148.3190091,null],\"text\":[\"compiling\"]},\"times\":[1306961751.753309,null],\"blame\":[\"annacc@chromium.org\",\"commit-bot@chromium.org\"],\"reason\":\"'commit-bot: 7094007-11001' try job\",\"eta\":2168.1823036670685,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961751.7544961,1306961776.566406]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",99643,103995.78669216442]],\"isStarted\":true,\"times\":[1306961776.567045,1306962148.3184869],\"text\":[\"update\",\"r87522\",\"webkit r87815\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",471104,390640.26791972376]],\"isStarted\":true,\"times\":[1306962148.3190091,null],\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:55:51.724516\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961751.7244411,\"revision\":\"87522\"},{\"who\":\"annacc@chromium.org\",\"when\":1306961751.7244661,\"revision\":\"87522\"}],\"job_name\":\"7094007-11001\",\"revision\":\"87522\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:55:51.724516\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961751.7244411,\"revision\":\"87522\"},{\"who\":\"annacc@chromium.org\",\"when\":1306961751.7244661,\"revision\":\"87522\"}],\"job_name\":\"7094007-11001\",\"revision\":\"87522\"},\"submittedAt\":1306961751.731436,\"builds\":[29995],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:55:51\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 01 Jun 2011 13:55:51\\nChanged By: annacc@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"annacc@chromium.org\",\"commit-bot@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29995,\"Build\"],[\"got_revision\",\"87522\",\"Source\"],[\"got_webkit_revision\",\"87815\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87522\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm139-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]}}"]]
\ No newline at end of file
diff --git a/tests/data/testCMDbusy_expected.txt b/tests/data/testCMDbusy_expected.txt
deleted file mode 100644
index 2924518..0000000
--- a/tests/data/testCMDbusy_expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-"Builder linux: vm123-m4, vm127-m4, vm129-m4, vm131-m4, vm135-m4, vm136-m4, vm137-m4, vm138-m4, vm139-m4, vm140-m4, vm141-m4, vm142-m4, vm143-m4, vm145-m4, vm146-m4, vm150-m4, vm151-m4, vm155-m4, vm157-m4, vm158-m4, vm162-m4, vm163-m4, vm164-m4\n"
\ No newline at end of file
diff --git a/tests/data/testCMDcount.json b/tests/data/testCMDcount.json
deleted file mode 100644
index 7a2fc15..0000000
--- a/tests/data/testCMDcount.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux?filter=1","{\"state\":\"building\",\"basedir\":\"linux\",\"cachedBuilds\":[3245,3246,3247,3248,3249,3250,3251,3252,3253,3254],\"slaves\":[\"vm384-m4\",\"vm385-m4\",\"vm387-m4\",\"vm388-m4\",\"vm389-m4\",\"vm390-m4\",\"vm391-m4\",\"vm392-m4\",\"vm393-m4\",\"vm394-m4\",\"vm395-m4\",\"vm396-m4\",\"vm397-m4\",\"vm398-m4\",\"vm399-m4\",\"vm400-m4\",\"vm401-m4\",\"vm402-m4\",\"vm403-m4\",\"vm404-m4\",\"vm405-m4\",\"vm406-m4\",\"vm407-m4\",\"vm408-m4\",\"vm409-m4\",\"vm410-m4\",\"vm411-m4\",\"vm412-m4\",\"vm413-m4\",\"vm414-m4\",\"vm415-m4\",\"vm416-m4\",\"vm417-m4\",\"vm418-m4\",\"vm419-m4\",\"vm420-m4\",\"vm421-m4\",\"vm422-m4\",\"vm423-m4\",\"vm424-m4\",\"vm425-m4\",\"vm426-m4\",\"vm427-m4\",\"vm429-m4\",\"slave1-b1\",\"slave2-b1\",\"slave3-b1\",\"slave4-b1\",\"slave5-b1\",\"slave6-b1\",\"slave7-b1\",\"slave8-b1\",\"slave9-b1\",\"slave10-b1\",\"slave11-b1\",\"slave12-b1\",\"slave13-b1\",\"slave14-b1\",\"slave15-b1\",\"slave16-b1\",\"slave17-b1\",\"slave18-b1\",\"slave19-b1\",\"slave20-b1\",\"slave21-b1\",\"slave22-b1\",\"slave23-b1\",\"slave24-b1\",\"slave25-b1\",\"slave26-b1\",\"slave27-b1\",\"slave28-b1\",\"slave29-b1\",\"slave30-b1\",\"slave31-b1\",\"slave32-b1\",\"slave33-b1\",\"slave34-b1\",\"slave35-b1\",\"slave36-b1\",\"slave37-b1\",\"slave38-b1\",\"slave39-b1\",\"slave40-b1\",\"slave41-b1\",\"slave42-b1\",\"slave43-b1\",\"slave44-b1\",\"slave45-b1\",\"slave46-b1\",\"slave47-b1\",\"slave48-b1\",\"slave49-b1\",\"slave50-b1\",\"slave51-b1\",\"slave52-b1\",\"slave53-b1\",\"slave54-b1\",\"slave55-b1\",\"slave56-b1\",\"slave57-b1\",\"slave58-b1\",\"slave59-b1\",\"slave60-b1\",\"slave61-b1\",\"slave62-b1\",\"slave63-b1\",\"slave64-b1\",\"slave65-b1\",\"slave66-b1\",\"slave67-b1\",\"slave68-b1\",\"slave69-b1\",\"slave70-b1\",\"slave71-b1\",\"slave72-b1\",\"slave73-b1\",\"slave74-b1\",\"slave75-b1\",\"slave76-b1\",\"slave77-b1\",\"slave78-b1\",\"slave79-b1\",\"slave80-b1\",\"slave81-b1\",\"slave82-b1\",\"slave83-b1\",\"slave84-b1\",\"slave85-b1\",\"slave86-b1\",\"slave87-b1\",\"slave88-b1\",\"slave89-b1\",\"slave90-b1\",\"slave91-b1\",\"slave92-b1\",\"slave93-b1\",\"slave94-b1\",\"slave95-b1\",\"slave96-b1\",\"slave97-b1\",\"slave98-b1\",\"slave99-b1\",\"slave100-b1\"],\"currentBuilds\":[3248,3249,3252,3253,3254]}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/3254?filter=1","{\"slave\":\"vm419-m4\",\"builderName\":\"linux\",\"number\":3254,\"currentStep\":{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",170138,152441.25]],\"isStarted\":true,\"times\":[1348166168.92174,null],\"text\":[\"updating\",\"rHEAD\"]},\"times\":[1348166164.117495,null],\"blame\":[\"maruel@chromium.org\"],\"reason\":\"8897024-29003: .\",\"eta\":4881.735800027847,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",3201,3700.0]],\"isStarted\":true,\"times\":[1348166164.125098,1348166168.920582]},{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",170138,152441.25]],\"isStarted\":true,\"times\":[1348166168.92174,null],\"text\":[\"updating\",\"rHEAD\"]},{\"step_number\":2,\"expectations\":[[\"output\",null,1280.25]],\"name\":\"apply_issue\"},{\"step_number\":3,\"expectations\":[[\"output\",null,2388.5]],\"name\":\"runhooks\"},{\"step_number\":4,\"expectations\":[[\"output\",null,947.25]],\"name\":\"cleanup_temp\"},{\"step_number\":5,\"expectations\":[[\"output\",null,1355619.25]],\"name\":\"compile\"},{\"step_number\":6,\"expectations\":[[\"output\",null,null]],\"name\":\"manifests_to_hashes\"},{\"step_number\":7,\"expectations\":[[\"output\",null,null]],\"name\":\"trigger_swarm_tests\"},{\"step_number\":8,\"expectations\":[[\"output\",null,145451.0]],\"name\":\"interactive_ui_tests\"},{\"step_number\":9,\"expectations\":[[\"output\",null,8797.0]],\"name\":\"check_deps2git\"},{\"step_number\":10,\"expectations\":[[\"output\",null,1980.25]],\"name\":\"check_deps2submodules\"},{\"step_number\":11,\"expectations\":[[\"output\",null,1620.25]],\"name\":\"check_deps\"},{\"step_number\":12,\"expectations\":[[\"output\",null,null]],\"name\":\"check_licenses\"},{\"step_number\":13,\"expectations\":[[\"output\",null,220724.5]],\"name\":\"base_unittests\"},{\"step_number\":14,\"expectations\":[[\"output\",null,133263.5]],\"name\":\"cacheinvalidation_unittests\"},{\"step_number\":15,\"expectations\":[[\"output\",null,207604.0]],\"name\":\"cc_unittests\"},{\"step_number\":16,\"expectations\":[[\"output\",null,27783.75]],\"name\":\"crypto_unittests\"},{\"step_number\":17,\"expectations\":[[\"output\",null,18507.5]],\"name\":\"dbus_unittests\"},{\"step_number\":18,\"expectations\":[[\"output\",null,null]],\"name\":\"googleurl_unittests\"},{\"step_number\":19,\"expectations\":[[\"output\",null,232286.0]],\"name\":\"gpu_unittests\"},{\"step_number\":20,\"expectations\":[[\"output\",null,44979.0]],\"name\":\"jingle_unittests\"},{\"step_number\":21,\"expectations\":[[\"output\",null,173816.25]],\"name\":\"media_unittests\"},{\"step_number\":22,\"expectations\":[[\"output\",null,596074.0]],\"name\":\"net_unittests\"},{\"step_number\":23,\"expectations\":[[\"output\",null,15289.0]],\"name\":\"printing_unittests\"},{\"step_number\":24,\"expectations\":[[\"output\",null,67336.0]],\"name\":\"remoting_unittests\"},{\"step_number\":25,\"expectations\":[[\"output\",null,21395.5]],\"name\":\"test_shell_tests\"},{\"step_number\":26,\"expectations\":[[\"output\",null,19590.5]],\"name\":\"safe_browsing_tests\"},{\"step_number\":27,\"expectations\":[[\"output\",null,5607.25]],\"name\":\"sandbox_linux_unittests\"},{\"step_number\":28,\"expectations\":[[\"output\",null,14190.25]],\"name\":\"ipc_tests\"},{\"step_number\":29,\"expectations\":[[\"output\",null,181300.5]],\"name\":\"sync_unit_tests\"},{\"step_number\":30,\"expectations\":[[\"output\",null,1625061.25]],\"name\":\"unit_tests\"},{\"step_number\":31,\"expectations\":[[\"output\",null,7597.75]],\"name\":\"sql_unittests\"},{\"step_number\":32,\"expectations\":[[\"output\",null,42749.5]],\"name\":\"ui_unittests\"},{\"step_number\":33,\"expectations\":[[\"output\",null,352261.25]],\"name\":\"content_unittests\"},{\"step_number\":34,\"expectations\":[[\"output\",null,3275396.0]],\"name\":\"browser_tests\"},{\"step_number\":35,\"expectations\":[[\"output\",null,264534.75]],\"name\":\"content_browsertests\"},{\"step_number\":36,\"expectations\":[[\"output\",null,40889.5]],\"name\":\"webkit_compositor_bindings_unittests\"},{\"step_number\":37,\"expectations\":[[\"output\",null,null]],\"name\":\"sync_integration_tests\"},{\"step_number\":38,\"expectations\":[[\"output\",null,null]],\"name\":\"pyauto_functional_tests\"},{\"step_number\":39,\"expectations\":[[\"output\",null,659946.75]],\"name\":\"nacl_integration\"}],\"sourceStamp\":{\"project\":\"chrome\",\"changes\":[{\"rev\":\"HEAD\",\"who\":\"maruel@chromium.org\",\"when\":1348166144,\"number\":112715,\"at\":\"Thu 20 Sep 2012 11:35:44\",\"revision\":\"HEAD\"}],\"revision\":\"HEAD\"},\"properties\":[[\"blamelist\",[\"maruel@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Builder\"],[\"buildnumber\",3254,\"Build\"],[\"issue\",8897024,\"Try job\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"patchset\",29003,\"Try job\"],[\"primary_repo\",\"\",\"Source\"],[\"project\",\"chrome\",\"Build\"],[\"repository\",\"\",\"Build\"],[\"revision\",\"HEAD\",\"Build\"],[\"rietveld\",\"https://chromiumcodereview.appspot.com/status_listener\",\"Try job\"],[\"root\",\"src\",\"Try job\"],[\"scheduler\",\"try_job_rietveld\",\"Scheduler\"],[\"slavename\",\"vm419-m4\",\"BuildSlave\"],[\"testfilter\",[\"defaulttests\"],\"Try job\"],[\"try_job_key\",\"ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIyCxIFSXNzdWUYgISfBAwLEghQYXRjaFNldBjL4gEMCxIMVHJ5Sm9iUmVzdWx0GKKZAgw\",\"Try job\"],[\"workdir\",\"/mnt/data/b/build/slave/linux\",\"slave\"]]}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/3253?filter=1","{\"slave\":\"vm405-m4\",\"builderName\":\"linux\",\"number\":3253,\"currentStep\":{\"name\":\"check_deps\",\"step_number\":11,\"expectations\":[[\"output\",1498,1620.25]],\"isStarted\":true,\"times\":[1348166285.731871,null],\"eta\":4.319195439180575,\"text\":[\"running check_deps\"]},\"times\":[1348164729.359081,null],\"blame\":[\"stevenjb@chromium.org\"],\"reason\":\"10947046-4001: Explicitly remove notifications before re-showing them.\",\"eta\":3139.0634150505066,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",3201,3700.0]],\"isStarted\":true,\"times\":[1348164729.362518,1348164732.673934]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",148937,152441.25]],\"isStarted\":true,\"times\":[1348164732.675269,1348164837.366555],\"text\":[\"update\",\"r157752\",\"webkit r129100\",\"nacl r9768\",\"v8 r12514\"]},{\"name\":\"apply_issue\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",2427,1280.25]],\"isStarted\":true,\"times\":[1348164837.367549,1348164848.483012],\"text\":[\"apply patch\"]},{\"name\":\"runhooks\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",2808,2388.5]],\"isStarted\":true,\"times\":[1348164848.484293,1348164916.15593],\"text\":[\"gclient hooks\"]},{\"name\":\"cleanup_temp\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",894,947.25]],\"isStarted\":true,\"times\":[1348164916.157172,1348164916.334846],\"text\":[\"cleanup_temp\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",1142833,1355619.25]],\"isStarted\":true,\"times\":[1348164916.335957,1348165978.006808],\"text\":[\"compile\"]},{\"name\":\"manifests_to_hashes\",\"isFinished\":true,\"step_number\":6,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,null]],\"text\":[\"manifests_to_hashes\",\"skipped\"],\"times\":[1348165978.007779,1348165978.759594]},{\"name\":\"trigger_swarm_tests\",\"isFinished\":true,\"step_number\":7,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,null]],\"text\":[\"trigger_swarm_tests\",\"skipped\"],\"times\":[1348165978.760393,1348165979.919687]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",140745,145451.0]],\"isStarted\":true,\"times\":[1348165980.01411,1348166278.358225],\"text\":[\"interactive_ui_tests\",\"2 flaky\"]},{\"name\":\"check_deps2git\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",8720,8797.0]],\"isStarted\":true,\"times\":[1348166278.359448,1348166285.260302],\"text\":[\"check_deps2git\"]},{\"name\":\"check_deps2submodules\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",1927,1980.25]],\"isStarted\":true,\"times\":[1348166285.261463,1348166285.731096],\"text\":[\"check_deps2submodules\"]},{\"name\":\"check_deps\",\"step_number\":11,\"expectations\":[[\"output\",1498,1620.25]],\"isStarted\":true,\"times\":[1348166285.731871,null],\"eta\":4.319195439180575,\"text\":[\"running check_deps\"]},{\"step_number\":12,\"expectations\":[[\"output\",null,null]],\"name\":\"check_licenses\"},{\"step_number\":13,\"expectations\":[[\"output\",null,220724.5]],\"name\":\"base_unittests\"},{\"step_number\":14,\"expectations\":[[\"output\",null,133263.5]],\"name\":\"cacheinvalidation_unittests\"},{\"step_number\":15,\"expectations\":[[\"output\",null,207604.0]],\"name\":\"cc_unittests\"},{\"step_number\":16,\"expectations\":[[\"output\",null,27783.75]],\"name\":\"crypto_unittests\"},{\"step_number\":17,\"expectations\":[[\"output\",null,18507.5]],\"name\":\"dbus_unittests\"},{\"step_number\":18,\"expectations\":[[\"output\",null,null]],\"name\":\"googleurl_unittests\"},{\"step_number\":19,\"expectations\":[[\"output\",null,232286.0]],\"name\":\"gpu_unittests\"},{\"step_number\":20,\"expectations\":[[\"output\",null,44979.0]],\"name\":\"jingle_unittests\"},{\"step_number\":21,\"expectations\":[[\"output\",null,173816.25]],\"name\":\"media_unittests\"},{\"step_number\":22,\"expectations\":[[\"output\",null,596074.0]],\"name\":\"net_unittests\"},{\"step_number\":23,\"expectations\":[[\"output\",null,15289.0]],\"name\":\"printing_unittests\"},{\"step_number\":24,\"expectations\":[[\"output\",null,67336.0]],\"name\":\"remoting_unittests\"},{\"step_number\":25,\"expectations\":[[\"output\",null,21395.5]],\"name\":\"test_shell_tests\"},{\"step_number\":26,\"expectations\":[[\"output\",null,19590.5]],\"name\":\"safe_browsing_tests\"},{\"step_number\":27,\"expectations\":[[\"output\",null,5607.25]],\"name\":\"sandbox_linux_unittests\"},{\"step_number\":28,\"expectations\":[[\"output\",null,14190.25]],\"name\":\"ipc_tests\"},{\"step_number\":29,\"expectations\":[[\"output\",null,181300.5]],\"name\":\"sync_unit_tests\"},{\"step_number\":30,\"expectations\":[[\"output\",null,1625061.25]],\"name\":\"unit_tests\"},{\"step_number\":31,\"expectations\":[[\"output\",null,7597.75]],\"name\":\"sql_unittests\"},{\"step_number\":32,\"expectations\":[[\"output\",null,42749.5]],\"name\":\"ui_unittests\"},{\"step_number\":33,\"expectations\":[[\"output\",null,352261.25]],\"name\":\"content_unittests\"},{\"step_number\":34,\"expectations\":[[\"output\",null,3275396.0]],\"name\":\"browser_tests\"},{\"step_number\":35,\"expectations\":[[\"output\",null,264534.75]],\"name\":\"content_browsertests\"},{\"step_number\":36,\"expectations\":[[\"output\",null,40889.5]],\"name\":\"webkit_compositor_bindings_unittests\"},{\"step_number\":37,\"expectations\":[[\"output\",null,null]],\"name\":\"sync_integration_tests\"},{\"step_number\":38,\"expectations\":[[\"output\",null,null]],\"name\":\"pyauto_functional_tests\"},{\"step_number\":39,\"expectations\":[[\"output\",null,659946.75]],\"name\":\"nacl_integration\"}],\"sourceStamp\":{\"project\":\"chrome\",\"changes\":[{\"rev\":\"157752\",\"who\":\"stevenjb@chromium.org\",\"when\":1348164728,\"number\":112637,\"at\":\"Thu 20 Sep 2012 11:12:08\",\"revision\":\"157752\"}],\"revision\":\"157752\"},\"properties\":[[\"blamelist\",[\"stevenjb@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Builder\"],[\"buildnumber\",3253,\"Build\"],[\"got_nacl_revision\",\"9768\",\"Source\"],[\"got_revision\",\"157752\",\"Source\"],[\"got_v8_revision\",\"12514\",\"Source\"],[\"got_webkit_revision\",\"129100\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"issue\",10947046,\"Try job\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"patchset\",4001,\"Try job\"],[\"primary_repo\",\"\",\"Source\"],[\"project\",\"chrome\",\"Build\"],[\"repository\",\"\",\"Build\"],[\"revision\",\"157752\",\"Build\"],[\"rietveld\",\"https://chromiumcodereview.appspot.com/status_listener\",\"Try job\"],[\"root\",\"src\",\"Try job\"],[\"scheduler\",\"try_job_rietveld\",\"Scheduler\"],[\"slavename\",\"vm405-m4\",\"BuildSlave\"],[\"swarm_tests\",\"\",\"Step\"],[\"testfilter\",null,\"Try job\"],[\"try_job_key\",\"ahdzfmNocm9taXVtY29kZXJldmlldy1ocnIwCxIFSXNzdWUY5pOcBQwLEghQYXRjaFNldBihHwwLEgxUcnlKb2JSZXN1bHQY8S4M\",\"Try job\"],[\"warnings-count\",0,\"WarningCountingShellCommand\"],[\"workdir\",\"/mnt/data/b/build/slave/linux\",\"slave\"]]}"]]
\ No newline at end of file
diff --git a/tests/data/testCMDcount_expected.txt b/tests/data/testCMDcount_expected.txt
deleted file mode 100644
index f1a5d0e..0000000
--- a/tests/data/testCMDcount_expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-"linux\n.. 1\nlinux: 1\nTotal: 1\n"
\ No newline at end of file
diff --git a/tests/data/testCMDcurrent.json b/tests/data/testCMDcurrent.json
deleted file mode 100644
index 9687a31..0000000
--- a/tests/data/testCMDcurrent.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders?filter=1","{\"linux_touch\":{\"state\":\"building\",\"basedir\":\"linux_touch\",\"cachedBuilds\":[74,75,76,77,78,79,80,81,82,83],\"slaves\":[\"vm112-m4\"],\"currentBuilds\":[83]},\"linux\":{\"state\":\"building\",\"basedir\":\"linux\",\"cachedBuilds\":[29989,29990,29991,29992,29993,29994,29995,29996,29997,29998],\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[29974,29976,29978,29979,29980,29981,29982,29983,29984,29985,29986,29987,29988,29989,29992,29993,29994,29995,29996,29997,29998]},\"linux_clang\":{\"state\":\"building\",\"basedir\":\"linux_clang\",\"cachedBuilds\":[1953,1954,1955,1956,1957,1958,1959,1960,1961,1962],\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"currentBuilds\":[1960,1962]}}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/?select=29974&select=29976&select=29978&select=29979&select=29980&select=29981&select=29982&select=29983&select=29984&select=29985&select=29986&select=29987&select=29988&select=29989&select=29992&select=29993&select=29994&select=29995&select=29996&select=29997&select=29998&filter=1","{\"29996\":{\"slave\":\"vm131-m4\",\"builderName\":\"linux\",\"number\":29996,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",9841,390640.26791972376]],\"isStarted\":true,\"times\":[1306962388.8568549,null],\"eta\":815.93233424146536,\"text\":[\"compiling\"]},\"times\":[1306962181.4022839,null],\"blame\":[\"robertshield@chromium.org\"],\"reason\":\"'robertshield: l5f6' try job\",\"eta\":2984.1146368980408,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306962181.4047301,1306962197.5246511]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",48670,103995.78669216442]],\"isStarted\":true,\"times\":[1306962197.5256319,1306962388.8562889],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",9841,390640.26791972376]],\"isStarted\":true,\"times\":[1306962388.8568549,null],\"eta\":815.93233424146536,\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"robertshield@chromium.org\",\"when\":1306962181.1449499}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:03:01.286802\",\"patchset\":6001,\"issue\":7080058,\"job_name\":\"l5f6\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"robertshield@chromium.org\",\"when\":1306962181.1449499}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:03:01.286802\",\"patchset\":6001,\"issue\":7080058,\"job_name\":\"l5f6\",\"revision\":87468},\"submittedAt\":1306962181.296056,\"builds\":[29996],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:03:01\\nChanged By: robertshield@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"robertshield@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29996,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm131-m4\",\"BuildSlave\"]]},\"29989\":{\"slave\":\"vm158-m4\",\"builderName\":\"linux\",\"number\":29989,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",34591,1205823.898358966]],\"isStarted\":true,\"times\":[1306962839.595201,null],\"eta\":846.20906281352131,\"text\":[\"running browser_tests\"]},\"times\":[1306961391.1087201,null],\"blame\":[\"asvitkine@chromium.org\"],\"reason\":\"'asvitkine: sessions_webui' try job\",\"eta\":1692.5507938861847,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961391.1110189,1306961408.2622659]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",50445,103995.78669216442]],\"isStarted\":true,\"times\":[1306961408.262949,1306961592.6703391],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",53939,390640.26791972376]],\"isStarted\":true,\"times\":[1306961592.6710639,1306962344.1808901],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962344.181284,1306962400.664686],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88916,88903.959994856181]],\"isStarted\":true,\"times\":[1306962400.6653049,1306962443.1107061],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962443.1115401,1306962444.3372409],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962444.3377409,1306962444.8290241],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254431,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962444.8295071,1306962447.7929311],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33007,33181.805471766304]],\"isStarted\":true,\"times\":[1306962447.7932911,1306962451.0277641],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598767,597808.24562881095]],\"isStarted\":true,\"times\":[1306962451.02829,1306962593.6460791],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2895,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962593.6466191,1306962594.4495161],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48998,48877.535366709162]],\"isStarted\":true,\"times\":[1306962594.4502659,1306962599.0320561],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89062,88872.957486858126]],\"isStarted\":true,\"times\":[1306962599.0325451,1306962663.4547479],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34860,34772.447678110533]],\"isStarted\":true,\"times\":[1306962663.4552541,1306962682.368413],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14038,14026.08680060707]],\"isStarted\":true,\"times\":[1306962682.3689489,1306962692.585407],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71444,71292.439780175962]],\"isStarted\":true,\"times\":[1306962692.585983,1306962705.1671],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532409,531258.54600717255]],\"isStarted\":true,\"times\":[1306962705.1675179,1306962816.892283],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9211,9162.8328929582603]],\"isStarted\":true,\"times\":[1306962816.8929231,1306962832.449295],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12298,12298.621917362938]],\"isStarted\":true,\"times\":[1306962832.4498661,1306962839.594707],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",34591,1205823.898358966]],\"isStarted\":true,\"times\":[1306962839.595201,null],\"eta\":846.20906281352131,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961390.917593}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:51.059757\",\"patchset\":13001,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961390.917593}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:51.059757\",\"patchset\":13001,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"submittedAt\":1306961391.0699761,\"builds\":[29989],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:49:50\\nChanged By: asvitkine@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"asvitkine@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29989,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm158-m4\",\"BuildSlave\"]]},\"29992\":{\"slave\":\"vm145-m4\",\"builderName\":\"linux\",\"number\":29992,\"currentStep\":{\"name\":\"unit_tests\",\"step_number\":16,\"expectations\":[[\"output\",357199,531258.54600717255]],\"isStarted\":true,\"times\":[1306962793.8205559,null],\"eta\":34.471422894431853,\"text\":[\"running unit_tests\"]},\"times\":[1306961472.8767109,null],\"blame\":[\"commit-bot@chromium.org\",\"wez@chromium.org\"],\"reason\":\"'commit-bot: 7065026-7004' try job\",\"eta\":1770.5722739696503,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961472.8778141,1306961486.293294]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",100403,103995.78669216442]],\"isStarted\":true,\"times\":[1306961486.2939661,1306961709.5708411],\"text\":[\"update\",\"r87522\",\"webkit r87815\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",473806,390640.26791972376]],\"isStarted\":true,\"times\":[1306961709.571434,1306962532.6637249],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962532.664108,1306962587.961072],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88916,88903.959994856181]],\"isStarted\":true,\"times\":[1306962587.961551,1306962631.3554029],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,7086.2522050815269]],\"text\":[\"running crypto_unittests\"],\"times\":[1306962631.3559611,1306962631.3589399]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6141,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962631.35941,1306962632.02703],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,1254195.5625590128]],\"text\":[\"running gpu_unittests\"],\"times\":[1306962632.0275209,1306962632.067493]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33666,33181.805471766304]],\"isStarted\":true,\"times\":[1306962632.0680289,1306962635.4346581],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598870,597808.24562881095]],\"isStarted\":true,\"times\":[1306962635.4351211,1306962783.4478619],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,2896.8372242786218]],\"text\":[\"running printing_unittests\"],\"times\":[1306962783.4483931,1306962783.51876]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,48877.535366709162]],\"text\":[\"running remoting_unittests\"],\"times\":[1306962783.5193009,1306962783.5833769]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,88872.957486858126]],\"text\":[\"running test_shell_tests\"],\"times\":[1306962783.5838931,1306962783.652658]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,34772.447678110533]],\"text\":[\"running safe_browsing_tests\"],\"times\":[1306962783.6531751,1306962783.7262931]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14039,14026.08680060707]],\"isStarted\":true,\"times\":[1306962783.7269001,1306962793.81903],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"results\":[3,null],\"isStarted\":true,\"expectations\":[[\"output\",null,71292.439780175962]],\"text\":[\"running sync_unit_tests\"],\"times\":[1306962793.819546,1306962793.820081]},{\"name\":\"unit_tests\",\"step_number\":16,\"expectations\":[[\"output\",357199,531258.54600717255]],\"isStarted\":true,\"times\":[1306962793.8205559,null],\"eta\":34.471422894431853,\"text\":[\"running unit_tests\"]},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:51:12.848309\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961472.848232,\"revision\":\"87522\"},{\"who\":\"wez@chromium.org\",\"when\":1306961472.848258,\"revision\":\"87522\"}],\"job_name\":\"7065026-7004\",\"revision\":\"87522\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:51:12.848309\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961472.848232,\"revision\":\"87522\"},{\"who\":\"wez@chromium.org\",\"when\":1306961472.848258,\"revision\":\"87522\"}],\"job_name\":\"7065026-7004\",\"revision\":\"87522\"},\"submittedAt\":1306961472.8485579,\"builds\":[29992],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:51:12\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 01 Jun 2011 13:51:12\\nChanged By: wez@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"commit-bot@chromium.org\",\"wez@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29992,\"Build\"],[\"got_revision\",\"87522\",\"Source\"],[\"got_webkit_revision\",\"87815\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87522\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm145-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]},\"29985\":{\"slave\":\"vm155-m4\",\"builderName\":\"linux\",\"number\":29985,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",278230,1217741.796717932]],\"isStarted\":true,\"times\":[1306962605.150058,null],\"eta\":445.95363361879674,\"text\":[\"running browser_tests\"]},\"times\":[1306961050.948127,null],\"blame\":[\"tfarina@chromium.org\"],\"reason\":\"'tfarina: views-focusable#a0101' try job\",\"eta\":980.78876066207886,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2283.1592252295568]],\"isStarted\":true,\"times\":[1306961050.9501891,1306961065.5608289]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",68316,74425.573384328833]],\"isStarted\":true,\"times\":[1306961065.561291,1306961248.845613],\"text\":[\"update\",\"r87519\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",322657,308086.53583944752]],\"isStarted\":true,\"times\":[1306961248.8461871,1306962064.161891],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000005]],\"isStarted\":true,\"times\":[1306962064.1624401,1306962130.8471119],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88941,88894.919989712362]],\"isStarted\":true,\"times\":[1306962130.8477311,1306962174.5000939],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7102,7088.5044101630538]],\"isStarted\":true,\"times\":[1306962174.500669,1306962176.001009],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6094,6112.3108449027877]],\"isStarted\":true,\"times\":[1306962176.001524,1306962176.4279399],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254448,1254429.1251180258]],\"isStarted\":true,\"times\":[1306962176.4284339,1306962180.0695629],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33680,33351.610943532614]],\"isStarted\":true,\"times\":[1306962180.069922,1306962183.5146799],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598673,597202.49125762202]],\"isStarted\":true,\"times\":[1306962183.5152211,1306962347.405988],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2913,2896.674448557244]],\"isStarted\":true,\"times\":[1306962347.4063389,1306962348.641937],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",49021,48981.070733418324]],\"isStarted\":true,\"times\":[1306962348.642432,1306962353.6349969],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88970,89052.914973716252]],\"isStarted\":true,\"times\":[1306962353.6355469,1306962424.426975],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34141,34687.895356221059]],\"isStarted\":true,\"times\":[1306962424.4273379,1306962444.20766],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13995,14015.173601214143]],\"isStarted\":true,\"times\":[1306962444.2082119,1306962456.0770919],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71088,71172.879560351925]],\"isStarted\":true,\"times\":[1306962456.077569,1306962468.6812789],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531126,531965.09201434511]],\"isStarted\":true,\"times\":[1306962468.681644,1306962583.33869],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9192,9199.6657859165207]],\"isStarted\":true,\"times\":[1306962583.339191,1306962598.598623],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12318,12298.243834725876]],\"isStarted\":true,\"times\":[1306962598.5991261,1306962605.1495371],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",278230,1217741.796717932]],\"isStarted\":true,\"times\":[1306962605.150058,null],\"eta\":445.95363361879674,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,535436.90504825953]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.0615236721969]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,448696.0361404547]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100296.75597514361]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.26979008361]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"tfarina@chromium.org\",\"when\":1306961050.90747,\"revision\":\"HEAD\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:44:10.907567\",\"patchset\":1,\"issue\":7020040,\"job_name\":\"views-focusable#a0101\",\"revision\":\"HEAD\"},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"tfarina@chromium.org\",\"when\":1306961050.90747,\"revision\":\"HEAD\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:44:10.907567\",\"patchset\":1,\"issue\":7020040,\"job_name\":\"views-focusable#a0101\",\"revision\":\"HEAD\"},\"submittedAt\":1306961050.9183781,\"builds\":[29985],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:44:10\\nChanged By: tfarina@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"tfarina@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29985,\"Build\"],[\"got_revision\",\"87519\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"HEAD\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm155-m4\",\"BuildSlave\"]]},\"29995\":{\"slave\":\"vm139-m4\",\"builderName\":\"linux\",\"number\":29995,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",472754,390640.26791972376]],\"isStarted\":true,\"times\":[1306962148.3190091,null],\"text\":[\"compiling\"]},\"times\":[1306961751.753309,null],\"blame\":[\"annacc@chromium.org\",\"commit-bot@chromium.org\"],\"reason\":\"'commit-bot: 7094007-11001' try job\",\"eta\":2168.1823034286499,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961751.7544961,1306961776.566406]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",99643,103995.78669216442]],\"isStarted\":true,\"times\":[1306961776.567045,1306962148.3184869],\"text\":[\"update\",\"r87522\",\"webkit r87815\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",472754,390640.26791972376]],\"isStarted\":true,\"times\":[1306962148.3190091,null],\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:55:51.724516\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961751.7244411,\"revision\":\"87522\"},{\"who\":\"annacc@chromium.org\",\"when\":1306961751.7244661,\"revision\":\"87522\"}],\"job_name\":\"7094007-11001\",\"revision\":\"87522\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:55:51.724516\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961751.7244411,\"revision\":\"87522\"},{\"who\":\"annacc@chromium.org\",\"when\":1306961751.7244661,\"revision\":\"87522\"}],\"job_name\":\"7094007-11001\",\"revision\":\"87522\"},\"submittedAt\":1306961751.731436,\"builds\":[29995],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:55:51\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 01 Jun 2011 13:55:51\\nChanged By: annacc@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"annacc@chromium.org\",\"commit-bot@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29995,\"Build\"],[\"got_revision\",\"87522\",\"Source\"],[\"got_webkit_revision\",\"87815\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87522\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm139-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]},\"29998\":{\"slave\":\"vm162-m4\",\"builderName\":\"linux\",\"number\":29998,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",138692,390640.26791972376]],\"isStarted\":true,\"times\":[1306962705.169349,null],\"eta\":539.84541376579296,\"text\":[\"compiling\"]},\"times\":[1306962501.219476,null],\"blame\":[\"zelidrag@chromium.org\"],\"reason\":\"'zelidrag: spdy' try job\",\"eta\":2708.027717590332,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306962501.2216711,1306962514.2689681]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",60785,103995.78669216442]],\"isStarted\":true,\"times\":[1306962514.2696991,1306962705.1689401],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",138692,390640.26791972376]],\"isStarted\":true,\"times\":[1306962705.169349,null],\"eta\":539.84541376579296,\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306962500.9443829}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:08:21.099234\",\"patchset\":4001,\"issue\":7105024,\"job_name\":\"spdy\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306962500.9443829}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:08:21.099234\",\"patchset\":4001,\"issue\":7105024,\"job_name\":\"spdy\",\"revision\":87468},\"submittedAt\":1306962501.1196489,\"builds\":[29998],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:08:20\\nChanged By: zelidrag@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"zelidrag@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29998,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm162-m4\",\"BuildSlave\"]]},\"29984\":{\"slave\":\"vm135-m4\",\"builderName\":\"linux\",\"number\":29984,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",838777,1217741.796717932]],\"isStarted\":true,\"times\":[1306962101.9466491,null],\"eta\":179.88143278280648,\"text\":[\"running browser_tests\"]},\"times\":[1306960621.204798,null],\"blame\":[\"asvitkine@chromium.org\"],\"reason\":\"'asvitkine: sessions_webui' try job\",\"eta\":714.71655988693237,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2283.1592252295568]],\"isStarted\":true,\"times\":[1306960621.2071669,1306960634.3419981]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51795,74425.573384328833]],\"isStarted\":true,\"times\":[1306960634.342705,1306960840.320363],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",66195,308086.53583944752]],\"isStarted\":true,\"times\":[1306960840.3207581,1306961585.6757619],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000005]],\"isStarted\":true,\"times\":[1306961585.6762969,1306961649.7442291],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88922,88894.919989712362]],\"isStarted\":true,\"times\":[1306961649.744735,1306961693.762104],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7088.5044101630538]],\"isStarted\":true,\"times\":[1306961693.7624631,1306961697.2947969],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6082,6112.3108449027877]],\"isStarted\":true,\"times\":[1306961697.2951369,1306961697.9824491],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254429.1251180258]],\"isStarted\":true,\"times\":[1306961697.9829581,1306961700.9834809],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33008,33351.610943532614]],\"isStarted\":true,\"times\":[1306961700.9838991,1306961704.410785],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598742,597202.49125762202]],\"isStarted\":true,\"times\":[1306961704.411299,1306961854.975668],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.674448557244]],\"isStarted\":true,\"times\":[1306961854.9762759,1306961855.604152],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",49000,48981.070733418324]],\"isStarted\":true,\"times\":[1306961855.6046331,1306961860.1587651],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89070,89052.914973716252]],\"isStarted\":true,\"times\":[1306961860.159261,1306961925.794353],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34860,34687.895356221059]],\"isStarted\":true,\"times\":[1306961925.7948849,1306961941.0395491],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14039,14015.173601214143]],\"isStarted\":true,\"times\":[1306961941.040169,1306961951.4838309],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71463,71172.879560351925]],\"isStarted\":true,\"times\":[1306961951.484437,1306961964.223958],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532539,531965.09201434511]],\"isStarted\":true,\"times\":[1306961964.2245519,1306962080.9425881],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9100,9199.6657859165207]],\"isStarted\":true,\"times\":[1306962080.9430799,1306962095.7984509],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12298,12298.243834725876]],\"isStarted\":true,\"times\":[1306962095.7989781,1306962101.946039],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",838777,1217741.796717932]],\"isStarted\":true,\"times\":[1306962101.9466491,null],\"eta\":179.88143278280648,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,535436.90504825953]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.0615236721969]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,448696.0361404547]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100296.75597514361]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.26979008361]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306960620.8988791}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:37:01.060807\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306960620.8988791}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:37:01.060807\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"submittedAt\":1306960621.0713129,\"builds\":[29984],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:37:00\\nChanged By: asvitkine@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"asvitkine@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29984,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm135-m4\",\"BuildSlave\"]]},\"29974\":{\"slave\":\"vm127-m4\",\"builderName\":\"linux\",\"number\":29974,\"currentStep\":{\"name\":\"nacl_integration\",\"step_number\":22,\"expectations\":[[\"output\",56256,449747.28912363731]],\"isStarted\":true,\"times\":[1306962795.289782,null],\"eta\":160.33370737136173,\"text\":[\"running nacl_integration\"]},\"times\":[1306958941.0838301,null],\"blame\":[\"yoz@chromium.org\"],\"reason\":\"'yoz: view-source#2f0c4' try job\",\"eta\":295.04662871360779,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2358.0952073458188]],\"isStarted\":true,\"times\":[1306958941.086163,1306958956.2960939]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",118299,53133.348298522513]],\"isStarted\":true,\"times\":[1306958956.296747,1306959168.539382],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",441721,87470.146862319525]],\"isStarted\":true,\"times\":[1306959168.539968,1306959952.903126],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1005,1004.0000000000146]],\"isStarted\":true,\"times\":[1306959952.903583,1306960058.346354],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89189,88860.439670795269]],\"isStarted\":true,\"times\":[1306960058.3468969,1306960109.240973],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7087.0352813044337]],\"isStarted\":true,\"times\":[1306960109.2415841,1306960110.914571],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6082,6085.9470368892098]],\"isStarted\":true,\"times\":[1306960110.914978,1306960111.4913349],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254426.000944206]],\"isStarted\":true,\"times\":[1306960111.4918499,1306960114.3251691],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33010,33070.5501930436]],\"isStarted\":true,\"times\":[1306960114.3255301,1306960117.8979311],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598611,593993.72024390544]],\"isStarted\":true,\"times\":[1306960117.898442,1306960318.7522769],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2902,2894.3955884579509]],\"isStarted\":true,\"times\":[1306960318.7528551,1306960322.061327],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48997,48966.565867346624]],\"isStarted\":true,\"times\":[1306960322.0619371,1306960330.9071259],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89094,89014.319789729983]],\"isStarted\":true,\"times\":[1306960330.9074719,1306960410.019491],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34860,34581.16284976848]],\"isStarted\":true,\"times\":[1306960410.019999,1306960424.6524751],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13902,14007.555238852576]],\"isStarted\":true,\"times\":[1306960424.652796,1306960435.7890301],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71462,71286.036482815427]],\"isStarted\":true,\"times\":[1306960435.7895401,1306960449.2458539],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532538,532167.94445904391]],\"isStarted\":true,\"times\":[1306960449.2463541,1306960577.366797],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9216,9180.3051493286839]],\"isStarted\":true,\"times\":[1306960577.367403,1306960594.393502],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12300,12298.950677806999]],\"isStarted\":true,\"times\":[1306960594.3940589,1306960600.6806769],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1228085,1215034.3737434549]],\"isStarted\":true,\"times\":[1306960600.681299,1306961867.3539469],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",535569,518081.24038607569]],\"isStarted\":true,\"times\":[1306961867.354568,1306962793.146095],\"text\":[\"ui_tests\",\"24 disabled\",\"68 flaky\"]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.492189377575]],\"isStarted\":true,\"times\":[1306962793.146652,1306962795.289279],\"text\":[\"nacl_ui_tests\",\"8 disabled\"]},{\"name\":\"nacl_integration\",\"step_number\":22,\"expectations\":[[\"output\",56256,449747.28912363731]],\"isStarted\":true,\"times\":[1306962795.289782,null],\"eta\":160.33370737136173,\"text\":[\"running nacl_integration\"]},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98922.047801148816]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.158320668881]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"yoz@chromium.org\",\"when\":1306958940.906662}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:09:01.045546\",\"patchset\":1,\"issue\":7006030,\"job_name\":\"view-source#2f0c4\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"yoz@chromium.org\",\"when\":1306958940.906662}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:09:01.045546\",\"patchset\":1,\"issue\":7006030,\"job_name\":\"view-source#2f0c4\",\"revision\":87468},\"submittedAt\":1306958941.056422,\"builds\":[29974],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:09:00\\nChanged By: yoz@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"yoz@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29974,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm127-m4\",\"BuildSlave\"]]},\"29988\":{\"slave\":\"vm164-m4\",\"builderName\":\"linux\",\"number\":29988,\"currentStep\":{\"name\":\"test_shell_tests\",\"step_number\":12,\"expectations\":[[\"output\",23313,88872.957486858126]],\"isStarted\":true,\"times\":[1306962840.5182271,null],\"eta\":34.54373120611622,\"text\":[\"running test_shell_tests\"]},\"times\":[1306961381.2477441,null],\"blame\":[\"asvitkine@chromium.org\"],\"reason\":\"'asvitkine: sessions_webui' try job\",\"eta\":1902.1981601715088,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2383,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961381.2499211,1306961396.2598579]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",174203,103995.78669216442]],\"isStarted\":true,\"times\":[1306961396.2605529,1306961674.6092999],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",486108,390640.26791972376]],\"isStarted\":true,\"times\":[1306961674.609736,1306962561.9770319],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962561.977668,1306962632.07022],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88941,88903.959994856181]],\"isStarted\":true,\"times\":[1306962632.070729,1306962675.813813],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962675.8143661,1306962676.8861611],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962676.886668,1306962677.3821621],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962677.3828671,1306962680.4324009],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33026,33181.805471766304]],\"isStarted\":true,\"times\":[1306962680.4327459,1306962683.8592],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",601771,597808.24562881095]],\"isStarted\":true,\"times\":[1306962683.8597431,1306962835.262615],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2894,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962835.263001,1306962835.874193],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",49020,48877.535366709162]],\"isStarted\":true,\"times\":[1306962835.874716,1306962840.5177369],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"step_number\":12,\"expectations\":[[\"output\",23313,88872.957486858126]],\"isStarted\":true,\"times\":[1306962840.5182271,null],\"eta\":34.54373120611622,\"text\":[\"running test_shell_tests\"]},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961380.9357319}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:41.077131\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"asvitkine@chromium.org\",\"when\":1306961380.9357319}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:49:41.077131\",\"patchset\":11002,\"issue\":6969016,\"job_name\":\"sessions_webui\",\"revision\":87468},\"submittedAt\":1306961381.087553,\"builds\":[29988],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:49:40\\nChanged By: asvitkine@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"asvitkine@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29988,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm164-m4\",\"BuildSlave\"]]},\"29976\":{\"slave\":\"vm151-m4\",\"builderName\":\"linux\",\"text\":[\"net_unittests\"],\"number\":29976,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",244944,528969.6201930379]],\"isStarted\":true,\"times\":[1306962586.94206,null],\"eta\":317.87260342527702,\"text\":[\"running ui_tests\"]},\"times\":[1306959341.026825,null],\"blame\":[\"jhawkins@chromium.org\"],\"reason\":\"'jhawkins: syncpassphrase#b8dbb8' try job\",\"eta\":609.03629994392395,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2340.2738018364548]],\"isStarted\":true,\"times\":[1306959341.0288789,1306959364.340538]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",68508,55132.587074630632]],\"isStarted\":true,\"times\":[1306959364.3412399,1306959643.2814119],\"text\":[\"update\",\"r87515\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",322517,114219.28671557989]],\"isStarted\":true,\"times\":[1306959643.281805,1306960561.5649381],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000036]],\"isStarted\":true,\"times\":[1306960561.565563,1306960617.1999199],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88913,88841.359917698821]],\"isStarted\":true,\"times\":[1306960617.2005031,1306960659.816062],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7087,7087.0176406522169]],\"isStarted\":true,\"times\":[1306960659.816607,1306960662.582243],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.4867592223027]],\"isStarted\":true,\"times\":[1306960662.5828309,1306960662.9677839],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254427.500472103]],\"isStarted\":true,\"times\":[1306960662.968262,1306960666.0465419],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33636,33168.8875482609]],\"isStarted\":true,\"times\":[1306960666.046896,1306960669.470685],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"results\":[2,[\"net_unittests\"]],\"isStarted\":true,\"expectations\":[[\"output\",592980,592984.93006097642]],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\",\"failed 1\"],\"times\":[1306960669.4712019,1306961055.6697409]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2894.6977942289755]],\"isStarted\":true,\"times\":[1306961055.6707621,1306961056.329133],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48962.282933673312]],\"isStarted\":true,\"times\":[1306961056.3296349,1306961060.871639],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89036,89009.659894864992]],\"isStarted\":true,\"times\":[1306961060.8722489,1306961130.1032619],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34491,34537.581424884236]],\"isStarted\":true,\"times\":[1306961130.1037929,1306961146.3753891],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14007,14008.388809713144]],\"isStarted\":true,\"times\":[1306961146.3759041,1306961155.31534],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71247,71266.518241407714]],\"isStarted\":true,\"times\":[1306961155.3158309,1306961167.5497651],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531686,531805.73611476098]],\"isStarted\":true,\"times\":[1306961167.55024,1306961273.7771039],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9125,9196.326287332171]],\"isStarted\":true,\"times\":[1306961273.7777269,1306961287.7196109],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12299,12297.9753389035]],\"isStarted\":true,\"times\":[1306961287.720129,1306961293.9179001],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1217548,1216346.1868717275]],\"isStarted\":true,\"times\":[1306961293.9182191,1306962586.9415541],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",244944,528969.6201930379]],\"isStarted\":true,\"times\":[1306962586.94206,null],\"eta\":317.87260342527702,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.2460946887875]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452865.14456181868]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98991.023900574408]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16583.079160334441]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"jhawkins@chromium.org\",\"when\":1306959340.954771,\"revision\":\"87515\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:15:40.954863\",\"patchset\":1,\"issue\":7027037,\"job_name\":\"syncpassphrase#b8dbb8\",\"revision\":\"87515\"},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"jhawkins@chromium.org\",\"when\":1306959340.954771,\"revision\":\"87515\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:15:40.954863\",\"patchset\":1,\"issue\":7027037,\"job_name\":\"syncpassphrase#b8dbb8\",\"revision\":\"87515\"},\"submittedAt\":1306959340.979852,\"builds\":[29976],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:15:40\\nChanged By: jhawkins@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jhawkins@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29976,\"Build\"],[\"got_revision\",\"87515\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87515\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm151-m4\",\"BuildSlave\"]]},\"29997\":{\"slave\":\"vm150-m4\",\"builderName\":\"linux\",\"number\":29997,\"currentStep\":{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",204814,390640.26791972376]],\"isStarted\":true,\"times\":[1306962638.7911251,null],\"eta\":398.16689085411656,\"text\":[\"compiling\"]},\"times\":[1306962371.1272061,null],\"blame\":[\"jar@google.com\"],\"reason\":\"'jar: timedprediction' try job\",\"eta\":2566.3491933345795,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306962371.1291699,1306962384.3646801]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",109592,103995.78669216442]],\"isStarted\":true,\"times\":[1306962384.365391,1306962638.790719],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"step_number\":2,\"expectations\":[[\"output\",204814,390640.26791972376]],\"isStarted\":true,\"times\":[1306962638.7911251,null],\"eta\":398.16689085411656,\"text\":[\"compiling\"]},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1004.0000000000002]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running base_unittests\"],\"expectations\":[[\"output\",null,88903.959994856181]],\"name\":\"base_unittests\"},{\"step_number\":5,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7086.2522050815269]],\"name\":\"crypto_unittests\"},{\"step_number\":6,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6096.1554224513939]],\"name\":\"googleurl_unittests\"},{\"step_number\":7,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254195.5625590128]],\"name\":\"gpu_unittests\"},{\"step_number\":8,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33181.805471766304]],\"name\":\"media_unittests\"},{\"step_number\":9,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,597808.24562881095]],\"name\":\"net_unittests\"},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"jar@google.com\",\"when\":1306962370.9023459}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:06:11.051707\",\"patchset\":22001,\"issue\":6960001,\"job_name\":\"timedprediction\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"jar@google.com\",\"when\":1306962370.9023459}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:06:11.051707\",\"patchset\":22001,\"issue\":6960001,\"job_name\":\"timedprediction\",\"revision\":87468},\"submittedAt\":1306962371.0624759,\"builds\":[29997],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:06:10\\nChanged By: jar@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jar@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29997,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm150-m4\",\"BuildSlave\"]]},\"29994\":{\"slave\":\"vm143-m4\",\"builderName\":\"linux\",\"number\":29994,\"currentStep\":{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",315228,597808.24562881095]],\"isStarted\":true,\"times\":[1306962790.1734591,null],\"eta\":67.858376378168344,\"text\":[\"running net_unittests\"]},\"times\":[1306961731.1459939,null],\"blame\":[\"lipalani@google.com\"],\"reason\":\"'lipalani: b61#60b62' try job\",\"eta\":1986.1665966510773,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961731.148015,1306961744.2664399]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",70021,103995.78669216442]],\"isStarted\":true,\"times\":[1306961744.2670951,1306961924.32232],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",322811,390640.26791972376]],\"isStarted\":true,\"times\":[1306961924.3229451,1306962682.13623],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962682.136873,1306962733.8385439],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88909,88903.959994856181]],\"isStarted\":true,\"times\":[1306962733.8390999,1306962778.6710701],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7085,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962778.671926,1306962780.6737311],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6081,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962780.674401,1306962781.293915],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254430,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962781.294255,1306962784.3959661],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33008,33181.805471766304]],\"isStarted\":true,\"times\":[1306962784.3963251,1306962790.173141],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"step_number\":9,\"expectations\":[[\"output\",315228,597808.24562881095]],\"isStarted\":true,\"times\":[1306962790.1734591,null],\"eta\":67.858376378168344,\"text\":[\"running net_unittests\"]},{\"step_number\":10,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2896.8372242786218]],\"name\":\"printing_unittests\"},{\"step_number\":11,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,48877.535366709162]],\"name\":\"remoting_unittests\"},{\"step_number\":12,\"text\":[\"running test_shell_tests\"],\"expectations\":[[\"output\",null,88872.957486858126]],\"name\":\"test_shell_tests\"},{\"step_number\":13,\"text\":[\"running safe_browsing_tests\"],\"expectations\":[[\"output\",null,34772.447678110533]],\"name\":\"safe_browsing_tests\"},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306961730.8897979}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:55:31.048133\",\"patchset\":15001,\"issue\":7078023,\"job_name\":\"b61#60b62\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306961730.8897979}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:55:31.048133\",\"patchset\":15001,\"issue\":7078023,\"job_name\":\"b61#60b62\",\"revision\":87468},\"submittedAt\":1306961731.0734811,\"builds\":[29994],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:55:30\\nChanged By: lipalani@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"lipalani@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29994,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm143-m4\",\"BuildSlave\"]]},\"29993\":{\"slave\":\"vm157-m4\",\"builderName\":\"linux\",\"number\":29993,\"currentStep\":{\"name\":\"safe_browsing_tests\",\"step_number\":13,\"expectations\":[[\"output\",33054,34772.447678110533]],\"isStarted\":true,\"times\":[1306962864.167084,null],\"eta\":0.53493221841472227,\"text\":[\"running safe_browsing_tests\"]},\"times\":[1306961593.246151,null],\"blame\":[\"jochen@chromium.org\"],\"reason\":\"'eisinger: localstorage-ipc#41e1b' try job\",\"eta\":1857.3651139736176,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961593.2484269,1306961607.395093]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",50105,103995.78669216442]],\"isStarted\":true,\"times\":[1306961607.3957889,1306961787.1042199],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",8664,390640.26791972376]],\"isStarted\":true,\"times\":[1306961787.105108,1306962531.6247611],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962531.625345,1306962590.896951],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88853,88903.959994856181]],\"isStarted\":true,\"times\":[1306962590.8975761,1306962634.351455],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962634.3520529,1306962635.370981],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962635.371496,1306962635.839566],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962635.840059,1306962638.869097],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32981,33181.805471766304]],\"isStarted\":true,\"times\":[1306962638.869453,1306962642.0687101],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",594464,597808.24562881095]],\"isStarted\":true,\"times\":[1306962642.069308,1306962790.161495],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2892,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962790.161855,1306962790.800494],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48877.535366709162]],\"isStarted\":true,\"times\":[1306962790.801079,1306962795.415616],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89030,88872.957486858126]],\"isStarted\":true,\"times\":[1306962795.416096,1306962864.166487],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"step_number\":13,\"expectations\":[[\"output\",33054,34772.447678110533]],\"isStarted\":true,\"times\":[1306962864.167084,null],\"eta\":0.53493221841472227,\"text\":[\"running safe_browsing_tests\"]},{\"step_number\":14,\"text\":[\"running ipc_tests\"],\"expectations\":[[\"output\",null,14026.08680060707]],\"name\":\"ipc_tests\"},{\"step_number\":15,\"text\":[\"running sync_unit_tests\"],\"expectations\":[[\"output\",null,71292.439780175962]],\"name\":\"sync_unit_tests\"},{\"step_number\":16,\"text\":[\"running unit_tests\"],\"expectations\":[[\"output\",null,531258.54600717255]],\"name\":\"unit_tests\"},{\"step_number\":17,\"text\":[\"running app_unittests\"],\"expectations\":[[\"output\",null,9162.8328929582603]],\"name\":\"app_unittests\"},{\"step_number\":18,\"text\":[\"running gfx_unittests\"],\"expectations\":[[\"output\",null,12298.621917362938]],\"name\":\"gfx_unittests\"},{\"step_number\":19,\"text\":[\"running browser_tests\"],\"expectations\":[[\"output\",null,1205823.898358966]],\"name\":\"browser_tests\"},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"jochen@chromium.org\",\"when\":1306961592.9803679}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:53:13.171302\",\"patchset\":1,\"issue\":7106001,\"job_name\":\"localstorage-ipc#41e1b\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"jochen@chromium.org\",\"when\":1306961592.9803679}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:53:13.171302\",\"patchset\":1,\"issue\":7106001,\"job_name\":\"localstorage-ipc#41e1b\",\"revision\":87468},\"submittedAt\":1306961593.182061,\"builds\":[29993],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:53:12\\nChanged By: jochen@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jochen@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29993,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm157-m4\",\"BuildSlave\"]]},\"29981\":{\"slave\":\"vm137-m4\",\"builderName\":\"linux\",\"number\":29981,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",1101730,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961623.2440629,null],\"eta\":102.79597001936213,\"text\":[\"running browser_tests\"]},\"times\":[1306960131.107188,null],\"blame\":[\"scr@chromium.org\"],\"reason\":\"'scr: 82437-jstests#28450' try job\",\"eta\":1100.8005871772766,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2300.6369009182272]],\"isStarted\":true,\"times\":[1306960131.1092,1306960152.275573]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",64769,52905.293537315316]],\"isStarted\":true,\"times\":[1306960152.276346,1306960348.7229531],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",427195,65668.143357789944]],\"isStarted\":true,\"times\":[1306960348.723501,1306961141.512723],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306961141.513355,1306961194.278477],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",89019,88847.679958849418]],\"isStarted\":true,\"times\":[1306961194.279021,1306961236.682672],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7088.0088203261084]],\"isStarted\":true,\"times\":[1306961236.6831501,1306961238.118331],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6087.2433796111509]],\"isStarted\":true,\"times\":[1306961238.118824,1306961238.5931699],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254431,1254428.2502360516]],\"isStarted\":true,\"times\":[1306961238.593657,1306961243.3313911],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33010,33075.44377413045]],\"isStarted\":true,\"times\":[1306961243.331846,1306961246.7033451],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",598566,592834.96503048821]],\"isStarted\":true,\"times\":[1306961246.703851,1306961393.9137149],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2895,2894.348897114488]],\"isStarted\":true,\"times\":[1306961393.914042,1306961394.5560529],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48999,48961.141466836656]],\"isStarted\":true,\"times\":[1306961394.556555,1306961399.1603279],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89073,89033.829947432503]],\"isStarted\":true,\"times\":[1306961399.160825,1306961464.3310831],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34860,34515.790712442118]],\"isStarted\":true,\"times\":[1306961464.331696,1306961478.283402],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14043,14008.694404856571]],\"isStarted\":true,\"times\":[1306961478.283917,1306961488.9671221],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71503,71277.759120703849]],\"isStarted\":true,\"times\":[1306961488.9676299,1306961500.2276011],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532488,531903.36805738043]],\"isStarted\":true,\"times\":[1306961500.2281041,1306961603.243546],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9215,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961603.244189,1306961617.173692],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12298,12298.48766945175]],\"isStarted\":true,\"times\":[1306961617.1740611,1306961623.2435279],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",1101730,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961623.2440629,null],\"eta\":102.79597001936213,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,532422.81009651895]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"scr@chromium.org\",\"when\":1306960130.8990719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:28:51.043179\",\"patchset\":5010,\"issue\":7087014,\"job_name\":\"82437-jstests#28450\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"scr@chromium.org\",\"when\":1306960130.8990719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:28:51.043179\",\"patchset\":5010,\"issue\":7087014,\"job_name\":\"82437-jstests#28450\",\"revision\":87468},\"submittedAt\":1306960131.048722,\"builds\":[29981],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:28:50\\nChanged By: scr@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"scr@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29981,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm137-m4\",\"BuildSlave\"]]},\"29980\":{\"slave\":\"vm141-m4\",\"builderName\":\"linux\",\"number\":29980,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",332140,532422.81009651895]],\"isStarted\":true,\"times\":[1306962350.485816,null],\"eta\":252.27991067442446,\"text\":[\"running ui_tests\"]},\"times\":[1306959781.1732881,null],\"blame\":[\"lipalani@google.com\"],\"reason\":\"'lipalani: b63#482f89' try job\",\"eta\":579.63496518135071,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2300.6369009182272]],\"isStarted\":true,\"times\":[1306959781.175313,1306959794.25546]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51798,52905.293537315316]],\"isStarted\":true,\"times\":[1306959794.2560861,1306959960.4006319],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",22022,65668.143357789944]],\"isStarted\":true,\"times\":[1306959960.401207,1306960605.258157],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306960605.2586961,1306960658.9057081],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88849,88847.679958849418]],\"isStarted\":true,\"times\":[1306960658.906306,1306960701.4604111],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7087,7088.0088203261084]],\"isStarted\":true,\"times\":[1306960701.4608181,1306960703.239259],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6087.2433796111509]],\"isStarted\":true,\"times\":[1306960703.2397749,1306960703.6719601],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254428.2502360516]],\"isStarted\":true,\"times\":[1306960703.672318,1306960706.7599471],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32981,33075.44377413045]],\"isStarted\":true,\"times\":[1306960706.7603159,1306960710.0132411],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592660,592834.96503048821]],\"isStarted\":true,\"times\":[1306960710.0137489,1306960851.3933589],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2894.348897114488]],\"isStarted\":true,\"times\":[1306960851.393955,1306960852.097194],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48961.141466836656]],\"isStarted\":true,\"times\":[1306960852.097688,1306960856.6250601],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89006,89033.829947432503]],\"isStarted\":true,\"times\":[1306960856.625567,1306960920.4685969],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34515.790712442118]],\"isStarted\":true,\"times\":[1306960920.4691131,1306960936.2251191],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14011,14008.694404856571]],\"isStarted\":true,\"times\":[1306960936.2256579,1306960946.2483251],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71234,71277.759120703849]],\"isStarted\":true,\"times\":[1306960946.248884,1306960958.2707789],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531716,531903.36805738043]],\"isStarted\":true,\"times\":[1306960958.2713361,1306961070.0343339],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9193,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961070.034883,1306961084.752321],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12300,12298.48766945175]],\"isStarted\":true,\"times\":[1306961084.7526751,1306961090.9703109],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1222793,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961090.970917,1306962350.485306],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",332140,532422.81009651895]],\"isStarted\":true,\"times\":[1306962350.485816,null],\"eta\":252.27991067442446,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306959780.9012151}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:23:01.039593\",\"patchset\":1,\"issue\":7057059,\"job_name\":\"b63#482f89\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"lipalani@google.com\",\"when\":1306959780.9012151}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:23:01.039593\",\"patchset\":1,\"issue\":7057059,\"job_name\":\"b63#482f89\",\"revision\":87468},\"submittedAt\":1306959781.06563,\"builds\":[29980],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:23:00\\nChanged By: lipalani@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"lipalani@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29980,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm141-m4\",\"BuildSlave\"]]},\"29983\":{\"slave\":\"vm136-m4\",\"builderName\":\"linux\",\"number\":29983,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",997212,1217741.796717932]],\"isStarted\":true,\"times\":[1306961794.6645501,null],\"eta\":209.35561314408562,\"text\":[\"running browser_tests\"]},\"times\":[1306960451.091033,null],\"blame\":[\"wjia@chromium.org\"],\"reason\":\"'wjia: dib_mac' try job\",\"eta\":1279.0233798027039,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2305.3184504591136]],\"isStarted\":true,\"times\":[1306960451.0926819,1306960464.2721491]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",52745,58259.146768657658]],\"isStarted\":true,\"times\":[1306960464.272846,1306960637.659935],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",9017,190806.07167889498]],\"isStarted\":true,\"times\":[1306960637.66047,1306961311.2264121],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000009]],\"isStarted\":true,\"times\":[1306961311.2269461,1306961364.465807],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88850,88879.839979424709]],\"isStarted\":true,\"times\":[1306961364.4663119,1306961406.3275239],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7085,7088.5044101630538]],\"isStarted\":true,\"times\":[1306961406.3280411,1306961407.9918571],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6083.6216898055754]],\"isStarted\":true,\"times\":[1306961407.9923379,1306961408.431469],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254430,1254429.1251180258]],\"isStarted\":true,\"times\":[1306961408.431988,1306961411.6696579],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32984,33042.221887065229]],\"isStarted\":true,\"times\":[1306961411.6700289,1306961414.9646029],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592697,595767.98251524405]],\"isStarted\":true,\"times\":[1306961414.965106,1306961559.2084689],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.674448557244]],\"isStarted\":true,\"times\":[1306961559.2090499,1306961559.7660279],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48957,48981.070733418324]],\"isStarted\":true,\"times\":[1306961559.7665269,1306961564.7019429],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89010,89052.914973716252]],\"isStarted\":true,\"times\":[1306961564.7023201,1306961628.859467],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34687.895356221059]],\"isStarted\":true,\"times\":[1306961628.859967,1306961643.565053],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13875,13993.347202428286]],\"isStarted\":true,\"times\":[1306961643.5656171,1306961653.5401101],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71264,71172.879560351925]],\"isStarted\":true,\"times\":[1306961653.540627,1306961664.382376],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531910,531560.18402869022]],\"isStarted\":true,\"times\":[1306961664.382885,1306961772.8153701],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9201,9187.3315718330432]],\"isStarted\":true,\"times\":[1306961772.8157561,1306961788.2472701],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12301,12298.243834725876]],\"isStarted\":true,\"times\":[1306961788.247762,1306961794.664067],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",997212,1217741.796717932]],\"isStarted\":true,\"times\":[1306961794.6645501,null],\"eta\":209.35561314408562,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,535436.90504825953]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.0615236721969]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,448696.0361404547]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100296.75597514361]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.26979008361]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:34:11.047558\",\"hasPatch\":true,\"changes\":[{\"who\":\"wjia@chromium.org\",\"when\":1306960450.8969829}],\"job_name\":\"dib_mac\",\"revision\":87468},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:34:11.047558\",\"hasPatch\":true,\"changes\":[{\"who\":\"wjia@chromium.org\",\"when\":1306960450.8969829}],\"job_name\":\"dib_mac\",\"revision\":87468},\"submittedAt\":1306960451.058042,\"builds\":[29983],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:34:10\\nChanged By: wjia@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"wjia@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29983,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm136-m4\",\"BuildSlave\"]]},\"29982\":{\"slave\":\"vm140-m4\",\"builderName\":\"linux\",\"number\":29982,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",1093461,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961535.3754971,null],\"eta\":110.1627465014069,\"text\":[\"running browser_tests\"]},\"times\":[1306960221.0897329,null],\"blame\":[\"sergeyu@chromium.org\"],\"reason\":\"'sergeyu: key_exch#728cab' try job\",\"eta\":1108.1673634052277,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2300.6369009182272]],\"isStarted\":true,\"times\":[1306960221.0920441,1306960234.269839]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",50564,52905.293537315316]],\"isStarted\":true,\"times\":[1306960234.2705381,1306960408.1440661],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",10668,65668.143357789944]],\"isStarted\":true,\"times\":[1306960408.1448219,1306961059.0115371],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306961059.0121169,1306961107.605588],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88851,88847.679958849418]],\"isStarted\":true,\"times\":[1306961107.6061189,1306961149.846652],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7088.0088203261084]],\"isStarted\":true,\"times\":[1306961149.847182,1306961150.9103999],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6087.2433796111509]],\"isStarted\":true,\"times\":[1306961150.910989,1306961151.3203161],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254428.2502360516]],\"isStarted\":true,\"times\":[1306961151.3207991,1306961154.953999],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32980,33075.44377413045]],\"isStarted\":true,\"times\":[1306961154.95434,1306961158.2824769],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592568,592834.96503048821]],\"isStarted\":true,\"times\":[1306961158.282974,1306961298.3375261],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2893,2894.348897114488]],\"isStarted\":true,\"times\":[1306961298.338032,1306961298.8939731],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48961.141466836656]],\"isStarted\":true,\"times\":[1306961298.894459,1306961303.6929209],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88997,89033.829947432503]],\"isStarted\":true,\"times\":[1306961303.6933391,1306961367.3030491],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34491,34515.790712442118]],\"isStarted\":true,\"times\":[1306961367.3035829,1306961383.343451],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14008,14008.694404856571]],\"isStarted\":true,\"times\":[1306961383.3437891,1306961393.8958189],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71229,71277.759120703849]],\"isStarted\":true,\"times\":[1306961393.896332,1306961402.2659011],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531739,531903.36805738043]],\"isStarted\":true,\"times\":[1306961402.2664499,1306961512.3977411],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9195,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961512.398232,1306961529.1797221],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12299,12298.48766945175]],\"isStarted\":true,\"times\":[1306961529.1802609,1306961535.374975],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",1093461,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961535.3754971,null],\"eta\":110.1627465014069,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,532422.81009651895]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"sergeyu@chromium.org\",\"when\":1306960220.8978751}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:30:21.054081\",\"patchset\":20,\"issue\":7006029,\"job_name\":\"key_exch#728cab\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"sergeyu@chromium.org\",\"when\":1306960220.8978751}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:30:21.054081\",\"patchset\":20,\"issue\":7006029,\"job_name\":\"key_exch#728cab\",\"revision\":87468},\"submittedAt\":1306960221.0643461,\"builds\":[29982],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:30:20\\nChanged By: sergeyu@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"sergeyu@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29982,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm140-m4\",\"BuildSlave\"]]},\"29978\":{\"slave\":\"vm123-m4\",\"builderName\":\"linux\",\"text\":[\"browser_tests\"],\"number\":29978,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",488546,528969.6201930379]],\"isStarted\":true,\"times\":[1306962181.137372,null],\"eta\":45.24085320860263,\"text\":[\"running ui_tests\"]},\"times\":[1306959641.1467819,null],\"blame\":[\"zelidrag@chromium.org\"],\"reason\":\"'zelidrag: monitor' try job\",\"eta\":336.40454983711243,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2340.2738018364548]],\"isStarted\":true,\"times\":[1306959641.1487429,1306959653.253159]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51124,55132.587074630632]],\"isStarted\":true,\"times\":[1306959653.2538991,1306959819.494679],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",26984,114219.28671557989]],\"isStarted\":true,\"times\":[1306959819.495281,1306960427.703151],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000036]],\"isStarted\":true,\"times\":[1306960427.7036591,1306960485.645787],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88851,88841.359917698821]],\"isStarted\":true,\"times\":[1306960485.6464059,1306960527.983372],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7087.0176406522169]],\"isStarted\":true,\"times\":[1306960527.9839129,1306960529.2520881],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.4867592223027]],\"isStarted\":true,\"times\":[1306960529.2525899,1306960529.6079099],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254431,1254427.500472103]],\"isStarted\":true,\"times\":[1306960529.6083879,1306960532.466197],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32982,33168.8875482609]],\"isStarted\":true,\"times\":[1306960532.466619,1306960535.6729519],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592632,592984.93006097642]],\"isStarted\":true,\"times\":[1306960535.673461,1306960677.7149899],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2894,2894.6977942289755]],\"isStarted\":true,\"times\":[1306960677.715574,1306960678.2348571],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48958,48962.282933673312]],\"isStarted\":true,\"times\":[1306960678.2353361,1306960682.6804249],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89000,89009.659894864992]],\"isStarted\":true,\"times\":[1306960682.681,1306960747.9629581],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34537.581424884236]],\"isStarted\":true,\"times\":[1306960747.9634299,1306960762.6868589],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14007,14008.388809713144]],\"isStarted\":true,\"times\":[1306960762.687413,1306960771.5671389],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71253,71266.518241407714]],\"isStarted\":true,\"times\":[1306960771.567672,1306960780.976691],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531657,531805.73611476098]],\"isStarted\":true,\"times\":[1306960780.97733,1306960881.0457029],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9190,9196.326287332171]],\"isStarted\":true,\"times\":[1306960881.0462661,1306960894.652003],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12300,12297.9753389035]],\"isStarted\":true,\"times\":[1306960894.652596,1306960902.886066],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"results\":[2,[\"browser_tests\"]],\"isStarted\":true,\"expectations\":[[\"output\",1209155,1216346.1868717275]],\"text\":[\"browser_tests\",\"21 flaky\",\"did not complete\",\"failed 1\"],\"times\":[1306960902.8864729,1306962181.1362269]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",488546,528969.6201930379]],\"isStarted\":true,\"times\":[1306962181.137372,null],\"eta\":45.24085320860263,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.2460946887875]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452865.14456181868]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98991.023900574408]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16583.079160334441]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306959640.903054}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:20:41.054664\",\"patchset\":17018,\"issue\":7076040,\"job_name\":\"monitor\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"zelidrag@chromium.org\",\"when\":1306959640.903054}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:20:41.054664\",\"patchset\":17018,\"issue\":7076040,\"job_name\":\"monitor\",\"revision\":87468},\"submittedAt\":1306959641.075568,\"builds\":[29978],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:20:40\\nChanged By: zelidrag@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"zelidrag@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29978,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm123-m4\",\"BuildSlave\"]]},\"29979\":{\"slave\":\"vm138-m4\",\"builderName\":\"linux\",\"number\":29979,\"currentStep\":{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",334943,532422.81009651895]],\"isStarted\":true,\"times\":[1306962333.7081161,null],\"eta\":248.74920032899024,\"text\":[\"running ui_tests\"]},\"times\":[1306959771.0873139,null],\"blame\":[\"cevans@chromium.org\"],\"reason\":\"'chris: ssl' try job\",\"eta\":576.10425472259521,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2300.6369009182272]],\"isStarted\":true,\"times\":[1306959771.0896349,1306959784.0636711]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",58447,52905.293537315316]],\"isStarted\":true,\"times\":[1306959784.064364,1306959961.449892],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",315856,65668.143357789944]],\"isStarted\":true,\"times\":[1306959961.4505191,1306960665.859158],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000018]],\"isStarted\":true,\"times\":[1306960665.859549,1306960712.512187],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88911,88847.679958849418]],\"isStarted\":true,\"times\":[1306960712.5128131,1306960756.9383891],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7088.0088203261084]],\"isStarted\":true,\"times\":[1306960756.9389801,1306960757.859484],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6077,6087.2433796111509]],\"isStarted\":true,\"times\":[1306960757.859997,1306960758.2648449],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254426,1254428.2502360516]],\"isStarted\":true,\"times\":[1306960758.265322,1306960761.3644371],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33008,33075.44377413045]],\"isStarted\":true,\"times\":[1306960761.3648469,1306960764.6949041],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597692,592834.96503048821]],\"isStarted\":true,\"times\":[1306960764.695401,1306960905.6157429],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2892,2894.348897114488]],\"isStarted\":true,\"times\":[1306960905.616339,1306960905.9836659],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48913,48961.141466836656]],\"isStarted\":true,\"times\":[1306960905.9841681,1306960910.4500289],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88924,89033.829947432503]],\"isStarted\":true,\"times\":[1306960910.4506121,1306960971.0046771],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34128,34515.790712442118]],\"isStarted\":true,\"times\":[1306960971.005229,1306960985.1776979],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13977,14008.694404856571]],\"isStarted\":true,\"times\":[1306960985.1782169,1306960993.7922699],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71063,71277.759120703849]],\"isStarted\":true,\"times\":[1306960993.792798,1306961003.4971459],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531179,531903.36805738043]],\"isStarted\":true,\"times\":[1306961003.4975441,1306961103.9689169],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9188,9197.6631436660864]],\"isStarted\":true,\"times\":[1306961103.969547,1306961117.6934209],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12298,12298.48766945175]],\"isStarted\":true,\"times\":[1306961117.693965,1306961123.7588661],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",1215011,1217115.5934358637]],\"isStarted\":true,\"times\":[1306961123.7594609,1306962333.707741],\"text\":[\"browser_tests\",\"21 flaky\"]},{\"name\":\"ui_tests\",\"step_number\":20,\"expectations\":[[\"output\",334943,532422.81009651895]],\"isStarted\":true,\"times\":[1306962333.7081161,null],\"eta\":248.74920032899024,\"text\":[\"running ui_tests\"]},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1530.1230473443939]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,449865.07228090934]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,100025.51195028721]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16582.53958016722]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"cevans@chromium.org\",\"when\":1306959770.914638}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:22:51.054929\",\"patchset\":1,\"issue\":7020043,\"job_name\":\"ssl\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"cevans@chromium.org\",\"when\":1306959770.914638}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:22:51.054929\",\"patchset\":1,\"issue\":7020043,\"job_name\":\"ssl\",\"revision\":87468},\"submittedAt\":1306959771.0553501,\"builds\":[29979],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:22:50\\nChanged By: cevans@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"cevans@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29979,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm138-m4\",\"BuildSlave\"]]},\"29987\":{\"slave\":\"vm146-m4\",\"builderName\":\"linux\",\"number\":29987,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",148826,1205823.898358966]],\"isStarted\":true,\"times\":[1306962731.909358,null],\"eta\":763.67492940082093,\"text\":[\"running browser_tests\"]},\"times\":[1306961243.0145979,null],\"blame\":[\"sanjeevr@chromium.org\"],\"reason\":\"'sanjeevr: cp_cleanup#fae5eb' try job\",\"eta\":1610.0166606903076,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2310,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961243.016789,1306961256.2481871]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",59257,103995.78669216442]],\"isStarted\":true,\"times\":[1306961256.248878,1306961452.4130111],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",315859,390640.26791972376]],\"isStarted\":true,\"times\":[1306961452.413451,1306962229.2223461],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962229.2228861,1306962286.29351],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88914,88903.959994856181]],\"isStarted\":true,\"times\":[1306962286.2940199,1306962329.1074879],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962329.1079891,1306962330.4657021],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962330.466197,1306962330.8937731],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254430,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962330.894691,1306962333.921128],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33012,33181.805471766304]],\"isStarted\":true,\"times\":[1306962333.9214759,1306962337.4628971],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597097,597808.24562881095]],\"isStarted\":true,\"times\":[1306962337.463397,1306962485.539254],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962485.539793,1306962486.1850531],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48914,48877.535366709162]],\"isStarted\":true,\"times\":[1306962486.1855719,1306962490.6676829],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88987,88872.957486858126]],\"isStarted\":true,\"times\":[1306962490.6683011,1306962558.4741549],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34128,34772.447678110533]],\"isStarted\":true,\"times\":[1306962558.474704,1306962572.4974029],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",13996,14026.08680060707]],\"isStarted\":true,\"times\":[1306962572.4979999,1306962583.6733079],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71259,71292.439780175962]],\"isStarted\":true,\"times\":[1306962583.6736619,1306962596.4869211],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531427,531258.54600717255]],\"isStarted\":true,\"times\":[1306962596.487438,1306962707.850631],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9002,9162.8328929582603]],\"isStarted\":true,\"times\":[1306962707.85114,1306962725.7374489],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12299,12298.621917362938]],\"isStarted\":true,\"times\":[1306962725.7379911,1306962731.9088099],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",148826,1205823.898358966]],\"isStarted\":true,\"times\":[1306962731.909358,null],\"eta\":763.67492940082093,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"sanjeevr@chromium.org\",\"when\":1306961241.9955399}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:47:22.142293\",\"patchset\":13001,\"issue\":7074023,\"job_name\":\"cp_cleanup#fae5eb\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"sanjeevr@chromium.org\",\"when\":1306961241.9955399}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:47:22.142293\",\"patchset\":13001,\"issue\":7074023,\"job_name\":\"cp_cleanup#fae5eb\",\"revision\":87468},\"submittedAt\":1306961242.1657071,\"builds\":[29987],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:47:21\\nChanged By: sanjeevr@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"sanjeevr@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29987,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm146-m4\",\"BuildSlave\"]]},\"29986\":{\"slave\":\"vm163-m4\",\"builderName\":\"linux\",\"number\":29986,\"currentStep\":{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",147407,1205823.898358966]],\"isStarted\":true,\"times\":[1306962722.8083351,null],\"eta\":764.70014877590404,\"text\":[\"running browser_tests\"]},\"times\":[1306961191.500041,null],\"blame\":[\"cdn@chromium.org\"],\"reason\":\"'cdn: ext_homepage' try job\",\"eta\":1611.0418801307678,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2296.5796126147784]],\"isStarted\":true,\"times\":[1306961191.502362,1306961203.3107109]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",51825,103995.78669216442]],\"isStarted\":true,\"times\":[1306961203.311439,1306961367.932735],\"text\":[\"update\",\"r87468\",\"webkit r87771\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",11530,390640.26791972376]],\"isStarted\":true,\"times\":[1306961367.9333141,1306962062.1993141],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000000002]],\"isStarted\":true,\"times\":[1306962062.20017,1306962143.6093161],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88857,88903.959994856181]],\"isStarted\":true,\"times\":[1306962143.609652,1306962187.79231],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7086,7086.2522050815269]],\"isStarted\":true,\"times\":[1306962187.7928369,1306962189.2273009],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6079,6096.1554224513939]],\"isStarted\":true,\"times\":[1306962189.2278099,1306962189.6895411],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254430,1254195.5625590128]],\"isStarted\":true,\"times\":[1306962189.690047,1306962193.6960809],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32983,33181.805471766304]],\"isStarted\":true,\"times\":[1306962193.696435,1306962197.1008799],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592748,597808.24562881095]],\"isStarted\":true,\"times\":[1306962197.1014211,1306962354.174366],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.8372242786218]],\"isStarted\":true,\"times\":[1306962354.174897,1306962355.024555],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48956,48877.535366709162]],\"isStarted\":true,\"times\":[1306962355.0250621,1306962361.1539209],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",89042,88872.957486858126]],\"isStarted\":true,\"times\":[1306962361.1546049,1306962442.815454],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34772.447678110533]],\"isStarted\":true,\"times\":[1306962442.81602,1306962474.0110409],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14011,14026.08680060707]],\"isStarted\":true,\"times\":[1306962474.0116949,1306962484.4346621],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71299,71292.439780175962]],\"isStarted\":true,\"times\":[1306962484.435199,1306962503.4789541],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",532038,531258.54600717255]],\"isStarted\":true,\"times\":[1306962503.4796729,1306962670.5668631],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9137,9162.8328929582603]],\"isStarted\":true,\"times\":[1306962670.5673809,1306962711.8357019],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12303,12298.621917362938]],\"isStarted\":true,\"times\":[1306962711.836313,1306962722.8077509],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"step_number\":19,\"expectations\":[[\"output\",147407,1205823.898358966]],\"isStarted\":true,\"times\":[1306962722.8083351,null],\"eta\":764.70014877590404,\"text\":[\"running browser_tests\"]},{\"step_number\":20,\"text\":[\"running ui_tests\"],\"expectations\":[[\"output\",null,501017.95252412977]],\"name\":\"ui_tests\"},{\"step_number\":21,\"text\":[\"running nacl_ui_tests\"],\"expectations\":[[\"output\",null,1561.5307618360985]],\"name\":\"nacl_ui_tests\"},{\"step_number\":22,\"text\":[\"running nacl_integration\"],\"expectations\":[[\"output\",null,452728.01807022735]],\"name\":\"nacl_integration\"},{\"step_number\":23,\"text\":[\"running interactive_ui_tests\"],\"expectations\":[[\"output\",null,98637.377987571803]],\"name\":\"interactive_ui_tests\"},{\"step_number\":24,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16581.134895041803]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"cdn@chromium.org\",\"when\":1306961190.9132719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:46:31.079602\",\"patchset\":1,\"issue\":7089014,\"job_name\":\"ext_homepage\",\"revision\":87468},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"cdn@chromium.org\",\"when\":1306961190.9132719}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T20:46:31.079602\",\"patchset\":1,\"issue\":7089014,\"job_name\":\"ext_homepage\",\"revision\":87468},\"submittedAt\":1306961191.0905321,\"builds\":[29986],\"builderName\":\"linux\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:46:30\\nChanged By: cdn@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"cdn@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29986,\"Build\"],[\"got_revision\",\"87468\",\"Source\"],[\"got_webkit_revision\",\"87771\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87468,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm163-m4\",\"BuildSlave\"]]}}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux_clang/builds/?select=1960&select=1962&filter=1","{\"1960\":{\"slave\":\"vm46-m4\",\"builderName\":\"linux_clang\",\"number\":1960,\"currentStep\":{\"name\":\"compile\",\"step_number\":3,\"expectations\":[[\"output\",188273,264907.57325338409]],\"isStarted\":true,\"times\":[1306962650.883333,null],\"eta\":326.06184923491958,\"text\":[\"compiling\"]},\"times\":[1306961401.1272919,null],\"blame\":[\"commit-bot@chromium.org\",\"eroman@chromium.org\"],\"reason\":\"'commit-bot: 7057043-2001' try job\",\"eta\":326.06184720993042,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2418,2276.195158416831]],\"isStarted\":true,\"times\":[1306961401.1290469,1306961413.244081]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",7846316,32803.891746853507]],\"isStarted\":true,\"times\":[1306961413.2447691,1306961722.1075661],\"text\":[\"update\",\"r87520\",\"webkit r87815\"]},{\"name\":\"update_clang\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1102374,50298.000639421691]],\"isStarted\":true,\"times\":[1306961722.108197,1306962650.882735],\"text\":[\"clang updated\"]},{\"name\":\"compile\",\"step_number\":3,\"expectations\":[[\"output\",188273,264907.57325338409]],\"isStarted\":true,\"times\":[1306962650.883333,null],\"eta\":326.06184923491958,\"text\":[\"compiling\"]}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T20:50:01.077010\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961401.076942,\"revision\":\"87520\"},{\"who\":\"eroman@chromium.org\",\"when\":1306961401.076962,\"revision\":\"87520\"}],\"job_name\":\"7057043-2001\",\"revision\":\"87520\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T20:50:01.077010\",\"hasPatch\":true,\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306961401.076942,\"revision\":\"87520\"},{\"who\":\"eroman@chromium.org\",\"when\":1306961401.076962,\"revision\":\"87520\"}],\"job_name\":\"7057043-2001\",\"revision\":\"87520\"},\"submittedAt\":1306961401.0940039,\"builds\":[1960],\"builderName\":\"linux_clang\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 13:50:01\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 01 Jun 2011 13:50:01\\nChanged By: eroman@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"commit-bot@chromium.org\",\"eroman@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux_clang\",\"Build\"],[\"buildnumber\",1960,\"Build\"],[\"got_revision\",\"87520\",\"Source\"],[\"got_webkit_revision\",\"87815\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87520\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm46-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]},\"1962\":{\"slave\":\"vm104-m4\",\"builderName\":\"linux_clang\",\"number\":1962,\"currentStep\":{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",73905,60871.222936713377]],\"isStarted\":true,\"times\":[1306962746.2661459,null],\"text\":[\"updating\",\"r87522\"]},\"times\":[1306962730.9074459,null],\"blame\":[\"annacc@chromium.org\",\"commit-bot@chromium.org\"],\"reason\":\"'commit-bot: 7094007-11001' try job\",\"eta\":1155.9597773551941,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2316,2293.7987896042077]],\"isStarted\":true,\"times\":[1306962730.909133,1306962746.2654829]},{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",73905,60871.222936713377]],\"isStarted\":true,\"times\":[1306962746.2661459,null],\"text\":[\"updating\",\"r87522\"]},{\"step_number\":2,\"text\":[\"Updating and building clang and plugins\"],\"expectations\":[[\"output\",null,50298.000159855423]],\"name\":\"update_clang\"},{\"step_number\":3,\"text\":[\"compiling\"],\"expectations\":[[\"output\",null,240254.39331334602]],\"name\":\"compile\"}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T21:12:10.896332\",\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306962730.89623,\"revision\":\"87522\"},{\"who\":\"annacc@chromium.org\",\"when\":1306962730.89627,\"revision\":\"87522\"}],\"job_name\":\"7094007-11001\",\"revision\":\"87522\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T21:12:10.896332\",\"changes\":[{\"who\":\"commit-bot@chromium.org\",\"when\":1306962730.89623,\"revision\":\"87522\"},{\"who\":\"annacc@chromium.org\",\"when\":1306962730.89627,\"revision\":\"87522\"}],\"job_name\":\"7094007-11001\",\"revision\":\"87522\"},\"submittedAt\":1306962730.896647,\"builds\":[1962],\"builderName\":\"linux_clang\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:12:10\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 01 Jun 2011 14:12:10\\nChanged By: annacc@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"annacc@chromium.org\",\"commit-bot@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux_clang\",\"Build\"],[\"buildnumber\",1962,\"Build\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87522\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm104-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]}}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux_touch/builds/?select=83&filter=1","{\"83\":{\"slave\":\"vm112-m4\",\"builderName\":\"linux_touch\",\"number\":83,\"currentStep\":{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",4076,74828.80859375]],\"isStarted\":true,\"times\":[1306962854.2736349,null],\"eta\":154.46634285519144,\"text\":[\"updating\",\"r87524\"]},\"times\":[1306962841.655215,null],\"blame\":[\"ben@chromium.org\"],\"reason\":\"'beng: widget1' try job\",\"eta\":933.88136696815491,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2267,2271.00390625]],\"isStarted\":true,\"times\":[1306962841.65607,1306962854.2728331]},{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",4076,74828.80859375]],\"isStarted\":true,\"times\":[1306962854.2736349,null],\"eta\":154.46634285519144,\"text\":[\"updating\",\"r87524\"]},{\"step_number\":2,\"text\":[\"compiling\"],\"expectations\":[[\"output\",null,215986.47265625]],\"name\":\"compile\"},{\"step_number\":3,\"text\":[\"running check_deps\"],\"expectations\":[[\"output\",null,1028.5]],\"name\":\"check_deps\"},{\"step_number\":4,\"text\":[\"running crypto_unittests\"],\"expectations\":[[\"output\",null,7094.80859375]],\"name\":\"crypto_unittests\"},{\"step_number\":5,\"text\":[\"running googleurl_unittests\"],\"expectations\":[[\"output\",null,6149.234375]],\"name\":\"googleurl_unittests\"},{\"step_number\":6,\"text\":[\"running gpu_unittests\"],\"expectations\":[[\"output\",null,1254388.01953125]],\"name\":\"gpu_unittests\"},{\"step_number\":7,\"text\":[\"running media_unittests\"],\"expectations\":[[\"output\",null,33146.8515625]],\"name\":\"media_unittests\"},{\"step_number\":8,\"text\":[\"running net_unittests\"],\"expectations\":[[\"output\",null,596216.60546875]],\"name\":\"net_unittests\"},{\"step_number\":9,\"text\":[\"running printing_unittests\"],\"expectations\":[[\"output\",null,2964.75]],\"name\":\"printing_unittests\"},{\"step_number\":10,\"text\":[\"running remoting_unittests\"],\"expectations\":[[\"output\",null,49026.9609375]],\"name\":\"remoting_unittests\"},{\"step_number\":11,\"text\":[\"running webkit_unit_tests\"],\"expectations\":[[\"output\",null,16653.6015625]],\"name\":\"webkit_unit_tests\"}],\"sourceStamp\":{\"changes\":[{\"who\":\"ben@chromium.org\",\"when\":1306962841.6221139,\"revision\":\"87524\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:14:01.622175\",\"patchset\":1,\"issue\":7080068,\"job_name\":\"widget1\",\"revision\":\"87524\"},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"ben@chromium.org\",\"when\":1306962841.6221139,\"revision\":\"87524\"}],\"hasPatch\":true,\"timestamp\":\"2011-06-01T21:14:01.622175\",\"patchset\":1,\"issue\":7080068,\"job_name\":\"widget1\",\"revision\":\"87524\"},\"submittedAt\":1306962841.632232,\"builds\":[83],\"builderName\":\"linux_touch\"}],\"changes\":[\"File: \\nAt: Wed 01 Jun 2011 14:14:01\\nChanged By: ben@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"ben@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux_touch\",\"Build\"],[\"buildnumber\",83,\"Build\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"87524\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm112-m4\",\"BuildSlave\"]]}}"]]
\ No newline at end of file
diff --git a/tests/data/testCMDcurrent_expected.txt b/tests/data/testCMDcurrent_expected.txt
deleted file mode 100644
index f0808b2..0000000
--- a/tests/data/testCMDcurrent_expected.txt
+++ /dev/null
@@ -1 +0,0 @@
-"linux\n29974: slave= vm127-m4 duration=18435059 eta= 295 blame=yoz@chromium.org\n29976: slave= vm151-m4 duration=18434659 eta= 609 blame=jhawkins@chromium.org\n29978: slave= vm123-m4 duration=18434359 eta= 336 blame=zelidrag@chromium.org\n29979: slave= vm138-m4 duration=18434229 eta= 576 blame=cevans@chromium.org\n29980: slave= vm141-m4 duration=18434219 eta= 580 blame=lipalani@google.com\n29981: slave= vm137-m4 duration=18433869 eta= 1101 blame=scr@chromium.org\n29982: slave= vm140-m4 duration=18433779 eta= 1108 blame=sergeyu@chromium.org\n29983: slave= vm136-m4 duration=18433549 eta= 1279 blame=wjia@chromium.org\n29984: slave= vm135-m4 duration=18433379 eta= 715 blame=asvitkine@chromium.org\n29985: slave= vm155-m4 duration=18432949 eta= 981 blame=tfarina@chromium.org\n29986: slave= vm163-m4 duration=18432808 eta= 1611 blame=cdn@chromium.org\n29987: slave= vm146-m4 duration=18432757 eta= 1610 blame=sanjeevr@chromium.org\n29988: slave= vm164-m4 duration=18432619 eta= 1902 blame=asvitkine@chromium.org\n29989: slave= vm158-m4 duration=18432609 eta= 1693 blame=asvitkine@chromium.org\n29992: slave= vm145-m4 duration=18432527 eta= 1771 blame=commit-bot@chromium.org, wez@chromium.org\n29993: slave= vm157-m4 duration=18432407 eta= 1857 blame=jochen@chromium.org\n29994: slave= vm143-m4 duration=18432269 eta= 1986 blame=lipalani@google.com\n29995: slave= vm139-m4 duration=18432248 eta= 2168 blame=annacc@chromium.org, commit-bot@chromium.org\n29996: slave= vm131-m4 duration=18431819 eta= 2984 blame=robertshield@chromium.org\n29997: slave= vm150-m4 duration=18431629 eta= 2566 blame=jar@google.com\n29998: slave= vm162-m4 duration=18431499 eta= 2708 blame=zelidrag@chromium.org\nlinux_clang\n1960: slave= vm46-m4 duration=18432599 eta= 326 blame=commit-bot@chromium.org, eroman@chromium.org\n1962: slave= vm104-m4 duration=18431269 eta= 1156 blame=annacc@chromium.org, commit-bot@chromium.org\nlinux_touch\n 83: slave= vm112-m4 duration=18431158 eta= 934 blame=ben@chromium.org\n"
diff --git a/tests/data/testCMDdisconnected.json b/tests/data/testCMDdisconnected.json
deleted file mode 100644
index 0156661..0000000
--- a/tests/data/testCMDdisconnected.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/slaves?filter=1","{\"vm122-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5850,5736,5688,5677,5658]},\"name\":\"vm122-m4\"},\"vm156-m4\":{\"name\":\"vm156-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5809,5720,5696]}},\"vm161-m4\":{\"name\":\"vm161-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5834,5734,5712]}},\"vm152-m4\":{\"name\":\"vm152-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5783,5772,5715,5665]}},\"vm46-m4\":{\"name\":\"vm46-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5757]}},\"vm129-m4\":{\"name\":\"vm129-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5820,5796,5790,5773,5753,5735,5718]}},\"vm66-m4\":{\"name\":\"vm66-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5674]}},\"vm142-m4\":{\"name\":\"vm142-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5846,5762,5730,5721,5713,5678]}},\"vm149-m4\":{\"name\":\"vm149-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5843,5806,5769,5765,5663]}},\"vm124-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5785,5780]},\"name\":\"vm124-m4\"},\"vm160-m4\":{\"name\":\"vm160-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5784,5779,5751,5742,5707]}},\"vm157-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5828,5689]},\"name\":\"vm157-m4\"},\"vm158-m4\":{\"name\":\"vm158-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5813,5737,5700,5660]}},\"vm145-m4\":{\"name\":\"vm145-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5840,5778,5682,5670]}},\"vm126-m4\":{\"name\":\"vm126-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5844,5775,5705,5703,5698,5662]}},\"vm119-m4\":{\"name\":\"vm119-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5759]}},\"vm125-m4\":{\"name\":\"vm125-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5789,5768,5728,5684]}},\"vm112-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"name\":\"vm112-m4\"},\"vm169-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"name\":\"vm169-m4\"},\"vm150-m4\":{\"name\":\"vm150-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5819,5708]}},\"vm131-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5849,5747,5729]},\"name\":\"vm131-m4\"},\"vm57-m4\":{\"name\":\"vm57-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5807,5799,5767,5699]}},\"vm146-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5743]},\"name\":\"vm146-m4\"},\"vm127-m4\":{\"name\":\"vm127-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5816,5808,5795,5792,5777,5744]}},\"vm65-m4\":{\"name\":\"vm65-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5693,5664]}},\"vm148-m4\":{\"name\":\"vm148-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5748]}},\"vm165-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5802]},\"name\":\"vm165-m4\"},\"vm62-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5676,5659]},\"name\":\"vm62-m4\"},\"vm141-m4\":{\"name\":\"vm141-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5838,5793,5766,5691,5673]}},\"vm155-m4\":{\"name\":\"vm155-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5731,5726]}},\"vm130-m4\":{\"name\":\"vm130-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5836,5822,5776,5749]}},\"vm139-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5814,5754]},\"name\":\"vm139-m4\"},\"vm144-m4\":{\"name\":\"vm144-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5848,5782,5761,5758,5669]}},\"vm61-m4\":{\"name\":\"vm61-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5853,5845,5839,5781,5671]}},\"vm164-m4\":{\"name\":\"vm164-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5823,5733]}},\"vm137-m4\":{\"name\":\"vm137-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5801,5704,5701]}},\"vm135-m4\":{\"name\":\"vm135-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5786,5755,5727,5722]}},\"vm27-m4\":{\"name\":\"vm27-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\n\",\"runningBuilds\":[],\"host\":\"VM27-M4\\n\",\"version\":\"0.7.12\",\"connected\":true},\"vm86-m4\":{\"name\":\"vm86-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5829,5812,5805,5800,5752,5745,5739,5725,5661]}},\"vm138-m4\":{\"name\":\"vm138-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5797,5692]}},\"vm60-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5841,5831,5815,5788]},\"name\":\"vm60-m4\"},\"vm121-m4\":{\"name\":\"vm121-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5847,5738,5724]}},\"vm147-m4\":{\"name\":\"vm147-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5683]}},\"vm134-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5851,5825,5714,5702,5694,5668]},\"name\":\"vm134-m4\"},\"vm133-m4\":{\"name\":\"vm133-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5821,5686]}},\"vm143-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5824,5695]},\"name\":\"vm143-m4\"},\"vm140-m4\":{\"name\":\"vm140-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5811,5770,5690]}},\"vm64-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5679]},\"name\":\"vm64-m4\"},\"vm159-m4\":{\"name\":\"vm159-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5756,5740,5710,5697]}},\"vm151-m4\":{\"name\":\"vm151-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5835,5833,5830,5746]}},\"vm136-m4\":{\"name\":\"vm136-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5826,5803,5750,5706,5675,5657]}},\"vm118-m4\":{\"name\":\"vm118-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5787,5723,5709]}},\"vm153-m4\":{\"name\":\"vm153-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5854,5832,5827,5818,5810,5681]}},\"vm128-m4\":{\"name\":\"vm128-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5804,5798,5791,5760,5732]}},\"vm162-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"builders\":{\"linux_clang\":[5852,5842,5794,5774,5763,5741,5711,5685]},\"name\":\"vm162-m4\"},\"vm79-m4\":{\"name\":\"vm79-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[{\"slave\":\"vm79-m4\",\"builderName\":\"linux\",\"number\":7862,\"currentStep\":{\"name\":\"compile\",\"step_number\":3,\"expectations\":[[\"output\",1500,652745.2188317943]],\"isStarted\":true,\"times\":[1325903873.423871,null],\"eta\":1194.3870848709205,\"text\":[\"compiling\"]},\"times\":[1325903741.417845,null],\"blame\":[\"ben@chromium.org\"],\"reason\":\"bookmarks\",\"eta\":3017.402611017227,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",3036,2984.497415347987]],\"isStarted\":true,\"times\":[1325903741.423623,1325903749.471465]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",123768,110102.54327359505]],\"isStarted\":true,\"times\":[1325903749.472252,1325903872.839043],\"text\":[\"update\",\"r116793\",\"webkit r104316\"]},{\"name\":\"cleanup_temp\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",882,882.0]],\"isStarted\":true,\"times\":[1325903872.84103,1325903873.423161],\"text\":[\"cleanup_temp\"]},{\"name\":\"compile\",\"step_number\":3,\"expectations\":[[\"output\",1500,652745.2188317943]],\"isStarted\":true,\"times\":[1325903873.423871,null],\"eta\":1194.3870848709205,\"text\":[\"compiling\"]},{\"step_number\":4,\"expectations\":[[\"output\",null,1027.4689494373742]],\"name\":\"check_deps\"},{\"step_number\":5,\"expectations\":[[\"output\",null,null]],\"name\":\"check_licenses\"},{\"step_number\":6,\"expectations\":[[\"output\",null,179859.7652469262]],\"name\":\"base_unittests\"},{\"step_number\":7,\"expectations\":[[\"output\",null,6575.046436370956]],\"name\":\"cacheinvalidation_unittests\"},{\"step_number\":8,\"expectations\":[[\"output\",null,20528.35601437415]],\"name\":\"crypto_unittests\"},{\"step_number\":9,\"expectations\":[[\"output\",null,8726.894867014826]],\"name\":\"dbus_unittests\"},{\"step_number\":10,\"expectations\":[[\"output\",null,null]],\"name\":\"googleurl_unittests\"},{\"step_number\":11,\"expectations\":[[\"output\",null,1205078.6368828996]],\"name\":\"gpu_unittests\"},{\"step_number\":12,\"expectations\":[[\"output\",null,30026.771105302363]],\"name\":\"jingle_unittests\"},{\"step_number\":13,\"expectations\":[[\"output\",null,95333.54824245749]],\"name\":\"media_unittests\"},{\"step_number\":14,\"expectations\":[[\"output\",null,659450.6864125329]],\"name\":\"net_unittests\"},{\"step_number\":15,\"expectations\":[[\"output\",null,8437.046186508285]],\"name\":\"printing_unittests\"},{\"step_number\":16,\"expectations\":[[\"output\",null,43253.68892827003]],\"name\":\"remoting_unittests\"},{\"step_number\":17,\"expectations\":[[\"output\",null,185956.73555810473]],\"name\":\"test_shell_tests\"},{\"step_number\":18,\"expectations\":[[\"output\",null,82976.00496202271]],\"name\":\"safe_browsing_tests\"},{\"step_number\":19,\"expectations\":[[\"output\",null,23609.838430609303]],\"name\":\"ipc_tests\"},{\"step_number\":20,\"expectations\":[[\"output\",null,128471.11171378862]],\"name\":\"sync_unit_tests\"},{\"step_number\":21,\"expectations\":[[\"output\",null,690193.9130754186]],\"name\":\"unit_tests\"},{\"step_number\":22,\"expectations\":[[\"output\",null,10976.432211674655]],\"name\":\"sql_unittests\"},{\"step_number\":23,\"expectations\":[[\"output\",null,27243.03497151324]],\"name\":\"gfx_unittests\"},{\"step_number\":24,\"expectations\":[[\"output\",null,131390.40876919584]],\"name\":\"content_unittests\"},{\"step_number\":25,\"expectations\":[[\"output\",null,4356329.026863934]],\"name\":\"browser_tests\"},{\"step_number\":26,\"expectations\":[[\"output\",null,918589.1835752886]],\"name\":\"ui_tests\"},{\"step_number\":27,\"expectations\":[[\"output\",null,1106406.7127219]],\"name\":\"nacl_integration\"},{\"step_number\":28,\"expectations\":[[\"output\",null,375291.92408354336]],\"name\":\"interactive_ui_tests\"},{\"step_number\":29,\"expectations\":[[\"output\",null,94158.95625690141]],\"name\":\"webkit_unit_tests\"},{\"step_number\":30,\"expectations\":[[\"output\",null,null]],\"name\":\"pyauto_functional_tests\"}],\"sourceStamp\":{\"project\":\"chrome\",\"hasPatch\":true,\"changes\":[{\"rev\":\"116793\",\"who\":\"ben@chromium.org\",\"when\":1325903736,\"number\":6297,\"at\":\"Fri 06 Jan 2012 18:35:36\",\"revision\":\"116793\"}],\"revision\":\"116793\"},\"properties\":[[\"blamelist\",[\"ben@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Builder\"],[\"buildnumber\",7862,\"Build\"],[\"got_revision\",\"116793\",\"Source\"],[\"got_webkit_revision\",\"104316\",\"Source\"],[\"issue\",9127016,\"Try job\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"patchset\",1,\"Try job\"],[\"project\",\"chrome\",\"Build\"],[\"repository\",\"\",\"Build\"],[\"revision\",\"116793\",\"Build\"],[\"rietveld\",\"https://chromiumcodereview.appspot.com/status_listener\",\"Try job\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm79-m4\",\"BuildSlave\"]]}],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5817,5719,5717,5680,5666]}},\"vm132-m4\":{\"name\":\"vm132-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5837,5716]}},\"vm104-m4\":{\"name\":\"vm104-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"builders\":{\"linux_clang\":[5771,5764,5687,5672,5667]}}}"]]
\ No newline at end of file
diff --git a/tests/data/testCMDhelp.json b/tests/data/testCMDhelp.json
deleted file mode 100644
index 0637a08..0000000
--- a/tests/data/testCMDhelp.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/tests/data/testCMDidle.json b/tests/data/testCMDidle.json
deleted file mode 100644
index 6b93726..0000000
--- a/tests/data/testCMDidle.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux_clang?filter=1","{\"category\":null,\"basedir\":\"linux_clang\",\"cachedBuilds\":[1485,1486,1487,1488,1489,1490,1491,1492,1493,1494],\"state\":\"idle\",\"slaves\":[\"vm165-m4\",\"vm104-m4\",\"vm113-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0}"]]
\ No newline at end of file
diff --git a/tests/data/testCMDinteractive.json b/tests/data/testCMDinteractive.json
deleted file mode 100644
index 0637a08..0000000
--- a/tests/data/testCMDinteractive.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/tests/data/testCMDlast_failure.json b/tests/data/testCMDlast_failure.json
deleted file mode 100644
index 7a012dd..0000000
--- a/tests/data/testCMDlast_failure.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux?filter=1","{\"category\":null,\"basedir\":\"linux\",\"cachedBuilds\":[27555,27556,27557,27558,27559,27560,27561,27562,27563,27564],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[27544,27547,27548,27549,27551,27552,27554,27556,27557,27558,27559,27560,27561,27562,27563,27564],\"pendingBuilds\":0}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/_all?filter=1","{\"27367\":{\"slave\":\"vm158-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/compile/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"compile\"],\"number\":27367,\"currentStep\":null,\"results\":2,\"blame\":[\"jam@chromium.org\"],\"reason\":\"'jabdelmalek: m2p0' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2261,3186.471458806147]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305767714.4182191,1305767728.4233091],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",71816,55013.350339467594]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85786\",\"webkit r86738\"],\"times\":[1305767728.4237411,1305767933.3346059],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1131417,193681.21648321961]],\"isStarted\":true,\"results\":[2,[\"compile\"]],\"eta\":null,\"urls\":{},\"text\":[\"compile\",\"failed\"],\"times\":[1305767933.3351481,1305768326.101089],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27367/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":false,\"step_number\":3,\"expectations\":[[\"output\",null,1004.0]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running check_deps\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":false,\"step_number\":4,\"expectations\":[[\"output\",null,87533.189728444268]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running base_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":false,\"step_number\":5,\"expectations\":[[\"output\",null,7084.499330792708]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running crypto_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":false,\"step_number\":6,\"expectations\":[[\"output\",null,6087.2423939919827]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running googleurl_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":false,\"step_number\":7,\"expectations\":[[\"output\",null,1253831.9241125425]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running gpu_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":false,\"step_number\":8,\"expectations\":[[\"output\",null,32834.878085731754]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running media_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":false,\"step_number\":9,\"expectations\":[[\"output\",null,596733.01767307625]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running net_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":false,\"step_number\":10,\"expectations\":[[\"output\",null,2896.8465459877389]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running printing_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":false,\"step_number\":11,\"expectations\":[[\"output\",null,48525.975900374076]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running remoting_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":false,\"step_number\":12,\"expectations\":[[\"output\",null,82977.588277258154]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running test_shell_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":false,\"step_number\":13,\"expectations\":[[\"output\",null,12567.789832966915]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running safe_browsing_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":false,\"step_number\":14,\"expectations\":[[\"output\",null,14040.424053927629]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running ipc_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":false,\"step_number\":15,\"expectations\":[[\"output\",null,70844.276657953596]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running sync_unit_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":false,\"step_number\":16,\"expectations\":[[\"output\",null,506029.78632961382]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running unit_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":false,\"step_number\":17,\"expectations\":[[\"output\",null,11624.818815267232]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running app_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":false,\"step_number\":18,\"expectations\":[[\"output\",null,12206.219502269108]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running gfx_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":false,\"step_number\":19,\"expectations\":[[\"output\",null,649040.272049058]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running browser_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":false,\"step_number\":20,\"expectations\":[[\"output\",null,152863.46424951556]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":false,\"step_number\":21,\"expectations\":[[\"output\",null,1530.0]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":false,\"step_number\":22,\"expectations\":[[\"output\",null,944.0007374046221]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_integration\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":false,\"step_number\":23,\"expectations\":[[\"output\",null,77526.258477314361]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running interactive_ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":false,\"step_number\":24,\"expectations\":[[\"output\",null,16387.700429985227]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running webkit_unit_tests\"],\"times\":[null,null],\"logs\":[]}],\"sourceStamp\":{\"issue\":7037041,\"timestamp\":\"2011-05-19T01:15:14.365731\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":42,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"jam@chromium.org\",\"when\":1305767714.3656349,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85786\"}],\"job_name\":\"m2p0\",\"revision\":\"85786\"},\"requests\":[{\"source\":{\"issue\":7037041,\"timestamp\":\"2011-05-19T01:15:14.365731\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":42,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"jam@chromium.org\",\"when\":1305767714.3656349,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85786\"}],\"job_name\":\"m2p0\",\"revision\":\"85786\"},\"submittedAt\":1305767714.3864491,\"builds\":[27367],\"builderName\":\"linux\"}],\"times\":[1305767714.4162731,1305768326.102529],\"changes\":[\"File: \\nAt: Wed 18 May 2011 18:15:14\\nChanged By: jam@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jam@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27367,\"Build\"],[\"got_revision\",\"85786\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"85786\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm158-m4\",\"BuildSlave\"]]},\"27366\":{\"slave\":\"vm161-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/nacl_integration/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":27366,\"currentStep\":null,\"results\":0,\"blame\":[\"abarth@chromium.org\",\"commit-bot@chromium.org\"],\"reason\":\"'commit-bot: 7039048-1004' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",3204,3133.885835224587]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305767414.2518561,1305767427.2942541],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",52466,69790.40135787036]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85856\",\"webkit r86738\"],\"times\":[1305767427.2949071,1305767607.3301849],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1014789,621598.86593287846]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1305767607.330652,1305768329.854774],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1305768329.8552151,1305768377.9932301],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/check_deps/logs/stdio\"]]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",87534,87511.75891377707]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1305768377.993618,1305768421.1862111],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/base_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",null,7085.9973231708327]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running crypto_unittests\"],\"times\":[1305768421.1865211,1305768421.336484],\"logs\":[]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6141,6103.9695759679307]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1305768421.336869,1305768421.7173431],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/googleurl_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",null,1253831.6964501699]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running gpu_unittests\"],\"times\":[1305768421.7176781,1305768421.718049],\"logs\":[]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32835,32834.512342927024]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1305768421.7183521,1305768424.897222],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/media_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597026,596394.0706923051]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"5 disabled\",\"10 flaky\"],\"times\":[1305768424.897716,1305768571.9170811],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/net_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",null,2896.3861839509564]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running printing_unittests\"],\"times\":[1305768571.9174011,1305768571.939842],\"logs\":[]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",null,48517.903601496299]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running remoting_unittests\"],\"times\":[1305768571.940172,1305768571.9436409],\"logs\":[]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",null,83008.353109032614]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running test_shell_tests\"],\"times\":[1305768571.9441509,1305768571.9446709],\"logs\":[]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",null,12567.159331867661]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running safe_browsing_tests\"],\"times\":[1305768571.9451771,1305768571.9455891],\"logs\":[]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14037,14045.696215710512]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1305768571.9461229,1305768580.9621191],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/ipc_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",null,70857.106631814415]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running sync_unit_tests\"],\"times\":[1305768580.9626091,1305768580.9630971],\"logs\":[]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",506546,506202.14531845524]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"],\"times\":[1305768580.9635811,1305768670.7532599],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",11639,11598.275261068928]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1305768670.7536991,1305768690.978626],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/app_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",null,12205.878009076438]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running gfx_unittests\"],\"times\":[1305768690.978956,1305768691.0463009],\"logs\":[]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",null,649015.08819623222]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running browser_tests\"],\"times\":[1305768691.0468731,1305768691.0819609],\"logs\":[]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",null,153963.85699806226]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running ui_tests\"],\"times\":[1305768691.0823779,1305768691.1120479],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",null,1530.0]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_ui_tests\"],\"times\":[1305768691.1125591,1305768691.148658],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",944,944.00294961848829]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_integration\"],\"times\":[1305768691.1492729,1305768691.22158],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27366/steps/nacl_integration/logs/stdio\"]]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",null,76816.033909257458]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running interactive_ui_tests\"],\"times\":[1305768691.2220149,1305768691.2224541],\"logs\":[]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",null,16388.801719940911]],\"isStarted\":true,\"results\":[3,[]],\"eta\":null,\"urls\":{},\"text\":[\"running webkit_unit_tests\"],\"times\":[1305768691.22276,1305768691.223141],\"logs\":[]}],\"sourceStamp\":{\"issue\":null,\"timestamp\":\"2011-05-19T01:10:14.216783\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"commit-bot@chromium.org\",\"when\":1305767414.2166741,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85856\"},{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"abarth@chromium.org\",\"when\":1305767414.216711,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85856\"}],\"job_name\":\"7039048-1004\",\"revision\":\"85856\"},\"requests\":[{\"source\":{\"issue\":null,\"timestamp\":\"2011-05-19T01:10:14.216783\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"commit-bot@chromium.org\",\"when\":1305767414.2166741,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85856\"},{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"abarth@chromium.org\",\"when\":1305767414.216711,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85856\"}],\"job_name\":\"7039048-1004\",\"revision\":\"85856\"},\"submittedAt\":1305767414.217159,\"builds\":[27366],\"builderName\":\"linux\"}],\"times\":[1305767414.250133,1305768691.22348],\"changes\":[\"File: \\nAt: Wed 18 May 2011 18:10:14\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 18 May 2011 18:10:14\\nChanged By: abarth@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"abarth@chromium.org\",\"commit-bot@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27366,\"Build\"],[\"clobber\",true,\"Scheduler\"],[\"got_revision\",\"85856\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"85856\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm161-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]},\"27372\":{\"slave\":\"vm160-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":27372,\"currentStep\":null,\"results\":0,\"blame\":[\"kinuko@chromium.org\"],\"reason\":\"'kinuko: QM_notifyAccess_db#d9e64b' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2261,2718.8630582719229]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305770364.354599,1305770378.414221],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",74874,67754.010549527098]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85777\",\"webkit r86738\"],\"times\":[1305770378.4149461,1305770587.050137],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1174985,1155358.0095037753]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1305770587.0505829,1305771244.0499699],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1305771244.0508211,1305771293.513952],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/check_deps/logs/stdio\"]]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",87597,87594.462419753472]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1305771293.514271,1305771335.796128],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/base_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7089,7088.7656040872716]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"crypto_unittests\"],\"times\":[1305771335.7965331,1305771339.7024209],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/crypto_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6102.7284562030618]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1305771339.7029231,1305771340.135036],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/googleurl_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1253834,1253833.060128517]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gpu_unittests\"],\"times\":[1305771340.135546,1305771345.8436971],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/gpu_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32837,32836.866235044778]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1305771345.8441091,1305771348.9503241],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/media_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",596898,596934.2970130709]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"5 disabled\",\"10 flaky\"],\"times\":[1305771348.950902,1305771493.4311891],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/net_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2895,2896.4327045621167]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"printing_unittests\"],\"times\":[1305771493.4317751,1305771493.9399691],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/printing_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48567,48572.717996886691]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"remoting_unittests\"],\"times\":[1305771493.9406929,1305771498.567049],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/remoting_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",83723,83693.362133664312]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"times\":[1305771498.5675609,1305771554.9929111],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/test_shell_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",12568,12567.930932280216]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"safe_browsing_tests\"],\"times\":[1305771554.9933441,1305771571.9651451],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/safe_browsing_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14097,14088.44081292131]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1305771571.965502,1305771583.0712709],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/ipc_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",70798,70836.414895561058]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"times\":[1305771583.0715899,1305771590.2556701],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/sync_unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",505908,506598.49833070009]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"19 disabled\",\"4 flaky\"],\"times\":[1305771590.2562051,1305771676.5408731],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",11632,11561.311084494275]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1305771676.541394,1305771704.211282],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/app_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12203,12204.69435944591]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gfx_unittests\"],\"times\":[1305771704.211714,1305771715.132092],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/gfx_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",648676,670999.82100153307]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"browser_tests\",\"22 flaky\"],\"times\":[1305771715.132797,1305772798.073854],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/browser_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",156960,154157.10825779737]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ui_tests\",\"25 disabled\",\"69 flaky\"],\"times\":[1305772798.0743389,1305773479.177074],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"times\":[1305773479.1776221,1305773479.4784119],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/nacl_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",944,944.00000576097364]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_integration\"],\"times\":[1305773479.478889,1305773479.5206161],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/nacl_integration/logs/stdio\"]]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",77548,77910.320577416074]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"interactive_ui_tests\",\"6 flaky\"],\"times\":[1305773479.521163,1305773587.2473691],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/interactive_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",16384,16389.178138437041]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"times\":[1305773587.2479119,1305773589.4147279],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27372/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"issue\":7011033,\"timestamp\":\"2011-05-19T01:59:24.324754\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":20009,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"kinuko@chromium.org\",\"when\":1305770364.32465,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85777\"}],\"job_name\":\"QM_notifyAccess_db#d9e64b\",\"revision\":\"85777\"},\"requests\":[{\"source\":{\"issue\":7011033,\"timestamp\":\"2011-05-19T01:59:24.324754\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":20009,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"kinuko@chromium.org\",\"when\":1305770364.32465,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85777\"}],\"job_name\":\"QM_notifyAccess_db#d9e64b\",\"revision\":\"85777\"},\"submittedAt\":1305770364.334136,\"builds\":[27372],\"builderName\":\"linux\"}],\"times\":[1305770364.3519249,1305773589.4150751],\"changes\":[\"File: \\nAt: Wed 18 May 2011 18:59:24\\nChanged By: kinuko@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"kinuko@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27372,\"Build\"],[\"got_revision\",\"85777\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"85777\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm160-m4\",\"BuildSlave\"]]},\"27373\":{\"slave\":\"vm141-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":27373,\"currentStep\":null,\"results\":0,\"blame\":[\"kinuko@chromium.org\"],\"reason\":\"'kinuko: QM_notifyAccess_db#cfa57' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2261,2961.4315291359617]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305771029.64749,1305771042.9236619],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",75117,67623.005274763549]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85777\",\"webkit r86738\"],\"times\":[1305771042.924269,1305771236.632303],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",379619,713873.50475188764]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1305771236.6329429,1305771796.166187],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1305771796.1667011,1305771841.5199749],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/check_deps/logs/stdio\"]]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",87525,87568.231209876743]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1305771841.520354,1305771883.003454],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/base_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7089,7087.8828020436358]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"crypto_unittests\"],\"times\":[1305771883.0039511,1305771886.207386],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/crypto_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6081,6092.3642281015309]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1305771886.2077639,1305771886.643374],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/googleurl_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1253835,1253830.5300642585]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gpu_unittests\"],\"times\":[1305771886.6438971,1305771889.6996031],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/gpu_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32837,32835.433117522392]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1305771889.6999431,1305771894.2788391],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/media_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",596925,596999.14850653545]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"5 disabled\",\"10 flaky\"],\"times\":[1305771894.279279,1305772037.701299],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/net_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2892,2894.2163522810583]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"printing_unittests\"],\"times\":[1305772037.701834,1305772038.0856099],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/printing_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48577,48549.858998443349]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"remoting_unittests\"],\"times\":[1305772038.0860889,1305772042.6621389],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/remoting_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",83728,83332.181066832156]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"times\":[1305772042.662636,1305772099.4911821],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/test_shell_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",12568,12567.965466140107]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"safe_browsing_tests\"],\"times\":[1305772099.4915259,1305772112.898664],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/safe_browsing_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14097,14062.720406460656]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1305772112.899019,1305772121.5917001],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/ipc_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",70835,70839.207447780529]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"times\":[1305772121.592196,1305772133.8516569],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/sync_unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",506077,506656.24916535005]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"19 disabled\",\"4 flaky\"],\"times\":[1305772133.8519969,1305772223.437923],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",11632,11605.155542247137]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1305772223.4382851,1305772247.9492109],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/app_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12204,12204.347179722954]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gfx_unittests\"],\"times\":[1305772247.9497571,1305772254.105186],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/gfx_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",649275,679082.41050076648]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"browser_tests\",\"22 flaky\"],\"times\":[1305772254.1057711,1305773354.8603461],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/browser_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",154867,154152.55412889869]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ui_tests\",\"25 disabled\",\"69 flaky\"],\"times\":[1305773354.8607559,1305774033.147979],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"times\":[1305774033.1485209,1305774033.447715],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/nacl_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",944,944.00000288048682]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_integration\"],\"times\":[1305774033.4482169,1305774033.4871171],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/nacl_integration/logs/stdio\"]]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",76964,77533.660288708037]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"interactive_ui_tests\",\"6 flaky\"],\"times\":[1305774033.487592,1305774142.5197141],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/interactive_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",16386,16389.08906921852]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"times\":[1305774142.5202279,1305774147.7851479],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27373/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"issue\":7011033,\"timestamp\":\"2011-05-19T02:10:29.574445\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":21008,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"kinuko@chromium.org\",\"when\":1305771029.574368,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85777\"}],\"job_name\":\"QM_notifyAccess_db#cfa57\",\"revision\":\"85777\"},\"requests\":[{\"source\":{\"issue\":7011033,\"timestamp\":\"2011-05-19T02:10:29.574445\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":21008,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"kinuko@chromium.org\",\"when\":1305771029.574368,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85777\"}],\"job_name\":\"QM_notifyAccess_db#cfa57\",\"revision\":\"85777\"},\"submittedAt\":1305771029.5808921,\"builds\":[27373],\"builderName\":\"linux\"}],\"times\":[1305771029.6453321,1305774147.7855761],\"changes\":[\"File: \\nAt: Wed 18 May 2011 19:10:29\\nChanged By: kinuko@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"kinuko@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27373,\"Build\"],[\"got_revision\",\"85777\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"85777\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm141-m4\",\"BuildSlave\"]]},\"27374\":{\"slave\":\"vm149-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":27374,\"currentStep\":null,\"results\":0,\"blame\":[\"dhollowa@chromium.org\"],\"reason\":\"'dhollowa: autofill_heuristics_bitfield#ad18d' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2856,2611.2157645679808]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305771104.4366641,1305771117.7760019],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",81539,73060.002637381782]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85846\",\"webkit r86738\"],\"times\":[1305771117.776407,1305771313.041415],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1175113,944515.75237594382]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1305771313.041991,1305771989.982693],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1305771989.983367,1305772037.086796],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/check_deps/logs/stdio\"]]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",87599,87582.615604938372]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1305772037.0872929,1305772079.0339439],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/base_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7087,7088.4414010218179]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"crypto_unittests\"],\"times\":[1305772079.0345299,1305772083.981705],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/crypto_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6081,6086.1821140507654]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1305772083.982049,1305772084.522958],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/googleurl_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1253833,1253832.2650321294]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gpu_unittests\"],\"times\":[1305772084.52352,1305772091.4178879],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/gpu_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32836,32835.716558761196]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1305772091.418227,1305772099.4853179],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/media_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597134,597023.07425326772]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"5 disabled\",\"10 flaky\"],\"times\":[1305772099.4856551,1305772244.91518],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/net_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2895,2895.6081761405294]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"printing_unittests\"],\"times\":[1305772244.915751,1305772245.5310531],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/printing_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48577,48563.429499221675]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"remoting_unittests\"],\"times\":[1305772245.5315759,1305772253.100023],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/remoting_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",83733,83531.590533416078]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"times\":[1305772253.100436,1305772311.3580761],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/test_shell_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",12568,12567.982733070054]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"safe_browsing_tests\"],\"times\":[1305772311.3585701,1305772326.002239],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/safe_browsing_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14096,14079.860203230328]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1305772326.0026829,1305772335.4263749],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/ipc_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",70825,70834.603723890265]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"times\":[1305772335.426739,1305772347.599961],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/sync_unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",506853,506636.12458267505]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"],\"times\":[1305772347.600347,1305772431.9142449],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",11631,11586.577771123568]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1305772431.914752,1305772456.3477471],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/app_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12204,12205.173589861477]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gfx_unittests\"],\"times\":[1305772456.3480799,1305772466.621799],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/gfx_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",692772,689883.20525038324]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"browser_tests\",\"22 flaky\"],\"times\":[1305772466.6221769,1305773554.2375259],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/browser_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",155121,153413.27706444933]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ui_tests\",\"25 disabled\",\"68 flaky\"],\"times\":[1305773554.2380891,1305774235.608145],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"times\":[1305774235.608568,1305774235.9368491],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/nacl_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",944,944.00000144024341]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_integration\"],\"times\":[1305774235.937346,1305774235.9799261],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/nacl_integration/logs/stdio\"]]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",77821,78542.330144354026]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"interactive_ui_tests\",\"6 flaky\"],\"times\":[1305774235.9804549,1305774345.4524469],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/interactive_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",16387,16387.54453460926]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"times\":[1305774345.452976,1305774347.904948],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27374/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"issue\":null,\"timestamp\":\"2011-05-19T02:11:44.371277\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"dhollowa@chromium.org\",\"when\":1305771104.2127559,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"autofill_heuristics_bitfield#ad18d\",\"revision\":85846},\"requests\":[{\"source\":{\"issue\":null,\"timestamp\":\"2011-05-19T02:11:44.371277\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"dhollowa@chromium.org\",\"when\":1305771104.2127559,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"autofill_heuristics_bitfield#ad18d\",\"revision\":85846},\"submittedAt\":1305771104.3961229,\"builds\":[27374],\"builderName\":\"linux\"}],\"times\":[1305771104.434979,1305774347.9054351],\"changes\":[\"File: \\nAt: Wed 18 May 2011 19:11:44\\nChanged By: dhollowa@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"dhollowa@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27374,\"Build\"],[\"got_revision\",\"85846\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",85846,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm149-m4\",\"BuildSlave\"]]},\"27375\":{\"slave\":\"vm154-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":27375,\"currentStep\":null,\"results\":0,\"blame\":[\"thakis@chromium.org\"],\"reason\":\"'thakis: mirandac#b9eacc' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2261,2436.1078822839904]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305772186.547313,1305772198.5193131],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",71869,71860.001318690891]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85846\",\"webkit r86738\"],\"times\":[1305772198.5199499,1305772377.376123],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1175112,621058.37618797191]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1305772377.376497,1305773098.4532859],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1305773098.4538801,1305773144.336972],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/check_deps/logs/stdio\"]]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",87602,87590.807802469179]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1305773144.3373699,1305773186.1562159],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/base_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7089,7088.7207005109085]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"crypto_unittests\"],\"times\":[1305773186.156801,1305773190.57938],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/crypto_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6083.0910570253827]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1305773190.5797429,1305773190.9338951],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/googleurl_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1253832,1253831.6325160647]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gpu_unittests\"],\"times\":[1305773190.934387,1305773194.2388489],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/gpu_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32836,32835.858279380598]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1305773194.2392261,1305773198.35637],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/media_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597074,597088.0371266338]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"5 disabled\",\"10 flaky\"],\"times\":[1305773198.3566871,1305773341.8023341],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/net_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2893,2895.3040880702647]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"printing_unittests\"],\"times\":[1305773341.8028569,1305773342.356518],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/printing_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48577,48570.214749610837]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"remoting_unittests\"],\"times\":[1305773342.356982,1305773348.8016019],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/remoting_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",83731,83639.795266708039]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"times\":[1305773348.801949,1305773411.0216999],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/test_shell_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",12568,12567.991366535027]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"safe_browsing_tests\"],\"times\":[1305773411.022049,1305773424.971791],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/safe_browsing_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14098,14088.430101615164]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1305773424.972245,1305773433.941329],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/ipc_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",70826,70693.801861945132]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"times\":[1305773433.9419701,1305773447.0560789],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/sync_unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",506480,506616.06229133753]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"],\"times\":[1305773447.0564239,1305773530.7739861],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",11631,11577.788885561784]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1305773530.77437,1305773554.7118101],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/app_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12204,12205.586794930739]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gfx_unittests\"],\"times\":[1305773554.712333,1305773560.886663],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/gfx_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",694341,689116.60262519168]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"browser_tests\",\"22 flaky\"],\"times\":[1305773560.8871679,1305774643.1877301],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/browser_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",154106,154242.13853222466]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ui_tests\",\"25 disabled\",\"68 flaky\"],\"times\":[1305774643.18805,1305775326.5789189],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"times\":[1305775326.579478,1305775326.895628],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/nacl_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",944,944.00000072012176]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_integration\"],\"times\":[1305775326.8960929,1305775326.9399109],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/nacl_integration/logs/stdio\"]]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",77818,78181.665072177013]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"interactive_ui_tests\",\"6 flaky\"],\"times\":[1305775326.9403951,1305775433.656538],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/interactive_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",16379,16386.27226730463]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"times\":[1305775433.6570981,1305775434.763644],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27375/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"issue\":7042024,\"timestamp\":\"2011-05-19T02:29:46.495860\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":3016,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"thakis@chromium.org\",\"when\":1305772186.3169689,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"mirandac#b9eacc\",\"revision\":85846},\"requests\":[{\"source\":{\"issue\":7042024,\"timestamp\":\"2011-05-19T02:29:46.495860\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":3016,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"thakis@chromium.org\",\"when\":1305772186.3169689,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"mirandac#b9eacc\",\"revision\":85846},\"submittedAt\":1305772186.5161331,\"builds\":[27375],\"builderName\":\"linux\"}],\"times\":[1305772186.5453601,1305775434.764226],\"changes\":[\"File: \\nAt: Wed 18 May 2011 19:29:46\\nChanged By: thakis@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"thakis@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27375,\"Build\"],[\"got_revision\",\"85846\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",85846,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm154-m4\",\"BuildSlave\"]]},\"27371\":{\"slave\":\"vm154-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/compile/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"compile\"],\"number\":27371,\"currentStep\":null,\"results\":2,\"blame\":[\"jam@chromium.org\"],\"reason\":\"'jabdelmalek: m2p0' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",3204,2581.7261165438458]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305769845.657697,1305769859.3067961],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",61902,57971.021099054182]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85786\",\"webkit r86738\"],\"times\":[1305769859.3074,1305770046.3166039],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",72885,1135687.0190075503]],\"isStarted\":true,\"results\":[2,[\"compile\"]],\"eta\":null,\"urls\":{},\"text\":[\"compile\",\"failed\"],\"times\":[1305770046.3172569,1305770337.8981011],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27371/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":false,\"step_number\":3,\"expectations\":[[\"output\",null,1004.0]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running check_deps\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":false,\"step_number\":4,\"expectations\":[[\"output\",null,87577.924839506944]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running base_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":false,\"step_number\":5,\"expectations\":[[\"output\",null,7088.5312081745442]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running crypto_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":false,\"step_number\":6,\"expectations\":[[\"output\",null,6125.4569124061245]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running googleurl_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":false,\"step_number\":7,\"expectations\":[[\"output\",null,1253832.120257034]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running gpu_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":false,\"step_number\":8,\"expectations\":[[\"output\",null,32835.732470089555]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running media_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":false,\"step_number\":9,\"expectations\":[[\"output\",null,596832.5940261418]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running net_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":false,\"step_number\":10,\"expectations\":[[\"output\",null,2895.8654091242338]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running printing_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":false,\"step_number\":11,\"expectations\":[[\"output\",null,48568.435993773383]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running remoting_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":false,\"step_number\":12,\"expectations\":[[\"output\",null,83635.724267328638]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running test_shell_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":false,\"step_number\":13,\"expectations\":[[\"output\",null,12567.861864560433]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running safe_browsing_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":false,\"step_number\":14,\"expectations\":[[\"output\",null,14079.88162584262]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running ipc_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":false,\"step_number\":15,\"expectations\":[[\"output\",null,70835.829791122102]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running sync_unit_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":false,\"step_number\":16,\"expectations\":[[\"output\",null,506432.99666140019]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running unit_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":false,\"step_number\":17,\"expectations\":[[\"output\",null,11617.62216898855]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running app_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":false,\"step_number\":18,\"expectations\":[[\"output\",null,12205.38871889182]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running gfx_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":false,\"step_number\":19,\"expectations\":[[\"output\",null,647411.64200306614]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running browser_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":false,\"step_number\":20,\"expectations\":[[\"output\",null,153607.21651559472]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":false,\"step_number\":21,\"expectations\":[[\"output\",null,1530.0]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":false,\"step_number\":22,\"expectations\":[[\"output\",null,944.00001152194727]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_integration\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":false,\"step_number\":23,\"expectations\":[[\"output\",null,78007.641154832148]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running interactive_ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":false,\"step_number\":24,\"expectations\":[[\"output\",null,16388.356276874078]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running webkit_unit_tests\"],\"times\":[null,null],\"logs\":[]}],\"sourceStamp\":{\"issue\":7037041,\"timestamp\":\"2011-05-19T01:50:45.607830\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":4041,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"jam@chromium.org\",\"when\":1305769845.6077399,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85786\"}],\"job_name\":\"m2p0\",\"revision\":\"85786\"},\"requests\":[{\"source\":{\"issue\":7037041,\"timestamp\":\"2011-05-19T01:50:45.607830\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":4041,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"jam@chromium.org\",\"when\":1305769845.6077399,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85786\"}],\"job_name\":\"m2p0\",\"revision\":\"85786\"},\"submittedAt\":1305769845.6291251,\"builds\":[27371],\"builderName\":\"linux\"}],\"times\":[1305769845.656033,1305770337.898977],\"changes\":[\"File: \\nAt: Wed 18 May 2011 18:50:45\\nChanged By: jam@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jam@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27371,\"Build\"],[\"got_revision\",\"85786\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"85786\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm154-m4\",\"BuildSlave\"]]},\"27370\":{\"slave\":\"vm139-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":27370,\"currentStep\":null,\"results\":0,\"blame\":[\"nick@chromium.org\"],\"reason\":\"'ncarter: red_dead_resolver#542b5' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2261,2940.8089323507684]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305768355.2658751,1305768377.9953511],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",70660,51704.168792433447]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85846\",\"webkit r86738\"],\"times\":[1305768377.9958551,1305768551.276469],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",297601,901886.15206040244]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1305768551.277092,1305769147.5273311],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1305769147.5279269,1305769223.639672],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/check_deps/logs/stdio\"]]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",87599,87580.398716055526]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1305769223.6401701,1305769267.4078901],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/base_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7089,7088.0624163490884]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"crypto_unittests\"],\"times\":[1305769267.4083519,1305769269.566303],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/crypto_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6079.6552992489978]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1305769269.566818,1305769270.2625289],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/googleurl_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1253831,1253832.2405140679]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gpu_unittests\"],\"times\":[1305769270.263031,1305769277.240669],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/gpu_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32836,32831.85976071647]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1305769277.2410519,1305769280.338372],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/media_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597153,596202.75220913452]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"5 disabled\",\"10 flaky\"],\"times\":[1305769280.3388939,1305769444.9869721],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/net_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2895,2897.7308182484676]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"printing_unittests\"],\"times\":[1305769444.9874041,1305769445.964556],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/printing_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48577,48559.871987546758]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"remoting_unittests\"],\"times\":[1305769445.965075,1305769451.40154],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/remoting_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",83748,83543.448534657276]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"times\":[1305769451.401891,1305769517.497673],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/test_shell_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",12568,12567.723729120864]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"safe_browsing_tests\"],\"times\":[1305769517.498096,1305769537.222918],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/safe_browsing_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14097,14080.053006740953]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1305769537.223263,1305769548.2333429],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/ipc_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",70553,70832.659582244203]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"times\":[1305769548.233794,1305769562.6777959],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/sync_unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",506596,505894.97329120175]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"],\"times\":[1305769562.678164,1305769685.6245191],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",11569,11564.977351908405]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1305769685.625037,1305769709.598933],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/app_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12206,12204.777437783639]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gfx_unittests\"],\"times\":[1305769709.5994711,1305769715.7854371],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/gfx_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",688350,648389.28400613228]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"browser_tests\",\"22 flaky\"],\"times\":[1305769715.7860169,1305770840.4844551],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/browser_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",155071,153326.43303118943]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ui_tests\",\"25 disabled\",\"68 flaky\"],\"times\":[1305770840.484782,1305771534.6209641],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"times\":[1305771534.621577,1305771535.0697889],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/nacl_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",944,944.00009217557772]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_integration\"],\"times\":[1305771535.0703299,1305771535.1144321],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/nacl_integration/logs/stdio\"]]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",77821,78458.282309664297]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"interactive_ui_tests\",\"6 flaky\"],\"times\":[1305771535.1149111,1305771651.738894],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/interactive_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",16385,16389.712553748155]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"times\":[1305771651.739274,1305771653.9104199],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27370/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"issue\":7042028,\"timestamp\":\"2011-05-19T01:25:55.159586\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":1,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"nick@chromium.org\",\"when\":1305768354.837692,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"red_dead_resolver#542b5\",\"revision\":85846},\"requests\":[{\"source\":{\"issue\":7042028,\"timestamp\":\"2011-05-19T01:25:55.159586\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":1,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"nick@chromium.org\",\"when\":1305768354.837692,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"red_dead_resolver#542b5\",\"revision\":85846},\"submittedAt\":1305768355.199028,\"builds\":[27370],\"builderName\":\"linux\"}],\"times\":[1305768355.263773,1305771653.911202],\"changes\":[\"File: \\nAt: Wed 18 May 2011 18:25:54\\nChanged By: nick@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"nick@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27370,\"Build\"],[\"got_revision\",\"85846\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",85846,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm139-m4\",\"BuildSlave\"]]},\"27369\":{\"slave\":\"vm136-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/compile/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"failed\",\"compile\"],\"number\":27369,\"currentStep\":null,\"results\":2,\"blame\":[\"jam@chromium.org\"],\"reason\":\"'jabdelmalek: m2p0' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2856,2940.8089323507684]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305768315.194289,1305768329.8566811],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",133568,51704.168792433447]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85786\",\"webkit r86738\"],\"times\":[1305768329.857116,1305768526.5463669],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1131184,901886.15206040244]],\"isStarted\":true,\"results\":[2,[\"compile\"]],\"eta\":null,\"urls\":{},\"text\":[\"compile\",\"failed\"],\"times\":[1305768526.5467861,1305768880.267411],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27369/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":false,\"step_number\":3,\"expectations\":[[\"output\",null,1004.0]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running check_deps\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":false,\"step_number\":4,\"expectations\":[[\"output\",null,87580.398716055526]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running base_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":false,\"step_number\":5,\"expectations\":[[\"output\",null,7088.0624163490884]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running crypto_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":false,\"step_number\":6,\"expectations\":[[\"output\",null,6079.6552992489978]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running googleurl_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":false,\"step_number\":7,\"expectations\":[[\"output\",null,1253832.2405140679]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running gpu_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":false,\"step_number\":8,\"expectations\":[[\"output\",null,32831.85976071647]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running media_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":false,\"step_number\":9,\"expectations\":[[\"output\",null,596202.75220913452]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running net_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":false,\"step_number\":10,\"expectations\":[[\"output\",null,2897.7308182484676]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running printing_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":false,\"step_number\":11,\"expectations\":[[\"output\",null,48559.871987546758]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running remoting_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":false,\"step_number\":12,\"expectations\":[[\"output\",null,83543.448534657276]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running test_shell_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":false,\"step_number\":13,\"expectations\":[[\"output\",null,12567.723729120864]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running safe_browsing_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":false,\"step_number\":14,\"expectations\":[[\"output\",null,14080.053006740953]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running ipc_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":false,\"step_number\":15,\"expectations\":[[\"output\",null,70832.659582244203]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running sync_unit_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":false,\"step_number\":16,\"expectations\":[[\"output\",null,505894.97329120175]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running unit_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":false,\"step_number\":17,\"expectations\":[[\"output\",null,11564.977351908405]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running app_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":false,\"step_number\":18,\"expectations\":[[\"output\",null,12204.777437783639]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running gfx_unittests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":false,\"step_number\":19,\"expectations\":[[\"output\",null,648389.28400613228]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running browser_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":false,\"step_number\":20,\"expectations\":[[\"output\",null,153326.43303118943]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":false,\"step_number\":21,\"expectations\":[[\"output\",null,1530.0]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":false,\"step_number\":22,\"expectations\":[[\"output\",null,944.00009217557772]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_integration\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":false,\"step_number\":23,\"expectations\":[[\"output\",null,78458.282309664297]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running interactive_ui_tests\"],\"times\":[null,null],\"logs\":[]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":false,\"step_number\":24,\"expectations\":[[\"output\",null,16389.712553748155]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running webkit_unit_tests\"],\"times\":[null,null],\"logs\":[]}],\"sourceStamp\":{\"issue\":7037041,\"timestamp\":\"2011-05-19T01:25:15.141042\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":5005,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"jam@chromium.org\",\"when\":1305768315.140892,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85786\"}],\"job_name\":\"m2p0\",\"revision\":\"85786\"},\"requests\":[{\"source\":{\"issue\":7037041,\"timestamp\":\"2011-05-19T01:25:15.141042\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":5005,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"jam@chromium.org\",\"when\":1305768315.140892,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"85786\"}],\"job_name\":\"m2p0\",\"revision\":\"85786\"},\"submittedAt\":1305768315.163096,\"builds\":[27369],\"builderName\":\"linux\"}],\"times\":[1305768315.192179,1305768880.2684779],\"changes\":[\"File: \\nAt: Wed 18 May 2011 18:25:15\\nChanged By: jam@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"jam@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27369,\"Build\"],[\"got_revision\",\"85786\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"85786\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm136-m4\",\"BuildSlave\"]]},\"27368\":{\"slave\":\"vm143-m4\",\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/update_scripts/logs/stdio\"],[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/update/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/compile/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/check_deps/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/base_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/crypto_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/googleurl_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/gpu_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/media_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/net_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/printing_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/remoting_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/test_shell_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/safe_browsing_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/ipc_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/sync_unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/unit_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/app_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/gfx_unittests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/browser_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/nacl_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/nacl_integration/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/interactive_ui_tests/logs/stdio\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/webkit_unit_tests/logs/stdio\"]],\"builderName\":\"linux\",\"text\":[\"build\",\"successful\"],\"number\":27368,\"currentStep\":null,\"results\":0,\"blame\":[\"thakis@chromium.org\"],\"reason\":\"'thakis: mirandac#c706a' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2261,3025.6178647015367]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1305767854.428818,1305767867.853045],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/update_scripts/logs/stdio\"]]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",78497,50532.337584866895]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r85846\",\"webkit r86738\"],\"times\":[1305767867.8536799,1305768044.968523],\"logs\":[[\"patch\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/update/logs/patch\"],[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/update/logs/stdio\"]]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",1175158,635241.30412080488]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1305768044.9689641,1305768752.4366519],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/compile/logs/stdio\"]]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1305768752.4372399,1305768802.0409491],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/check_deps/logs/stdio\"]]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",87597,87562.797432111067]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1305768802.0412979,1305768844.936938],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/base_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7089,7087.1248326981768]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"crypto_unittests\"],\"times\":[1305768844.9373579,1305768847.7207401],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/crypto_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6080,6081.3105984979957]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1305768847.7212629,1305768848.167141],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/googleurl_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1253834,1253834.4810281356]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gpu_unittests\"],\"times\":[1305768848.1676309,1305768855.5971949],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/gpu_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",32836,32829.71952143294]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1305768855.5975921,1305768860.3451581],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/media_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",597047,595417.50441826903]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"5 disabled\",\"10 flaky\"],\"times\":[1305768860.3455269,1305769005.61814],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/net_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2896.4616364969347]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"printing_unittests\"],\"times\":[1305769005.618516,1305769006.5247979],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/printing_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48577,48542.743975093515]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"remoting_unittests\"],\"times\":[1305769006.5253389,1305769013.912977],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/remoting_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",83731,83357.897069314538]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"times\":[1305769013.9133379,1305769075.028965],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/test_shell_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",12568,12567.447458241728]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"safe_browsing_tests\"],\"times\":[1305769075.029475,1305769091.3840849],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/safe_browsing_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14097,14063.106013481907]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1305769091.384403,1305769100.2059929],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/ipc_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",70830,70821.319164488406]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"times\":[1305769100.2065339,1305769108.921068],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/sync_unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",506616,505887.94658240344]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"],\"times\":[1305769108.921613,1305769195.01914],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/unit_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",11568,11561.954703816808]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1305769195.019577,1305769219.1161499],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/app_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12206,12205.554875567277]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gfx_unittests\"],\"times\":[1305769219.116677,1305769225.290504],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/gfx_unittests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"expectations\":[[\"output\",700684,647204.56801226456]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"browser_tests\",\"22 flaky\"],\"times\":[1305769225.291085,1305770303.9112411],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/browser_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"expectations\":[[\"output\",152674,153965.86606237889]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ui_tests\",\"25 disabled\",\"68 flaky\"],\"times\":[1305770303.912086,1305770988.0536709],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.0]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_ui_tests\",\"8 disabled\"],\"times\":[1305770988.054038,1305770988.4180391],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/nacl_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",944,944.00018435115555]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"nacl_integration\"],\"times\":[1305770988.418534,1305770988.461828],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/nacl_integration/logs/stdio\"]]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",79551,78670.564619328594]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"interactive_ui_tests\",\"6 flaky\"],\"times\":[1305770988.4622951,1305771096.0004611],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/interactive_ui_tests/logs/stdio\"]]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",16386,16383.425107496307]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"webkit_unit_tests\",\"1 disabled\"],\"times\":[1305771096.0008571,1305771098.4663169],\"logs\":[[\"stdio\",\"http://build.chromium.org/p/tryserver.chromium/builders/linux/builds/27368/steps/webkit_unit_tests/logs/stdio\"]]}],\"sourceStamp\":{\"issue\":7042024,\"timestamp\":\"2011-05-19T01:17:34.362267\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":7033,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"thakis@chromium.org\",\"when\":1305767854.2172,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"mirandac#c706a\",\"revision\":85846},\"requests\":[{\"source\":{\"issue\":7042024,\"timestamp\":\"2011-05-19T01:17:34.362267\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":7033,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"thakis@chromium.org\",\"when\":1305767854.2172,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"mirandac#c706a\",\"revision\":85846},\"submittedAt\":1305767854.3853331,\"builds\":[27368],\"builderName\":\"linux\"}],\"times\":[1305767854.426522,1305771098.4668059],\"changes\":[\"File: \\nAt: Wed 18 May 2011 18:17:34\\nChanged By: thakis@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"thakis@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",27368,\"Build\"],[\"got_revision\",\"85846\",\"Source\"],[\"got_webkit_revision\",\"86738\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",85846,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm143-m4\",\"BuildSlave\"]]}}"]]
\ No newline at end of file
diff --git a/tests/data/testCMDpending.json b/tests/data/testCMDpending.json
deleted file mode 100644
index 6b9d249..0000000
--- a/tests/data/testCMDpending.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders?filter=1","{\"linux_chromeos_clang\":{\"category\":null,\"basedir\":\"linux_chromeos_clang\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"cachedBuilds\":[3,4,5,6,7,8,9,10,11,12],\"pendingBuilds\":0},\"win\":{\"category\":null,\"basedir\":\"win\",\"currentBuilds\":[34773,34775,34781,34782,34783,34784,34785,34786,34790,34791,34792,34795,34796,34797,34798,34799],\"state\":\"building\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"cachedBuilds\":[34787,34790,34791,34792,34795,34796,34797,34798,34799,34800],\"pendingBuilds\":0},\"linux_touch\":{\"category\":null,\"basedir\":\"linux_touch\",\"currentBuilds\":[],\"state\":\"offline\",\"slaves\":[\"vm112-m4\"],\"cachedBuilds\":[64,65,66,67,68,69,70,71,72,73],\"pendingBuilds\":2},\"linux_sync\":{\"category\":null,\"basedir\":\"linux_sync\",\"currentBuilds\":[3106],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[3097,3098,3099,3100,3101,3102,3103,3104,3105,3106],\"pendingBuilds\":0},\"linux_tsan\":{\"category\":null,\"basedir\":\"linux_tsan\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\"],\"cachedBuilds\":[269,270,271,272,273,274,275,276,277,278],\"pendingBuilds\":0},\"linux\":{\"category\":null,\"basedir\":\"linux\",\"currentBuilds\":[29941,29943,29944,29945,29946,29947,29948,29949,29950,29951,29952],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[29943,29944,29945,29946,29947,29948,29949,29950,29951,29952],\"pendingBuilds\":0},\"linux_layout_rel\":{\"category\":null,\"basedir\":\"linux_layout_rel\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[234,235,236,237,238,239,240,241,242,243],\"pendingBuilds\":0},\"linux_valgrind\":{\"category\":null,\"basedir\":\"linux_valgrind\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\"],\"cachedBuilds\":[1038,1039,1040,1041,1042,1043,1044,1045,1046,1047],\"pendingBuilds\":0},\"linux_coverage\":{\"category\":null,\"basedir\":\"linux_coverage\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"cachedBuilds\":[0,1],\"pendingBuilds\":0},\"mac_layout_rel\":{\"category\":null,\"basedir\":\"mac_layout_rel\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"cachedBuilds\":[191,192,193,194,195,196,197,198,199,200],\"pendingBuilds\":0},\"win_shared\":{\"category\":null,\"basedir\":\"win_shared\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"cachedBuilds\":[1,2,3,4,5,6,7,8,9,10],\"pendingBuilds\":0},\"mac_valgrind\":{\"category\":null,\"basedir\":\"mac_valgrind\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"cachedBuilds\":[479,480,481,482,483,484,485,486,487,488],\"pendingBuilds\":0},\"linux_layout\":{\"category\":null,\"basedir\":\"linux_layout\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[740,741,742,743,744,745,746,747,748,749],\"pendingBuilds\":0},\"linux_chromeos_valgrind\":{\"category\":null,\"basedir\":\"linux_chromeos_valgrind\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\"],\"cachedBuilds\":[120,121,122,123,124,125,126,127,128,129],\"pendingBuilds\":0},\"linux_chromeos\":{\"category\":null,\"basedir\":\"linux_chromeos\",\"currentBuilds\":[9035,9036,9037],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[9028,9029,9030,9031,9032,9033,9034,9035,9036,9037],\"pendingBuilds\":0},\"mac_sync\":{\"category\":null,\"basedir\":\"mac_sync\",\"currentBuilds\":[2805,2806,2807,2808],\"state\":\"building\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"cachedBuilds\":[2799,2800,2801,2802,2803,2804,2805,2806,2807,2808],\"pendingBuilds\":0},\"win_layout\":{\"category\":null,\"basedir\":\"win_layout\",\"currentBuilds\":[895],\"state\":\"building\",\"slaves\":[\"vm71-m4\",\"vm72-m4\",\"vm73-m4\",\"vm74-m4\",\"vm75-m4\",\"vm76-m4\"],\"cachedBuilds\":[886,887,888,889,890,891,892,893,894,895],\"pendingBuilds\":0},\"linux_clang\":{\"category\":null,\"basedir\":\"linux_clang\",\"currentBuilds\":[1954],\"state\":\"building\",\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"cachedBuilds\":[1945,1946,1947,1948,1949,1950,1951,1952,1953,1954],\"pendingBuilds\":0},\"linux_view\":{\"category\":null,\"basedir\":\"linux_view\",\"currentBuilds\":[6261,6262,6263],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[6254,6255,6256,6257,6258,6259,6260,6261,6262,6263],\"pendingBuilds\":0},\"mac\":{\"category\":null,\"basedir\":\"mac\",\"currentBuilds\":[30118,30120,30121,30122,30123,30124,30125,30126,30127,30129,30130,30131,30132,30133,30134,30135,30136,30137,30138],\"state\":\"building\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"cachedBuilds\":[30129,30130,30131,30132,30133,30134,30135,30136,30137,30138],\"pendingBuilds\":0},\"win_sync\":{\"category\":null,\"basedir\":\"win_sync\",\"currentBuilds\":[2845],\"state\":\"building\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"cachedBuilds\":[2839,2840,2841,2842,2843,2844,2845,2846,2847,2848],\"pendingBuilds\":0},\"mac_layout\":{\"category\":null,\"basedir\":\"mac_layout\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"cachedBuilds\":[635,636,637,638,639,640,641,642,643,644],\"pendingBuilds\":0},\"mac_clang\":{\"category\":null,\"basedir\":\"mac_clang\",\"currentBuilds\":[697,699],\"state\":\"building\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"cachedBuilds\":[690,691,692,693,694,695,696,697,698,699],\"pendingBuilds\":0},\"linux_rel\":{\"category\":null,\"basedir\":\"linux_rel\",\"currentBuilds\":[269],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[260,261,262,263,264,265,266,267,268,269],\"pendingBuilds\":0},\"win_rel\":{\"category\":null,\"basedir\":\"win_rel\",\"currentBuilds\":[304],\"state\":\"building\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"cachedBuilds\":[295,296,297,298,299,300,301,302,303,304],\"pendingBuilds\":0},\"win_layout_7\":{\"category\":null,\"basedir\":\"win_layout_7\",\"currentBuilds\":[],\"state\":\"offline\",\"slaves\":[\"win7_slave\"],\"cachedBuilds\":[],\"pendingBuilds\":0},\"win_layout_rel\":{\"category\":null,\"basedir\":\"win_layout_rel\",\"currentBuilds\":[],\"state\":\"idle\",\"slaves\":[\"vm71-m4\",\"vm72-m4\",\"vm73-m4\",\"vm74-m4\",\"vm75-m4\",\"vm76-m4\"],\"cachedBuilds\":[255,256,257,258,259,260,261,262,263,264],\"pendingBuilds\":0},\"mac_rel\":{\"category\":null,\"basedir\":\"mac_rel\",\"currentBuilds\":[200,201,202],\"state\":\"building\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"cachedBuilds\":[193,194,195,196,197,198,199,200,201,202],\"pendingBuilds\":0}}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux_touch/pendingBuilds?filter=1","[{\"source\":{\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"saintlou@google.com\",\"when\":1306890650.90169,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"HEAD\"}],\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"timestamp\":\"2011-06-01T01:10:50.901746\",\"patchset\":2001,\"issue\":7027014,\"job_name\":\"remove#1b4371\",\"revision\":\"HEAD\"},\"submittedAt\":1306890650.935488,\"builds\":[],\"builderName\":\"linux_touch\"},{\"source\":{\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"saintlou@google.com\",\"when\":1306891800.8413529,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"HEAD\"}],\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"timestamp\":\"2011-06-01T01:30:00.841449\",\"patchset\":2001,\"issue\":7027014,\"job_name\":\"remove#1b4371\",\"revision\":\"HEAD\"},\"submittedAt\":1306891800.8746891,\"builds\":[],\"builderName\":\"linux_touch\"}]"]]
\ No newline at end of file
diff --git a/tests/data/testCMDrun.json b/tests/data/testCMDrun.json
deleted file mode 100644
index aba7910..0000000
--- a/tests/data/testCMDrun.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders?filter=1","{\"linux\":{\"basedir\":\"linux\",\"cachedBuilds\":[27709,27710,27711,27712,27713,27714,27715,27716,27717,27718,27719,27720,27721,27722,27723,27724,27725,27726,27727,27728,27729,27730,27731,27732,27733,27734,27735,27736,27737,27738,27739,27740,27741,27742,27743,27744,27745,27746,27747,27748,27749,27750,27751,27752,27753,27754,27755,27756,27757,27758,27759,27760,27761,27762,27763,27764,27765,27766,27767,27768,27769,27770,27771,27772,27773,27774,27775,27776,27777,27778,27779,27780,27781,27782,27783,27784,27785,27786,27787,27788,27789,27790,27791,27792,27793,27794,27795,27796,27797,27798,27799,27800,27801,27802,27803,27804,27805,27806,27807,27808,27809,27810,27811,27812,27813,27814,27815,27816,27817,27818,27819,27820,27821,27822,27823,27824,27825,27826,27827,27828,27829,27830,27831,27832,27833,27834,27835,27836,27837,27838,27839,27840,27841,27842,27843,27844,27845,27846,27847,27848,27849,27850,27851,27852,27853,27854,27855,27856,27857,27858,27859,27860,27861,27862,27863,27864,27865,27866,27867,27868,27869,27870,27871,27872,27873,27874,27875,27876,27877,27878,27879,27880,27881,27882,27883,27884,27885,27886,27887,27888,27889,27890,27891,27892,27893,27894,27895,27896,27897,27898,27899,27900,27901,27902,27903,27904,27905,27906,27907,27908,27909,27910,27911,27912,27913,27914,27915,27916,27917,27918,27919,27920,27921,27922,27923,27924,27925,27926,27927,27928,27929,27930,27931,27932,27933,27934,27935,27936,27937,27938,27939,27940,27941,27942,27943,27944,27945,27946,27947,27948,27949,27950,27951,27952,27953,27954,27955,27956,27957,27958,27959,27960,27961,27962,27963,27964,27965,27966,27967,27968,27969,27970,27971,27972,27973,27974,27975,27976,27977,27978,27979,27980,27981,27982,27983,27984,27985,27986,27987,27988,27989,27990,27991,27992,27993,27994,27995,27996,27997,27998,27999,28000,28001,28002,28003,28004,28005,28006,28007,28008,28009,28010,28011,28012,28013,28014,28015,28016,28017,28018,28019,28020,28021,28022,28023,28024,28025,28026,28027,28028,28029,28030,28031,28032,28033,28034,28035,28036,28037,28038,28039,28040,28041,28042,28043,28044,28045,28046,28047,28048,28049,28050,28051,28052,28053,28054,28055,28056,28057,28058,28059,28060,28061,28062,28063,28064,28065,28066,28067,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097,28098,28099,28100,28101,28102,28103,28104,28105,28106,28107,28108,28109,28110,28111,28112,28113,28114,28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28161,28162,28163,28164,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,28199,28200,28201,28202,28203,28204,28205,28206,28207,28208,28209,28210,28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28233,28234,28235,28236,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,28247,28248,28249,28250,28251,28252,28253,28254,28255,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28267,28268,28269,28270,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28286,28287,28288,28289,28290,28291,28292,28293,28294,28295,28296,28297,28298,28299,28300,28301,28302,28303,28304,28305,28306,28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,28391,28392,28393,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,28415,28416,28417,28418,28419,28420,28421,28422,28423,28424,28425,28426,28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28448,28449,28450,28451,28452,28453,28454,28455,28456,28457,28458,28459,28460,28461,28462,28463,28464,28465,28466,28467,28468,28469,28470,28471,28472,28473,28474,28475,28476,28477,28478,28479,28480,28481,28482,28483,28484,28485,28486,28487,28488,28489,28490,28491,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28545,28546,28547,28548,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28572,28573,28574,28575,28576,28577,28578,28579,28580,28581,28582,28583,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28617,28618,28619,28620,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28638,28639,28640,28641,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28654,28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28706,28707,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28725,28726,28727,28728,28729,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28748,28749,28750,28751,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28766,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,28818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28917,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964],\"category\":null,\"currentBuilds\":[28294,28300,28944,28946,28947,28948,28952,28953,28954,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964],\"pendingBuilds\":0,\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"state\":\"building\"},\"linux_chromeos\":{\"basedir\":\"linux_chromeos\",\"cachedBuilds\":[8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745],\"category\":null,\"currentBuilds\":[8742,8743,8744,8745],\"pendingBuilds\":0,\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"state\":\"building\"},\"linux_chromeos_valgrind\":{\"basedir\":\"linux_chromeos_valgrind\",\"cachedBuilds\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\"],\"state\":\"idle\"},\"linux_clang\":{\"basedir\":\"linux_clang\",\"cachedBuilds\":[0,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730],\"category\":null,\"currentBuilds\":[1728,1729,1730],\"pendingBuilds\":0,\"slaves\":[\"vm165-m4\",\"vm104-m4\",\"vm113-m4\"],\"state\":\"building\"},\"linux_coverage\":{\"basedir\":\"linux_coverage\",\"cachedBuilds\":[0,1],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm165-m4\",\"vm104-m4\",\"vm113-m4\"],\"state\":\"idle\"},\"linux_layout\":{\"basedir\":\"linux_layout\",\"cachedBuilds\":[0,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"state\":\"idle\"},\"linux_layout_rel\":{\"basedir\":\"linux_layout_rel\",\"cachedBuilds\":[0,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"state\":\"building\"},\"linux_rel\":{\"basedir\":\"linux_rel\",\"cachedBuilds\":[0,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"state\":\"idle\"},\"linux_sync\":{\"basedir\":\"linux_sync\",\"cachedBuilds\":[1268,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"state\":\"building\"},\"linux_touch\":{\"basedir\":\"linux_touch\",\"cachedBuilds\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm112-m4\"],\"state\":\"idle\"},\"linux_tsan\":{\"basedir\":\"linux_tsan\",\"cachedBuilds\":[216,258,259,260,261,262,263,264,265,266,267,268],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\"],\"state\":\"idle\"},\"linux_valgrind\":{\"basedir\":\"linux_valgrind\",\"cachedBuilds\":[0,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\"],\"state\":\"idle\"},\"linux_view\":{\"basedir\":\"linux_view\",\"cachedBuilds\":[5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097],\"category\":null,\"currentBuilds\":[6097],\"pendingBuilds\":0,\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"state\":\"building\"},\"mac\":{\"basedir\":\"mac\",\"cachedBuilds\":[28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097,28098,28099,28100,28101,28102,28103,28104,28105,28106,28107,28108,28109,28110,28111,28112,28113,28114,28115,28116,28117,28118,28119,28120,28121,28122,28123,28124,28125,28126,28127,28128,28129,28130,28131,28132,28133,28134,28135,28136,28137,28138,28139,28140,28141,28142,28143,28144,28145,28146,28147,28148,28149,28150,28151,28152,28153,28154,28155,28156,28157,28158,28159,28160,28161,28162,28163,28164,28165,28166,28167,28168,28169,28170,28171,28172,28173,28174,28175,28176,28177,28178,28179,28180,28181,28182,28183,28184,28185,28186,28187,28188,28189,28190,28191,28192,28193,28194,28195,28196,28197,28198,28199,28200,28201,28202,28203,28204,28205,28206,28207,28208,28209,28210,28211,28212,28213,28214,28215,28216,28217,28218,28219,28220,28221,28222,28223,28224,28225,28226,28227,28228,28229,28230,28231,28232,28233,28234,28235,28236,28237,28238,28239,28240,28241,28242,28243,28244,28245,28246,28247,28248,28249,28250,28251,28252,28253,28254,28255,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28267,28268,28269,28270,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28286,28287,28288,28289,28290,28291,28292,28293,28294,28295,28296,28297,28298,28299,28300,28301,28302,28303,28304,28305,28306,28307,28308,28309,28310,28311,28312,28313,28314,28315,28316,28317,28318,28319,28320,28321,28322,28323,28324,28325,28326,28327,28328,28329,28330,28331,28332,28333,28334,28335,28336,28337,28338,28339,28340,28341,28342,28343,28344,28345,28346,28347,28348,28349,28350,28351,28352,28353,28354,28355,28356,28357,28358,28359,28360,28361,28362,28363,28364,28365,28366,28367,28368,28369,28370,28371,28372,28373,28374,28375,28376,28377,28378,28379,28380,28381,28382,28383,28384,28385,28386,28387,28388,28389,28390,28391,28392,28393,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28404,28405,28406,28407,28408,28409,28410,28411,28412,28413,28414,28415,28416,28417,28418,28419,28420,28421,28422,28423,28424,28425,28426,28427,28428,28429,28430,28431,28432,28433,28434,28435,28436,28437,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28448,28449,28450,28451,28452,28453,28454,28455,28456,28457,28458,28459,28460,28461,28462,28463,28464,28465,28466,28467,28468,28469,28470,28471,28472,28473,28474,28475,28476,28477,28478,28479,28480,28481,28482,28483,28484,28485,28486,28487,28488,28489,28490,28491,28492,28493,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28504,28505,28506,28507,28508,28509,28510,28511,28512,28513,28514,28515,28516,28517,28518,28519,28520,28521,28522,28523,28524,28525,28526,28527,28528,28529,28530,28531,28532,28533,28534,28535,28536,28537,28538,28539,28540,28541,28542,28543,28544,28545,28546,28547,28548,28549,28550,28551,28552,28553,28554,28555,28556,28557,28558,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28572,28573,28574,28575,28576,28577,28578,28579,28580,28581,28582,28583,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28595,28596,28597,28598,28599,28600,28601,28602,28603,28604,28605,28606,28607,28608,28609,28610,28611,28612,28613,28614,28615,28616,28617,28618,28619,28620,28621,28622,28623,28624,28625,28626,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28638,28639,28640,28641,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28654,28655,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28689,28690,28691,28692,28693,28694,28695,28696,28697,28698,28699,28700,28701,28702,28703,28704,28705,28706,28707,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28725,28726,28727,28728,28729,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28748,28749,28750,28751,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28766,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28779,28780,28781,28782,28783,28784,28785,28786,28787,28788,28789,28790,28791,28792,28793,28794,28795,28796,28797,28798,28799,28800,28801,28802,28803,28804,28805,28806,28807,28808,28809,28810,28811,28812,28813,28814,28815,28816,28817,28818,28819,28820,28821,28822,28823,28824,28825,28826,28827,28828,28829,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28843,28844,28845,28846,28847,28848,28849,28850,28851,28852,28853,28854,28855,28856,28857,28858,28859,28860,28861,28862,28863,28864,28865,28866,28867,28868,28869,28870,28871,28872,28873,28874,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28888,28889,28890,28891,28892,28893,28894,28895,28896,28897,28898,28899,28900,28901,28902,28903,28904,28905,28906,28907,28908,28909,28910,28911,28912,28913,28914,28915,28916,28917,28918,28919,28920,28921,28922,28923,28924,28925,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28937,28938,28939,28940,28941,28942,28943,28944,28945,28946,28947,28948,28949,28950,28951,28952,28953,28954,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28966,28967,28968,28969,28970,28971,28972,28973,28974,28975,28976,28977,28978,28979,28980,28981,28982,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28997,28998,28999,29000,29001,29002,29003,29004,29005,29006,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29020,29021,29022,29023,29024,29025,29026,29027,29028,29029,29030,29031,29032,29033,29034,29035,29036,29037,29038,29039,29040,29041,29042,29043,29044,29045,29046,29047,29048,29049,29050,29051,29052,29053,29054,29055,29056,29057,29058,29059,29060,29061,29062,29063,29064,29065,29066,29067,29068,29069,29070,29071,29072,29073,29074,29075,29076,29077,29078,29079,29080,29081,29082,29083,29084,29085,29086,29087,29088,29089,29090,29091,29092,29093,29094,29095,29096,29097,29098,29099,29100,29101,29102,29103,29104,29105,29106,29107,29108,29109,29110,29111,29112,29113,29114,29115,29116,29117,29118,29119,29120,29121,29122,29123,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29134,29135,29136,29137,29138,29139,29140,29141,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29152,29153,29154,29155,29156,29157,29158,29159,29160,29161,29162,29163,29164,29165,29166,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29177,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29190,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29213,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229],\"category\":null,\"currentBuilds\":[29208,29209,29210,29211,29212,29213,29217,29218,29219,29220,29221,29222,29223,29224,29225,29226,29227,29228,29229],\"pendingBuilds\":0,\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\"],\"state\":\"building\"},\"mac_clang\":{\"basedir\":\"mac_clang\",\"cachedBuilds\":[615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\"],\"state\":\"building\"},\"mac_layout\":{\"basedir\":\"mac_layout\",\"cachedBuilds\":[573,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633],\"category\":null,\"currentBuilds\":[633],\"pendingBuilds\":0,\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\"],\"state\":\"building\"},\"mac_layout_rel\":{\"basedir\":\"mac_layout_rel\",\"cachedBuilds\":[183,184,185,186,187,188,189,190,191,192,193,194],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\"],\"state\":\"idle\"},\"mac_rel\":{\"basedir\":\"mac_rel\",\"cachedBuilds\":[185,186,187,188,189,190,191],\"category\":null,\"currentBuilds\":[191],\"pendingBuilds\":0,\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\"],\"state\":\"building\"},\"mac_sync\":{\"basedir\":\"mac_sync\",\"cachedBuilds\":[2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\"],\"state\":\"building\"},\"mac_valgrind\":{\"basedir\":\"mac_valgrind\",\"cachedBuilds\":[437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\"],\"state\":\"idle\"},\"win\":{\"basedir\":\"win\",\"cachedBuilds\":[32609,32610,32611,32612,32613,32614,32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,32627,32628,32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,32639,32640,32641,32642,32643,32644,32645,32646,32647,32648,32649,32650,32651,32652,32653,32654,32655,32656,32657,32658,32659,32660,32661,32662,32663,32664,32665,32666,32667,32668,32669,32670,32671,32672,32673,32674,32675,32676,32677,32678,32679,32680,32681,32682,32683,32684,32685,32686,32687,32688,32689,32690,32691,32692,32693,32694,32695,32696,32697,32698,32699,32700,32701,32702,32703,32704,32705,32706,32707,32708,32709,32710,32711,32712,32713,32714,32715,32716,32717,32718,32719,32720,32721,32722,32723,32724,32725,32726,32727,32728,32729,32730,32731,32732,32733,32734,32735,32736,32737,32738,32739,32740,32741,32742,32743,32744,32745,32746,32747,32748,32749,32750,32751,32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767,32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797,32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832,32833,32834,32835,32836,32837,32838,32839,32840,32841,32842,32843,32844,32845,32846,32847,32848,32849,32850,32851,32852,32853,32854,32855,32856,32857,32858,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32894,32895,32896,32897,32898,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922,32923,32924,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941,32942,32943,32944,32945,32946,32947,32948,32949,32950,32951,32952,32953,32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964,32965,32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989,32990,32991,32992,32993,32994,32995,32996,32997,32998,32999,33000,33001,33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013,33014,33015,33016,33017,33018,33019,33020,33021,33022,33023,33024,33025,33026,33027,33028,33029,33030,33031,33032,33033,33034,33035,33036,33037,33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073,33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089,33090,33091,33092,33093,33094,33095,33096,33097,33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109,33110,33111,33112,33113,33114,33115,33116,33117,33118,33119,33120,33121,33122,33123,33124,33125,33126,33127,33128,33129,33130,33131,33132,33133,33134,33135,33136,33137,33138,33139,33140,33141,33142,33143,33144,33145,33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157,33158,33159,33160,33161,33162,33163,33164,33165,33166,33167,33168,33169,33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,33193,33194,33195,33196,33197,33198,33199,33200,33201,33202,33203,33204,33205,33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217,33218,33219,33220,33221,33222,33223,33224,33225,33226,33227,33228,33229,33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255,33256,33257,33258,33259,33260,33261,33262,33263,33264,33265,33266,33267,33268,33269,33270,33271,33272,33273,33274,33275,33276,33277,33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33289,33290,33291,33292,33293,33294,33295,33296,33297,33298,33299,33300,33301,33302,33303,33304,33305,33306,33307,33308,33309,33310,33311,33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325,33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337,33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349,33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365,33366,33367,33368,33369,33370,33371,33372,33373,33374,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385,33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409,33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420,33421,33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433,33434,33435,33436,33437,33438,33439,33440,33441,33442,33443,33444,33445,33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33461,33462,33463,33464,33465,33466,33467,33468,33469,33470,33471,33472,33473,33474,33475,33476,33477,33478,33479,33480,33481,33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505,33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529,33530,33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541,33542,33543,33544,33545,33546,33547,33548,33549,33550,33551,33552,33553,33554,33555,33556,33557,33558,33559,33560,33561,33562,33563,33564,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33575,33576,33577,33578,33579,33580,33581,33582,33583,33584,33585,33586,33587,33588,33589,33590,33591,33592,33593,33594,33595,33596,33597,33598,33599,33600,33601,33602,33603,33604,33605,33606,33607,33608,33609,33610,33611,33612,33613,33614,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625,33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33637,33638,33639,33640,33641,33642,33643,33644,33645,33646,33647,33648,33649,33650,33651,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661,33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685,33686,33687,33688,33689,33690,33691,33692,33693,33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709,33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720,33721,33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33733,33734,33735,33736,33737,33738,33739,33740,33741,33742,33743,33744,33745,33746,33747,33748,33749,33750,33751,33752,33753,33754,33755,33756,33757,33758,33759,33760,33761,33762,33763,33764,33765,33766,33767,33768,33769,33770,33771,33772,33773,33774,33775,33776,33777,33778,33779,33780,33781,33782,33783,33784,33785,33786,33787,33788,33789,33790,33791,33792,33793,33794,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33805,33806,33807,33808,33809,33810,33811,33812,33813,33814,33815,33816,33817,33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828,33829,33830,33831,33832,33833,33834,33835,33836],\"category\":null,\"currentBuilds\":[33801,33805,33807,33808,33809,33811,33812,33814,33815,33816,33818,33819,33823,33825,33826,33827,33828,33829,33830,33831,33832,33833,33834,33835,33836],\"pendingBuilds\":0,\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"state\":\"building\"},\"win_layout\":{\"basedir\":\"win_layout\",\"cachedBuilds\":[8,85,86,87,804,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm71-m4\",\"vm72-m4\",\"vm73-m4\",\"vm74-m4\",\"vm75-m4\",\"vm76-m4\"],\"state\":\"idle\"},\"win_layout_7\":{\"basedir\":\"win_layout_7\",\"cachedBuilds\":[],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":1,\"slaves\":[\"win7_slave\"],\"state\":\"offline\"},\"win_layout_rel\":{\"basedir\":\"win_layout_rel\",\"cachedBuilds\":[236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm71-m4\",\"vm72-m4\",\"vm73-m4\",\"vm74-m4\",\"vm75-m4\",\"vm76-m4\"],\"state\":\"idle\"},\"win_rel\":{\"basedir\":\"win_rel\",\"cachedBuilds\":[92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293],\"category\":null,\"currentBuilds\":[293],\"pendingBuilds\":0,\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"state\":\"building\"},\"win_shared\":{\"basedir\":\"win_shared\",\"cachedBuilds\":[0,1,2,3,4,5,6],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"state\":\"idle\"},\"win_sync\":{\"basedir\":\"win_sync\",\"cachedBuilds\":[2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775],\"category\":null,\"currentBuilds\":[],\"pendingBuilds\":0,\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"state\":\"idle\"}}"]]
\ No newline at end of file
diff --git a/tests/data/testCommands.json b/tests/data/testCommands.json
deleted file mode 100644
index 0637a08..0000000
--- a/tests/data/testCommands.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/tests/data/testCurrentBuilds.json b/tests/data/testCurrentBuilds.json
deleted file mode 100644
index 26927d2..0000000
--- a/tests/data/testCurrentBuilds.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders?filter=1","{\"linux_clang\":{\"category\":null,\"basedir\":\"linux_clang\",\"cachedBuilds\":[1851,1852,1853,1854,1855,1856,1857,1858,1859,1860],\"state\":\"idle\",\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_chromeos_clang\":{\"category\":null,\"basedir\":\"linux_chromeos_clang\",\"cachedBuilds\":[0,1,2,3,4,5],\"state\":\"idle\",\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"win_layout\":{\"category\":null,\"basedir\":\"win_layout\",\"cachedBuilds\":[881,882,883,884,885,886],\"state\":\"idle\",\"slaves\":[\"vm71-m4\",\"vm72-m4\",\"vm73-m4\",\"vm74-m4\",\"vm75-m4\",\"vm76-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_touch\":{\"category\":null,\"basedir\":\"linux_touch\",\"cachedBuilds\":[58,59,60,61,62,63,64,65,66,67],\"state\":\"offline\",\"slaves\":[\"vm112-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_sync\":{\"category\":null,\"basedir\":\"linux_sync\",\"cachedBuilds\":[3070,3071,3072,3073,3074,3075,3076,3077,3078,3079],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_tsan\":{\"category\":null,\"basedir\":\"linux_tsan\",\"cachedBuilds\":[264,265,266,267,268,269,270],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux\":{\"category\":null,\"basedir\":\"linux\",\"cachedBuilds\":[29541,29542,29543,29544,29545,29546,29547,29548,29549,29550],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[29550],\"pendingBuilds\":0},\"linux_layout_rel\":{\"category\":null,\"basedir\":\"linux_layout_rel\",\"cachedBuilds\":[236,237,238,239,240,241],\"state\":\"idle\",\"slaves\":[\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_valgrind\":{\"category\":null,\"basedir\":\"linux_valgrind\",\"cachedBuilds\":[1026,1027,1028,1029,1030,1031,1032,1033,1034,1035],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_coverage\":{\"category\":null,\"basedir\":\"linux_coverage\",\"cachedBuilds\":[0,1],\"state\":\"idle\",\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"mac_layout_rel\":{\"category\":null,\"basedir\":\"mac_layout_rel\",\"cachedBuilds\":[194,195,196,197,198],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"win_shared\":{\"category\":null,\"basedir\":\"win_shared\",\"cachedBuilds\":[3,4,5,6,7,8],\"state\":\"idle\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"mac_valgrind\":{\"category\":null,\"basedir\":\"mac_valgrind\",\"cachedBuilds\":[473,474,475,476,477,478,479,480,481,482],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"win\":{\"category\":null,\"basedir\":\"win\",\"cachedBuilds\":[34387,34388,34389,34390,34391,34392,34393,34394,34395,34396],\"state\":\"building\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"currentBuilds\":[34366,34396],\"pendingBuilds\":0},\"linux_chromeos_valgrind\":{\"category\":null,\"basedir\":\"linux_chromeos_valgrind\",\"cachedBuilds\":[122,123,124,125,126,127],\"state\":\"idle\",\"slaves\":[\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_chromeos\":{\"category\":null,\"basedir\":\"linux_chromeos\",\"cachedBuilds\":[8913,8914,8915,8916,8917,8918,8919,8920,8921,8922],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"mac_sync\":{\"category\":null,\"basedir\":\"mac_sync\",\"cachedBuilds\":[2769,2770,2771,2772,2773,2774,2775,2776,2777,2778],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_layout\":{\"category\":null,\"basedir\":\"linux_layout\",\"cachedBuilds\":[735,736,737,738,739,740],\"state\":\"idle\",\"slaves\":[\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_view\":{\"category\":null,\"basedir\":\"linux_view\",\"cachedBuilds\":[6179,6180,6181,6182,6183,6184,6185,6186,6187,6188],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"mac\":{\"category\":null,\"basedir\":\"mac\",\"cachedBuilds\":[29753,29754,29755,29756,29757,29758,29759,29760,29761,29762],\"state\":\"building\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"currentBuilds\":[29762],\"pendingBuilds\":0},\"win_sync\":{\"category\":null,\"basedir\":\"win_sync\",\"cachedBuilds\":[2810,2811,2812,2813,2814,2815,2816,2817,2818,2819],\"state\":\"idle\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"mac_layout\":{\"category\":null,\"basedir\":\"mac_layout\",\"cachedBuilds\":[633,634,635,636,637],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"mac_clang\":{\"category\":null,\"basedir\":\"mac_clang\",\"cachedBuilds\":[675,676,677,678,679,680,681,682,683,684],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"linux_rel\":{\"category\":null,\"basedir\":\"linux_rel\",\"cachedBuilds\":[257,258,259,260,261],\"state\":\"idle\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"win_rel\":{\"category\":null,\"basedir\":\"win_rel\",\"cachedBuilds\":[294,295,296,297,298],\"state\":\"idle\",\"slaves\":[\"vm1-m4\",\"vm2-m4\",\"vm3-m4\",\"vm4-m4\",\"vm5-m4\",\"vm6-m4\",\"vm7-m4\",\"vm8-m4\",\"vm9-m4\",\"vm10-m4\",\"vm11-m4\",\"vm12-m4\",\"vm13-m4\",\"vm14-m4\",\"vm15-m4\",\"vm16-m4\",\"vm17-m4\",\"vm18-m4\",\"vm19-m4\",\"vm20-m4\",\"vm21-m4\",\"vm22-m4\",\"vm23-m4\",\"vm24-m4\",\"vm25-m4\",\"vm26-m4\",\"vm27-m4\",\"vm28-m4\",\"vm29-m4\",\"vm30-m4\",\"vm31-m4\",\"vm32-m4\",\"vm33-m4\",\"vm34-m4\",\"vm35-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"win_layout_7\":{\"category\":null,\"basedir\":\"win_layout_7\",\"cachedBuilds\":[],\"state\":\"offline\",\"slaves\":[\"win7_slave\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"win_layout_rel\":{\"category\":null,\"basedir\":\"win_layout_rel\",\"cachedBuilds\":[257,258,259,260,261,262],\"state\":\"idle\",\"slaves\":[\"vm71-m4\",\"vm72-m4\",\"vm73-m4\",\"vm74-m4\",\"vm75-m4\",\"vm76-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0},\"mac_rel\":{\"category\":null,\"basedir\":\"mac_rel\",\"cachedBuilds\":[193,194,195,196,197],\"state\":\"idle\",\"slaves\":[\"mini1-m4\",\"mini2-m4\",\"mini3-m4\",\"mini4-m4\",\"mini5-m4\",\"mini6-m4\",\"mini7-m4\",\"mini8-m4\",\"mini9-m4\",\"mini10-m4\",\"mini11-m4\",\"mini12-m4\",\"mini13-m4\",\"mini14-m4\",\"mini15-m4\",\"mini16-m4\",\"mini17-m4\",\"mini18-m4\",\"mini19-m4\",\"mini20-m4\",\"mini21-m4\",\"mini22-m4\",\"mini23-m4\",\"mini24-m4\",\"mini25-m4\",\"mini29-m4\",\"mini32-m4\",\"mini33-m4\",\"mini34-m4\",\"mini35-m4\",\"mini36-m4\",\"mini37-m4\",\"mini38-m4\",\"mini39-m4\",\"mini40-m4\",\"mini41-m4\"],\"currentBuilds\":[],\"pendingBuilds\":0}}"],["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/?select=29550&filter=1","{\"29550\":{\"slave\":\"vm135-m4\",\"builderName\":\"linux\",\"text\":[],\"results\":null,\"currentStep\":{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":false,\"step_number\":19,\"expectations\":[[\"output\",46788,671331.0552439373]],\"isStarted\":true,\"results\":[[null,[]],[]],\"eta\":1058.9627407185319,\"urls\":{},\"text\":[\"running browser_tests\"],\"times\":[1306807340.0334611,null]},\"number\":29550,\"blame\":[\"sreeram@google.com\"],\"reason\":\"'sreeram: wicked#b354b' try job\",\"eta\":2157.8318638801575,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2509,2404.9397843260153]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1306805781.0368719,1306805794.2774849]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",84035,74441.319290226907]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r87261\",\"webkit r87699\"],\"times\":[1306805794.278173,1306806048.5148599]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",258376,229447.43939431425]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1306806048.515528,1306806863.923291]},{\"statistics\":{},\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.000244140625]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"check_deps\"],\"times\":[1306806863.9239099,1306806927.8238521]},{\"statistics\":{},\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88945,88889.024980627699]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"base_unittests\",\"4 flaky\"],\"times\":[1306806927.8244419,1306806971.4151649]},{\"statistics\":{},\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7086.367595694498]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"crypto_unittests\"],\"times\":[1306806971.415808,1306806972.5144241]},{\"statistics\":{},\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6078,6078.3513379378765]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"googleurl_unittests\"],\"times\":[1306806972.514926,1306806972.964752]},{\"statistics\":{},\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1253961,1253960.1445791791]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gpu_unittests\"],\"times\":[1306806972.9652319,1306806975.707196]},{\"statistics\":{},\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33020,33001.11197224549]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"media_unittests\"],\"times\":[1306806975.7075579,1306806978.9153831]},{\"statistics\":{},\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",601425,597019.52846329066]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"],\"times\":[1306806978.9158809,1306807123.528589]},{\"statistics\":{},\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2892.7191103486175]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"printing_unittests\"],\"times\":[1306807123.52917,1306807124.2278819]},{\"statistics\":{},\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48792,48762.780454208849]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"remoting_unittests\"],\"times\":[1306807124.2283511,1306807128.771554]},{\"statistics\":{},\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88802,88717.124351828621]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"],\"times\":[1306807128.772119,1306807192.579236]},{\"statistics\":{},\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",33510,33269.014056251668]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"safe_browsing_tests\"],\"times\":[1306807192.5798371,1306807207.820709]},{\"statistics\":{},\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14054,14030.11995259598]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"ipc_tests\",\"1 disabled\"],\"times\":[1306807207.8213041,1306807216.88131]},{\"statistics\":{},\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71483,71371.651680894458]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"sync_unit_tests\",\"2 disabled\"],\"times\":[1306807216.8819771,1306807224.4609201]},{\"statistics\":{},\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",526307,525923.21554765315]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"],\"times\":[1306807224.461525,1306807320.098911]},{\"statistics\":{},\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9130,9110.9205971328629]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"app_unittests\"],\"times\":[1306807320.0994971,1306807333.946887]},{\"statistics\":{},\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12299,12298.013519341113]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"gfx_unittests\"],\"times\":[1306807333.9474931,1306807340.0329771]},{\"statistics\":{},\"name\":\"browser_tests\",\"isFinished\":false,\"step_number\":19,\"expectations\":[[\"output\",46788,671331.0552439373]],\"isStarted\":true,\"results\":[[null,[]],[]],\"eta\":1058.9627407185319,\"urls\":{},\"text\":[\"running browser_tests\"],\"times\":[1306807340.0334611,null]},{\"statistics\":{},\"name\":\"ui_tests\",\"isFinished\":false,\"step_number\":20,\"expectations\":[[\"output\",null,287816.42999314045]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running ui_tests\"],\"times\":[null,null]},{\"statistics\":{},\"name\":\"nacl_ui_tests\",\"isFinished\":false,\"step_number\":21,\"expectations\":[[\"output\",null,1593.001953125]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_ui_tests\"],\"times\":[null,null]},{\"statistics\":{},\"name\":\"nacl_integration\",\"isFinished\":false,\"step_number\":22,\"expectations\":[[\"output\",null,446725.74092333572]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running nacl_integration\"],\"times\":[null,null]},{\"statistics\":{},\"name\":\"interactive_ui_tests\",\"isFinished\":false,\"step_number\":23,\"expectations\":[[\"output\",null,49899.816269182178]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running interactive_ui_tests\"],\"times\":[null,null]},{\"statistics\":{},\"name\":\"webkit_unit_tests\",\"isFinished\":false,\"step_number\":24,\"expectations\":[[\"output\",null,16582.185702181625]],\"isStarted\":false,\"results\":[[null,[]],[]],\"eta\":null,\"urls\":{},\"text\":[\"running webkit_unit_tests\"],\"times\":[null,null]}],\"sourceStamp\":{\"issue\":7063025,\"timestamp\":\"2011-05-31T01:36:20.885727\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":6001,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"sreeram@google.com\",\"when\":1306805780.7440469,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"wicked#b354b\",\"revision\":87261},\"requests\":[{\"source\":{\"issue\":7063025,\"timestamp\":\"2011-05-31T01:36:20.885727\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":6001,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"sreeram@google.com\",\"when\":1306805780.7440469,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":null}],\"job_name\":\"wicked#b354b\",\"revision\":87261},\"submittedAt\":1306805780.992321,\"builds\":[29550],\"builderName\":\"linux\"}],\"times\":[1306805781.0349431,null],\"changes\":[\"File: \\nAt: Mon 30 May 2011 18:36:20\\nChanged By: sreeram@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"sreeram@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",29550,\"Build\"],[\"got_revision\",\"87261\",\"Source\"],[\"got_webkit_revision\",\"87699\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87261,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm135-m4\",\"BuildSlave\"]]}}"]]
\ No newline at end of file
diff --git a/tests/data/testCurrentBuilds_expected.json b/tests/data/testCurrentBuilds_expected.json
deleted file mode 100644
index ccb0c25..0000000
--- a/tests/data/testCurrentBuilds_expected.json
+++ /dev/null
@@ -1 +0,0 @@
-["Build:\n blame: [u'sreeram@google.com']\n completed: False\n data: {u'slave': u'vm135-m4', u'builderName': u'linux', u'text': [], u'results': None, u'currentSt...\n duration: 18588219\n end_time: None\n key: 29550\n number: 29550\n properties: [[u'blamelist', [u'sreeram@google.com'], u'Build'], [u'branch', None, u'Build'], [u'bu...\n reason: u\"'sreeram: wicked#b354b' try job\"\n result: None\n revision: 87261\n simplified_result: None\n slave: <Slave key=vm135-m4>\n start_time: 1306805781\n steps: <BuildSteps keys=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,...\n url: '29550'"]
\ No newline at end of file
diff --git a/tests/data/test_build_results.json b/tests/data/test_build_results.json
deleted file mode 100644
index 4653ee6..0000000
--- a/tests/data/test_build_results.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux_clang/builds/1638?filter=1","{\"slave\":\"vm113-m4\",\"builderName\":\"linux_clang\",\"text\":[\"build\",\"successful\"],\"results\":0,\"currentStep\":null,\"number\":1638,\"blame\":[\"caryclark@chromium.org\",\"commit-bot@chromium.org\"],\"reason\":\"'commit-bot: 6823081-32001' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2572,2356.0045416264138]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1306334842.9123571,1306334853.2472639]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",127032,61403.214263681322]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r86621\",\"webkit r87266\"],\"times\":[1306334853.2479179,1306335018.1571791]},{\"statistics\":{},\"name\":\"update_clang\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",50298,50299.892044067383]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"clang updated\"],\"times\":[1306335018.157722,1306335038.546735]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1197086,223919.594514122]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1306335038.5472231,1306337127.952481]}],\"sourceStamp\":{\"issue\":null,\"timestamp\":\"2011-05-25T14:47:22.592050\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"commit-bot@chromium.org\",\"when\":1306334842.5919459,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"},{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"caryclark@chromium.org\",\"when\":1306334842.5919809,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"}],\"job_name\":\"6823081-32001\",\"revision\":\"86621\"},\"requests\":[{\"source\":{\"issue\":null,\"timestamp\":\"2011-05-25T14:47:22.592050\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"commit-bot@chromium.org\",\"when\":1306334842.5919459,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"},{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"caryclark@chromium.org\",\"when\":1306334842.5919809,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"}],\"job_name\":\"6823081-32001\",\"revision\":\"86621\"},\"submittedAt\":1306334842.607322,\"builds\":[1638],\"builderName\":\"linux_clang\"}],\"times\":[1306334842.9106419,1306337127.9530721],\"changes\":[\"File: \\nAt: Wed 25 May 2011 07:47:22\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 25 May 2011 07:47:22\\nChanged By: caryclark@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"caryclark@chromium.org\",\"commit-bot@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux_clang\",\"Build\"],[\"buildnumber\",1638,\"Build\"],[\"clobber\",true,\"Scheduler\"],[\"got_revision\",\"86621\",\"Source\"],[\"got_webkit_revision\",\"87266\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"86621\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm113-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]}"]]
\ No newline at end of file
diff --git a/tests/data/test_build_step_cached_data.json b/tests/data/test_build_step_cached_data.json
deleted file mode 100644
index ab9374d..0000000
--- a/tests/data/test_build_step_cached_data.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux/builds/30157?filter=1","{\"slave\":\"vm154-m4\",\"builderName\":\"linux\",\"text\":[\"failed\",\"browser_tests\",\"ui_tests\"],\"number\":30157,\"results\":2,\"blame\":[\"phajdan.jr@chromium.org\"],\"reason\":\"'ph: automation-headers' try job\",\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2261,2295.3473663788409]],\"isStarted\":true,\"times\":[1307037091.836695,1307037105.47192]},{\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",50066,51347.468941190018]],\"isStarted\":true,\"times\":[1307037105.4727859,1307037266.0108831],\"text\":[\"update\",\"r87599\",\"webkit r87872\"]},{\"name\":\"compile\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",23164,191417.13900768489]],\"isStarted\":true,\"times\":[1307037266.0115581,1307038031.5822189],\"text\":[\"compile\"]},{\"name\":\"check_deps\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1004,1004.0000000037253]],\"isStarted\":true,\"times\":[1307038031.5826299,1307038083.3372631],\"text\":[\"check_deps\"]},{\"name\":\"base_unittests\",\"isFinished\":true,\"step_number\":4,\"expectations\":[[\"output\",88851,88906.12301220253]],\"isStarted\":true,\"times\":[1307038083.3378019,1307038125.0744569],\"text\":[\"base_unittests\",\"4 flaky\"]},{\"name\":\"crypto_unittests\",\"isFinished\":true,\"step_number\":5,\"expectations\":[[\"output\",7084,7085.2529450630536]],\"isStarted\":true,\"times\":[1307038125.0750599,1307038126.6079271],\"text\":[\"crypto_unittests\"]},{\"name\":\"googleurl_unittests\",\"isFinished\":true,\"step_number\":6,\"expectations\":[[\"output\",6077,6092.2304227926434]],\"isStarted\":true,\"times\":[1307038126.6084349,1307038126.9976749],\"text\":[\"googleurl_unittests\"]},{\"name\":\"gpu_unittests\",\"isFinished\":true,\"step_number\":7,\"expectations\":[[\"output\",1254429,1254430.7531099571]],\"isStarted\":true,\"times\":[1307038126.998178,1307038131.027365],\"text\":[\"gpu_unittests\"]},{\"name\":\"media_unittests\",\"isFinished\":true,\"step_number\":8,\"expectations\":[[\"output\",33638,33660.228011933119]],\"isStarted\":true,\"times\":[1307038131.0277979,1307038134.390729],\"text\":[\"media_unittests\"]},{\"name\":\"net_unittests\",\"isFinished\":true,\"step_number\":9,\"expectations\":[[\"output\",592937,598350.33243191894]],\"isStarted\":true,\"times\":[1307038134.3912461,1307038275.632921],\"text\":[\"net_unittests\",\"6 disabled\",\"10 flaky\"]},{\"name\":\"printing_unittests\",\"isFinished\":true,\"step_number\":10,\"expectations\":[[\"output\",2897,2897.0350230386589]],\"isStarted\":true,\"times\":[1307038275.6333511,1307038276.5015271],\"text\":[\"printing_unittests\"]},{\"name\":\"remoting_unittests\",\"isFinished\":true,\"step_number\":11,\"expectations\":[[\"output\",48958,48996.956939978183]],\"isStarted\":true,\"times\":[1307038276.501888,1307038281.7975099],\"text\":[\"remoting_unittests\"]},{\"name\":\"test_shell_tests\",\"isFinished\":true,\"step_number\":12,\"expectations\":[[\"output\",88997,89080.974932727695]],\"isStarted\":true,\"times\":[1307038281.7978871,1307038346.677254],\"text\":[\"test_shell_tests\",\"1 disabled\",\"2 flaky\"]},{\"name\":\"safe_browsing_tests\",\"isFinished\":true,\"step_number\":13,\"expectations\":[[\"output\",34494,34842.012682558809]],\"isStarted\":true,\"times\":[1307038346.6778231,1307038360.9787641],\"text\":[\"safe_browsing_tests\"]},{\"name\":\"ipc_tests\",\"isFinished\":true,\"step_number\":14,\"expectations\":[[\"output\",14008,14012.784681733709]],\"isStarted\":true,\"times\":[1307038360.9793711,1307038372.0461161],\"text\":[\"ipc_tests\",\"1 disabled\"]},{\"name\":\"sync_unit_tests\",\"isFinished\":true,\"step_number\":15,\"expectations\":[[\"output\",71228,71428.132248910493]],\"isStarted\":true,\"times\":[1307038372.046566,1307038383.6317301],\"text\":[\"sync_unit_tests\",\"2 disabled\"]},{\"name\":\"unit_tests\",\"isFinished\":true,\"step_number\":16,\"expectations\":[[\"output\",531592,532309.38248921698]],\"isStarted\":true,\"times\":[1307038383.6321011,1307038483.9729109],\"text\":[\"unit_tests\",\"18 disabled\",\"4 flaky\"]},{\"name\":\"app_unittests\",\"isFinished\":true,\"step_number\":17,\"expectations\":[[\"output\",9063,9155.2223740942591]],\"isStarted\":true,\"times\":[1307038483.9733801,1307038498.2043419],\"text\":[\"app_unittests\"]},{\"name\":\"gfx_unittests\",\"isFinished\":true,\"step_number\":18,\"expectations\":[[\"output\",12299,12299.190133526197]],\"isStarted\":true,\"times\":[1307038498.2048831,1307038504.5036471],\"text\":[\"gfx_unittests\"]},{\"name\":\"browser_tests\",\"isFinished\":true,\"step_number\":19,\"results\":[2,[\"browser_tests\"]],\"isStarted\":true,\"expectations\":[[\"output\",1208892,1194994.8574375971]],\"text\":[\"browser_tests\",\"20 flaky\",\"did not complete\",\"failed 1\"],\"times\":[1307038504.5041809,1307039696.6049311]},{\"name\":\"ui_tests\",\"isFinished\":true,\"step_number\":20,\"results\":[2,[\"ui_tests\"]],\"isStarted\":true,\"expectations\":[[\"output\",529179,538218.2378689847]],\"text\":[\"ui_tests\",\"24 disabled\",\"67 flaky\",\"failed 1\"],\"times\":[1307039696.606005,1307040632.289664]},{\"name\":\"nacl_ui_tests\",\"isFinished\":true,\"step_number\":21,\"expectations\":[[\"output\",1530,1530.0076904296911]],\"isStarted\":true,\"times\":[1307040632.2900059,1307040636.063406],\"text\":[\"nacl_ui_tests\",\"8 disabled\"]},{\"name\":\"nacl_integration\",\"isFinished\":true,\"step_number\":22,\"expectations\":[[\"output\",453985,455365.2089272397]],\"isStarted\":true,\"times\":[1307040636.06373,1307040869.3601661],\"text\":[\"nacl_integration\"]},{\"name\":\"interactive_ui_tests\",\"isFinished\":true,\"step_number\":23,\"expectations\":[[\"output\",99201,99614.171852138097]],\"isStarted\":true,\"times\":[1307040869.360687,1307041035.168076],\"text\":[\"interactive_ui_tests\",\"6 flaky\"]},{\"name\":\"webkit_unit_tests\",\"isFinished\":true,\"step_number\":24,\"expectations\":[[\"output\",16590,16584.281335355248]],\"isStarted\":true,\"times\":[1307041035.1686051,1307041038.5493231],\"text\":[\"webkit_unit_tests\",\"1 disabled\"]}],\"sourceStamp\":{\"changes\":[{\"who\":\"phajdan.jr@chromium.org\",\"when\":1307037091.24687}],\"hasPatch\":true,\"timestamp\":\"2011-06-02T17:51:31.385415\",\"patchset\":13006,\"issue\":7104029,\"job_name\":\"automation-headers\",\"revision\":87599},\"requests\":[{\"source\":{\"changes\":[{\"who\":\"phajdan.jr@chromium.org\",\"when\":1307037091.24687}],\"hasPatch\":true,\"timestamp\":\"2011-06-02T17:51:31.385415\",\"patchset\":13006,\"issue\":7104029,\"job_name\":\"automation-headers\",\"revision\":87599},\"submittedAt\":1307037091.3921151,\"builds\":[30157],\"builderName\":\"linux\"}],\"times\":[1307037091.8344071,1307041038.5498121],\"changes\":[\"File: \\nAt: Thu 02 Jun 2011 10:51:31\\nChanged By: phajdan.jr@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"phajdan.jr@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux\",\"Build\"],[\"buildnumber\",30157,\"Build\"],[\"got_revision\",\"87599\",\"Source\"],[\"got_webkit_revision\",\"87872\",\"Source\"],[\"gtest_filter\",null,\"Factory\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",87599,\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm154-m4\",\"BuildSlave\"]]}"],["http://build.chromium.org/p/tryserver.chromium/json/project?filter=1","{\"projectURL\":\"http://dev.chromium.org/developers/testing/try-server-usage\",\"buildbotURL\":\"http://build.chromium.org/p/tryserver.chromium/\",\"projectName\":\"Chromium Try Server\"}"]]
diff --git a/tests/data/test_build_steps_keys.json b/tests/data/test_build_steps_keys.json
deleted file mode 100644
index 4653ee6..0000000
--- a/tests/data/test_build_steps_keys.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux_clang/builds/1638?filter=1","{\"slave\":\"vm113-m4\",\"builderName\":\"linux_clang\",\"text\":[\"build\",\"successful\"],\"results\":0,\"currentStep\":null,\"number\":1638,\"blame\":[\"caryclark@chromium.org\",\"commit-bot@chromium.org\"],\"reason\":\"'commit-bot: 6823081-32001' try job\",\"eta\":null,\"steps\":[{\"statistics\":{},\"name\":\"update_scripts\",\"isFinished\":true,\"step_number\":0,\"expectations\":[[\"output\",2572,2356.0045416264138]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update_scripts\"],\"times\":[1306334842.9123571,1306334853.2472639]},{\"statistics\":{},\"name\":\"update\",\"isFinished\":true,\"step_number\":1,\"expectations\":[[\"output\",127032,61403.214263681322]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"update\",\"r86621\",\"webkit r87266\"],\"times\":[1306334853.2479179,1306335018.1571791]},{\"statistics\":{},\"name\":\"update_clang\",\"isFinished\":true,\"step_number\":2,\"expectations\":[[\"output\",50298,50299.892044067383]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"clang updated\"],\"times\":[1306335018.157722,1306335038.546735]},{\"statistics\":{},\"name\":\"compile\",\"isFinished\":true,\"step_number\":3,\"expectations\":[[\"output\",1197086,223919.594514122]],\"isStarted\":true,\"results\":[0,[]],\"eta\":null,\"urls\":{},\"text\":[\"compile\"],\"times\":[1306335038.5472231,1306337127.952481]}],\"sourceStamp\":{\"issue\":null,\"timestamp\":\"2011-05-25T14:47:22.592050\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"commit-bot@chromium.org\",\"when\":1306334842.5919459,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"},{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"caryclark@chromium.org\",\"when\":1306334842.5919809,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"}],\"job_name\":\"6823081-32001\",\"revision\":\"86621\"},\"requests\":[{\"source\":{\"issue\":null,\"timestamp\":\"2011-05-25T14:47:22.592050\",\"hasPatch\":true,\"canceled\":null,\"branch\":null,\"patchset\":null,\"changes\":[{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"commit-bot@chromium.org\",\"when\":1306334842.5919459,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"},{\"category\":null,\"files\":[\"\"],\"repository\":\"\",\"who\":\"caryclark@chromium.org\",\"when\":1306334842.5919809,\"number\":null,\"comments\":\"\",\"branch\":null,\"revlink\":\"\",\"properties\":[],\"revision\":\"86621\"}],\"job_name\":\"6823081-32001\",\"revision\":\"86621\"},\"submittedAt\":1306334842.607322,\"builds\":[1638],\"builderName\":\"linux_clang\"}],\"times\":[1306334842.9106419,1306337127.9530721],\"changes\":[\"File: \\nAt: Wed 25 May 2011 07:47:22\\nChanged By: commit-bot@chromium.org\\nComments: Properties: \\n\\n\\n\",\"File: \\nAt: Wed 25 May 2011 07:47:22\\nChanged By: caryclark@chromium.org\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"caryclark@chromium.org\",\"commit-bot@chromium.org\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux_clang\",\"Build\"],[\"buildnumber\",1638,\"Build\"],[\"clobber\",true,\"Scheduler\"],[\"got_revision\",\"86621\",\"Source\"],[\"got_webkit_revision\",\"87266\",\"Source\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"86621\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm113-m4\",\"BuildSlave\"],[\"testfilters\",[\"app_unittests\",\"base_unittests\",\"googleurl_unittests\",\"ipc_tests\",\"media_unittests\",\"net_unittests\",\"printing_tests\",\"unit_tests\"],\"Scheduler\"]]}"]]
\ No newline at end of file
diff --git a/tests/data/test_builds_reverse.json b/tests/data/test_builds_reverse.json
deleted file mode 100644
index 36a6fe6..0000000
--- a/tests/data/test_builds_reverse.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders/linux?filter=1","{\"state\":\"building\",\"basedir\":\"linux\",\"cachedBuilds\":[1088,1089,1090,1091,1092,1093,1094,1095,1096,1097],\"slaves\":[\"vm60-m4\",\"vm61-m4\",\"vm62-m4\",\"vm63-m4\",\"vm64-m4\",\"vm65-m4\",\"vm66-m4\",\"vm67-m4\",\"vm79-m4\",\"vm86-m4\",\"vm104-m4\",\"vm112-m4\",\"vm113-m4\",\"vm118-m4\",\"vm119-m4\",\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\",\"vm165-m4\",\"vm166-m4\",\"vm167-m4\",\"vm168-m4\",\"vm169-m4\",\"vm170-m4\",\"vm171-m4\",\"vm172-m4\",\"vm173-m4\",\"vm174-m4\",\"vm175-m4\",\"vm178-m4\",\"vm384-m4\",\"vm385-m4\",\"vm386-m4\",\"vm387-m4\",\"vm388-m4\",\"vm389-m4\",\"vm390-m4\",\"vm391-m4\",\"vm392-m4\",\"vm393-m4\",\"vm394-m4\",\"vm395-m4\",\"vm396-m4\",\"vm397-m4\",\"vm398-m4\",\"vm399-m4\",\"vm400-m4\",\"vm401-m4\",\"vm402-m4\",\"vm403-m4\",\"vm404-m4\",\"vm405-m4\",\"vm406-m4\",\"vm407-m4\",\"vm408-m4\",\"vm409-m4\",\"vm410-m4\",\"vm411-m4\",\"vm412-m4\",\"vm413-m4\",\"vm414-m4\",\"vm415-m4\",\"vm416-m4\",\"vm417-m4\",\"vm418-m4\",\"vm419-m4\",\"vm420-m4\",\"vm421-m4\",\"vm422-m4\",\"vm423-m4\",\"vm424-m4\",\"vm425-m4\",\"vm426-m4\",\"vm427-m4\",\"vm428-m4\",\"vm429-m4\",\"slave10-b1\",\"slave11-b1\",\"slave12-b1\",\"slave13-b1\",\"slave14-b1\",\"slave15-b1\",\"slave16-b1\",\"slave17-b1\",\"slave18-b1\",\"slave19-b1\",\"slave20-b1\",\"slave21-b1\",\"slave22-b1\",\"slave23-b1\",\"slave24-b1\",\"slave25-b1\",\"slave26-b1\",\"slave27-b1\",\"slave28-b1\",\"slave29-b1\",\"slave30-b1\",\"slave31-b1\",\"slave32-b1\",\"slave33-b1\",\"slave34-b1\",\"slave35-b1\",\"slave36-b1\",\"slave37-b1\",\"slave38-b1\",\"slave39-b1\",\"slave40-b1\",\"slave41-b1\",\"slave42-b1\",\"slave43-b1\",\"slave44-b1\",\"slave45-b1\",\"slave46-b1\",\"slave47-b1\",\"slave48-b1\",\"slave49-b1\",\"slave50-b1\",\"slave51-b1\",\"slave52-b1\",\"slave53-b1\",\"slave54-b1\",\"slave55-b1\",\"slave56-b1\",\"slave57-b1\",\"slave58-b1\",\"slave59-b1\",\"slave60-b1\",\"slave61-b1\",\"slave62-b1\",\"slave63-b1\",\"slave64-b1\",\"slave65-b1\",\"slave66-b1\",\"slave67-b1\",\"slave68-b1\",\"slave69-b1\",\"slave70-b1\",\"slave71-b1\",\"slave72-b1\",\"slave73-b1\",\"slave74-b1\",\"slave75-b1\",\"slave76-b1\",\"slave77-b1\",\"slave78-b1\",\"slave79-b1\",\"slave80-b1\",\"slave81-b1\",\"slave82-b1\",\"slave83-b1\",\"slave84-b1\",\"slave85-b1\",\"slave86-b1\",\"slave87-b1\",\"slave88-b1\",\"slave89-b1\",\"slave90-b1\",\"slave91-b1\",\"slave92-b1\",\"slave93-b1\",\"slave94-b1\",\"slave95-b1\",\"slave96-b1\",\"slave97-b1\",\"slave98-b1\",\"slave99-b1\"],\"currentBuilds\":[1088,1093,1094,1095,1096,1097]}"]]
\ No newline at end of file
diff --git a/tests/data/test_builds_reverse_expected.json b/tests/data/test_builds_reverse_expected.json
deleted file mode 100644
index 73f3c6d..0000000
--- a/tests/data/test_builds_reverse_expected.json
+++ /dev/null
@@ -1 +0,0 @@
-[1097, 1096]
\ No newline at end of file
diff --git a/tests/data/test_contains.json b/tests/data/test_contains.json
deleted file mode 100644
index f35b847..0000000
--- a/tests/data/test_contains.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/builders?filter=1","{\"linux_chromeos_clang\":null,\"win_layout\":null,\"linux_touch\":{\"category\":null,\"basedir\":\"linux_touch\",\"currentBuilds\":[],\"state\":\"offline\",\"slaves\":[\"vm112-m4\"],\"cachedBuilds\":[64,65,66,67,68,69,70,71,72,73],\"pendingBuilds\":1},\"linux_sync\":null,\"linux_tsan\":null,\"linux\":{\"category\":null,\"basedir\":\"linux\",\"currentBuilds\":[29797,29799,29800,29801,29802,29803,29804,29805,29806,29807,29808,29810,29811,29812,29813,29814,29815],\"state\":\"building\",\"slaves\":[\"vm121-m4\",\"vm122-m4\",\"vm123-m4\",\"vm124-m4\",\"vm125-m4\",\"vm126-m4\",\"vm127-m4\",\"vm128-m4\",\"vm129-m4\",\"vm130-m4\",\"vm131-m4\",\"vm132-m4\",\"vm133-m4\",\"vm134-m4\",\"vm135-m4\",\"vm136-m4\",\"vm137-m4\",\"vm138-m4\",\"vm139-m4\",\"vm140-m4\",\"vm141-m4\",\"vm142-m4\",\"vm143-m4\",\"vm144-m4\",\"vm145-m4\",\"vm146-m4\",\"vm147-m4\",\"vm148-m4\",\"vm149-m4\",\"vm150-m4\",\"vm151-m4\",\"vm152-m4\",\"vm153-m4\",\"vm154-m4\",\"vm155-m4\",\"vm156-m4\",\"vm157-m4\",\"vm158-m4\",\"vm159-m4\",\"vm160-m4\",\"vm161-m4\",\"vm162-m4\",\"vm163-m4\",\"vm164-m4\"],\"cachedBuilds\":[29806,29807,29808,29809,29810,29811,29812,29813,29814,29815],\"pendingBuilds\":0},\"linux_layout_rel\":null,\"linux_valgrind\":null,\"linux_coverage\":null,\"mac_layout_rel\":null,\"win_shared\":null,\"mac_valgrind\":null,\"linux_layout\":null,\"linux_chromeos_valgrind\":null,\"linux_chromeos\":null,\"mac_sync\":null,\"linux_clang\":{\"category\":null,\"basedir\":\"linux_clang\",\"currentBuilds\":[1915,1916],\"state\":\"building\",\"slaves\":[\"vm46-m4\",\"vm57-m4\",\"vm104-m4\",\"vm113-m4\",\"vm165-m4\"],\"cachedBuilds\":[1907,1908,1909,1910,1911,1912,1913,1914,1915,1916],\"pendingBuilds\":1},\"linux_view\":null,\"mac\":null,\"win_sync\":null,\"mac_layout\":null,\"win\":null,\"mac_clang\":null,\"linux_rel\":null,\"win_rel\":null,\"win_layout_7\":null,\"win_layout_rel\":null,\"mac_rel\":null}"]]
\ No newline at end of file
diff --git a/tests/data/test_refresh.json b/tests/data/test_refresh.json
deleted file mode 100644
index d09bd3e..0000000
--- a/tests/data/test_refresh.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/project?filter=1","{\"projectURL\":\"http://dev.chromium.org/developers/testing/try-server-usage\",\"buildbotURL\":\"http://build.chromium.org/p/tryserver.chromium/\",\"projectName\":\"Chromium Try Server\"}"]]
\ No newline at end of file
diff --git a/tests/data/test_repr.json b/tests/data/test_repr.json
deleted file mode 100644
index 0637a08..0000000
--- a/tests/data/test_repr.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
\ No newline at end of file
diff --git a/tests/data/test_slaves.json b/tests/data/test_slaves.json
deleted file mode 100644
index 654fc23..0000000
--- a/tests/data/test_slaves.json
+++ /dev/null
@@ -1 +0,0 @@
-[["http://build.chromium.org/p/tryserver.chromium/json/slaves?filter=1","{\"vm1-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\n\",\"host\":\"vm1-m4\\n\",\"version\":\"0.7.12\",\"connected\":true,\"name\":\"vm1-m4\"},\"mini34-m4\":{\"name\":\"mini34-m4\",\"admin\":\"mark\\n\",\"runningBuilds\":[],\"host\":\"mini34-m4\\n\",\"version\":\"0.7.12\"},\"mini35-m4\":{\"name\":\"mini35-m4\",\"admin\":\"mark\\n\",\"runningBuilds\":[],\"host\":\"mini35-m4\\n\",\"version\":\"0.7.12\",\"connected\":true},\"mini32-m4\":{\"name\":\"mini32-m4\",\"admin\":\"mark\\n\",\"runningBuilds\":[],\"host\":\"mini32-m4\\n\",\"version\":\"0.7.12\",\"connected\":true},\"win7_slave\":{\"name\":\"win7_slave\"},\"mini33-m4\":{\"name\":\"mini33-m4\",\"admin\":\"mark\\n\",\"runningBuilds\":[],\"host\":\"mini33-m4\\n\",\"version\":\"0.7.12\",\"connected\":true},\"mini41-m4\":{\"admin\":\"mark\\n\",\"host\":\"mini41-m4\\n\",\"version\":\"0.7.12\",\"connected\":true,\"name\":\"mini41-m4\"},\"vm112-m4\":{\"name\":\"vm112-m4\",\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"runningBuilds\":[{\"slave\":\"vm112-m4\",\"builderName\":\"linux_touch\",\"number\":76,\"currentStep\":{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",24556,68578.46875]],\"isStarted\":true,\"times\":[1306957344.0783999,null],\"eta\":106.04641299484061,\"text\":[\"updating\",\"rHEAD\"]},\"times\":[1306957332.1939931,null],\"blame\":[\"saintlou@google.com\"],\"reason\":\"'saintlou: remove#de851f' try job\",\"eta\":884.7428879737854,\"steps\":[{\"name\":\"update_scripts\",\"isFinished\":true,\"text\":[\"update_scripts\"],\"expectations\":[[\"output\",2267,2299.03125]],\"isStarted\":true,\"times\":[1306957332.195859,1306957344.0779419]},{\"name\":\"update\",\"step_number\":1,\"expectations\":[[\"output\",24556,68578.46875]],\"isStarted\":true,\"times\":[1306957344.0783999,null],\"eta\":106.04641299484061,\"text\":[\"updating\",\"rHEAD\"]},{\"step_number\":2,\"expectations\":[[\"output\",null,267887.78125]],\"name\":\"compile\",\"text\":[\"compiling\"]},{\"step_number\":3,\"expectations\":[[\"output\",null,1032.0]],\"name\":\"check_deps\",\"text\":[\"running check_deps\"]},{\"step_number\":4,\"expectations\":[[\"output\",null,7096.46875]],\"name\":\"crypto_unittests\",\"text\":[\"running crypto_unittests\"]},{\"step_number\":5,\"expectations\":[[\"output\",null,6152.875]],\"name\":\"googleurl_unittests\",\"text\":[\"running googleurl_unittests\"]},{\"step_number\":6,\"expectations\":[[\"output\",null,1253981.15625]],\"name\":\"gpu_unittests\",\"text\":[\"running gpu_unittests\"]},{\"step_number\":7,\"expectations\":[[\"output\",null,33063.8125]],\"name\":\"media_unittests\",\"text\":[\"running media_unittests\"]},{\"step_number\":8,\"expectations\":[[\"output\",null,595700.84375]],\"name\":\"net_unittests\",\"text\":[\"running net_unittests\"]},{\"step_number\":9,\"expectations\":[[\"output\",null,2969.0]],\"name\":\"printing_unittests\",\"text\":[\"running printing_unittests\"]},{\"step_number\":10,\"expectations\":[[\"output\",null,48835.6875]],\"name\":\"remoting_unittests\",\"text\":[\"running remoting_unittests\"]},{\"step_number\":11,\"expectations\":[[\"output\",null,16656.8125]],\"name\":\"webkit_unit_tests\",\"text\":[\"running webkit_unit_tests\"]}],\"sourceStamp\":{\"timestamp\":\"2011-06-01T01:56:20.912617\",\"hasPatch\":true,\"changes\":[{\"who\":\"saintlou@google.com\",\"when\":1306893380.9125161,\"revision\":\"HEAD\"}],\"patchset\":2005,\"issue\":7027014,\"job_name\":\"remove#de851f\",\"revision\":\"HEAD\"},\"requests\":[{\"source\":{\"timestamp\":\"2011-06-01T01:56:20.912617\",\"hasPatch\":true,\"changes\":[{\"who\":\"saintlou@google.com\",\"when\":1306893380.9125161,\"revision\":\"HEAD\"}],\"patchset\":2005,\"issue\":7027014,\"job_name\":\"remove#de851f\",\"revision\":\"HEAD\"},\"submittedAt\":1306893380.9475379,\"builds\":[76],\"builderName\":\"linux_touch\"}],\"changes\":[\"File: \\nAt: Tue 31 May 2011 18:56:20\\nChanged By: saintlou@google.com\\nComments: Properties: \\n\\n\\n\"],\"properties\":[[\"blamelist\",[\"saintlou@google.com\"],\"Build\"],[\"branch\",null,\"Build\"],[\"buildername\",\"linux_touch\",\"Build\"],[\"buildnumber\",76,\"Build\"],[\"mastername\",\"tryserver.chromium\",\"master.cfg\"],[\"revision\",\"HEAD\",\"Build\"],[\"scheduler\",\"try_job_svn\",\"Scheduler\"],[\"slavename\",\"vm112-m4\",\"BuildSlave\"]]}],\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true},\"mini36-m4\":{\"name\":\"mini36-m4\",\"admin\":\"mark\\n\",\"runningBuilds\":[],\"host\":\"mini36-m4\\n\",\"version\":\"0.7.12\",\"connected\":true},\"vm46-m4\":{\"admin\":\"<add root usernames here to ping when this bot misbehaves>\\r\\n\",\"host\":\"<some-host>.<some-domain>.<some-country>\\r\\n\",\"version\":\"0.7.12\",\"connected\":true,\"name\":\"vm46-m4\"},\"mini38-m4\":{\"admin\":\"mark\\n\",\"host\":\"mini38-m4\\n\",\"version\":\"0.7.12\",\"connected\":true,\"name\":\"mini38-m4\"}}"]]
diff --git a/tests/mocks.py b/tests/mocks.py
deleted file mode 100644
index 37ade86..0000000
--- a/tests/mocks.py
+++ /dev/null
@@ -1,276 +0,0 @@
-# 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.
-
-"""Common mocks."""
-
-import copy
-import os
-import sys
-
-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
-import breakpad
-import patch
-
-import async_push
-import context
-import pending_manager
-
-from testing_support import auto_stub
-
-
-SVN_PATCH = (
- 'Index: chrome/file.cc\n'
- '===================================================================\n'
- '--- chrome/file.cc\t(revision 74690)\n'
- '+++ chrome/file.cc\t(working copy)\n'
- '@@ -80,10 +80,10 @@\n'
- ' // Foo\n'
- ' // Bar\n'
- ' void foo() {\n'
- '- return bar;\n'
- '+ return foo;\n'
- ' }\n'
- ' \n'
- ' \n')
-
-
-class RietveldMock(auto_stub.SimpleMock):
- url = 'http://nowhere'
- email = 'fake_email'
- password = 'fake_password'
-
- def __init__(self, unit_test):
- super(RietveldMock, self).__init__(unit_test)
- self.issues = {
- 31337: {
- "description": u"foo",
- "created": "2010-12-27 03:23:31.149045",
- "cc": ["cc@example.com",],
- "reviewers": ["rev@example.com"],
- "owner_email": "author@example.com",
- "patchsets": [1],
- "modified": "2011-01-10 20:52:39.127231",
- "private": False,
- "base_url": "svn://fake/repo",
- "closed": False,
- "owner": "Author",
- "issue": 31337,
- "subject": 'foo',
- "messages": [
- {
- "date": "2010-12-27 03:23:32.489999",
- "text": u"hi!",
- "sender": "author@example.com",
- "recipients": ["rev@example.com", "cc@example.com"],
- "approval": False,
- },
- {
- "date": "2010-12-27 03:23:32.489999",
- "text": u"hi!",
- "sender": "rev@example.com",
- "recipients": ["rev@example.com", "cc@example.com"],
- "approval": True,
- },
- ],
- "commit": True,
- },
- }
- self.patchsets = []
- # Key is (issue, patchset)
- self.patchsets_properties = {}
-
- def get_pending_issues(self):
- return self.issues.keys()
-
- def get_issue_properties(self, issue_id, _):
- return copy.deepcopy(self.issues[issue_id])
-
- def get_patchset_properties(self, issue_id, patchset):
- key = (issue_id, patchset)
- self.unit_test.assertTrue(
- key in self.patchsets_properties, (key, self.patchsets_properties))
- return copy.deepcopy(self.patchsets_properties[key])
-
- def close_issue(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def update_description(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def set_flag(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
- return True
-
- def add_comment(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def get_patch(self, _issue, _patchset):
- self.patchsets.append(patch.PatchSet([
- patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []),
- patch.FilePatchDelete('other/place/foo', True),
- patch.FilePatchBinary('foo', 'data', [], True),
- ]))
- return self.patchsets[-1]
-
- def _send(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- def trigger_try_jobs(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
- @staticmethod
- def xsrf_token():
- return 'XSRF-free'
-
- def post(self, *args, **kwargs):
- self._register_call(*args, **kwargs)
-
-
-class SvnCheckoutMock(auto_stub.SimpleMock):
- def __init__(self, *args):
- super(SvnCheckoutMock, self).__init__(*args)
- self.project_path = os.getcwd()
- self.project_name = os.path.basename(self.project_path)
- self.post_processors = []
-
- def prepare(self, revision):
- self._register_call(revision)
- # prepare() should always return a valid revision.
- return revision or 124
-
- def apply_patch(self, *args):
- self._register_call(*args)
-
- def commit(self, *args):
- self._register_call(*args)
- return 125
-
- @staticmethod
- def get_settings(_key):
- return None
-
- @staticmethod
- def revisions(_revision1, _revision2):
- """Number of revisions between 2 revisions."""
- return 3
-
-
-class AsyncPushMock(auto_stub.SimpleMock, async_push.AsyncPushNoop):
- def __init__(self, *args):
- auto_stub.SimpleMock.__init__(self, *args)
- async_push.AsyncPushNoop.__init__(self)
- self.queue = []
-
- def send(self, packet, pending):
- self.queue.append(self._package(packet, pending))
-
- def pop_packets(self):
- packets = self.queue
- self.queue = []
- return packets
-
- def check_packets(self, expected):
- self.assertEqual(expected, self.pop_packets())
-
- def check_names(self, expected):
- self.assertEqual(expected, [i['verification'] for i in self.pop_packets()])
-
-
-class BuildbotBuilder(object):
- def __init__(self):
- self.builds = {}
- class Data(object):
- def __init__(self):
- self.data = {}
- self.pending_builds = Data()
-
-
-class BuildbotBuild(object):
- def __init__(self, revision, key, completed, parent_key):
- self.properties_as_dict = {
- 'try_job_key': key,
- 'parent_try_job_key': parent_key,
- }
- self.revision = revision
- self.start_time = 1
- self.steps = []
- self.completed = completed
- self.duration = 180
-
-
-class BuildbotBuildStep(object):
- def __init__(self, name, result):
- self.name = name
- self.simplified_result = result
-
-
-class BuildbotBuilders(object):
- def __init__(self, initial):
- self.values = initial.copy()
-
- def __getitem__(self, key):
- return self.values[key]
-
- @property
- def keys(self):
- return self.values.keys()
-
- def setdefault(self, key, value):
- return self.values.setdefault(key, value)
-
-
-class BuildbotMock(auto_stub.SimpleMock):
- """Stateful try server mock."""
-
- def __init__(self, unit_test):
- super(BuildbotMock, self).__init__(unit_test)
- self.builders = BuildbotBuilders({
- u'mac': BuildbotBuilder(),
- u'linux': BuildbotBuilder(),
- })
-
- def discard(self):
- pass
-
- def add_build(self, builder, number, revision, key, completed, parent_key):
- """Add a build to a builder."""
- builder = self.builders.setdefault(builder, BuildbotBuilder())
- builder.builds[number] = BuildbotBuild(revision, key, completed, parent_key)
- return builder.builds[number]
-
-
-class TestCase(auto_stub.TestCase):
- def setUp(self):
- super(TestCase, self).setUp()
- self.mock(breakpad, 'SendStack', self._send_stack_mock)
- self.context = context.Context(
- RietveldMock(self), SvnCheckoutMock(self), AsyncPushMock(self), False)
- self.pending = pending_manager.PendingCommit(
- issue=42,
- owner='owner@example.com',
- reviewers=[],
- patchset=23,
- base_url='',
- description=u'bleh',
- messages=[])
-
- def tearDown(self):
- try:
- if not self.has_failed():
- self.context.rietveld.check_calls([])
- self.context.checkout.check_calls([])
- self.context.status.check_packets([])
- finally:
- super(TestCase, self).tearDown()
-
- def _send_stack_mock(self, last_tb, stack, *_args, **_kwargs):
- """Fails a test that calls SendStack.
-
- In practice it doesn't happen when a test pass but will when a test fails so
- hook it here so breakpad doesn't send too many stack traces to maintainers.
- """
- self.fail('%s, %s' % (last_tb, stack))
diff --git a/tests/model_test.py b/tests/model_test.py
deleted file mode 100755
index 71fd304..0000000
--- a/tests/model_test.py
+++ /dev/null
@@ -1,502 +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 model.py."""
-
-import json
-import logging
-import os
-import sys
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-from model import PersistentMixIn, TYPE_FLAG, immutable
-
-
-# Used a marker to determine that the check must ignore the value.
-IGNORE = object()
-
-
-def _members(instance):
- return sorted(i for i in dir(instance) if not i.startswith('_'))
-
-
-class Empty(PersistentMixIn):
- pass
-
-
-class Basic(PersistentMixIn):
- a = int
- b = float
-
- def test_me(self):
- return self.a + 1
-
-
-class Inner(PersistentMixIn):
- c = Basic
- d = unicode
-
-
-class Subclass(Inner):
- e = list
-
-
-class MultiValue(PersistentMixIn):
- f = (None, bool)
- g = (unicode, float)
-
-
-class WithInit(PersistentMixIn):
- h = unicode
- def __init__(self, **kwargs):
- # The values are overriden when loaded.
- kwargs.setdefault('h', u'baz')
- super(WithInit, self).__init__(**kwargs)
- # i is not serialized.
- self.i = 3
-
-
-class NotType(PersistentMixIn):
- j = set
- # k is not a type so it's not serialized.
- k = 23
-
-
-class TypeOrDict(PersistentMixIn):
- # Accepts a Basic or a dict.
- l = (Basic, dict)
-
-
-class StrDisallowed(PersistentMixIn):
- m = str
-
-
-def marshall(data):
- """JSON encodes then decodes to make sure the data has passed through JSON
- type reduction.
- """
- return json.loads(json.dumps(data))
-
-
-class Base(unittest.TestCase):
- def _check(self, actual, expected_type, **kwargs):
- kwargs['as_dict'] = IGNORE
- kwargs['from_dict'] = IGNORE
- self.assertEqual(expected_type, type(actual))
- self.assertEqual(sorted(kwargs), _members(actual))
- for member in sorted(kwargs):
- expected = kwargs[member]
- if expected == IGNORE:
- continue
- self.assertEqual(expected, getattr(actual, member))
-
-
-class Serialize(Base):
- def testEmpty(self):
- expected = {
- TYPE_FLAG: 'Empty',
- }
- self.assertEqual(expected, Empty().as_dict())
-
- def testBasic(self):
- data = Basic(b=23.2)
- expected = {
- 'a': 0,
- 'b': 23.2,
- TYPE_FLAG: 'Basic',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testBasicFailConstruct(self):
- # TODO(maruel): should int be auto-upgraded to float when requested?
- self.assertRaises(TypeError, Basic, b=23)
-
- def testBasicFailAsDict(self):
- # TODO(maruel): should int be auto-upgraded to float when requested?
- data = Basic()
- data.b = 23
- self.assertRaises(TypeError, data.as_dict)
-
- def testInner(self):
- data = Inner(c=Basic(a=21, b=23.2), d=u'foo')
- expected = {
- 'c': {
- 'a': 21,
- 'b': 23.2,
- TYPE_FLAG: 'Basic',
- },
- TYPE_FLAG: 'Inner',
- 'd': 'foo',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testSubclass(self):
- data = Subclass(c=Basic(a=23), e=[Basic(), {'random': 'stuff', 'x': True}])
- expected = {
- 'c': {
- 'a': 23,
- 'b': 0.,
- TYPE_FLAG: 'Basic',
- },
- 'e': [
- {
- 'a': 0,
- 'b': 0.,
- TYPE_FLAG: 'Basic',
- },
- {
- 'random': 'stuff',
- 'x': True,
- },
- ],
- 'd': '',
- TYPE_FLAG: 'Subclass',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testMultiValue_default(self):
- data = MultiValue()
- expected = {
- 'f': None,
- 'g': '',
- TYPE_FLAG: 'MultiValue',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testMultiValue_first(self):
- data = MultiValue(f=None, g=u'foo')
- expected = {
- 'f': None,
- 'g': 'foo',
- TYPE_FLAG: 'MultiValue',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testMultiValue_second(self):
- data = MultiValue(f=False, g=3.1)
- expected = {
- 'f': False,
- 'g': 3.1,
- TYPE_FLAG: 'MultiValue',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testWithInit(self):
- data = WithInit()
- self._check(data, WithInit, h='baz', i=3)
- expected = {
- 'h': 'baz',
- TYPE_FLAG: 'WithInit',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testNotType(self):
- data = NotType()
- self._check(data, NotType, j=set(), k=23)
- expected = {
- 'j': [],
- TYPE_FLAG: 'NotType',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testTypeOrDict_Basic(self):
- data = TypeOrDict()
- self._check(data, TypeOrDict, l=IGNORE)
- self._check(data.l, Basic, a=0, b=0., test_me=IGNORE)
- expected = {
- 'l': {
- 'a': 0,
- 'b': 0.0,
- TYPE_FLAG: 'Basic',
- },
- TYPE_FLAG: 'TypeOrDict',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testTypeOrDict_dict(self):
- data = TypeOrDict(l={'foo': u'bar'})
- self._check(data, TypeOrDict, l={'foo': u'bar'})
- expected = {
- 'l': {
- 'foo': 'bar',
- },
- TYPE_FLAG: 'TypeOrDict',
- }
- self.assertEqual(expected, data.as_dict())
-
- def testStrDisallowed(self):
- self.assertRaises(TypeError, StrDisallowed)
-
-
-class Deserialize(Base):
- def testNotFound(self):
- data = { TYPE_FLAG: 'DoesNotExists' }
- self.assertRaises(KeyError, PersistentMixIn.from_dict, marshall(data))
-
- def testEmpty(self):
- data = { }
- self.assertRaises(KeyError, PersistentMixIn.from_dict, marshall(data))
-
- def testBasic(self):
- data = {
- 'a': 22,
- 'b': 23.2,
- TYPE_FLAG: 'Basic',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, Basic, a=22, b=23.2, test_me=IGNORE)
-
- def testBasic_WrongType(self):
- data = {
- 'a': None,
- TYPE_FLAG: 'Basic',
- }
- self.assertRaises(TypeError, PersistentMixIn.from_dict, marshall(data))
-
- def testInner(self):
- data = {
- 'c': {
- 'a': 42,
- 'b': .1,
- TYPE_FLAG: 'Basic',
- },
- TYPE_FLAG: 'Inner',
- 'd': 'foo2',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, Inner, c=IGNORE, d='foo2')
- self._check(actual.c, Basic, a=42, b=.1, test_me=IGNORE)
-
- def testSubclass(self):
- data = {
- 'd': 'bar',
- 'e': [
- {
- 'a': 1,
- 'b': 2.,
- TYPE_FLAG: 'Basic',
- },
- {
- 'random': 'stuff',
- 'x': True,
- },
- ],
- TYPE_FLAG: 'Subclass',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, Subclass, c=IGNORE, d='bar', e=IGNORE)
- self._check(actual.c, Basic, a=0, b=0., test_me=IGNORE)
- self.assertEqual(list, type(actual.e))
- self.assertEqual(2, len(actual.e))
- self._check(actual.e[0], Basic, a=1, b=2., test_me=IGNORE)
- self.assertEqual({'random': 'stuff', 'x': True}, actual.e[1])
-
- def testMemberFunction(self):
- # Make sure the member functions are accessible.
- data = {
- TYPE_FLAG: 'Basic',
- 'ignored': 'really',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, Basic, a=0, b=0., test_me=IGNORE)
- self.assertEqual(1, actual.test_me())
-
- def testMultiValue_default(self):
- data = {
- TYPE_FLAG: 'MultiValue',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, MultiValue, f=None, g='')
-
- def testMultiValue_first(self):
- data = {
- 'f': None,
- 'g': 'foo',
- TYPE_FLAG: 'MultiValue',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, MultiValue, f=None, g='foo')
-
- def testMultiValue_second(self):
- data = {
- 'f': False,
- 'g': 3.1,
- TYPE_FLAG: 'MultiValue',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, MultiValue, f=False, g=3.1)
-
- def testWithInit_default(self):
- data = {
- TYPE_FLAG: 'WithInit',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, WithInit, h='', i=3)
-
- def testWithInit_values(self):
- data = {
- 'h': 'foo',
- 'i': 4,
- TYPE_FLAG: 'WithInit',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, WithInit, h='foo', i=3)
-
- def testNotType(self):
- data = {
- 'j': ['a', 2],
- TYPE_FLAG: 'NotType',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, NotType, j=set(['a', 2]), k=23)
-
- def testTypeOrDict_Basic(self):
- data = {
- 'l': {
- 'a': 3,
- 'b': 4.0,
- TYPE_FLAG: 'Basic',
- },
- TYPE_FLAG: 'TypeOrDict',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, TypeOrDict, l=IGNORE)
- self._check(actual.l, Basic, a=3, b=4., test_me=IGNORE)
-
- def testTypeOrDict_dict(self):
- data = {
- 'l': {
- 'foo': 'bar',
- },
- TYPE_FLAG: 'TypeOrDict',
- }
- actual = PersistentMixIn.from_dict(marshall(data))
- self._check(actual, TypeOrDict, l={'foo': 'bar'})
-
- def testStrDisallowed(self):
- data = {
- TYPE_FLAG: 'StrDisallowed',
- }
- self.assertRaises(TypeError, PersistentMixIn.from_dict, marshall(data))
-
-
-class Mutable(object):
- def __init__(self, x):
- self.x = x
-
- @immutable
- def func_call_immutable_deep(self):
- return self.func_call_immutable()
-
- @immutable
- def func_call_immutable(self):
- return self.func_immutable(100)
-
- @immutable
- def func_immutable(self, key):
- return self.x + key
-
- @immutable
- def func_call_mutable(self):
- # Raises.
- return self.func_mutable(10)
-
- def func_mutable(self, new_value):
- self.x = new_value
- return new_value
-
- @immutable
- def func_try_mutate(self):
- # Raises.
- self.x = 18
-
- @immutable
- def func_call_mutable_deep(self):
- # Raises
- return self.func_call_mutable()
-
-
-class MutableStatic(object):
- @immutable
- def func_call_static(self):
- return self.func_static()
-
- @staticmethod
- def func_static():
- return 'static'
-
-
-class MutableDel(object):
- def __init__(self, x):
- self.x = x
-
- @immutable
- def func_del(self):
- # Raises
- del self.x
-
- def func_del_and_replace(self):
- x = self.x
- del self.x
- assert getattr(self, 'x', 'bleh') == 'bleh'
- self.x = x
- return self.x
-
-
-class MutableProperty(object):
- def __init__(self, x):
- self.x = x
-
- @property
- def property_y(self):
- return self.x + 1
-
- @immutable
- def func_call_property(self):
- return self.property_y
-
-
-class Immutable(unittest.TestCase):
- def testImmutable(self):
- obj = Mutable(2)
- # 2 + 23
- self.assertEqual(25, obj.func_immutable(23))
- # 2 + 100
- self.assertEqual(102, obj.func_call_immutable())
- # 2 + 100
- self.assertEqual(102, obj.func_call_immutable_deep())
- self.assertEqual(2, obj.x)
- self.assertEqual(23, obj.func_mutable(23))
- self.assertEqual(23, obj.x)
- self.assertRaises(TypeError, obj.func_call_mutable)
- self.assertRaises(TypeError, obj.func_try_mutate)
- self.assertRaises(TypeError, obj.func_call_mutable_deep)
-
- def testImmutableStatic(self):
- obj = MutableStatic()
- self.assertEqual('static', obj.func_static())
- self.assertEqual('static', obj.func_call_static())
-
- def testImmutableDel(self):
- obj = MutableDel(2)
- self.assertEqual(2, obj.func_del_and_replace())
- self.assertRaises(TypeError, obj.func_del)
- self.assertEqual(2, obj.x)
-
- def testImmutableProperty(self):
- obj = MutableProperty(2)
- self.assertEqual(2, obj.x)
- self.assertEqual(3, obj.property_y)
- self.assertEqual(3, obj.func_call_property())
- self.assertEqual(2, obj.x)
-
-
-if __name__ == '__main__':
- logging.basicConfig(
- level=logging.DEBUG if '-v' in sys.argv else logging.WARNING,
- format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
- unittest.main()
diff --git a/tests/natsort_test.py b/tests/natsort_test.py
deleted file mode 100755
index 81491bb..0000000
--- a/tests/natsort_test.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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 nasort.py."""
-
-import doctest
-import os
-import sys
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-import natsort
-
-
-if __name__ == '__main__':
- doctest.testmod(natsort)
diff --git a/tests/pending_manager_test.py b/tests/pending_manager_test.py
deleted file mode 100755
index 0407eae..0000000
--- a/tests/pending_manager_test.py
+++ /dev/null
@@ -1,732 +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 pending_manager.py."""
-
-import logging
-import os
-import re
-import sys
-import time
-import traceback
-import unittest
-import urllib2
-
-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
-import breakpad
-
-import context
-import pending_manager
-from verification import base
-from verification import fake
-from verification import project_base
-from verification import reviewer_lgtm
-
-# In tests/
-import mocks
-
-
-def read(filename):
- f = open(filename, 'rb')
- content = f.read()
- f.close()
- return content
-
-
-def write(filename, content):
- f = open(filename, 'wb')
- f.write(content)
- f.close()
-
-
-def trim(x):
- return x.replace(' ', '').replace('\n', '')
-
-
-def _try_comment(issue=31337):
- return (
- "add_comment(%d, u'%shttp://localhost/author@example.com/%d/1\\n')" %
- (issue, pending_manager.PendingManager.TRYING_PATCH.replace('\n', '\\n'),
- issue))
-
-
-class TestPendingManager(mocks.TestCase):
- def setUp(self):
- super(TestPendingManager, self).setUp()
- self.root_dir = ROOT_DIR
-
- def testLoadSave(self):
- pc = pending_manager.PendingManager(
- context.Context(None, None, mocks.AsyncPushMock(self)),
- [fake.FakeVerifier(base.SUCCEEDED)],
- [])
- filename = os.path.join(self.root_dir, 'foo.json')
- empty = """{
- "__persistent_type__": "PendingQueue",
- "pending_commits": {}
-}
-"""
- write(filename, empty)
- try:
- pc.load(filename)
- self.assertEqual(pc.queue.pending_commits, {})
- pc.save(filename)
- self.assertEqual(trim(empty), trim(read(filename)))
- finally:
- os.remove(filename)
- if os.path.exists(filename + '.old'):
- os.remove(filename + '.old')
-
- def _get_pc(self, verifiers_no_patch, verifiers):
- return pending_manager.PendingManager(
- self.context, verifiers_no_patch, verifiers)
-
- def _check_standard_verification(self, pc, success, defered):
- """Verifies the checkout and rietveld calls."""
- pc.scan_results()
- self.assertEqual(len(pc.queue.iterate()), 0)
- issue = 31337
- if pc.verifiers:
- if success:
- self.context.checkout.check_calls(
- [ 'prepare(None)',
- 'apply_patch(%r)' % (self.context.rietveld.patchsets[0],),
- 'prepare(None)', # Will sync to HEAD/124.
- 'apply_patch(%r)' % (self.context.rietveld.patchsets[1],),
- (
- "commit(u'foo\\n\\n"
- "Review URL: http://nowhere/%d', "
- "u'author@example.com')") % issue])
- self.context.rietveld.check_calls(
- [ _try_comment(),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- else:
- self.context.checkout.check_calls(
- [ 'prepare(None)',
- 'apply_patch(%r)' % (self.context.rietveld.patchsets[0],)])
- self.context.rietveld.check_calls(
- [ _try_comment(),
- "set_flag(%d, 1, 'commit', False)" % issue,
- "add_comment(%d, %r)" % (issue, pc.FAILED_NO_MESSAGE)])
- else:
- if success:
- self.context.checkout.check_calls(
- self._prepare_apply_commit(0, issue))
- self.context.rietveld.check_calls(
- [ _try_comment(),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- else:
- # checkout is never touched in that case.
- self.context.checkout.check_calls([])
- if defered:
- self.context.rietveld.check_calls(
- [ _try_comment(),
- "set_flag(%d, 1, 'commit', False)" % issue,
- "add_comment(%d, %r)" % (issue, pc.FAILED_NO_MESSAGE)])
- else:
- self.context.rietveld.check_calls(
- [ "set_flag(%d, 1, 'commit', False)" % issue,
- "add_comment(%d, %r)" % (issue, pc.FAILED_NO_MESSAGE)])
-
- def _prepare_apply_commit(self, index, issue, server_hooks_missing=False):
- """Returns a frequent sequence of action happening on the Checkout object.
-
- The list returned by this function should be used as an argument to
- self.context.checkout.check_calls().
- """
- seq = [
- # Reverts any previous modification or checkout the tree if it was not
- # present.
- 'prepare(None)',
- # Applies the requested PatchSet.
- 'apply_patch(%r)' % self.context.rietveld.patchsets[index],
- ]
- # Commits the patch.
- author_and_reviewer = ''
- if server_hooks_missing:
- author_and_reviewer = (
- '\\n\\nR=rev@example.com\\n\\nAuthor: author@example.com')
- commit_message = (
- "commit(u'foo%s\\n\\n"
- "Review URL: http://nowhere/%d', "
- "u'author@example.com')") % (author_and_reviewer, issue)
- seq.append(commit_message)
-
- return seq
-
- def testNoVerification(self):
- try:
- self._get_pc([], [])
- except ValueError:
- pass
- else:
- self.fail(msg='A PendingManager must require at least one verifier.')
-
- try:
- # Cannot have the same verifier two times.
- self._get_pc(
- [fake.FakeVerifier(base.SUCCEEDED)],
- [fake.FakeVerifier(base.SUCCEEDED)])
- except AssertionError:
- pass
- else:
- self.fail(msg='A PendingManager should not accept the same verifier'
- ' two times.')
-
- def _check_1(self, pc, result):
- issue = 31337
- # 'initial' won't be sent if the pre-patch verification fails, this is to
- # not add noise for ignored CLs.
- send_initial_packet = (result == base.SUCCEEDED or pc.verifiers)
- self.assertEqual(len(pc.queue.iterate()), 0)
- pc.look_for_new_pending_commit()
- self.assertEqual(len(pc.queue.iterate()), 1)
- commit = pc.queue.get(issue)
- self.assertEqual(len(commit.verifications), 0)
- pc.process_new_pending_commit()
- if result == base.FAILED:
- self.assertEqual([], pc.queue.iterate())
- else:
- commit = pc.queue.get(issue)
- self.assertEqual(commit.verifications['fake'].get_state(), result)
- self.assertEqual(len(commit.verifications), 1)
- pc.update_status()
- if result == base.FAILED:
- self.assertEqual([], pc.queue.iterate())
- else:
- commit = pc.queue.get(issue)
- self.assertEqual(commit.verifications['fake'].get_state(), result)
- self.assertEqual('', commit.relpath)
- self.assertEqual(len(commit.verifications), 1)
- self._check_standard_verification(pc, result == base.SUCCEEDED, False)
-
- if result == base.SUCCEEDED:
- self.context.status.check_names(['initial', 'why not', 'commit'])
- elif send_initial_packet:
- self.context.status.check_names(['initial', 'abort'])
- else:
- # Only happens when there is no verifier that requires a patch.
- self.context.status.check_names(['abort'])
-
- def testNoPatchVerification(self):
- pc = self._get_pc([fake.FakeVerifier(base.SUCCEEDED)], [])
- self._check_1(pc, base.SUCCEEDED)
-
- def testPatchVerification(self):
- pc = self._get_pc([], [fake.FakeVerifier(base.SUCCEEDED)])
- self._check_1(pc, base.SUCCEEDED)
-
- def testNoPatchVerificationFail(self):
- pc = self._get_pc([fake.FakeVerifier(base.FAILED)], [])
- self._check_1(pc, base.FAILED)
-
- def testPatchVerificationFail(self):
- pc = self._get_pc([], [fake.FakeVerifier(base.FAILED)])
- self._check_1(pc, base.FAILED)
-
- def testPatchDiscardThrows(self):
- # Handle HTTPError correctly.
- result = []
- issue = 31337
- pc = self._get_pc([], [fake.FakeVerifier(base.FAILED)])
-
- def set_flag_throw(_issue, _patchset, _flag, _value):
- raise urllib2.HTTPError(None, None, None, None, None)
-
- def send_stack(*_args, **_kwargs):
- result.append(True)
-
- self.mock(breakpad, 'SendStack', send_stack)
- self.mock(traceback, 'print_stack', lambda: None)
- self.mock(logging, 'error', lambda _: None)
- pc.context.rietveld.set_flag = set_flag_throw
-
- self.assertEqual(len(pc.queue.iterate()), 0)
- pc.look_for_new_pending_commit()
- self.assertEqual(len(pc.queue.iterate()), 1)
- commit = pc.queue.get(issue)
- self.assertEqual(len(commit.verifications), 0)
- pc.process_new_pending_commit()
- self.assertEqual([], pc.queue.iterate())
- pc.update_status()
- self.assertEqual([], pc.queue.iterate())
- self.context.checkout.check_calls(
- [ 'prepare(None)',
- 'apply_patch(%r)' % (self.context.rietveld.patchsets[0],),
- ])
- self.context.rietveld.check_calls(
- [ _try_comment(),
- "add_comment(%d, %r)" % (issue, pc.FAILED_NO_MESSAGE),
- ])
- self.context.status.check_names(['initial', 'abort'])
-
- def _check_defer_1(self, pc, result):
- issue = 31337
- self.assertEqual(len(pc.queue.iterate()), 0)
- pc.look_for_new_pending_commit()
- self.assertEqual(len(pc.queue.iterate()), 1)
- commit = pc.queue.get(issue)
- self.assertEqual(len(commit.verifications), 0)
- pc.process_new_pending_commit()
- commit = pc.queue.get(issue)
- self.assertEqual('', commit.relpath)
- self.assertEqual(commit.verifications['fake'].get_state(), base.PROCESSING)
- self.assertEqual(len(commit.verifications), 1)
- pc.update_status()
- commit = pc.queue.get(issue)
- self.assertEqual('', commit.relpath)
- self.assertEqual(commit.verifications['fake'].get_state(), result)
- self.assertEqual(len(commit.verifications), 1)
- self._check_standard_verification(pc, result == base.SUCCEEDED, True)
- if result == base.SUCCEEDED:
- self.context.status.check_names(['initial', 'why not', 'why not',
- 'why not', 'commit'])
- else:
- self.context.status.check_names(['initial', 'why not', 'why not',
- 'abort'])
-
- def testDeferNoPatchVerification(self):
- pc = self._get_pc([fake.DeferredFakeVerifier(base.SUCCEEDED, 0)], [])
- self._check_defer_1(pc, base.SUCCEEDED)
-
- def testDeferPatchVerification(self):
- pc = self._get_pc([], [fake.DeferredFakeVerifier(base.SUCCEEDED, 0)])
- self._check_defer_1(pc, base.SUCCEEDED)
-
- def testDeferNoPatchVerificationFail(self):
- pc = self._get_pc([fake.DeferredFakeVerifier(base.FAILED, 0)], [])
- self._check_defer_1(pc, base.FAILED)
-
- def testDeferPatchVerificationFail(self):
- pc = self._get_pc([], [fake.DeferredFakeVerifier(base.FAILED, 0)])
- self._check_defer_1(pc, base.FAILED)
-
- def _check_4(self, f1, f2, f3, f4):
- issue = 31337
- fake1 = fake.FakeVerifier(f1)
- fake1.name = 'fake1'
- fake2 = fake.FakeVerifier(f2)
- fake2.name = 'fake2'
- fake3 = fake.FakeVerifier(f3)
- fake3.name = 'fake3'
- fake4 = fake.FakeVerifier(f4)
- fake4.name = 'fake4'
- nb = 1
- if f1 is base.SUCCEEDED:
- nb = 2
- if f2 is base.SUCCEEDED:
- nb = 3
- if f3 is base.SUCCEEDED:
- nb = 4
- pc = self._get_pc([fake1, fake2], [fake3, fake4])
- self.assertEqual(len(pc.queue.iterate()), 0)
- pc.look_for_new_pending_commit()
- self.assertEqual(len(pc.queue.iterate()), 1)
- commit = pc.queue.get(issue)
- self.assertEqual(len(commit.verifications), 0)
- pc.process_new_pending_commit()
- if not all(f == base.SUCCEEDED for f in (f1, f2, f3, f4)):
- self.assertEqual([], pc.queue.iterate())
- else:
- commit = pc.queue.get(issue)
- self.assertEqual(commit.verifications['fake1'].get_state(), f1)
- self.assertEqual(commit.verifications['fake2'].get_state(), f2)
- self.assertEqual(commit.verifications['fake3'].get_state(), f3)
- self.assertEqual(commit.verifications['fake4'].get_state(), f4)
- self.assertEqual(len(commit.verifications), nb)
- pc.update_status()
- if not all(f == base.SUCCEEDED for f in (f1, f2, f3, f4)):
- self.assertEqual([], pc.queue.iterate())
- else:
- commit = pc.queue.get(issue)
- self.assertEqual(commit.verifications['fake1'].get_state(), f1)
- self.assertEqual(commit.verifications['fake2'].get_state(), f2)
- self.assertEqual(commit.verifications['fake3'].get_state(), f3)
- self.assertEqual(commit.verifications['fake4'].get_state(), f4)
- self.assertEqual(len(commit.verifications), nb)
- self._check_standard_verification(
- pc, all(x == base.SUCCEEDED for x in (f1, f2, f3, f4)), False)
- if all(x == base.SUCCEEDED for x in (f1, f2, f3, f4)):
- self.context.status.check_names(['initial', 'why not', 'commit'])
- else:
- self.context.status.check_names(['initial', 'abort'])
-
- def test4thVerificationFail(self):
- self._check_4(base.SUCCEEDED, base.SUCCEEDED, base.SUCCEEDED, base.FAILED)
-
- def test4Verification(self):
- self._check_4(
- base.SUCCEEDED, base.SUCCEEDED, base.SUCCEEDED, base.SUCCEEDED)
-
- def test4Verification3rdFail(self):
- self._check_4(base.SUCCEEDED, base.SUCCEEDED, base.FAILED, base.SUCCEEDED)
-
- def _check_defer_4(self, f1, f2, f3, f4):
- issue = 31337
- fake1 = fake.DeferredFakeVerifier(f1, 0)
- fake1.name = 'fake1'
- fake2 = fake.DeferredFakeVerifier(f2, 0)
- fake2.name = 'fake2'
- fake3 = fake.DeferredFakeVerifier(f3, 0)
- fake3.name = 'fake3'
- fake4 = fake.DeferredFakeVerifier(f4, 0)
- fake4.name = 'fake4'
- pc = self._get_pc([fake1, fake2], [fake3, fake4])
- self.assertEqual(len(pc.queue.iterate()), 0)
- pc.look_for_new_pending_commit()
- self.assertEqual(len(pc.queue.iterate()), 1)
- commit = pc.queue.get(issue)
- self.assertEqual(len(commit.verifications), 0)
- pc.process_new_pending_commit()
- commit = pc.queue.get(issue)
- self.assertEqual(
- commit.verifications['fake1'].get_state(), base.PROCESSING)
- self.assertEqual(
- commit.verifications['fake2'].get_state(), base.PROCESSING)
- self.assertEqual(
- commit.verifications['fake3'].get_state(), base.PROCESSING)
- self.assertEqual(
- commit.verifications['fake4'].get_state(), base.PROCESSING)
- self.assertEqual(len(commit.verifications), 4)
- pc.update_status()
- self.assertEqual(commit.verifications['fake1'].get_state(), f1)
- self.assertEqual(commit.verifications['fake2'].get_state(), f2)
- self.assertEqual(commit.verifications['fake3'].get_state(), f3)
- self.assertEqual(commit.verifications['fake4'].get_state(), f4)
- self.assertEqual('', commit.relpath)
- self._check_standard_verification(
- pc, all(x == base.SUCCEEDED for x in (f1, f2, f3, f4)), False)
- if all(x == base.SUCCEEDED for x in (f1, f2, f3, f4)):
- self.context.status.check_names(['initial', 'why not', 'why not',
- 'why not', 'commit'])
- else:
- self.context.status.check_names(['initial', 'why not', 'why not',
- 'abort'])
-
- def testDefer4thVerificationFail(self):
- self._check_defer_4(
- base.SUCCEEDED, base.SUCCEEDED, base.SUCCEEDED, base.FAILED)
-
- def testDefer4Verification(self):
- self._check_defer_4(
- base.SUCCEEDED, base.SUCCEEDED, base.SUCCEEDED, base.SUCCEEDED)
-
- def testDefer4Verification3rdFail(self):
- self._check_defer_4(
- base.SUCCEEDED, base.SUCCEEDED, base.FAILED, base.SUCCEEDED)
-
- def testRelPath(self):
- issue = 31337
- verifiers = [
- project_base.ProjectBaseUrlVerifier(
- [r'^%s(.*)$' % re.escape(r'http://example.com/')]),
- ]
- pc = self._get_pc([], verifiers)
- pc.context.rietveld.issues[issue]['base_url'] = 'http://example.com/sub/dir'
- pc.look_for_new_pending_commit()
- self.assertEqual(1, len(pc.queue.iterate()))
- pc.process_new_pending_commit()
- self.assertEqual('sub/dir', pc.queue.get(issue).relpath)
- self.context.checkout.check_calls(
- [ 'prepare(None)',
- 'apply_patch(%r)' % (self.context.rietveld.patchsets[0],)])
- pc.update_status()
- self.context.checkout.check_calls([])
- pc.scan_results()
- self.context.checkout.check_calls(
- # Will sync to HEAD, 124.
- self._prepare_apply_commit(1, issue))
- self.context.rietveld.check_calls(
- [ _try_comment(),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- self.context.status.check_names(['initial', 'why not', 'commit'])
-
- def testCommitBurst(self):
- issue = 31337
- pc = self._get_pc([fake.FakeVerifier(base.SUCCEEDED)], [])
- self.assertEqual(4, pc.MAX_COMMIT_BURST)
- timestamp = [1]
- self.mock(time, 'time', lambda: timestamp[-1])
- for i in range(pc.MAX_COMMIT_BURST + 2):
- self.context.rietveld.issues[i] = (
- self.context.rietveld.issues[issue].copy())
- self.context.rietveld.issues[i]['issue'] = i
- pc.look_for_new_pending_commit()
- self.assertEqual(len(pc.queue.iterate()), pc.MAX_COMMIT_BURST + 3)
- pc.process_new_pending_commit()
- pc.update_status()
- pc.scan_results()
- self.context.checkout.check_calls(
- self._prepare_apply_commit(0, 0) +
- self._prepare_apply_commit(1, 1) +
- self._prepare_apply_commit(2, 2) +
- self._prepare_apply_commit(3, 3))
- self.context.rietveld.check_calls(
- [ _try_comment(0),
- _try_comment(1),
- _try_comment(2),
- _try_comment(3),
- _try_comment(4),
- _try_comment(5),
- _try_comment(),
- 'close_issue(0)',
- "update_description(0, u'foo')",
- "add_comment(0, 'Change committed as 125')",
- 'close_issue(1)',
- "update_description(1, u'foo')",
- "add_comment(1, 'Change committed as 125')",
- 'close_issue(2)',
- "update_description(2, u'foo')",
- "add_comment(2, 'Change committed as 125')",
- 'close_issue(3)',
- "update_description(3, u'foo')",
- "add_comment(3, 'Change committed as 125')",
- ])
- self.assertEqual(3, len(pc.queue.iterate()))
- total = pc.MAX_COMMIT_BURST + 3
- self.context.status.check_names(['initial'] * total +
- (['why not', 'commit'] *
- pc.MAX_COMMIT_BURST) +
- ['why not'] * 3)
-
- # Dry run.
- pc.scan_results()
- self.context.checkout.check_calls([])
- self.context.rietveld.check_calls([])
- self.context.status.check_names(['why not'] * 3)
-
- # Remove one item from the burst.
- pc.recent_commit_timestamps.pop()
- pc.scan_results()
- next_item = pc.MAX_COMMIT_BURST
- self.context.checkout.check_calls(
- self._prepare_apply_commit(next_item, next_item))
- self.context.rietveld.check_calls(
- [ 'close_issue(%d)' % next_item,
- "update_description(%d, u'foo')" % next_item,
- "add_comment(%d, 'Change committed as 125')" % next_item,
- ])
- self.context.status.check_names(['why not', 'commit'] + ['why not'] * 2)
- # After a delay, must flush the queue.
- timestamp.append(timestamp[-1] + pc.COMMIT_BURST_DELAY + 1)
- pc.scan_results()
- self.context.checkout.check_calls(
- self._prepare_apply_commit(next_item + 1, next_item + 1) +
- self._prepare_apply_commit(next_item + 2, issue))
- self.context.rietveld.check_calls(
- [ 'close_issue(%d)' % (next_item + 1),
- "update_description(%d, u'foo')" % (next_item + 1),
- "add_comment(%d, 'Change committed as 125')" % (next_item + 1),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- self.context.status.check_names(['why not', 'commit'] * 2)
-
- def testIgnored(self):
- issue = 31337
- verifiers = [
- project_base.ProjectBaseUrlVerifier(
- [r'^%s(.*)$' % re.escape(r'http://example.com/')]),
- ]
- pc = self._get_pc(verifiers, [])
- pc.context.rietveld.issues[issue]['base_url'] = 'http://unrelated.com/sub'
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- pc.scan_results()
- self.assertEqual(1, len(pc.queue.iterate()))
- self.assertEqual('', pc.queue.get(issue).relpath)
- self.assertEqual(base.IGNORED, pc.queue.get(issue).get_state())
-
- def testServerHooksMissing(self):
- issue = 31337
- verifiers = [
- project_base.ProjectBaseUrlVerifier(
- [r'^%s(.*)$' % re.escape(r'http://example.com/')]),
- ]
- self.context.server_hooks_missing = True
- pc = self._get_pc(verifiers, [])
- pc.context.rietveld.issues[issue]['base_url'] = 'http://example.com/'
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- pc.scan_results()
- self.context.rietveld.check_calls(
- [ _try_comment(),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- self.context.status.check_names(['initial', 'why not', 'commit'])
- self.context.checkout.check_calls(
- self._prepare_apply_commit(0, issue, server_hooks_missing=True))
-
- def testDisapeared(self):
- issue = 31337
- verifiers = [
- project_base.ProjectBaseUrlVerifier(
- [r'^%s(.*)$' % re.escape(r'http://example.com/')]),
- ]
- pc = self._get_pc(verifiers, [])
- pc.context.rietveld.issues[issue]['base_url'] = 'http://unrelated.com/sub'
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- pc.scan_results()
- self.assertEqual(1, len(pc.queue.iterate()))
- del pc.context.rietveld.issues[issue]
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- pc.scan_results()
- self.assertEqual(0, len(pc.queue.iterate()))
- self.context.status.check_names(['abort'])
-
- def _get_pc_reviewer(self):
- verifiers = [
- reviewer_lgtm.ReviewerLgtmVerifier(
- ['.*'], [re.escape('commit-bot@example.com')])
- ]
- pc = self._get_pc(verifiers, [])
- return pc
-
- def _approve(self, sender=None):
- issue = 31337
- if not sender:
- sender = self.context.rietveld.issues[issue]['reviewers'][0]
- self.context.rietveld.issues[issue]['messages'].append(
- {
- 'approval': True,
- 'sender': sender,
- })
-
- def testVerifyDefaultMock(self):
- # Verify mock expectation for the default settings.
- issue = 31337
- pc = self._get_pc_reviewer()
- self.assertEqual(0, len(pc.queue.iterate()))
- pc.look_for_new_pending_commit()
- self.assertEqual(1, len(pc.queue.iterate()))
- # Pop the LGTM.
- pc.queue.iterate()[0].messages.pop(1)
- pc.process_new_pending_commit()
- self.assertEqual(0, len(pc.queue.iterate()))
- pc.update_status()
- self.assertEqual(0, len(pc.queue.iterate()))
- self.context.rietveld.check_calls(
- [ "set_flag(%d, 1, 'commit', False)" % issue,
- "add_comment(%d, %r)" % (issue, reviewer_lgtm.LgtmStatus.NO_LGTM)])
- self.context.status.check_names(['abort'])
-
- def testVerifyDefaultMockPlusLGTM(self):
- # Verify mock expectation with a single approval message.
- issue = 31337
- pc = self._get_pc_reviewer()
- self._approve()
- self.assertEqual(0, len(pc.queue.iterate()))
- pc.look_for_new_pending_commit()
- self.assertEqual(1, len(pc.queue.iterate()))
- pc.process_new_pending_commit()
- self.assertEqual(1, len(pc.queue.iterate()))
- pc.update_status()
- self.assertEqual(1, len(pc.queue.iterate()))
- pc.scan_results()
- self.assertEqual(0, len(pc.queue.iterate()))
- self.context.rietveld.check_calls(
- [ _try_comment(),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- self.context.status.check_names(['initial', 'why not', 'commit'])
- self.context.checkout.check_calls(
- self._prepare_apply_commit(0, issue))
-
- def testDriveBy(self):
- issue = 31337
- pc = self._get_pc_reviewer()
- self._approve()
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- # A new reviewer prevents the commit.
- i = self.context.rietveld.issues[issue]
- i['reviewers'] = i['reviewers'] + ['annoying@dude.org']
- pc.scan_results()
- self.context.rietveld.check_calls(
- [ _try_comment(),
- "set_flag(%d, 1, 'commit', False)" % issue,
- ('add_comment(%d, "List of reviewers changed. annoying@dude.org '
- 'did a drive-by without LGTM\'ing!")') % issue])
- self.context.status.check_names(['initial', 'abort'])
-
- def testDriveByLGTM(self):
- issue = 31337
- pc = self._get_pc_reviewer()
- self._approve()
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- # He's nice, he left a LGTM.
- i = self.context.rietveld.issues[issue]
- i['reviewers'] = i['reviewers'] + ['nice@dude.org']
- self._approve('nice@dude.org')
- pc.scan_results()
- self.assertEqual(0, len(pc.queue.iterate()))
- self.context.rietveld.check_calls(
- [ _try_comment(),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- self.context.status.check_names(['initial', 'why not', 'commit'])
- self.context.checkout.check_calls(
- self._prepare_apply_commit(0, issue))
-
- def testWhyNotUpdates(self):
- issue = 31337
- fake1_change = 1
- fake1 = fake.DeferredFakeVerifier(base.SUCCEEDED, fake1_change)
- fake1.name = 'fake1'
-
- fake2_change = 3
- fake2 = fake.DeferredFakeVerifier(base.SUCCEEDED, fake2_change)
- fake2.name = 'fake2'
- pc = self._get_pc([fake1, fake2], [])
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
-
- self.context.status.check_names(['initial', 'why not'])
-
- # Make sure the 'why not' is only pushed when it changes.
- for i in range(fake2_change * 2):
- expected = ['why not'] if fake1_change == i or fake2_change == i else []
- pc.update_status()
- self.context.status.check_names(expected)
-
- pc.scan_results()
-
- self.context.rietveld.check_calls(
- [_try_comment(),
- 'close_issue(%d)' % issue,
- "update_description(%d, u'foo')" % issue,
- "add_comment(%d, 'Change committed as 125')" % issue])
- self.context.status.check_names(['why not', 'commit'])
- self.context.checkout.check_calls(
- self._prepare_apply_commit(0, issue))
-
-
-if __name__ == '__main__':
- logging.basicConfig(
- level=[logging.ERROR, logging.WARNING, logging.INFO, logging.DEBUG][
- min(sys.argv.count('-v'), 3)],
- format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
- unittest.main()
diff --git a/tests/presubmit_check_test.py b/tests/presubmit_check_test.py
deleted file mode 100755
index 2820b5a..0000000
--- a/tests/presubmit_check_test.py
+++ /dev/null
@@ -1,169 +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 verification/presubmit_check.py."""
-
-import logging
-import os
-import sys
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-from verification import base
-from verification import presubmit_check
-
-import find_depot_tools # pylint: disable=W0611
-from testing_support import trial_dir
-
-# From tests/
-import mocks
-
-
-class PresubmitTest(mocks.TestCase, trial_dir.TrialDirMixIn):
- def setUp(self):
- mocks.TestCase.setUp(self)
- trial_dir.TrialDirMixIn.setUp(self)
-
- # The presubmit check assumes PWD is set accordingly.
- self._old_cwd = os.getcwd()
- os.chdir(self.root_dir)
- with open(os.path.join(self.root_dir, 'hello.txt'), 'wb') as f:
- f.write('allo')
- self.pending.files = ['hello.txt']
-
- def tearDown(self):
- try:
- os.chdir(self._old_cwd)
- trial_dir.TrialDirMixIn.tearDown(self)
- finally:
- mocks.TestCase.tearDown(self)
-
- def _presubmit(self, content):
- # Creates the presubmit check.
- with open(os.path.join(self.root_dir, 'PRESUBMIT.py'), 'wb') as f:
- f.write(content)
-
- def testPresubmitBuggy(self):
- self._presubmit('symbol_not_defined\n')
- self._check(error_message='symbol_not_defined')
-
- def testPresubmitHangs(self):
- self._presubmit('import time\ntime.sleep(5)')
- self._check(error_message='The presubmit check was hung.', expiration=0.2)
-
- def testSuccess(self):
- self._presubmit('')
- self._check()
-
- def testSuccessNotify(self):
- self._presubmit(
- 'def CheckChangeOnCommit(input_api, output_api):\n'
- ' return [output_api.PresubmitNotifyResult("There is no problem")]\n')
- self._check()
-
- def testFailWarning(self):
- self._presubmit(
- 'def CheckChangeOnCommit(input_api, output_api):\n'
- ' return [output_api.PresubmitPromptWarning(\n'
- ' "There is some problems")]\n')
- self._check(error_message='There is some problems\n')
-
- def testFailError(self):
- self._presubmit(
- 'def CheckChangeOnCommit(input_api, output_api):\n'
- ' return [output_api.PresubmitError("Die die please die")]\n')
- self._check(error_message='Die die please die')
-
- def _check(self, error_message=None, expiration=None):
- # checkout is not used yet. To be used to get the list of modified files.
- ver = presubmit_check.PresubmitCheckVerifier(self.context)
- if expiration:
- ver.execution_timeout = expiration
- ver.verify(self.pending)
- ver.update_status(None)
- name = presubmit_check.PresubmitCheckVerifier.name
- self.assertEqual(self.pending.verifications.keys(), [name])
- if error_message:
- self.assertIn(
- error_message, self.pending.verifications[name].error_message)
- self.assertEqual(
- self.pending.verifications[name].get_state(), base.FAILED)
- self.assertIn(error_message, self.pending.error_message())
- else:
- self.assertEqual(None, self.pending.verifications[name].error_message)
- self.assertEqual(
- self.pending.verifications[name].get_state(), base.SUCCEEDED)
- self.assertEqual('', self.pending.error_message())
- self.context.status.check_names(['presubmit'] * 2)
-
- def testPresubmitTryJob(self):
- self._presubmit(
- 'def CheckChangeOnCommit(input_api, output_api):\n'
- ' out = input_api.canned_checks.CheckRietveldTryJobExecution(\n'
- ' 1, 2, 3, 4, 5, 6, absurd=True)\n'
- ' assert [] == out\n'
- ' return out\n')
- self._check()
-
- def testPresubmitTreeOpen(self):
- self._presubmit(
- 'def CheckChangeOnCommit(input_api, output_api):\n'
- ' out = input_api.canned_checks.CheckTreeIsOpen(\n'
- ' 1, 2, 3, 4, 5, 6, absurd=True)\n'
- ' assert [] == out\n'
- ' return out\n')
- self._check()
-
- def testPresubmitPendingBuilds(self):
- self._presubmit(
- 'def CheckChangeOnCommit(input_api, output_api):\n'
- ' out = input_api.canned_checks.CheckBuildbotPendingBuilds(\n'
- ' 1, 2, 3, 4, 5, 6, absurd=True)\n'
- ' assert [] == out\n'
- ' return out\n')
- self._check()
-
- def testPresubmitRietveld(self):
- self._presubmit(
- ('def CheckChangeOnCommit(input_api, output_api):\n'
- ' out = []\n'
- ' if input_api.rietveld.email != %r:\n'
- ' out.append(output_api.PresubmitError(\n'
- ' "email: %%r" %% input_api.rietveld.email))\n'
- # TODO(maruel): Bad! Remove me.
- ' if input_api.rietveld.password != %r:\n'
- ' out.append(output_api.PresubmitError(\n'
- ' "password: %%r" %% input_api.rietveld.password))\n'
- ' if input_api.rietveld.url != %r:\n'
- ' out.append(output_api.PresubmitError(\n'
- ' "url: %%r" %% input_api.rietveld.url))\n'
- ' return out\n') % (
- self.context.rietveld.email,
- self.context.rietveld.password,
- self.context.rietveld.url))
-
- self._check()
-
- def testPresubmitNoFiles(self):
- self.pending.files = []
- self._presubmit(
- 'def CheckChangeOnCommit(input_api, output_api):\n'
- ' return []\n')
- # TODO(maruel): Would make sense to have a more helpful error message.
- self._check(
- 'Presubmit check for 42-23 failed and returned exit status 2.\n\n'
- 'Usage: presubmit_shim.py [options] <files...>\n\n'
- 'presubmit_shim.py: error: For unversioned directory, <files> is not '
- 'optional.\n')
-
-
-if __name__ == '__main__':
- if '-v' in sys.argv:
- logging.basicConfig(level=logging.DEBUG)
- else:
- logging.basicConfig(level=logging.ERROR)
- unittest.main()
diff --git a/tests/project_base_test.py b/tests/project_base_test.py
deleted file mode 100755
index c19afc6..0000000
--- a/tests/project_base_test.py
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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 verification/project_base.py."""
-
-import logging
-import os
-import re
-import sys
-import unittest
-
-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
-import breakpad
-
-# From tests/
-import mocks
-
-from verification import project_base
-
-
-class ProjectBaseTest(mocks.TestCase):
- def test_skip(self):
- self._check(project_base.base.IGNORED, '', False)
-
- def test_base(self):
- self.pending.base_url = 'http://example.com/'
- self._check(project_base.base.SUCCEEDED, '', False)
-
- def test_relpath(self):
- self.pending.base_url = 'http://example.com/foo/bar'
- self._check(project_base.base.SUCCEEDED, 'foo/bar', False)
-
- def test_base_dupe(self):
- self.pending.base_url = 'http://example2.com/foo'
- self._check(project_base.base.SUCCEEDED, 'foo', True)
-
- def _check(self, state, relpath, expected_stack):
- stack = []
- self.mock(breakpad, 'SendStack', lambda *args: stack.append(args))
- base = re.escape('http://example.com/')
- base2 = re.escape('http://example2.com/')
- ver = project_base.ProjectBaseUrlVerifier(
- [
- r'^%s$' % base,
- r'^%s(.+)$' % base,
- r'^%s(.+)$' % base2,
- r'^%s(.+)$' % base2,
- ])
- ver.verify(self.pending)
- ver.update_status([self.pending])
- name = project_base.ProjectBaseUrlVerifier.name
- self.assertEqual([name], self.pending.verifications.keys())
- self.assertEqual(None, self.pending.verifications[name].error_message)
- self.assertEqual(self.pending.verifications[name].get_state(), state)
- self.assertEqual(relpath, self.pending.relpath)
- if expected_stack:
- self.assertEqual(1, len(stack))
- self.assertEqual(2, len(stack[0]))
- self.assertEqual(
- ('pending.base_url triggered multiple matches',), stack[0][0].args)
- self.assertEqual('', stack[0][1])
- else:
- self.assertEqual([], stack)
-
-
-if __name__ == '__main__':
- logging.basicConfig(level=logging.ERROR)
- unittest.main()
diff --git a/tests/project_test.py b/tests/project_test.py
deleted file mode 100755
index a559781..0000000
--- a/tests/project_test.py
+++ /dev/null
@@ -1,508 +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.
-
-"""Integration tests for project.py."""
-
-import logging
-import os
-import random
-import shutil
-import string
-import StringIO
-import sys
-import tempfile
-import time
-import unittest
-import urllib2
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-import projects
-from verification import base
-from verification import presubmit_check
-from verification import try_job_on_rietveld
-
-# From /tests
-import mocks
-
-
-def _try_comment(pc, issue=31337):
- return (
- "add_comment(%d, u'%shttp://localhost/user@example.com/%d/1\\n')" %
- (issue, pc.TRYING_PATCH.replace('\n', '\\n'),
- issue))
-
-
-class TestCase(mocks.TestCase):
- def setUp(self):
- super(TestCase, self).setUp()
- self.mock(projects, '_read_lines', self._read_lines)
- self.mock(
- projects.async_push,
- 'AsyncPush', lambda _1, _2: mocks.AsyncPushMock(self))
- class Dummy(object):
- @staticmethod
- def get_list():
- return []
- if not projects.chromium_committers:
- projects.chromium_committers = Dummy()
- self.mock(
- projects.chromium_committers, 'get_list', self._get_committers_list)
- if not projects.nacl_committers:
- projects.nacl_committers = Dummy()
- self.mock(projects.nacl_committers, 'get_list', self._get_committers_list)
- self.mock(presubmit_check.subprocess2, 'check_output', self._check_output)
- self.mock(urllib2, 'urlopen', self._urlopen)
- self.mock(time, 'time', self._time)
- self.check_output = []
- self.read_lines = []
- self.urlrequests = []
- self.time = []
-
- def tearDown(self):
- try:
- if not self.has_failed():
- self.assertEqual([], self.check_output)
- self.assertEqual([], self.read_lines)
- self.assertEqual([], self.urlrequests)
- self.assertEqual([], self.time)
- finally:
- super(TestCase, self).tearDown()
-
- # Mocks
- def _urlopen(self, url):
- if not self.urlrequests:
- self.fail(url)
- expected_url, data = self.urlrequests.pop(0)
- self.assertEqual(expected_url, url)
- return StringIO.StringIO(data)
-
- @staticmethod
- def _get_committers_list():
- return ['user@example.com', 'user@example.org']
-
- def _read_lines(self, root, error):
- if not self.read_lines:
- self.fail(root)
- a = self.read_lines.pop(0)
- self.assertEqual(a[0], root)
- self.assertEqual(a[1], error)
- return a[2]
-
- def _check_output(self, *args, **kwargs):
- # For now, ignore the arguments. Change if necessary.
- if not self.check_output:
- self.fail((args, kwargs))
- return self.check_output.pop(0)
-
- def _time(self):
- self.assertTrue(self.time)
- return self.time.pop(0)
-
-
-class ProjectTest(TestCase):
- def setUp(self):
- super(ProjectTest, self).setUp()
-
- def test_loaded(self):
- members = (
- 'blink', 'chromium', 'chromium_deps', 'gyp', 'nacl', 'skia', 'tools')
- self.assertEqual(sorted(members), sorted(projects.supported_projects()))
-
- def test_all(self):
- # Make sure it's possible to load each project.
- self.time = [1] * 2
- root_dir = os.path.join(os.getcwd(), 'root_dir')
- chromium_status_pwd = os.path.join(root_dir, '.chromium_status_pwd')
- skia_status_pwd = os.path.join(root_dir, '.skia_status_pwd')
- mapping = {
- 'blink': {
- 'lines': [
- chromium_status_pwd, 'chromium-status password', ['foo'],
- ],
- 'pre_patch_verifiers': ['project_bases', 'reviewer_lgtm'],
- 'verifiers': ['try job rietveld', 'tree status'],
- },
- 'chromium': {
- 'lines': [
- chromium_status_pwd, 'chromium-status password', ['foo'],
- ],
- 'pre_patch_verifiers': ['project_bases', 'reviewer_lgtm'],
- 'verifiers': ['try job rietveld', 'tree status'],
- },
- 'chromium_deps': {
- 'lines': [
- chromium_status_pwd, 'chromium-status password', ['foo'],
- ],
- 'pre_patch_verifiers': ['project_bases', 'reviewer_lgtm'],
- 'verifiers': ['presubmit'],
- },
- 'gyp': {
- 'lines': [
- chromium_status_pwd, 'chromium-status password', ['foo'],
- ],
- 'pre_patch_verifiers': ['project_bases', 'reviewer_lgtm'],
- 'verifiers': ['tree status'],
- },
- 'nacl': {
- 'lines': [
- chromium_status_pwd, 'chromium-status password', ['foo'],
- ],
- 'pre_patch_verifiers': ['project_bases', 'reviewer_lgtm'],
- 'verifiers': ['presubmit', 'tree status'],
- },
- 'skia': {
- 'lines': [
- skia_status_pwd, 'skia-status password', ['foo'],
- ],
- 'pre_patch_verifiers': ['project_bases', 'reviewer_lgtm'],
- 'verifiers': ['presubmit', 'tree status'],
- },
- 'tools': {
- 'lines': [
- chromium_status_pwd, 'chromium-status password', ['foo'],
- ],
- 'pre_patch_verifiers': ['project_bases', 'reviewer_lgtm'],
- 'verifiers': ['presubmit'],
- },
- }
- for project in sorted(projects.supported_projects()):
- logging.debug(project)
- self.assertEqual([], self.read_lines)
- expected = mapping.pop(project)
- self.read_lines = [expected['lines']]
- p = projects.load_project(
- project, 'user', root_dir, self.context.rietveld, True)
- self.assertEqual(
- expected['pre_patch_verifiers'],
- [x.name for x in p.pre_patch_verifiers],
- (expected['pre_patch_verifiers'],
- [x.name for x in p.pre_patch_verifiers],
- project))
- self.assertEqual(
- expected['verifiers'], [x.name for x in p.verifiers],
- (expected['verifiers'],
- [x.name for x in p.verifiers],
- project))
- if project == 'tools':
- # Add special checks for it.
- project_bases_verifier = p.pre_patch_verifiers[0]
- branch = '\\@[a-zA-Z0-9\\-_\\.]+$'
- self.assertEqual(
- [
- # svn
- '^svn\\:\\/\\/svn\\.chromium\\.org\\/chrome/trunk/tools(|/.*)$',
- '^svn\\:\\/\\/chrome\\-svn\\/chrome/trunk/tools(|/.*)$',
- '^svn\\:\\/\\/chrome\\-svn\\.corp\\/chrome/trunk/tools(|/.*)$',
- '^svn\\:\\/\\/chrome\\-svn\\.corp\\.google\\.com\\/chrome/trunk/'
- 'tools(|/.*)$',
- '^http\\:\\/\\/src\\.chromium\\.org\\/svn/trunk/tools(|/.*)$',
- '^https\\:\\/\\/src\\.chromium\\.org\\/svn/trunk/tools(|/.*)$',
- '^http\\:\\/\\/src\\.chromium\\.org\\/chrome/trunk/tools(|/.*)$',
- '^https\\:\\/\\/src\\.chromium\\.org\\/chrome/trunk/tools(|/.*)$',
-
- # git
- '^https?\\:\\/\\/git\\.chromium\\.org\\/git\\/chromium\\/tools\\/'
- '([a-z0-9\\-_]+)(?:\\.git)?' + branch,
- '^https?\\:\\/\\/git\\.chromium\\.org\\/chromium\\/tools\\/'
- '([a-z0-9\\-_]+)(?:\\.git)?' + branch,
- '^https?\\:\\/\\/chromium\\.googlesource\\.com\\/chromium\\/tools'
- '\\/([a-z0-9\\-_]+)(?:\\.git)?' + branch,
- '^https?\\:\\/\\/chromium\\.googlesource\\.com\\/a\\/chromium\\/'
- 'tools\\/([a-z0-9\\-_]+)(?:\\.git)?' + branch,
- ],
- project_bases_verifier.project_bases)
- self.assertEqual({}, mapping)
-
-
-class ChromiumStateLoad(TestCase):
- # Load a complete state and ensure the code is reacting properly.
- def setUp(self):
- super(ChromiumStateLoad, self).setUp()
- self.buildbot = mocks.BuildbotMock(self)
- self.mock(
- try_job_on_rietveld.buildbot_json, 'Buildbot', lambda _: self.buildbot)
- self.tempdir = tempfile.mkdtemp(prefix='project_test')
- self.now = None
-
- def tearDown(self):
- try:
- shutil.rmtree(self.tempdir)
- finally:
- super(ChromiumStateLoad, self).tearDown()
-
- def _add_build(self, builder, buildnumber, revision, steps, completed):
- """Adds a build with a randomly generated key."""
- key = ''.join(random.choice(string.ascii_letters) for _ in xrange(8))
- build = self.buildbot.add_build(
- builder, buildnumber, revision, key, completed, None)
- build.steps.extend(steps)
- return key
-
- def _LoadPendingManagerState(self, issue):
- self.urlrequests = [
- ( 'http://chromium-status.appspot.com/allstatus?format=json&endTime=%d' %
- (self.now - 300),
- # In theory we should return something but nothing works fine.
- '[]'),
- ]
- self.read_lines = [
- [
- os.path.join(self.tempdir, '.chromium_status_pwd'),
- 'chromium-status password',
- ['foo'],
- ],
- ]
- self.context.rietveld.patchsets_properties[(issue, 1)] = {}
-
- self.time = [self.now] * 1
- pc = projects.load_project(
- 'chromium', 'invalid', self.tempdir, self.context.rietveld, False)
- self.assertEqual(0, len(self.time))
- pc.context = self.context
- pc.load(os.path.join(ROOT_DIR, 'chromium.%d.json' % issue))
-
- # Verify the content a bit.
- self.assertEqual(1, len(pc.queue.iterate()))
- self.assertEqual(issue, pc.queue.get(issue).issue)
- expected = [
- u'presubmit',
- u'project_bases',
- u'reviewer_lgtm',
- u'tree status',
- u'try job rietveld',
- ]
- self.assertEqual(expected, sorted(pc.queue.get(issue).verifications))
-
- return pc
-
- def _verify_final_state(self, verifications, why_not, rietveld_calls):
- for name, obj in verifications.iteritems():
- if name == 'try job rietveld':
- self.assertEqual(base.PROCESSING, obj.get_state(), name)
- self.assertEqual(why_not, obj.why_not())
- else:
- self.assertEqual(base.SUCCEEDED, obj.get_state(), name)
- self.assertEqual(None, obj.why_not())
-
- if name == 'tree status':
- self.time = [self.now] * 1
- self.assertEqual(False, obj.postpone(), name)
- self.assertEqual(0, len(self.time))
- else:
- self.assertEqual(False, obj.postpone(), name)
- self.context.rietveld.check_calls(rietveld_calls)
-
- def testLoadState(self):
- self.now = 1354207000.
- issue = 31337
- pending_manager = self._LoadPendingManagerState(issue)
-
- # Then fix the crap out of it.
- self.time = [self.now] * 3
- pending_manager.update_status()
- self.assertEqual(0, len(self.time))
- self.assertEqual(1, len(pending_manager.queue.iterate()))
-
- why_not = (u'Waiting for the following jobs:\n'
- ' win_rel: sync_integration_tests\n')
- rietveld_calls = [
- "trigger_try_jobs(%d, 1, 'CQ', False, 'HEAD', {u'win_rel': "
- "[u'sync_integration_tests']})" % issue
- ]
- self._verify_final_state(pending_manager.queue.get(issue).verifications,
- why_not, rietveld_calls)
-
- def testLoadState11299256(self):
- # Loads a saved state and try to revive it.
- self.now = 1354551606.
- issue = 11299256
- pending_manager = self._LoadPendingManagerState(issue)
- self._add_build('ios_rel_device', 1, 2, [], 4)
-
- # Then fix the crap out of it.
- self.time = [self.now] * 3
- pending_manager.update_status()
- self.assertEqual(1, len(self.time))
- self.assertEqual(1, len(pending_manager.queue.iterate()))
-
- why_not = (u'Waiting for the following jobs:\n'
- ' ios_rel_device: compile\n')
- rietveld_calls = []
- # ios_rel_device seems lost. CQ should not reissue it now to avoid
- # overloading the tryserver.
- self._verify_final_state(pending_manager.queue.get(issue).verifications,
- why_not, rietveld_calls)
-
- def testLoadState12208028(self):
- # Loads a saved state and try to revive it.
- self.now = 1360256000.
- issue = 12208028
- pending_manager = self._LoadPendingManagerState(issue)
-
- # Then fix the crap out of it.
- self.time = [self.now] * 3
- pending_manager.update_status()
- self.assertEqual(0, len(self.time))
- self.assertEqual(1, len(pending_manager.queue.iterate()))
-
- why_not = (u'Waiting for the following jobs:\n'
- ' android_dbg_triggered_tests: build\n')
- rietveld_calls = [
- "trigger_try_jobs(%d, 1, 'CQ', False, 'HEAD', {u'android_dbg': "
- "[u'build']})" % issue
- ]
- self._verify_final_state(pending_manager.queue.get(issue).verifications,
- why_not, rietveld_calls)
-
- def testLoadState12253015(self):
- # Loads a saved state and try to revive it.
- self.now = 1360256000.
- issue = 12253015
- pending_manager = self._LoadPendingManagerState(issue)
-
- # Then fix the crap out of it.
- self.time = [self.now] * 3
- pending_manager.update_status()
- self.assertEqual(0, len(self.time))
- self.assertEqual(1, len(pending_manager.queue.iterate()))
-
- why_not = (
- u'Waiting for the following jobs:\n'
- ' win7_aura: browser_tests\n'
- ' win_rel: chrome_frame_tests,chrome_frame_net_tests,browser_tests,'
- 'nacl_integration,sync_integration_tests,installer_util_unittests,'
- 'content_browsertests,chrome_frame_unittests,mini_installer_test\n')
- rietveld_calls = [
- "trigger_try_jobs(%d, 1, 'CQ', False, 'HEAD', {u'win7_aura': "
- "[u'browser_tests']})" % issue,
- ]
- self._verify_final_state(pending_manager.queue.get(issue).verifications,
- why_not, rietveld_calls)
-
- def testLoadState12633013(self):
- # Loads a saved state and try to revive it.
- self.now = 1363610000.
- issue = 12633013
- pending_manager = self._LoadPendingManagerState(issue)
-
- # Then fix the crap out of it.
- self.time = [self.now] * 3
- pending_manager.update_status()
- self.assertEqual(0, len(self.time))
- self.assertEqual(1, len(pending_manager.queue.iterate()))
-
- why_not = (
- u'Waiting for the following jobs:\n'
- ' android_dbg_triggered_tests: slave_steps\n')
- rietveld_calls = [
- "trigger_try_jobs(%d, 1, 'CQ', False, 'HEAD', {u'android_dbg': "
- "[u'slave_steps']})" % issue,
- ]
- self._verify_final_state(pending_manager.queue.get(issue).verifications,
- why_not, rietveld_calls)
-
- def testLoadStateSwarm(self):
- # Loads a saved state and try to revive it.
- self.now = 1360256000.
- issue = 666
- pending_manager = self._LoadPendingManagerState(issue)
-
- # Then fix the crap out of it.
- self.time = [self.now] * 5
- pending_manager.update_status()
- self.assertEqual(0, len(self.time))
- self.assertEqual(1, len(pending_manager.queue.iterate()))
-
- why_not = (u'Waiting for the following jobs:\n'
- ' linux_rel: browser_tests\n'
- ' mac_rel: browser_tests\n'
- ' win_rel: browser_tests\n')
- # TODO(csharp): These triggered events should be the swarm versions,
- # change them once swarm tests are enabled by default.
- rietveld_calls = [
- "trigger_try_jobs(%d, 1, 'CQ', False, 'HEAD', {u'linux_rel': "
- "[u'browser_tests']})" % issue,
- "trigger_try_jobs(%d, 1, 'CQ', False, 'HEAD', {u'mac_rel': "
- "[u'browser_tests']})" % issue,
- "trigger_try_jobs(%d, 1, 'CQ', False, 'HEAD', {u'win_rel': "
- "[u'browser_tests']})" % issue,
- ]
- self._verify_final_state(pending_manager.queue.get(issue).verifications,
- why_not, rietveld_calls)
-
- def test_tbr(self):
- self.time = map(lambda x: float(x*35), range(15))
- self.urlrequests = [
- ('https://chromium-status.appspot.com/allstatus?format=json&endTime=85',
- # Cheap hack here.
- '[]'),
- ]
- root_dir = os.path.join(os.getcwd(), 'root_dir')
- self.read_lines = [
- [
- os.path.join(root_dir, '.chromium_status_pwd'),
- 'chromium-status password',
- ['foo'],
- ],
- ]
- pc = projects.load_project(
- 'chromium', 'commit-bot-test', root_dir, self.context.rietveld, True)
- pc.context = self.context
- issue = self.context.rietveld.issues[31337]
- self.context.rietveld.patchsets_properties[(31337, 1)] = {}
-
- # A TBR= patch without reviewer nor messages, like a webkit roll.
- issue['description'] += '\nTBR='
- issue['reviewers'] = []
- issue['messages'] = []
- issue['owner_email'] = u'user@example.com'
- issue['base_url'] = u'svn://svn.chromium.org/chrome/trunk/src'
- pc.look_for_new_pending_commit()
- pc.process_new_pending_commit()
- pc.update_status()
- pc.scan_results()
- self.assertEqual(1, len(pc.queue.iterate()))
- key = self._add_build('chromium_presubmit', 123456, 124,
- [mocks.BuildbotBuildStep('presubmit', False)], True)
- self.context.rietveld.patchsets_properties[(31337, 1)] = {
- 'try_job_results': [{
- 'builder': "chromium_presubmit",
- 'key': key,
- 'buildnumber': "123456",
- }]}
- build = self.buildbot.builders['chromium_presubmit'].builds[123456]
- build.steps[0].simplified_result = True
- pc.update_status()
- pc.scan_results()
- self.assertEqual(0, len(pc.queue.iterate()))
- # check_calls
- self.context.rietveld.check_calls([
- _try_comment(pc),
- "trigger_try_jobs(31337, 1, 'CQ', False, 'HEAD', "
- "{u'chromium_presubmit': ['presubmit']})",
- 'close_issue(31337)',
- "update_description(31337, u'foo\\nTBR=')",
- "add_comment(31337, 'Change committed as 125')",
- ])
- self.context.checkout.check_calls([
- 'prepare(None)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[0],
- 'prepare(None)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[1],
- "commit(u'foo\\nTBR=\\n\\nReview URL: http://nowhere/31337', "
- "u'user@example.com')",
- ])
- self.context.status.check_names(['initial', 'why not', 'why not',
- 'why not', 'commit'])
-
-
-
-if __name__ == '__main__':
- logging.basicConfig(
- level=logging.DEBUG if '-v' in sys.argv else logging.WARNING,
- format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
- unittest.main()
diff --git a/tests/reduce_test_data.py b/tests/reduce_test_data.py
deleted file mode 100644
index c1f7bd1..0000000
--- a/tests/reduce_test_data.py
+++ /dev/null
@@ -1,223 +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.
-"""Reduce the amount of data in ../test/data/*.json"""
-
-import json
-import logging
-import optparse
-import os
-import re
-import sys
-
-
-class Filterer(object):
- def __init__(self):
- self._deleted_builds = {}
- self.max_cached_builds = 10
- self._allowed_builders = ('linux_clang', 'linux', 'linux_touch')
-
- def reset(self):
- self._deleted_builds = {}
-
- def reduce_data(self, data):
- """Reduces the amount of data sent from a server to simplify testing and the
- amount of test data stored.
- """
- self.reset()
- for line in data[:]:
- original_url, original_response = line
- # Unpack and filter the response.
- new_url, new_response = self.filter_response(
- original_url, json.loads(original_response))
- if not new_url or new_response is None:
- data.remove(line)
- continue
- # Repack the string.
- line[1] = json.dumps(new_response, separators=(',',':'))
- logging.info('%s length: %d -> %d' % (
- new_url, len(original_response), len(line[1])))
- if len(line[1]) > 20000:
- logging.debug(line[1])
- return data
-
- def filter_response(self, url, response):
- """Trims a single request.
-
- |response| must be decoded json. Decoded json will be returned.
- """
- # Builders
- match = re.match('.+/json/builders/(\w+)(|\?filter=1)$', url)
- if match:
- return url, self._filter_builder(match.group(1), response)
-
- match = re.match('.+/json/builders(|\?filter=1)$', url)
- if match:
- for builder in response.keys():
- value = self._filter_builder(builder, response[builder])
- if value is None:
- del response[builder]
- else:
- response[builder] = value
- return url, response
-
- # Pending
- match = re.match('.+/json/builders/(\w+)/pendingBuilds(|\?filter=1)$', url)
- if match:
- assert match.group(1) in self._allowed_builders
- return url, self._filter_pending(response)
-
- # Builds
- match = re.match('.+/json/builders/(\w+)/builds/_all(|\?filter=1)$', url)
- if match:
- builder = match.group(1)
- assert builder in self._allowed_builders, url
- keys = response.keys()
- keys = [int(k) for k in keys if int(k) not in self._deleted(builder)]
- keys = sorted(keys)[:self.max_cached_builds]
- response = dict((k, v) for k, v in response.iteritems() if int(k) in keys)
- return url, response
-
- match = re.match('.+/json/builders/(\w+)/builds/\?(.+?)(|\&filter=1)$', url)
- if match:
- assert match.group(1) in self._allowed_builders
- # Ignore the query, reconstruct it from what it kept.
- for build in response.keys():
- value = self._filter_build(response[build])
- if value is None:
- del response[build]
- else:
- response[build] = value
- if not response:
- return None, None
- url = '%s?%s' % (
- url.split('?', 1)[0],
- '&'.join('select=%s' % b for b in sorted(response)))
- return url, response
-
- match = re.match('.+/json/builders/(\w+)/builds/(\d+)(|\?filter=1)$', url)
- if match:
- return url, self._filter_build(response)
-
- # Slaves
- match = re.match('.+/json/slaves/([^/]+?)(|\?filter=1)$', url)
- if match:
- return url, self._filter_slave(match.group(1), response)
-
- match = re.match('.+/json/slaves(|\?filter=1)$', url)
- if match:
- for slave in response.keys():
- value = self._filter_slave(slave, response[slave])
- if value is None:
- del response[slave]
- else:
- response[slave] = value
- return url, response
-
- # Project
- match = re.match('.+/json/project(|\?filter=1)$', url)
- if match:
- return url, response
-
- assert False, url
-
- @staticmethod
- def _filter_pending(pending):
- """Trim pendingBuilds."""
- return pending[:2]
-
- def _filter_builder(self, builder, response):
- """Trims a builder.
-
- Reduces the number of cached builds.
- """
- # TODO(maruel): Reduce the number of slaves.
- if builder not in self._allowed_builders:
- return None
- builds_kept = response['cachedBuilds'][-self.max_cached_builds:]
- builds_discarded = response['cachedBuilds'][:-self.max_cached_builds]
- assert len(builds_kept) <= self.max_cached_builds
- assert (
- len(builds_kept) + len(builds_discarded) ==
- len(response['cachedBuilds']))
- if builds_discarded:
- assert min(builds_kept) > max(builds_discarded)
- response['cachedBuilds'] = builds_kept
- self._deleted(builder).union(int(b) for b in builds_discarded)
- if response.get('currentBuilds'):
- response['currentBuilds'] = [
- build for build in response['currentBuilds']
- if int(build) not in self._deleted(builder)
- ]
- if response.get('pendingBuilds', 0) > 2:
- response['pendingBuilds'] = 2
- return response
-
- def _filter_build(self, response):
- """Trims a build."""
- if response['builderName'] not in self._allowed_builders:
- return None
- if int(response['number']) in self._deleted(response['builderName']):
- return None
- # TODO(maruel): Fix StatusJson to not push that much logs data.
- if 'logs' in response:
- del response['logs']
- if response.get('currentStep') and response['currentStep'].get('logs'):
- del response['currentStep']['logs']
- for step in response['steps']:
- if 'logs' in step:
- del step['logs']
- return response
-
- def _filter_slave(self, _slave, response):
- """Trims a slave."""
- if response.get('builders'):
- for builder in response['builders'].keys():
- if not builder in self._allowed_builders:
- del response['builders'][builder]
- if not response['builders']:
- return None
- if response.get('builderName'):
- if not response['builderName'] in self._allowed_builders:
- return None
- if response.get('runningBuilds'):
- for i, build in enumerate(response['runningBuilds'][:]):
- value = self._filter_build(build)
- if value is None:
- response['runningBuilds'].remove(build)
- else:
- response['runningBuilds'][i] = value
- return response
-
- def _deleted(self, builder):
- return self._deleted_builds.get(builder, set())
-
-
-def main():
- parser = optparse.OptionParser(
- description=sys.modules['__main__'].__doc__)
- parser.add_option('-v', '--verbose', action='count', default=0)
- parser.add_option('-d', '--dry-run', action='store_true')
- options, args = parser.parse_args()
- if args:
- parser.error('Unsupported args: %s' % args)
- logging.basicConfig(
- level=[logging.WARNING, logging.INFO, logging.DEBUG][
- min(2, options.verbose)])
-
- datadir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data')
- for filename in os.listdir(datadir):
- if not filename.endswith('.json') or filename.endswith('_expected.json'):
- continue
- filepath = os.path.join(datadir, filename)
- print 'Processing %s' % filename
- data = json.load(open(filepath))
- data = Filterer().reduce_data(data)
- if not options.dry_run:
- json.dump(data, open(filepath, 'w'), separators=(',',':'))
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/tests/reviewer_lgtm_test.py b/tests/reviewer_lgtm_test.py
deleted file mode 100755
index 9914ac3..0000000
--- a/tests/reviewer_lgtm_test.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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 verification/reviewer_lgtm.py."""
-
-import logging
-import os
-import re
-import sys
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-from verification import base
-from verification import reviewer_lgtm
-
-# From tests/
-import mocks
-
-
-class ReviewerLgtmTest(mocks.TestCase):
- def testNoMessage(self):
- self.pending.reviewers = ['reviewer@example.com']
- self._check(reviewer_lgtm.LgtmStatus.NO_COMMENT)
-
- def testLgtmOwner(self):
- self.pending.messages = [
- {'approval': True, 'sender': self.pending.owner}
- ]
- self.pending.reviewers = [self.pending.owner]
- self._check(reviewer_lgtm.LgtmStatus.NO_LGTM)
-
- def testLgtmOk(self):
- self.pending.messages = [
- {'approval': True, 'sender': 'reviewer@example.com'} ]
- self.pending.reviewers = ['reviewer@example.com']
- self._check(None)
-
- def testLgtmWrongDomain(self):
- self.pending.messages = [
- {'approval': True, 'sender': 'georges@example2.com'} ]
- self.pending.reviewers = ['georges@example2.com']
- self._check(reviewer_lgtm.LgtmStatus.NO_LGTM)
-
- def testLgtmBlacklist(self):
- self.pending.messages = [
- {
- 'approval': False, 'text': 'fix your stuff',
- 'sender': 'reviewer@example.com'
- },
- {'approval': True, 'sender': 'commit-bot@example.com'},
- ]
- self.pending.reviewers = ['reviewer@example.com', 'commit-bot@example.com']
- self._check(reviewer_lgtm.LgtmStatus.NO_LGTM)
-
- def testTBR(self):
- self.pending.description = 'Webkit roll\nTBR='
- self._check(None)
-
- def _check(self, error_message):
- ver = reviewer_lgtm.ReviewerLgtmVerifier(
- [r'^[\-\w]+\@example\.com$'],
- [re.escape('commit-bot@example.com')])
- ver.verify(self.pending)
- ver.update_status([self.pending])
- name = reviewer_lgtm.ReviewerLgtmVerifier.name
- self.assertEqual(
- self.pending.verifications.keys(), [name])
- self.assertEqual(
- self.pending.verifications[name].error_message, error_message)
- if error_message:
- self.assertEqual(
- self.pending.verifications[name].get_state(), base.FAILED)
- else:
- self.assertEqual(
- self.pending.verifications[name].get_state(), base.SUCCEEDED)
-
-
-if __name__ == '__main__':
- logging.basicConfig(
- level=[logging.WARNING, logging.INFO, logging.DEBUG][
- min(sys.argv.count('-v'), 2)],
- format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
- unittest.main()
diff --git a/tests/tree_status_test.py b/tests/tree_status_test.py
deleted file mode 100755
index 874db1e..0000000
--- a/tests/tree_status_test.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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 verification/tree_status.py."""
-
-import calendar
-import json
-import logging
-import os
-import StringIO
-import sys
-import unittest
-import urllib2
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-# From tests/
-import mocks
-
-from verification import tree_status
-
-
-class TreeStatusTest(mocks.TestCase):
- def setUp(self):
- super(TreeStatusTest, self).setUp()
- reference = calendar.timegm((2010, 1, 1, 12, 0, 0, 0, 0, -1))
- self.mock(tree_status.time, 'time', lambda: reference)
- self.urlrequests = []
- self.mock(urllib2, 'urlopen', self._urlopen)
-
- def tearDown(self):
- super(TreeStatusTest, self).setUp()
-
- def _urlopen(self, _):
- return StringIO.StringIO(json.dumps(self.urlrequests.pop(0)))
-
- def test_fail(self):
- self.urlrequests = [
- [
- {
- 'date': '2010-01-01 11:56:00.0',
- 'general_state': 'open',
- 'message': 'Foo',
- },
- {
- 'date': '2010-01-01 11:57:00.0',
- 'general_state': 'closed',
- 'message': 'Bar',
- },
- {
- 'date': '2010-01-01 11:58:00.0',
- 'general_state': 'open',
- 'message': 'Baz',
- },
- ],
- ]
- obj = tree_status.TreeStatus(tree_status_url='foo')
- self.assertEqual(True, obj.postpone())
- self.assertEqual(u'Tree is currently not open: Bar', obj.why_not())
- self.assertEqual([], self.urlrequests)
-
- def test_pass(self):
- self.urlrequests = [
- [
- {
- 'date': '2010-01-01 11:54:00.0',
- 'general_state': 'open',
- 'message': 'Foo',
- },
- {
- 'date': '2010-01-01 11:57:00.0',
- 'general_state': 'open',
- 'message': 'Bar',
- },
- {
- 'date': '2010-01-01 11:53:00.0',
- 'general_state': 'closed',
- 'message': 'Baz',
- },
- ],
- ]
- obj = tree_status.TreeStatus(tree_status_url='foo')
- self.assertEqual(False, obj.postpone())
- self.assertEqual(None, obj.why_not())
- self.assertEqual([], self.urlrequests)
-
- def test_skip_tree_check(self):
- self.urlrequests = [
- [
- {
- 'date': '2010-01-01 11:56:00.0',
- 'general_state': 'open',
- 'message': 'Foo',
- },
- {
- 'date': '2010-01-01 11:57:00.0',
- 'general_state': 'closed',
- 'message': 'Bar',
- },
- {
- 'date': '2010-01-01 11:58:00.0',
- 'general_state': 'open',
- 'message': 'Baz',
- },
- ],
- ]
- # Create a dummy pending obj to pass to the verifier.
- class dummy_pending(object):
- issue = 123
- description = 'foobarbaz\nNOTREECHECKS=true\nfoobarbaz'
- verifications = {}
- def __init__(self):
- pass
-
- verifier = tree_status.TreeStatusVerifier('dummy_status_url')
- verifier.verify(dummy_pending())
-
- obj = dummy_pending.verifications['tree status']
-
- self.assertEquals(tree_status.AlwaysOpenTreeStatus, type(obj))
- self.assertEqual(False, obj.postpone())
- self.assertEqual(None, obj.why_not())
- # None of the urls should have been opened since it is a skip request.
- self.assertTrue(len(self.urlrequests[0]) == 3)
-
- def test_state(self):
- t = tree_status.TreeStatus(tree_status_url='foo')
- self.assertEqual(tree_status.base.SUCCEEDED, t.get_state())
- self.assertEqual([], self.urlrequests)
-
-
-if __name__ == '__main__':
- logging.basicConfig(
- level=[logging.ERROR, logging.WARNING, logging.INFO, logging.DEBUG][
- min(sys.argv.count('-v'), 3)],
- format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
- unittest.main()
diff --git a/tests/try_job_on_rietveld_test.py b/tests/try_job_on_rietveld_test.py
deleted file mode 100755
index 2cdeb4f..0000000
--- a/tests/try_job_on_rietveld_test.py
+++ /dev/null
@@ -1,1553 +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 verification/try_job_on_rietveld.py."""
-
-import logging
-import os
-import random
-import string
-import sys
-import time
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-# In tests/
-import mocks
-from mocks import BuildbotBuildStep
-
-# In root
-from verification import base
-from verification import try_job_steps
-from verification import try_job_on_rietveld
-
-
-# Some tests produce more output if verbose, so we need to
-# track if we are in verbose mode or not.
-VERBOSE = False
-
-
-def _posted(builders):
- return 'trigger_try_jobs(42, 23, \'CQ\', False, \'HEAD\', %s)' % str(builders)
-
-
-def gen_job_pending(**kwargs):
- value = {
- '__persistent_type__': 'RietveldTryJobPending',
- 'builder': None,
- 'clobber': False,
- 'init_time': 1.,
- 'requested_steps': [],
- 'revision': None,
- 'tries': 1,
- }
- assert all(arg in value for arg in kwargs)
- value.update(kwargs)
- return value
-
-
-def gen_job(**kwargs):
- value = {
- '__persistent_type__': 'RietveldTryJob',
- 'build': None,
- 'builder': None,
- 'clobber': False,
- 'completed': False,
- 'init_time': 1.,
- 'parent_key': None,
- 'requested_steps': [],
- 'revision': None,
- 'started': 1,
- 'steps_failed': [],
- 'steps_passed': [],
- 'tries': 1,
- }
- assert all(arg in value for arg in kwargs)
- value.update(kwargs)
- return value
-
-
-def gen_jobs(**kwargs):
- value = {
- '__persistent_type__': 'RietveldTryJobs',
- 'error_message': None,
- 'irrelevant': [],
- 'pendings': [],
- 'skipped': False,
- 'step_verifiers': [],
- 'try_jobs': {},
- }
- for arg in kwargs:
- if arg not in value:
- raise Exception('Invalid arg %s' % str(arg))
-
- value.update(kwargs)
-
- # Convert all the verifiers to dicts (i.e. serialize them).
- value['step_verifiers'] = [step.as_dict() for step in value['step_verifiers']]
-
- return value
-
-
-class TryJobOnRietveldBase(mocks.TestCase):
- # Base class for all test cases testing try_job_rietveld.py.
- def setUp(self):
- super(TryJobOnRietveldBase, self).setUp()
- self.timestamp = []
- self.mock(time, 'time', self._time)
- self.email = 'user1@example.com'
- self.user = 'user1'
- self.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ]
-
- def tearDown(self):
- try:
- if not self.has_failed():
- self.assertEqual(0, len(self.timestamp))
- finally:
- super(TryJobOnRietveldBase, self).tearDown()
-
- def _time(self):
- self.assertTrue(self.timestamp)
- return self.timestamp.pop(0)
-
-
-class TryRunnerRietveldTest(TryJobOnRietveldBase):
- # These test cases setup self.try_runner and call .verify() and
- # .update_status() to test it.
- def setUp(self):
- super(TryRunnerRietveldTest, self).setUp()
- self.try_runner = None
- self._change_step_verifiers(self.step_verifiers)
-
- # Patch it a little.
- self.buildbot_status = mocks.BuildbotMock(self)
- self.mock(
- try_job_on_rietveld.buildbot_json,
- 'Buildbot',
- lambda _: self.buildbot_status)
-
- self.pending.revision = 123
-
- # It's what rietveld is going to report.
- self._key = (self.pending.issue, self.pending.patchset)
- self.context.rietveld.patchsets_properties[self._key] = {
- 'try_job_results': [],
- }
-
- def tearDown(self):
- try:
- if not self.has_failed():
- # Not to confuse with self.context.status which is AsyncPush mock.
- self.buildbot_status.check_calls([])
- finally:
- super(TryRunnerRietveldTest, self).tearDown()
-
- def _change_step_verifiers(self, step_verifiers):
- """Change the current step verifiers and update any objects that used
- the old ones."""
- self.step_verifiers = step_verifiers
-
- # time is requested in the object construction below and self.timestamp
- # will be empty at the end of this function call.
- self.timestamp.append(1.)
- self.try_runner = try_job_on_rietveld.TryRunnerRietveld(
- self.context,
- 'http://foo/bar',
- self.email,
- self.step_verifiers,
- ['ignored_step'],
- 'sol',
- )
- self.try_runner.update_latency = 0
-
-
- def _get_verif(self):
- """Returns the RietveldTryJobs instance associated to this PendCommit."""
- return self.pending.verifications[self.try_runner.name]
-
- def _assert_pending_is_empty(self):
- actual = self._get_verif().as_dict()
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder=u'linux', requested_steps=['test1', 'test2']),
- gen_job_pending(builder=u'mac', requested_steps=['test1', 'test2']),
- ])
- self.assertEqual(expected, actual)
-
- def _add_build(self, builder, buildnumber, revision, steps, completed):
- """Adds a build with a randomly generated key.
-
- Adds the build to both the try server and to Rietveld.
- """
- key = ''.join(random.choice(string.ascii_letters) for _ in xrange(8))
- build = self.buildbot_status.add_build(
- builder, buildnumber, revision, key, completed, None)
- build.steps.extend(steps)
- self.context.rietveld.patchsets_properties[self._key][
- 'try_job_results'].append(
- {
- 'key': key,
- 'builder': builder,
- 'buildnumber': buildnumber,
- })
- return key
-
- def _add_triggered_build(self, builder, buildnumber, revision, steps,
- completed, parent_key):
- """Adds a triggered build with a randomly generated key.
-
- Adds the build to both the try server and to Rietveld.
- """
- key = ''.join(random.choice(string.ascii_letters) for _ in xrange(8))
- build = self.buildbot_status.add_build(
- builder, buildnumber, revision, key, completed, parent_key)
- build.steps.extend(steps)
- self.context.rietveld.patchsets_properties[self._key][
- 'try_job_results'].append(
- {
- 'key': key,
- 'builder': builder,
- 'buildnumber': buildnumber,
- })
- return key
-
- def check_pending(self, num_status, rietveld, state, err):
- self.context.status.check_names(['try job rietveld'] * num_status)
- self.context.rietveld.check_calls(rietveld)
- self.assertEqual(state, self.pending.get_state())
- self.assertEqual(err, self.pending.error_message())
-
- def check_verif(self, need, waiting):
- rietveld_try_jobs = self._get_verif()
- self.assertEqual(need, rietveld_try_jobs.tests_need_to_be_run(1.))
- self.assertEqual(waiting, rietveld_try_jobs.tests_waiting_for_result())
- if not waiting:
- why_not = None
- else:
- why_not = (
- 'Waiting for the following jobs:\n' +
- ''.join(
- ' %s: %s\n' % (b, ','.join(waiting[b])) for b in sorted(waiting)))
- self.assertEqual(why_not, rietveld_try_jobs.why_not())
-
- def call_verify(
- self, timestamps, num_status, rietveld, state, err, need, waiting):
- """Calls TryRunnerRietveld.verify().
-
- Makes sure the specified number of time.time() calls occurred.
- """
- self.assertEqual(0, len(self.timestamp))
- self.timestamp = timestamps
- self.try_runner.verify(self.pending)
- self.assertEqual(0, len(self.timestamp))
- self.check_pending(num_status, rietveld, state, err)
- self.check_verif(need, waiting)
-
- def call_update_status(
- self, timestamps, num_status, rietveld, state, err, need, waiting):
- """Calls TryRunnerRietveld.update_status().
- """
- self.timestamp = timestamps
- self.try_runner.update_status([self.pending])
- self.check_pending(num_status, rietveld, state, err)
- self.check_verif(need, waiting)
-
- def testVoid(self):
- self.assertEqual(self.pending.verifications.keys(), [])
- self.assertEqual(base.PROCESSING, self.pending.get_state())
- self.assertEqual('', self.pending.error_message())
-
- def testVoidUpdate(self):
- self.try_runner.update_status([])
- self.assertEqual(base.PROCESSING, self.pending.get_state())
- self.assertEqual('', self.pending.error_message())
-
- def testVerificationVoid(self):
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- self._assert_pending_is_empty()
-
- def testVerificationUpdateNoJob(self):
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- self._assert_pending_is_empty()
- self.call_update_status(
- [1.] * 2,
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- self._assert_pending_is_empty()
-
- def testVerificationUpdate(self):
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- self._assert_pending_is_empty()
- key = self._add_build('mac', 32, 42, [], False)
-
- self.call_update_status(
- [1.] * (3 + 1 * VERBOSE),
- num_status=1,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder='linux', requested_steps=['test1', 'test2']),
- ],
- try_jobs={
- key: gen_job(
- builder='mac',
- build=32,
- requested_steps=['test1', 'test2'],
- revision=42),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testVerificationSuccess(self):
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- key1 = self._add_build(
- 'mac', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
- key2 = self._add_build(
- 'linux', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
-
- self.call_update_status(
- [1.] * (4 + 2 * VERBOSE),
- num_status=2,
- rietveld=[],
- state=base.SUCCEEDED,
- err='',
- need={},
- waiting={})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- try_jobs={
- key1: gen_job(
- builder=u'mac',
- build=32,
- requested_steps=['test1', 'test2'],
- steps_passed=['test1', 'test2'],
- revision=42),
- key2: gen_job(
- builder=u'linux',
- build=32,
- requested_steps=['test1', 'test2'],
- steps_passed=['test1', 'test2'],
- revision=42),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testVerificationRetrySuccess(self):
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- key1 = self._add_build(
- 'mac', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', False)],
- False)
- key2 = self._add_build(
- 'linux', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
-
- self.call_update_status(
- [1.] * (5 + 2 * VERBOSE),
- num_status=3,
- rietveld=[_posted({u"mac": ["test2"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'mac': ['test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder=u'mac', requested_steps=['test2'], tries=2),
- ],
- try_jobs={
- key1: gen_job(
- builder=u'mac',
- build=32,
- requested_steps=['test1', 'test2'],
- steps_failed=['test2'],
- steps_passed=['test1'],
- revision=42),
- key2: gen_job(
- builder=u'linux',
- build=32,
- requested_steps=['test1', 'test2'],
- steps_passed=['test1', 'test2'],
- revision=42),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- # Add a new build on mac where test2 passed.
- key3 = self._add_build(
- 'mac', 33, 42,
- [BuildbotBuildStep('test1', False), BuildbotBuildStep('test2', True)],
- False)
- self.call_update_status(
- [1.] * (5 + 1 * VERBOSE),
- num_status=3,
- rietveld=[],
- state=base.SUCCEEDED,
- err='',
- need={},
- waiting={})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- try_jobs={
- key1: gen_job(
- build=32,
- builder='mac',
- requested_steps=['test1', 'test2'],
- steps_failed=['test2'],
- steps_passed=['test1'],
- revision=42),
- key2: gen_job(
- builder='linux',
- build=32,
- requested_steps=['test1', 'test2'],
- revision=42,
- steps_passed=['test1', 'test2']),
- key3: gen_job(
- builder='mac',
- build=33,
- requested_steps=['test2'],
- revision=42,
- steps_failed=['test1'],
- steps_passed=['test2'],
- tries=2),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testVerificationRetryRetry(self):
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- key1 = self._add_build(
- 'mac', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', False)],
- False)
- key2 = self._add_build(
- 'linux', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
-
- self.call_update_status(
- [1.] * (5 + 2 * VERBOSE),
- num_status=3,
- rietveld=[_posted({u"mac": ["test2"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'mac': ['test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder='mac', requested_steps=['test2'], tries=2),
- ],
- try_jobs={
- key1: gen_job(
- builder='mac',
- build=32,
- requested_steps=['test1', 'test2'],
- steps_failed=['test2'],
- steps_passed=['test1'],
- revision=42),
- key2: gen_job(
- builder='linux',
- build=32,
- requested_steps=['test1', 'test2'],
- steps_passed=['test1', 'test2'],
- revision=42),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- # Add a new build on mac where test2 failed.
- key3 = self._add_build('mac', 33, 42, [BuildbotBuildStep('test2', False)],
- False)
-
- self.call_update_status(
- [1.] * (6 + 1 * VERBOSE),
- num_status=4,
- rietveld=[_posted({u"mac": ["test2"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'mac': ['test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder='mac', requested_steps=['test2'], tries=3),
- ],
- try_jobs={
- key1: gen_job(
- build=32,
- builder='mac',
- requested_steps=['test1', 'test2'],
- steps_failed=['test2'],
- steps_passed=['test1'],
- revision=42),
- key2: gen_job(
- builder='linux',
- build=32,
- requested_steps=['test1', 'test2'],
- revision=42,
- steps_passed=['test1', 'test2']),
- key3: gen_job(
- builder='mac',
- build=33,
- requested_steps=['test2'],
- revision=42,
- steps_failed=['test2'],
- tries=2),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- # Add a new build on mac where test2 failed again! Too bad now.
- self._add_build('mac', 34, 42, [BuildbotBuildStep('test2', False)], False)
-
- self.call_update_status(
- [1.] * (6 + 2 * VERBOSE),
- num_status=4,
- rietveld=[],
- state=base.FAILED,
- err=(
- u'Retried try job too often on mac for step(s) test2\n'
- 'http://foo/bar/buildstatus?builder=mac&number=34'),
- need={},
- waiting={})
-
- def testVerificationRetryRetryTriggered(self):
- step_verifiers = [
- try_job_steps.TryJobTriggeredSteps(
- builder_name='triggered',
- trigger_name='builder',
- steps={'test1': 'build'})]
- self._change_step_verifiers(step_verifiers)
-
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"builder": ["build"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'triggered': ['test1']})
-
- # The trigger bot passed, but the triggered bot fails.
- key1 = self._add_build('builder', 1, 42, [BuildbotBuildStep('build', True)],
- True)
- self._add_triggered_build('triggered', 1, 42,
- [BuildbotBuildStep('test1', False)], True, key1)
- triggered_key_1 = 'triggered/1_triggered_%s' % key1
-
- self.call_update_status(
- [1.] * (6 + 2 * VERBOSE),
- num_status=4,
- rietveld=[_posted({u"builder": ["build"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'triggered': ['test1']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobTriggeredSteps(
- builder_name='triggered',
- trigger_name='builder',
- steps={'test1': 'build'})],
- pendings=[
- gen_job_pending(builder='builder', requested_steps=['build'], tries=2),
- gen_job_pending(builder='triggered', requested_steps=['test1'],
- tries=2),
- ],
- try_jobs={
- key1: gen_job(
- builder='builder',
- build=1,
- requested_steps=['build'],
- steps_passed=['build'],
- completed=True,
- revision=42,
- tries=1,
- ),
- triggered_key_1: gen_job(
- builder='triggered',
- build=1,
- requested_steps=['test1'],
- steps_failed=['test1'],
- completed=True,
- revision=42,
- parent_key=key1,
- tries=1,
- ),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- # Triggered bot fails again.
- key2 = self._add_build('builder', 2, 42, [BuildbotBuildStep('build', True)],
- True)
- self._add_triggered_build('triggered', 2, 42,
- [BuildbotBuildStep('test1', False)], True, key2)
- triggered_key_2 = 'triggered/2_triggered_%s' % key2
-
- self.call_update_status(
- [1.] * (6 + 2 * VERBOSE),
- num_status=4,
- rietveld=[_posted({u"builder": ["build"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'triggered': ['test1']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobTriggeredSteps(
- builder_name='triggered',
- trigger_name='builder',
- steps={'test1': 'build'})],
- pendings=[
- gen_job_pending(builder='builder', requested_steps=['build'], tries=3),
- gen_job_pending(builder='triggered', requested_steps=['test1'],
- tries=3),
- ],
- try_jobs={
- key1: gen_job(
- builder='builder',
- build=1,
- requested_steps=['build'],
- steps_passed=['build'],
- completed=True,
- revision=42,
- tries=1,
- ),
- triggered_key_1: gen_job(
- builder='triggered',
- build=1,
- requested_steps=['test1'],
- steps_failed=['test1'],
- completed=True,
- revision=42,
- parent_key=key1,
- tries=1,
- ),
- key2: gen_job(
- builder='builder',
- build=2,
- requested_steps=['build'],
- steps_passed=['build'],
- completed=True,
- revision=42,
- tries=2,
- ),
- triggered_key_2: gen_job(
- builder='triggered',
- build=2,
- requested_steps=['test1'],
- steps_failed=['test1'],
- completed=True,
- revision=42,
- parent_key=key2,
- tries=2,
- ),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- # Triggered bot fails for the 3rd time, abort.
- key3 = self._add_build('builder', 3, 1, [BuildbotBuildStep('build', True)],
- True)
- self._add_triggered_build('triggered', 3, 1,
- [BuildbotBuildStep('test1', False)], True, key3)
- self.call_update_status(
- [1.] * (4 + 3 * VERBOSE),
- num_status=2,
- rietveld=[],
- state=base.FAILED,
- # TODO(csharp): Its the triggered bot that keeps failing, so that should
- # be the bot mentioned here.
- err=(
- u'Retried try job too often on builder for step(s) build\n'
- 'http://foo/bar/buildstatus?builder=builder&number=3'),
- need={},
- waiting={})
-
- def testVerificationPreviousJobGood(self):
- # Reuse the previous job if good.
- key1 = self._add_build(
- 'mac', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
-
- self.call_verify(
- [1.] * (2 + 1 * VERBOSE),
- num_status=1,
- rietveld=[_posted({u"linux": ["test1", "test2"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2']})
-
- # Sends an update to note the job was started.
- self.call_update_status(
- [1.] * 3,
- num_status=1,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder='linux', requested_steps=['test1', 'test2']),
- ],
- try_jobs={
- key1: gen_job(
- build=32,
- builder='mac',
- # Note that requested_steps is empty since testfilter is not parsed.
- steps_passed=['test1', 'test2'],
- revision=42,
- # tries == 0 since we didn't start it.
- tries=0),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def _expired(self, now, **kwargs):
- # Exacly like testVerificationPreviousJobGood except that jobs are always
- # too old, either by revision or by timestamp.
- key1 = self._add_build(
- 'mac', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
-
- self.call_verify(
- [now] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
-
- self.call_update_status(
- [now] * 2,
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- irrelevant=[key1],
- pendings=[
- gen_job_pending(
- builder='linux', requested_steps=['test1', 'test2'], **kwargs),
- gen_job_pending(
- builder='mac', requested_steps=['test1', 'test2'], **kwargs),
- ])
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testVerificationPreviousExpiredRevisionTooOld(self):
- self.context.checkout.revisions = lambda _r1, _r2: 201
- self._expired(1.)
-
- def testVerificationPreviousExpiredDateTooOld(self):
- # 5 days old.
- old = 5*24*60*60.
- self._expired(old, init_time=old)
-
- def _previous_job_partially_good(
- self, steps, steps_failed, completed, expect_mac_retry, num_time_verify,
- num_time_update, num_status_update):
- # Reuse the previous job tests that passed.
- key1 = self._add_build('mac', 32, 42, steps, completed)
-
- expected_calls = [_posted({u"linux": ["test1", "test2"]})]
- pendings = [
- gen_job_pending(builder='linux', requested_steps=['test1', 'test2'])
- ]
- if expect_mac_retry:
- # No need to run test2 again.
- expected_calls.append(_posted({u"mac": ["test1"]}))
- pendings.append(gen_job_pending(builder='mac', requested_steps=['test1']))
- self.call_verify(
- [1.] * (num_time_verify + 1 * VERBOSE),
- num_status=len(expected_calls),
- rietveld=expected_calls,
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1']})
- self.call_update_status(
- [1.] * num_time_update,
- num_status=num_status_update,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=pendings,
- try_jobs={
- key1: gen_job(
- build=32,
- builder='mac',
- # Note that requested_steps is empty since testfilter is not parsed.
- steps_failed=steps_failed,
- steps_passed=['test2'],
- revision=42,
- # tries == 0 since we didn't start it.
- tries=0,
- completed=completed),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testVerificationPreviousJobPartiallyGood1(self):
- # Only test1 will be run on mac since test2 had passed.
- self._previous_job_partially_good(
- [BuildbotBuildStep('test1', False), BuildbotBuildStep('test2', True)],
- ['test1'], True, True, 3, 2, 0)
-
- def testVerificationPreviousJobPartiallyGood2(self):
- # Let's assume a testfilter was used and test1 wasn't run. Only test1 will
- # be run on mac.
- self._previous_job_partially_good(
- [BuildbotBuildStep('test2', True)], [], True, True, 3, 2, 0)
-
- def testVerificationPreviousJobPartiallyGood3(self):
- # Test that we do not retry on mac until it completes. This is because
- # CQ does not parse the test filter, so we do not know if the mac job
- # will run test1.
- # It's kind of weird, because it sends a status report like if it had
- # started this job.
- self._previous_job_partially_good(
- [BuildbotBuildStep('test2', True)], [], False, False, 2, 3, 1)
-
- def testVerificationPreviousJobsWereGood(self):
- # Reuse the previous jobs tests that passed. Do not send any try job.
- key1 = self._add_build(
- 'mac', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
- key2 = self._add_build(
- 'linux', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- False)
-
- # People will love that!
- self.call_verify(
- [1.] * (1 + 2 * VERBOSE),
- num_status=0,
- rietveld=[],
- state=base.SUCCEEDED,
- err='',
- need={},
- waiting={})
-
- self.call_update_status(
- [1.],
- num_status=0,
- rietveld=[],
- state=base.SUCCEEDED,
- err='',
- need={},
- waiting={})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- try_jobs={
- key1: gen_job(
- build=32,
- builder='mac',
- # Note that requested_steps is empty since testfilter is not parsed.
- steps_passed=['test1', 'test2'],
- revision=42,
- # tries == 0 since we didn't start it.
- tries=0),
- key2: gen_job(
- build=32,
- builder='linux',
- # Note that requested_steps is empty since testfilter is not parsed.
- steps_passed=['test1', 'test2'],
- revision=42,
- # tries == 0 since we didn't start it.
- tries=0),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testRietveldTryJobsPendingWasLost(self):
- # Requested a pending try job but the request was lost.
- self.try_runner.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ]
- self.call_verify(
- [1.] * 2,
- num_status=1,
- rietveld=[_posted({u"linux": ["test1"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- self.call_update_status(
- [1.] * 2,
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
-
- # 3 minutes later
- later = 3. * 60
- self.call_update_status(
- [later] * 2,
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ],
- pendings=[
- gen_job_pending(builder=u'linux', requested_steps=['test1']),
- ])
-
- # 1h later.
- later = 60. * 60
- self.call_update_status(
- [later] * (2 + 1 * VERBOSE),
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ],
- pendings=[
- gen_job_pending(builder=u'linux', requested_steps=['test1']),
- ])
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testRietveldTryJobsPendingTookSomeTime(self):
- # Requested a pending try job but the request took some time to propagate.
- self.try_runner.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ]
- self.call_verify(
- [1.] * 2,
- num_status=1,
- rietveld=[_posted({u"linux": ["test1"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- self.call_update_status(
- [1.] * 2,
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- # 3 minutes later
- later = 3. * 60
- self.call_update_status(
- [later] * 2,
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ],
- pendings=[
- gen_job_pending(builder=u'linux', requested_steps=['test1']),
- ])
- self.assertEqual(expected, self._get_verif().as_dict())
-
- # Queue it.
- self.buildbot_status.builders['linux'].pending_builds.data = [
- {
- "builderName":"linux",
- "builds":[],
- "reason":"%d-1: None" % self.pending.issue,
- "source": {
- "changes": [
- {
- "at": "Wed 05 Dec 2012 19:11:19",
- "files": [],
- "number": 268857,
- "project": "",
- "properties": [],
- "rev": "171358",
- "revision": "171358",
- "when": 1354763479,
- "who": self.pending.owner,
- },
- ],
- "hasPatch": False,
- "project": "chrome",
- "repository": "",
- "revision": "171358",
- },
- "submittedAt": 1354763479,
- },
- ]
-
- # 1h later, it must not have queued another job.
- later = 60. * 60
- self.call_update_status(
- [later] * 2,
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ],
- pendings=[
- gen_job_pending(
- builder=u'linux', requested_steps=['test1']),
- ])
- self.assertEqual(expected, self._get_verif().as_dict())
-
- def testRietveldHung(self):
- # Send a try job and have it never start.
- self.try_runner.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ]
- self.call_verify(
- [1.] * 2,
- num_status=1,
- rietveld=[_posted({u"linux": ["test1"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
- key1 = self._add_build(
- 'linux', 32, 42,
- [],
- False)
- self.call_update_status(
- [1.] * (3 + 1 * VERBOSE),
- num_status=1,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
-
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ],
- try_jobs={
- key1: gen_job(
- builder=u'linux',
- build=32,
- requested_steps=['test1'],
- steps_passed=[],
- revision=42,
- completed=False),
- })
-
- self.assertEqual(expected, self._get_verif().as_dict())
-
- # Fast forward in time to make the try job request "timeout". Basically,
- # the Try Job trigger on Rietveld was somehow ignored by the Try Server
- # itself. Test our chance by sending another trigger.
- later = 40. * 24 * 60 * 60
- # Update the internal status.
- self.call_update_status(
- [later] * 3,
- num_status=1,
- rietveld=[_posted({u"linux": ["test1"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1']})
-
- self.assertEqual(
- 'Waiting for the following jobs:\n linux: test1\n',
- self._get_verif().why_not())
-
- expected_timed_out = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1']),
- ],
- irrelevant=[key1],
- pendings=[
- gen_job_pending(
- builder=u'linux', init_time=later, requested_steps=['test1']),
- ])
- self.assertEqual(expected_timed_out, self._get_verif().as_dict())
-
- def testVerificationBrokenTestOnHead(self):
- # The CQ retries until it aborts because the test is broken at HEAD on
- # mac/test2.
- self.call_verify(
- [1.] * 3,
- num_status=2,
- rietveld=[
- _posted({u"linux": ["test1", "test2"]}),
- _posted({u"mac": ["test1", "test2"]}),
- ],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'linux': ['test1', 'test2'], 'mac': ['test1', 'test2']})
- key1 = self._add_build(
- 'mac', 32, 42,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', False)],
- True)
- key2 = self._add_build(
- 'linux', 12, 22,
- [BuildbotBuildStep('test1', True), BuildbotBuildStep('test2', True)],
- True)
-
- self.call_update_status(
- [1.] * (5 + 2 * VERBOSE),
- num_status=3,
- rietveld=[_posted({u"mac": ["test2"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'mac': ['test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder=u'mac', requested_steps=['test2'], tries=2),
- ],
- try_jobs={
- key1: gen_job(
- builder=u'mac',
- build=32,
- completed=True,
- requested_steps=['test1', 'test2'],
- steps_failed=['test2'],
- steps_passed=['test1'],
- revision=42),
- key2: gen_job(
- builder=u'linux',
- build=12,
- completed=True,
- requested_steps=['test1', 'test2'],
- steps_passed=['test1', 'test2'],
- revision=22),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
-
- key3 = self._add_build(
- 'mac', 33, 42,
- [BuildbotBuildStep('test2', False)],
- True)
- self.call_update_status(
- [1.] * (4 + 1 * VERBOSE),
- num_status=2,
- rietveld=[_posted({u"mac": ["test2"]})],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'mac': ['test2']})
- expected = gen_jobs(
- step_verifiers=[
- try_job_steps.TryJobSteps(
- builder_name='linux',
- steps=['test1', 'test2']),
- try_job_steps.TryJobSteps(
- builder_name='mac',
- steps=['test1', 'test2']),
- ],
- pendings=[
- gen_job_pending(builder=u'mac', requested_steps=['test2'], tries=3),
- ],
- try_jobs={
- key1: gen_job(
- build=32,
- builder=u'mac',
- completed=True,
- requested_steps=['test1', 'test2'],
- steps_failed=['test2'],
- steps_passed=['test1'],
- revision=42),
- key2: gen_job(
- builder=u'linux',
- build=12,
- completed=True,
- requested_steps=['test1', 'test2'],
- revision=22,
- steps_passed=['test1', 'test2']),
- key3: gen_job(
- builder=u'mac',
- completed=True,
- build=33,
- requested_steps=['test2'],
- revision=42,
- steps_failed=['test2'],
- tries=2),
- })
- self.assertEqual(expected, self._get_verif().as_dict())
- self.call_update_status(
- [1.] * (2 + 1 * VERBOSE),
- num_status=0,
- rietveld=[],
- state=base.PROCESSING,
- err='',
- need={},
- waiting={'mac': ['test2']})
-
-
-class RietveldTryJobsTest(TryJobOnRietveldBase):
- # Directly test RietveldTryJobs without constructing a TryRunnerRietveld.
- # They should never touch self.timestamp.
- def testInitial(self):
- now = 1.
- jobs = try_job_on_rietveld.RietveldTryJobs()
- jobs.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='builder1',
- steps=['test10', 'test11']),
- ]
- jobs.try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=12,
- revision=13,
- requested_steps=['test10'],
- started=int(now),
- steps_passed=['test10'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None)
- self.assertEqual({'builder1': ['test11']}, jobs.tests_need_to_be_run(now))
- self.assertEqual({'builder1': ['test11']}, jobs.tests_waiting_for_result())
-
- def testPending(self):
- now = 1.
- jobs = try_job_on_rietveld.RietveldTryJobs()
- jobs.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='builder1',
- steps=['test10', 'test11']),
- ]
- jobs.try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=12,
- revision=13,
- requested_steps=['test10'],
- started=int(now),
- steps_passed=['test10'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None)
- jobs.pendings.append(
- try_job_on_rietveld.RietveldTryJobPending(
- init_time=now,
- builder='builder1',
- revision=13,
- requested_steps=['test11'],
- clobber=False,
- tries=1))
- self.assertEqual({}, jobs.tests_need_to_be_run(now))
- self.assertEqual({'builder1': ['test11']}, jobs.tests_waiting_for_result())
-
- def testTriggeredPending(self):
- # Construct an instance that has both tests to trigger and tests that are
- # pending results.
- now = 1.
- jobs = try_job_on_rietveld.RietveldTryJobs()
- jobs.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='builder1',
- steps=['test10', 'test11']),
- try_job_steps.TryJobSteps(
- builder_name='builder2',
- steps=['test20', 'test21']),
- ]
- jobs.try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=12,
- revision=13,
- requested_steps=['test10'],
- started=int(now),
- steps_passed=['test10'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None)
- jobs.try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder2',
- build=13,
- revision=14,
- requested_steps=[],
- started=int(now),
- steps_passed=['test21'],
- steps_failed=[],
- clobber=False,
- completed=False,
- tries=1,
- parent_key=None)
- jobs.pendings.append(
- try_job_on_rietveld.RietveldTryJobPending(
- init_time=now,
- builder='builder2',
- revision=14,
- requested_steps=['test20'],
- clobber=False,
- tries=1))
- # test11 is still not queued to be run but build with test20 in it has still
- # not started yet.
- self.assertEqual({'builder1': ['test11']}, jobs.tests_need_to_be_run(now))
- self.assertEqual(
- {'builder1': ['test11'], 'builder2': ['test20']},
- jobs.tests_waiting_for_result())
-
- def testAddTriggeredBot(self):
- jobs = try_job_on_rietveld.RietveldTryJobs()
- jobs.step_verifiers = [try_job_steps.TryJobTriggeredSteps(
- builder_name='tester1',
- trigger_name='builder1',
- steps={'test3': 'trigger'})]
- self.assertEqual({'builder1': ['trigger']}, jobs.tests_need_to_be_run(1.))
- self.assertEqual({'tester1': ['test3']}, jobs.tests_waiting_for_result())
-
- def testGenerateWatchedBuilders(self):
- jobs = try_job_on_rietveld.RietveldTryJobs()
- jobs.step_verifiers = [
- try_job_steps.TryJobSteps(
- builder_name='builder1',
- steps=['test']),
- try_job_steps.TryJobTriggeredSteps(
- builder_name='triggered1',
- trigger_name='trigger_bot1',
- steps={'test': 'test'}),
- try_job_steps.TryJobTriggeredOrNormalSteps(
- builder_name='triggered2',
- trigger_name='trigger_bot2',
- trigger_bot_steps=['test'],
- steps={'test': 'test'},
- use_triggered_bot=False)
- ]
-
- expected_watched_builders = [
- 'builder1',
- 'trigger_bot1',
- 'trigger_bot2',
- 'triggered1',
- 'triggered2'
- ]
- self.assertEqual(sorted(expected_watched_builders),
- sorted(jobs.watched_builders()))
-
-
-if __name__ == '__main__':
- logging.basicConfig(
- level=[logging.WARNING, logging.INFO, logging.DEBUG][
- min(sys.argv.count('-v'), 2)],
- format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
- if '-v' in sys.argv:
- VERBOSE = True
- unittest.TestCase.maxDiff = None
- unittest.main()
diff --git a/tests/try_job_steps_tests.py b/tests/try_job_steps_tests.py
deleted file mode 100755
index a0871cc..0000000
--- a/tests/try_job_steps_tests.py
+++ /dev/null
@@ -1,686 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2013 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 verification/try_job_steps.py."""
-
-import os
-import sys
-import unittest
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-from verification import try_job_steps
-from verification import try_job_on_rietveld
-
-
-def CreateRietveldTryJob(builder, requested_steps, steps_passed, steps_failed):
- return try_job_on_rietveld.RietveldTryJob(
- init_time=1.,
- builder=builder,
- build=1,
- revision=1,
- requested_steps=requested_steps,
- started=1,
- steps_passed=steps_passed,
- steps_failed=steps_failed,
- clobber=False,
- completed=False,
- tries=1,
- parent_key=None)
-
-
-class NeedToRunTest(unittest.TestCase):
- def test_no_tries(self):
- self.assertEqual(
- set(['test1', 'test2']),
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), {}))
-
- def test_non_matching_try(self):
- tries = [
- CreateRietveldTryJob(
- builder='different',
- requested_steps=[],
- steps_passed=[],
- steps_failed=[]),
- ]
-
- self.assertEqual(
- set(['test1', 'test2']),
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
-
- def test_partial_match_need_trigger(self):
- tries = [
- CreateRietveldTryJob(
- builder='bot',
- requested_steps=['test1'],
- steps_passed=['test1'],
- steps_failed=[]),
- ]
-
- self.assertEqual(
- set(['test2']),
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
-
- def test_partial_match_no_trigger(self):
- tries = [
- CreateRietveldTryJob(
- builder='bot',
- requested_steps=['test1', 'test2'],
- steps_passed=['test1'],
- steps_failed=[]),
- ]
-
- self.assertEqual(
- set(),
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
-
- def test_full_match(self):
- tries = [
- CreateRietveldTryJob(
- builder='bot',
- requested_steps=['test1', 'test2'],
- steps_passed=['test1', 'test2'],
- steps_failed=[]),
- ]
-
- self.assertEqual(
- set(),
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries))
-
-
-class WaitingForTest(unittest.TestCase):
- def test_no_tries(self):
- self.assertEqual(
- set(['test1', 'test2']),
- try_job_steps.waiting_for('bot', ['test1', 'test2'], {}))
-
- def test_failed_try(self):
- tries = [
- CreateRietveldTryJob(
- builder='bot',
- requested_steps=['test1', 'test2'],
- steps_passed=[],
- steps_failed=['test1', 'test2']),
- ]
-
- self.assertEqual(
- set(['test1', 'test2']),
- try_job_steps.waiting_for('bot', ['test1', 'test2'], tries))
-
- def test_partial_successful_try(self):
- tries = [
- CreateRietveldTryJob(
- builder='bot',
- requested_steps=['test1', 'test2'],
- steps_passed=['test1'],
- steps_failed=[]),
- ]
-
- self.assertEqual(
- set(['test2']),
- try_job_steps.waiting_for('bot', ['test1', 'test2'], tries))
-
- def test_successful_try(self):
- tries = [
- CreateRietveldTryJob(
- builder='bot',
- requested_steps=['test1', 'test2'],
- steps_passed=['test1', 'test2'],
- steps_failed=[]),
- ]
-
- self.assertEqual(
- set(),
- try_job_steps.waiting_for('bot', ['test1', 'test2'], tries))
-
-
-class TryJobTriggeredStepsTest(unittest.TestCase):
- def test_waiting_for(self):
- triggered_verifier = try_job_steps.TryJobTriggeredSteps(
- builder_name='triggered_bot',
- trigger_name='parent_bot',
- steps={
- 'test1': 'trigger1',
- 'test2': 'trigger1',
- 'test3': 'trigger2',
- })
-
- self.assertEqual(
- ('triggered_bot', set(['test1', 'test2', 'test3'])),
- triggered_verifier.waiting_for({}))
-
- def test_need_to_trigger(self):
- triggered_verifier = try_job_steps.TryJobTriggeredSteps(
- builder_name='triggered_bot',
- trigger_name='parent_bot',
- steps={
- 'test1': 'trigger1',
- 'test2': 'trigger1',
- 'test3': 'trigger2',
- })
-
- self.assertEqual(
- ('parent_bot', set(['trigger1', 'trigger2'])),
- triggered_verifier.need_to_trigger({}, 1.))
-
- # With a Try Job running that will run test3, we shouldn't care
- # about trigger2.
- try_jobs = {
- 'key1': try_job_on_rietveld.RietveldTryJob(
- init_time=1.,
- builder='parent_bot',
- build=12,
- revision=13,
- requested_steps=['triggered1', 'triggered2'],
- started=1,
- steps_passed=['triggered1', 'triggered2'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None),
- 'key2': try_job_on_rietveld.RietveldTryJob(
- init_time=1.,
- builder='triggered_bot',
- build=12,
- revision=13,
- requested_steps=['test1', 'test2', 'test3'],
- started=1,
- steps_passed=[],
- steps_failed=['test1', 'test2'],
- clobber=False,
- completed=False,
- tries=1,
- parent_key='key1')}
- self.assertEqual(
- ('parent_bot', set(['trigger1'])),
- triggered_verifier.need_to_trigger(try_jobs, 1.))
-
- # A parent bot is running with steps that won't trigger the needed
- # tests, so nothing changes.
- try_jobs['key2'] = CreateRietveldTryJob(
- builder='parent_bot',
- requested_steps=['trigger2'],
- steps_passed=[],
- steps_failed=[])
- self.assertEqual(
- ('parent_bot', set(['trigger1'])),
- triggered_verifier.need_to_trigger(try_jobs, 1.))
-
- # A parent bot is running steps that will triggered the required tests,
- # so nothing needs to be triggered.
- try_jobs['key3'] = CreateRietveldTryJob(
- builder='parent_bot',
- requested_steps=['trigger1'],
- steps_passed=[],
- steps_failed=[])
- self.assertEqual(
- ('parent_bot', set([])),
- triggered_verifier.need_to_trigger(try_jobs, 1.))
-
- def test_triggered_bot_found(self):
- """Test that we don't wait on an non-stewed parent if the child is found."""
- triggered_verifier = try_job_steps.TryJobTriggeredSteps(
- builder_name='tester1',
- trigger_name='builder1',
- steps={'test3': 'trigger'})
- try_jobs = {
- 'key1': try_job_on_rietveld.RietveldTryJob(
- init_time=1.,
- builder='builder1',
- build=12,
- revision=13,
- requested_steps=['trigger'],
- started=1,
- steps_passed=['trigger'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None),
- 'key2': try_job_on_rietveld.RietveldTryJob(
- init_time=1.,
- builder='tester1',
- build=12,
- revision=13,
- requested_steps=['test3'],
- started=1,
- steps_passed=[],
- steps_failed=['test3'],
- clobber=False,
- completed=True,
- tries=1,
- parent_key='key1')}
- self.assertEqual(
- ('builder1', set(['trigger'])),
- triggered_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('tester1', set(['test3'])),
- triggered_verifier.waiting_for(try_jobs))
-
- def test_triggered_wait_for_builder(self):
- """Test that we wait for trigger if builder has recently completed."""
- triggered_verifier = try_job_steps.TryJobTriggeredSteps(
- builder_name='tester1',
- trigger_name='builder1',
- steps={'test3': 'trigger'})
- try_jobs = {
- 'key1': try_job_on_rietveld.RietveldTryJob(
- init_time=1.,
- builder='builder1',
- build=12,
- revision=13,
- requested_steps=['test10', 'trigger'],
- started=1,
- steps_passed=['test10', 'trigger'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None),
- }
- self.assertEqual(
- ('builder1', set()),
- triggered_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('tester1', set(['test3'])),
- triggered_verifier.waiting_for(try_jobs))
-
- def test_not_all_triggered(self):
- """Test that waiting for one triggered job doesn't prevent other triggers
- from getting hit."""
- triggered_verifier = try_job_steps.TryJobTriggeredSteps(
- builder_name='tester1',
- trigger_name='builder1',
- steps={
- 'test1': 'trigger1',
- 'test2': 'trigger2'})
-
- try_jobs = {
- 'key1': try_job_on_rietveld.RietveldTryJob(
- init_time=1.,
- builder='builder1',
- build=12,
- revision=13,
- requested_steps=['trigger1'],
- started=1,
- steps_passed=['trigger1'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None),
- }
-
- self.assertEqual(
- ('builder1', set(['trigger2'])),
- triggered_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('tester1', set(['test1', 'test2'])),
- triggered_verifier.waiting_for(try_jobs))
-
- def test_triggered_builder_second_pending(self):
- """Test failed trigger jobs do not send trigger if another is pending."""
- now = 1.
- triggered_verifier = try_job_steps.TryJobTriggeredSteps(
- builder_name='tester1',
- trigger_name='builder1',
- steps={'test3': 'trigger'})
-
- try_jobs = {
- 'key1': try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=12,
- revision=13,
- requested_steps=['test10', 'trigger'],
- started=int(now),
- steps_passed=['test10', 'trigger'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None),
- 'key2': try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=13,
- revision=13,
- requested_steps=['test10', 'trigger'],
- started=int(now),
- steps_passed=['test10', 'trigger'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None),
- 'key3': try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='tester1',
- build=12,
- revision=13,
- requested_steps=['test3'],
- started=int(now),
- steps_passed=[],
- steps_failed=['test3'],
- clobber=False,
- completed=True,
- tries=1,
- parent_key='key1'),
- }
-
- self.assertEqual(
- ('builder1', set()),
- triggered_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('tester1', set(['test3'])),
- triggered_verifier.waiting_for(try_jobs))
-
- def testGetTriggeredSteps(self):
- triggered_verifier = try_job_steps.TryJobTriggeredSteps(
- builder_name='tester1',
- trigger_name='builder1',
- steps={'test1': 'trigger', 'test2': 'trigger2'})
-
- self.assertEqual(
- ('tester1', []),
- triggered_verifier.get_triggered_steps('builder_invalid', ['build']))
-
- self.assertEqual(
- ('tester1', []),
- triggered_verifier.get_triggered_steps('builder1', ['wrong_step']))
-
- self.assertEqual(
- ('tester1', ['test1']),
- triggered_verifier.get_triggered_steps('builder1', ['trigger']))
-
- self.assertEqual(
- ('tester1', ['test1', 'test2']),
- triggered_verifier.get_triggered_steps('builder1', ['trigger',
- 'trigger2']))
-
-
-class TryJobTriggeredOrNormalStepsTest(unittest.TestCase):
- def test_need_to_trigger(self):
- now = 1.
- triggered_or_normal_verifier = try_job_steps.TryJobTriggeredOrNormalSteps(
- builder_name='test_triggered',
- trigger_name='builder1',
- steps={
- 'test2': 'test2_trigger',
- 'test3': 'test3_trigger',
- 'test4': 'test4_trigger',
- },
- trigger_bot_steps=[
- 'test1',
- ],
- use_triggered_bot=False,
- )
- verifier_use_triggered = try_job_steps.TryJobTriggeredOrNormalSteps(
- builder_name='test_triggered',
- trigger_name='builder1',
- steps={
- 'test2': 'test2_trigger',
- 'test3': 'test3_trigger',
- 'test4': 'test4_trigger',
- },
- trigger_bot_steps=[
- 'test1',
- ],
- use_triggered_bot=True,
- )
-
- self.assertEqual(
- ('builder1', set(['test1', 'test2', 'test3', 'test4'])),
- triggered_or_normal_verifier.need_to_trigger({}, 1.))
- self.assertEqual(
- ('builder1', set(['test1', 'test2_trigger', 'test3_trigger',
- 'test4_trigger'])),
- verifier_use_triggered.need_to_trigger({}, 1.))
-
- try_jobs = {
- 'key1': try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=1,
- revision=1,
- requested_steps=['test1', 'test2', 'test3_trigger',
- 'test4_trigger'],
- started=int(now),
- steps_passed=[],
- steps_failed=[],
- clobber=False,
- completed=False,
- tries=1,
- parent_key=None)}
- self.assertEqual(
- ('builder1', set()),
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('builder1', set()),
- verifier_use_triggered.need_to_trigger(try_jobs, 1.))
-
- try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=1,
- revision=1,
- requested_steps=['test1', 'test2', 'test3_trigger', 'test4_trigger'],
- started=int(now),
- steps_passed=['test1'],
- steps_failed=['test2'],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None)
- self.assertEqual(
- ('builder1', set(['test2'])),
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('builder1', set(['test2_trigger'])),
- verifier_use_triggered.need_to_trigger(try_jobs, 1.))
-
- try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='test_triggered',
- build=1,
- revision=1,
- requested_steps=['test3', 'test4'],
- started=int(now),
- steps_passed=['test3'],
- steps_failed=['test4'],
- clobber=False,
- completed=True,
- tries=1,
- parent_key='key1')
- self.assertEqual(
- ('builder1', set(['test2', 'test4'])),
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('builder1', set(['test2', 'test4'])),
- verifier_use_triggered.need_to_trigger(try_jobs, 1.))
-
- # Add a test bot that wasn't triggered by builder 1 to ensure we don't
- # use its steps.
- try_jobs['key4'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='test_triggered',
- build=2,
- revision=1,
- requested_steps=['test4'],
- started=int(now),
- steps_passed=['test4'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key='key3')
- self.assertEqual(
- ('builder1', set(['test2', 'test4'])),
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('builder1', set(['test2', 'test4'])),
- verifier_use_triggered.need_to_trigger(try_jobs, 1.))
-
- # Now retry the failed jobs, ensuring that the verifiers accepts the
- # non-trigger version of test2.
- try_jobs['key5'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=2,
- revision=1,
- requested_steps=['test2', 'test4_trigger'],
- started=int(now),
- steps_passed=['test2'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=2,
- parent_key=None)
- self.assertEqual(
- ('builder1', set()),
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('builder1', set()),
- verifier_use_triggered.need_to_trigger(try_jobs, 1.))
-
- try_jobs['key6'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='test_triggered',
- build=3,
- revision=1,
- requested_steps=['test4'],
- started=int(now),
- steps_passed=['test4'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=2,
- parent_key='key5')
- self.assertEqual(
- ('builder1', set()),
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.))
- self.assertEqual(
- ('builder1', set()),
- verifier_use_triggered.need_to_trigger(try_jobs, 1.))
-
-
- def test_waiting_for(self):
- now = 1.
- triggered_or_normal_verifier = try_job_steps.TryJobTriggeredOrNormalSteps(
- builder_name='test_triggered',
- trigger_name='builder1',
- steps={
- 'test2': 'test2_trigger',
- 'test3': 'test3_trigger',
- 'test4': 'test4_trigger',
- },
- trigger_bot_steps=[
- 'test1',
- ],
- use_triggered_bot=False,
- )
-
- self.assertEqual(
- ('builder1', set(['test1', 'test2', 'test3', 'test4'])),
- triggered_or_normal_verifier.waiting_for({}))
-
- try_jobs = {
- 'key1': try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=1,
- revision=1,
- requested_steps=['test1', 'test2', 'test3_trigger',
- 'test4_trigger'],
- started=int(now),
- steps_passed=['test1'],
- steps_failed=['test2'],
- clobber=False,
- completed=True,
- tries=1,
- parent_key=None)}
- self.assertEqual(
- ('builder1', set(['test2', 'test3', 'test4'])),
- triggered_or_normal_verifier.waiting_for(try_jobs))
-
- try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='test_triggered',
- build=1,
- revision=1,
- requested_steps=['test3', 'test4'],
- started=int(now),
- steps_passed=['test3'],
- steps_failed=['test4'],
- clobber=False,
- completed=True,
- tries=1,
- parent_key='key1')
- self.assertEqual(
- ('builder1', set(['test2', 'test4'])),
- triggered_or_normal_verifier.waiting_for(try_jobs))
-
- # Add a trigger bot that wasn't triggered by builder 1 to ensure we don't
- # use its steps.
- try_jobs['key4'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='test_triggered',
- build=2,
- revision=1,
- requested_steps=['test4'],
- started=int(now),
- steps_passed=['test4'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=1,
- parent_key='key3')
- self.assertEqual(
- ('builder1', set(['test2', 'test4'])),
- triggered_or_normal_verifier.waiting_for(try_jobs))
-
- # Now retry the failed jobs, ensuring that the verifiers accepts the
- # non-trigger version of test2.
- try_jobs['key5'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='builder1',
- build=2,
- revision=1,
- requested_steps=['test2', 'test4_trigger'],
- started=int(now),
- steps_passed=['test2'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=2,
- parent_key=None)
- self.assertEqual(
- ('builder1', set(['test4'])),
- triggered_or_normal_verifier.waiting_for(try_jobs))
-
- try_jobs['key6'] = try_job_on_rietveld.RietveldTryJob(
- init_time=now,
- builder='test_triggered',
- build=3,
- revision=1,
- requested_steps=['test4'],
- started=int(now),
- steps_passed=['test4'],
- steps_failed=[],
- clobber=False,
- completed=True,
- tries=2,
- parent_key='key5')
- self.assertEqual(
- ('builder1', set()),
- triggered_or_normal_verifier.waiting_for(try_jobs))
-
-
-if __name__ == '__main__':
- if '-v' in sys.argv:
- unittest.TestCase.maxDiff = None
- unittest.main()
diff --git a/tests/try_server_test.py b/tests/try_server_test.py
deleted file mode 100755
index d064865..0000000
--- a/tests/try_server_test.py
+++ /dev/null
@@ -1,886 +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 verification/try_server.py."""
-
-import json
-import logging
-import optparse
-import os
-import re
-import StringIO
-import sys
-import time
-import unittest
-import urllib
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
-
-# In tests/
-import mocks # pylint: disable=W0403
-
-from testing_support import auto_stub
-
-# In root
-import buildbot_json
-from verification import base
-from verification import try_server
-
-# pylint: disable=W0212
-SUCCESS = buildbot_json.SUCCESS
-WARNINGS = buildbot_json.WARNINGS
-FAILURE = buildbot_json.FAILURE
-SKIPPED = buildbot_json.SKIPPED
-EXCEPTION = buildbot_json.EXCEPTION
-
-
-class FakeTryServer(auto_stub.SimpleMock):
- """Stateful try server mock.
-
- Includes calls to send try jobs TryChange() and visible results from HTTP
- requests.
- """
- def __init__(self, unit_test):
- super(FakeTryServer, self).__init__(unit_test)
-
- # Try server immutable properties.
- self.steps = ['update', 'compile', 'test1', 'test2']
- self.server_url = 'http://foo/bar'
-
- # State of the try server.
- self._builds = { 'linux': [], 'mac': [] }
- self.pending_builds = {
- 'linux': [],
- 'mac': []
- }
- # Default mocks.
- self.unit_test.mock(urllib, 'urlopen', self._mockurlopen)
- self.unit_test.mock(try_server.trychange, 'TryChange', self.TryChangeMock)
-
- def TryChangeMock(self, cmd, _change, swallow_exception):
- """Mocks trychange.py."""
- self.assertEqual(swallow_exception, True)
- parser = optparse.OptionParser()
- parser.add_option('--bot', action='append')
- parser.add_option('--clobber', action='store_true', default=False)
- parser.add_option('--email')
- parser.add_option('--issue', type='int')
- parser.add_option('--name')
- parser.add_option('--no_search', action='store_true')
- parser.add_option('--patchset', type='int')
- parser.add_option('--revision')
- parser.add_option('--rietveld_url')
- parser.add_option('--user')
- options, args = parser.parse_args(cmd)
- self.assertEqual(options.email, 'user1@example.com')
- self.assertEqual(options.issue, 42)
- self.assertEqual(options.no_search, True)
- self.assertEqual(options.patchset, 23)
- self.assertEqual(
- options.rietveld_url,
- '%s/download/issue42_23.diff' % self.unit_test.context.rietveld.url)
- self.assertEqual(options.user, 'user1')
- self.assertEqual(args, ['extra_flags'])
- bot = ', '.join(options.bot)
- call = 'trychange b={%s} c=%s r=%s' % (
- bot, options.clobber, options.revision)
- if options.name != '42-23':
- call += ' n=%s' % options.name
- self.calls.append(call)
- logging.debug(self.calls[-1])
-
- def _mockurlopen_internal(self, sub_url):
- """Returns data to be encoded before returning."""
- # sub_url is str on python <= 2.6 and unicode for >= 2.7
- self.unit_test.assertTrue(isinstance(sub_url, basestring))
- expected_url = self.server_url + '/json/'
- self.unit_test.assertTrue(sub_url.startswith(expected_url))
- self.calls.append(sub_url[len(expected_url):])
- baseurl = '^%s/json/' % re.escape(self.server_url)
- match = re.match(baseurl + r'builders/(\w+)/builds/\?(.+)$', sub_url)
- if match:
- data = {}
- for query in match.group(2).split('&'):
- m = re.match(r'select=(\w+)', query)
- self.unit_test.assertTrue(m, (match.group(2), query))
- build = int(m.group(1))
- data[str(build)] = self._builds[match.group(1)][build]
- return data
-
- match = re.match(baseurl + r'builders/(\w+)/builds/_all$', sub_url)
- if match:
- # Data is not stored exactly as the try server serves it.
- data = {}
- for i, build in enumerate(self._builds[match.group(1)]):
- data[str(i)] = build
- return data
-
- match = re.match(baseurl + r'builders/\?(.+)$', sub_url)
- if match:
- data = {}
- for query in match.group(1).split('&'):
- m = re.match(r'select=(\w+)', query)
- self.unit_test.assertTrue(m, (match.group(1), query))
- builder = m.group(1)
- data[builder] = {
- 'cachedBuilds': range(len(self._builds[builder])),
- 'pendingBuilds': len(self.pending_builds.get(builder, [])),
- }
- return data
-
- match = re.match(baseurl + r'builders/(\w+)/pendingBuilds$', sub_url)
- if match:
- return self.pending_builds[match.group(1)]
-
- def _mockurlopen(self, sub_url):
- """Mocks urllib.urlopen() and JSON encode + StringIO buffers."""
- sub_url = re.match(r'^(.+)[\&\?]filter=1$', sub_url).group(1)
- data = self._mockurlopen_internal(sub_url)
- self.unit_test.assertNotEquals(None, data, sub_url)
- #logging.debug('_mockurlopen(%s) -> %s' % (sub_url, data))
- return StringIO.StringIO(json.dumps(data))
-
- def add_build(self, builder, revision, reason, step_results):
- """Add a build to a builder."""
- self.assertEqual(len(self.steps), len(step_results))
- assert isinstance(revision, (str, int))
- data = {
- 'reason': reason or self.unit_test.pending.pending_name(),
- 'sourceStamp': {
- 'revision': 'sol@%s' % revision,
- 'hasPatch': True,
- },
- 'steps': [],
- 'blame': ['user1@example.com'],
- 'number': 0,
- 'slave': 'foo',
- }
- result = max(step_results)
- if result in (SUCCESS, WARNINGS) and step_results[-1] is None:
- result = None
- for i, step in enumerate(self.steps):
- data['steps'].append({
- 'name': step,
- 'results': [step_results[i]],
- })
- data['results'] = [result]
- self._builds[builder].append(data)
-
- def set_build_result(self, builder, result):
- """Override the build result for every steps to |result|."""
- for step in self._builds[builder][-1]['steps']:
- step['results'] = [result]
- self._builds[builder][-1]['results'] = [result]
-
-
-class TryServerSvnTest(mocks.TestCase):
- def setUp(self):
- super(TryServerSvnTest, self).setUp()
- self.email = 'user1@example.com'
- self.user = 'user1'
- self.timestamp = [1.]
- # Mocks http://chromium-status.appspot.com/lkgr
- self.lkgr = 123
- self.try_server = FakeTryServer(self)
- self.mock(time, 'time', lambda: self.timestamp[-1])
-
- try_server.TryRunnerSvn.update_latency = 0
- self.builders_and_tests = {
- 'linux': ['test1', 'test2'],
- 'mac': ['test1', 'test2'],
- }
- self.try_runner = try_server.TryRunnerSvn(
- self.context,
- self.try_server.server_url,
- self.email,
- self.builders_and_tests,
- ['ignored_step'],
- 'sol',
- ['extra_flags',],
- lambda: self.lkgr,
- )
- self.pending.revision = 123
-
- def tearDown(self):
- try:
- if not self.has_failed():
- self.try_server.check_calls([])
- finally:
- super(TryServerSvnTest, self).tearDown()
-
- def get_verif(self):
- return self.pending.verifications[self.try_runner.name]
-
- def assertPending(
- self, state, nb_jobs, error_message,
- linux_build=1,
- mac_build=1,
- linux_state=None,
- mac_state=None,
- linux_clobber=False,
- mac_clobber=False,
- linux_rev=123,
- mac_rev=123,
- linux_sent=1,
- mac_sent=1,
- linux_name='42-23',
- mac_name='42-23'):
- if linux_state is None:
- linux_state = state
- if mac_state is None:
- mac_state = state
- self.assertEqual([self.try_runner.name], self.pending.verifications.keys())
- self.assertEqual(error_message, self.get_verif().error_message)
- self.assertEqual(nb_jobs, len(self.get_verif().try_jobs))
- self.assertEqual(
- len(self.builders_and_tests), len(self.get_verif().try_jobs))
- self.assertEqual(linux_name, self.get_verif().try_jobs[0].name)
- self.assertEqual('linux', self.get_verif().try_jobs[0].builder)
- self.assertEqual(linux_rev, self.get_verif().try_jobs[0].revision)
- self.assertEqual(linux_sent, self.get_verif().try_jobs[0].sent)
- self.assertEqual(linux_clobber, self.get_verif().try_jobs[0].clobber)
- self.assertEqual(linux_build, self.get_verif().try_jobs[0].build)
- self.assertEqual(linux_state, self.get_verif().try_jobs[0].get_state())
- if len(self.builders_and_tests) > 1:
- self.assertEqual(mac_name, self.get_verif().try_jobs[1].name)
- self.assertEqual('mac', self.get_verif().try_jobs[1].builder)
- self.assertEqual(mac_rev, self.get_verif().try_jobs[1].revision)
- self.assertEqual(mac_sent, self.get_verif().try_jobs[1].sent)
- self.assertEqual(mac_clobber, self.get_verif().try_jobs[1].clobber)
- self.assertEqual(mac_build, self.get_verif().try_jobs[1].build)
- self.assertEqual(mac_state, self.get_verif().try_jobs[1].get_state())
- self.assertEqual(state, self.get_verif().get_state())
-
- def testVoid(self):
- self.assertEqual(self.pending.verifications.keys(), [])
-
- def testVerificationVoid(self):
- self.try_runner.verify(self.pending)
- self.assertPending(base.PROCESSING, 2, None, linux_build=None,
- mac_build=None)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
- self.context.status.check_names(['try server'] * 2)
-
- def testVoidUpdate(self):
- self.try_runner.update_status([])
-
- def test_steps_quality(self):
- self.assertEqual(None, try_server.steps_quality([]))
- self.assertEqual(True, try_server.steps_quality([True, None]))
- self.assertEqual(False, try_server.steps_quality([True, None, False]))
-
- def testStepQualityNone(self):
- self.try_runner.status.builders['linux'].builds.cache()
- self.assertEqual(
- (None, 0),
- self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
- self.try_server.check_calls(['builders/linux/builds/_all'])
-
- def testStepQualityGood(self):
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, None, None, None])
- self.try_runner.status.builders['linux'].builds.cache()
- self.try_server.check_calls(['builders/linux/builds/_all'])
- self.assertEqual(
- ([True, None, None, None], 1),
- self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
- self.try_server.set_build_result('linux', SUCCESS)
- self.try_runner.status.builders['linux'].builds.refresh()
- self.assertEqual(
- ([True] * 4, 1),
- self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
- self.try_server.check_calls(['builders/linux/builds/_all'])
-
- def testStepQualityBad(self):
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, FAILURE, SUCCESS])
- self.try_runner.status.builders['linux'].builds.cache()
- # Also test that FakeTryServer.add_build() is implemented correctly.
- self.assertEqual(
- ([True, True, False, True], 1),
- self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
- self.try_server.check_calls(['builders/linux/builds/_all'])
-
- def testStepQualityBadIncomplete(self):
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, FAILURE, None])
- self.try_runner.status.builders['linux'].builds.cache()
- # Also test that FakeTryServer.add_build() is implemented correctly.
- self.assertEqual(
- ([True, True, False, None], 1),
- self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
- self.try_server.check_calls(['builders/linux/builds/_all'])
-
- def testStepQualityGoodAndBad(self):
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_server.add_build('linux', 123, None, [FAILURE, None, None, None])
- self.try_runner.status.builders['linux'].builds.cache()
- self.try_server.check_calls(['builders/linux/builds/_all'])
- self.assertEqual(
- ([True] * 4, 2),
- self.try_runner.step_db.revision_quality_builder_steps('linux', 123))
-
- def testQualityAutomatic(self):
- self.try_runner.verify(self.pending)
- self.assertEqual(
- (None, 0),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'linux', 123))
- self.try_server.add_build(
- 'linux', 123, 'georges tried stuff',
- [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_runner.update_status([self.pending])
- self.assertEqual(
- ([True] * 4, 1),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'linux', 123))
- self.try_server.check_calls(
- [ 'trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123',
- 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
- self.context.status.check_names(['try server'] * 2)
-
- def testQualityManual(self):
- self.try_server.add_build(
- 'linux', 123, 'georges tried stuff',
- [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_runner.status.builders['linux'].builds.cache()
- self.assertEqual(
- ([True] * 4, 1),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'linux', 123))
- self.try_server.check_calls(['builders/linux/builds/_all'])
-
- def _simple(self, status_linux, status_mac=None, error_msg=None):
- """status_linux affects test1, status_mac affects test2."""
- def is_failure(status):
- return status in (FAILURE, EXCEPTION)
-
- self.assertEqual(
- bool(is_failure(status_linux) or is_failure(status_mac)),
- bool(error_msg))
- if status_mac is None:
- status_mac = status_linux
- self.lkgr = 12
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_server.add_build(
- 'mac', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
-
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, status_linux, SUCCESS])
- self.try_server.add_build(
- 'mac', 123, None, [SUCCESS, SUCCESS, SUCCESS, status_mac])
- self.try_runner.update_status([self.pending])
-
- if is_failure(status_linux):
- self.assertEqual(123, self.try_runner.get_lkgr('linux'))
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('linux'))
- else:
- self.assertEqual(123, self.try_runner.get_lkgr('linux'))
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('linux'))
- if is_failure(status_mac):
- self.assertEqual(123, self.try_runner.get_lkgr('mac'))
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('mac'))
- else:
- self.assertEqual(123, self.try_runner.get_lkgr('mac'))
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('mac'))
-
- if error_msg:
- # Can't test failure without testing automatic retry mechanism.
- expected = (
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
-
- if is_failure(status_linux):
- expected.append(
- 'trychange b={linux:test1} c=False r=sol@123 n=42-23 (retry)')
- linux_build = None
- linux_state = base.PROCESSING
- linux_name = '42-23 (retry)'
- else:
- linux_build = 1
- linux_state = base.SUCCEEDED
- linux_name = '42-23'
-
- if is_failure(status_mac):
- expected.append(
- 'trychange b={mac:test2} c=False r=sol@123 n=42-23 (retry)')
- mac_build = None
- mac_state = base.PROCESSING
- mac_name = '42-23 (retry)'
- else:
- mac_build = 1
- mac_state = base.SUCCEEDED
- mac_name = '42-23'
-
- self.assertPending(
- base.PROCESSING, 2, None, linux_build=linux_build,
- mac_build=mac_build, linux_state=linux_state, mac_state=mac_state,
- linux_name=linux_name, mac_name=mac_name)
- self.try_server.check_calls(expected)
-
- if is_failure(status_linux):
- self.try_server.add_build(
- 'linux', 123, linux_name, [SUCCESS, SUCCESS, status_linux, SUCCESS])
- if is_failure(status_mac):
- self.try_server.add_build(
- 'mac', 123, mac_name, [SUCCESS, SUCCESS, SUCCESS, status_mac])
-
- self.try_runner.update_status([self.pending])
- if is_failure(status_linux):
- linux_state = base.FAILED
- linux_build = 2
- else:
- linux_build = 1
- if is_failure(status_mac):
- mac_state = base.FAILED
- mac_build = 2
- else:
- mac_build = 1
- self.assertPending(
- base.FAILED, 2, error_msg,
- linux_build=linux_build, mac_build=mac_build,
- linux_state=linux_state, mac_state=mac_state,
- linux_name=linux_name, mac_name=mac_name)
-
- if is_failure(status_linux) and is_failure(status_mac):
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
- self.context.checkout.check_calls(
- [ 'prepare(123)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[-2],
- 'prepare(123)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[-1]])
- elif is_failure(status_linux):
- self.try_server.check_calls(
- ['builders/?select=linux', 'builders/linux/builds/_all'])
- self.context.checkout.check_calls(
- [ 'prepare(123)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[-1]])
- else:
- self.try_server.check_calls(
- ['builders/?select=mac', 'builders/mac/builds/_all'])
- self.context.checkout.check_calls(
- [ 'prepare(123)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[-1]])
- else:
- self.assertPending(base.SUCCEEDED, 2, None)
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
- count = 6 + 3 * (
- int(is_failure(status_linux)) + int(is_failure(status_mac)))
- self.context.status.check_names(['try server'] * count)
-
- def testImmediateSuccess(self):
- self._simple(SUCCESS)
-
- def testImmediateWarnings(self):
- self._simple(WARNINGS)
-
- def testImmediateSkipped(self):
- self._simple(SKIPPED)
-
- def second_fail_msg(
- self, clname, step2, step1, builder, number, is_clobber=False):
- extra = ''
- if is_clobber:
- extra = ' (clobber build)'
- return (
- u'Try job failure for %s on %s for step "%s"%s.\n'
- u'It\'s a second try, previously, step "%s" failed.\n'
- u'%s/buildstatus?builder=%s&number=%s\n') % (
- clname, builder, step2, extra, step1, self.try_server.server_url,
- builder, number)
- def testImmediateFailureLinux(self):
- self._simple(
- FAILURE, SUCCESS,
- self.second_fail_msg('42-23 (retry)', 'test1', 'test1', 'linux', 2))
-
- def testImmediateFailureMac(self):
- self._simple(
- SUCCESS, FAILURE,
- self.second_fail_msg('42-23 (retry)', 'test2', 'test2', 'mac', 2))
-
- def testImmediateDoubleFailure(self):
- self._simple(
- FAILURE, FAILURE,
- self.second_fail_msg('42-23 (retry)', 'test2', 'test2', 'mac', 2))
-
- def testImmediateException(self):
- self._simple(
- SUCCESS, EXCEPTION,
- self.second_fail_msg('42-23 (retry)', 'test2', 'test2', 'mac', 2))
-
- def testSuccess(self):
- self.lkgr = 2
- # Normal workflow with incremental success.
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
-
- self.try_runner.update_status([self.pending])
- self.assertPending(
- base.PROCESSING, 2, None, linux_build=None, mac_build=None)
- self.try_server.check_calls(
- ['builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
-
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, None, None, None])
- self.try_runner.update_status([self.pending])
- self.assertPending(base.PROCESSING, 2, None, linux_build=0, mac_build=None)
- self.try_server.check_calls(
- ['builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
-
- self.try_server.add_build(
- 'mac', 123, None, [SUCCESS, None, None, None])
- self.try_runner.update_status([self.pending])
- self.assertPending(base.PROCESSING, 2, None, linux_build=0, mac_build=0)
- self.try_server.check_calls(
- ['builders/?select=mac',
- 'builders/mac/builds/_all', 'builders/linux/builds/?select=0'])
-
- # This one will be cached since it's now immutable.
- self.try_server.set_build_result('mac', SUCCESS)
- self.try_runner.update_status([self.pending])
- self.assertPending(
- base.PROCESSING, 2, None, linux_build=0, mac_build=0,
- mac_state=base.SUCCEEDED)
- self.try_server.check_calls(
- ['builders/linux/builds/?select=0', 'builders/mac/builds/?select=0'])
-
- self.try_server.set_build_result('linux', SUCCESS)
- self.try_runner.update_status([self.pending])
- self.assertPending(base.SUCCEEDED, 2, None, linux_build=0, mac_build=0)
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('linux'))
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('mac'))
- self.assertEqual(
- ([True] * 4, 1),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'linux', 123))
- self.assertEqual(
- ([True] * 4, 1),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'mac', 123))
- self.try_server.check_calls(['builders/linux/builds/?select=0'])
- self.context.status.check_names(['try server'] * 6)
-
- def testIgnorePreviousJobs(self):
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
-
- self.try_runner.update_status([self.pending])
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
-
- self.try_server.add_build('linux', 12, None, [None, None, None, None])
- self.try_server.add_build('mac', 12, None, [None, None, None, None])
- self.try_runner.update_status([self.pending])
- self.assertPending(
- base.PROCESSING, 2, None, linux_build=None,
- mac_build=None)
- self.try_server.check_calls(
- ['builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
-
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_server.add_build(
- 'mac', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_runner.update_status([self.pending])
- self.assertPending(base.SUCCEEDED, 2, None)
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('linux'))
- self.assertEqual(
- 123, self.try_runner.step_db.last_good_revision_builder('mac'))
- self.assertEqual(
- ([True] * 4, 1),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'linux', 123))
- self.assertEqual(
- ([True] * 4, 1),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'mac', 123))
- self.try_server.check_calls(
- ['builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
- self.context.status.check_names(['try server'] * 6)
-
- def testNames(self):
- job = try_server.TryJob(
- builder='builder', revision=123, tests=['test1'], clobber=False)
- self.assertEqual(None, job.name)
-
- def testLostJob(self):
- # Test that a job is automatically retried if it was never started up. It
- # does happen.
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
-
- # Keep a copy of the try jobs to compare later.
- self.try_runner.update_status([self.pending])
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
- self.assertPending(
- base.PROCESSING, 2, None, mac_sent=self.timestamp[-1],
- linux_build=None, mac_build=None)
-
- # lost_try_job_delay + 2 seconds later.
- # linux is pending, mac is lost.
- self.try_server.pending_builds['linux'] = [
- {
- 'reason': '42-23',
- }
- ]
- self.timestamp.append(self.try_runner.lost_try_job_delay + 2)
- self.try_runner.update_status([self.pending])
- self.assertPending(
- base.PROCESSING, 2, None, mac_sent=self.timestamp[-1],
- linux_build=None, mac_build=None,
- mac_name='42-23 (previous was lost)')
- self.try_server.check_calls(
- # Look if there is pending build on each builder.
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all',
- 'builders/linux/pendingBuilds',
- # Retry only mac.
- 'trychange b={mac:test1,test2} c=False r=sol@123 n=42-23 (previous '
- 'was lost)'])
-
- # linux job was completed.
- self.try_server.pending_builds['linux'] = []
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_runner.update_status([self.pending])
- self.assertPending(
- base.PROCESSING, 2, None, mac_sent=self.timestamp[1],
- linux_build=0, mac_build=None,
- linux_state=base.SUCCEEDED,
- mac_name='42-23 (previous was lost)')
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
-
- # 2 * (lost_try_job_delay + 2) seconds later, mac job started and completed.
- self.timestamp.append(2 * (self.try_runner.lost_try_job_delay + 2))
- self.try_server.add_build(
- 'mac', 123, '42-23 (previous was lost)',
- [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_runner.update_status([self.pending])
- self.assertPending(
- base.SUCCEEDED, 2, None, mac_sent=self.timestamp[1],
- linux_build=0, mac_build=0,
- mac_name='42-23 (previous was lost)')
- self.try_server.check_calls(
- ['builders/?select=mac', 'builders/mac/builds/_all'])
-
- self.try_runner.update_status([self.pending])
- self.context.checkout.check_calls(
- [ 'prepare(123)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[-1]])
- self.context.status.check_names(['try server'] * 7)
-
- def testFailedStepRetryLkgr(self):
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, FAILURE, SUCCESS])
-
- self.lkgr = 122
- self.try_runner.update_status([self.pending])
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all',
- # Only the failed test is retried, on lkgr revision.
- 'trychange b={linux:test1} c=False r=sol@122 n=42-23 (retry)'])
- self.assertEqual(['test1'], self.get_verif().try_jobs[0].failed_steps)
- self.context.checkout.check_calls(
- [ 'prepare(122)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[-1]])
- self.context.status.check_names(['try server'] * 5)
-
- def testFailedUpdate(self):
- # It must not retry a failed update.
- # Add succeededing builds, this sets quality to True, which disable retry
- # mechanism.
- self.try_server.add_build(
- 'linux', 123, 'georges tried stuff',
- [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.try_server.add_build(
- 'mac', 123, 'georges tried stuff', [SUCCESS, SUCCESS, SUCCESS, SUCCESS])
- self.lkgr = 123
-
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
- self.try_server.add_build(
- 'linux', 123, None, [FAILURE, None, None, None])
- self.try_runner.update_status([self.pending])
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
- self.assertEqual('linux', self.get_verif().try_jobs[0].builder)
- self.assertEqual(['update'], self.get_verif().try_jobs[0].failed_steps)
- self.assertPending(
- base.FAILED, 2,
- (u'Try job failure for 42-23 on linux for step '
- u'"update".\n%s/buildstatus?builder=linux&number=1\n\n'
- u'Step "update" is always a major failure.\n'
- u'Look at the try server FAQ for more details.') %
- self.try_server.server_url,
- mac_build=None,
- mac_state=base.PROCESSING)
- self.context.status.check_names(['try server'] * 4)
-
- def testFailedCompileRetryClobber(self):
- # It must retry once a non-clobber compile.
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, FAILURE, None, None])
- self.lkgr = 122
- self.try_runner.update_status([self.pending])
- self.context.checkout.check_calls(
- [ 'prepare(122)',
- 'apply_patch(%r)' % self.context.rietveld.patchsets[-1]])
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all',
- # Retries at lkgr.
- 'trychange b={linux:test1,test2} c=True r=sol@122 n=42-23 (retry)'])
- self.assertEqual(['compile'], self.get_verif().try_jobs[0].failed_steps)
- self.assertPending(
- base.PROCESSING, 2, None, linux_rev=122,
- linux_clobber=True, linux_build=None, mac_build=None,
- linux_name='42-23 (retry)')
-
- self.try_server.add_build(
- 'linux', 122, '42-23 (retry)', [SUCCESS, FAILURE, None, None])
- self.try_runner.update_status([self.pending])
- self.try_server.check_calls(
- [ 'builders/?select=linux&select=mac',
- 'builders/linux/builds/_all', 'builders/mac/builds/_all'])
- self.assertEqual(['compile'], self.get_verif().try_jobs[0].failed_steps)
- self.assertPending(
- base.FAILED, 2,
- self.second_fail_msg('42-23 (retry)', 'compile', 'compile', 'linux', 1,
- True),
- linux_rev=122,
- linux_clobber=True,
- mac_build=None,
- mac_state=base.PROCESSING,
- linux_name='42-23 (retry)')
- self.context.status.check_names(['try server'] * 7)
-
- def testTooManyRetries(self):
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
- job = self.pending.verifications[self.try_runner.name].try_jobs[0]
- self.try_runner._send_jobs(
- self.pending, [job], False, {job.builder:job.tests}, 'foo')
- self.try_server.check_calls(
- [ 'trychange b={linux:test1,test2} c=False r=sol@123 n=foo'])
- job = self.pending.verifications[self.try_runner.name].try_jobs[0]
- self.try_runner._send_jobs(
- self.pending, [job], False, {job.builder:job.tests}, 'foo')
- self.try_server.check_calls(
- [ 'trychange b={linux:test1,test2} c=False r=sol@123 n=foo'])
- job = self.pending.verifications[self.try_runner.name].try_jobs[0]
- self.try_runner._send_jobs(
- self.pending, [job], False, {job.builder:job.tests}, 'foo')
- self.try_server.check_calls(
- [ 'trychange b={linux:test1,test2} c=False r=sol@123 n=foo'])
- job = self.pending.verifications[self.try_runner.name].try_jobs[0]
- try:
- self.try_runner._send_jobs(
- self.pending, [job], False, {job.builder:job.tests}, 'foo')
- self.fail()
- except base.DiscardPending:
- pass
- self.context.status.check_names(['try server'] * 5)
-
- def testNoTry(self):
- self.pending.description += '\nNOTRY=true'
- self.try_runner.verify(self.pending)
- self.assertEqual(
- base.SUCCEEDED,
- self.pending.verifications[self.try_runner.name].get_state())
-
- def testNoTryWrong(self):
- self.pending.description += '\nNOTRY=true2'
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2, mac:test1,test2} c=False r=sol@123'])
- self.context.status.check_names(['try server'] * 2)
- self.assertEqual(
- base.PROCESSING,
- self.pending.verifications[self.try_runner.name].get_state())
-
- def testSuccessIgnoredFailure(self):
- # Simplify testing code by removing mac.
- del self.try_runner.builders_and_tests['mac']
- # Add fake failing ignored step.
- self.try_server.steps = [
- 'update', 'compile', 'ignored_step', 'test1', 'test2']
-
- self.try_runner.verify(self.pending)
- self.try_server.check_calls(
- ['trychange b={linux:test1,test2} c=False r=sol@123'])
-
- self.try_runner.update_status([self.pending])
- self.assertPending(
- base.PROCESSING, 1, None, linux_build=None, mac_build=None)
- self.try_server.check_calls(
- ['builders/?select=linux', 'builders/linux/builds/_all'])
-
- self.try_server.add_build(
- 'linux', 123, None, [SUCCESS, SUCCESS, FAILURE, SUCCESS, SUCCESS])
- self.try_runner.update_status([self.pending])
- self.assertPending(base.SUCCEEDED, 1, None, linux_build=0, mac_build=None)
- self.try_server.check_calls(
- ['builders/?select=linux', 'builders/linux/builds/_all'])
-
- self.try_server.set_build_result('linux', SUCCESS)
- self.try_runner.update_status([self.pending])
- self.assertPending(base.SUCCEEDED, 1, None, linux_build=0, mac_build=0)
- # TODO(maruel): Fix, since StepDb doesn't know about ignored steps.
- self.assertEqual(
- None, self.try_runner.step_db.last_good_revision_builder('linux'))
- self.assertEqual(
- ([True, True, False, True, True], 1),
- self.try_runner.step_db.revision_quality_builder_steps(
- 'linux', 123))
- self.context.status.check_names(['try server'] * 3)
-
-
-if __name__ == '__main__':
- logging.basicConfig(
- level=[logging.WARNING, logging.INFO, logging.DEBUG][
- min(sys.argv.count('-v'), 2)],
- format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s')
- unittest.main()
diff --git a/threadpool.py b/threadpool.py
deleted file mode 100644
index a84dc39..0000000
--- a/threadpool.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# coding=utf8
-# 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.
-
-"""Thread pool with task queues to make work items asynchronous."""
-
-import logging
-import Queue
-import threading
-import sys
-
-
-class ThreadPool(object):
- def __init__(self, num_threads):
- self._tasks = Queue.Queue()
- self._lock = threading.Lock()
- self._outputs = []
- self._exceptions = []
- self._workers = [
- threading.Thread(target=self._run, name='worker-%d' % i)
- for i in range(num_threads)
- ]
- for w in self._workers:
- w.daemon = True
- w.start()
-
- def add_task(self, function, *args, **kwargs):
- self._tasks.put((function, args, kwargs))
-
- def join(self):
- """Extracts all the results from each threads unordered."""
- self._tasks.join()
- with self._lock:
- # Look for exceptions.
- if self._exceptions:
- exception = self._exceptions.pop(0)
- raise exception[0], exception[1], exception[2]
- out = self._outputs
- self._outputs = []
- return out
-
- def close(self):
- """Closes all the threads."""
- for _ in range(len(self._workers)):
- # Enqueueing None causes the worker to stop.
- self._tasks.put(None)
- for t in self._workers:
- t.join()
-
- def _run(self):
- """Runs until a None task is queued."""
- while True:
- task = self._tasks.get()
- if task is None:
- # We're done.
- return
- try:
- # The first item is the index.
- func, args, kwargs = task
- self._outputs.append(func(*args, **kwargs))
- except Exception, e:
- task_str = "<unserializable>"
- try:
- task_str = repr(task)
- except: # pylint: disable=W0702
- pass
- logging.error('Caught exception while running %s! %s' % (task_str, e))
- self._exceptions.append(sys.exc_info())
- finally:
- self._tasks.task_done()
diff --git a/tools/count.py b/tools/count.py
deleted file mode 100755
index ac9ea1b..0000000
--- a/tools/count.py
+++ /dev/null
@@ -1,217 +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.
-"""Count commits by the commit queue."""
-
-import datetime
-import json
-import logging
-import optparse
-import os
-import re
-import sys
-from xml.etree import ElementTree
-
-sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-
-import find_depot_tools # pylint: disable=W0611
-import subprocess2
-
-
-def log(repo, args):
- """If extra is True, grab one revision before and one after."""
- args = args or []
- out = subprocess2.check_output(
- ['svn', 'log', '--with-all-revprops', '--xml', repo] + args)
- data = {}
- for logentry in ElementTree.XML(out).findall('logentry'):
- date_str = logentry.find('date').text
- date = datetime.datetime(*map(int, re.split('[^\d]', date_str)[:-1]))
- entry = {
- 'author': logentry.find('author').text,
- 'date': date,
- 'msg': logentry.find('msg').text,
- 'revprops': {},
- 'commit-bot': False,
- }
- revprops = logentry.find('revprops')
- if revprops is not None:
- for revprop in revprops.findall('property'):
- entry['revprops'][revprop.attrib['name']] = revprop.text
- if revprop.attrib['name'] == 'commit-bot':
- entry['commit-bot'] = True
- data[logentry.attrib['revision']] = entry
- return data
-
-
-def log_dates(repo, start_date, days):
- """Formats dates so 'svn log' does the right thing. Fetches everything in UTC.
- """
- # http://svnbook.red-bean.com/nightly/en/svn-book.html#svn.tour.revs.dates
- if not days:
- end_inclusive = datetime.date.today()
- else:
- end_inclusive = start_date + datetime.timedelta(days=days)
- actual_days = (end_inclusive - start_date).days
- print('Getting data from %s for %s days' % (start_date, actual_days))
- range_str = (
- '{%s 00:00:00 +0000}:{%s 00:00:00 +0000}' % (start_date, end_inclusive))
- data = log(repo, ['-r', range_str])
- # Strip off everything outside the range.
- start_date_time = datetime.datetime(*start_date.timetuple()[:6])
- if data:
- first = sorted(data.keys())[0]
- if data[first]['date'] < start_date_time:
- del data[first]
- # Strip the commit message to save space.
- for item in data.itervalues():
- del item['msg']
- return data
-
-
-def monday_last_week():
- """Returns Monday in 'date' object."""
- today = datetime.date.today()
- last_week = today - datetime.timedelta(days=7)
- return last_week - datetime.timedelta(days=(last_week.isoweekday() - 1))
-
-
-class JSONEncoder(json.JSONEncoder):
- def default(self, o): # pylint: disable=E0202
- if isinstance(o, datetime.datetime):
- return str(o)
- return super(JSONEncoder, self)
-
-
-def print_aligned(zipped_list):
- max_len = max(len(i[0]) for i in zipped_list)
- for author, count in zipped_list:
- print('%*s: %d' % (max_len, author, count))
-
-
-def print_data(log_data, stats_only, top):
- # Calculate stats.
- num_commit_bot = len([True for v in log_data.itervalues() if v['commit-bot']])
- num_total_commits = len(log_data)
- pourcent = 0.
- if num_total_commits:
- pourcent = float(num_commit_bot) * 100. / float(num_total_commits)
- users = {}
- for i in log_data.itervalues():
- if i['commit-bot']:
- users.setdefault(i['author'], 0)
- users[i['author']] += 1
-
- if not stats_only:
- max_author_len = max(len(i['author']) for i in log_data.itervalues())
- for revision in sorted(log_data.keys()):
- entry = log_data[revision]
- commit_bot = ' '
- if entry['commit-bot']:
- commit_bot = 'c'
- print('%s %s %s %*s' % (
- ('r%s' % revision).rjust(6),
- commit_bot,
- entry['date'].strftime('%Y-%m-%d %H:%M UTC'),
- max_author_len,
- entry['author']))
- print('')
-
- if top:
- top_users = sorted(
- users.iteritems(), key=lambda x: x[1], reverse=True)[:top]
- top_commits = sum(x[1] for x in top_users)
- p_u = 100. * len(top_users) / len(users)
- p_c = 100. * top_commits / num_commit_bot
- print(
- 'Top users: %6d out of %6d total users %6.2f%%' %
- (len(top_users), len(users), p_u))
- print(
- ' Committed %6d out of %6d CQ\'ed commits %5.2f%%' %
- (top_commits, num_commit_bot, p_c))
- if not stats_only:
- print_aligned(top_users)
-
- non_committers = sorted(
- ( (u, c) for u, c in users.iteritems()
- if not u.endswith('@chromium.org')),
- key=lambda x: x[1], reverse=True)
- if non_committers:
- print('')
- n_c_commits = sum(x[1] for x in non_committers)
- p_u = 100. * len(non_committers) / len(users)
- p_c = 100. * n_c_commits / num_commit_bot
- print(
- 'Non-committers: %6d out of %6d total users %6.2f%%' %
- (len(non_committers), len(users), p_u))
- print(
- ' Committed %6d out of %6d CQ\'ed commits %5.2f%%' %
- (n_c_commits, num_commit_bot, p_c))
- print('')
- print('Top domains')
- domains = {}
- for user, count in non_committers:
- domain = user.split('@', 1)[1]
- domains.setdefault(domain, 0)
- domains[domain] += count
- domains_stats = sorted(
- ((k, v) for k, v in domains.iteritems()),
- key=lambda x: x[1], reverse=True)
- print_aligned(domains_stats)
- if not stats_only:
- print_aligned(non_committers)
-
- print('')
- print('Total commits: %6d' % num_total_commits)
- print(
- 'Total commits by commit bot: %6d (%6.1f%%)' % (num_commit_bot, pourcent))
-
-
-def main():
- parser = optparse.OptionParser(
- description=sys.modules['__main__'].__doc__)
- parser.add_option('-v', '--verbose', action='store_true')
- parser.add_option(
- '-r', '--repo', default='http://src.chromium.org/svn/trunk')
- parser.add_option('-s', '--since', action='store')
- parser.add_option('-d', '--days', type=int, default=7)
- parser.add_option('--all', action='store_true', help='Get ALL the revisions!')
- parser.add_option('--dump', help='Dump json in file')
- parser.add_option('--read', help='Read the data from a file')
- parser.add_option('-o', '--stats_only', action='store_true')
- parser.add_option('--top', default=20, type='int')
- options, args = parser.parse_args(None)
- if args:
- parser.error('Unsupported args: %s' % args)
- logging.basicConfig(
- level=(logging.DEBUG if options.verbose else logging.ERROR))
-
- # By default, grab stats for last week.
- if not options.since:
- options.since = monday_last_week()
- else:
- options.since = datetime.date(*map(int, re.split('[^\d]', options.since)))
-
- if options.read:
- if options.dump:
- parser.error('Can\'t use --dump and --read simultaneously')
- log_data = json.load(open(options.read, 'r'))
- for entry in log_data.itervalues():
- # Convert strings like "2012-09-04 01:14:43.785581" to a datetime object.
- entry['date'] = datetime.datetime.strptime(
- entry['date'], '%Y-%m-%d %H:%M:%S.%f')
- else:
- if options.all:
- log_data = log(options.repo, [])
- else:
- log_data = log_dates(options.repo, options.since, options.days)
- if options.dump:
- json.dump(log_data, open(options.dump, 'w'), cls=JSONEncoder)
-
- print_data(log_data, options.stats_only, options.top)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/tools/gather_stats.sh b/tools/gather_stats.sh
deleted file mode 100755
index ee7e151..0000000
--- a/tools/gather_stats.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/bash
-
-# Gather Blink stats.
-./stats.py \
- --modified-after=2013-11-01 \
- --modified-before=2013-12-01 \
- > blink-201311.out 2>&1 &
-./stats.py \
- --modified-after=2013-12-01 \
- --modified-before=2014-01-01 \
- > blink-201312.out 2>&1 &
-
-# Gather Chrome stats.
-./stats.py \
- --chrome \
- --modified-after=2013-11-01 \
- --modified-before=2013-12-01 \
- > chrome-201311.out 2>&1 &
-./stats.py \
- --chrome \
- --modified-after=2013-12-01 \
- --modified-before=2014-01-01 \
- > chrome-201312.out 2>&1 &
diff --git a/tools/process.py b/tools/process.py
deleted file mode 100755
index 023dcbd..0000000
--- a/tools/process.py
+++ /dev/null
@@ -1,33 +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.
-"""Analyse commits."""
-
-import json
-import logging
-import optparse
-import sys
-
-
-def main():
- parser = optparse.OptionParser(
- description=sys.modules['__main__'].__doc__)
- parser.add_option('-v', '--verbose', action='store_true')
- options, args = parser.parse_args(None)
- if options.verbose:
- logging.basicConfig(level=logging.DEBUG)
- else:
- logging.basicConfig(level=logging.ERROR)
- if len(args) != 1:
- parser.error('Need 1 arg')
-
- data = json.load(open(args[0])) or {}
- revs = sorted(
- k for k, v in data.iteritems() if v['revprops'] and k != '24079')
- print '\n'.join(sorted(revs))
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/tools/stats.py b/tools/stats.py
deleted file mode 100755
index 7c46847..0000000
--- a/tools/stats.py
+++ /dev/null
@@ -1,504 +0,0 @@
-#!/usr/bin/python
-# Copyright 2013 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.
-'''Generate stats of CQ usage.'''
-
-# sudo apt-get install pip; sudo pip install requests request_cache
-import argparse
-import collections
-from datetime import timedelta, datetime
-import itertools
-import numpy
-import operator
-import re
-import requests_cache
-import time
-import sys
-
-
-class Unbuffered:
- def __init__(self, stream):
- self.stream = stream
- def write(self, data):
- self.stream.write(data)
- self.stream.flush()
- def __getattr__(self, attr):
- return getattr(self.stream, attr)
-sys.stdout = Unbuffered(sys.stdout)
-
-
-CONFIG = {
- 'chrome': {
- 'target_base_url_regexps': [
- re.compile(r'^svn://svn\.chromium\.org/chrome/trunk/src'),
- # pylint: disable=C0301
- re.compile(r'^https://chromium\.googlesource\.com/chromium/chromium/src(?:\.git)?(?:@[\w\-]+)?$'),
- re.compile(r'^http://src\.chromium\.org/chrome/trunk/src'),
- ],
- },
- 'blink': {
- 'target_base_url_regexps': [
- re.compile(r'^svn://svn\.chromium\.org/blink/(?:trunk/?)?$'),
- # pylint: disable=C0301
- re.compile(r'^https://chromium\.googlesource\.com/chromium/blink(?:\.git)?(?:@[\w\-]+)?$'),
- re.compile(r'^http://src\.chromium\.org/blink/(?:trunk/?)?$'),
- ],
- },
- 'skia': {
- 'target_base_url_regexps': [
- re.compile(r'^http://skia.googlecode.com/svn/trunk'),
- re.compile(r'^https://skia.googlecode.com/svn/trunk'),
- ],
- },
-}
-config_name = None
-
-
-def make_throttle_hook(timeout=1.0):
- # pylint: disable=W0613
- def hook(response, *args, **kwargs):
- print response.url
- if not getattr(response, 'from_cache', False):
- print 'sleeping'
- time.sleep(timeout)
- return response
- return hook
-
-
-# It seems reasonable to expect that rietveld can handle 20 query-per-second
-# load from this script. Ask someone on the infra team before reducing this
-# value.
-seconds_between_requests = 0.05
-
-requests_cache.install_cache('cq')
-session = requests_cache.CachedSession()
-# if args.clear:
-# print 'Clearing cache...'
-# session.cache.clear()
-session.hooks = {'response': make_throttle_hook(seconds_between_requests)}
-
-
-def fetch_recent_issues(limit, args, cursor=None):
- search_url = ('https://codereview.chromium.org/search?format=json&'
- 'limit=%d') % limit
- if cursor:
- search_url += '&cursor=%s' % cursor
- if args.modified_after:
- search_url += '&modified_after=%s' % args.modified_after
- if args.modified_before:
- search_url += '&modified_before=%s' % args.modified_before
- response = session.get(search_url)
- return response.json()
-
-
-def get_target_base_url_regexps():
- return CONFIG[config_name]['target_base_url_regexps']
-
-
-def matches_target_base_url(url):
- for regexp in get_target_base_url_regexps():
- match = regexp.match(url)
- if match:
- return True
- return False
-
-
-def issue_patch_string(issue_id, patch_id):
- return '%s:%s' % (issue_id, patch_id)
-
-
-def issue_display_url(issue_id):
- return 'https://codereview.chromium.org/%s' % issue_id
-
-
-def issue_url(issue_id):
- return 'https://codereview.chromium.org/api/%s?messages=true' % issue_id
-
-
-def date_from_iso_str(iso_str):
- # Issues have one of two formats:
- # 2013-10-17 16:43:04.391480
- # 2013-10-17 16:43:04
- try:
- return datetime.strptime(iso_str, '%Y-%m-%d %H:%M:%S.%f')
- except ValueError:
- return datetime.strptime(iso_str, '%Y-%m-%d %H:%M:%S')
-
-
-def round_timedelta(delta):
- # We never care about the milliseconds when printing timedeltas:
- return timedelta(seconds=round(delta.total_seconds()))
-
-
-def fetch_issue(issue_id):
- url = issue_url(issue_id)
- this_json = session.get(url).json()
- # pylint: disable=W0212
- cache_key = session.cache._url_to_key(url)
- _, now = session.cache.get_response_and_time(cache_key)
- return this_json, now
-
-
-def format_line(values, aligns, widths):
- values = map(str, values)
- args = zip(values, aligns, widths)
- return ' '.join([apply(align, (value, width))
- for value, align, width in args])
-
-
-class CQAttempt(object):
- def __init__(self):
- self.result = None
- self.patch_id = None
- self.issue_id = None
- self.author = None
- self.start_time = None
- self.end_time = None
-
- @property
- def issue_patch_string(self):
- return issue_patch_string(self.issue_id, self.patch_id)
-
- @property
- def duration(self):
- return self.end_time - self.start_time
-
-
-class CQAnalyzer(object):
- def __init__(self):
- self.state = None
- self.issue = None
- self.issue_id = None
- self.author = None
- self.patch_id = None
- self.start_time = None
- self.attempts = []
- self.manual_commits = set()
- self.no_try_issues = set()
- self.now = None
- # issue_id -> time since CQ start
- self.in_progress = {}
-
- # pylint: disable=C0301
- start_regexp = re.compile('''CQ is trying da patch. Follow status at
-https://chromium-status.appspot.com/cq/(?P<author>.*)/(?P<issue_id>\d+)/(?P<patch_id>\d+)''')
- committed_regexp = re.compile('Change committed as (?P<revision>\d+)')
- # pylint: disable=C0301
- manual_commit_regexp = re.compile('Committed patchset #(?P<patch_id>\d+) manually as r(?P<revision>\d+)')
-
- def _reset(self):
- self.state = None
- self.author = None
- self.patch_id = None
- self.start_time = None
-
- def _start(self, patch_id, start_time, author=None):
- if self.state == 'START' and self.patch_id == patch_id:
- # print 'Restarted for patchset %s on %s' % (
- # patch_id, issue_display_url(self.issue_id))
- self._end('RESTART', start_time)
- self.state = 'START'
- self.patch_id = patch_id
- self.author = author
- assert start_time
- self.start_time = start_time
-
- def _end(self, result, end_time):
- if self.state != 'START':
- print 'ERROR: %s for %s without start??' % (
- result, issue_display_url(self.issue_id))
- self._reset()
- return
- attempt = CQAttempt()
- attempt.result = result
- attempt.patch_id = self.patch_id
- attempt.issue_id = self.issue_id
- attempt.start_time = self.start_time
- attempt.end_time = end_time
- self.attempts.append(attempt)
- self._reset()
-
- def _start_and_end(self, result, date):
- self._start(result, date)
- self._end(result, date)
-
- def _manual_commit(self, patch_id):
- self.manual_commits.add(issue_patch_string(self.issue_id, patch_id))
-
- def process_message(self, message):
- text = message['text']
- date = date_from_iso_str(message['date'])
-
- match = self.manual_commit_regexp.match(text)
- if match:
- if self.start_time:
- self._end('MANUAL_COMMIT',
- date_from_iso_str(self.issue['modified']))
- patch_number = int(match.group('patch_id'))
- # gcl dcommit talks in terms of patch numbers 1-5, we need to map
- # those to patchset ids:
- if len(self.issue['patchsets']) > (patch_number-1):
- patch_id = self.issue['patchsets'][patch_number-1]
- else:
- print '%s missing patch number %d' % (
- self.issue_id, patch_number)
- print self.issue['patchsets']
- print 'issue, now = fetch_issue(\'%s\')' % self.issue_id
- patch_id = self.issue['patchsets'][-1]
- self._manual_commit(patch_id)
- return
-
- if message['sender'] != 'commit-bot@chromium.org':
- return
-
- match = self.start_regexp.match(text)
- if match:
- self._start(match.group('patch_id'), date, match.group('author'))
- return
- match = self.committed_regexp.match(text)
- if match:
- self._end('SUCCESS', date)
- return
-
- cq_end_messages = {
- 'TRY': 'Retried try job',
- 'APPLY': 'Failed to apply patch',
- 'APPLY2': 'Failed to apply the patch',
- 'COMPILE': 'Sorry for I got bad news for ya',
- 'DESCRIPTION_CHANGED': ('Commit queue rejected this change because '
- 'the description'),
- # This is too conservative.
- 'REVIEWERS_CHANGED': 'List of reviewers changed.',
- # User caused.
- 'PATCH_CHANGED': 'Commit queue failed due to new patchset.',
- # FAILED_TO_TRIGGER is a very serious failure, unclear why it
- # happens!
- 'FAILED_TO_TRIGGER': 'Failed to trigger a try job on',
- # BINARY_FILE is just a bug in the CQ.
- 'BINARY_FILE': 'Can\'t process patch for file',
- 'BINARY_FILE2': 'Failed to request the patch to try',
- # Unclear why UPDATE_STEP happens. Likely broken bots, shouldn't
- # fail patches!
- 'UPDATE_STEP': 'Step "update" is always a major failure.',
- 'BERSERK': 'The commit queue went berserk',
- 'INTERNAL_ERROR': 'Commit queue had an internal error.',
- }
- for result, message_text in cq_end_messages.items():
- if text.startswith(message_text):
- self._end(result, date)
- return
-
- cq_fail_to_start_messsages = {
- 'FAILED_PATCHSET': 'Failed to get patchset properties',
- 'NO_COMMENTS': 'No comments yet.',
- 'NO_LGTM': 'No LGTM from a valid reviewer yet.',
- }
- for result, message_text in cq_fail_to_start_messsages.items():
- if text.startswith(message_text):
- self._start_and_end(result, date)
- return
-
- print 'Error %s has unknown message: %s' % (
- issue_display_url(self.issue_id), text)
- self._end('UNKNOWN', date)
-
- def start_issue(self, issue, now):
- # We may be dealing with cached data, so cache our concept of "now"
- self.now = now
- self.issue = issue
- self.issue_id = issue['issue']
-
- def end_issue(self, issue):
- issue_id = issue['issue']
- assert issue_id == self.issue_id
- if self.start_time:
- if self.issue['commit']:
- print '%s in progress? %s' % (
- round_timedelta(self.now - self.start_time),
- issue_display_url(self.issue_id))
- self._end('IN_PROGRESS', self.now)
- else:
- # There are various reasons why the commit box may have
- # been unchecked, including that the issue may be closed now.
- # If those are not from a user, then that's a bug in rietveld
- # and out of scope for this script. For now we're just ignoring
- # cases where the box was unchecked. We could log an _end()
- # event, but which time would we use? last_modified has at
- # best a weak corrolation with the issue close or CQ checkbox.
- self._reset()
- # _reset() shouldn't be needed, but just in case.
- self._reset()
- self.issue_id = None
- self.issue = None
-
- def process_issue(self, issue, now):
- issue_id = issue['issue']
-
- if re.search('^NOTRY=[tT][rR][uU][eE]$', issue['description'], re.M):
- self.no_try_issues.add(issue_id)
-
- self.start_issue(issue, now)
- for message in issue['messages']:
- self.process_message(message)
- # print '%(date)s: %(text)s' % message
- self.end_issue(issue)
-
- def print_attempts_table(self):
- result_getter = operator.attrgetter('result')
- attempts = sorted(self.attempts, key=result_getter)
-
- col_aligns = (str.rjust, str.ljust, str.rjust, str.rjust)
- col_widths = (5, 20, 16, 16)
- col_headers = ('count', 'result', 'mean duration', 'median duration')
- print
- print ('CQ Attempts by result (there can be more than '
- 'one attempt on the same patch)')
- print format_line(col_headers, col_aligns, col_widths)
- print '-' * (sum(col_widths) + len(col_widths) - 1)
- for result, group_itr in itertools.groupby(attempts, result_getter):
- group = list(group_itr)
- durations = map(operator.attrgetter('duration'), group)
- mean = sum(durations, timedelta()) / len(group)
- durations_seconds = map(timedelta.total_seconds, durations)
- median_seconds = numpy.median(durations_seconds)
- median = timedelta(seconds=round(median_seconds))
- values = (len(group), result, round_timedelta(mean), median)
- print format_line(values, col_aligns, col_widths)
- print
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('--base-url-stats', action='store_true',
- help='print base_url matching stats')
- parser.add_argument('--chrome', action='store_true')
- parser.add_argument('--clear', action='store_true',
- help='clear the cache before starting')
- parser.add_argument('--count', type=int, default=None,
- help='number of issues to fetch')
- parser.add_argument('--modified-after', default=None,
- help=('search for issues modified after '
- 'this date YYYY-MM-DD'))
- parser.add_argument('--modified-before', default=None,
- help=('search for issues modified before '
- 'this date YYYY-MM-DD'))
- parser.add_argument('--progress', help='Show progress', action='store_true')
- parser.add_argument('--skia', action='store_true')
- args = parser.parse_args()
-
- # Rietveld allows up to 1000 results per search query. I don't know if
- # that's better for the server or not. We'll use 100 to be safe.
- per_request_search_limit = 100
- if args.count:
- per_request_search_limit = min(int(args.count/2), 100)
- # Currently looking at the last 2000 entries.
- target_count = args.count
- if args.clear:
- print 'Clearing cache...'
- session.cache.clear()
- global config_name
- if args.chrome:
- config_name = 'chrome'
- elif args.skia:
- config_name = 'skia'
- else:
- config_name = 'blink'
- print 'Fetching and analyzing most recent issues...'
- analyzer = CQAnalyzer()
-
- total_fetch_count = 0
- issue_count = 0
- cursor = None
- url_counts = collections.Counter()
- while True:
- search_results = fetch_recent_issues(per_request_search_limit, args,
- cursor)
- if len(search_results['results']) == 0:
- break
- cursor = search_results['cursor']
- total_fetch_count += per_request_search_limit
-
- if args.base_url_stats:
- url_counts.update([result['base_url']
- for result in search_results['results']])
-
- for result in search_results['results']:
- if not matches_target_base_url(result['base_url']):
- continue
- issue_count += 1
- if args.progress and (issue_count % 100 == 0):
- print issue_count,
- if target_count:
- print target_count
- issue, now = fetch_issue(result['issue'])
- analyzer.process_issue(issue, now)
- if target_count and issue_count >= target_count:
- break
-
- if args.base_url_stats:
- print
- for url, count in url_counts.most_common():
- matches_target = matches_target_base_url(url)
- print '%s %s %s' % (matches_target, count, url)
-
- print
- print 'Found %s issues (in the %s most recent issues).' % (
- issue_count, total_fetch_count)
- cq_issues = set([attempt.issue_id for attempt in analyzer.attempts])
- cq_issue_count = len(cq_issues)
- cq_patches = set([attempt.issue_patch_string
- for attempt in analyzer.attempts])
- cq_patch_count = len(cq_patches)
- print ('%s issues (%d%%) (%d patches) tried the CQ, '
- 'resulting in %d CQ attempts.') % (
- cq_issue_count, 100 * cq_issue_count / issue_count, cq_patch_count,
- len(analyzer.attempts))
-
- no_try_issues = len(cq_issues & analyzer.no_try_issues)
- gave_up_patches = len(cq_patches & analyzer.manual_commits)
- print ('%s of those (%d%%) were committed manually (gave up). '
- '%s (%d%%) were marked NOTRY.') % (
- gave_up_patches, 100 * gave_up_patches / cq_issue_count,
- no_try_issues, 100 * no_try_issues / cq_issue_count)
-
- analyzer.print_attempts_table()
-
- identifier_getter = operator.attrgetter('issue_patch_string')
- attempts = sorted(analyzer.attempts, key=identifier_getter)
- extra_user_clicks = 0
- eventually_success_durations = []
- eventually_success_attempts = []
-
- # pylint: disable=W0612
- for identifier, group_itr in itertools.groupby(attempts, identifier_getter):
- group = list(group_itr)
- if group[0].issue_id in analyzer.no_try_issues:
- continue
- results = map(operator.attrgetter('result'), group)
- # print '%s(%s): %s %s' % (identifier, len(group), total_time, results)
- if 'SUCCESS' in results:
- # 'RESTART' events may not require a user re-click?
- user_initiated = filter(lambda result: result != 'RESTART', results)
- extra_user_clicks += len(user_initiated) - 1
- durations = map(operator.attrgetter('duration'), group)
- eventually_success_durations.append(
- sum(durations, timedelta()).total_seconds())
- eventually_success_attempts.append(len(group))
-
- print ('%s CQ starts (%d%%) were due a previous false-negative '
- '(CQ landed a patch it previously rejected)') % (
- extra_user_clicks, 100 * extra_user_clicks / len(analyzer.attempts))
-
- print 'Patches which eventually land percentiles:'
- for i in [10, 25, 50, 75, 90, 95, 99]:
- eventually_success_durations_p = round(numpy.percentile(
- eventually_success_durations, i)/(60*60), 3)
- eventually_success_attempts_p = numpy.percentile(
- eventually_success_attempts, i)
- print '%d: %.3f hrs, %.3f attempts' % (
- i, eventually_success_durations_p, eventually_success_attempts_p)
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/tools/watch.py b/tools/watch.py
deleted file mode 100755
index f068577..0000000
--- a/tools/watch.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 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.
-"""Watch for rietveld issues with the commit bit set but no activity."""
-
-import datetime
-import logging
-import optparse
-import os
-import re
-import sys
-import time
-
-sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-
-import find_depot_tools # pylint: disable=W0611
-import breakpad
-import rietveld
-
-
-def seconds(td):
- return td.seconds + td.days * 24 * 3600
-
-
-def to_epoch(date_str):
- dt = datetime.datetime(*map(int, re.split('[^\d]', date_str)[:-1]))
- return seconds(dt - datetime.datetime(1970, 1, 1))
-
-
-def main():
- parser = optparse.OptionParser(
- description=sys.modules['__main__'].__doc__)
- parser.add_option('-d', '--delay', default=3*60*60, type='int')
- parser.add_option('-u', '--user')
- parser.add_option('-v', '--verbose', action='store_true')
- options, args = parser.parse_args(None)
- if options.verbose:
- logging.basicConfig(level=logging.DEBUG)
- else:
- logging.basicConfig(level=logging.ERROR)
- if len(args) != 1:
- parser.error('Need 1 arg')
-
- url = args[0].rstrip('/') + '/'
- if not 'http' in url:
- url = 'http://' + url
- obj = rietveld.Rietveld(args[0], options.user, None)
- notified = []
- while True:
- now = time.time()
- earliest = now - options.delay
- for issue in obj.search(commit='1', closed='2'):
- print '%d' % issue['issue']
- if issue['issue'] in notified:
- continue
- if (not issue['base_url'] or
- to_epoch(issue['modified']) < earliest):
- data = ['%s%d' % (url, issue['issue']), issue['base_url']]
- breakpad.SendStack(str(now), data)
- notified.append(issue['issue'])
- time.sleep(5*60)
- return 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/verification/authors_white_list.py b/verification/authors_white_list.py
deleted file mode 100644
index 618bde6..0000000
--- a/verification/authors_white_list.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# coding=utf8
-# Copyright (c) 2011 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.
-"""Ignores issues not passing a authors regex."""
-
-import re
-
-from verification import base
-
-
-class AuthorVerifier(base.Verifier):
- """Needs the author to match at least one regexp in self.regex."""
- name = 'author_white_list'
-
- def __init__(self, author_white_list):
- super(AuthorVerifier, self).__init__()
- self.author_white_list = author_white_list
-
- def verify(self, pending):
- if not any(re.match(r, pending.owner) for r in self.author_white_list):
- pending.verifications[self.name] = base.SimpleStatus(
- state=base.FAILED,
- error_message='Can\'t commit because the owner %s not in whitelist' %
- pending.owner)
- else:
- pending.verifications[self.name] = base.SimpleStatus(base.SUCCEEDED)
-
- def update_status(self, queue):
- pass
diff --git a/verification/base.py b/verification/base.py
deleted file mode 100644
index 0c61399..0000000
--- a/verification/base.py
+++ /dev/null
@@ -1,170 +0,0 @@
-# coding=utf8
-# 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.
-"""Defines base classes for pending change verification classes."""
-
-import model
-
-
-# Verifier state in priority level.
-# SUCCEEDED : This verifier is fine to commit this patch.
-# PROCESSING: No decision was made yet. The verifier runs asynchronously.
-# FAILED : Verification failed, this patch must not be committed.
-# IGNORED : This patch must be ignored and no comment added to the code
-# review.
-SUCCEEDED, PROCESSING, FAILED, IGNORED = range(4)
-VALID_STATES = set((SUCCEEDED, PROCESSING, FAILED, IGNORED))
-
-
-class DiscardPending(Exception):
- """Exception to be raised when a pending item should be discarded."""
-
- def __init__(self, pending, status):
- super(DiscardPending, self).__init__(status)
- self.pending = pending
- self.status = status
-
-
-class Verified(model.PersistentMixIn):
- """A set of verifications that are for a specific patch."""
- verifications = dict
-
- def pending_name(self):
- raise NotImplementedError()
-
- @model.immutable
- def get_state(self):
- """Returns the combined state of all the verifiers for this item.
-
- Use priority with the states: IGNORED > FAILED > PROCESSING > SUCCEEDED.
- """
- # If there's an error message, it failed.
- if self.error_message():
- return FAILED
- if not self.verifications:
- return PROCESSING
- states = set(v.get_state() for v in self.verifications.itervalues())
- assert states.issubset(VALID_STATES)
- return max(states)
-
- @model.immutable
- def postpone(self):
- """This item shouldn't be committed right now.
-
- Call repeatedly until it returns False. This is a potentially slow call so
- only call it when get_state() returns SUCEEDED.
- """
- return any(v.postpone() for v in self.verifications.itervalues())
-
- @model.immutable
- def error_message(self):
- """Returns all the error messages concatenated if any."""
- out = (i.error_message for i in self.verifications.itervalues())
- return '\n\n'.join(filter(None, out))
-
- def apply_patch(self, context, prepare):
- """Applies a patch from the codereview tool to the checkout."""
- raise NotImplementedError()
-
- @model.immutable
- def why_not(self):
- """Returns a string of all the reasons the current patch can't be
- commited"""
- why_nots = dict((k, v.why_not())
- for k, v in self.verifications.iteritems())
- return '\n'.join('%s: %s' % (k, v) for k, v in why_nots.iteritems() if v)
-
-
-class IVerifierStatus(model.PersistentMixIn):
- """Interface for objects in Verified.verifications dictionary."""
- error_message = (None, unicode)
-
- def get_state(self):
- """See Verified.get_state()."""
- raise NotImplementedError()
-
- @model.immutable
- def postpone(self): # pylint: disable=R0201
- """See Verified.postpone()."""
- return False
-
- def why_not(self):
- """Returns a message why the commit cannot be committed yet.
-
- E.g. why get_state() == PROCESSING.
- """
- raise NotImplementedError()
-
-
-class SimpleStatus(IVerifierStatus):
- """Base class to be used for simple true/false and why not verifiers."""
- state = int
-
- def __init__(self, state=PROCESSING, **kwargs):
- super(SimpleStatus, self).__init__(state=state, **kwargs)
-
- @model.immutable
- def get_state(self):
- return self.state
-
- @model.immutable
- def why_not(self):
- if self.state == PROCESSING:
- return 'Processing'
- return
-
-
-class Verifier(object):
- """This class and its subclasses are *not* serialized."""
- name = None
-
- def __init__(self):
- assert self.name is not None
-
- def verify(self, pending):
- """Verifies a pending change.
-
- Called with os.getcwd() == checkout.project_path.
- """
- raise NotImplementedError()
-
- def update_status(self, queue):
- """Updates the status of all pending changes, for asynchronous checks.
-
- It is not necessarily called from inside checkout.project_path.
- """
- raise NotImplementedError()
-
- @model.immutable
- def loop(self, queue, gen_obj, pending_only):
- """Loops in a pending queue and returns the verified item corresponding to
- the Verifier.
- """
- for pending in queue:
- if self.name not in pending.verifications:
- pending.verifications[self.name] = gen_obj()
- if (not pending_only or
- pending.verifications[self.name].get_state() == PROCESSING):
- yield pending, pending.verifications[self.name]
-
-
-class VerifierCheckout(Verifier): # pylint: disable=W0223
- """A verifier that needs a rietveld and checkout objects.
-
- When verify() is called, it is guaranteed that the patch is applied on the
- checkout.
- """
- def __init__(self, context_obj):
- super(VerifierCheckout, self).__init__()
- self.context = context_obj
-
- @model.immutable
- def send_status(self, pending, data):
- """Sends an update to the CQ dashboard.
-
- self.context.status is usually an instance of AsyncPush so the HTTP POST is
- done in a background thread.
- """
- self.context.status.send(
- pending, {'verification': self.name, 'payload': data})
diff --git a/verification/fake.py b/verification/fake.py
deleted file mode 100644
index c38009e..0000000
--- a/verification/fake.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# coding=utf8
-# Copyright (c) 2011 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.
-"""A verifier that does nothing."""
-
-from verification import base
-
-
-class FakeVerifier(base.Verifier):
- name = 'fake'
-
- def __init__(self, state):
- super(FakeVerifier, self).__init__()
- self.state = state
-
- def verify(self, pending):
- pending.verifications[self.name] = base.SimpleStatus(self.state)
-
- def update_status(self, queue):
- pass
-
-
-class DeferredFakeVerifier(base.Verifier):
- name = 'fake'
-
- def __init__(self, state, delay):
- super(DeferredFakeVerifier, self).__init__()
- self.state = state
- self.delay = delay
-
- def verify(self, pending):
- pending.verifications[self.name] = base.SimpleStatus()
-
- def update_status(self, queue):
- if self.delay:
- self.delay -= 1
- return
-
- for _, fake in self.loop(queue, base.SimpleStatus, True):
- fake.state = self.state
diff --git a/verification/presubmit_check.py b/verification/presubmit_check.py
deleted file mode 100644
index 2e81f3e..0000000
--- a/verification/presubmit_check.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# coding=utf8
-# Copyright (c) 2011 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.
-"""Runs presubmit check on the source tree."""
-
-import logging
-import os
-import sys
-import time
-
-from verification import base
-
-import find_depot_tools # pylint: disable=W0611
-import subprocess2
-
-
-class PresubmitCheckVerifier(base.VerifierCheckout):
- name = 'presubmit'
-
- def __init__(self, context_obj, timeout=6*60):
- super(PresubmitCheckVerifier, self).__init__(context_obj)
- self.root_dir = os.path.dirname(os.path.abspath(__file__))
- self.execution_timeout = timeout
-
- def verify(self, pending):
- """Runs the presubmit script synchronously.
-
- TODO(maruel): Now that it runs out of process, it should be run
- asynchronously. That means that the PRESUBMIT checks needs to be better
- written, if an integration tests starts a service, it needs to be able to
- use an ephemeral port and not an hardcoded port.
- """
- logging.info('Presubmit check for %s' % ','.join(pending.files))
- cmd = [
- sys.executable,
- os.path.join(self.root_dir, 'presubmit_shim.py'),
- '--commit',
- '--author', str(pending.owner),
- '--issue', str(pending.issue),
- '--patchset', str(pending.patchset),
- '--name', pending.pending_name(),
- '--description', pending.description,
- '--rietveld_url', self.context.rietveld.url,
- ]
- cmd.extend(pending.files)
- start = time.time()
- self.send_status(pending, {})
-
- # Disable breakpad, no need to notify maintainers on internal crashes.
- env = os.environ.copy()
- env['NO_BREAKPAD'] = '1'
-
- try:
- # Do not pass them through the command line.
- data = '%s\n%s\n' % (
- self.context.rietveld.email, self.context.rietveld.password)
- # Use check_output() so stdout is kept when an exception is thrown.
- output = subprocess2.check_output(
- cmd,
- timeout=self.execution_timeout,
- stderr=subprocess2.STDOUT,
- stdin=data,
- env=env,
- preexec_fn=os.setpgrp)
- pending.verifications[self.name] = base.SimpleStatus(state=base.SUCCEEDED)
- self.send_status(
- pending,
- {
- 'duration': time.time() - start,
- 'output': output,
- })
- except subprocess2.CalledProcessError as e:
- output = (
- 'Presubmit check for %s failed and returned exit status %s.\n') % (
- pending.pending_name(), e.returncode)
- duration = time.time() - start
- timed_out = duration > self.execution_timeout
- if timed_out:
- output += (
- 'The presubmit check was hung. It took %2.1f seconds to execute '
- 'and the time limit is %2.1f seconds.\n') % (
- duration, self.execution_timeout)
- output += '\n%s' % e.stdout
- pending.verifications[self.name] = base.SimpleStatus(
- state=base.FAILED, error_message=output)
- self.send_status(
- pending,
- {
- 'duration': duration,
- 'output': e.stdout,
- 'return': e.returncode,
- 'timed_out': timed_out,
- })
-
- def update_status(self, queue):
- pass
diff --git a/verification/presubmit_shim.py b/verification/presubmit_shim.py
deleted file mode 100755
index 4ce62af..0000000
--- a/verification/presubmit_shim.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-# coding=utf8
-# 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.
-"""Runs presubmit check on the source tree.
-
-This shims removes the checks for try jobs.
-"""
-
-import os
-import sys
-
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.insert(0, os.path.dirname(ROOT_DIR))
-
-import find_depot_tools # pylint: disable=W0611
-import presubmit_support
-
-# Do not pass them through the command line.
-email = sys.stdin.readline().strip()
-assert email
-password = sys.stdin.readline().strip()
-sys.stdin.close()
-
-argv = sys.argv[1:]
-argv.extend(['--rietveld_email', email, '--rietveld_password', password])
-argv.extend(['--skip_canned', 'CheckRietveldTryJobExecution'])
-argv.extend(['--skip_canned', 'CheckTreeIsOpen'])
-argv.extend(['--skip_canned', 'CheckBuildbotPendingBuilds'])
-
-sys.exit(presubmit_support.Main(argv))
diff --git a/verification/project_base.py b/verification/project_base.py
deleted file mode 100644
index 7393746..0000000
--- a/verification/project_base.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# coding=utf8
-# Copyright (c) 2011 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.
-"""Ignores issues not using the right project base url regex."""
-
-import logging
-import os
-import re
-
-import find_depot_tools # pylint: disable=W0611
-import breakpad
-
-from verification import base
-
-
-class ProjectBaseUrlVerifier(base.Verifier):
- """Needs the project base url to match at least one regexp in self.regex."""
- name = 'project_bases'
-
- def __init__(self, project_bases):
- super(ProjectBaseUrlVerifier, self).__init__()
- self.project_bases = project_bases
-
- def verify(self, pending):
- matches = filter(
- None, (re.match(r, pending.base_url) for r in self.project_bases))
- if not matches:
- logging.info('%s not in whitelist' % pending.base_url)
- state = base.IGNORED
- else:
- if len(matches) != 1:
- breakpad.SendStack(
- Exception('pending.base_url triggered multiple matches'), '')
- match = matches[0]
- if match.lastindex:
- pending.relpath = match.group(match.lastindex).lstrip('/').replace(
- '/', os.sep)
- state = base.SUCCEEDED
- pending.verifications[self.name] = base.SimpleStatus(state)
-
- def update_status(self, queue):
- pass
diff --git a/verification/reviewer_lgtm.py b/verification/reviewer_lgtm.py
deleted file mode 100644
index edcdc69..0000000
--- a/verification/reviewer_lgtm.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# coding=utf8
-# 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.
-"""Look for a LGTM in the messages from a valid reviewer."""
-
-import logging
-import re
-
-from verification import base
-
-
-def _regexp_check(value, whitelist, blacklist):
- """Returns True if value passes whitelist and not blacklist.
-
- Both whitelist and blacklist are a list of regexp strings.
- """
- def match(value, checklist):
- return any(re.match(i, value) for i in checklist)
- return match(value, whitelist) and not match(value, blacklist)
-
-
-class LgtmStatus(base.SimpleStatus):
- NO_COMMENT = 'No comments yet.'
- NO_LGTM = (
- 'No LGTM from a valid reviewer yet. Only full committers are accepted.\n'
- 'Even if an LGTM may have been provided, it was from a non-committer or\n'
- 'a lowly provisional committer, _not_ a full super star committer.\n'
- 'See http://www.chromium.org/getting-involved/become-a-committer\n'
- 'Note that this has nothing to do with OWNERS files.')
-
- def __init__(self, pending=None, whitelist=None, blacklist=None, **kwargs):
- super(LgtmStatus, self).__init__(**kwargs)
- # Can't save 'pending' reference here but postpone() will need it as a
- # parameter.
- if pending:
- self._check(pending, whitelist, blacklist)
-
- def _check(self, pending, whitelist, blacklist):
- """Updates self.state and self.error_message properties."""
- # The owner cannot be a reviewer.
- blacklist_owner = blacklist + [re.escape(pending.owner)]
-
- if self._is_tbr(pending):
- logging.debug('Change %s is TBR' % pending.issue)
- if _regexp_check(pending.owner, whitelist, blacklist):
- # TBR changes from a committer are fine.
- self.state = base.SUCCEEDED
- return
-
- if not pending.messages:
- self.error_message = self.NO_COMMENT
- self.state = base.FAILED
- return
-
- def match_reviewer(r):
- return _regexp_check(r, whitelist, blacklist_owner)
-
- for i in pending.messages:
- if i['approval'] and match_reviewer(i['sender']):
- logging.info('Found lgtm by %s' % i['sender'])
- self.state = base.SUCCEEDED
- return
-
- # TODO: Force a refresh of the meta data and use postpone() instead of
- # bailing out if there is a valid reviewer that hasn't replied yet.
- self.error_message = self.NO_LGTM
- self.state = base.FAILED
-
- @staticmethod
- def _is_tbr(pending):
- """Returns True if a description contains TBR=.
-
- This function should be moved elsewhere.
- """
- return bool(re.search(r'^TBR=.*$', pending.description, re.MULTILINE))
-
-
-class ReviewerLgtmVerifier(base.Verifier):
- """Needs at least one reviewer matching at least one regexp in
- self.reviewers that is not also the owner of the issue.
- """
- name = 'reviewer_lgtm'
-
- def __init__(self, whitelist, blacklist):
- super(ReviewerLgtmVerifier, self).__init__()
- self.whitelist = whitelist
- self.blacklist = blacklist
-
- def verify(self, pending):
- pending.verifications[self.name] = LgtmStatus(
- pending=pending, whitelist=self.whitelist, blacklist=self.blacklist)
-
- def update_status(self, queue):
- pass
diff --git a/verification/tree_status.py b/verification/tree_status.py
deleted file mode 100644
index 09331c4..0000000
--- a/verification/tree_status.py
+++ /dev/null
@@ -1,86 +0,0 @@
-# coding=utf8
-# 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.
-"""Postpone commits until the tree is open."""
-
-import calendar
-import json
-import logging
-import re
-import ssl
-import time
-import urllib2
-
-from verification import base
-
-
-class TreeStatus(base.IVerifierStatus):
- tree_status_url = unicode
- issue = int
- last_tree_status = unicode
-
- def get_state(self):
- return base.SUCCEEDED
-
- def postpone(self):
- self.last_tree_status = u''
- try:
- logging.debug('Fetching tree status for %s' % self.tree_status_url)
- now = time.time()
- cutoff = now - 5 * 60
- url = self.tree_status_url + '/allstatus?format=json&endTime=%d' % cutoff
- data = json.load(urllib2.urlopen(url))
-
- # Convert datetime string to epoch.
- for item in data:
- # The time is returned in UTC.
- x = time.strptime(item['date'].split('.', 1)[0], '%Y-%m-%d %H:%M:%S')
- item['date'] = calendar.timegm(x)
-
- for item in sorted(data, key=lambda x: x['date'], reverse=True):
- if item['general_state'] != 'open':
- logging.warn(
- 'Not committing CL %d because the tree was closed %ds ago',
- self.issue, int(now - item['date']))
- self.last_tree_status = unicode(item['message'])
- return True
- if item['date'] < cutoff:
- break
- return False
- except (ssl.SSLError, urllib2.URLError, IOError, ValueError):
- logging.error('Failed to request tree status! %s' % url)
- return True
-
- def why_not(self):
- if self.last_tree_status:
- return u'Tree is currently not open: %s' % self.last_tree_status
-
-
-class AlwaysOpenTreeStatus(TreeStatus):
- """Used when tree status does not need to be checked."""
- def postpone(self):
- return False
-
-
-class TreeStatusVerifier(base.Verifier):
- """Checks the tree status before allowing a commit."""
- name = 'tree status'
-
- def __init__(self, tree_status_url):
- super(TreeStatusVerifier, self).__init__()
- self.tree_status_url = tree_status_url
-
- def verify(self, pending):
- if re.search(r'(?im)^NOTREECHECKS=TRUE$', pending.description):
- # Use a TreeStatus instance that always returns False for postpone().
- tree_status = AlwaysOpenTreeStatus()
- else:
- tree_status = TreeStatus(
- tree_status_url=self.tree_status_url, issue=pending.issue)
-
- pending.verifications[self.name] = tree_status
-
- def update_status(self, queue):
- pass
-
diff --git a/verification/trigger_experimental_try_job.py b/verification/trigger_experimental_try_job.py
deleted file mode 100644
index 26ee561..0000000
--- a/verification/trigger_experimental_try_job.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# coding=utf8
-# Copyright 2014 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.
-"""Triggers experimental try jobs on Rietveld without monitoring the results."""
-
-import random
-import urllib2
-
-from verification import base
-
-
-class TriggerExperimentalTryJobVerifier(base.Verifier):
- name = 'trigger experimental try job'
-
- def __init__(self, context, percentage, revision, try_job_description):
- super(TriggerExperimentalTryJobVerifier, self).__init__()
- self.context = context
- self.percentage = percentage
- self.revision = revision
- self.try_job_description = try_job_description
-
- def verify(self, pending):
- if random.random() < self.percentage:
- try:
- self.context.rietveld.trigger_try_jobs(
- pending.issue, pending.patchset, 'CQ', False, self.revision,
- self.try_job_description)
- except urllib2.HTTPError as e:
- if e.code not in (400, 500, 503):
- raise
-
- # Always succeed - experimental try jobs are not stable enough
- # to block CQ on them, but triggering builds allows developers
- # to get enough real-world traffic to get them to stable state.
- pending.verifications[self.name] = base.SimpleStatus(base.SUCCEEDED)
-
- def update_status(self, queue):
- pass
diff --git a/verification/try_job_on_rietveld.py b/verification/try_job_on_rietveld.py
deleted file mode 100644
index 359acb6..0000000
--- a/verification/try_job_on_rietveld.py
+++ /dev/null
@@ -1,755 +0,0 @@
-# coding=utf8
-# 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.
-"""Sends patches to the Try server and reads back results.
-
-- RietveldTryJobs contains RietveldTryJob, one per try job on a builder.
-- TryRunnerRietveld uses Rietveld to signal and poll job results.
-"""
-
-import collections
-import errno
-import logging
-import re
-import socket
-import time
-import urllib2
-
-import buildbot_json
-import model
-from verification import base
-from verification import try_job_steps
-
-# A build running for longer than this is considered to be timed out.
-TIMED_OUT = 12 * 60 * 60
-
-
-def is_job_expired(now, revision, timestamp, checkout):
- """Returns False if the job result is still somewhat valid.
-
- A job that occured more than 4 days ago or more than 200 commits behind
- is 'expired'.
- """
- if timestamp < (now - 4*24*60*60):
- return True
- if checkout.revisions(revision, None) >= 200:
- return True
- return False
-
-
-TryJobProperties = collections.namedtuple(
- 'TryJobProperties',
- ['key', 'parent_key', 'builder', 'build', 'buildnumber', 'properties'])
-
-
-def filter_jobs(try_job_results, watched_builders, current_irrelevant_keys,
- status):
- """For each try jobs results, query the Try Server for updated status and
- returns details about each job in a TryJobProperties.
-
- Returns a list of namedtuple describing the updated results and and the new
- list of irrelevant keys.
-
- It adds the build to the ignored list if the build doesn't exist on the Try
- Server anymore (usually it's too old) or if the try job was not triggered by
- the Commit Queue itself.
- """
- irrelevant = set(current_irrelevant_keys)
- try_jobs_with_props = []
- for result in try_job_results:
- key = result['key']
- assert key
- if key in current_irrelevant_keys:
- continue
- builder = result['builder']
- try:
- buildnumber = int(result['buildnumber'])
- except (TypeError, ValueError):
- continue
- if buildnumber < 0:
- logging.debug('Ignoring %s/%d; invalid', builder, buildnumber)
- irrelevant.add(key)
- continue
-
- if builder not in watched_builders:
- logging.debug('Ignoring %s/%d; no step verifier is examining it', builder,
- buildnumber)
- irrelevant.add(key)
- continue
-
- # Constructing the object itself doesn't throw an exception, it's reading
- # its properties that throws.
- build = status.builders[builder].builds[buildnumber]
- try:
- props = build.properties_as_dict
- except IOError:
- logging.info(
- 'Build %s/%s is not on the try server anymore',
- builder, buildnumber)
- irrelevant.add(key)
- continue
- parent_key = props.get('parent_try_job_key')
- if parent_key:
- # Triggered build
- key = '%s/%d_triggered_%s' % (builder, buildnumber, parent_key)
- elif props.get('try_job_key') != key:
- # not triggered, not valid
- logging.debug(
- 'Ignoring %s/%d; not from rietveld', builder, buildnumber)
- irrelevant.add(key)
- continue
-
- try_jobs_with_props.append(
- TryJobProperties(key, parent_key, builder, build, buildnumber, props))
-
- # Sort the non-triggered builds first so triggered jobs
- # can expect their parent to be added to self.try_jobs
- try_jobs_with_props.sort(key=lambda tup: tup.parent_key)
-
- return try_jobs_with_props, list(irrelevant)
-
-
-def _is_skip_try_job(pending):
- """Returns True if a description contains NOTRY=true."""
- match = re.search(r'^NOTRY=(.*)$', pending.description, re.MULTILINE)
- return match and match.group(1).lower() == 'true'
-
-
-class RietveldTryJobPending(model.PersistentMixIn):
- """Represents a pending try job for a pending commit that we care about.
-
- It is immutable.
- """
- builder = unicode
- revision = (None, unicode, int)
- requested_steps = list
- clobber = bool
- # Number of retries for this configuration. Initial try is 1.
- tries = int
- init_time = float
-
- def __init__(self, **kwargs):
- required = set(self._persistent_members())
- actual = set(kwargs)
- assert required == actual, (required - actual, required, actual)
- super(RietveldTryJobPending, self).__init__(**kwargs)
- # Then mark it read-only.
- self._read_only = True
-
-
-class RietveldTryJob(model.PersistentMixIn):
- """Represents a try job for a pending commit that we care about.
-
- This data can be regenerated by parsing all the try job names but it is a bit
- hard on the try server.
-
- It is immutable.
- """
- builder = unicode
- build = int
- revision = (None, unicode, int)
- requested_steps = list
- # The timestamp when the build started. buildbot_json returns int.
- started = int
- steps_passed = list
- steps_failed = list
- clobber = bool
- completed = bool
- # Number of retries for this configuration. Initial try is 1.
- tries = int
- parent_key = (None, unicode)
- init_time = float
-
- def __init__(self, **kwargs):
- required = set(self._persistent_members())
- actual = set(kwargs)
- assert required == actual, (required - actual, required, actual)
- super(RietveldTryJob, self).__init__(**kwargs)
- # Then mark it read-only.
- self._read_only = True
-
- @property
- @model.immutable
- def result(self):
- if self.steps_failed:
- return buildbot_json.FAILURE
- if self.completed:
- return buildbot_json.SUCCESS
- return None
-
-
-class RietveldTryJobs(base.IVerifierStatus):
- """A set of try jobs that were sent for a specific patch.
-
- Multiple concurrent try jobs can be sent on a single builder. For example, a
- previous valid try job could have been triggered by the user but was not
- completed so another was sent with the missing tests.
- Also, a try job is sent as soon as a test failure is detected.
- """
- # An dict of RietveldTryJob objects per key.
- try_jobs = dict
- # The try job keys we ignore because they can't be used to give a good
- # signal: either they are too old (old revision) or they were not triggerd
- # by Rietveld, so we don't know if the diff is 100% good.
- irrelevant = list
- # When NOTRY=true is specified.
- skipped = bool
- # List of test verifiers. All the logic to decide when they are
- # and what bots they trigger is hidden inside.
- step_verifiers = list
- # Jobs that have been sent but are not found yet. Likely a builder is fully
- # utilized or the try server hasn't polled Rietveld yet. list of
- # RietveldTryJobPending() instances.
- pendings = list
-
- @model.immutable
- def get_state(self):
- """Returns the state of this verified.
-
- Failure can be from:
- - For each entry in self.step_verifiers:
- - A Try Job in self.try_jobs has been retried too often.
-
- In particular, there is no need to wait for every Try Job to complete.
- """
- if self.error_message:
- return base.FAILED
- if not self.tests_waiting_for_result():
- return base.SUCCEEDED
- return base.PROCESSING
-
- @model.immutable
- def tests_need_to_be_run(self, now):
- """Returns which tests need to be run.
-
- These are the tests that are not pending on any try job, either running or
- in the pending list.
- """
- # Skipped or failed, nothing to do.
- if self.skipped or self.error_message:
- return {}
-
- # What originally needed to be run.
- # All_tests is {builder_name: set(test_name*)}
- all_tests = {}
- for verifier in self.step_verifiers:
- (builder, tests) = verifier.need_to_trigger(self.try_jobs, now)
- if tests:
- all_tests.setdefault(builder, set()).update(tests)
-
- # Removes what is queued to be run but hasn't started yet.
- for try_job in self.pendings:
- if try_job.builder in all_tests:
- all_tests[try_job.builder] -= set(try_job.requested_steps)
-
- return dict(
- (builder, sorted(tests)) for builder, tests in all_tests.iteritems()
- if tests)
-
- @model.immutable
- def tests_waiting_for_result(self):
- """Returns the tests that we are waiting for results on pending or running
- builds.
- """
- # Skipped or failed, nothing to do.
- if self.skipped or self.error_message:
- return {}
-
- # What originally needed to be run.
- all_tests = {}
- for verification in self.step_verifiers:
- (builder, tests) = verification.waiting_for(self.try_jobs)
- if tests:
- all_tests.setdefault(builder, set()).update(tests)
-
- # Removes what was run.
- for try_job in self.try_jobs.itervalues():
- if try_job.builder in all_tests:
- all_tests[try_job.builder] -= set(try_job.steps_passed)
-
- return dict(
- (builder, list(tests)) for builder, tests in all_tests.iteritems()
- if tests)
-
- @model.immutable
- def watched_builders(self):
- """Marks all the jobs that the step_verifiers don't examine as
- irrelevant.
- """
- # Generate the list of builders to keep.
- watched_builders = set()
- for step_verifier in self.step_verifiers:
- watched_builders.add(step_verifier.builder_name)
- if isinstance(step_verifier, try_job_steps.TryJobTriggeredSteps):
- watched_builders.add(step_verifier.trigger_name)
-
- return watched_builders
-
- def update_jobs_from_rietveld(
- self, data, status, checkout, now):
- """Retrieves the jobs statuses from rietveld and updates its state.
-
- Args:
- owner: Owner of the CL.
- data: Patchset properties as returned from Rietveld.
- status: A buildbot_json.Buildbot instance.
- checkout: A depot_tools' Checkout instance.
- now: epoch time of what should be considered to be 'now'.
-
- Returns:
- Keys which were updated.
- """
- updated = []
- try_job_results = data.get('try_job_results', [])
- logging.debug('Found %d entries', len(try_job_results))
-
- try_jobs_with_props, self.irrelevant = filter_jobs(
- try_job_results, self.watched_builders() , self.irrelevant, status)
-
- # Ensure that all irrelevant jobs have been removed from the set of valid
- # try jobs.
- for irrelevant_key in self.irrelevant:
- if irrelevant_key in self.try_jobs:
- del self.try_jobs[irrelevant_key]
- if irrelevant_key + '_old' in self.try_jobs:
- del self.try_jobs[irrelevant_key + '_old']
-
- for i in try_jobs_with_props:
- if self._update_try_job_status(checkout, i, now):
- updated.append(i.key)
- return updated
-
- def _update_try_job_status(self, checkout, try_job_properties, now):
- """Updates status of a specific RietveldTryJob.
-
- try_job_property is an instance of TryJobProperties.
-
- Returns True if it was updated.
- """
- key = try_job_properties.key
- builder = try_job_properties.builder
- buildnumber = try_job_properties.buildnumber
- if key in self.irrelevant:
- logging.debug('Ignoring %s/%d; irrelevant', builder, buildnumber)
- return False
- if (try_job_properties.parent_key and
- try_job_properties.parent_key not in self.try_jobs):
- logging.debug('Ignoring %s, parent unknown', key)
- return False
-
- requested_steps = []
- # Set it to 0 as the default value since when the job is new and previous
- # try jobs are found, we don't want to count them as tries.
- tries = 0
- job = self.try_jobs.get(key)
- build = try_job_properties.build
- if job:
- if job.completed:
- logging.debug('Ignoring %s/%d; completed', builder, buildnumber)
- return False
- else:
- if now - job.started > TIMED_OUT:
- # Flush it and start over.
- self.irrelevant.append(key)
- del self.try_jobs[key]
- return False
- requested_steps = job.requested_steps
- tries = job.tries
- init_time = job.init_time
- else:
- # This try job is new. See if we triggered it previously by
- # looking in self.pendings.
- for index, pending_job in enumerate(self.pendings):
- if pending_job.builder == builder:
- # Reuse its item.
- requested_steps = pending_job.requested_steps
- tries = pending_job.tries
- self.pendings.pop(index)
- break
- else:
- # Is this a good build? It must not be too old and triggered by
- # rietveld.
- if is_job_expired(now, build.revision, build.start_time, checkout):
- logging.debug('Ignoring %s/%d; expired', builder, buildnumber)
- self.irrelevant.append(key)
- return False
- init_time = now
-
- passed = [s.name for s in build.steps if s.simplified_result]
- failed = [s.name for s in build.steps if s.simplified_result is False]
- # The steps in neither passed or failed were skipped.
- new_job = RietveldTryJob(
- init_time=init_time,
- builder=builder,
- build=buildnumber,
- revision=build.revision,
- requested_steps=requested_steps,
- started=build.start_time,
- steps_passed=passed,
- steps_failed=failed,
- clobber=bool(try_job_properties.properties.get('clobber')),
- completed=build.completed,
- tries=tries,
- parent_key=try_job_properties.parent_key)
- if job and job.build and new_job.build and job.build != new_job.build:
- # It's tricky because 'key' is the same for both. The trick is to create
- # a fake key for the old build and mark it as completed. Note that
- # Rietveld is confused by it too.
- logging.warning(
- 'Try Server was restarted and restarted builds with the same keys. '
- 'I\'m confused. %s: %d != %d', job.builder, job.build, new_job.build)
- # Resave the old try job and mark it as completed.
- self.try_jobs[key + '_old'] = RietveldTryJob(
- init_time=job.init_time,
- builder=job.builder,
- build=job.build,
- revision=job.revision,
- requested_steps=job.requested_steps,
- started=build.start_time,
- steps_passed=job.steps_passed,
- steps_failed=job.steps_failed,
- clobber=job.clobber,
- completed=True,
- tries=job.tries,
- parent_key=job.parent_key)
- if not job or not model.is_equivalent(new_job, job):
- logging.info(
- 'Job update: %s: %s/%d',
- try_job_properties.properties.get('issue'),
- builder,
- buildnumber)
- self.try_jobs[key] = new_job
- return key
-
- def signal_as_failed_if_needed(self, job, url, now):
- """Detects if the RietveldTryJob instance is in a state where it is
- impossible to make progress.
-
- If so, mark ourself as failed by setting self.error_message and return True.
- """
- if self.skipped or self.error_message:
- return False
- # Figure out steps that should be retried for this builder.
- missing_tests = self.tests_need_to_be_run(now).get(job.builder, [])
- if not missing_tests:
- return False
- if job.tries > 2:
- self.error_message = (
- 'Retried try job too often on %s for step(s) %s\n%s' %
- (job.builder, ', '.join(missing_tests), url))
- logging.info(self.error_message)
- return True
- return False
-
- @model.immutable
- def why_not(self):
- # Skipped or failed, nothing to do.
- if self.skipped or self.error_message:
- return None
- waiting = self.tests_waiting_for_result()
- if waiting:
- out = 'Waiting for the following jobs:\n'
- for builder in sorted(waiting):
- out += ' %s: %s\n' % (builder, ','.join(waiting[builder]))
- return out
-
-
-class TryRunnerRietveld(base.VerifierCheckout):
- """Stateless communication with a try server.
-
- Uses Rietveld to trigger the try job and reads try job status with the json
- API.
-
- Analysis goes as following:
- - compile step itself is not flaky. compile.py already takes care of most
- flakiness and clobber build is done by default. If compile step fails, try
- again with clobber=True
- - test steps are flaky and can be retried as necessary.
-
- 1. For each existing try jobs from rietveld.
- 1. Fetch result from try server.
- 2. If try job was generated from rietveld;
- 1. If not is_job_expired();
- 1. Skip any scheduled test that succeeded on this builder.
- 2. For each builder with tests scheduled;
- 1. If no step waiting to be triggered, skip this builder completely.
- 2. For each non succeeded job;
- 1. Send try jobs to rietveld.
-
- Note: It needs rietveld, hence it uses VerifierCheckout, but it doesn't need a
- checkout.
- """
- name = 'try job rietveld'
-
- # Only updates a job status once every 60 seconds.
- update_latency = 60
-
- def __init__(
- self, context_obj, try_server_url, commit_user, step_verifiers,
- ignored_steps, solution):
- super(TryRunnerRietveld, self).__init__(context_obj)
- self.try_server_url = try_server_url.rstrip('/')
- self.commit_user = commit_user
- # TODO(maruel): Have it be overridden by presubmit_support.DoGetTrySlaves.
- self.step_verifiers = step_verifiers
- self.ignored_steps = set(ignored_steps)
- # Time to poll the Try Server, and not Rietveld.
- self.last_update = time.time() - self.update_latency
- self.solution = solution
-
- def verify(self, pending):
- """Sends a try job to the try server and returns a RietveldTryJob list.
-
- This function is called synchronously.
- """
- jobs = pending.verifications.setdefault(self.name, RietveldTryJobs())
- if _is_skip_try_job(pending):
- # Do not run try job for it.
- jobs.skipped = True
- return
-
- # Overridde any previous list from the last restart.
- jobs.step_verifiers = []
- for step in self.step_verifiers:
- if isinstance(step, try_job_steps.TryJobTriggeredOrNormalSteps):
- # Since the steps are immutable, create a new step so that swarm
- # can be enabled.
- jobs.step_verifiers.append(try_job_steps.TryJobTriggeredOrNormalSteps(
- builder_name=step.builder_name,
- trigger_name=step.trigger_name,
- steps=step.steps,
- trigger_bot_steps=step.trigger_bot_steps,
- use_triggered_bot=True))
- else:
- jobs.step_verifiers.append(step)
-
- # First, update the status of the current try jobs on Rietveld.
- now = time.time()
- self._update_jobs_from_rietveld(pending, jobs, False, now)
-
- # Add anything that is missing.
- self._send_jobs(pending, jobs, now)
-
- # Slightly postpone next check.
- self.last_update = min(now, self.last_update + (self.update_latency / 4))
-
- def update_status(self, queue):
- """Grabs the current status of all try jobs and update self.queue.
-
- Note: it would be more efficient to be event based.
- """
- if not queue:
- logging.debug('The list is empty, nothing to do')
- return
-
- # Hard code 'now' to the value before querying and sending them. This will
- # cause some issues when querying state or sending the jobs takes a
- # non-trivial amount of time but in general it will be fine.
- now = time.time()
- if now - self.last_update < self.update_latency:
- logging.debug('TS: Throttling updates')
- return
- self.last_update = now
-
- # Update the status of the current pending CLs on Rietveld.
- for pending, jobs in self.loop(queue, RietveldTryJobs, True):
- # Update 'now' since querying the try jobs may take a significant amount
- # of time.
- now = time.time()
- if self._update_jobs_from_rietveld(pending, jobs, True, now):
- # Send any necessary job. Noop if not needed.
- self._send_jobs(pending, jobs, now)
-
- def _add_pending_job_and_send_if_needed(self, builder, steps, jobs,
- send_job, pending, now):
- # Find if there was a previous try.
- previous_jobs = [
- job for job in jobs.try_jobs.itervalues() if job.builder == builder
- ]
- if previous_jobs:
- tries = max(job.tries for job in previous_jobs)
- clobber = max(
- (job.clobber or 'compile' in job.steps_failed)
- for job in previous_jobs)
- else:
- tries = 0
- clobber = False
- if tries > 4:
- # Fail safe.
- jobs.error_message = (
- ( 'The commit queue went berserk retrying too often for a\n'
- 'seemingly flaky test on builder %s:\n%s') %
- ( builder,
- '\n'.join(self._build_status_url(j) for j in previous_jobs)))
- return False
-
- # Don't always send the job (triggered bots don't need to send there own
- # request).
- if send_job:
- logging.debug(
- 'Sending job %s for %s: %s', pending.issue, builder, ','.join(steps))
- try:
- self.context.rietveld.trigger_try_jobs(
- pending.issue, pending.patchset, 'CQ', clobber, 'HEAD',
- {builder: steps})
- except urllib2.HTTPError as e:
- if e.code == 400:
- # This probably mean a new patchset was uploaded since the last poll,
- # so it's better to drop the CL.
- jobs.error_message = 'Failed to trigger a try job on %s\n%s' % (
- builder, e)
- return False
- else:
- raise
-
- # Set the status of this pending job here and on the CQ page.
- jobs.pendings.append(
- RietveldTryJobPending(
- init_time=now,
- builder=builder,
- revision=None,
- requested_steps=steps,
- clobber=clobber,
- tries=tries + 1))
- # Update the status on the AppEngine status to signal a new try job was
- # sent.
- info = {
- 'builder': builder,
- 'clobber': clobber,
- 'job_name': 'CQ',
- 'revision': None, #revision,
- }
- self.send_status(pending, info)
- return True
-
- def _get_triggered_bots(self, builder, steps):
- """Returns a dict of all the (builder, steps) pairs of bots that will get
- triggered by the given builder steps combination."""
- triggered_bots = {}
- for verifier in self.step_verifiers:
- builder, steps = verifier.get_triggered_steps(builder, steps)
- if steps:
- triggered_bots[builder] = steps
-
- return triggered_bots
-
- def _send_jobs(self, pending, jobs, now):
- """Prepares the RietveldTryJobs instance |jobs| to send try jobs to the try
- server.
- """
- if jobs.error_message:
- # Too late.
- return
- remaining = jobs.tests_need_to_be_run(now)
- if not remaining:
- return
- # Send them in order to simplify testing.
- for builder in sorted(remaining):
- tests = remaining[builder]
- if not self._add_pending_job_and_send_if_needed(builder, tests, jobs,
- True, pending, now):
- # If the main job wasn't sent, we can't skip the triggered jobs since
- # they won't get triggered.
- continue
-
- # Add any pending bots that will be triggered from this build.
- triggered_bots = self._get_triggered_bots(builder, tests)
- for builder, steps in triggered_bots.iteritems():
- self._add_pending_job_and_send_if_needed(builder, steps, jobs, False,
- pending, now)
-
- @model.immutable
- def _build_status_url(self, job):
- """Html url for this try job."""
- assert job.build is not None, str(job)
- return '%s/buildstatus?builder=%s&number=%s' % (
- self.try_server_url, job.builder, job.build)
-
- @model.immutable
- def _update_dashboard(self, pending, job):
- """Updates the CQ dashboard with the current Try Job state as known to the
- CQ.
- """
- logging.debug('_update_dashboard(%s/%s)', job.builder, job.build)
- info = {
- 'build': job.build,
- 'builder': job.builder,
- 'job_name': 'CQ',
- 'result': job.result,
- 'revision': job.revision,
- 'url': self._build_status_url(job),
- }
- self.send_status(pending, info)
-
- def _update_jobs_from_rietveld(self, pending, jobs, handle, now):
- """Grabs data from Rietveld and pass it to
- RietveldTryJobs.update_jobs_from_rietveld().
-
- Returns True on success.
- """
- status = buildbot_json.Buildbot(self.try_server_url)
- try:
- try:
- data = self.context.rietveld.get_patchset_properties(
- pending.issue, pending.patchset)
- except urllib2.HTTPError as e:
- if e.code == 404:
- # TODO(phajdan.jr): Maybe generate a random id to correlate the user's
- # error message and exception in the logs.
- # Don't put exception traceback in the user-visible message to avoid
- # leaking sensitive CQ data (passwords etc).
- jobs.error_message = ('Failed to get patchset properties (patchset '
- 'not found?)')
- logging.error(str(e))
- return False
- else:
- raise
-
- # Update the RietvedTryJobs object.
- keys = jobs.update_jobs_from_rietveld(
- data,
- status,
- self.context.checkout,
- now)
- except urllib2.HTTPError as e:
- if e.code in (500, 502, 503):
- # Temporary AppEngine hiccup. Just log it and return failure.
- logging.warning('%s while accessing %s. Ignoring error.' % (
- str(e), e.url))
- return False
- else:
- raise
- except urllib2.URLError as e:
- if 'timed out' in e.reason:
- # Handle timeouts gracefully.
- logging.warning('%s while updating tryserver status for '
- 'rietveld issue %s', e, pending.issue)
- return False
- else:
- raise
- except socket.error as e:
- # Temporary AppEngine hiccup. Just log it and return failure.
- if e.errno == errno.ECONNRESET:
- logging.warning(
- '%s while updating tryserver status for rietveld issue %s.' % (
- str(e), str(pending.issue)))
- return False
- else:
- raise
- except IOError as e:
- # Temporary AppEngine hiccup. Just log it and return failure.
- if e.errno == 'socket error':
- logging.warning(
- '%s while updating tryserver status for rietveld issue %s.' % (
- str(e), str(pending.issue)))
- return False
- raise
-
- if handle:
- for updated_key in keys:
- job = jobs.try_jobs[updated_key]
- self._update_dashboard(pending, job)
- jobs.signal_as_failed_if_needed(job, self._build_status_url(job), now)
-
- return True
diff --git a/verification/try_job_steps.py b/verification/try_job_steps.py
deleted file mode 100644
index a0a6156..0000000
--- a/verification/try_job_steps.py
+++ /dev/null
@@ -1,247 +0,0 @@
-# coding=utf8
-# Copyright (c) 2013 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.
-
-import model
-
-
-# CQ uses this delay to decide if a triggered job hasn't show up from
-# rietveld processing time or if it has gone missing
-PROPOGATION_DELAY_S = 3 * 60 * 60
-
-
-def need_to_trigger(builder_name, need_to_run, try_jobs):
- """Returns which tests need to be triggered.
-
- These are the tests that are not pending on any try job, either running or
- in the pending list.
- """
- need_to_run = set(need_to_run)
- for try_job in try_jobs:
- if try_job.builder == builder_name:
- need_to_run -= set(try_job.steps_passed)
- if not try_job.completed:
- if try_job.requested_steps == []:
- # Special case jobs discovered by CQ that it did not send. Wait for
- # these jobs to complete rather than trying to interpret the filter
- assert try_job.started
- need_to_run.clear()
- else:
- need_to_run -= (
- set(try_job.requested_steps) - set(try_job.steps_failed))
-
- return need_to_run
-
-
-def waiting_for(builder_name, tests, try_jobs):
- """Returns the tests that we are waiting for results on pending or running
- builds.
- """
- tests = set(tests)
- for try_job in try_jobs:
- if try_job.builder == builder_name:
- tests -= set(try_job.steps_passed)
- return tests
-
-
-class TryJobStepsBase(model.PersistentMixIn):
- builder_name = unicode
-
- # Name of the prerequisite builder.
- prereq_builder = unicode
- # List of prerequisite tests to look for.
- prereq_tests = list
-
- def __init__(self, **kwargs):
- kwargs.setdefault('prereq_builder', u'')
- kwargs.setdefault('prereq_tests', [])
- required = set(self._persistent_members())
- actual = set(kwargs)
- assert required == actual, (required - actual, required, actual)
- super(TryJobStepsBase, self).__init__(**kwargs)
- # Then mark it read-only.
- self._read_only = True
-
- @model.immutable
- def unmet_prereqs(self, try_jobs):
- """
- Determine if this TryJobSteps has unmet prerequisites.
-
- Returns True iff prereq is unmet.
- """
- if not self.prereq_builder or not self.prereq_tests:
- return None
- unmet_steps = set(self.prereq_tests)
- for try_job in try_jobs.itervalues():
- if try_job.builder == self.prereq_builder:
- unmet_steps -= set(try_job.steps_passed)
- return bool(unmet_steps)
-
- @model.immutable
- def get_triggered_steps(self, _builder, _steps):
- """Returns the steps on this builder that will get triggered by the given
- builder and its steps, which is always None since this isn't a triggered
- bot."""
- return (self.builder_name, [])
-
-
-class TryJobSteps(TryJobStepsBase):
- steps = list
-
- @model.immutable
- def waiting_for(self, try_jobs):
- """Returns the tests that we are waiting for results on pending or running
- builds.
- """
- return (self.builder_name,
- waiting_for(self.builder_name, self.steps, try_jobs.itervalues()))
-
- @model.immutable
- def need_to_trigger(self, try_jobs, _now):
- """Returns which tests need to be triggered.
-
- These are the tests that are not pending on any try job, either running or
- in the pending list.
- """
- if self.unmet_prereqs(try_jobs):
- return (self.builder_name, [])
- return (self.builder_name,
- need_to_trigger(self.builder_name, self.steps,
- try_jobs.itervalues()))
-
-
-class TryJobTriggeredSteps(TryJobStepsBase):
- # The name of the bot that triggers this bot.
- trigger_name = unicode
- # Maps the triggered_bot_step -> trigger_bot_step required to trigger it.
- steps = dict
-
- @model.immutable
- def _triggered_try_jobs(self, try_jobs):
- """Return all the try jobs that were on this builder and had been trigger
- by the trigger_name bot."""
- triggered_try_jobs = []
- for try_job in try_jobs.itervalues():
- if (try_job.builder == self.builder_name and
- try_job.parent_key and try_job.parent_key in try_jobs and
- try_jobs[try_job.parent_key].builder == self.trigger_name):
- triggered_try_jobs.append(try_job)
-
- return triggered_try_jobs
-
- @model.immutable
- def waiting_for(self, try_jobs):
- """Returns the tests that we are waiting for results on pending or running
- builds.
- """
- return (self.builder_name,
- waiting_for(self.builder_name, self.steps,
- self._triggered_try_jobs(try_jobs)))
-
- @model.immutable
- def need_to_trigger(self, try_jobs, now):
- """Returns which tests need to be triggered.
-
- These are the tests that are not pending on any try job, either running or
- in the pending list.
- """
- if self.unmet_prereqs(try_jobs):
- return (self.builder_name, [])
- need_to_run = set(self.steps)
- steps_to_trigger = need_to_trigger(self.builder_name, need_to_run,
- self._triggered_try_jobs(try_jobs))
-
- # Convert the steps to trigger to their trigger options.
- trigger_need_to_run = set(self.steps[step] for step in steps_to_trigger)
-
- # See which triggered builds have already started, so we can then ignore
- # their parents when seeing if more triggered build are on the way.
- detected_triggered_keys = set(
- job.parent_key for key, job in try_jobs.iteritems()
- if job.builder == self.builder_name)
-
- # Remove any trigger options that are waiting to run from the set to
- # trigger.
- for key, try_job in try_jobs.iteritems():
- if try_job.builder == self.trigger_name:
- if (try_job.completed and
- not (now - try_job.init_time > PROPOGATION_DELAY_S) and
- key not in detected_triggered_keys):
- # If we get here a triggered build hasn't started yet, so wait for
- # any steps that should run on the triggered build.
- trigger_need_to_run -= (
- set(step for step in self.steps.itervalues()
- if step in try_job.requested_steps))
- if not try_job.completed:
- trigger_need_to_run -= (
- set(try_job.requested_steps) - set(try_job.steps_failed))
-
- return (self.trigger_name, trigger_need_to_run)
-
- @model.immutable
- def get_triggered_steps(self, builder, steps):
- """Returns the steps on this builder that will get triggered by the given
- builder and its steps."""
- trigger_steps = []
- if builder == self.trigger_name:
- trigger_steps = [key for key, value in self.steps.iteritems()
- if value in steps]
-
- return (self.builder_name, sorted(trigger_steps))
-
-
-class TryJobTriggeredOrNormalSteps(TryJobTriggeredSteps):
- """This class assumes that the triggered names can be run
- on the trigger bot with the same name that they appear with on
- the triggered bot."""
-
- # The list of steps that have to be run on the trigger bot.
- trigger_bot_steps = list
-
- # True if the triggered bot should try and run the missing tests.
- use_triggered_bot = bool
-
- @model.immutable
- def need_to_trigger(self, try_jobs, now):
- if self.unmet_prereqs(try_jobs):
- return (self.builder_name, [])
- name, steps = super(TryJobTriggeredOrNormalSteps,
- self).need_to_trigger(try_jobs, now)
-
- # Remove any tests where that could still be triggered by the trigger bot.
- steps = need_to_trigger(self.trigger_name, steps, try_jobs.itervalues())
-
- # Convert the trigger names to the triggered names.
- steps = set(step for step, trigger
- in self.steps.iteritems() if trigger in steps)
-
- # Add the trigger bot only steps and remove ones that have passed.
- steps = steps.union(self.trigger_bot_steps)
- steps = need_to_trigger(self.trigger_name, steps, try_jobs.itervalues())
-
- # If we want to use the triggered bot, convert the steps backs to their
- # trigger name (where possible).
- if self.use_triggered_bot:
- # TODO(csharp): Remove this once the triggered bots should always handle
- # retry (limit it to one attempt each to prevent too much breakage).
- if any(try_job.builder == self.builder_name
- for try_job in try_jobs.itervalues()):
- return name, steps
-
- steps = set(self.steps.get(step, step) for step in steps)
-
- return name, steps
-
- @model.immutable
- def waiting_for(self, try_jobs):
- steps = waiting_for(self.builder_name, self.steps,
- self._triggered_try_jobs(try_jobs))
-
- # Add the steps that can only run on the trigger bot and see what hasn't
- # passed on the trigger bot yet.
- steps = steps.union(self.trigger_bot_steps)
-
- steps = waiting_for(self.trigger_name, steps, try_jobs.itervalues())
-
- return self.trigger_name, steps
diff --git a/verification/try_server.py b/verification/try_server.py
deleted file mode 100644
index ef07d27..0000000
--- a/verification/try_server.py
+++ /dev/null
@@ -1,728 +0,0 @@
-# coding=utf8
-# 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.
-"""Sends patches to the Try server and reads back results.
-
-- TryJobs contains TryJob, one per try job on a builder.
-- TryRunnerBase contains the common logic to send try jobs and responds to the
- try job results.
-- TryRunnerSvn uses svn plus /json polling on the try server for status updates.
-"""
-
-import logging
-import os
-import re
-import time
-import urllib2
-
-import find_depot_tools # pylint: disable=W0611
-import presubmit_support
-import trychange
-
-import buildbot_json
-import model
-from verification import base
-
-
-# We don't want to have trychange use gcl so block it.
-trychange.gcl = None
-# Hack out trychange logging.info()
-trychange.logging = logging.getLogger('trychange')
-trychange.logging.setLevel(logging.WARNING)
-
-
-def or_3_way(a, b):
- """Returns highest value, where True > False > None."""
- return None if (a == b == None) else (a or b)
-
-
-def parse_gclient_rev(rev):
- """Returns the absolute number of a gclient revision.
-
- It strips off the solution.
- """
- if rev is None:
- return rev
- return str(rev).split('@')[-1]
-
-
-def unambiguous_revision(checkout, revision):
- """Returns if a revision is unambiguous for the checkout.
-
- HEAD, date or branch name are ambiguous.
- """
- revision = parse_gclient_rev(revision)
- if not revision:
- return False
- name = checkout.__class__.__name__
- if revision.isdigit() and 'Svn' in name:
- # GitSvn should accept revision numbers?
- return True
- if re.match(r'^[a-f0-9]{5,20}$', revision) and 'Git' in name:
- return True
- return False
-
-
-class TryJob(model.PersistentMixIn):
- """Represents a try job for a pending commit.
-
- This data can be regenerated by parsing all the try job names but it is a bit
- hard on the try server.
-
- TODO(maruel): Should use __getstate__(), __setstate__() and __reduce__().
- """
- builder = unicode
- build = (None, int)
- revision = (None, int)
- result = (None, int)
- sent = float
- failed_steps = list
- clobber = bool
- name = (None, unicode)
- # Number of retries for this configuration.
- tries = int
- tests = list
-
- def __init__(self, **kwargs):
- kwargs.setdefault('sent', time.time())
- super(TryJob, self).__init__(**kwargs)
-
- def get_state(self):
- if self.result in (
- buildbot_json.SUCCESS, buildbot_json.WARNINGS, buildbot_json.SKIPPED):
- return base.SUCCEEDED
- elif self.result in (
- buildbot_json.FAILURE, buildbot_json.EXCEPTION, buildbot_json.RETRY):
- return base.FAILED
- else:
- assert self.result == None
- return base.PROCESSING
-
-
-class TryJobs(base.IVerifierStatus):
- """A set of try jobs that were sent for a specific patch."""
- # An array of TryJob objects.
- try_jobs = list
- # When NOTRY=true is specified.
- skipped = bool
-
- def get_state(self):
- if self.skipped:
- return base.SUCCEEDED
- if not self.try_jobs:
- return base.PROCESSING
- states = set(i.get_state() for i in self.try_jobs)
- assert states.issubset(base.VALID_STATES)
- return max(states)
-
- def why_not(self):
- pass
-
-
-def steps_quality(steps):
- if not steps:
- return None
- return all(v in (True, None) for v in steps)
-
-
-class StepDb(object):
- """Calculate statistics about all steps for each revisions."""
- max_cache = 200
-
- def __init__(self, builders, buildbot, checkout):
- self._need_full = True
- self.builders = builders
- self.buildbot = buildbot
- self.checkout = checkout
-
- def need_full(self):
- result = self._need_full
- self._need_full = False
- return result
-
- def revision_quality_builder_steps(self, builder, revision):
- """Calculates the occurence of a successful step execution, for a specific
- builder, for builds on a specific revision.
-
- The return value is a tuple of two elements:
- 1. array of True/False/None, one value per step in a build. True means the
- step passed at least once. False means the step always failed. None
- means the step never ran for this revision on this builder.
- 2. Number of builds that ran on this builder at this revision.
- """
- revision = str(revision)
- steps = None
- nb_builds = 0
- for build in self.buildbot.builders[builder].builds.cached_children:
- if parse_gclient_rev(build.revision) != revision:
- continue
- nb_builds += 1
- if not (not steps or len(steps) == len(build.steps)):
- logging.warn('Invalid build %s' % build)
- continue
- if not steps or len(steps) != len(build.steps):
- # If the number of steps changed after a master restart, we need to
- # ditch the previous steps.
- # One workaround is to key by name but it's not worth the effort here,
- # the worst case is that previous builds that could be considered good
- # will be ignored, making it impossible to determine a lkgr.
- steps = [None] * len(build.steps)
- for step in build.steps:
- steps[step.number] = or_3_way(
- steps[step.number], step.simplified_result)
- return steps, nb_builds
-
- def last_good_revision_builder(self, builder):
- """Returns LKGR for this builder or None if no revision was found.
-
- For a single revision, for each step, make sure step either passed at least
- once or never ran.
-
- For example, if build 1 has [True, True, False, None] and build 2 has [True,
- False, True, None], the revision is known to be good since each step run
- either succeeded one time or never ran.
- """
- state = {}
- for build in self.buildbot.builders[builder].builds.cached_children:
- if not unambiguous_revision(self.checkout, build.revision):
- # Ignore all builds that doesn't use revision numbers. It could be
- # instead svn date format {2011-01-30}, 'HEAD', 'BASE', etc.
- continue
- build_rev = parse_gclient_rev(build.revision)
- state.setdefault(build_rev, [None] * len(build.steps))
- for step in build.steps:
- if len(state[build_rev]) <= step.number:
- continue
- state[build_rev][step.number] = or_3_way(
- state[build_rev][step.number],
- step.simplified_result)
-
- # Insert a None item. It will be returned if no revision was found.
- revisions = sorted(
- int(revision) for revision in state
- if (all(v in (True, None) for v in state[revision])))
- if not revisions:
- return None
- return revisions[-1]
-
-
-class TryRunnerBase(base.VerifierCheckout):
- """Stateless communication with a try server.
-
- Sends try jobs and reads try job status.
-
- Analysis goes as following:
- - compile step is not flaky. compile.py already takes care of most flakiness
- and clobber build is done by default. If compile step fails, try again with
- clobber=True
- - test steps are flaky and can be retried as necessary.
- """
- name = 'try server'
-
- # A try job sent this long ago and that hasn't started yet is deemed to be
- # lost.
- lost_try_job_delay = 15*60
-
- # Only updates a job status once every 60 seconds.
- update_latency = 60
-
- def __init__(
- self, context_obj, try_server_url, commit_user,
- builders_and_tests, ignored_steps, solution):
- super(TryRunnerBase, self).__init__(context_obj)
- self.commit_user = commit_user
- self.try_server_url = try_server_url
- self.builders_and_tests = builders_and_tests
- self.ignored_steps = set(ignored_steps)
- self.last_update = time.time() - self.update_latency
- self.solution = solution
-
- def verify(self, pending):
- """Sends a try job to the try server and returns a TryJob list."""
- jobs = pending.verifications.setdefault(self.name, TryJobs())
- if jobs.try_jobs:
- logging.warning(
- 'Already tried jobs. Let it go. At worst, it\'ll time out soon.')
- return
-
- jobs.try_jobs = jobs.try_jobs or []
- if self._is_skip_try_job(pending):
- # Do not run try job for it.
- jobs.skipped = True
- return
-
- new_jobs = [
- TryJob(
- builder=builder,
- tests=self.builders_and_tests[builder],
- revision=pending.revision,
- clobber=False)
- for builder in sorted(self.builders_and_tests)
- ]
- jobs.try_jobs.extend(new_jobs)
- self._send_jobs(
- pending,
- new_jobs,
- False,
- self.builders_and_tests,
- unicode(pending.pending_name()))
- # Slightly postpone next check.
- self.last_update = min(
- time.time(), self.last_update + (self.update_latency / 4))
-
- def update_status(self, queue):
- """Grabs the current status of all try jobs and update self.queue.
-
- Note: it would be more efficient to be event based.
- """
- if not queue:
- logging.debug('The list is empty, nothing to do')
- return
-
- if time.time() - self.last_update < self.update_latency:
- logging.debug('TS: Throttling updates')
- return
- self.last_update = time.time()
-
- self._update_statuses(queue)
-
- def _send_jobs(
- self, pending, jobs, need_prepare, builders_and_tests, job_name):
- """Prepares the TryJobs instance |jobs| to send try jobs to the try server.
-
- Sending try jobs is deferred to self._send_job().
-
- Arguments:
- - pending: pending_manager.Pending instance.
- - jobs: List of TryJob instances to be executed.
- - need_prepare: The checkout needs to have the patch applied, e.g. this
- function is called from within update_status().
- - builders_and_tests: dict('builder': ['test1', 'test2']) for try jobs to
- run. Can be self.builders_and_tests or a smaller subset when retrying
- jobs.
- - job_name: Job name to use, may have suffix like "retry".
- """
- for job in jobs:
- job.tries = job.tries or 0
- job.tries += 1
- if job.tries > 4:
- raise base.DiscardPending(
- pending,
- ('The commit queue went berserk retrying too often for a\n'
- 'seemingly flaky test. Builder is %s, revision is %s, job name\n'
- 'was %s.') % (job.builder, job.revision, job_name))
-
- builders = sorted(job.builder for job in jobs)
- assert len(set(builders)) == len(builders)
-
- revision = set(job.revision for job in jobs)
- assert len(revision) == 1
- revision = revision.pop()
-
- clobber = set(job.clobber for job in jobs)
- assert len(clobber) == 1
- clobber = clobber.pop()
-
- for job in jobs:
- job.result = None
- job.build = None
- job.name = job_name
- job.tests = builders_and_tests[job.builder]
-
- if need_prepare:
- self._prepare(pending, revision)
- self._send_job(pending, revision, clobber, builders_and_tests, job_name)
- for builder in builders:
- # Signal a new try job was sent.
- info = {
- 'builder': builder,
- 'clobber': job.clobber,
- 'job_name': job_name,
- 'revision': revision,
- }
- self.send_status(pending, info)
- for job in jobs:
- job.sent = time.time()
-
- def _build_status_url(self, job):
- """Html url for this try job."""
- assert job.build is not None, str(job)
- return '%s/buildstatus?builder=%s&number=%s' % (
- self.try_server_url.rstrip('/'), job.builder, job.build)
-
- def _error_msg(self, name, job, failed_steps):
- """Constructs the error message."""
- def steps_to_str(steps):
- if len(steps) > 1:
- return 'steps "%s"' % ', '.join(steps)
- elif steps:
- return 'step "%s"' % steps[0]
- else:
- return ''
-
- msg = u'Try job failure for %s on %s for %s' % (
- name, job.builder, steps_to_str(failed_steps))
- if job.clobber:
- msg += ' (clobber build)'
- msg += '.'
- if job.failed_steps:
- msg += u'\nIt\'s a second try, previously, %s failed.' % (
- steps_to_str(job.failed_steps))
- msg += '\n%s' % self._build_status_url(job)
- logging.info(msg)
- return msg
-
- def _handle_try_job(self, pending, jobs, job, build):
- """Determines if the try job is a good signal to commit the patch."""
- if build.simplified_result is None:
- # The build hasn't completed yet.
- return
- assert job.result is None
- assert job.build is not None
- job.result = build.result
- # Warning: This code assumes that steps do not abort build on failure.
- failed_steps = list(set(
- step.name for step in build.steps if step.simplified_result is False
- ) - self.ignored_steps)
- # If the failed steps are only ignored steps like update_scripts or
- # cleanup_temp, still consider the job as a success. As such, do not use
- # build.result.
- if (not failed_steps and
- all(build.steps[s].simplified_result for s in job.tests
- if s in build.steps.keys)):
- job.result = buildbot_json.SUCCESS
-
- # Signal to the dashboard a try job completed.
- info = {
- 'build': build.number,
- 'builder': job.builder,
- 'duration': build.duration,
- 'job_name': job.name,
- 'result': job.result,
- 'revision': job.revision,
- 'url': self._build_status_url(job),
- }
- self.send_status(pending, info)
-
- if job.get_state() != base.FAILED:
- assert not failed_steps
- logging.info(u'Try job status for %s on %s: %s\n%s' % (
- job.name,
- job.builder,
- job.result,
- self._build_status_url(job)))
- return
-
- msg = self._error_msg(job.name, job, failed_steps)
- quality = self._get_quality(job.builder, int(job.revision))
-
- def retry(msg2, tests=None):
- """Retry a try job. Will use LKGR if quality is bad."""
- if not quality:
- lkgr = self.get_lkgr(job.builder)
- if lkgr is None:
- logging.error('lkgr should never be None.')
- fail('Couldn\'t find a good revision, aborting.')
- return
- job.revision = lkgr
- logging.info(
- 'Retrying %s on %s, %s; rev=%s; %s' %
- (job.name, job.builder, str(tests), job.revision, msg2))
- job.failed_steps = failed_steps
- tests = tests or job.tests
- self._send_jobs(
- pending, [job], True, {job.builder: tests}, u'%s (retry)' % job.name)
-
- def fail(msg2):
- jobs.error_message = '%s\n%s' % (msg, msg2)
- logging.info(jobs.error_message)
- job.failed_steps = failed_steps
-
- if 'update' in failed_steps:
- # Look at update quality specifically since it's a special step.
- return fail(
- '\nStep "update" is always a major failure.\n'
- 'Look at the try server FAQ for more details.')
-
- if 'compile' in failed_steps:
- if not job.clobber:
- # Note: this resets previous test failure if there has been on the
- # second previous try. This is fine since a slave could be broken.
- job.clobber = True
- return retry('retry compile with clobber')
-
- return fail('')
-
- if quality:
- if job.failed_steps:
- # The job had already failed.
- return fail('')
-
- return retry('Quality but first try', failed_steps)
-
- # TODO(maruel): It would make sense to do a clobber build to see if the
- # revision is indeed broken, since this algorithm assumes that the try
- # server is continuously used for recent revisions!
- # The revision looks like it's broken, retry with lkgr instead.
- return retry('No quality, no idea', failed_steps)
-
- @staticmethod
- def _is_skip_try_job(pending):
- """Returns True if a description contains NOTRY=true."""
- match = re.search(r'^NOTRY=(.*)$', pending.description, re.MULTILINE)
- return match and match.group(1).lower() == 'true'
-
- def _prepare(self, pending, revision):
- """Prepares the checkout by applying the patch."""
- raise NotImplementedError()
-
- def _get_quality(self, builder, revision):
- """Gets quality about a revision job."""
- raise NotImplementedError()
-
- def get_lkgr(self, builder):
- """Gets the last known good revision."""
- raise NotImplementedError()
-
- def _send_job(self, pending, revision, clobber, builders_and_tests, job_name):
- """Sends a try job."""
- raise NotImplementedError()
-
- def _update_statuses(self, queue):
- """Updates TryJob status for all the Pending instances in the queue.
-
- Calls to this function are throttled.
- """
- raise NotImplementedError()
-
-
-class TryRunnerSvn(TryRunnerBase):
- """Uses SVN to send the try job.
-
- Keeps a database of steps for each revision for each builder that ever passed,
- to know if it is possible for a step to pass. When unsure, it sends an empty
- build for the said revsion to determine if the revision is simply broken.
-
- TODO(maruel): Ask the main server for details? Still doesn't cover well flaky
- tests.
- """
- def __init__(
- self, context_obj, try_server_url, commit_user,
- builders_and_tests, ignored_steps, solution,
- extra_flags, lkgr):
- super(TryRunnerSvn, self).__init__(
- context_obj, try_server_url, commit_user,
- builders_and_tests, ignored_steps, solution)
- self.status = buildbot_json.Buildbot(self.try_server_url)
- self.step_db = StepDb(
- self.builders_and_tests.keys(), self.status, self.context.checkout)
- self.extra_flags = extra_flags or []
- self.lkgr = lkgr
-
- def _prepare(self, pending, revision):
- """Running from inside update_status(), the patch wasn't applied. Do it now.
- """
- pending.revision = revision
- pending.apply_patch(self.context, True)
-
- def _get_quality(self, builder, revision):
- steps, _ = self.step_db.revision_quality_builder_steps(builder, revision)
- return steps_quality(steps)
-
- def get_lkgr(self, builder):
- return max(self.step_db.last_good_revision_builder(builder), self.lkgr())
-
- def _send_job(self, pending, revision, clobber, builders_and_tests, job_name):
- """Sends a try job."""
- assert revision
- cmd = [
- '--no_search',
- '--revision', '%s@%s' % (self.solution, revision),
- '--name', job_name,
- '--user', self.commit_user.split('@', 1)[0],
- '--email', self.commit_user,
- '--rietveld_url', self._patch_url(pending),
- '--issue', str(pending.issue),
- '--patchset', str(pending.patchset)
- ]
- cmd.extend(self.extra_flags)
- for builder in sorted(builders_and_tests):
- cmd.append('--bot')
- tests = builders_and_tests[builder]
- if tests:
- cmd.append('%s:%s' % (builder, ','.join(tests)))
- else:
- cmd.append(builder)
- if clobber:
- cmd.append('--clobber')
- # TODO(maruel): use GitChange when relevant.
- change = presubmit_support.SvnChange(
- job_name,
- pending.description,
- self.context.checkout.project_path,
- [('M', f) for f in pending.files],
- pending.issue,
- pending.patchset,
- pending.owner)
- prev_dir = os.getcwd()
- try:
- os.chdir(self.context.checkout.project_path)
- trychange.TryChange(
- cmd,
- change,
- swallow_exception=True)
- except SystemExit as e:
- logging.error(
- '_send_job(%s, %s, %s, %s, %s) failed!' % (
- pending.pending_name(), revision, clobber, builders_and_tests,
- job_name))
- raise base.DiscardPending(
- pending,
- 'Failed to send try job %s: %s' % (job_name, e))
- finally:
- os.chdir(prev_dir)
-
- def _reset_cache(self, queue):
- """Resets the cache of self.status and self.step_db so the next requests
- are more efficient.
- """
- self.status.discard()
-
- jobs_to_update = []
- for _, jobs in self.loop(queue, TryJobs, True):
- jobs_to_update.extend(
- job for job in jobs.try_jobs if job.get_state() == base.PROCESSING)
-
- # First determine what data is needed.
- builds_to_cache = {}
- if self.step_db.need_full():
- logging.info('Fetching all try jobs status to fetch good revisions')
- builders_to_cache = self.builders_and_tests.keys()
- else:
- builders_to_cache = set()
- for job in jobs_to_update:
- if job.build is None:
- builders_to_cache.add(job.builder)
- else:
- if job.get_state() == base.PROCESSING:
- builds_to_cache.setdefault(job.builder, []).append(job.build)
-
- # Simplify testing.
- builders_to_cache = sorted(builders_to_cache)
-
- # Reduce the number of requests by caching all the needed builders in one
- # shot when some jobs weren't started yet.
- if builders_to_cache:
- self.status.builders.cache_partial(builders_to_cache)
-
- for builder in builders_to_cache:
- self.status.builders[builder].builds.cache()
- # Filter out jobs that were retrieved.
- if builder in builds_to_cache:
- del builds_to_cache[builder]
-
- # Cache remaining builds. Sort to make testing simpler.
- for builder, builds in sorted(
- builds_to_cache.iteritems(), key=lambda x: x[0]):
- self.status.builders[builder].builds.cache_partial(builds)
-
- def _update_statuses(self, queue):
- self._reset_cache(queue)
- for pending, jobs in self.loop(queue, TryJobs, True):
- for job in jobs.try_jobs:
- if job.get_state() != base.PROCESSING:
- continue
- self._update_status(pending, jobs, job)
-
- def _update_status(self, pending, jobs, job):
- """There's one TryJob per builder."""
- # TODO(maruel): There should be differentiation when there's multiple
- # jobs for a single builder.
- build = None
- try:
- if job.build is None:
- build = self._find_job(job)
- if build:
- # Signal a try job was found.
- info = {
- 'build': build.number,
- 'builder': job.builder,
- 'job_name': job.name,
- 'revision': job.revision,
- 'url': self._build_status_url(job),
- }
- self.send_status(pending, info)
- else:
- try:
- build = self.status.builders[job.builder].builds[job.build]
- except KeyError:
- # May happen when there is a huge backlog and the build is not
- # cached anymore.
- build = None
- except urllib2.HTTPError as e:
- logging.error(str(e))
- return
-
- if build is not None:
- self._handle_try_job(pending, jobs, job, build)
- else:
- # A job needs to be sent again if it has been sent more than
- # self.lost_try_job_delay ago.
- builder = self.status.builders[job.builder]
- pending_builds = builder.data.get('pendingBuilds', 0)
- if (time.time() - job.sent) > self.lost_try_job_delay:
- if pending_builds:
- job_names = [
- data.get('reason', '') for data in builder.pending_builds.data
- ]
- if job.name in job_names:
- # It's pending, move on.
- return
-
- # The job went to /dev/null. For example, the master may have
- # restarted, the svn server may have a fluke, network may have had a
- # short downtime, etc. Delete the previous job.
- # Resend exactly the same job.
- tests = job.tests
- if not tests:
- if not job.builder in self.builders_and_tests:
- # This means the builder was removed. Skip it.
- logging.warn(
- ( 'Wanted to retry %s but it\'s not a requirement anymore. '
- 'Ignoring it!') % job.builder)
- job.result = buildbot_json.SKIPPED
- return
-
- tests = self.builders_and_tests[job.builder]
- self._send_jobs(
- pending,
- [job],
- True,
- {job.builder:tests},
- u'%s (previous was lost)' % job.name)
-
- def _find_job(self, job):
- """Searches on the try server if the try job for |job| has started."""
- revision = '%s@%s' % (self.solution, job.revision)
- # TODO(maruel): Strip this off.
- job_name = job.name.split(':', 1)[-1]
- logging.debug('Searching for job.reason = %s @ %s' % (job_name, revision))
- for build in self.status.builders[job.builder].builds:
- blame = build.data.get('blame', [])
- logging.debug(
- 'Build.reason = %s @ %s; blame: %s' % (
- build.reason, build.revision, ','.join(blame)))
- if (build.reason == job_name and
- str(build.revision) == revision and
- len(blame) == 1 and
- blame[0] == self.commit_user):
- # Note the build number to remember it started.
- logging.info('Found build %d for job %s' % (build.number, job_name))
- job.build = build.number
- return build
- return None
-
- def _patch_url(self, pending):
- return ('%s/download/issue%d_%d.diff' %
- (self.context.rietveld.url, pending.issue, pending.patchset))
diff --git a/workdir/README b/workdir/README
deleted file mode 100644
index a91c825..0000000
--- a/workdir/README
+++ /dev/null
@@ -1,12 +0,0 @@
-Project checkouts, configuration files and internal state dump live in this
-directory.
-
-You need to create password files with content in the format 'user:password'.
-The password files are:
-* .gaia_pwd to be able to access Rietveld.
-* .chromium_svn_pwd file to be able to access the subversion server at
- svn.chromium.org.
-* .googlecode_svn_pwd file to be able to access the subversion server at
- code.google.com.
-* .chromium_status_pwd file to be able to access the chromium tree status
- app at chromium-status.appspot.com