diff --git a/broadcast/broadcast-client-mock/fixtures/fixtures.go b/broadcast/broadcast-client-mock/fixtures/fixtures.go index e140566..e1760b8 100644 --- a/broadcast/broadcast-client-mock/fixtures/fixtures.go +++ b/broadcast/broadcast-client-mock/fixtures/fixtures.go @@ -1,23 +1,25 @@ package fixtures +import "github.com/bitcoin-sv/go-broadcast-client/broadcast" + const ( - ProviderMain = "https://mocked_arc_api_url.com/arc" - ProviderSecondary = "https://secondary_mocked_arc_api_url.com/arc" - MaxScriptSizePolicy = 100000000 - MaxTxSigOpsCountPolicy = 4294967295 - MaxTxSizePolicy = 100000000 - MaxTxSizePolicySecondary = 220000000 - MiningFeeBytes = 1000 - SatoshisPerBytes = 1 - SatoshisPerBytesSecondary = 2 - Timestamp = "2023-09-05T17:03:49.537230128Z" - TimestampSecondary = "2023-09-05T17:05:29.736256927Z" - TxResponseStatus = 200 - TxResponseTitle = "OK" - TxStatus = "SEEN_ON_NETWORK" - TxBlockHash = "0000000000000000019a575e0ea4d9bbe251dd24c473a0d8407935973151f282" - TxBlockHashSecondary = "0000000000000000045c969f3acd5db37896aba95f91389f2d191496bf15584b" - TxBlockHeight = 800182 - TxBlockHeightSecondary = 799439 - TxExtraInfo = "" + ProviderMain = "https://mocked_arc_api_url.com/arc" + ProviderSecondary = "https://secondary_mocked_arc_api_url.com/arc" + MaxScriptSizePolicy int64 = 100000000 + MaxTxSigOpsCountPolicy int64 = 4294967295 + MaxTxSizePolicy int64 = 100000000 + MaxTxSizePolicySecondary int64 = 220000000 + MiningFeeBytes int64 = 1000 + SatoshisPerBytes int64 = 1 + SatoshisPerBytesSecondary int64 = 2 + Timestamp = "2023-09-05T17:03:49.537230128Z" + TimestampSecondary = "2023-09-05T17:05:29.736256927Z" + TxResponseStatus = 200 + TxResponseTitle = "OK" + TxStatus broadcast.TxStatus = "SEEN_ON_NETWORK" + TxBlockHash = "0000000000000000019a575e0ea4d9bbe251dd24c473a0d8407935973151f282" + TxBlockHashSecondary = "0000000000000000045c969f3acd5db37896aba95f91389f2d191496bf15584b" + TxBlockHeight int64 = 800182 + TxBlockHeightSecondary int64 = 799439 + TxExtraInfo = "" ) diff --git a/broadcast/broadcast-client-mock/mock_client_test.go b/broadcast/broadcast-client-mock/mock_client_test.go index 4ba820d..565b845 100644 --- a/broadcast/broadcast-client-mock/mock_client_test.go +++ b/broadcast/broadcast-client-mock/mock_client_test.go @@ -8,6 +8,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/bitcoin-sv/go-broadcast-client/broadcast" + "github.com/bitcoin-sv/go-broadcast-client/broadcast/broadcast-client-mock/fixtures" + "github.com/bitcoin-sv/go-broadcast-client/broadcast/internal/arc/mocks" ) func TestMockClientSuccess(t *testing.T) { @@ -16,6 +18,7 @@ func TestMockClientSuccess(t *testing.T) { broadcaster := Builder(). WithMockArc(MockSuccess). Build() + expectedResult := []*broadcast.PolicyQuoteResponse{mocks.Policy1, mocks.Policy2} // when result, err := broadcaster.GetPolicyQuote(context.Background()) @@ -23,6 +26,7 @@ func TestMockClientSuccess(t *testing.T) { // then assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, result, expectedResult) }) t.Run("Should successfully query for Fee Quote from mock Arc Client with Success Mock Type", func(t *testing.T) { @@ -30,6 +34,7 @@ func TestMockClientSuccess(t *testing.T) { broadcaster := Builder(). WithMockArc(MockSuccess). Build() + expectedResult := []*broadcast.FeeQuote{mocks.Fee1, mocks.Fee2} // when result, err := broadcaster.GetFeeQuote(context.Background()) @@ -37,6 +42,7 @@ func TestMockClientSuccess(t *testing.T) { // then assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, expectedResult, result) }) t.Run("Should successfully query for transaction from mock Arc Client with Success Mock Type", func(t *testing.T) { @@ -44,13 +50,18 @@ func TestMockClientSuccess(t *testing.T) { broadcaster := Builder(). WithMockArc(MockSuccess). Build() + testTxId := "test-txid" // when - result, err := broadcaster.QueryTransaction(context.Background(), "test-txid") + result, err := broadcaster.QueryTransaction(context.Background(), testTxId) // then assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, result.Miner, fixtures.ProviderMain) + assert.Equal(t, result.TxID, testTxId) + assert.Equal(t, result.BlockHash, fixtures.TxBlockHash) + assert.Equal(t, result.BlockHeight, fixtures.TxBlockHeight) }) t.Run("Should return successful submit transaction response from mock Arc Client with Success Mock Type", func(t *testing.T) { @@ -65,6 +76,12 @@ func TestMockClientSuccess(t *testing.T) { // then assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, result.Miner, fixtures.ProviderMain) + assert.Equal(t, result.BlockHash, fixtures.TxBlockHash) + assert.Equal(t, result.BlockHeight, fixtures.TxBlockHeight) + assert.Equal(t, result.TxStatus, fixtures.TxStatus) + assert.Equal(t, result.Status, fixtures.TxResponseStatus) + assert.Equal(t, result.Title, fixtures.TxResponseTitle) }) t.Run("Should return successful submit batch transactions response from mock Arc Client with Success Mock Type", func(t *testing.T) { @@ -72,6 +89,13 @@ func TestMockClientSuccess(t *testing.T) { broadcaster := Builder(). WithMockArc(MockSuccess). Build() + expectedResult := &broadcast.SubmitBatchTxResponse{ + BaseResponse: broadcast.BaseResponse{Miner: fixtures.ProviderMain}, + Transactions: []*broadcast.SubmittedTx{ + mocks.SubmittedTx, + mocks.SubmittedTxSecondary, + }, + } // when result, err := broadcaster.SubmitBatchTransactions(context.Background(), []*broadcast.Transaction{{RawTx: "test-rawtx"}, {RawTx: "test2-rawtx"}}) @@ -79,6 +103,7 @@ func TestMockClientSuccess(t *testing.T) { // then assert.NoError(t, err) assert.NotNil(t, result) + assert.Equal(t, expectedResult, result) }) } @@ -160,7 +185,7 @@ func TestMockClientFailure(t *testing.T) { } func TestMockClientTimeout(t *testing.T) { - const defaultTestTime = 200*time.Millisecond + const defaultTestTime = 200 * time.Millisecond t.Run("Should successfully query for Policy Quote after a timeout period from mock Arc Client with Timeout Mock Type", func(t *testing.T) { // given @@ -170,6 +195,7 @@ func TestMockClientTimeout(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), defaultTestTime) defer cancel() startTime := time.Now() + expectedResult := []*broadcast.PolicyQuoteResponse{mocks.Policy1, mocks.Policy2} // when result, err := broadcaster.GetPolicyQuote(ctx) @@ -178,6 +204,7 @@ func TestMockClientTimeout(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) assert.Greater(t, time.Since(startTime), defaultTestTime) + assert.Equal(t, expectedResult, result) }) t.Run("Should successfully query for Fee Quote after a timeout period from mock Arc Client with Timeout Mock Type", func(t *testing.T) { @@ -188,6 +215,7 @@ func TestMockClientTimeout(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), defaultTestTime) defer cancel() startTime := time.Now() + expectedResult := []*broadcast.FeeQuote{mocks.Fee1, mocks.Fee2} // when result, err := broadcaster.GetFeeQuote(ctx) @@ -196,6 +224,7 @@ func TestMockClientTimeout(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) assert.Greater(t, time.Since(startTime), defaultTestTime) + assert.Equal(t, expectedResult, result) }) t.Run("Should successfully query for transaction after a timeout period from mock Arc Client with Timeout Mock Type", func(t *testing.T) { @@ -206,14 +235,19 @@ func TestMockClientTimeout(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), defaultTestTime) defer cancel() startTime := time.Now() + testTxId := "test-txid" // when - result, err := broadcaster.QueryTransaction(ctx, "test-txid") + result, err := broadcaster.QueryTransaction(ctx, testTxId) // then assert.NoError(t, err) assert.NotNil(t, result) assert.Greater(t, time.Since(startTime), defaultTestTime) + assert.Equal(t, result.Miner, fixtures.ProviderMain) + assert.Equal(t, result.TxID, testTxId) + assert.Equal(t, result.BlockHash, fixtures.TxBlockHash) + assert.Equal(t, result.BlockHeight, fixtures.TxBlockHeight) }) t.Run("Should return successful submit transaction response after a timeout period from mock Arc Client with Timeout Mock Type", func(t *testing.T) { @@ -232,6 +266,12 @@ func TestMockClientTimeout(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) assert.Greater(t, time.Since(startTime), defaultTestTime) + assert.Equal(t, result.Miner, fixtures.ProviderMain) + assert.Equal(t, result.BlockHash, fixtures.TxBlockHash) + assert.Equal(t, result.BlockHeight, fixtures.TxBlockHeight) + assert.Equal(t, result.TxStatus, fixtures.TxStatus) + assert.Equal(t, result.Status, fixtures.TxResponseStatus) + assert.Equal(t, result.Title, fixtures.TxResponseTitle) }) t.Run("Should return successful submit batch transactions response after a timeout period from mock Arc Client with Timeout Mock Type", func(t *testing.T) { @@ -242,6 +282,13 @@ func TestMockClientTimeout(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), defaultTestTime) defer cancel() startTime := time.Now() + expectedResult := &broadcast.SubmitBatchTxResponse{ + BaseResponse: broadcast.BaseResponse{Miner: fixtures.ProviderMain}, + Transactions: []*broadcast.SubmittedTx{ + mocks.SubmittedTx, + mocks.SubmittedTxSecondary, + }, + } // when result, err := broadcaster.SubmitBatchTransactions(ctx, []*broadcast.Transaction{{RawTx: "test-rawtx"}, {RawTx: "test2-rawtx"}}) @@ -250,5 +297,6 @@ func TestMockClientTimeout(t *testing.T) { assert.NoError(t, err) assert.NotNil(t, result) assert.Greater(t, time.Since(startTime), defaultTestTime) + assert.Equal(t, expectedResult, result) }) } diff --git a/broadcast/internal/arc/mocks/arc_client_mock_success.go b/broadcast/internal/arc/mocks/arc_client_mock_success.go index 8455748..4c8fe1d 100644 --- a/broadcast/internal/arc/mocks/arc_client_mock_success.go +++ b/broadcast/internal/arc/mocks/arc_client_mock_success.go @@ -11,44 +11,32 @@ type ArcClientMock struct{} // GetFeeQuote returns a successful FeeQuote response. func (*ArcClientMock) GetFeeQuote(ctx context.Context) ([]*broadcast_api.FeeQuote, error) { - quote1 := &broadcast_api.FeeQuote{ - BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, - MiningFee: policy1.Policy.MiningFee, - Timestamp: policy1.Timestamp, - } - - quote2 := &broadcast_api.FeeQuote{ - BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderSecondary}, - MiningFee: policy2.Policy.MiningFee, - Timestamp: policy2.Timestamp, - } - - quotes := make([]*broadcast_api.FeeQuote, 2) - quotes = append(quotes, quote1) - quotes = append(quotes, quote2) + quotes := make([]*broadcast_api.FeeQuote, 0) + quotes = append(quotes, Fee1) + quotes = append(quotes, Fee2) return quotes, nil } // GetPolicyQuote return a successful PolicyQuoteResponse. func (*ArcClientMock) GetPolicyQuote(ctx context.Context) ([]*broadcast_api.PolicyQuoteResponse, error) { - policies := make([]*broadcast_api.PolicyQuoteResponse, 2) - policies = append(policies, policy1) - policies = append(policies, policy2) + policies := make([]*broadcast_api.PolicyQuoteResponse, 0) + policies = append(policies, Policy1) + policies = append(policies, Policy2) return policies, nil } // QueryTransaction returns a successful QueryTxResponse. func (*ArcClientMock) QueryTransaction(ctx context.Context, txID string) (*broadcast_api.QueryTxResponse, error) { - return queryTx(txID), nil + return QueryTx(txID), nil } // SubmitTransaction returns a successful SubmitTxResponse. func (*ArcClientMock) SubmitTransaction(ctx context.Context, tx *broadcast_api.Transaction, opts ...broadcast_api.TransactionOptFunc) (*broadcast_api.SubmitTxResponse, error) { return &broadcast_api.SubmitTxResponse{ BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, - SubmittedTx: submittedTx, + SubmittedTx: SubmittedTx, }, nil } @@ -57,8 +45,8 @@ func (*ArcClientMock) SubmitBatchTransactions(ctx context.Context, tx []*broadca return &broadcast_api.SubmitBatchTxResponse{ BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, Transactions: []*broadcast_api.SubmittedTx{ - submittedTx, - submittedTxSecondary, + SubmittedTx, + SubmittedTxSecondary, }, }, nil } diff --git a/broadcast/internal/arc/mocks/arc_client_mock_timeout.go b/broadcast/internal/arc/mocks/arc_client_mock_timeout.go index 1ea1316..3cd95da 100644 --- a/broadcast/internal/arc/mocks/arc_client_mock_timeout.go +++ b/broadcast/internal/arc/mocks/arc_client_mock_timeout.go @@ -16,21 +16,9 @@ func (*ArcClientMockTimeout) GetFeeQuote(ctx context.Context) ([]*broadcast_api. time.Sleep(time.Until(deadline) + 10*time.Millisecond) } - quote1 := &broadcast_api.FeeQuote{ - BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, - MiningFee: policy1.Policy.MiningFee, - Timestamp: policy1.Timestamp, - } - - quote2 := &broadcast_api.FeeQuote{ - BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderSecondary}, - MiningFee: policy2.Policy.MiningFee, - Timestamp: policy2.Timestamp, - } - - quotes := make([]*broadcast_api.FeeQuote, 2) - quotes = append(quotes, quote1) - quotes = append(quotes, quote2) + quotes := make([]*broadcast_api.FeeQuote, 0) + quotes = append(quotes, Fee1) + quotes = append(quotes, Fee2) return quotes, nil } @@ -41,9 +29,9 @@ func (*ArcClientMockTimeout) GetPolicyQuote(ctx context.Context) ([]*broadcast_a time.Sleep(time.Until(deadline) + 10*time.Millisecond) } - policies := make([]*broadcast_api.PolicyQuoteResponse, 2) - policies = append(policies, policy1) - policies = append(policies, policy2) + policies := make([]*broadcast_api.PolicyQuoteResponse, 0) + policies = append(policies, Policy1) + policies = append(policies, Policy2) return policies, nil } @@ -54,7 +42,7 @@ func (*ArcClientMockTimeout) QueryTransaction(ctx context.Context, txID string) time.Sleep(time.Until(deadline) + 10*time.Millisecond) } - return queryTx(txID), nil + return QueryTx(txID), nil } // SubmitTransaction returns a successful SubmitTxResponse. @@ -65,7 +53,7 @@ func (*ArcClientMockTimeout) SubmitTransaction(ctx context.Context, tx *broadcas return &broadcast_api.SubmitTxResponse{ BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, - SubmittedTx: submittedTx, + SubmittedTx: SubmittedTx, }, nil } @@ -78,8 +66,8 @@ func (*ArcClientMockTimeout) SubmitBatchTransactions(ctx context.Context, tx []* return &broadcast_api.SubmitBatchTxResponse{ BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, Transactions: []*broadcast_api.SubmittedTx{ - submittedTx, - submittedTxSecondary, + SubmittedTx, + SubmittedTxSecondary, }, }, nil } diff --git a/broadcast/internal/arc/mocks/consts.go b/broadcast/internal/arc/mocks/consts.go index ffb390a..dfe4a35 100644 --- a/broadcast/internal/arc/mocks/consts.go +++ b/broadcast/internal/arc/mocks/consts.go @@ -6,7 +6,7 @@ import ( ) var ( - policy1 = &broadcast_api.PolicyQuoteResponse{ + Policy1 = &broadcast_api.PolicyQuoteResponse{ BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, Policy: broadcast_api.PolicyResponse{ MaxScriptSizePolicy: fixtures.MaxScriptSizePolicy, @@ -20,7 +20,7 @@ var ( Timestamp: fixtures.Timestamp, } - policy2 = &broadcast_api.PolicyQuoteResponse{ + Policy2 = &broadcast_api.PolicyQuoteResponse{ BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderSecondary}, Policy: broadcast_api.PolicyResponse{ MaxScriptSizePolicy: fixtures.MaxScriptSizePolicy, @@ -34,7 +34,19 @@ var ( Timestamp: fixtures.TimestampSecondary, } - submittedTx = &broadcast_api.SubmittedTx{ + Fee1 = &broadcast_api.FeeQuote{ + BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, + MiningFee: Policy1.Policy.MiningFee, + Timestamp: Policy1.Timestamp, + } + + Fee2 = &broadcast_api.FeeQuote{ + BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderSecondary}, + MiningFee: Policy2.Policy.MiningFee, + Timestamp: Policy2.Timestamp, + } + + SubmittedTx = &broadcast_api.SubmittedTx{ Status: fixtures.TxResponseStatus, Title: fixtures.TxResponseTitle, TxStatus: fixtures.TxStatus, @@ -43,7 +55,7 @@ var ( ExtraInfo: fixtures.TxExtraInfo, } - submittedTxSecondary = &broadcast_api.SubmittedTx{ + SubmittedTxSecondary = &broadcast_api.SubmittedTx{ Status: fixtures.TxResponseStatus, Title: fixtures.TxResponseTitle, TxStatus: fixtures.TxStatus, @@ -53,7 +65,7 @@ var ( } ) -func queryTx(txID string) *broadcast_api.QueryTxResponse { +func QueryTx(txID string) *broadcast_api.QueryTxResponse { return &broadcast_api.QueryTxResponse{ BaseResponse: broadcast_api.BaseResponse{Miner: fixtures.ProviderMain}, Timestamp: fixtures.Timestamp,