优化结构
This commit is contained in:
parent
430feaaff6
commit
5d5784f535
|
|
@ -0,0 +1,78 @@
|
||||||
|
package integration
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"kra/internal/integration/runtimeconfig"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConnectivityTesterRestoreMaskedSecrets(t *testing.T) {
|
||||||
|
store := runtimeconfig.NewStore()
|
||||||
|
store.Set(runtimeconfig.Config{
|
||||||
|
Kind: "mq",
|
||||||
|
Provider: "rabbitmq",
|
||||||
|
Enabled: true,
|
||||||
|
Values: json.RawMessage(`{"username":"stored-user","password":"stored-secret"}`),
|
||||||
|
})
|
||||||
|
tester := NewConnectivityTester(store)
|
||||||
|
|
||||||
|
t.Run("restores masked secret from active config", func(t *testing.T) {
|
||||||
|
values := map[string]any{
|
||||||
|
"username": "candidate-user",
|
||||||
|
"password": "******",
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tester.restoreMaskedSecrets(" MQ ", " RabbitMQ ", values); err != nil {
|
||||||
|
t.Fatalf("restoreMaskedSecrets() error = %v", err)
|
||||||
|
}
|
||||||
|
if got := values["password"]; got != "stored-secret" {
|
||||||
|
t.Fatalf("password = %q, want stored secret", got)
|
||||||
|
}
|
||||||
|
if got := values["username"]; got != "candidate-user" {
|
||||||
|
t.Fatalf("username = %q, want candidate value", got)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("keeps newly entered secret", func(t *testing.T) {
|
||||||
|
values := map[string]any{"password": "new-secret"}
|
||||||
|
|
||||||
|
if err := tester.restoreMaskedSecrets("mq", "rabbitmq", values); err != nil {
|
||||||
|
t.Fatalf("restoreMaskedSecrets() error = %v", err)
|
||||||
|
}
|
||||||
|
if got := values["password"]; got != "new-secret" {
|
||||||
|
t.Fatalf("password = %q, want newly entered secret", got)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("does not treat non-secret fields as masked secrets", func(t *testing.T) {
|
||||||
|
values := map[string]any{
|
||||||
|
"username": "******",
|
||||||
|
"password": "new-secret",
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := tester.restoreMaskedSecrets("mq", "rabbitmq", values); err != nil {
|
||||||
|
t.Fatalf("restoreMaskedSecrets() error = %v", err)
|
||||||
|
}
|
||||||
|
if got := values["username"]; got != "******" {
|
||||||
|
t.Fatalf("username = %q, want unchanged masked-looking value", got)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConnectivityTesterRestoreMaskedSecretsRequiresStoredSecret(t *testing.T) {
|
||||||
|
tester := NewConnectivityTester(runtimeconfig.NewStore())
|
||||||
|
values := map[string]any{"password": "******"}
|
||||||
|
|
||||||
|
err := tester.restoreMaskedSecrets("mq", "rabbitmq", values)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("restoreMaskedSecrets() error = nil, want missing secret error")
|
||||||
|
}
|
||||||
|
if !strings.Contains(err.Error(), "password") || !strings.Contains(err.Error(), "重新填写") {
|
||||||
|
t.Fatalf("restoreMaskedSecrets() error = %q, want actionable password message", err)
|
||||||
|
}
|
||||||
|
if got := values["password"]; got != "******" {
|
||||||
|
t.Fatalf("password = %q, want masked value left unchanged after error", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package websocket
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConfigCompletesLocalTemporaryHandshake(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
values map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "default origin policy",
|
||||||
|
values: map[string]any{
|
||||||
|
"path": "/connection-test",
|
||||||
|
"write_wait": "1s",
|
||||||
|
"pong_wait": "2s",
|
||||||
|
"ping_period": "1s",
|
||||||
|
"max_message_size": 1024,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "configured origin",
|
||||||
|
values: map[string]any{
|
||||||
|
"path": "/origin-test",
|
||||||
|
"allow_origins": []string{"https://admin.example.test"},
|
||||||
|
"write_wait": "1s",
|
||||||
|
"pong_wait": "2s",
|
||||||
|
"ping_period": "1s",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
raw, err := json.Marshal(tt.values)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("json.Marshal() error = %v", err)
|
||||||
|
}
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
if err = TestConfig(ctx, raw); err != nil {
|
||||||
|
t.Fatalf("TestConfig() error = %v", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConfigHonorsCanceledContextWithoutExternalAccess(t *testing.T) {
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
err := TestConfig(ctx, json.RawMessage(`{"path":"/connection-test"}`))
|
||||||
|
if err != context.Canceled {
|
||||||
|
t.Fatalf("TestConfig() error = %v, want context.Canceled", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue