Atlas › Test

TestIteration_Err_NotBegining

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

Package
go.temporal.io/server/common/collection
Suite / test hierarchy
TestPagingIteratorSuite/TestIteration_Err_NotBegining
Test
TestIteration_Err_NotBegining
Introduced at
TestIteration_Err_NotBegining Frontier kind: Test frontier
Covered ranges
16
Covered lines
48
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 48 covered LOC · 16 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 paging_iterator.go
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
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 paging_iterator.go
76 > iter.pageErr = nil
77 > var v V
78 > return v, err
79 > }
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 paging_iterator.go
99 > iter.pageToken = nil
100 > iter.pageErr = err
101 > }
102 > iter.nextPageItemIndex = 0 paging_iterator.go
103 }