package com.baiyue.eventbridge.security; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import jakarta.annotation.Resource; import org.junit.jupiter.api.AfterEach; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.server.ResponseStatusException; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; @DisplayName("内部服务令牌校验") @SpringJUnitConfig(InternalServiceTokenGuard.class) @TestPropertySource(properties = "baiyue.security.internal-service-token=a-secure-internal-token") class InternalServiceTokenGuardTest { @Resource private InternalServiceTokenGuard guard; @AfterEach void resetToken() { ReflectionTestUtils.setField(guard, "expectedToken", "a-secure-internal-token"); } @Test void validTokenAllowsAccess() { assertThatCode(() -> guard.verify("a-secure-internal-token")).doesNotThrowAnyException(); } @Test void unconfiguredTokenDisablesReceiveEndpoint() { ReflectionTestUtils.setField(guard, "expectedToken", ""); assertThatThrownBy(() -> guard.verify("anything")) .isInstanceOf(ResponseStatusException.class) .hasMessageContaining("接口已关闭"); } @Test void invalidTokenIsRejected() { ReflectionTestUtils.setField(guard, "expectedToken", "expected"); assertThatThrownBy(() -> guard.verify("wrong")) .isInstanceOf(ResponseStatusException.class) .hasMessageContaining("令牌无效"); } }