Files
go-sip/internal/dispatcher/rejected_data_test.go
T

43 lines
1.4 KiB
Go

package dispatcher
import (
"bytes"
"context"
"net/http"
"net/http/httptest"
"testing"
"git.ipao.vip/rogee/go-sip/internal/configread"
"git.ipao.vip/rogee/go-sip/internal/contract"
)
func TestCorrelatedMalformedTaskHTTPReturnsRejectedControlWithoutApplying(t *testing.T) {
c, agent, s := newControlFixture(t)
invalid := []byte(`{"resource":"task_config","credentials":"PRIVATE-HTTP-CONTENT"}`)
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write(invalid)
}))
defer server.Close()
client, err := configread.NewClient(server.URL, c.DispatcherID, "fixture", server.Client())
if err != nil {
t.Fatal(err)
}
c.Client = client
original := controlBody(t, "bad-http-original", "resume", "")
if err := c.ProcessControl(context.Background(), original); err != nil {
t.Fatal(err)
}
if len(agent.calls) != 0 {
t.Fatal("malformed HTTP configuration reached Agent")
}
outbox, err := s.ListPendingOutbox(c.DispatcherID)
if err != nil || len(outbox) != 1 {
t.Fatalf("no correlated feedback: %+v %v", outbox, err)
}
body := outbox[0].Body
if contract.ValidateCurrent("mq", body) != nil || !bytes.Contains(body, []byte(`"status":"rejected"`)) || bytes.Contains(body, []byte("PRIVATE-HTTP-CONTENT")) {
t.Fatalf("unsafe or untruthful feedback: %s", body)
}
}