99 "net/http/httptest"
1010 "net/url"
1111 "sync"
12+ "sync/atomic"
1213 "time"
1314
1415 "code.cloudfoundry.org/cc-uploader/ccclient/fake_ccclient"
@@ -28,6 +29,7 @@ var _ = Describe("UploadDroplet", func() {
2829 var uploader fake_ccclient.FakeUploader
2930 var poller fake_ccclient.FakePoller
3031 var logger lager.Logger
32+ //var draining int32
3133
3234 BeforeEach (func () {
3335 outgoingResponse = httptest .NewRecorder ()
@@ -179,6 +181,27 @@ var _ = Describe("UploadDroplet", func() {
179181 })
180182 })
181183
184+ Context ("when the system is draining" , func () {
185+ var dropletUploadHandler http.Handler
186+ var draining int32
187+ var responseWriter * httptest.ResponseRecorder
188+ BeforeEach (func () {
189+ atomic .StoreInt32 (& draining , 1 )
190+ responseWriter = httptest .NewRecorder ()
191+ var err error
192+ incomingRequest , err = http .NewRequest ("POST" , "http://example.com?cc_droplet_upload_uri=http://some-uri" , nil )
193+ Expect (err ).NotTo (HaveOccurred ())
194+
195+ dropletUploadHandler = upload_droplet .New (& uploader , & poller , lager .NewLogger ("fake-logger" ), & sync.WaitGroup {}, & draining )
196+ })
197+
198+ It ("returns 503" , func () {
199+ dropletUploadHandler .ServeHTTP (responseWriter , incomingRequest )
200+ Expect (responseWriter .Code ).To (Equal (http .StatusServiceUnavailable ))
201+ Expect (responseWriter .Body .String ()).To (ContainSubstring ("Service is draining" ))
202+ })
203+ })
204+
182205 Context ("when the requester (client) goes away" , func () {
183206 var (
184207 cancel context.CancelFunc
0 commit comments