Skip to content

Commit

Permalink
Small changes - 2
Browse files Browse the repository at this point in the history
  • Loading branch information
aditya1702 committed Oct 1, 2024
1 parent 7fac004 commit b9282c9
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 30 deletions.
23 changes: 17 additions & 6 deletions cmd/soroban-rpc/internal/methods/get_ledgers.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,19 @@ type GetLedgersRequest struct {
// validate checks the validity of the request parameters.
func (req *GetLedgersRequest) validate(maxLimit uint, ledgerRange ledgerbucketwindow.LedgerRange) error {
switch {
case req.Pagination != nil && req.Pagination.Cursor != "" && req.StartLedger != 0:
return errors.New("startLedger and cursor cannot both be set")
case !isStartLedgerWithinBounds(req.StartLedger, ledgerRange):
case req.Pagination != nil:
switch {
case req.Pagination.Cursor != "" && req.StartLedger != 0:
return errors.New("startLedger and cursor cannot both be set")
case req.Pagination.Limit > maxLimit:
return fmt.Errorf("limit must not exceed %d", maxLimit)
}
case req.StartLedger != 0 && !isStartLedgerWithinBounds(req.StartLedger, ledgerRange):
return fmt.Errorf(
"start ledger must be between the oldest ledger: %d and the latest ledger: %d for this rpc instance",
ledgerRange.FirstLedger.Sequence,
ledgerRange.LastLedger.Sequence,
)
case req.Pagination != nil && (req.Pagination.Limit <= 0 || req.Pagination.Limit > maxLimit):
return fmt.Errorf("limit must be between [1, %d]", maxLimit)
}

return IsValidFormat(req.Format)
Expand Down Expand Up @@ -130,15 +133,23 @@ func (h ledgersHandler) getLedgers(ctx context.Context, request GetLedgersReques
func (h ledgersHandler) initializePagination(request GetLedgersRequest,
ledgerRange ledgerbucketwindow.LedgerRange,
) (uint32, uint, error) {
if request.Pagination == nil {
return request.StartLedger, h.defaultLimit, nil
}

start := request.StartLedger
limit := request.Pagination.Limit
var err error
if request.Pagination.Cursor != "" {
start, err = h.parseCursor(request.Pagination.Cursor, ledgerRange)
if err != nil {
return 0, 0, err
}
}

limit := request.Pagination.Limit
if limit <= 0 {
limit = h.defaultLimit
}
return start, limit, nil
}

Expand Down
48 changes: 24 additions & 24 deletions cmd/soroban-rpc/internal/methods/get_ledgers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ func TestGetLedgers_LimitExceedsMaxLimit(t *testing.T) {

_, err := handler.getLedgers(context.TODO(), request)
require.Error(t, err)
assert.Contains(t, err.Error(), "limit must be between [1, 100]")
assert.Contains(t, err.Error(), "limit must not exceed 100")
}

func TestGetLedgers_LimitExceedsLatestLedger(t *testing.T) {
Expand Down Expand Up @@ -264,29 +264,29 @@ func TestGetLedgers_CursorGreaterThanLatestLedger(t *testing.T) {
assert.Contains(t, err.Error(), "cursor must be between")
}

func BenchmarkGetLedgers(b *testing.B) {
testDB := setupBenchmarkingDB(b)
handler := ledgersHandler{
ledgerReader: db.NewLedgerReader(testDB),
maxLimit: 200,
defaultLimit: 5,
}

request := GetLedgersRequest{
StartLedger: 1334,
Pagination: &PaginationOptions{
Limit: 200, // using the current maximum request limit for getLedgers endpoint
},
}

b.ResetTimer()
for range b.N {
response, err := handler.getLedgers(context.TODO(), request)
require.NoError(b, err)
assert.Equal(b, uint32(1334), response.Ledgers[0].Sequence)
assert.Equal(b, uint32(1533), response.Ledgers[199].Sequence)
}
}
//func BenchmarkGetLedgers(b *testing.B) {

Check failure on line 267 in cmd/soroban-rpc/internal/methods/get_ledgers_test.go

View workflow job for this annotation

GitHub Actions / golangci-lint

commentFormatting: put a space between `//` and comment text (gocritic)
// testDB := setupBenchmarkingDB(b)
// handler := ledgersHandler{
// ledgerReader: db.NewLedgerReader(testDB),
// maxLimit: 200,
// defaultLimit: 5,
// }
//
// request := GetLedgersRequest{
// StartLedger: 1334,
// Pagination: &PaginationOptions{
// Limit: 200, // using the current maximum request limit for getLedgers endpoint
// },
// }
//
// b.ResetTimer()
// for range b.N {
// response, err := handler.getLedgers(context.TODO(), request)
// require.NoError(b, err)
// assert.Equal(b, uint32(1334), response.Ledgers[0].Sequence)
// assert.Equal(b, uint32(1533), response.Ledgers[199].Sequence)
// }
//}

func setupBenchmarkingDB(b *testing.B) *db.DB {

Check failure on line 291 in cmd/soroban-rpc/internal/methods/get_ledgers_test.go

View workflow job for this annotation

GitHub Actions / golangci-lint

func `setupBenchmarkingDB` is unused (unused)
testDB := NewTestDB(b)
Expand Down

0 comments on commit b9282c9

Please sign in to comment.