1
|
|
|
import unittest |
2
|
|
|
import mock |
3
|
|
|
from mock import Mock |
4
|
|
|
import os.path as ospath |
5
|
|
|
|
6
|
|
|
class DiscoveryTests(unittest.TestCase): |
7
|
|
|
|
8
|
|
|
def setUp(self): |
9
|
|
|
self.filesys = Mock() |
10
|
|
|
self.filesys.walk.return_value = [('root',[],['known','new','unknown'])] |
11
|
|
|
self.listener = Mock() |
12
|
|
|
self.filt = Mock() |
13
|
|
|
self.add = Mock() |
14
|
|
|
img = Mock() |
15
|
|
|
img.status = 'new' |
16
|
|
|
self.add.return_value = img |
17
|
|
|
self.dependencies = Mock() |
18
|
|
|
self.dependencies.getFilesystem.return_value = self.filesys |
19
|
|
|
self.dependencies.getListener.return_value = self.listener |
20
|
|
|
self.dependencies.getFileFilter.return_value = self.filt |
21
|
|
|
|
22
|
|
|
def discover(self, path): |
23
|
|
|
import niprov.discovery |
24
|
|
|
niprov.discovery.add = self.add |
25
|
|
|
niprov.discovery.discover(path, dependencies=self.dependencies) |
26
|
|
|
|
27
|
|
|
def test_Calls_add_on_files_encountered(self): |
28
|
|
|
self.setupFilter('.x') |
29
|
|
|
self.filesys.walk.return_value = [('root',[],['p/f1.x','p/f2.x']), |
30
|
|
|
('root',[],['p/p2/f3.x'])] #(dirpath, dirnames, filenames) |
31
|
|
|
self.discover('root') |
32
|
|
|
self.filesys.walk.assert_called_with('root') |
33
|
|
|
self.add.assert_any_call('root/p/f1.x', transient=False, dependencies=self.dependencies) |
34
|
|
|
self.add.assert_any_call('root/p/f2.x', transient=False, dependencies=self.dependencies) |
35
|
|
|
self.add.assert_any_call('root/p/p2/f3.x', transient=False, dependencies=self.dependencies) |
36
|
|
|
|
37
|
|
|
def test_file_filters(self): |
38
|
|
|
self.setupFilter('valid.file') |
39
|
|
|
self.filesys.walk.return_value = [('root',[],['valid.file','other.file'])] |
40
|
|
|
self.discover('root') |
41
|
|
|
self.add.assert_any_call('root/valid.file', transient=False, dependencies=self.dependencies) |
42
|
|
|
self.assertNotCalledWith(self.add, 'root/other.file') |
43
|
|
|
|
44
|
|
|
def test_Gives_listener_summary(self): |
45
|
|
|
self.filesys.walk.return_value = [('root',[],['a','b','c','d','e','f','g','h'])] |
46
|
|
|
statuses = ['new','new','series-new-file','series-new-file', |
47
|
|
|
'series-new-file','failed','new-version','new-version'] |
48
|
|
|
images = [] |
49
|
|
|
for s in statuses: |
50
|
|
|
img = Mock() |
51
|
|
|
img.status = s |
52
|
|
|
images.append(img) |
53
|
|
|
self.add.side_effect = images |
54
|
|
|
self.discover('root') |
55
|
|
|
self.listener.discoveryFinished.assert_called_with(nnew=2, nadded=3, nfailed=1, ntotal=8) |
56
|
|
|
|
57
|
|
|
def assertNotCalledWith(self, m, *args, **kwargs): |
58
|
|
|
c = mock.call(*args, **kwargs) |
59
|
|
|
assert c not in m.call_args_list, "Unexpectedly found call: "+str(c) |
60
|
|
|
|
61
|
|
|
def setupFilter(self, valid): |
62
|
|
|
def filter_side_effect(*args): |
63
|
|
|
if valid in args[0]: |
64
|
|
|
return True |
65
|
|
|
return False |
66
|
|
|
self.filt.include = Mock(side_effect=filter_side_effect) |
67
|
|
|
|
68
|
|
|
|
69
|
|
|
|