github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/charmdownloader/charmdownloader_test.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package charmdownloader 5 6 import ( 7 "github.com/juju/names/v5" 8 jc "github.com/juju/testing/checkers" 9 "go.uber.org/mock/gomock" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/core/watcher" 13 "github.com/juju/juju/worker/charmdownloader/mocks" 14 ) 15 16 type charmDownloaderSuite struct { 17 logger *mocks.MockLogger 18 api *mocks.MockCharmDownloaderAPI 19 watcher *mocks.MockStringsWatcher 20 } 21 22 var _ = gc.Suite(&charmDownloaderSuite{}) 23 24 func (s *charmDownloaderSuite) TestAsyncDownloadTrigger(c *gc.C) { 25 defer s.setupMocks(c).Finish() 26 27 changeCh := make(chan []string, 1) 28 changeCh <- []string{"ufo", "cons", "piracy"} 29 close(changeCh) 30 s.watcher.EXPECT().Changes().DoAndReturn(func() watcher.StringsChannel { 31 return changeCh 32 }).AnyTimes() 33 34 s.api.EXPECT().WatchApplicationsWithPendingCharms().DoAndReturn(func() (watcher.StringsWatcher, error) { 35 return s.watcher, nil 36 }) 37 s.api.EXPECT().DownloadApplicationCharms([]names.ApplicationTag{ 38 names.NewApplicationTag("ufo"), 39 names.NewApplicationTag("cons"), 40 names.NewApplicationTag("piracy"), 41 }).Return(nil) 42 43 worker, err := NewCharmDownloader(Config{ 44 Logger: s.logger, 45 CharmDownloaderAPI: s.api, 46 }) 47 c.Assert(err, jc.ErrorIsNil) 48 49 // Wait for the worker to process the changes and exit when it detects 50 // that changeCh has been closed. 51 _ = worker.Wait() 52 } 53 54 func (s *charmDownloaderSuite) setupMocks(c *gc.C) *gomock.Controller { 55 ctrl := gomock.NewController(c) 56 s.logger = mocks.NewMockLogger(ctrl) 57 s.logger.EXPECT().Errorf(gomock.Any(), gomock.Any()).AnyTimes() 58 s.logger.EXPECT().Debugf(gomock.Any(), gomock.Any()).AnyTimes() 59 s.api = mocks.NewMockCharmDownloaderAPI(ctrl) 60 s.watcher = mocks.NewMockStringsWatcher(ctrl) 61 s.watcher.EXPECT().Wait().Return(nil).AnyTimes() 62 s.watcher.EXPECT().Kill().Return().AnyTimes() 63 64 return ctrl 65 }