@@ -43,29 +43,32 @@ const (
4343
4444// ingestMocks bundles the mocks an Ingest test case wires expectations on.
4545type ingestMocks struct {
46- counter * countermock.MockCounter
47- factory * scmock.MockFactory
48- sc * scmock.MockSourceControl
49- reqStore * storagemock.MockRequestStore
50- uriStore * storagemock.MockRequestURIStore
51- publisher * mqmock.MockPublisher
46+ counter * countermock.MockCounter
47+ factory * scmock.MockFactory
48+ sc * scmock.MockSourceControl
49+ reqStore * storagemock.MockRequestStore
50+ uriStore * storagemock.MockRequestURIStore
51+ queueStore * storagemock.MockQueueStore
52+ publisher * mqmock.MockPublisher
5253}
5354
5455func newIngestController (t * testing.T , ctrl * gomock.Controller ) (* IngestController , ingestMocks ) {
5556 t .Helper ()
5657
5758 m := ingestMocks {
58- counter : countermock .NewMockCounter (ctrl ),
59- factory : scmock .NewMockFactory (ctrl ),
60- sc : scmock .NewMockSourceControl (ctrl ),
61- reqStore : storagemock .NewMockRequestStore (ctrl ),
62- uriStore : storagemock .NewMockRequestURIStore (ctrl ),
63- publisher : mqmock .NewMockPublisher (ctrl ),
59+ counter : countermock .NewMockCounter (ctrl ),
60+ factory : scmock .NewMockFactory (ctrl ),
61+ sc : scmock .NewMockSourceControl (ctrl ),
62+ reqStore : storagemock .NewMockRequestStore (ctrl ),
63+ uriStore : storagemock .NewMockRequestURIStore (ctrl ),
64+ queueStore : storagemock .NewMockQueueStore (ctrl ),
65+ publisher : mqmock .NewMockPublisher (ctrl ),
6466 }
6567
6668 store := storagemock .NewMockStorage (ctrl )
6769 store .EXPECT ().GetRequestStore ().Return (m .reqStore ).AnyTimes ()
6870 store .EXPECT ().GetRequestURIStore ().Return (m .uriStore ).AnyTimes ()
71+ store .EXPECT ().GetQueueStore ().Return (m .queueStore ).AnyTimes ()
6972
7073 queue := mqmock .NewMockQueue (ctrl )
7174 queue .EXPECT ().Publisher ().Return (m .publisher ).AnyTimes ()
@@ -85,6 +88,25 @@ func expectResolve(m ingestMocks) {
8588 m .sc .EXPECT ().Latest (gomock .Any ()).Return (testURI , nil )
8689}
8790
91+ // expectAdvanceLatestRequestID wires GetOrCreate + Update for queue.latest_request_id.
92+ func expectAdvanceLatestRequestID (m ingestMocks , queue , id string ) {
93+ m .queueStore .EXPECT ().GetOrCreate (gomock .Any (), queue , entity.Queue {Version : 1 }).Return (entity.Queue {
94+ Name : queue ,
95+ Version : 1 ,
96+ }, nil )
97+ updated := entity.Queue {Name : queue , LatestRequestID : id , Version : 1 }
98+ m .queueStore .EXPECT ().Update (gomock .Any (), updated , int32 (1 ), int32 (2 )).Return (nil )
99+ }
100+
101+ // expectAdvanceLatestRequestIDNoOp wires GetOrCreate when latest_request_id is already at id.
102+ func expectAdvanceLatestRequestIDNoOp (m ingestMocks , queue , id string ) {
103+ m .queueStore .EXPECT ().GetOrCreate (gomock .Any (), queue , entity.Queue {Version : 1 }).Return (entity.Queue {
104+ Name : queue ,
105+ LatestRequestID : id ,
106+ Version : 1 ,
107+ }, nil )
108+ }
109+
88110func TestIngestController_Ingest (t * testing.T ) {
89111 tests := []struct {
90112 name string
@@ -104,6 +126,7 @@ func TestIngestController_Ingest(t *testing.T) {
104126 m .uriStore .EXPECT ().Create (gomock .Any (), testQueue , testURI , "request/monorepo/main/7" ).Return (nil )
105127 m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/7" ).Return (entity.Request {}, storage .ErrNotFound )
106128 m .reqStore .EXPECT ().Create (gomock .Any (), gomock .Any ()).Return (nil )
129+ expectAdvanceLatestRequestID (m , testQueue , "request/monorepo/main/7" )
107130 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
108131 },
109132 wantID : "request/monorepo/main/7" ,
@@ -115,6 +138,7 @@ func TestIngestController_Ingest(t *testing.T) {
115138 expectResolve (m )
116139 m .uriStore .EXPECT ().GetIDByURI (gomock .Any (), testQueue , testURI ).Return ("request/monorepo/main/3" , nil )
117140 m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (entity.Request {ID : "request/monorepo/main/3" , State : entity .RequestStateAccepted }, nil )
141+ expectAdvanceLatestRequestIDNoOp (m , testQueue , "request/monorepo/main/3" )
118142 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
119143 },
120144 wantID : "request/monorepo/main/3" ,
@@ -128,6 +152,7 @@ func TestIngestController_Ingest(t *testing.T) {
128152 m .uriStore .EXPECT ().GetIDByURI (gomock .Any (), testQueue , testURI ).Return ("request/monorepo/main/3" , nil )
129153 m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (entity.Request {}, storage .ErrNotFound )
130154 m .reqStore .EXPECT ().Create (gomock .Any (), gomock .Any ()).Return (nil )
155+ expectAdvanceLatestRequestID (m , testQueue , "request/monorepo/main/3" )
131156 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
132157 },
133158 wantID : "request/monorepo/main/3" ,
@@ -142,6 +167,7 @@ func TestIngestController_Ingest(t *testing.T) {
142167 m .uriStore .EXPECT ().Create (gomock .Any (), testQueue , testURI , "request/monorepo/main/7" ).Return (storage .ErrAlreadyExists )
143168 m .uriStore .EXPECT ().GetIDByURI (gomock .Any (), testQueue , testURI ).Return ("request/monorepo/main/3" , nil )
144169 m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (entity.Request {ID : "request/monorepo/main/3" , State : entity .RequestStateAccepted }, nil )
170+ expectAdvanceLatestRequestIDNoOp (m , testQueue , "request/monorepo/main/3" )
145171 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
146172 },
147173 wantID : "request/monorepo/main/3" ,
@@ -205,6 +231,7 @@ func TestIngestController_Ingest(t *testing.T) {
205231 m .uriStore .EXPECT ().Create (gomock .Any (), testQueue , testURI , gomock .Any ()).Return (nil )
206232 m .reqStore .EXPECT ().Get (gomock .Any (), gomock .Any ()).Return (entity.Request {}, storage .ErrNotFound )
207233 m .reqStore .EXPECT ().Create (gomock .Any (), gomock .Any ()).Return (nil )
234+ expectAdvanceLatestRequestID (m , testQueue , "request/monorepo/main/7" )
208235 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (errors .New ("queue down" ))
209236 },
210237 wantErr : true ,
0 commit comments