Atlas › Test

TestIteration_NoErr

Exact test identity: go.temporal.io/server/common/collection/TestPagingIteratorSuite/TestIteration_NoErr

Package
go.temporal.io/server/common/collection
Suite / test hierarchy
TestPagingIteratorSuite/TestIteration_NoErr
Test
TestIteration_NoErr
Introduced at
TestIteration_NoErr Frontier kind: Test frontier
Covered ranges
14
Covered lines
38
Covered files
1

Covered source

Expand a file to inspect source; the > gutter marks covered lines.

go.temporal.io/server/common/collection/paging_iterator.go 38 covered LOC · 14 ranges

Open complete file

18 func NewPagingIterator[V any](
19 paginationFn PaginationFn[V],
20 > ) Iterator[V] { paging_iterator.go
21 > iter := &PagingIteratorImpl[V]{
22 > paginationFn: paginationFn,
23 > pageToken: nil,
24 > pageErr: nil,
25 > pageItems: nil,
26 > nextPageItemIndex: 0,
27 > }
28 > iter.getNextPage() // this will initialize the paging iterator
29 > return iter
30 > }
31
32 // NewPagingIteratorWithToken create a new paging iterator with initial token
47
48 // HasNext return whether has next item or err
49 > func (iter *PagingIteratorImpl[V]) HasNext() bool { paging_iterator.go
50 > // pagination encounters error
51 > if iter.pageErr != nil {
52 return true
53 }
54
55 // still have local cached item to return
56 > if iter.nextPageItemIndex < len(iter.pageItems) { paging_iterator.go
57 > return true paging_iterator.go
58 > }
59
60 > if len(iter.pageToken) != 0 { paging_iterator.go
61 > iter.getNextPage() paging_iterator.go
62 > return iter.HasNext()
63 > }
64
65 > return false paging_iterator.go
66 }
67
68 // Next return next item or err
69 > func (iter *PagingIteratorImpl[V]) Next() (V, error) { paging_iterator.go
70 > if !iter.HasNext() {
71 panic("HistoryEventIterator Next() called without checking HasNext()")
72 }
73
74 > if iter.pageErr != nil { paging_iterator.go
75 err := iter.pageErr
76 iter.pageErr = nil
80
81 // we have cached events
82 > if iter.nextPageItemIndex < len(iter.pageItems) { paging_iterator.go
83 > index := iter.nextPageItemIndex
84 > iter.nextPageItemIndex++
85 > return iter.pageItems[index], nil
86 > }
87
88 panic("HistoryEventIterator Next() should return either a history event or a err")
89 }
90
91 > func (iter *PagingIteratorImpl[V]) getNextPage() { paging_iterator.go
92 > items, token, err := iter.paginationFn(iter.pageToken)
93 > if err == nil {
94 > iter.pageItems = items paging_iterator.go
95 > iter.pageToken = token
96 > iter.pageErr = nil
97 > } else { paging_iterator.go
98 iter.pageItems = nil
99 iter.pageToken = nil
100 iter.pageErr = err
101 }
102 > iter.nextPageItemIndex = 0 paging_iterator.go
103 }