feat: 完成鸽达达后台安全与审计改造
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
package sysin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"hotgo/internal/consts"
|
||||
|
||||
"github.com/gogf/gf/v2/encoding/gjson"
|
||||
)
|
||||
|
||||
func TestImMessageCurfewRuleFilter(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
valid := &ImMessageCurfewRuleInp{
|
||||
RuleCode: "after_work",
|
||||
RuleName: "下班时段",
|
||||
DateType: consts.ImCurfewDateWeekday,
|
||||
StartTime: "18:00",
|
||||
EndTime: "09:00",
|
||||
Scope: consts.ImCurfewScopePrivate,
|
||||
}
|
||||
if err := valid.Filter(ctx); err != nil {
|
||||
t.Fatalf("跨午夜宵禁规则应合法: %v", err)
|
||||
}
|
||||
if valid.Timezone != "Asia/Shanghai" || valid.Status != consts.StatusEnabled {
|
||||
t.Fatalf("默认值未补齐: timezone=%s status=%d", valid.Timezone, valid.Status)
|
||||
}
|
||||
|
||||
invalidTime := *valid
|
||||
invalidTime.StartTime = "25:00"
|
||||
if err := invalidTime.Filter(ctx); err == nil {
|
||||
t.Fatal("非法宵禁时间应被拒绝")
|
||||
}
|
||||
}
|
||||
|
||||
func TestImSecurityPolicySaveFilterRequiresCurfewRule(t *testing.T) {
|
||||
in := &ImSecurityPolicySaveInp{
|
||||
PolicyName: "默认策略",
|
||||
GlobalFriendEnabled: 1,
|
||||
MessageCurfewEnabled: 1,
|
||||
}
|
||||
if err := in.Filter(context.Background()); err == nil {
|
||||
t.Fatal("启用宵禁但未配置规则应被拒绝")
|
||||
}
|
||||
in.CurfewRules = []*ImMessageCurfewRuleInp{{
|
||||
RuleCode: "group_only",
|
||||
RuleName: "仅群聊",
|
||||
DateType: consts.ImCurfewDateDaily,
|
||||
StartTime: "18:00",
|
||||
EndTime: "09:00",
|
||||
Scope: consts.ImCurfewScopeGroup,
|
||||
}}
|
||||
if err := in.Filter(context.Background()); err == nil {
|
||||
t.Fatal("宵禁仅配置群聊规则时应被拒绝")
|
||||
}
|
||||
}
|
||||
|
||||
func TestImSecurityPolicySaveFilterForcesEveryFriendEntryOff(t *testing.T) {
|
||||
in := &ImSecurityPolicySaveInp{
|
||||
PolicyName: "下班策略",
|
||||
GlobalFriendEnabled: 0,
|
||||
MessageCurfewEnabled: 0,
|
||||
FriendDisabledPolicy: gjson.New(map[string]interface{}{
|
||||
"hide_profile": false,
|
||||
"blocked_entries": []string{"search"},
|
||||
}),
|
||||
}
|
||||
if err := in.Filter(context.Background()); err != nil {
|
||||
t.Fatalf("关闭全局好友功能的策略应合法: %v", err)
|
||||
}
|
||||
policy := in.FriendDisabledPolicy.Map()
|
||||
if hide, ok := policy["hide_profile"].(bool); !ok || !hide {
|
||||
t.Fatal("关闭全局好友功能时必须强制隐藏个人资料")
|
||||
}
|
||||
entries := in.FriendDisabledPolicy.Get("blocked_entries").Array()
|
||||
if len(entries) != 6 {
|
||||
t.Fatalf("关闭全局好友功能时必须禁用全部6个入口: %#v", policy["blocked_entries"])
|
||||
}
|
||||
}
|
||||
|
||||
func TestImSecurityPolicyPublishFilter(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
if err := (&ImSecurityPolicyPublishInp{Id: 1, Reason: " "}).Filter(ctx); err == nil {
|
||||
t.Fatal("空发布原因应被拒绝")
|
||||
}
|
||||
if err := (&ImSecurityPolicyPublishInp{Id: 1, Reason: "管理员发布"}).Filter(ctx); err != nil {
|
||||
t.Fatalf("合法发布参数不应报错: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestImSecurityIPRuleEditFilter(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
valid := &ImSecurityIPRuleEditInp{
|
||||
RuleType: "blacklist",
|
||||
IpCidr: "192.0.2.0/24",
|
||||
Action: consts.ImSecurityActionBlock,
|
||||
SceneJson: gjson.New([]string{"login"}),
|
||||
RiskLevel: consts.ImRiskLevelHigh,
|
||||
}
|
||||
if err := valid.Filter(ctx); err != nil {
|
||||
t.Fatalf("合法IP阻断规则不应报错: %v", err)
|
||||
}
|
||||
|
||||
invalidAction := *valid
|
||||
invalidAction.Action = consts.ImPolicyActionDeny
|
||||
if err := invalidAction.Filter(ctx); err == nil {
|
||||
t.Fatal("数据库枚举不支持的deny动作应被拒绝")
|
||||
}
|
||||
}
|
||||
|
||||
func TestImSensitiveWordEditFilter(t *testing.T) {
|
||||
in := &ImSensitiveWordEditInp{
|
||||
GroupId: 1,
|
||||
Word: "测试词",
|
||||
MatchType: consts.ImSensitiveMatchContains,
|
||||
SceneJson: gjson.New([]string{"private_message"}),
|
||||
Action: consts.ImSensitiveActionReplace,
|
||||
RiskLevel: consts.ImRiskLevelMedium,
|
||||
}
|
||||
if err := in.Filter(context.Background()); err == nil {
|
||||
t.Fatal("替换动作未填写替换文本应被拒绝")
|
||||
}
|
||||
}
|
||||
|
||||
func TestImSensitiveWordGroupEditFilter(t *testing.T) {
|
||||
in := &ImSensitiveWordGroupEditInp{GroupCode: "default", GroupName: " "}
|
||||
if err := in.Filter(context.Background()); err == nil {
|
||||
t.Fatal("空分组名称应被拒绝")
|
||||
}
|
||||
}
|
||||
|
||||
func TestImUserPolicyGroupInputFilter(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
group := &ImUserPolicyGroupEditInp{
|
||||
GroupCode: "staff",
|
||||
GroupName: " ",
|
||||
PolicyJson: gjson.New(map[string]interface{}{}),
|
||||
}
|
||||
if err := group.Filter(ctx); err == nil {
|
||||
t.Fatal("空用户策略分组名称应被拒绝")
|
||||
}
|
||||
if err := (&ImUserPolicyGroupMemberAddInp{GroupId: 1, UserId: 0}).Filter(ctx); err == nil {
|
||||
t.Fatal("无效用户ID应被拒绝")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user