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

Side by Side Diff: infra/tools/cros_pin/test/pinfile_test.py

Issue 1403313002: Added `cros_pin` CrOS pin-bump tool. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Added pinfile.py tests, cleanup. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « infra/tools/cros_pin/test/__init__.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import hashlib
6 import json
7 import unittest
8
9 from infra.libs.gitiles import gitiles
10 from infra.tools.cros_pin import pinfile
11
12 import mock
13
14 def h(v):
15 return hashlib.sha1(v).hexdigest()
16
17
18 class TestPinfile(unittest.TestCase):
19
20 _CFG = pinfile.Config('TestConfig',
21 ('repository', 'path'),
22 ('path', 'to', 'pins.json'),
23 ('mywaterfall',))
24
25 _MOCK_PINFILE = '{"test": "foo", "release": "bar"}'
26 _CHROMITE_REPO = 'https://example.com/fake'
27
28 def setUp(self):
29 self._patchers = []
30 self._pinfile = self._MOCK_PINFILE
31
32 self._open = mock.mock_open(read_data=self._pinfile)
33
34 self._write_out = ''
35 def fake_write(data):
36 self._write_out = self._write_out + data
37 self._open().write = mock.Mock(side_effect=fake_write)
38
39 for patchme, m in (
40 ('__builtin__.open', self._open),
41 ('infra.libs.gitiles.gitiles.Repository', mock.DEFAULT),
42 ):
43 p = mock.patch(patchme, m)
44 self._patchers.append(p)
45
46 for p in self._patchers:
47 p.start()
48
49 self._gitiles = gitiles.Repository(self._CHROMITE_REPO)
50 self._editor = pinfile.Editor('checkout_path', self._gitiles)
51 self._f = self._editor.load(self._CFG)
52
53 def tearDown(self):
54 for p in reversed(self._patchers):
55 p.stop()
56
57 def _assertWroteJSON(self, **kw):
58 self.assertEqual(json.loads(self._write_out), kw)
59
60 def testUpdatesPinSuccessfully(self):
61 pu = self._f.update('test', version=h('baz'))
62 self.assertEqual(pu, pinfile.PinUpdate(name='test', fr='foo', to=h('baz')))
63 self._assertWroteJSON(test=h('baz'), release='bar')
64
65 def testUpdateIsNoneForSameValue(self):
66 self._editor._validate = False
67 pu = self._f.update('test', version='foo')
68 self.assertIsNone(pu)
69
70 def testUpdatesPinToToTSuccessfully(self):
71 self._editor._gitiles.ref_info.return_value = {
72 'commit': 'baz',
73 }
74 pu = self._f.update('test')
75 self.assertEqual(pu, pinfile.PinUpdate(name='test', fr='foo', to='baz'))
76 self._assertWroteJSON(test='baz', release='bar')
77
78 def testUpdateRejectsNewPinWithoutCreate(self):
79 self.assertRaises(pinfile.ReadOnlyError,
80 self._f.update, 'newpin', create=False, version=h('baz'))
81
82 def testUpdateWithInvalidCommitHash(self):
83 self._editor._gitiles.ref_info.side_effect = gitiles.GitilesError
84 self.assertRaises(pinfile.InvalidPinError,
85 self._f.update, 'test', version='baz')
86
87 def testUpdateWithInvalidGitilesCommit(self):
88 self._editor._gitiles.ref_info.side_effect = gitiles.GitilesError
89 self.assertRaises(pinfile.InvalidPinError,
90 self._f.update, 'test', version=h('baz'))
91
92 def testRemoveDeletesPin(self):
93 pu = self._f.remove('test')
94 self.assertEqual(pu, pinfile.PinUpdate(name='test', fr='foo', to=None))
95 self._assertWroteJSON(release='bar')
96
97 pu = self._f.remove('asdf')
98 self.assertIsNone(pu)
99 self._assertWroteJSON(release='bar')
100
101 def testIterPins(self):
102 self.assertEqual(set(self._f.iterpins()),
103 set([('test', 'foo'), ('release', 'bar')]))
104
105 def testLoad(self):
106 m = mock.mock_open(read_data='{"foo": "bar"}')
107 with mock.patch('__builtin__.open', m):
108 self.assertEqual(set(self._f.iterpins()),
109 set([('foo', 'bar')]))
110
OLDNEW
« no previous file with comments | « infra/tools/cros_pin/test/__init__.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698