Пример #1
0
def rule_runner(request: SubRequest, config_options: Namespace) -> RunFromText:
    """Return runner for a specific rule class."""
    rule_class = request.param
    config_options.enable_list.append(rule_class().id)
    collection = RulesCollection(options=config_options)
    collection.register(rule_class())
    return RunFromText(collection)
Пример #2
0
 def test_file(self):
     collection = RulesCollection()
     collection.register(AdminByDefault())
     file_name = 'testResources/ansible-smell/adminbydefault.yml'
     good_runner = Runner(playbook=file_name, rules=collection)
     # print(good_runner.run())
     assert 3 == len(good_runner.run())
 def test_file(self):
     collection = RulesCollection()
     collection.register(HardCodedSecrets())
     file_name = 'testResources/ansible-smell/create.yml'
     good_runner = Runner(rules=collection, playbook=file_name)
     # print(good_runner.run())
     assert 1 == len(good_runner.run())
 def lint_error_lines(test_playbook: str) -> List[int]:
     """Get VarHasSpacesRules linting results on test_playbook."""
     collection = RulesCollection()
     collection.register(VariableHasSpacesRule())
     lintable = Lintable(test_playbook)
     results = Runner(lintable, rules=collection).run()
     return list(map(lambda item: item.linenumber, results))
Пример #5
0
 def test_file(self):
     collection = RulesCollection()
     collection.register(EmptyPassword0())
     file_name = 'testResources/ansible-smell/adminbydefault.yml'
     good_runner = Runner(playbook=file_name, rules=collection)
     print(good_runner.run())
     print(len(good_runner.run()))
     assert 0 == len(good_runner.run())
    def test_file(self):
        collection = RulesCollection()
        collection.register(DepreciatedStatementUsage())

        file_name = 'testResources/ansible-smell/adminbydefault.yml'
        good_runner = Runner(playbook=file_name, rules=collection)

        print(good_runner.run())
Пример #7
0
    def test_206() -> None:
        """Verify rule."""
        collection = RulesCollection()
        collection.register(VariableHasSpacesRule())

        lintable = Lintable("examples/playbooks/206.yml")
        results = Runner(collection, lintable=lintable).run()

        assert len(results) == 3
Пример #8
0
 def test_file(self):
     collection = RulesCollection()
     collection.register(HardCodePassword())
     file_name = 'testResources/ansible-smell/hardcodepassword.yml'
     good_runner = Runner(playbook=file_name, rules=collection)
     print(good_runner.run())
     print(type(good_runner.run()))
     print(len(good_runner.run()))
     assert 0 == len(good_runner.run())
Пример #9
0
    def test_var_spacing() -> None:
        """Verify rule."""
        collection = RulesCollection()
        collection.register(VariableHasSpacesRule())

        lintable = Lintable("examples/playbooks/var-spacing.yml")
        results = Runner(lintable, rules=collection).run()

        assert len(results) == 3
 def test_file(self):
     collection = RulesCollection()
     collection.register(InvalidIPaddressbinding())
     file_name = 'testResources/ansible-smell/invalidIPaddressbinding.yml'
     good_runner = Runner(playbook=file_name, rules=collection)
     result = good_runner.run()
     print(result)
     print(type(result))
     print(len(result))
     assert 0 == len(good_runner.run())
    def test_file(self):
        collection = RulesCollection()
        collection.register(DuplicateEntity())
        file_name = 'testResources/ansible-smell/hardcodepassword5.yml'
        good_runner = Runner(playbook=file_name, rules=collection)

        name_list = []
        for item in good_runner.run():
            name_list.append(str(item).split('matched')[0])

        if len(name_list) != 0:
            print([
                item for item, count in collections.Counter(name_list).items()
                if count > 1
            ])
Пример #12
0
    def test_rule_no_handler() -> None:
        """Verify rule."""
        collection = RulesCollection()
        collection.register(UseHandlerRatherThanWhenChangedRule())

        lintable = Lintable('examples/playbooks/rule-no-handler.yml')
        results = Runner(lintable, rules=collection).run()

        assert len(results) == 3
        assert results[0].filename == 'examples/playbooks/roles/a-role/tasks/main.yml'
        assert results[0].linenumber == 3
        assert results[1].filename == 'examples/playbooks/rule-no-handler.yml'
        assert results[1].linenumber == 14
        assert results[2].filename == 'examples/playbooks/rule-no-handler.yml'
        assert results[2].linenumber == 18
class RuleTestCase(unittest.TestCase):
    """Base class to test ansible-lint rules.
    """
    name = None
    rule = None
    clear_fn: typing.Optional[typing.Callable] = None

    def setUp(self):
        """Initialize lint rules collection.
        """
        if not self.rule or not self.name:
            return

        # Collect the default rules and add the rule to test.
        self.rules = RulesCollection()
        self.rules.register(self.rule)

        if callable(self.clear_fn):
            self.clear_fn()  # pylint: disable=not-callable

    def list_resources(
            self,
            success: bool = True,
            search: typing.Optional[str] = None) -> typing.List[str]:
        return list_resources(self.name, success=success, search=search)

    def lint(self, success: bool = True, search: typing.Optional[str] = None):
        """
        Run the lint rule's check to given resource data files.
        """
        if not self.rule or not self.name:
            return

        for filepath in self.list_resources(success, search=search):
            runner = Runner(self.rules, filepath, [], [], [])
            res = runner.run()
            if success:
                self.assertEqual(0, len(res), res)  # No errors
            else:
                self.assertTrue(len(res) > 0, res)  # Something went wrong

    def test_10_ok_cases(self):
        self.lint()

    def test_20_ng_cases(self):
        self.lint(False)
 def test_file(self):
     collection = RulesCollection()
     collection.register(ComplexExpression())
     file_name = 'testResources/ansible-smell/complexexpression.yml'
     good_runner = Runner(playbook=file_name, rules=collection)
     print(good_runner.run())
Пример #15
0
def rule_runner(request):
    """Return runner for a specific rule class."""
    rule_class = request.param
    collection = RulesCollection()
    collection.register(rule_class())
    return RunFromText(collection)
Пример #16
0
 def test_file(self):
     collection = RulesCollection()
     collection.register(HttpWithoutTls())
     file_name = 'testResources/ansible-smell/httpwithouttls2.yml'
     good_runner = Runner(playbook=file_name, rules=collection)
     print(good_runner.run())
Пример #17
0
 def test_file(self):
     collection = RulesCollection()
     collection.register(SuspiciousComment())
     file_name = str('testResources/ansible-smell/suspiciouscomment.yml')
     good_runner = Runner(playbook=file_name, rules=collection)
     print(good_runner.run())
Пример #18
0
 def test_file(self):
     collection = RulesCollection()
     collection.register(WeakCryptographyalgo())
     file_name = str('testResources/ansible-smell/weakcryptographyalgo.yml')
     good_runner = Runner(playbook=file_name, rules=collection)
     print(good_runner.run())
Пример #19
0
def test_rules_collection() -> RulesCollection:
    """Instantiate a roles collection for tests."""
    collection = RulesCollection()
    collection.register(RoleNames())
    return collection