@@ -28,6 +28,7 @@ import (
2828 countermock "github.com/uber/submitqueue/platform/extension/counter/mock"
2929 mqmock "github.com/uber/submitqueue/platform/extension/messagequeue/mock"
3030 stovepipemq "github.com/uber/submitqueue/stovepipe/core/messagequeue"
31+ requestlogmock "github.com/uber/submitqueue/stovepipe/core/requestlog/mock"
3132 "github.com/uber/submitqueue/stovepipe/entity"
3233 "github.com/uber/submitqueue/stovepipe/extension/sourcecontrol"
3334 scmock "github.com/uber/submitqueue/stovepipe/extension/sourcecontrol/mock"
@@ -49,7 +50,9 @@ type ingestMocks struct {
4950 sc * scmock.MockSourceControl
5051 reqStore * storagemock.MockRequestStore
5152 uriStore * storagemock.MockRequestURIStore
53+ logStore * storagemock.MockRequestLogStore
5254 queueStore * storagemock.MockQueueStore
55+ requestLog * requestlogmock.MockRecorder
5356 publisher * mqmock.MockPublisher
5457}
5558
@@ -74,13 +77,16 @@ func newIngestController(t *testing.T, ctrl *gomock.Controller) (*IngestControll
7477 sc : scmock .NewMockSourceControl (ctrl ),
7578 reqStore : storagemock .NewMockRequestStore (ctrl ),
7679 uriStore : storagemock .NewMockRequestURIStore (ctrl ),
80+ logStore : storagemock .NewMockRequestLogStore (ctrl ),
7781 queueStore : storagemock .NewMockQueueStore (ctrl ),
82+ requestLog : requestlogmock .NewMockRecorder (ctrl ),
7883 publisher : mqmock .NewMockPublisher (ctrl ),
7984 }
8085
8186 store := storagemock .NewMockStorage (ctrl )
8287 store .EXPECT ().GetRequestStore ().Return (m .reqStore ).AnyTimes ()
8388 store .EXPECT ().GetRequestURIStore ().Return (m .uriStore ).AnyTimes ()
89+ store .EXPECT ().GetRequestLogStore ().Return (m .logStore ).AnyTimes ()
8490 store .EXPECT ().GetQueueStore ().Return (m .queueStore ).AnyTimes ()
8591
8692 queue := mqmock .NewMockQueue (ctrl )
@@ -91,10 +97,29 @@ func newIngestController(t *testing.T, ctrl *gomock.Controller) (*IngestControll
9197 })
9298 require .NoError (t , err )
9399
94- c := NewIngestController (zap .NewNop ().Sugar (), tally .NewTestScope ("test" , nil ), staticCounterFactory {counter : m .counter }, m .factory , staticStorageFactory {store : store }, registry )
100+ c := NewIngestController (zap .NewNop ().Sugar (), tally .NewTestScope ("test" , nil ), staticCounterFactory {counter : m .counter }, m .factory , staticStorageFactory {store : store }, m . requestLog , registry )
95101 return c , m
96102}
97103
104+ func acceptedRequest (id string ) entity.Request {
105+ return entity.Request {
106+ ID : id ,
107+ Queue : testQueue ,
108+ URI : testURI ,
109+ State : entity .RequestStateAccepted ,
110+ Version : 1 ,
111+ }
112+ }
113+
114+ func expectRecordAccepted (m ingestMocks , id string ) {
115+ m .requestLog .EXPECT ().RecordRequestState (
116+ gomock .Any (),
117+ m .logStore ,
118+ acceptedRequest (id ),
119+ entity .RequestOutcomeReasonUnknown ,
120+ ).Return (nil )
121+ }
122+
98123// expectResolve wires the SourceControl factory + Latest happy path returning testURI.
99124func expectResolve (m ingestMocks ) {
100125 m .factory .EXPECT ().For (sourcecontrol.Config {QueueName : testQueue }).Return (m .sc , nil )
@@ -153,6 +178,7 @@ func TestIngestController_Ingest(t *testing.T) {
153178 m .uriStore .EXPECT ().Create (gomock .Any (), testURI , "request/monorepo/main/7" ).Return (nil )
154179 m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/7" ).Return (entity.Request {}, storage .ErrNotFound )
155180 m .reqStore .EXPECT ().Create (gomock .Any (), gomock .Any ()).Return (nil )
181+ expectRecordAccepted (m , "request/monorepo/main/7" )
156182 expectAdvanceLatestRequestID (m , testQueue , "request/monorepo/main/7" )
157183 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
158184 },
@@ -164,7 +190,8 @@ func TestIngestController_Ingest(t *testing.T) {
164190 setup : func (m ingestMocks ) {
165191 expectResolve (m )
166192 m .uriStore .EXPECT ().GetIDByURI (gomock .Any (), testURI ).Return ("request/monorepo/main/3" , nil )
167- m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (entity.Request {ID : "request/monorepo/main/3" , State : entity .RequestStateAccepted }, nil )
193+ m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (acceptedRequest ("request/monorepo/main/3" ), nil )
194+ expectRecordAccepted (m , "request/monorepo/main/3" )
168195 expectAdvanceLatestRequestIDNoOp (m , testQueue , "request/monorepo/main/3" )
169196 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
170197 },
@@ -178,6 +205,7 @@ func TestIngestController_Ingest(t *testing.T) {
178205 m .uriStore .EXPECT ().GetIDByURI (gomock .Any (), testURI ).Return ("request/monorepo/main/3" , nil )
179206 m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (entity.Request {}, storage .ErrNotFound )
180207 m .reqStore .EXPECT ().Create (gomock .Any (), gomock .Any ()).Return (nil )
208+ expectRecordAccepted (m , "request/monorepo/main/3" )
181209 expectAdvanceLatestRequestID (m , testQueue , "request/monorepo/main/3" )
182210 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
183211 },
@@ -192,7 +220,8 @@ func TestIngestController_Ingest(t *testing.T) {
192220 m .counter .EXPECT ().Next (gomock .Any (), counterDomainRequest ).Return (int64 (7 ), nil )
193221 m .uriStore .EXPECT ().Create (gomock .Any (), testURI , "request/monorepo/main/7" ).Return (storage .ErrAlreadyExists )
194222 m .uriStore .EXPECT ().GetIDByURI (gomock .Any (), testURI ).Return ("request/monorepo/main/3" , nil )
195- m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (entity.Request {ID : "request/monorepo/main/3" , State : entity .RequestStateAccepted }, nil )
223+ m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (acceptedRequest ("request/monorepo/main/3" ), nil )
224+ expectRecordAccepted (m , "request/monorepo/main/3" )
196225 expectAdvanceLatestRequestIDNoOp (m , testQueue , "request/monorepo/main/3" )
197226 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (nil )
198227 },
@@ -257,11 +286,28 @@ func TestIngestController_Ingest(t *testing.T) {
257286 m .uriStore .EXPECT ().Create (gomock .Any (), testURI , gomock .Any ()).Return (nil )
258287 m .reqStore .EXPECT ().Get (gomock .Any (), gomock .Any ()).Return (entity.Request {}, storage .ErrNotFound )
259288 m .reqStore .EXPECT ().Create (gomock .Any (), gomock .Any ()).Return (nil )
289+ expectRecordAccepted (m , "request/monorepo/main/7" )
260290 expectAdvanceLatestRequestID (m , testQueue , "request/monorepo/main/7" )
261291 m .publisher .EXPECT ().Publish (gomock .Any (), "process" , gomock .Any ()).Return (errors .New ("queue down" ))
262292 },
263293 wantErr : true ,
264294 },
295+ {
296+ name : "request log error prevents advancement and publish" ,
297+ queue : testQueue ,
298+ setup : func (m ingestMocks ) {
299+ expectResolve (m )
300+ m .uriStore .EXPECT ().GetIDByURI (gomock .Any (), testURI ).Return ("request/monorepo/main/3" , nil )
301+ m .reqStore .EXPECT ().Get (gomock .Any (), "request/monorepo/main/3" ).Return (acceptedRequest ("request/monorepo/main/3" ), nil )
302+ m .requestLog .EXPECT ().RecordRequestState (
303+ gomock .Any (),
304+ m .logStore ,
305+ acceptedRequest ("request/monorepo/main/3" ),
306+ entity .RequestOutcomeReasonUnknown ,
307+ ).Return (errors .New ("log unavailable" ))
308+ },
309+ wantErr : true ,
310+ },
265311 }
266312
267313 for _ , tt := range tests {
0 commit comments