func (s *ImportSuite) TestStreamCharmsTools(c *gc.C) { model := description.NewModel(description.ModelArgs{ Owner: names.NewUserTag("me"), }) model.AddService(description.ServiceArgs{ Tag: names.NewServiceTag("magic"), CharmURL: "local:trusty/magic", }) model.AddService(description.ServiceArgs{ Tag: names.NewServiceTag("magic"), CharmURL: "cs:trusty/postgresql-42", }) uploader := &fakeUploader{charms: make(map[string]string)} config := migration.UploadBinariesConfig{ State: &fakeStateStorage{}, Model: model, Target: &fakeAPIConnection{}, GetCharmUploader: func(api.Connection) migration.CharmUploader { return uploader }, GetToolsUploader: func(target api.Connection) migration.ToolsUploader { return &noOpUploader{} }, GetStateStorage: func(migration.UploadBackend) storage.Storage { return &fakeCharmsStorage{} }, GetCharmStoragePath: func(_ migration.UploadBackend, u *charm.URL) (string, error) { return "/path/for/" + u.String(), nil }, } err := migration.UploadBinaries(config) c.Assert(err, jc.ErrorIsNil) c.Assert(uploader.charms, jc.DeepEquals, map[string]string{ "local:trusty/magic": "fake file at /path/for/local:trusty/magic", "cs:trusty/postgresql-42": "fake file at /path/for/cs:trusty/postgresql-42", }) }
func (s *ImportSuite) TestUploadBinariesTools(c *gc.C) { // Create a model that has three different tools versions: // one for a machine, one for a container, and one for a unit agent. // We don't care about the actual validity of the model (it isn't). model := description.NewModel(description.ModelArgs{ Owner: names.NewUserTag("me"), }) machine := model.AddMachine(description.MachineArgs{ Id: names.NewMachineTag("0"), }) machine.SetTools(description.AgentToolsArgs{ Version: version.MustParseBinary("2.0.1-trusty-amd64"), }) container := machine.AddContainer(description.MachineArgs{ Id: names.NewMachineTag("0/lxc/0"), }) container.SetTools(description.AgentToolsArgs{ Version: version.MustParseBinary("2.0.5-trusty-amd64"), }) service := model.AddService(description.ServiceArgs{ Tag: names.NewServiceTag("magic"), CharmURL: "local:trusty/magic", }) unit := service.AddUnit(description.UnitArgs{ Tag: names.NewUnitTag("magic/0"), }) unit.SetTools(description.AgentToolsArgs{ Version: version.MustParseBinary("2.0.3-trusty-amd64"), }) uploader := &fakeUploader{tools: make(map[version.Binary]string)} config := migration.UploadBinariesConfig{ State: &fakeStateStorage{}, Model: model, Target: &fakeAPIConnection{}, GetCharmUploader: func(api.Connection) migration.CharmUploader { return &noOpUploader{} }, GetToolsUploader: func(target api.Connection) migration.ToolsUploader { return uploader }, GetStateStorage: func(migration.UploadBackend) storage.Storage { return &fakeCharmsStorage{} }, GetCharmStoragePath: func(migration.UploadBackend, *charm.URL) (string, error) { return "", nil }, } err := migration.UploadBinaries(config) c.Assert(err, jc.ErrorIsNil) c.Assert(uploader.tools, jc.DeepEquals, map[version.Binary]string{ version.MustParseBinary("2.0.1-trusty-amd64"): "fake tools 2.0.1-trusty-amd64", version.MustParseBinary("2.0.3-trusty-amd64"): "fake tools 2.0.3-trusty-amd64", version.MustParseBinary("2.0.5-trusty-amd64"): "fake tools 2.0.5-trusty-amd64", }) }
func (s *ImportSuite) TestBinariesMigration(c *gc.C) { downloader := &fakeDownloader{} uploader := &fakeUploader{ charms: make(map[string]string), tools: make(map[version.Binary]string), } toolsMap := map[version.Binary]string{ version.MustParseBinary("2.1.0-trusty-amd64"): "/tools/0", version.MustParseBinary("2.0.0-xenial-amd64"): "/tools/1", } config := migration.UploadBinariesConfig{ Charms: []string{"local:trusty/magic", "cs:trusty/postgresql-42"}, CharmDownloader: downloader, CharmUploader: uploader, Tools: toolsMap, ToolsDownloader: downloader, ToolsUploader: uploader, } err := migration.UploadBinaries(config) c.Assert(err, jc.ErrorIsNil) c.Assert(downloader.charms, jc.DeepEquals, []string{ "local:trusty/magic", "cs:trusty/postgresql-42", }) c.Assert(uploader.charms, jc.DeepEquals, map[string]string{ "local:trusty/magic": "local:trusty/magic content", "cs:trusty/postgresql-42": "cs:trusty/postgresql-42 content", }) c.Assert(downloader.uris, jc.SameContents, []string{ "/tools/0", "/tools/1", }) c.Assert(uploader.tools, jc.DeepEquals, toolsMap) }