1#!/usr/bin/env python
2# Copyright (c) 2012 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import os
7import sys
8import unittest
9
10from branch_utility import BranchUtility, ChannelInfo
11from fake_url_fetcher import FakeUrlFetcher
12from object_store_creator import ObjectStoreCreator
13
14
15class BranchUtilityTest(unittest.TestCase):
16
17  def setUp(self):
18    self._branch_util = BranchUtility(
19        os.path.join('branch_utility', 'first.json'),
20        os.path.join('branch_utility', 'second.json'),
21        FakeUrlFetcher(os.path.join(sys.path[0], 'test_data')),
22        ObjectStoreCreator.ForTest())
23
24  def testSplitChannelNameFromPath(self):
25    self.assertEquals(('stable', 'extensions/stuff.html'),
26                      self._branch_util.SplitChannelNameFromPath(
27                      'stable/extensions/stuff.html'))
28    self.assertEquals(('dev', 'extensions/stuff.html'),
29                      self._branch_util.SplitChannelNameFromPath(
30                      'dev/extensions/stuff.html'))
31    self.assertEquals(('beta', 'extensions/stuff.html'),
32                      self._branch_util.SplitChannelNameFromPath(
33                      'beta/extensions/stuff.html'))
34    self.assertEquals(('trunk', 'extensions/stuff.html'),
35                      self._branch_util.SplitChannelNameFromPath(
36                      'trunk/extensions/stuff.html'))
37    self.assertEquals((None, 'extensions/stuff.html'),
38                      self._branch_util.SplitChannelNameFromPath(
39                      'extensions/stuff.html'))
40    self.assertEquals((None, 'apps/stuff.html'),
41                      self._branch_util.SplitChannelNameFromPath(
42                      'apps/stuff.html'))
43    self.assertEquals((None, 'extensions/dev/stuff.html'),
44                      self._branch_util.SplitChannelNameFromPath(
45                      'extensions/dev/stuff.html'))
46    self.assertEquals((None, 'stuff.html'),
47                      self._branch_util.SplitChannelNameFromPath(
48                      'stuff.html'))
49
50  def testNewestChannel(self):
51    self.assertEquals('trunk',
52        self._branch_util.NewestChannel(('trunk', 'dev', 'beta', 'stable')))
53    self.assertEquals('trunk',
54        self._branch_util.NewestChannel(('stable', 'beta', 'dev', 'trunk')))
55    self.assertEquals('dev',
56        self._branch_util.NewestChannel(('stable', 'beta', 'dev')))
57    self.assertEquals('dev',
58        self._branch_util.NewestChannel(('dev', 'beta', 'stable')))
59    self.assertEquals('beta',
60        self._branch_util.NewestChannel(('beta', 'stable')))
61    self.assertEquals('beta',
62        self._branch_util.NewestChannel(('stable', 'beta')))
63    self.assertEquals('stable', self._branch_util.NewestChannel(('stable',)))
64    self.assertEquals('beta', self._branch_util.NewestChannel(('beta',)))
65    self.assertEquals('dev', self._branch_util.NewestChannel(('dev',)))
66    self.assertEquals('trunk', self._branch_util.NewestChannel(('trunk',)))
67
68  def testNewer(self):
69    oldest_stable_info = ChannelInfo('stable', '963', 17)
70    older_stable_info = ChannelInfo('stable', '1025', 18)
71    old_stable_info = ChannelInfo('stable', '1084', 19)
72    sort_of_old_stable_info = ChannelInfo('stable', '1364', 25)
73    stable_info = ChannelInfo('stable', '1410', 26)
74    beta_info = ChannelInfo('beta', '1453', 27)
75    dev_info = ChannelInfo('dev', '1500', 28)
76    trunk_info = ChannelInfo('trunk', 'trunk', 'trunk')
77
78    self.assertEquals(older_stable_info,
79                      self._branch_util.Newer(oldest_stable_info))
80    self.assertEquals(old_stable_info,
81                      self._branch_util.Newer(older_stable_info))
82    self.assertEquals(stable_info,
83                      self._branch_util.Newer(sort_of_old_stable_info))
84    self.assertEquals(beta_info, self._branch_util.Newer(stable_info))
85    self.assertEquals(dev_info, self._branch_util.Newer(beta_info))
86    self.assertEquals(trunk_info, self._branch_util.Newer(dev_info))
87    # Test the upper limit.
88    self.assertEquals(None, self._branch_util.Newer(trunk_info))
89
90
91  def testOlder(self):
92    trunk_info = ChannelInfo('trunk', 'trunk', 'trunk')
93    dev_info = ChannelInfo('dev', '1500', 28)
94    beta_info = ChannelInfo('beta', '1453', 27)
95    stable_info = ChannelInfo('stable', '1410', 26)
96    old_stable_info = ChannelInfo('stable', '1364', 25)
97    older_stable_info = ChannelInfo('stable', '1312', 24)
98    oldest_stable_info = ChannelInfo('stable', '396', 5)
99
100    self.assertEquals(dev_info, self._branch_util.Older(trunk_info))
101    self.assertEquals(beta_info, self._branch_util.Older(dev_info))
102    self.assertEquals(stable_info, self._branch_util.Older(beta_info))
103    self.assertEquals(old_stable_info, self._branch_util.Older(stable_info))
104    self.assertEquals(older_stable_info,
105                      self._branch_util.Older(old_stable_info))
106    # Test the lower limit.
107    self.assertEquals(None, self._branch_util.Older(oldest_stable_info))
108
109  def testGetChannelInfo(self):
110    trunk_info = ChannelInfo('trunk', 'trunk', 'trunk')
111    self.assertEquals(trunk_info, self._branch_util.GetChannelInfo('trunk'))
112
113    dev_info = ChannelInfo('dev', '1500', 28)
114    self.assertEquals(dev_info, self._branch_util.GetChannelInfo('dev'))
115
116    beta_info = ChannelInfo('beta', '1453', 27)
117    self.assertEquals(beta_info, self._branch_util.GetChannelInfo('beta'))
118
119    stable_info = ChannelInfo('stable', '1410', 26)
120    self.assertEquals(stable_info, self._branch_util.GetChannelInfo('stable'))
121
122  def testGetLatestVersionNumber(self):
123    self.assertEquals(28, self._branch_util.GetLatestVersionNumber())
124
125  def testGetBranchForVersion(self):
126    self.assertEquals('1500',
127        self._branch_util.GetBranchForVersion(28))
128    self.assertEquals('1453',
129        self._branch_util.GetBranchForVersion(27))
130    self.assertEquals('1410',
131        self._branch_util.GetBranchForVersion(26))
132    self.assertEquals('1364',
133        self._branch_util.GetBranchForVersion(25))
134    self.assertEquals('1312',
135        self._branch_util.GetBranchForVersion(24))
136    self.assertEquals('1271',
137        self._branch_util.GetBranchForVersion(23))
138    self.assertEquals('1229',
139        self._branch_util.GetBranchForVersion(22))
140    self.assertEquals('1180',
141        self._branch_util.GetBranchForVersion(21))
142    self.assertEquals('1132',
143        self._branch_util.GetBranchForVersion(20))
144    self.assertEquals('1084',
145        self._branch_util.GetBranchForVersion(19))
146    self.assertEquals('1025',
147        self._branch_util.GetBranchForVersion(18))
148    self.assertEquals('963',
149        self._branch_util.GetBranchForVersion(17))
150    self.assertEquals('696',
151        self._branch_util.GetBranchForVersion(11))
152    self.assertEquals('396',
153        self._branch_util.GetBranchForVersion(5))
154
155  def testGetChannelForVersion(self):
156    self.assertEquals('trunk',
157        self._branch_util.GetChannelForVersion('trunk'))
158    self.assertEquals('dev',
159        self._branch_util.GetChannelForVersion(28))
160    self.assertEquals('beta',
161        self._branch_util.GetChannelForVersion(27))
162    self.assertEquals('stable',
163        self._branch_util.GetChannelForVersion(26))
164    self.assertEquals('stable',
165        self._branch_util.GetChannelForVersion(22))
166    self.assertEquals('stable',
167        self._branch_util.GetChannelForVersion(18))
168    self.assertEquals('stable',
169        self._branch_util.GetChannelForVersion(14))
170    self.assertEquals(None,
171        self._branch_util.GetChannelForVersion(30))
172    self.assertEquals(None,
173        self._branch_util.GetChannelForVersion(42))
174
175
176if __name__ == '__main__':
177  unittest.main()
178