Skip to content

Commit f4cce88

Browse files
author
Lei Da
committed
add ut for sensitive component
1 parent 04ff09a commit f4cce88

File tree

2 files changed

+120
-21
lines changed

2 files changed

+120
-21
lines changed

component/sensitive.go

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313

1414
type sensitiveComponentImpl struct {
1515
checker rpc.ModerationSvcClient
16-
enable bool
1716
}
1817

1918
type SensitiveComponent interface {
@@ -23,20 +22,16 @@ type SensitiveComponent interface {
2322
}
2423

2524
func NewSensitiveComponent(cfg *config.Config) (SensitiveComponent, error) {
26-
c := &sensitiveComponentImpl{}
27-
c.enable = cfg.SensitiveCheck.Enable
28-
29-
if c.enable {
30-
c.checker = rpc.NewModerationSvcHttpClient(fmt.Sprintf("%s:%d", cfg.Moderation.Host, cfg.Moderation.Port))
25+
if !cfg.SensitiveCheck.Enable {
26+
return &sensitiveComponentNoOpImpl{}, nil
3127
}
28+
29+
c := &sensitiveComponentImpl{}
30+
c.checker = rpc.NewModerationSvcHttpClient(fmt.Sprintf("%s:%d", cfg.Moderation.Host, cfg.Moderation.Port))
3231
return c, nil
3332
}
3433

35-
func (c *sensitiveComponentImpl) CheckText(ctx context.Context, scenario, text string) (bool, error) {
36-
if !c.enable {
37-
return true, nil
38-
}
39-
34+
func (c sensitiveComponentImpl) CheckText(ctx context.Context, scenario, text string) (bool, error) {
4035
result, err := c.checker.PassTextCheck(ctx, scenario, text)
4136
if err != nil {
4237
return false, err
@@ -45,23 +40,15 @@ func (c *sensitiveComponentImpl) CheckText(ctx context.Context, scenario, text s
4540
return !result.IsSensitive, nil
4641
}
4742

48-
func (c *sensitiveComponentImpl) CheckImage(ctx context.Context, scenario, ossBucketName, ossObjectName string) (bool, error) {
49-
if !c.enable {
50-
return true, nil
51-
}
52-
43+
func (c sensitiveComponentImpl) CheckImage(ctx context.Context, scenario, ossBucketName, ossObjectName string) (bool, error) {
5344
result, err := c.checker.PassImageCheck(ctx, scenario, ossBucketName, ossObjectName)
5445
if err != nil {
5546
return false, err
5647
}
5748
return !result.IsSensitive, nil
5849
}
5950

60-
func (c *sensitiveComponentImpl) CheckRequestV2(ctx context.Context, req types.SensitiveRequestV2) (bool, error) {
61-
if !c.enable {
62-
return true, nil
63-
}
64-
51+
func (c sensitiveComponentImpl) CheckRequestV2(ctx context.Context, req types.SensitiveRequestV2) (bool, error) {
6552
fields := req.GetSensitiveFields()
6653
for _, field := range fields {
6754
if len(field.Value()) == 0 {
@@ -79,3 +66,21 @@ func (c *sensitiveComponentImpl) CheckRequestV2(ctx context.Context, req types.S
7966
}
8067
return true, nil
8168
}
69+
70+
// sensitiveComponentNoOpImpl this implementation provides a "no-op" (no operation) version of the SensitiveComponent interface,
71+
// where all methods simply return a "not sensitive" result without performing any actual checks.
72+
type sensitiveComponentNoOpImpl struct {
73+
}
74+
75+
func (c *sensitiveComponentNoOpImpl) CheckText(ctx context.Context, scenario, text string) (bool, error) {
76+
return true, nil
77+
}
78+
79+
func (c *sensitiveComponentNoOpImpl) CheckImage(ctx context.Context, scenario, ossBucketName, ossObjectName string) (bool, error) {
80+
return true, nil
81+
}
82+
83+
// implements SensitiveComponent
84+
func (c *sensitiveComponentNoOpImpl) CheckRequestV2(ctx context.Context, req types.SensitiveRequestV2) (bool, error) {
85+
return true, nil
86+
}

component/sensitive_test.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package component
2+
3+
import (
4+
"context"
5+
"testing"
6+
7+
"github.com/stretchr/testify/mock"
8+
"github.com/stretchr/testify/require"
9+
mockrpc "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/builder/rpc"
10+
mocktypes "opencsg.com/csghub-server/_mocks/opencsg.com/csghub-server/common/types"
11+
"opencsg.com/csghub-server/builder/rpc"
12+
"opencsg.com/csghub-server/builder/sensitive"
13+
"opencsg.com/csghub-server/common/config"
14+
"opencsg.com/csghub-server/common/types"
15+
)
16+
17+
func TestSensitiveComponent_CheckText(t *testing.T) {
18+
mockModeration := mockrpc.NewMockModerationSvcClient(t)
19+
mockModeration.EXPECT().PassTextCheck(mock.Anything, mock.Anything, mock.Anything).Return(&rpc.CheckResult{
20+
IsSensitive: false,
21+
}, nil)
22+
comp := &sensitiveComponentImpl{
23+
checker: mockModeration,
24+
}
25+
26+
success, err := comp.CheckText(context.TODO(), string(sensitive.ScenarioChatDetection), "test")
27+
require.Nil(t, err)
28+
require.True(t, success)
29+
}
30+
31+
func TestSensitiveComponent_CheckImage(t *testing.T) {
32+
mockModeration := mockrpc.NewMockModerationSvcClient(t)
33+
mockModeration.EXPECT().PassImageCheck(mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(&rpc.CheckResult{
34+
IsSensitive: false,
35+
}, nil)
36+
comp := &sensitiveComponentImpl{
37+
checker: mockModeration,
38+
}
39+
40+
success, err := comp.CheckImage(context.TODO(), string(sensitive.ScenarioChatDetection), "ossBucketName", "ossObjectName")
41+
require.Nil(t, err)
42+
require.True(t, success)
43+
}
44+
45+
func TestSensitiveComponent_CheckRequestV2(t *testing.T) {
46+
mockModeration := mockrpc.NewMockModerationSvcClient(t)
47+
mockModeration.EXPECT().PassTextCheck(mock.Anything, mock.Anything, mock.Anything).Return(&rpc.CheckResult{
48+
IsSensitive: false,
49+
}, nil).Twice()
50+
comp := &sensitiveComponentImpl{
51+
checker: mockModeration,
52+
}
53+
mockRequest := mocktypes.NewMockSensitiveRequestV2(t)
54+
mockRequest.EXPECT().GetSensitiveFields().Return([]types.SensitiveField{
55+
{
56+
Name: "chat",
57+
Value: func() string {
58+
return "chat1"
59+
},
60+
Scenario: string(sensitive.ScenarioChatDetection),
61+
},
62+
{
63+
Name: "comment",
64+
Value: func() string {
65+
return "comment1"
66+
},
67+
Scenario: string(sensitive.ScenarioCommentDetection),
68+
},
69+
})
70+
success, err := comp.CheckRequestV2(context.TODO(), mockRequest)
71+
require.Nil(t, err)
72+
require.True(t, success)
73+
}
74+
75+
func TestSensitiveComponent_NoOpImpl(t *testing.T) {
76+
cfg := &config.Config{}
77+
cfg.SensitiveCheck.Enable = false
78+
c, err := NewSensitiveComponent(cfg)
79+
require.Nil(t, err)
80+
81+
success, err := c.CheckText(context.Background(), string(sensitive.ScenarioChatDetection), "test")
82+
require.Nil(t, err)
83+
require.True(t, success)
84+
85+
success, err = c.CheckImage(context.Background(), string(sensitive.ScenarioChatDetection), "test", "test")
86+
require.Nil(t, err)
87+
require.True(t, success)
88+
89+
mockRequest := mocktypes.NewMockSensitiveRequestV2(t)
90+
91+
success, err = c.CheckRequestV2(context.Background(), mockRequest)
92+
require.Nil(t, err)
93+
require.True(t, success)
94+
}

0 commit comments

Comments
 (0)