mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
146 lines
4.0 KiB
Go
146 lines
4.0 KiB
Go
package grpc_test
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/formancehq/stack/components/stargate/internal/api"
|
|
"github.com/formancehq/stack/components/stargate/internal/utils"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
func TestStream(t *testing.T) {
|
|
ctx := context.Background()
|
|
|
|
client := NewClient()
|
|
defer client.Close()
|
|
|
|
organizationID := "test"
|
|
stackID := "test"
|
|
|
|
ctx, cancel := context.WithCancel(ctx)
|
|
defer cancel()
|
|
responseChan := make(chan *api.StargateClientMessage)
|
|
incomingMessageChan := client.RunStream(t, ctx, organizationID, stackID, responseChan)
|
|
|
|
type testCase struct {
|
|
name string
|
|
ev *api.StargateServerMessage
|
|
response *api.StargateClientMessage
|
|
}
|
|
|
|
testCases := []*testCase{
|
|
{
|
|
name: "success",
|
|
ev: &api.StargateServerMessage{
|
|
Event: &api.StargateServerMessage_ApiCall{
|
|
ApiCall: &api.StargateServerMessage_APICall{
|
|
Method: http.MethodGet,
|
|
Path: "/api/ledger",
|
|
Query: nil,
|
|
Body: nil,
|
|
Headers: nil,
|
|
},
|
|
},
|
|
},
|
|
response: &api.StargateClientMessage{
|
|
Event: &api.StargateClientMessage_ApiCallResponse{
|
|
ApiCallResponse: &api.StargateClientMessage_APICallResponse{
|
|
StatusCode: 204,
|
|
Body: nil,
|
|
Headers: nil,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "success with query, body and headers",
|
|
ev: &api.StargateServerMessage{
|
|
Event: &api.StargateServerMessage_ApiCall{
|
|
ApiCall: &api.StargateServerMessage_APICall{
|
|
Method: http.MethodGet,
|
|
Path: "/api/ledger",
|
|
Query: map[string]*api.Values{
|
|
"foo": {
|
|
Values: []string{"bar"},
|
|
},
|
|
},
|
|
Body: []byte(`{"foo":"bar"}`),
|
|
Headers: map[string]*api.Values{
|
|
"fake-auth": {
|
|
Values: []string{"fake-token"},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
response: &api.StargateClientMessage{
|
|
Event: &api.StargateClientMessage_ApiCallResponse{
|
|
ApiCallResponse: &api.StargateClientMessage_APICallResponse{
|
|
StatusCode: 200,
|
|
Body: []byte(`{"bar":"baz"}`),
|
|
Headers: map[string]*api.Values{
|
|
"fake-headers": {
|
|
Values: []string{"fake-value"},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, testCase := range testCases {
|
|
data, err := proto.Marshal(testCase.ev)
|
|
require.NoError(t, err)
|
|
|
|
goCtx, cancel := context.WithCancel(ctx)
|
|
go func() {
|
|
select {
|
|
case <-goCtx.Done():
|
|
return
|
|
case ev := <-incomingMessageChan:
|
|
testCaseMsg := testCase.ev.Event.(*api.StargateServerMessage_ApiCall)
|
|
serverMsg := ev.Event.(*api.StargateServerMessage_ApiCall)
|
|
assert.Equal(t, testCaseMsg.ApiCall.Method, serverMsg.ApiCall.Method)
|
|
assert.Equal(t, testCaseMsg.ApiCall.Path, serverMsg.ApiCall.Path)
|
|
for k, v := range testCaseMsg.ApiCall.Query {
|
|
assert.Equal(t, v.Values, serverMsg.ApiCall.Query[k].Values)
|
|
}
|
|
for k, v := range testCaseMsg.ApiCall.Headers {
|
|
assert.Equal(t, v.Values, serverMsg.ApiCall.Headers[k].Values)
|
|
}
|
|
assert.Equal(t, testCaseMsg.ApiCall.Body, serverMsg.ApiCall.Body)
|
|
|
|
testCase.response.CorrelationId = ev.CorrelationId
|
|
select {
|
|
case <-goCtx.Done():
|
|
return
|
|
case responseChan <- testCase.response:
|
|
}
|
|
}
|
|
}()
|
|
|
|
resp, err := nc.Request(utils.GetNatsSubject(organizationID, stackID), data, 30*time.Second)
|
|
cancel()
|
|
require.NoError(t, err)
|
|
|
|
var response api.StargateClientMessage
|
|
err = proto.Unmarshal(resp.Data, &response)
|
|
require.NoError(t, err)
|
|
|
|
testCaseMsg := testCase.response.Event.(*api.StargateClientMessage_ApiCallResponse)
|
|
responseMsg := response.Event.(*api.StargateClientMessage_ApiCallResponse)
|
|
assert.Equal(t, testCase.response.CorrelationId, response.CorrelationId)
|
|
assert.Equal(t, testCaseMsg.ApiCallResponse.StatusCode, responseMsg.ApiCallResponse.StatusCode)
|
|
for k, v := range testCaseMsg.ApiCallResponse.Headers {
|
|
assert.Equal(t, v.Values, responseMsg.ApiCallResponse.Headers[k].Values)
|
|
}
|
|
assert.Equal(t, testCaseMsg.ApiCallResponse.Body, responseMsg.ApiCallResponse.Body)
|
|
}
|
|
}
|