operation_mask_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package middleware
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestMaskSensitiveJSONMasksPasswordAndTokenFields(t *testing.T) {
  8. body := []byte(`{"username":"admin","password":"secret123","old_password":"old","new_password":"new1","token":"jwt-token","remark":"ok","nested":{"password":"x","value":1},"items":[{"pass":"p","name":"a"}]}`)
  9. masked := string(maskSensitiveJSON(body))
  10. // 敏感字段脱敏
  11. require.NotContains(t, masked, "secret123")
  12. require.NotContains(t, masked, "jwt-token")
  13. require.Contains(t, masked, "******")
  14. // 非敏感字段保留
  15. require.Contains(t, masked, `"username":"admin"`)
  16. require.Contains(t, masked, `"remark":"ok"`)
  17. require.Contains(t, masked, `"value":1`)
  18. require.Contains(t, masked, `"name":"a"`)
  19. }
  20. func TestMaskSensitiveJSONFieldNamesCaseInsensitive(t *testing.T) {
  21. body := []byte(`{"Password":"UPPER","New_Password":"x"}`)
  22. masked := string(maskSensitiveJSON(body))
  23. require.NotContains(t, masked, "UPPER")
  24. require.Contains(t, masked, "******")
  25. }
  26. func TestMaskSensitiveJSONPassesThroughNonJSON(t *testing.T) {
  27. body := []byte(`not a json body`)
  28. require.Equal(t, string(body), string(maskSensitiveJSON(body)))
  29. }
  30. func TestMaskResponseTruncatesLongContent(t *testing.T) {
  31. long := strings.Repeat("x", 5000)
  32. // JSON 数组包裹后仍超长 → 截断标记
  33. resp := maskResponse(`{"data":"` + long + `"}`)
  34. require.Equal(t, "[超出记录长度]", resp)
  35. }
  36. func TestMaskResponseKeepsShortContent(t *testing.T) {
  37. resp := maskResponse(`{"code":0,"msg":"ok"}`)
  38. require.Equal(t, `{"code":0,"msg":"ok"}`, resp)
  39. }