github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/staking/keeper/querier_test.go (about) 1 package keeper 2 3 import ( 4 "fmt" 5 "testing" 6 7 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 8 "github.com/stretchr/testify/require" 9 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 11 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/staking/types" 13 ) 14 15 var ( 16 addrAcc1, addrAcc2 = Addrs[0], Addrs[1] 17 addrVal1, addrVal2 = sdk.ValAddress(Addrs[0]), sdk.ValAddress(Addrs[1]) 18 pk1, pk2 = PKs[0], PKs[1] 19 ) 20 21 func TestNewQuerier(t *testing.T) { 22 cdc := codec.New() 23 ctx, _, keeper, _ := CreateTestInput(t, false, 1000) 24 // Create Validators 25 amts := []sdk.Int{sdk.NewInt(9), sdk.NewInt(8)} 26 var validators [2]types.Validator 27 for i, amt := range amts { 28 validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) 29 validators[i], _ = validators[i].AddTokensFromDel(amt) 30 keeper.SetValidator(ctx, validators[i]) 31 keeper.SetValidatorByPowerIndex(ctx, validators[i]) 32 } 33 34 header := abci.Header{ 35 ChainID: "HelloChain", 36 Height: 5, 37 } 38 hi := types.NewHistoricalInfo(header, validators[:]) 39 keeper.SetHistoricalInfo(ctx, 5, hi) 40 41 query := abci.RequestQuery{ 42 Path: "", 43 Data: []byte{}, 44 } 45 46 querier := NewQuerier(keeper) 47 48 bz, err := querier(ctx, []string{"other"}, query) 49 require.Error(t, err) 50 require.Nil(t, bz) 51 52 _, err = querier(ctx, []string{"pool"}, query) 53 require.NoError(t, err) 54 55 _, err = querier(ctx, []string{"parameters"}, query) 56 require.NoError(t, err) 57 58 queryValParams := types.NewQueryValidatorParams(addrVal1) 59 bz, errRes := cdc.MarshalJSON(queryValParams) 60 require.NoError(t, errRes) 61 62 query.Path = "/custom/staking/validator" 63 query.Data = bz 64 65 _, err = querier(ctx, []string{"validator"}, query) 66 require.NoError(t, err) 67 68 _, err = querier(ctx, []string{"validatorDelegations"}, query) 69 require.NoError(t, err) 70 71 _, err = querier(ctx, []string{"validatorUnbondingDelegations"}, query) 72 require.NoError(t, err) 73 74 queryDelParams := types.NewQueryDelegatorParams(addrAcc2) 75 bz, errRes = cdc.MarshalJSON(queryDelParams) 76 require.NoError(t, errRes) 77 78 query.Path = "/custom/staking/validator" 79 query.Data = bz 80 81 _, err = querier(ctx, []string{"delegatorDelegations"}, query) 82 require.NoError(t, err) 83 84 _, err = querier(ctx, []string{"delegatorUnbondingDelegations"}, query) 85 require.NoError(t, err) 86 87 _, err = querier(ctx, []string{"delegatorValidators"}, query) 88 require.NoError(t, err) 89 90 bz, errRes = cdc.MarshalJSON(types.NewQueryRedelegationParams(nil, nil, nil)) 91 require.NoError(t, errRes) 92 query.Data = bz 93 94 _, err = querier(ctx, []string{"redelegations"}, query) 95 require.NoError(t, err) 96 97 queryHisParams := types.NewQueryHistoricalInfoParams(5) 98 bz, errRes = cdc.MarshalJSON(queryHisParams) 99 require.NoError(t, errRes) 100 101 query.Path = "/custom/staking/historicalInfo" 102 query.Data = bz 103 104 _, err = querier(ctx, []string{"historicalInfo"}, query) 105 require.NoError(t, err) 106 } 107 108 func TestQueryParametersPool(t *testing.T) { 109 cdc := codec.New() 110 ctx, _, keeper, _ := CreateTestInput(t, false, 1000) 111 bondDenom := sdk.DefaultBondDenom 112 113 res, err := queryParameters(ctx, keeper) 114 require.NoError(t, err) 115 116 var params types.Params 117 errRes := cdc.UnmarshalJSON(res, ¶ms) 118 require.NoError(t, errRes) 119 require.Equal(t, keeper.GetParams(ctx), params) 120 121 res, err = queryPool(ctx, keeper) 122 require.NoError(t, err) 123 124 var pool types.Pool 125 bondedPool := keeper.GetBondedPool(ctx) 126 notBondedPool := keeper.GetNotBondedPool(ctx) 127 errRes = cdc.UnmarshalJSON(res, &pool) 128 require.NoError(t, errRes) 129 require.Equal(t, bondedPool.GetCoins().AmountOf(bondDenom), pool.BondedTokens.ToDec()) 130 require.Equal(t, notBondedPool.GetCoins().AmountOf(bondDenom), pool.NotBondedTokens.ToDec()) 131 } 132 133 func TestQueryValidators(t *testing.T) { 134 cdc := codec.New() 135 ctx, _, keeper, _ := CreateTestInput(t, false, 10000) 136 params := keeper.GetParams(ctx) 137 138 // Create Validators 139 amts := []sdk.Int{sdk.NewInt(9), sdk.NewInt(8), sdk.NewInt(7)} 140 status := []sdk.BondStatus{sdk.Bonded, sdk.Unbonded, sdk.Unbonding} 141 var validators [3]types.Validator 142 for i, amt := range amts { 143 validators[i] = types.NewValidator(sdk.ValAddress(Addrs[i]), PKs[i], types.Description{}) 144 validators[i], _ = validators[i].AddTokensFromDel(amt) 145 validators[i] = validators[i].UpdateStatus(status[i]) 146 } 147 148 keeper.SetValidator(ctx, validators[0]) 149 keeper.SetValidator(ctx, validators[1]) 150 keeper.SetValidator(ctx, validators[2]) 151 152 // Query Validators 153 queriedValidators := keeper.GetValidators(ctx, params.MaxValidators) 154 155 for i, s := range status { 156 queryValsParams := types.NewQueryValidatorsParams(1, int(params.MaxValidators), s.String()) 157 bz, err := cdc.MarshalJSON(queryValsParams) 158 require.NoError(t, err) 159 160 req := abci.RequestQuery{ 161 Path: fmt.Sprintf("/custom/%s/%s", types.QuerierRoute, types.QueryValidators), 162 Data: bz, 163 } 164 165 res, err := queryValidators(ctx, req, keeper) 166 require.NoError(t, err) 167 168 var validatorsResp []types.Validator 169 err = cdc.UnmarshalJSON(res, &validatorsResp) 170 require.NoError(t, err) 171 172 require.Equal(t, 1, len(validatorsResp)) 173 require.ElementsMatch(t, validators[i].OperatorAddress, validatorsResp[0].OperatorAddress) 174 175 } 176 177 // Query each validator 178 queryParams := types.NewQueryValidatorParams(addrVal1) 179 bz, err := cdc.MarshalJSON(queryParams) 180 require.NoError(t, err) 181 182 query := abci.RequestQuery{ 183 Path: "/custom/staking/validator", 184 Data: bz, 185 } 186 res, err := queryValidator(ctx, query, keeper) 187 require.NoError(t, err) 188 189 var validator types.Validator 190 err = cdc.UnmarshalJSON(res, &validator) 191 require.NoError(t, err) 192 193 require.Equal(t, queriedValidators[0], validator) 194 } 195 196 func TestQueryDelegation(t *testing.T) { 197 cdc := codec.New() 198 ctx, _, keeper, _ := CreateTestInput(t, false, 10000) 199 params := keeper.GetParams(ctx) 200 201 // Create Validators and Delegation 202 val1 := types.NewValidator(addrVal1, pk1, types.Description{}) 203 keeper.SetValidator(ctx, val1) 204 keeper.SetValidatorByPowerIndex(ctx, val1) 205 206 val2 := types.NewValidator(addrVal2, pk2, types.Description{}) 207 keeper.SetValidator(ctx, val2) 208 keeper.SetValidatorByPowerIndex(ctx, val2) 209 210 delTokens := sdk.TokensFromConsensusPower(20) 211 keeper.Delegate(ctx, addrAcc2, delTokens.ToDec(), sdk.Unbonded, val1, true) 212 213 // apply TM updates 214 keeper.ApplyAndReturnValidatorSetUpdates(ctx) 215 216 // Query Delegator bonded validators 217 queryParams := types.NewQueryDelegatorParams(addrAcc2) 218 bz, errRes := cdc.MarshalJSON(queryParams) 219 require.NoError(t, errRes) 220 221 query := abci.RequestQuery{ 222 Path: "/custom/staking/delegatorValidators", 223 Data: bz, 224 } 225 226 delValidators := keeper.GetDelegatorValidators(ctx, addrAcc2, params.MaxValidators) 227 228 res, err := queryDelegatorValidators(ctx, query, keeper) 229 require.NoError(t, err) 230 231 var validatorsResp []types.Validator 232 errRes = cdc.UnmarshalJSON(res, &validatorsResp) 233 require.NoError(t, errRes) 234 235 require.Equal(t, len(delValidators), len(validatorsResp)) 236 require.ElementsMatch(t, delValidators, validatorsResp) 237 238 // error unknown request 239 query.Data = bz[:len(bz)-1] 240 241 _, err = queryDelegatorValidators(ctx, query, keeper) 242 require.Error(t, err) 243 244 // Query bonded validator 245 queryBondParams := types.NewQueryBondsParams(addrAcc2, addrVal1) 246 bz, errRes = cdc.MarshalJSON(queryBondParams) 247 require.NoError(t, errRes) 248 249 query = abci.RequestQuery{ 250 Path: "/custom/staking/delegatorValidator", 251 Data: bz, 252 } 253 254 res, err = queryDelegatorValidator(ctx, query, keeper) 255 require.NoError(t, err) 256 257 var validator types.Validator 258 errRes = cdc.UnmarshalJSON(res, &validator) 259 require.NoError(t, errRes) 260 261 require.Equal(t, delValidators[0], validator) 262 263 // error unknown request 264 query.Data = bz[:len(bz)-1] 265 266 _, err = queryDelegatorValidator(ctx, query, keeper) 267 require.Error(t, err) 268 269 // Query delegation 270 271 query = abci.RequestQuery{ 272 Path: "/custom/staking/delegation", 273 Data: bz, 274 } 275 276 delegation, found := keeper.GetDelegation(ctx, addrAcc2, addrVal1) 277 require.True(t, found) 278 279 res, err = queryDelegation(ctx, query, keeper) 280 require.NoError(t, err) 281 282 var delegationRes types.DelegationResponse 283 errRes = cdc.UnmarshalJSON(res, &delegationRes) 284 require.NoError(t, errRes) 285 286 require.Equal(t, delegation.ValidatorAddress, delegationRes.ValidatorAddress) 287 require.Equal(t, delegation.DelegatorAddress, delegationRes.DelegatorAddress) 288 require.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, delegation.Shares.TruncateInt()), delegationRes.Balance) 289 290 // Query Delegator Delegations 291 query = abci.RequestQuery{ 292 Path: "/custom/staking/delegatorDelegations", 293 Data: bz, 294 } 295 296 res, err = queryDelegatorDelegations(ctx, query, keeper) 297 require.NoError(t, err) 298 299 var delegatorDelegations types.DelegationResponses 300 errRes = cdc.UnmarshalJSON(res, &delegatorDelegations) 301 require.NoError(t, errRes) 302 require.Len(t, delegatorDelegations, 1) 303 require.Equal(t, delegation.ValidatorAddress, delegatorDelegations[0].ValidatorAddress) 304 require.Equal(t, delegation.DelegatorAddress, delegatorDelegations[0].DelegatorAddress) 305 require.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, delegation.Shares.TruncateInt()), delegatorDelegations[0].Balance) 306 307 // error unknown request 308 query.Data = bz[:len(bz)-1] 309 310 _, err = queryDelegation(ctx, query, keeper) 311 require.Error(t, err) 312 313 // Query validator delegations 314 315 bz, errRes = cdc.MarshalJSON(types.NewQueryValidatorParams(addrVal1)) 316 require.NoError(t, errRes) 317 318 query = abci.RequestQuery{ 319 Path: "custom/staking/validatorDelegations", 320 Data: bz, 321 } 322 323 res, err = queryValidatorDelegations(ctx, query, keeper) 324 require.NoError(t, err) 325 326 var delegationsRes types.DelegationResponses 327 errRes = cdc.UnmarshalJSON(res, &delegationsRes) 328 require.NoError(t, errRes) 329 require.Len(t, delegatorDelegations, 1) 330 require.Equal(t, delegation.ValidatorAddress, delegationsRes[0].ValidatorAddress) 331 require.Equal(t, delegation.DelegatorAddress, delegationsRes[0].DelegatorAddress) 332 require.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, delegation.Shares.TruncateInt()), delegationsRes[0].Balance) 333 334 // Query unbonging delegation 335 unbondingTokens := sdk.TokensFromConsensusPower(10) 336 _, err = keeper.Undelegate(ctx, addrAcc2, val1.OperatorAddress, unbondingTokens.ToDec()) 337 require.NoError(t, err) 338 339 queryBondParams = types.NewQueryBondsParams(addrAcc2, addrVal1) 340 bz, errRes = cdc.MarshalJSON(queryBondParams) 341 require.NoError(t, errRes) 342 343 query = abci.RequestQuery{ 344 Path: "/custom/staking/unbondingDelegation", 345 Data: bz, 346 } 347 348 unbond, found := keeper.GetUnbondingDelegation(ctx, addrAcc2, addrVal1) 349 require.True(t, found) 350 351 res, err = queryUnbondingDelegation(ctx, query, keeper) 352 require.NoError(t, err) 353 354 var unbondRes types.UnbondingDelegation 355 errRes = cdc.UnmarshalJSON(res, &unbondRes) 356 require.NoError(t, errRes) 357 358 require.Equal(t, unbond, unbondRes) 359 360 // error unknown request 361 query.Data = bz[:len(bz)-1] 362 363 _, err = queryUnbondingDelegation(ctx, query, keeper) 364 require.Error(t, err) 365 366 // Query Delegator Delegations 367 368 query = abci.RequestQuery{ 369 Path: "/custom/staking/delegatorUnbondingDelegations", 370 Data: bz, 371 } 372 373 res, err = queryDelegatorUnbondingDelegations(ctx, query, keeper) 374 require.NoError(t, err) 375 376 var delegatorUbds []types.UnbondingDelegation 377 errRes = cdc.UnmarshalJSON(res, &delegatorUbds) 378 require.NoError(t, errRes) 379 require.Equal(t, unbond, delegatorUbds[0]) 380 381 // error unknown request 382 query.Data = bz[:len(bz)-1] 383 384 _, err = queryDelegatorUnbondingDelegations(ctx, query, keeper) 385 require.Error(t, err) 386 387 // Query redelegation 388 redelegationTokens := sdk.TokensFromConsensusPower(10) 389 _, err = keeper.BeginRedelegation(ctx, addrAcc2, val1.OperatorAddress, 390 val2.OperatorAddress, redelegationTokens.ToDec()) 391 require.NoError(t, err) 392 redel, found := keeper.GetRedelegation(ctx, addrAcc2, val1.OperatorAddress, val2.OperatorAddress) 393 require.True(t, found) 394 395 bz, errRes = cdc.MarshalJSON(types.NewQueryRedelegationParams(addrAcc2, val1.OperatorAddress, val2.OperatorAddress)) 396 require.NoError(t, errRes) 397 398 query = abci.RequestQuery{ 399 Path: "/custom/staking/redelegations", 400 Data: bz, 401 } 402 403 res, err = queryRedelegations(ctx, query, keeper) 404 require.NoError(t, err) 405 406 var redelRes types.RedelegationResponses 407 errRes = cdc.UnmarshalJSON(res, &redelRes) 408 require.NoError(t, errRes) 409 require.Len(t, redelRes, 1) 410 require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress) 411 require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress) 412 require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress) 413 require.Len(t, redel.Entries, len(redelRes[0].Entries)) 414 } 415 416 func TestQueryRedelegations(t *testing.T) { 417 cdc := codec.New() 418 ctx, _, keeper, _ := CreateTestInput(t, false, 10000) 419 420 // Create Validators and Delegation 421 val1 := types.NewValidator(addrVal1, pk1, types.Description{}) 422 val2 := types.NewValidator(addrVal2, pk2, types.Description{}) 423 keeper.SetValidator(ctx, val1) 424 keeper.SetValidator(ctx, val2) 425 426 delAmount := sdk.TokensFromConsensusPower(100) 427 keeper.Delegate(ctx, addrAcc2, delAmount.ToDec(), sdk.Unbonded, val1, true) 428 _ = keeper.ApplyAndReturnValidatorSetUpdates(ctx) 429 430 rdAmount := sdk.TokensFromConsensusPower(20) 431 keeper.BeginRedelegation(ctx, addrAcc2, val1.GetOperator(), val2.GetOperator(), rdAmount.ToDec()) 432 keeper.ApplyAndReturnValidatorSetUpdates(ctx) 433 434 redel, found := keeper.GetRedelegation(ctx, addrAcc2, val1.OperatorAddress, val2.OperatorAddress) 435 require.True(t, found) 436 437 // delegator redelegations 438 queryDelegatorParams := types.NewQueryDelegatorParams(addrAcc2) 439 bz, errRes := cdc.MarshalJSON(queryDelegatorParams) 440 require.NoError(t, errRes) 441 442 query := abci.RequestQuery{ 443 Path: "/custom/staking/redelegations", 444 Data: bz, 445 } 446 447 res, err := queryRedelegations(ctx, query, keeper) 448 require.NoError(t, err) 449 450 var redelRes types.RedelegationResponses 451 errRes = cdc.UnmarshalJSON(res, &redelRes) 452 require.NoError(t, errRes) 453 require.Len(t, redelRes, 1) 454 require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress) 455 require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress) 456 require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress) 457 require.Len(t, redel.Entries, len(redelRes[0].Entries)) 458 459 // validator redelegations 460 queryValidatorParams := types.NewQueryValidatorParams(val1.GetOperator()) 461 bz, errRes = cdc.MarshalJSON(queryValidatorParams) 462 require.NoError(t, errRes) 463 464 query = abci.RequestQuery{ 465 Path: "/custom/staking/redelegations", 466 Data: bz, 467 } 468 469 res, err = queryRedelegations(ctx, query, keeper) 470 require.NoError(t, err) 471 472 errRes = cdc.UnmarshalJSON(res, &redelRes) 473 require.NoError(t, errRes) 474 require.Len(t, redelRes, 1) 475 require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress) 476 require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress) 477 require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress) 478 require.Len(t, redel.Entries, len(redelRes[0].Entries)) 479 } 480 481 func TestQueryUnbondingDelegation(t *testing.T) { 482 cdc := codec.New() 483 ctx, _, keeper, _ := CreateTestInput(t, false, 10000) 484 485 // Create Validators and Delegation 486 val1 := types.NewValidator(addrVal1, pk1, types.Description{}) 487 keeper.SetValidator(ctx, val1) 488 489 // delegate 490 delAmount := sdk.TokensFromConsensusPower(100) 491 _, err := keeper.Delegate(ctx, addrAcc1, delAmount.ToDec(), sdk.Unbonded, val1, true) 492 require.NoError(t, err) 493 _ = keeper.ApplyAndReturnValidatorSetUpdates(ctx) 494 495 // undelegate 496 undelAmount := sdk.TokensFromConsensusPower(20) 497 _, err = keeper.Undelegate(ctx, addrAcc1, val1.GetOperator(), undelAmount.ToDec()) 498 require.NoError(t, err) 499 keeper.ApplyAndReturnValidatorSetUpdates(ctx) 500 501 _, found := keeper.GetUnbondingDelegation(ctx, addrAcc1, val1.OperatorAddress) 502 require.True(t, found) 503 504 // 505 // found: query unbonding delegation by delegator and validator 506 // 507 queryValidatorParams := types.NewQueryBondsParams(addrAcc1, val1.GetOperator()) 508 bz, errRes := cdc.MarshalJSON(queryValidatorParams) 509 require.NoError(t, errRes) 510 query := abci.RequestQuery{ 511 Path: "/custom/staking/unbondingDelegation", 512 Data: bz, 513 } 514 res, err := queryUnbondingDelegation(ctx, query, keeper) 515 require.NoError(t, err) 516 require.NotNil(t, res) 517 var ubDel types.UnbondingDelegation 518 require.NoError(t, cdc.UnmarshalJSON(res, &ubDel)) 519 require.Equal(t, addrAcc1, ubDel.DelegatorAddress) 520 require.Equal(t, val1.OperatorAddress, ubDel.ValidatorAddress) 521 require.Equal(t, 1, len(ubDel.Entries)) 522 523 // 524 // not found: query unbonding delegation by delegator and validator 525 // 526 queryValidatorParams = types.NewQueryBondsParams(addrAcc2, val1.GetOperator()) 527 bz, errRes = cdc.MarshalJSON(queryValidatorParams) 528 require.NoError(t, errRes) 529 query = abci.RequestQuery{ 530 Path: "/custom/staking/unbondingDelegation", 531 Data: bz, 532 } 533 _, err = queryUnbondingDelegation(ctx, query, keeper) 534 require.Error(t, err) 535 536 // 537 // found: query unbonding delegation by delegator and validator 538 // 539 queryDelegatorParams := types.NewQueryDelegatorParams(addrAcc1) 540 bz, errRes = cdc.MarshalJSON(queryDelegatorParams) 541 require.NoError(t, errRes) 542 query = abci.RequestQuery{ 543 Path: "/custom/staking/delegatorUnbondingDelegations", 544 Data: bz, 545 } 546 res, err = queryDelegatorUnbondingDelegations(ctx, query, keeper) 547 require.NoError(t, err) 548 require.NotNil(t, res) 549 var ubDels []types.UnbondingDelegation 550 require.NoError(t, cdc.UnmarshalJSON(res, &ubDels)) 551 require.Equal(t, 1, len(ubDels)) 552 require.Equal(t, addrAcc1, ubDels[0].DelegatorAddress) 553 require.Equal(t, val1.OperatorAddress, ubDels[0].ValidatorAddress) 554 555 // 556 // not found: query unbonding delegation by delegator and validator 557 // 558 queryDelegatorParams = types.NewQueryDelegatorParams(addrAcc2) 559 bz, errRes = cdc.MarshalJSON(queryDelegatorParams) 560 require.NoError(t, errRes) 561 query = abci.RequestQuery{ 562 Path: "/custom/staking/delegatorUnbondingDelegations", 563 Data: bz, 564 } 565 res, err = queryDelegatorUnbondingDelegations(ctx, query, keeper) 566 require.NoError(t, err) 567 require.NotNil(t, res) 568 require.NoError(t, cdc.UnmarshalJSON(res, &ubDels)) 569 require.Equal(t, 0, len(ubDels)) 570 } 571 572 func TestQueryHistoricalInfo(t *testing.T) { 573 cdc := codec.New() 574 ctx, _, keeper, _ := CreateTestInput(t, false, 10000) 575 576 // Create Validators and Delegation 577 val1 := types.NewValidator(addrVal1, pk1, types.Description{}) 578 val2 := types.NewValidator(addrVal2, pk2, types.Description{}) 579 vals := []types.Validator{val1, val2} 580 keeper.SetValidator(ctx, val1) 581 keeper.SetValidator(ctx, val2) 582 583 header := abci.Header{ 584 ChainID: "HelloChain", 585 Height: 5, 586 } 587 hi := types.NewHistoricalInfo(header, vals) 588 keeper.SetHistoricalInfo(ctx, 5, hi) 589 590 queryHistoricalParams := types.NewQueryHistoricalInfoParams(4) 591 bz, errRes := cdc.MarshalJSON(queryHistoricalParams) 592 require.NoError(t, errRes) 593 query := abci.RequestQuery{ 594 Path: "/custom/staking/historicalInfo", 595 Data: bz, 596 } 597 res, err := queryHistoricalInfo(ctx, query, keeper) 598 require.Error(t, err, "Invalid query passed") 599 require.Nil(t, res, "Invalid query returned non-nil result") 600 601 queryHistoricalParams = types.NewQueryHistoricalInfoParams(5) 602 bz, errRes = cdc.MarshalJSON(queryHistoricalParams) 603 require.NoError(t, errRes) 604 query.Data = bz 605 res, err = queryHistoricalInfo(ctx, query, keeper) 606 require.NoError(t, err, "Valid query passed") 607 require.NotNil(t, res, "Valid query returned nil result") 608 609 var recv types.HistoricalInfo 610 require.NoError(t, cdc.UnmarshalJSON(res, &recv)) 611 require.Equal(t, hi, recv, "HistoricalInfo query returned wrong result") 612 }