def ansiblelint(rulename, candidate, settings): result = Result(candidate.path) rules = RulesCollection() rules.extend(RulesCollection.create_from_directory(default_rulesdir)) if settings.lintdir: rules.extend(RulesCollection.create_from_directory(settings.lintdir)) fileinfo = dict(path=candidate.path, type=candidate.filetype) matches = rules.run(fileinfo, rulename.split(',')) result.errors = [Error(match.linenumber, "[%s] %s" % (match.rule.id, match.message)) for match in matches] return result
class TestRulesCollection(unittest.TestCase): rules = None ematchtestfile = dict(path='test/ematchtest.yml', type='playbook') bracketsmatchtestfile = dict(path='test/bracketsmatchtest.yml', type='playbook') def setUp(self): self.rules = RulesCollection(['./test/rules']) def test_load_collection_from_directory(self): self.assertEqual(len(self.rules), 2) def test_run_collection(self): matches = self.rules.run(self.ematchtestfile) self.assertEqual(len(matches), 3) def test_tags(self): matches = self.rules.run(self.ematchtestfile, tags=['test1']) self.assertEqual(len(matches), 3) matches = self.rules.run(self.ematchtestfile, tags=['test2']) self.assertEqual(len(matches), 0) matches = self.rules.run(self.bracketsmatchtestfile, tags=['test1']) self.assertEqual(len(matches), 1) matches = self.rules.run(self.bracketsmatchtestfile, tags=['test2']) self.assertEqual(len(matches), 2) def test_skip_tags(self): matches = self.rules.run(self.ematchtestfile, skip_list=['test1']) self.assertEqual(len(matches), 0) matches = self.rules.run(self.ematchtestfile, skip_list=['test2']) self.assertEqual(len(matches), 3) matches = self.rules.run(self.bracketsmatchtestfile, skip_list=['test1']) self.assertEqual(len(matches), 2) matches = self.rules.run(self.bracketsmatchtestfile, skip_list=['test2']) self.assertEqual(len(matches), 1) def test_skip_id(self): matches = self.rules.run(self.ematchtestfile, skip_list=['TEST0001']) self.assertEqual(len(matches), 0) matches = self.rules.run(self.ematchtestfile, skip_list=['TEST0002']) self.assertEqual(len(matches), 3) matches = self.rules.run(self.bracketsmatchtestfile, skip_list=['TEST0001']) self.assertEqual(len(matches), 2) matches = self.rules.run(self.bracketsmatchtestfile, skip_list=['TEST0002']) self.assertEqual(len(matches), 1) def test_skip_non_existent_id(self): matches = self.rules.run(self.ematchtestfile, skip_list=['DOESNOTEXIST']) self.assertEqual(len(matches), 3) def test_no_duplicate_rule_ids(self): real_rules = RulesCollection(['./lib/ansiblelint/rules']) rule_ids = [rule.id for rule in real_rules] self.assertEqual( [x for x, y in collections.Counter(rule_ids).items() if y > 1], [])