Exemple #1
0
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
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], [])