1b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved.
2b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
3b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)# found in the LICENSE file.
4b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)from branch_utility import BranchUtility, ChannelInfo
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfrom test_data.canned_data import (CANNED_BRANCHES, CANNED_CHANNELS)
7b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
9b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class TestBranchUtility(object):
10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  '''Mimics BranchUtility to return valid-ish data without needing omahaproxy
11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  data.
12b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  '''
13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  def __init__(self, versions, channels):
15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ''' Parameters: |version| is a mapping of versions to branches, and
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    |channels| is a mapping of channels to versions.
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    '''
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    self._versions = versions
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    self._channels = channels
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  @staticmethod
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  def CreateWithCannedData():
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    '''Returns a TestBranchUtility that uses 'canned' test data pulled from
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    older branches of SVN data.
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    '''
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return TestBranchUtility(CANNED_BRANCHES, CANNED_CHANNELS)
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  def GetAllChannelInfo(self):
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return tuple(self.GetChannelInfo(channel)
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)            for channel in BranchUtility.GetAllChannelNames())
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  def GetChannelInfo(self, channel):
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    version = self._channels[channel]
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return ChannelInfo(channel, self.GetBranchForVersion(version), version)
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  def GetStableChannelInfo(self, version):
37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return ChannelInfo('stable', self.GetBranchForVersion(version), version)
38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  def GetBranchForVersion(self, version):
40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return self._versions[version]
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  def GetChannelForVersion(self, version):
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    if version <= self._channels['stable']:
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return 'stable'
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    for channel in self._channels.iterkeys():
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      if self._channels[channel] == version:
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        return channel
48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  def Older(self, channel_info):
50424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    versions = self._versions.keys()
51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    index = versions.index(channel_info.version)
52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    if index == len(versions) - 1:
53424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return None
54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    version = versions[index + 1]
55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return ChannelInfo(self.GetChannelForVersion(version),
56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       self.GetBranchForVersion(version),
57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       version)
58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  def Newer(self, channel_info):
60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    versions = self._versions.keys()
61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    index = versions.index(channel_info.version)
62424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    if not index:
63424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return None
64424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    version = versions[index - 1]
65424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    return ChannelInfo(self.GetChannelForVersion(version),
66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       self.GetBranchForVersion(version),
67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       version)
68