github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/api/client/charms/downloader_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package charms_test 5 6 import ( 7 "context" 8 "io" 9 "net/http" 10 "strings" 11 12 jc "github.com/juju/testing/checkers" 13 "go.uber.org/mock/gomock" 14 gc "gopkg.in/check.v1" 15 "gopkg.in/httprequest.v1" 16 17 basemocks "github.com/juju/juju/api/base/mocks" 18 "github.com/juju/juju/api/client/charms" 19 "github.com/juju/juju/api/http/mocks" 20 coretesting "github.com/juju/juju/testing" 21 ) 22 23 type charmDownloaderSuite struct { 24 coretesting.BaseSuite 25 } 26 27 var _ = gc.Suite(&charmDownloaderSuite{}) 28 29 func (s *charmDownloaderSuite) TestCharmOpener(c *gc.C) { 30 ctrl := gomock.NewController(c) 31 defer ctrl.Finish() 32 33 mockCaller := basemocks.NewMockAPICaller(ctrl) 34 mockHttpDoer := mocks.NewMockHTTPClient(ctrl) 35 reqClient := &httprequest.Client{ 36 BaseURL: "http://somewhere.invalid", 37 Doer: mockHttpDoer, 38 } 39 40 mockCaller.EXPECT().Context().Return(context.TODO()).MinTimes(1) 41 mockCaller.EXPECT().HTTPClient().Return(reqClient, nil).MinTimes(1) 42 43 charmData := "charmdatablob" 44 resp := &http.Response{ 45 StatusCode: 200, 46 Header: make(http.Header), 47 Body: io.NopCloser(strings.NewReader(charmData)), 48 } 49 resp.Header.Add("Content-Type", "application/json") 50 mockHttpDoer.EXPECT().Do( 51 &httpURLMatcher{"http://somewhere.invalid/charms\\?file=%2A&url=ch%3Amycharm"}, 52 ).Return(resp, nil).MinTimes(1) 53 54 opener, err := charms.NewCharmOpener(mockCaller) 55 c.Assert(err, jc.ErrorIsNil) 56 reader, err := opener.OpenCharm("ch:mycharm") 57 58 defer reader.Close() 59 c.Assert(err, jc.ErrorIsNil) 60 61 data, err := io.ReadAll(reader) 62 c.Assert(err, jc.ErrorIsNil) 63 c.Check(data, jc.DeepEquals, []byte(charmData)) 64 }