Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Access] Make response for data providers consistent. #6846

Merged
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
275b16e
Changed response to consostent for block provider
AndriiDiachuk Dec 26, 2024
738ad8b
Merge branch 'AndriiDiachuk/6586-tx-statuses-data-providers-impl' of …
AndriiDiachuk Dec 27, 2024
9d2a761
Changed responses to be consistant for all block data providers
AndriiDiachuk Dec 27, 2024
aafcc4d
Refactored response type of account statuses data provider
AndriiDiachuk Dec 27, 2024
453f8d7
Refactored respone type of events daya provider
AndriiDiachuk Dec 27, 2024
92016be
Refactored transaction statuses data providers
AndriiDiachuk Dec 27, 2024
4c906b0
Merge branch 'master' of github.com:The-K-R-O-K/flow-go into AndriiDi…
AndriiDiachuk Jan 3, 2025
4c3e5ae
Renamed fields naming
AndriiDiachuk Jan 3, 2025
e1ad694
Merged and fixed tests
AndriiDiachuk Jan 7, 2025
5d8189c
Chanaged expected types in data provider tests to be consistent, adde…
AndriiDiachuk Jan 7, 2025
26485fa
Removed wrong Build function
AndriiDiachuk Jan 8, 2025
3b22d5d
Refactored data providers tests
AndriiDiachuk Jan 8, 2025
c868481
Refactored Build function BaseMessage for webSockets
AndriiDiachuk Jan 10, 2025
e549056
Merge branch 'master' of github.com:The-K-R-O-K/flow-go into AndriiDi…
AndriiDiachuk Jan 10, 2025
d4147c7
Merge branch 'master' into AndriiDiachuk/6819-make-response-for-data-…
peterargue Jan 13, 2025
58ba2f7
Merge branch 'master' of github.com:The-K-R-O-K/flow-go into AndriiDi…
AndriiDiachuk Jan 14, 2025
6c5aa7f
Merge branch 'AndriiDiachuk/6819-make-response-for-data-providers-con…
AndriiDiachuk Jan 14, 2025
75e8480
Merged with master
AndriiDiachuk Jan 22, 2025
d41ce4b
Refactored tests to not duplicate code
AndriiDiachuk Jan 22, 2025
1cb77a3
Merge branch 'master' into AndriiDiachuk/6819-make-response-for-data-…
AndriiDiachuk Jan 22, 2025
cc5412a
Refactored MessageIndexTests for data providers
AndriiDiachuk Jan 22, 2025
0de77c4
Merge branch 'AndriiDiachuk/6819-make-response-for-data-providers-con…
AndriiDiachuk Jan 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -139,17 +139,8 @@ func (s *AccountStatusesProviderSuite) subscribeAccountStatusesDataProviderTestC

