Browse Source

fix validate pagination params

pull/1567/head
Ethan Buchman 6 years ago
parent
commit
6f9867cba6
3 changed files with 74 additions and 3 deletions
  1. +6
    -2
      rpc/core/pipe.go
  2. +67
    -0
      rpc/core/pipe_test.go
  3. +1
    -1
      rpc/core/tx.go

+ 6
- 2
rpc/core/pipe.go View File

@ -124,10 +124,14 @@ func SetEventBus(b *types.EventBus) {
eventBus = b
}
func validatePage(page int) int {
func validatePage(page, perPage, totalCount int) int {
pages := ((totalCount - 1) / perPage) + 1
if page < 1 {
return 1
page = 1
} else if page > pages {
page = pages
}
return page
}


+ 67
- 0
rpc/core/pipe_test.go View File

@ -0,0 +1,67 @@
package core
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestPaginationPage(t *testing.T) {
cases := []struct {
totalCount int
perPage int
page int
newPage int
}{
{0, 10, 0, 1},
{0, 10, 1, 1},
{0, 10, 2, 1},
{5, 10, -1, 1},
{5, 10, 0, 1},
{5, 10, 1, 1},
{5, 10, 2, 1},
{5, 10, 2, 1},
{5, 5, 1, 1},
{5, 5, 2, 1},
{5, 5, 3, 1},
{5, 3, 2, 2},
{5, 3, 3, 2},
{5, 2, 2, 2},
{5, 2, 3, 3},
{5, 2, 4, 3},
}
for _, c := range cases {
p := validatePage(c.page, c.perPage, c.totalCount)
assert.Equal(t, c.newPage, p, fmt.Sprintf("%v", c))
}
}
func TestPaginationPerPage(t *testing.T) {
cases := []struct {
totalCount int
perPage int
newPerPage int
}{
{5, 0, defaultPerPage},
{5, 1, 1},
{5, 2, 2},
{5, defaultPerPage, defaultPerPage},
{5, maxPerPage - 1, maxPerPage - 1},
{5, maxPerPage, maxPerPage},
{5, maxPerPage + 1, defaultPerPage},
}
for _, c := range cases {
p := validatePerPage(c.perPage)
assert.Equal(t, c.newPerPage, p, fmt.Sprintf("%v", c))
}
}

+ 1
- 1
rpc/core/tx.go View File

@ -188,7 +188,7 @@ func TxSearch(query string, prove bool, page, perPage int) (*ctypes.ResultTxSear
}
totalCount := len(results)
page = validatePage(page)
page = validatePage(page, perPage, totalCount)
perPage = validatePerPage(perPage)
skipCount := (page - 1) * perPage


Loading…
Cancel
Save