Skip to content

Commit

Permalink
increase code coverage (#664)
Browse files Browse the repository at this point in the history
* increase coverage oracle module

* add oracle fuzz test

* exclude proto files from codecov

* add sort for fuzz test

* Chore/coverage (#673)

* update wasm querier test

* update legacy querier test

Co-authored-by: Geoff Lee <[email protected]>
  • Loading branch information
yun-yeo and Geoff Lee authored Apr 11, 2022
1 parent 13bb7ef commit 0abc3ac
Show file tree
Hide file tree
Showing 21 changed files with 837 additions and 110 deletions.
10 changes: 10 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,15 @@ ignore:
- "contrib/"
- "docs/"
- "networks/"
- "proto/"
- "scripts/"
- "thrid_party/"
- "docker/"
- "client/"
- "custom/"
- "**/cli"
- "**/rest"
- "**/*.pb.go"
- "**/*.pb.gw.go"
- "**/test_utils.go"
- "**/module.go"
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
Full-node software implementing the Terra protocol<br/><br/>

<a href="https://codecov.io/gh/terra-money/core">
<img src="https://codecov.io/gh/terra-money/core/branch/develop/graph/badge.svg">
<img src="https://codecov.io/gh/terra-money/core/branch/main/graph/badge.svg">
</a>
<a href="https://goreportcard.com/report/github.com/terra-money/core">
<img src="https://goreportcard.com/badge/github.com/terra-money/core">
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ require (
github.com/cosmos/ibc-go v1.1.5
github.com/gogo/protobuf v1.3.3
github.com/golang/protobuf v1.5.2
github.com/google/gofuzz v1.2.0
github.com/gorilla/mux v1.8.0
github.com/grpc-ecosystem/grpc-gateway v1.16.0
github.com/pkg/errors v0.9.1
Expand Down
3 changes: 2 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -358,8 +358,9 @@ github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64=
github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
Expand Down
2 changes: 1 addition & 1 deletion x/oracle/abci.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func EndBlocker(ctx sdk.Context, k keeper.Keeper) {
// NOTE: **Make abstain votes to have zero vote power**
voteMap := k.OrganizeBallotByDenom(ctx, validatorClaimMap)

if referenceTerra := pickReferenceTerra(ctx, k, voteTargets, voteMap); referenceTerra != "" {
if referenceTerra := PickReferenceTerra(ctx, k, voteTargets, voteMap); referenceTerra != "" {
// make voteMap of Reference Terra to calculate cross exchange rates
ballotRT := voteMap[referenceTerra]
voteMapRT := ballotRT.ToMap()
Expand Down
102 changes: 102 additions & 0 deletions x/oracle/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ func TestExportInitGenesis(t *testing.T) {
input.OracleKeeper.SetAggregateExchangeRateVote(input.Ctx, keeper.ValAddrs[0], types.NewAggregateExchangeRateVote(types.ExchangeRateTuples{{Denom: "foo", ExchangeRate: sdk.NewDec(123)}}, keeper.ValAddrs[0]))
input.OracleKeeper.SetTobinTax(input.Ctx, "denom", sdk.NewDecWithPrec(123, 3))
input.OracleKeeper.SetTobinTax(input.Ctx, "denom2", sdk.NewDecWithPrec(123, 3))
input.OracleKeeper.SetMissCounter(input.Ctx, keeper.ValAddrs[0], 10)
genesis := oracle.ExportGenesis(input.Ctx, input.OracleKeeper)

newInput := keeper.CreateTestInput(t)
Expand All @@ -29,3 +30,104 @@ func TestExportInitGenesis(t *testing.T) {

require.Equal(t, genesis, newGenesis)
}

func TestInitGenesis(t *testing.T) {
input, _ := setup(t)
genesis := types.DefaultGenesisState()
require.NotPanics(t, func() {
oracle.InitGenesis(input.Ctx, input.OracleKeeper, genesis)
})

genesis.FeederDelegations = []types.FeederDelegation{{
FeederAddress: keeper.Addrs[0].String(),
ValidatorAddress: "invalid",
}}

require.Panics(t, func() {
oracle.InitGenesis(input.Ctx, input.OracleKeeper, genesis)
})

genesis.FeederDelegations = []types.FeederDelegation{{
FeederAddress: "invalid",
ValidatorAddress: keeper.ValAddrs[0].String(),
}}

require.Panics(t, func() {
oracle.InitGenesis(input.Ctx, input.OracleKeeper, genesis)
})

genesis.FeederDelegations = []types.FeederDelegation{{
FeederAddress: keeper.Addrs[0].String(),
ValidatorAddress: keeper.ValAddrs[0].String(),
}}

genesis.MissCounters = []types.MissCounter{
{
ValidatorAddress: "invalid",
MissCounter: 10,
},
}

require.Panics(t, func() {
oracle.InitGenesis(input.Ctx, input.OracleKeeper, genesis)
})

genesis.MissCounters = []types.MissCounter{
{
ValidatorAddress: keeper.ValAddrs[0].String(),
MissCounter: 10,
},
}

genesis.AggregateExchangeRatePrevotes = []types.AggregateExchangeRatePrevote{
{
Hash: "hash",
Voter: "invalid",
SubmitBlock: 100,
},
}

require.Panics(t, func() {
oracle.InitGenesis(input.Ctx, input.OracleKeeper, genesis)
})

genesis.AggregateExchangeRatePrevotes = []types.AggregateExchangeRatePrevote{
{
Hash: "hash",
Voter: keeper.ValAddrs[0].String(),
SubmitBlock: 100,
},
}

genesis.AggregateExchangeRateVotes = []types.AggregateExchangeRateVote{
{
ExchangeRateTuples: []types.ExchangeRateTuple{
{
Denom: "ukrw",
ExchangeRate: sdk.NewDec(10),
},
},
Voter: "invalid",
},
}

require.Panics(t, func() {
oracle.InitGenesis(input.Ctx, input.OracleKeeper, genesis)
})

genesis.AggregateExchangeRateVotes = []types.AggregateExchangeRateVote{
{
ExchangeRateTuples: []types.ExchangeRateTuple{
{
Denom: "ukrw",
ExchangeRate: sdk.NewDec(10),
},
},
Voter: keeper.ValAddrs[0].String(),
},
}

require.NotPanics(t, func() {
oracle.InitGenesis(input.Ctx, input.OracleKeeper, genesis)
})
}
82 changes: 58 additions & 24 deletions x/oracle/keeper/legacy_querier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,20 @@ func TestLegacyNewLegacyQuerier(t *testing.T) {
require.NoError(t, err)
}

func TestLegacyFilter(t *testing.T) {
input := CreateTestInput(t)

querier := NewLegacyQuerier(input.OracleKeeper, input.Cdc)

query := abci.RequestQuery{
Path: "",
Data: []byte{},
}

_, err := querier(input.Ctx, []string{"invalid"}, query)
require.Error(t, err)
}

func TestLegacyQueryParams(t *testing.T) {
input := CreateTestInput(t)
querier := NewLegacyQuerier(input.OracleKeeper, input.Cdc)
Expand All @@ -46,6 +60,31 @@ func TestLegacyQueryParams(t *testing.T) {
require.Equal(t, input.OracleKeeper.GetParams(input.Ctx), params)
}

func TestLegacyQueryMissCounter(t *testing.T) {
input := CreateTestInput(t)
querier := NewLegacyQuerier(input.OracleKeeper, input.Cdc)

queryParams := types.NewQueryMissCounterParams(ValAddrs[0])
bz, err := input.Cdc.MarshalJSON(queryParams)
require.NoError(t, err)

_, err = querier(input.Ctx, []string{types.QueryMissCounter}, abci.RequestQuery{})
require.Error(t, err)

req := abci.RequestQuery{
Path: "",
Data: bz,
}

res, err := querier(input.Ctx, []string{types.QueryMissCounter}, req)
require.NoError(t, err)

var missCounter uint64
err = input.Cdc.UnmarshalJSON(res, &missCounter)
require.NoError(t, err)
require.Equal(t, input.OracleKeeper.GetMissCounter(input.Ctx, ValAddrs[0]), missCounter)
}

func TestLegacyQueryExchangeRate(t *testing.T) {
input := CreateTestInput(t)
querier := NewLegacyQuerier(input.OracleKeeper, input.Cdc)
Expand All @@ -58,6 +97,9 @@ func TestLegacyQueryExchangeRate(t *testing.T) {
bz, err := input.Cdc.MarshalJSON(queryParams)
require.NoError(t, err)

_, err = querier(input.Ctx, []string{types.QueryExchangeRate}, abci.RequestQuery{})
require.Error(t, err)

req := abci.RequestQuery{
Path: "",
Data: bz,
Expand Down Expand Up @@ -126,6 +168,9 @@ func TestLegacyQueryFeederDelegation(t *testing.T) {
bz, err := input.Cdc.MarshalJSON(queryParams)
require.NoError(t, err)

_, err = querier(input.Ctx, []string{types.QueryFeederDelegation}, abci.RequestQuery{})
require.Error(t, err)

req := abci.RequestQuery{
Path: "",
Data: bz,
Expand Down Expand Up @@ -155,6 +200,9 @@ func TestLegacyQueryAggregatePrevote(t *testing.T) {
bz, err := input.Cdc.MarshalJSON(queryParams)
require.NoError(t, err)

_, err = querier(input.Ctx, []string{types.QueryAggregatePrevote}, abci.RequestQuery{})
require.Error(t, err)

req := abci.RequestQuery{
Path: "",
Data: bz,
Expand Down Expand Up @@ -204,12 +252,7 @@ func TestLegacyQueryAggregatePrevotes(t *testing.T) {
return bytes.Compare(addr1, addr2) == -1
})

req := abci.RequestQuery{
Path: "",
Data: nil,
}

res, err := querier(input.Ctx, []string{types.QueryAggregatePrevotes}, req)
res, err := querier(input.Ctx, []string{types.QueryAggregatePrevotes}, abci.RequestQuery{})
require.NoError(t, err)

var prevotes []types.AggregateExchangeRatePrevote
Expand All @@ -234,6 +277,9 @@ func TestLegacyQueryAggregateVote(t *testing.T) {
bz, err := input.Cdc.MarshalJSON(queryParams)
require.NoError(t, err)

_, err = querier(input.Ctx, []string{types.QueryAggregateVote}, abci.RequestQuery{})
require.Error(t, err)

req := abci.RequestQuery{
Path: "",
Data: bz,
Expand Down Expand Up @@ -283,12 +329,7 @@ func TestLegacyQueryAggregateVotes(t *testing.T) {
return bytes.Compare(addr1, addr2) == -1
})

req := abci.RequestQuery{
Path: "",
Data: nil,
}

res, err := querier(input.Ctx, []string{types.QueryAggregateVotes}, req)
res, err := querier(input.Ctx, []string{types.QueryAggregateVotes}, abci.RequestQuery{})
require.NoError(t, err)

var votes []types.AggregateExchangeRateVote
Expand All @@ -309,12 +350,7 @@ func TestLegacyQueryVoteTargets(t *testing.T) {
input.OracleKeeper.SetTobinTax(input.Ctx, target, sdk.OneDec())
}

req := abci.RequestQuery{
Path: "",
Data: nil,
}

res, err := querier(input.Ctx, []string{types.QueryVoteTargets}, req)
res, err := querier(input.Ctx, []string{types.QueryVoteTargets}, abci.RequestQuery{})
require.NoError(t, err)

var voteTargetsRes []string
Expand All @@ -341,12 +377,7 @@ func TestLegacyQueryTobinTaxes(t *testing.T) {
input.OracleKeeper.SetTobinTax(input.Ctx, item.Name, item.TobinTax)
}

req := abci.RequestQuery{
Path: "",
Data: nil,
}

res, err := querier(input.Ctx, []string{types.QueryTobinTaxes}, req)
res, err := querier(input.Ctx, []string{types.QueryTobinTaxes}, abci.RequestQuery{})
require.NoError(t, err)

var tobinTaxesRes types.DenomList
Expand All @@ -366,6 +397,9 @@ func TestLegacyQueryTobinTax(t *testing.T) {
bz, err := input.Cdc.MarshalJSON(queryParams)
require.NoError(t, err)

_, err = querier(input.Ctx, []string{types.QueryTobinTax}, abci.RequestQuery{})
require.Error(t, err)

req := abci.RequestQuery{
Path: "",
Data: bz,
Expand Down
Loading

0 comments on commit 0abc3ac

Please sign in to comment.