// requireAccountStatuses ensures that the received account statuses information matches the expected data.
func (s *AccountStatusesProviderSuite) requireAccountStatuses(actual interface{}, expected interface{}) {
expectedResponse, ok := expected.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", expected)

expectedResponsePayload, ok := expectedResponse.Payload.(*models.AccountStatusesResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", expectedResponse.Payload)

actualResponse, ok := actual.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", actual)

actualResponsePayload, ok := actualResponse.Payload.(*models.AccountStatusesResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", actualResponse.Payload)
expectedResponse, expectedResponsePayload := extractPayload[*models.AccountStatusesResponse](s.T(), expected)
actualResponse, actualResponsePayload := extractPayload[*models.AccountStatusesResponse](s.T(), actual)

require.Equal(s.T(), expectedResponsePayload.BlockID, actualResponsePayload.BlockID)
require.Equal(s.T(), len(expectedResponsePayload.AccountEvents), len(actualResponsePayload.AccountEvents))
Original file line number Diff line number Diff line change
@@ -6,7 +6,6 @@ import (
"testing"

"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"

"github.com/onflow/flow-go/engine/access/rest/common/parser"
@@ -115,17 +114,8 @@ func (s *BlockDigestsProviderSuite) validBlockDigestsArgumentsTestCases() []test

// requireBlockDigest ensures that the received block header information matches the expected data.
func (s *BlocksProviderSuite) requireBlockDigest(actual interface{}, expected interface{}) {
expectedResponse, ok := expected.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", expected)

expectedResponsePayload, ok := expectedResponse.Payload.(*models.BlockDigest)
require.True(s.T(), ok, "Unexpected response payload type: %T", expectedResponse.Payload)

actualResponse, ok := actual.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", actual)

actualResponsePayload, ok := actualResponse.Payload.(*models.BlockDigest)
require.True(s.T(), ok, "Unexpected response payload type: %T", actualResponse.Payload)
expectedResponse, expectedResponsePayload := extractPayload[*models.BlockDigest](s.T(), expected)
actualResponse, actualResponsePayload := extractPayload[*models.BlockDigest](s.T(), actual)

s.Require().Equal(expectedResponse.Topic, actualResponse.Topic)
s.Require().Equal(expectedResponsePayload, actualResponsePayload)
Original file line number Diff line number Diff line change
@@ -6,7 +6,6 @@ import (
"testing"

"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"

commonmodels "github.com/onflow/flow-go/engine/access/rest/common/models"
@@ -114,17 +113,8 @@ func (s *BlockHeadersProviderSuite) validBlockHeadersArgumentsTestCases() []test

// requireBlockHeaders ensures that the received block header information matches the expected data.
func (s *BlockHeadersProviderSuite) requireBlockHeader(actual interface{}, expected interface{}) {
expectedResponse, ok := expected.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", expected)

expectedResponsePayload, ok := expectedResponse.Payload.(*commonmodels.BlockHeader)
require.True(s.T(), ok, "Unexpected response payload type: %T", expectedResponse.Payload)

actualResponse, ok := actual.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", actual)

actualResponsePayload, ok := actualResponse.Payload.(*commonmodels.BlockHeader)
require.True(s.T(), ok, "Unexpected response payload type: %T", actualResponse.Payload)
expectedResponse, expectedResponsePayload := extractPayload[*commonmodels.BlockHeader](s.T(), expected)
actualResponse, actualResponsePayload := extractPayload[*commonmodels.BlockHeader](s.T(), actual)

s.Require().Equal(expectedResponse.Topic, actualResponse.Topic)
s.Require().Equal(expectedResponsePayload, actualResponsePayload)
Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@ import (
"github.com/rs/zerolog"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"

accessmock "github.com/onflow/flow-go/access/mock"
@@ -183,17 +182,8 @@ func (s *BlocksProviderSuite) validBlockArgumentsTestCases() []testType {

// requireBlock ensures that the received block information matches the expected data.
func (s *BlocksProviderSuite) requireBlock(actual interface{}, expected interface{}) {
expectedResponse, ok := expected.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", expected)

expectedResponsePayload, ok := expectedResponse.Payload.(*commonmodels.Block)
require.True(s.T(), ok, "unexpected response payload type: %T", expectedResponse.Payload)

actualResponse, ok := actual.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", actual)

actualResponsePayload, ok := actualResponse.Payload.(*commonmodels.Block)
require.True(s.T(), ok, "unexpected response payload type: %T", actualResponse.Payload)
expectedResponse, expectedResponsePayload := extractPayload[*commonmodels.Block](s.T(), expected)
actualResponse, actualResponsePayload := extractPayload[*commonmodels.Block](s.T(), actual)

s.Require().Equal(expectedResponse.Topic, actualResponse.Topic)
s.Require().Equal(expectedResponsePayload, actualResponsePayload)
Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@ import (

"github.com/rs/zerolog"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"

"github.com/onflow/flow-go/engine/access/rest/websockets/models"
@@ -139,20 +138,12 @@ func (s *EventsProviderSuite) subscribeEventsDataProviderTestCases(backendRespon

// requireEvents ensures that the received event information matches the expected data.
func (s *EventsProviderSuite) requireEvents(actual interface{}, expected interface{}) {
expectedResponse, ok := expected.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", expected)
expectedResponse, expectedResponsePayload := extractPayload[*models.EventResponse](s.T(), expected)
actualResponse, actualResponsePayload := extractPayload[*models.EventResponse](s.T(), actual)

expectedResponsePayload, ok := expectedResponse.Payload.(*models.EventResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", expectedResponse.Payload)

actualResponse, ok := actual.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", actual)

actualResponsePayload, ok := actualResponse.Payload.(*models.EventResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", actualResponse.Payload)

s.Require().ElementsMatch(expectedResponsePayload.Events, actualResponsePayload.Events)
s.Require().Equal(expectedResponse.Topic, actualResponse.Topic)
s.Require().Equal(expectedResponsePayload.MessageIndex, actualResponsePayload.MessageIndex)
s.Require().ElementsMatch(expectedResponsePayload.Events, actualResponsePayload.Events)
}

// backendEventsResponses creates backend events responses based on the provided events.
Original file line number Diff line number Diff line change
@@ -111,17 +111,8 @@ func (s *SendTransactionStatusesProviderSuite) requireTransactionStatuses(
actual interface{},
expected interface{},
) {
expectedResponse, ok := expected.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", expected)

expectedResponsePayload, ok := expectedResponse.Payload.(*models.TransactionStatusesResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", expectedResponse.Payload)

actualResponse, ok := actual.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", actual)

actualResponsePayload, ok := actualResponse.Payload.(*models.TransactionStatusesResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", actualResponse.Payload)
expectedResponse, expectedResponsePayload := extractPayload[*models.TransactionStatusesResponse](s.T(), expected)
actualResponse, actualResponsePayload := extractPayload[*models.TransactionStatusesResponse](s.T(), actual)

require.Equal(s.T(), expectedResponse.Topic, actualResponse.Topic)
require.Equal(s.T(), expectedResponsePayload.TransactionResult.BlockId, actualResponsePayload.TransactionResult.BlockId)
Original file line number Diff line number Diff line change
@@ -147,17 +147,8 @@ func (s *TransactionStatusesProviderSuite) requireTransactionStatuses(
actual interface{},
expected interface{},
) {
expectedResponse, ok := expected.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", expected)

expectedResponsePayload, ok := expectedResponse.Payload.(*models.TransactionStatusesResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", expectedResponse.Payload)

actualResponse, ok := actual.(*models.BaseDataProvidersResponse)
require.True(s.T(), ok, "Expected *models.BaseDataProvidersResponse, got %T", actual)

actualResponsePayload, ok := actualResponse.Payload.(*models.TransactionStatusesResponse)
require.True(s.T(), ok, "Unexpected response payload type: %T", actualResponse.Payload)
expectedResponse, expectedResponsePayload := extractPayload[*models.TransactionStatusesResponse](s.T(), expected)
actualResponse, actualResponsePayload := extractPayload[*models.TransactionStatusesResponse](s.T(), actual)

require.Equal(s.T(), expectedResponse.Topic, actualResponse.Topic)
require.Equal(s.T(), expectedResponsePayload.TransactionResult.BlockId, actualResponsePayload.TransactionResult.BlockId)
11 changes: 11 additions & 0 deletions engine/access/rest/websockets/data_providers/unit_test.go
Original file line number Diff line number Diff line change
@@ -100,3 +100,14 @@ func testHappyPath(
})
}
}

// extractPayload extracts the BaseDataProvidersResponse and its typed Payload.
func extractPayload[T any](t *testing.T, v interface{}) (*models.BaseDataProvidersResponse, T) {
response, ok := v.(*models.BaseDataProvidersResponse)
require.True(t, ok, "Expected *models.BaseDataProvidersResponse, got %T", v)

payload, ok := response.Payload.(T)
require.True(t, ok, "Unexpected response payload type: %T", response.Payload)

return response, payload
}