PageRenderTime 57ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/unit/utils/find_test.py

https://gitlab.com/Rockyspade/salt
Python | 585 lines | 574 code | 7 blank | 4 comment | 0 complexity | dede52ba07be41405a5984fd2687eb08 MD5 | raw file
Possible License(s): Apache-2.0
  1. # -*- coding: utf-8 -*-
  2. # Import python libs
  3. import os
  4. import sys
  5. import shutil
  6. import tempfile
  7. import stat
  8. # Import Salt Testing libs
  9. from salttesting import skipIf, TestCase
  10. from salttesting.helpers import ensure_in_syspath
  11. ensure_in_syspath('../../')
  12. # Import salt libs
  13. import integration
  14. import salt.utils
  15. import salt.utils.find
  16. class TestFind(TestCase):
  17. def test_parse_interval(self):
  18. self.assertRaises(ValueError, salt.utils.find._parse_interval, 'w')
  19. self.assertRaises(ValueError, salt.utils.find._parse_interval, '1')
  20. self.assertRaises(ValueError, salt.utils.find._parse_interval, '1s1w')
  21. self.assertRaises(ValueError, salt.utils.find._parse_interval, '1s1s')
  22. result, resolution, modifier = salt.utils.find._parse_interval('')
  23. self.assertEqual(result, 0)
  24. self.assertIs(resolution, None)
  25. self.assertEqual(modifier, '')
  26. result, resolution, modifier = salt.utils.find._parse_interval('1s')
  27. self.assertEqual(result, 1.0)
  28. self.assertEqual(resolution, 1)
  29. self.assertEqual(modifier, '')
  30. result, resolution, modifier = salt.utils.find._parse_interval('1m')
  31. self.assertEqual(result, 60.0)
  32. self.assertEqual(resolution, 60)
  33. self.assertEqual(modifier, '')
  34. result, resolution, modifier = salt.utils.find._parse_interval('1h')
  35. self.assertEqual(result, 3600.0)
  36. self.assertEqual(resolution, 3600)
  37. self.assertEqual(modifier, '')
  38. result, resolution, modifier = salt.utils.find._parse_interval('1d')
  39. self.assertEqual(result, 86400.0)
  40. self.assertEqual(resolution, 86400)
  41. self.assertEqual(modifier, '')
  42. result, resolution, modifier = salt.utils.find._parse_interval('1w')
  43. self.assertEqual(result, 604800.0)
  44. self.assertEqual(resolution, 604800)
  45. self.assertEqual(modifier, '')
  46. result, resolution, modifier = salt.utils.find._parse_interval('1w3d6h')
  47. self.assertEqual(result, 885600.0)
  48. self.assertEqual(resolution, 3600)
  49. self.assertEqual(modifier, '')
  50. result, resolution, modifier = salt.utils.find._parse_interval('1m1s')
  51. self.assertEqual(result, 61.0)
  52. self.assertEqual(resolution, 1)
  53. self.assertEqual(modifier, '')
  54. result, resolution, modifier = salt.utils.find._parse_interval('1m2s')
  55. self.assertEqual(result, 62.0)
  56. self.assertEqual(resolution, 1)
  57. self.assertEqual(modifier, '')
  58. result, resolution, modifier = salt.utils.find._parse_interval('+1d')
  59. self.assertEqual(result, 86400.0)
  60. self.assertEqual(resolution, 86400)
  61. self.assertEqual(modifier, '+')
  62. result, resolution, modifier = salt.utils.find._parse_interval('-1d')
  63. self.assertEqual(result, 86400.0)
  64. self.assertEqual(resolution, 86400)
  65. self.assertEqual(modifier, '-')
  66. def test_parse_size(self):
  67. self.assertRaises(ValueError, salt.utils.find._parse_size, '')
  68. self.assertRaises(ValueError, salt.utils.find._parse_size, '1s1s')
  69. min_size, max_size = salt.utils.find._parse_size('1')
  70. self.assertEqual(min_size, 1)
  71. self.assertEqual(max_size, 1)
  72. min_size, max_size = salt.utils.find._parse_size('1b')
  73. self.assertEqual(min_size, 1)
  74. self.assertEqual(max_size, 1)
  75. min_size, max_size = salt.utils.find._parse_size('1k')
  76. self.assertEqual(min_size, 1024)
  77. self.assertEqual(max_size, 2047)
  78. min_size, max_size = salt.utils.find._parse_size('1m')
  79. self.assertEqual(min_size, 1048576)
  80. self.assertEqual(max_size, 2097151)
  81. min_size, max_size = salt.utils.find._parse_size('1g')
  82. self.assertEqual(min_size, 1073741824)
  83. self.assertEqual(max_size, 2147483647)
  84. min_size, max_size = salt.utils.find._parse_size('1t')
  85. self.assertEqual(min_size, 1099511627776)
  86. self.assertEqual(max_size, 2199023255551)
  87. min_size, max_size = salt.utils.find._parse_size('0m')
  88. self.assertEqual(min_size, 0)
  89. self.assertEqual(max_size, 1048575)
  90. min_size, max_size = salt.utils.find._parse_size('-1m')
  91. self.assertEqual(min_size, 0)
  92. self.assertEqual(max_size, 1048576)
  93. min_size, max_size = salt.utils.find._parse_size('+1m')
  94. self.assertEqual(min_size, 1048576)
  95. self.assertEqual(max_size, sys.maxint)
  96. min_size, max_size = salt.utils.find._parse_size('+1M')
  97. self.assertEqual(min_size, 1048576)
  98. self.assertEqual(max_size, sys.maxint)
  99. def test_option_requires(self):
  100. option = salt.utils.find.Option()
  101. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_PATH)
  102. def test_name_option_match(self):
  103. option = salt.utils.find.NameOption('name', '*.txt')
  104. self.assertIs(option.match('', '', ''), None)
  105. self.assertIs(option.match('', 'hello.txt', '').group(), 'hello.txt')
  106. self.assertIs(option.match('', 'HELLO.TXT', ''), None)
  107. def test_iname_option_match(self):
  108. option = salt.utils.find.InameOption('name', '*.txt')
  109. self.assertIs(option.match('', '', ''), None)
  110. self.assertIs(option.match('', 'hello.txt', '').group(), 'hello.txt')
  111. self.assertIs(option.match('', 'HELLO.TXT', '').group(), 'HELLO.TXT')
  112. def test_regex_option_match(self):
  113. self.assertRaises(
  114. ValueError, salt.utils.find.RegexOption, 'name', '(.*}'
  115. )
  116. option = salt.utils.find.RegexOption('name', r'.*\.txt')
  117. self.assertIs(option.match('', '', ''), None)
  118. self.assertIs(option.match('', 'hello.txt', '').group(), 'hello.txt')
  119. self.assertIs(option.match('', 'HELLO.TXT', ''), None)
  120. def test_iregex_option_match(self):
  121. self.assertRaises(
  122. ValueError, salt.utils.find.IregexOption, 'name', '(.*}'
  123. )
  124. option = salt.utils.find.IregexOption('name', r'.*\.txt')
  125. self.assertIs(option.match('', '', ''), None)
  126. self.assertIs(option.match('', 'hello.txt', '').group(), 'hello.txt')
  127. self.assertIs(option.match('', 'HELLO.TXT', '').group(), 'HELLO.TXT')
  128. def test_type_option_requires(self):
  129. self.assertRaises(ValueError, salt.utils.find.TypeOption, 'type', 'w')
  130. option = salt.utils.find.TypeOption('type', 'd')
  131. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_STAT)
  132. def test_type_option_match(self):
  133. option = salt.utils.find.TypeOption('type', 'b')
  134. self.assertEqual(option.match('', '', [stat.S_IFREG]), False)
  135. option = salt.utils.find.TypeOption('type', 'c')
  136. self.assertEqual(option.match('', '', [stat.S_IFREG]), False)
  137. option = salt.utils.find.TypeOption('type', 'd')
  138. self.assertEqual(option.match('', '', [stat.S_IFREG]), False)
  139. option = salt.utils.find.TypeOption('type', 'f')
  140. self.assertEqual(option.match('', '', [stat.S_IFREG]), True)
  141. option = salt.utils.find.TypeOption('type', 'l')
  142. self.assertEqual(option.match('', '', [stat.S_IFREG]), False)
  143. option = salt.utils.find.TypeOption('type', 'p')
  144. self.assertEqual(option.match('', '', [stat.S_IFREG]), False)
  145. option = salt.utils.find.TypeOption('type', 's')
  146. self.assertEqual(option.match('', '', [stat.S_IFREG]), False)
  147. option = salt.utils.find.TypeOption('type', 'b')
  148. self.assertEqual(option.match('', '', [stat.S_IFBLK]), True)
  149. option = salt.utils.find.TypeOption('type', 'c')
  150. self.assertEqual(option.match('', '', [stat.S_IFCHR]), True)
  151. option = salt.utils.find.TypeOption('type', 'd')
  152. self.assertEqual(option.match('', '', [stat.S_IFDIR]), True)
  153. option = salt.utils.find.TypeOption('type', 'l')
  154. self.assertEqual(option.match('', '', [stat.S_IFLNK]), True)
  155. option = salt.utils.find.TypeOption('type', 'p')
  156. self.assertEqual(option.match('', '', [stat.S_IFIFO]), True)
  157. option = salt.utils.find.TypeOption('type', 's')
  158. self.assertEqual(option.match('', '', [stat.S_IFSOCK]), True)
  159. @skipIf(sys.platform.startswith('win'), 'No /dev/null on Windows')
  160. def test_owner_option_requires(self):
  161. self.assertRaises(
  162. ValueError, salt.utils.find.OwnerOption, 'owner', 'notexist'
  163. )
  164. option = salt.utils.find.OwnerOption('owner', 'root')
  165. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_STAT)
  166. @skipIf(sys.platform.startswith('win'), 'No /dev/null on Windows')
  167. def test_owner_option_match(self):
  168. option = salt.utils.find.OwnerOption('owner', 'root')
  169. self.assertEqual(option.match('', '', [0] * 5), True)
  170. option = salt.utils.find.OwnerOption('owner', '500')
  171. self.assertEqual(option.match('', '', [500] * 5), True)
  172. @skipIf(sys.platform.startswith('win'), 'No /dev/null on Windows')
  173. def test_group_option_requires(self):
  174. self.assertRaises(
  175. ValueError, salt.utils.find.GroupOption, 'group', 'notexist'
  176. )
  177. if sys.platform.startswith(('darwin', 'freebsd', 'openbsd')):
  178. group_name = 'wheel'
  179. else:
  180. group_name = 'root'
  181. option = salt.utils.find.GroupOption('group', group_name)
  182. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_STAT)
  183. @skipIf(sys.platform.startswith('win'), 'No /dev/null on Windows')
  184. def test_group_option_match(self):
  185. if sys.platform.startswith(('darwin', 'freebsd', 'openbsd')):
  186. group_name = 'wheel'
  187. else:
  188. group_name = 'root'
  189. option = salt.utils.find.GroupOption('group', group_name)
  190. self.assertEqual(option.match('', '', [0] * 6), True)
  191. option = salt.utils.find.GroupOption('group', '500')
  192. self.assertEqual(option.match('', '', [500] * 6), True)
  193. def test_size_option_requires(self):
  194. self.assertRaises(
  195. ValueError, salt.utils.find.SizeOption, 'size', '1s1s'
  196. )
  197. option = salt.utils.find.SizeOption('size', '+1G')
  198. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_STAT)
  199. def test_size_option_match(self):
  200. option = salt.utils.find.SizeOption('size', '+1k')
  201. self.assertEqual(option.match('', '', [10000] * 7), True)
  202. option = salt.utils.find.SizeOption('size', '+1G')
  203. self.assertEqual(option.match('', '', [10000] * 7), False)
  204. def test_mtime_option_requires(self):
  205. self.assertRaises(
  206. ValueError, salt.utils.find.MtimeOption, 'mtime', '4g'
  207. )
  208. option = salt.utils.find.MtimeOption('mtime', '1d')
  209. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_STAT)
  210. def test_mtime_option_match(self):
  211. option = salt.utils.find.MtimeOption('mtime', '-1w')
  212. self.assertEqual(option.match('', '', [1] * 9), False)
  213. option = salt.utils.find.MtimeOption('mtime', '-1s')
  214. self.assertEqual(option.match('', '', [10 ** 10] * 9), True)
  215. class TestGrepOption(TestCase):
  216. def setUp(self):
  217. super(TestGrepOption, self).setUp()
  218. self.tmpdir = tempfile.mkdtemp(dir=integration.SYS_TMP_DIR)
  219. def tearDown(self):
  220. shutil.rmtree(self.tmpdir)
  221. super(TestGrepOption, self).tearDown()
  222. def test_grep_option_requires(self):
  223. self.assertRaises(
  224. ValueError, salt.utils.find.GrepOption, 'grep', '(foo)|(bar}'
  225. )
  226. option = salt.utils.find.GrepOption('grep', '(foo)|(bar)')
  227. find = salt.utils.find
  228. self.assertEqual(
  229. option.requires(), (find._REQUIRES_CONTENTS | find._REQUIRES_STAT)
  230. )
  231. def test_grep_option_match_regular_file(self):
  232. hello_file = os.path.join(self.tmpdir, 'hello.txt')
  233. fd = salt.utils.fopen(hello_file, 'w')
  234. fd.write("foo")
  235. fd.close()
  236. option = salt.utils.find.GrepOption('grep', 'foo')
  237. self.assertEqual(
  238. option.match(self.tmpdir, 'hello.txt', os.stat(hello_file)),
  239. hello_file
  240. )
  241. option = salt.utils.find.GrepOption('grep', 'bar')
  242. self.assertEqual(
  243. option.match(self.tmpdir, 'hello.txt', os.stat(hello_file)),
  244. None
  245. )
  246. @skipIf(sys.platform.startswith('win'), 'No /dev/null on Windows')
  247. def test_grep_option_match_dev_null(self):
  248. option = salt.utils.find.GrepOption('grep', 'foo')
  249. self.assertEqual(
  250. option.match('dev', 'null', os.stat('/dev/null')), None
  251. )
  252. class TestPrintOption(TestCase):
  253. def setUp(self):
  254. super(TestPrintOption, self).setUp()
  255. self.tmpdir = tempfile.mkdtemp(dir=integration.SYS_TMP_DIR)
  256. def tearDown(self):
  257. shutil.rmtree(self.tmpdir)
  258. super(TestPrintOption, self).tearDown()
  259. def test_print_option_defaults(self):
  260. option = salt.utils.find.PrintOption('print', '')
  261. self.assertEqual(option.need_stat, False)
  262. self.assertEqual(option.print_title, False)
  263. self.assertEqual(option.fmt, ['path'])
  264. def test_print_option_requires(self):
  265. option = salt.utils.find.PrintOption('print', '')
  266. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_PATH)
  267. option = salt.utils.find.PrintOption('print', 'name')
  268. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_PATH)
  269. option = salt.utils.find.PrintOption('print', 'path')
  270. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_PATH)
  271. option = salt.utils.find.PrintOption('print', 'name,path')
  272. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_PATH)
  273. option = salt.utils.find.PrintOption('print', 'user')
  274. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_STAT)
  275. option = salt.utils.find.PrintOption('print', 'path user')
  276. self.assertEqual(option.requires(), salt.utils.find._REQUIRES_STAT)
  277. def test_print_option_execute(self):
  278. hello_file = os.path.join(self.tmpdir, 'hello.txt')
  279. fd = salt.utils.fopen(hello_file, 'w')
  280. fd.write("foo")
  281. fd.close()
  282. option = salt.utils.find.PrintOption('print', '')
  283. self.assertEqual(option.execute('', [0] * 9), '')
  284. option = salt.utils.find.PrintOption('print', 'path')
  285. self.assertEqual(option.execute('test_name', [0] * 9), 'test_name')
  286. option = salt.utils.find.PrintOption('print', 'name')
  287. self.assertEqual(option.execute('test_name', [0] * 9), 'test_name')
  288. option = salt.utils.find.PrintOption('print', 'size')
  289. self.assertEqual(option.execute(hello_file, os.stat(hello_file)), 3)
  290. option = salt.utils.find.PrintOption('print', 'type')
  291. self.assertEqual(option.execute(hello_file, os.stat(hello_file)), 'f')
  292. option = salt.utils.find.PrintOption('print', 'mode')
  293. self.assertEqual(option.execute(hello_file, range(10)), 0)
  294. option = salt.utils.find.PrintOption('print', 'mtime')
  295. self.assertEqual(option.execute(hello_file, range(10)), 8)
  296. option = salt.utils.find.PrintOption('print', 'md5')
  297. self.assertEqual(
  298. option.execute(hello_file, os.stat(hello_file)),
  299. 'acbd18db4cc2f85cedef654fccc4a4d8'
  300. )
  301. option = salt.utils.find.PrintOption('print', 'path name')
  302. self.assertEqual(
  303. option.execute('test_name', [0] * 9), ['test_name', 'test_name']
  304. )
  305. option = salt.utils.find.PrintOption('print', 'size name')
  306. self.assertEqual(
  307. option.execute('test_name', [0] * 9), [0, 'test_name']
  308. )
  309. @skipIf(sys.platform.startswith('Windows'), "no /dev/null on windows")
  310. def test_print_user(self):
  311. option = salt.utils.find.PrintOption('print', 'user')
  312. self.assertEqual(option.execute('', [0] * 10), 'root')
  313. option = salt.utils.find.PrintOption('print', 'user')
  314. self.assertEqual(option.execute('', [2 ** 31] * 10), 2 ** 31)
  315. @skipIf(sys.platform.startswith('Windows'), "no /dev/null on windows")
  316. def test_print_group(self):
  317. option = salt.utils.find.PrintOption('print', 'group')
  318. if sys.platform.startswith(('darwin', 'freebsd', 'openbsd')):
  319. group_name = 'wheel'
  320. else:
  321. group_name = 'root'
  322. self.assertEqual(option.execute('', [0] * 10), group_name)
  323. # This seems to be not working in Ubuntu 12.04 32 bit
  324. #option = salt.utils.find.PrintOption('print', 'group')
  325. #self.assertEqual(option.execute('', [2 ** 31] * 10), 2 ** 31)
  326. @skipIf(sys.platform.startswith('Windows'), "no /dev/null on windows")
  327. def test_print_md5(self):
  328. option = salt.utils.find.PrintOption('print', 'md5')
  329. self.assertEqual(option.execute('/dev/null', os.stat('/dev/null')), '')
  330. class TestFinder(TestCase):
  331. def setUp(self):
  332. super(TestFinder, self).setUp()
  333. self.tmpdir = tempfile.mkdtemp(dir=integration.SYS_TMP_DIR)
  334. def tearDown(self):
  335. shutil.rmtree(self.tmpdir)
  336. super(TestFinder, self).tearDown()
  337. @skipIf(sys.platform.startswith('win'), 'No /dev/null on Windows')
  338. def test_init(self):
  339. finder = salt.utils.find.Finder({})
  340. self.assertEqual(
  341. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  342. )
  343. self.assertEqual(finder.criteria, [])
  344. finder = salt.utils.find.Finder({'_': None})
  345. self.assertEqual(
  346. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  347. )
  348. self.assertEqual(finder.criteria, [])
  349. self.assertRaises(ValueError, salt.utils.find.Finder, {'': None})
  350. self.assertRaises(ValueError, salt.utils.find.Finder, {'name': None})
  351. self.assertRaises(
  352. ValueError, salt.utils.find.Finder, {'nonexist': 'somevalue'}
  353. )
  354. finder = salt.utils.find.Finder({'name': 'test_name'})
  355. self.assertEqual(
  356. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  357. )
  358. self.assertEqual(
  359. str(finder.criteria[0].__class__)[-12:-2], 'NameOption'
  360. )
  361. finder = salt.utils.find.Finder({'iname': 'test_name'})
  362. self.assertEqual(
  363. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  364. )
  365. self.assertEqual(
  366. str(finder.criteria[0].__class__)[-13:-2], 'InameOption'
  367. )
  368. finder = salt.utils.find.Finder({'regex': r'.*\.txt'})
  369. self.assertEqual(
  370. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  371. )
  372. self.assertEqual(
  373. str(finder.criteria[0].__class__)[-13:-2], 'RegexOption'
  374. )
  375. finder = salt.utils.find.Finder({'iregex': r'.*\.txt'})
  376. self.assertEqual(
  377. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  378. )
  379. self.assertEqual(
  380. str(finder.criteria[0].__class__)[-14:-2], 'IregexOption'
  381. )
  382. finder = salt.utils.find.Finder({'type': 'd'})
  383. self.assertEqual(
  384. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  385. )
  386. self.assertEqual(
  387. str(finder.criteria[0].__class__)[-12:-2], 'TypeOption'
  388. )
  389. finder = salt.utils.find.Finder({'owner': 'root'})
  390. self.assertEqual(
  391. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  392. )
  393. self.assertEqual(
  394. str(finder.criteria[0].__class__)[-13:-2], 'OwnerOption'
  395. )
  396. if sys.platform.startswith(('darwin', 'freebsd', 'openbsd')):
  397. group_name = 'wheel'
  398. else:
  399. group_name = 'root'
  400. finder = salt.utils.find.Finder({'group': group_name})
  401. self.assertEqual(
  402. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  403. )
  404. self.assertEqual(
  405. str(finder.criteria[0].__class__)[-13:-2], 'GroupOption'
  406. )
  407. finder = salt.utils.find.Finder({'size': '+1G'})
  408. self.assertEqual(
  409. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  410. )
  411. self.assertEqual(
  412. str(finder.criteria[0].__class__)[-12:-2], 'SizeOption'
  413. )
  414. finder = salt.utils.find.Finder({'mtime': '1d'})
  415. self.assertEqual(
  416. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  417. )
  418. self.assertEqual(
  419. str(finder.criteria[0].__class__)[-13:-2], 'MtimeOption'
  420. )
  421. finder = salt.utils.find.Finder({'grep': 'foo'})
  422. self.assertEqual(
  423. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  424. )
  425. self.assertEqual(
  426. str(finder.criteria[0].__class__)[-12:-2], 'GrepOption'
  427. )
  428. finder = salt.utils.find.Finder({'print': 'name'})
  429. self.assertEqual(
  430. str(finder.actions[0].__class__)[-13:-2], 'PrintOption'
  431. )
  432. self.assertEqual(finder.criteria, [])
  433. def test_find(self):
  434. hello_file = os.path.join(self.tmpdir, 'hello.txt')
  435. fd = salt.utils.fopen(hello_file, 'w')
  436. fd.write("foo")
  437. fd.close()
  438. finder = salt.utils.find.Finder({'name': 'test_name'})
  439. self.assertEqual(list(finder.find('')), [])
  440. finder = salt.utils.find.Finder({'name': 'hello.txt'})
  441. self.assertEqual(list(finder.find(self.tmpdir)), [hello_file])
  442. finder = salt.utils.find.Finder({'type': 'f', 'print': 'path'})
  443. self.assertEqual(list(finder.find(self.tmpdir)),
  444. [os.path.join(self.tmpdir, 'hello.txt')])
  445. finder = salt.utils.find.Finder({'size': '+1G', 'print': 'path'})
  446. self.assertEqual(list(finder.find(self.tmpdir)), [])
  447. finder = salt.utils.find.Finder(
  448. {'name': 'hello.txt', 'print': 'path name'}
  449. )
  450. self.assertEqual(
  451. list(finder.find(self.tmpdir)), [[hello_file, 'hello.txt']]
  452. )
  453. if __name__ == '__main__':
  454. from integration import run_tests
  455. run_tests(
  456. [TestFind, TestGrepOption, TestPrintOption, TestFinder],
  457. needs_daemon=False
  458. )