// mockUploadTools simulates the effect of tools.Upload, but skips the time- // consuming build from source. // TODO(fwereade) better factor agent/tools such that build logic is // exposed and can itself be neatly mocked? func mockUploadTools(stor storage.Storage, forceVersion *version.Number, series ...string) (*coretools.Tools, error) { vers := version.Current if forceVersion != nil { vers.Number = *forceVersion } versions := []version.Binary{vers} for _, series := range series { if series != version.Current.Series { newVers := vers newVers.Series = series versions = append(versions, newVers) } } agentTools, err := envtesting.UploadFakeToolsVersions(stor, versions...) if err != nil { return nil, err } return agentTools[0], nil }
// getMockBuildTools returns a sync.BuildToolsTarballFunc implementation which generates // a fake tools tarball. func (s *UpgradeJujuSuite) getMockBuildTools(c *gc.C) sync.BuildToolsTarballFunc { return func(forceVersion *version.Number) (*sync.BuiltTools, error) { // UploadFakeToolsVersions requires a storage to write to. stor, err := filestorage.NewFileStorageWriter(s.toolsDir) c.Assert(err, gc.IsNil) vers := version.Current if forceVersion != nil { vers.Number = *forceVersion } versions := []version.Binary{vers} uploadedTools, err := envtesting.UploadFakeToolsVersions(stor, versions...) c.Assert(err, gc.IsNil) agentTools := uploadedTools[0] return &sync.BuiltTools{ Dir: s.toolsDir, StorageName: envtools.StorageName(vers), Version: vers, Size: agentTools.Size, Sha256Hash: agentTools.SHA256, }, nil } }