You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

61 lines
1.6 KiB

package alarmsocket
import (
"context"
"net"
"path/filepath"
"strings"
"testing"
"time"
"tera-clone/services/tera-api/internal/alarmdelivery"
)
func TestClientServerDeliveryRoundTrip(t *testing.T) {
listener, err := net.Listen("unix", filepath.Join(t.TempDir(), "alarm.sock"))
if err != nil {
t.Fatal(err)
}
defer listener.Close()
server := Server{Controller: alarmdelivery.MockController{Clock: func() time.Time {
return time.Date(2026, 7, 23, 1, 2, 3, 0, time.UTC)
}}}
done := make(chan error, 1)
go func() { done <- server.Serve(listener) }()
client := NewClient(listener.Addr().String())
result, err := client.Deliver(context.Background(), alarmdelivery.Request{
Message: "test", Channels: []string{"web"}, RetryIntervalSeconds: 1, QueueLimit: 10,
})
if err != nil {
t.Fatal(err)
}
if result.State != "delivered" || result.DeliveryID != "mock_alarm_delivery" || result.Attempts != 1 {
t.Fatalf("delivery result = %+v", result)
}
_ = listener.Close()
if err := <-done; err != nil {
t.Fatal(err)
}
}
func TestServerRejectsUnknownFieldsAndActions(t *testing.T) {
for _, payload := range []string{
`{"action":"deliver","unknown":true}` + "\n",
`{"action":"delete"}` + "\n",
} {
serverSide, clientSide := net.Pipe()
go Server{Controller: alarmdelivery.MockController{}}.handle(serverSide)
if _, err := clientSide.Write([]byte(payload)); err != nil {
t.Fatal(err)
}
buffer := make([]byte, 1024)
count, err := clientSide.Read(buffer)
if err != nil {
t.Fatal(err)
}
_ = clientSide.Close()
if !strings.Contains(string(buffer[:count]), "validation_failed") {
t.Fatalf("response = %q", buffer[:count])
}
}
}