func (s *UploadSuite) TestHandleRequestPending(c *gc.C) { content := "<some data>" res, _ := newResource(c, "spam", "a-user", content) res.PendingID = "some-unique-id" stored, _ := newResource(c, "spam", "", "") stored.PendingID = "some-unique-id" s.data.ReturnGetPendingResource = stored s.data.ReturnUpdatePendingResource = res uh := server.UploadHandler{ Username: "******", Store: s.data, } req, body := newUploadRequest(c, "spam", "a-service", content) req.URL.RawQuery += "&pendingid=some-unique-id" result, err := uh.HandleRequest(req) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "GetPendingResource", "UpdatePendingResource") s.stub.CheckCall(c, 0, "GetPendingResource", "a-service", "spam", "some-unique-id") s.stub.CheckCall(c, 1, "UpdatePendingResource", "a-service", "some-unique-id", "a-user", res.Resource, ioutil.NopCloser(body)) c.Check(result, jc.DeepEquals, &api.UploadResult{ Resource: api.Resource2API(res), }) }
func (s *UploadSuite) TestReadResourceBadContentType(c *gc.C) { uh := server.UploadHandler{ Username: "******", Store: s.data, } req, _ := newUploadRequest(c, "spam", "a-service", "<some data>") req.Header.Set("Content-Type", "text/plain") _, err := uh.ReadResource(req) c.Check(err, gc.ErrorMatches, "unsupported content type .*") s.stub.CheckNoCalls(c) }
func (s *UploadSuite) TestReadResourceGetResourceFailure(c *gc.C) { uh := server.UploadHandler{ Username: "******", Store: s.data, } req, _ := newUploadRequest(c, "spam", "a-service", "<some data>") failure := errors.New("<failure>") s.stub.SetErrors(failure) _, err := uh.ReadResource(req) c.Check(errors.Cause(err), gc.Equals, failure) s.stub.CheckCallNames(c, "GetResource") }
func (s *UploadSuite) TestReadResourceBadSize(c *gc.C) { stored, _ := newResource(c, "spam", "", "") s.data.ReturnGetResource = stored uh := server.UploadHandler{ Username: "******", Store: s.data, } req, _ := newUploadRequest(c, "spam", "a-service", "<some data>") req.Header.Set("Content-Length", "should-be-an-int") _, err := uh.ReadResource(req) c.Check(err, gc.ErrorMatches, "invalid size.*") s.stub.CheckNoCalls(c) }
func (s *UploadSuite) TestReadResourceBadFingerprint(c *gc.C) { stored, _ := newResource(c, "spam", "", "") s.data.ReturnGetResource = stored uh := server.UploadHandler{ Username: "******", Store: s.data, } req, _ := newUploadRequest(c, "spam", "a-application", "<some data>") req.Header.Set("Content-SHA384", "bogus") _, err := uh.ReadResource(req) c.Check(err, gc.ErrorMatches, "invalid fingerprint.*") s.stub.CheckNoCalls(c) }
func (s *UploadSuite) TestHandleRequestSetResourceFailure(c *gc.C) { content := "<some data>" stored, _ := newResource(c, "spam", "", "") s.data.ReturnGetResource = stored uh := server.UploadHandler{ Username: "******", Store: s.data, } req, _ := newUploadRequest(c, "spam", "a-service", content) failure := errors.New("<failure>") s.stub.SetErrors(nil, failure) _, err := uh.HandleRequest(req) c.Check(errors.Cause(err), gc.Equals, failure) s.stub.CheckCallNames(c, "GetResource", "SetResource") }
func (s *UploadSuite) TestExtensionMismatch(c *gc.C) { content := "<some data>" // newResource returns a resource with a Path = name + ".tgz" res, _ := newResource(c, "spam", "a-user", content) stored, _ := newResource(c, "spam", "", "") s.data.ReturnGetResource = stored s.data.ReturnSetResource = res uh := server.UploadHandler{ Username: "******", Store: s.data, } req, _ := newUploadRequest(c, "spam", "a-application", content) req.Header.Set("Content-Disposition", "form-data; filename=different.ext") _, err := uh.HandleRequest(req) c.Assert(err, gc.ErrorMatches, `incorrect extension on resource upload "different.ext", expected ".tgz"`) }
func (s *UploadSuite) TestHandleRequestOkay(c *gc.C) { content := "<some data>" res, _ := newResource(c, "spam", "a-user", content) stored, _ := newResource(c, "spam", "", "") s.data.ReturnGetResource = stored s.data.ReturnSetResource = res uh := server.UploadHandler{ Username: "******", Store: s.data, } req, body := newUploadRequest(c, "spam", "a-service", content) result, err := uh.HandleRequest(req) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "GetResource", "SetResource") s.stub.CheckCall(c, 0, "GetResource", "a-service", "spam") s.stub.CheckCall(c, 1, "SetResource", "a-service", "a-user", res.Resource, ioutil.NopCloser(body)) c.Check(result, jc.DeepEquals, &api.UploadResult{ Resource: api.Resource2API(res), }) }
func (s *UploadSuite) TestReadResourceOkay(c *gc.C) { content := "<some data>" expected, _ := newResource(c, "spam", "a-user", content) stored, _ := newResource(c, "spam", "", "") s.data.ReturnGetResource = stored uh := server.UploadHandler{ Username: "******", Store: s.data, } req, body := newUploadRequest(c, "spam", "a-service", content) uploaded, err := uh.ReadResource(req) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "GetResource") s.stub.CheckCall(c, 0, "GetResource", "a-service", "spam") c.Check(uploaded, jc.DeepEquals, &server.UploadedResource{ Service: "a-service", Resource: expected.Resource, Data: ioutil.NopCloser(body), }) }
func (s *UploadSuite) TestReadResourcePending(c *gc.C) { content := "<some data>" expected, _ := newResource(c, "spam", "a-user", content) stored, _ := newResource(c, "spam", "", "") s.data.ReturnGetPendingResource = stored uh := server.UploadHandler{ Username: "******", Store: s.data, } req, body := newUploadRequest(c, "spam", "a-application", content) req.URL.RawQuery += "&pendingid=some-unique-id" uploaded, err := uh.ReadResource(req) c.Assert(err, jc.ErrorIsNil) s.stub.CheckCallNames(c, "GetPendingResource") s.stub.CheckCall(c, 0, "GetPendingResource", "a-application", "spam", "some-unique-id") c.Check(uploaded, jc.DeepEquals, &server.UploadedResource{ Service: "a-application", PendingID: "some-unique-id", Resource: expected.Resource, Data: ioutil.NopCloser(body), }) }