104 lines
3.7 KiB
Go
104 lines
3.7 KiB
Go
package http_binding_test
|
|
|
|
import (
|
|
"context"
|
|
nethttp "net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/cloudevents/sdk-go/pkg/event"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/cloudevents/sdk-go/pkg/binding"
|
|
"github.com/cloudevents/sdk-go/pkg/binding/test"
|
|
"github.com/cloudevents/sdk-go/pkg/bindings/http"
|
|
)
|
|
|
|
func TestSendSkipBinary(t *testing.T) {
|
|
close, s, r := testSenderReceiver(t)
|
|
defer close()
|
|
test.EachEvent(t, test.Events(), func(t *testing.T, eventIn event.Event) {
|
|
eventIn = test.ExToStr(t, eventIn)
|
|
in := test.MustCreateMockBinaryMessage(eventIn)
|
|
test.SendReceive(t, binding.WithSkipDirectBinaryEncoding(binding.WithPreferredEventEncoding(context.Background(), binding.EncodingStructured), true), in, s, r, func(out binding.Message) {
|
|
eventOut, encoding := test.MustToEvent(context.Background(), out)
|
|
assert.Equal(t, encoding, binding.EncodingStructured)
|
|
test.AssertEventEquals(t, eventIn, test.ExToStr(t, eventOut))
|
|
})
|
|
})
|
|
}
|
|
|
|
func TestSendSkipStructured(t *testing.T) {
|
|
close, s, r := testSenderReceiver(t)
|
|
defer close()
|
|
test.EachEvent(t, test.Events(), func(t *testing.T, eventIn event.Event) {
|
|
eventIn = test.ExToStr(t, eventIn)
|
|
in := test.MustCreateMockStructuredMessage(eventIn)
|
|
test.SendReceive(t, binding.WithSkipDirectStructuredEncoding(context.Background(), true), in, s, r, func(out binding.Message) {
|
|
eventOut, encoding := test.MustToEvent(context.Background(), out)
|
|
assert.Equal(t, encoding, binding.EncodingBinary)
|
|
test.AssertEventEquals(t, eventIn, test.ExToStr(t, eventOut))
|
|
})
|
|
})
|
|
}
|
|
|
|
func TestSendBinaryReceiveBinary(t *testing.T) {
|
|
close, s, r := testSenderReceiver(t)
|
|
defer close()
|
|
test.EachEvent(t, test.Events(), func(t *testing.T, eventIn event.Event) {
|
|
eventIn = test.ExToStr(t, eventIn)
|
|
in := test.MustCreateMockBinaryMessage(eventIn)
|
|
test.SendReceive(t, context.Background(), in, s, r, func(out binding.Message) {
|
|
eventOut, encoding := test.MustToEvent(context.Background(), out)
|
|
assert.Equal(t, encoding, binding.EncodingBinary)
|
|
test.AssertEventEquals(t, eventIn, test.ExToStr(t, eventOut))
|
|
})
|
|
})
|
|
}
|
|
|
|
func TestSendStructReceiveStruct(t *testing.T) {
|
|
close, s, r := testSenderReceiver(t)
|
|
defer close()
|
|
test.EachEvent(t, test.Events(), func(t *testing.T, eventIn event.Event) {
|
|
eventIn = test.ExToStr(t, eventIn)
|
|
in := test.MustCreateMockStructuredMessage(eventIn)
|
|
test.SendReceive(t, context.Background(), in, s, r, func(out binding.Message) {
|
|
eventOut, encoding := test.MustToEvent(context.Background(), out)
|
|
assert.Equal(t, encoding, binding.EncodingStructured)
|
|
test.AssertEventEquals(t, eventIn, test.ExToStr(t, eventOut))
|
|
})
|
|
})
|
|
}
|
|
|
|
func TestSendEventReceiveBinary(t *testing.T) {
|
|
close, s, r := testSenderReceiver(t)
|
|
defer close()
|
|
test.EachEvent(t, test.Events(), func(t *testing.T, eventIn event.Event) {
|
|
eventIn = test.ExToStr(t, eventIn)
|
|
in := binding.EventMessage(eventIn)
|
|
test.SendReceive(t, context.Background(), in, s, r, func(out binding.Message) {
|
|
eventOut, encoding := test.MustToEvent(context.Background(), out)
|
|
assert.Equal(t, encoding, binding.EncodingBinary)
|
|
test.AssertEventEquals(t, eventIn, test.ExToStr(t, eventOut))
|
|
})
|
|
})
|
|
}
|
|
|
|
func testSenderReceiver(t testing.TB, options ...http.SenderOptionFunc) (func(), binding.Sender, binding.Receiver) {
|
|
r := http.NewReceiver() // Parameters? Capacity, sync.
|
|
srv := httptest.NewServer(r)
|
|
u, err := url.Parse(srv.URL)
|
|
require.NoError(t, err)
|
|
s := http.NewSender(&nethttp.Client{}, u, options...) // Capacity, sync etc.
|
|
return func() { srv.Close() }, s, r
|
|
}
|
|
|
|
func BenchmarkSendReceive(b *testing.B) {
|
|
c, s, r := testSenderReceiver(b)
|
|
defer c() // Cleanup
|
|
test.BenchmarkSendReceive(b, s, r)
|
|
}
|