From 0edeb50d20eec59d4dc5b3429311bc2e2814c52d Mon Sep 17 00:00:00 2001 From: qizhicheng Date: Wed, 26 Feb 2025 17:22:04 +0800 Subject: [PATCH] Add tests for VaultMixin and handle import errors for PasswordMixin --- sql/plugins/tests.py | 24 +++++++++++++++++++++++- sql/test_model.py | 8 +++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/sql/plugins/tests.py b/sql/plugins/tests.py index dccdc58f2a..eb91fb717b 100644 --- a/sql/plugins/tests.py +++ b/sql/plugins/tests.py @@ -7,7 +7,8 @@ """ import json from django.test import Client, TestCase -from unittest.mock import patch, ANY +from unittest.mock import patch, ANY, Mock +from pytest_mock import MockerFixture from django.contrib.auth import get_user_model from sql.plugins.my2sql import My2SQL @@ -15,6 +16,7 @@ from sql.plugins.soar import Soar from sql.plugins.sqladvisor import SQLAdvisor from sql.plugins.pt_archiver import PtArchiver +from sql.plugins.password import VaultMixin from common.config import SysConfig @@ -334,3 +336,23 @@ def test_rewrite(self, _subprocess): # 异常测试 with self.assertRaises(RuntimeError): self.soar.rewrite(sql, "unknown") + + +def test_password_mixin(mocker: MockerFixture): + from sql.plugins.password import requests + class MockReponse(Mock): + def json(self): + return {"data": {"username": "test", "password": "test", "ttl": 360}} + mocker.patch.object(requests, "get", return_value=MockReponse()) + + class DummyInstance: + instance_name = "dummy" + + class CompondInstance(DummyInstance, VaultMixin): + pass + + instance = CompondInstance() + username, password = instance.get_username_password() + assert username == "test" + assert password == "test" + assert requests.get.call_count == 1 diff --git a/sql/test_model.py b/sql/test_model.py index c2b9d1dc8a..c626aee13a 100644 --- a/sql/test_model.py +++ b/sql/test_model.py @@ -1,5 +1,5 @@ """models.py 的补充测试""" - +from django.conf import settings from sql.models import InstanceTag @@ -7,3 +7,9 @@ def test_instance_tag_str(): i = InstanceTag(tag_name="test") assert str(i) == "test" + + +def test_password_mixin_import_error(): + settings.PASSWORD_MIXIN_PATH = "sql.not_found:ErrorMixin" + from sql.models import PasswordMixin + assert PasswordMixin.__name__ == "DummyMixin"