Skip to content
This repository has been archived by the owner on Oct 21, 2024. It is now read-only.

Commit

Permalink
refactor(BUX-222): refactor and small improvements to Arc mock
Browse files Browse the repository at this point in the history
  • Loading branch information
kuba-4chain committed Sep 26, 2023
1 parent 8698b6a commit 9c29d20
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 71 deletions.
40 changes: 21 additions & 19 deletions broadcast/broadcast-client-mock/fixtures/fixtures.go
Original file line number Diff line number Diff line change
@@ -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 = ""
)
54 changes: 51 additions & 3 deletions broadcast/broadcast-client-mock/mock_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -16,41 +18,50 @@ func TestMockClientSuccess(t *testing.T) {
broadcaster := Builder().
WithMockArc(MockSuccess).
Build()
expectedResult := []*broadcast.PolicyQuoteResponse{mocks.Policy1, mocks.Policy2}

// when
result, err := broadcaster.GetPolicyQuote(context.Background())

// 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) {
// given
broadcaster := Builder().
WithMockArc(MockSuccess).
Build()
expectedResult := []*broadcast.FeeQuote{mocks.Fee1, mocks.Fee2}

// when
result, err := broadcaster.GetFeeQuote(context.Background())

// 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) {
// given
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) {
Expand All @@ -65,20 +76,34 @@ 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) {
// given
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"}})

// then
assert.NoError(t, err)
assert.NotNil(t, result)
assert.Equal(t, expectedResult, result)
})
}

Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -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) {
Expand All @@ -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)
Expand All @@ -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) {
Expand All @@ -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) {
Expand All @@ -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) {
Expand All @@ -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"}})
Expand All @@ -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)
})
}
32 changes: 10 additions & 22 deletions broadcast/internal/arc/mocks/arc_client_mock_success.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand All @@ -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
}
Expand Down
32 changes: 10 additions & 22 deletions broadcast/internal/arc/mocks/arc_client_mock_timeout.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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
}
Expand All @@ -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.
Expand All @@ -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
}

Expand All @@ -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
}
Expand Down
Loading

0 comments on commit 9c29d20

Please sign in to comment.