@@ -17,7 +17,7 @@ import (
1717func TestSetLinkHeader (t * testing.T ) {
1818 t .Parallel ()
1919
20- key := [32 ]byte {1 , 2 , 3 }
20+ keys := [][ 32 ]byte {{ 1 , 2 , 3 } }
2121 defaultToken , nextToken := NewPageToken (Column {Name : "id" , Value : "default" }), NewPageToken (Column {Name : "id" , Value : "next" })
2222 opts := []Option {WithSize (2 ), WithDefaultToken (defaultToken ), WithToken (nextToken )}
2323
@@ -30,7 +30,7 @@ func TestSetLinkHeader(t *testing.T) {
3030 assert .Equal (t , "https" , u .Scheme )
3131 assert .Equal (t , "ory.sh" , u .Host )
3232 raw := u .Query ().Get ("page_token" )
33- token , err := ParsePageToken ([][ 32 ] byte { key } , raw )
33+ token , err := ParsePageToken (keys , raw )
3434 require .NoError (t , err )
3535 return token
3636 }
@@ -39,7 +39,7 @@ func TestSetLinkHeader(t *testing.T) {
3939 r := httptest .NewRecorder ()
4040 p := NewPaginator (opts ... )
4141
42- SetLinkHeader (r , & key , u , p )
42+ SetLinkHeader (r , keys , u , p )
4343
4444 assert .Len (t , r .Result ().Header .Values ("link" ), 1 , "make sure we send one header with multiple comma-separated values rather than multiple headers" )
4545 links := link .ParseResponse (r .Result ())
@@ -55,7 +55,7 @@ func TestSetLinkHeader(t *testing.T) {
5555 r := httptest .NewRecorder ()
5656 p := NewPaginator (append (opts , withIsLast (true ))... )
5757
58- SetLinkHeader (r , & key , u , p )
58+ SetLinkHeader (r , keys , u , p )
5959
6060 assert .Len (t , r .Result ().Header .Values ("link" ), 1 , "make sure we send one header with multiple comma-separated values rather than multiple headers" )
6161 links := link .ParseResponse (r .Result ())
@@ -73,20 +73,23 @@ func TestParsePageToken(t *testing.T) {
7373 keys := [][32 ]byte {{1 , 2 , 3 }, {4 , 5 , 6 }}
7474
7575 expectedToken := NewPageToken (Column {Name : "id" , Value : "token" }, Column {Name : "name" , Order : OrderDescending , Value : "test" })
76+ encryptedToken := expectedToken .Encrypt (keys )
7677
7778 t .Run ("with valid key" , func (t * testing.T ) {
78- for i , key := range keys {
79- encoded := expectedToken .Encrypt (& key )
80- token , err := ParsePageToken (keys , encoded )
81- require .NoErrorf (t , err , "%d" , i )
82- assert .Equal (t , expectedToken , token )
83- }
79+ token , err := ParsePageToken (keys , encryptedToken )
80+ require .NoError (t , err )
81+ assert .Equal (t , expectedToken , token )
82+ })
83+
84+ t .Run ("with rotated key" , func (t * testing.T ) {
85+ encryptedToken := expectedToken .Encrypt (keys [1 :])
86+ token , err := ParsePageToken (keys , encryptedToken )
87+ require .NoError (t , err )
88+ assert .Equal (t , expectedToken , token )
8489 })
8590
8691 t .Run ("with invalid key" , func (t * testing.T ) {
87- invalidKey := [32 ]byte {7 , 8 , 9 }
88- encoded := expectedToken .Encrypt (& invalidKey )
89- token , err := ParsePageToken (keys , encoded )
92+ token , err := ParsePageToken ([][32 ]byte {{7 , 8 , 9 }}, encryptedToken )
9093 require .ErrorContains (t , err , "decrypt token" )
9194 assert .Zero (t , token )
9295 })
@@ -98,7 +101,7 @@ func TestParse(t *testing.T) {
98101 keys := [][32 ]byte {{1 , 2 , 3 }}
99102 token := NewPageToken (Column {Name : "id" , Value : "token" }, Column {Name : "name" , Order : OrderDescending , Value : "test" })
100103 defaultToken := NewPageToken (Column {Name : "id" , Value : "default" }, Column {Name : "name" , Order : OrderDescending , Value : "default name" })
101- encodedToken := token .Encrypt (& keys [ 0 ] )
104+ encryptedToken := token .Encrypt (keys )
102105
103106 for _ , tc := range []struct {
104107 name string
@@ -114,7 +117,7 @@ func TestParse(t *testing.T) {
114117 },
115118 {
116119 name : "with page token" ,
117- q : url.Values {"page_token" : {encodedToken }},
120+ q : url.Values {"page_token" : {encryptedToken }},
118121 expectedSize : DefaultSize ,
119122 expectedToken : token ,
120123 },
@@ -126,7 +129,7 @@ func TestParse(t *testing.T) {
126129 },
127130 {
128131 name : "with page size and page token" ,
129- q : url.Values {"page_size" : {"123" }, "page_token" : {encodedToken }},
132+ q : url.Values {"page_size" : {"123" }, "page_token" : {encryptedToken }},
130133 expectedSize : 123 ,
131134 expectedToken : token ,
132135 },
@@ -158,7 +161,7 @@ func TestParse(t *testing.T) {
158161 assert .Equal (t , defaultToken , paginator .PageToken ())
159162 assert .Equal (t , DefaultSize , paginator .Size ())
160163
161- opts , err = ParseQueryParams (keys , url.Values {"page_token" : {"" , encodedToken , "" }, "page_size" : {"" , "123" , "" }})
164+ opts , err = ParseQueryParams (keys , url.Values {"page_token" : {"" , encryptedToken , "" }, "page_size" : {"" , "123" , "" }})
162165 require .NoError (t , err )
163166 paginator = NewPaginator (append (opts , WithDefaultToken (defaultToken ))... )
164167 assert .Equal (t , token , paginator .PageToken ())
0 commit comments