Files

85 lines
2.0 KiB
Go

package model
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLogOtherScopesAndMerges(t *testing.T) {
var other LogOther
assert.True(t, other.SetPublic("request_path", "/v1/chat/completions"))
other.MergePublic(map[string]any{
"zero": 0,
})
assert.True(t, other.SetAdmin("use_channel", []string{"channel-a"}))
other.MergeAdmin(map[string]any{
"rejected": false,
})
assert.True(t, other.SetRoot("upstream_request_id", "upstream-private"))
other.MergeRoot(map[string]any{
"generation": 0,
})
assert.True(t, other.SetAudit("method", "POST"))
other.MergeAudit(map[string]any{
"success": false,
})
require.JSONEq(t, `{
"request_path": "/v1/chat/completions",
"zero": 0,
"admin_info": {
"use_channel": ["channel-a"],
"rejected": false
},
"root_info": {
"upstream_request_id": "upstream-private",
"generation": 0
},
"audit_info": {
"method": "POST",
"success": false
}
}`, other.JSONString())
}
func TestLogOtherRejectsSensitivePublicFields(t *testing.T) {
other := NewLogOther()
for _, key := range []string{
"admin_info",
"root_info",
"audit_info",
"channel_id",
"channel_name",
"channel_type",
"reject_reason",
} {
assert.False(t, other.SetPublic(key, "must-not-leak"), key)
}
other.MergePublic(map[string]any{
"request_path": "/v1/responses",
"channel_name": "still-must-not-leak",
"admin_info": map[string]any{"secret": true},
})
require.JSONEq(t, `{"request_path":"/v1/responses"}`, other.JSONString())
require.JSONEq(t, `{}`, NewLogOther().JSONString())
}
func TestLogOtherJSONStringDoesNotMutateReceiver(t *testing.T) {
other := NewLogOther()
require.True(t, other.SetPublic("request_path", "/v1/chat/completions"))
require.True(t, other.SetAdmin("rejected", false))
before := other.Snapshot()
first := other.JSONString()
after := other.Snapshot()
second := other.JSONString()
require.Equal(t, before, after)
require.Equal(t, first, second)
}