github.com/lymingtonprecision/terraform@v0.9.9-0.20170613092852-62acef9611a9/command/plugins_test.go (about) 1 package command 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 8 "github.com/hashicorp/terraform/plugin/discovery" 9 ) 10 11 // mockGetProvider providers a GetProvider method for testing automatic 12 // provider downloads 13 type mockGetProvider struct { 14 // A map of provider names to available versions. 15 // The tests expect the versions to be in order from newest to oldest. 16 Providers map[string][]string 17 } 18 19 func (m mockGetProvider) FileName(provider, version string) string { 20 return fmt.Sprintf("terraform-provider-%s_v%s_x4", provider, version) 21 } 22 23 // GetProvider will check the Providers map to see if it can find a suitable 24 // version, and put an empty file in the dst directory. 25 func (m mockGetProvider) GetProvider(dst, provider string, req discovery.Constraints, protoVersion uint) error { 26 versions := m.Providers[provider] 27 if len(versions) == 0 { 28 return fmt.Errorf("provider %q not found", provider) 29 } 30 31 err := os.MkdirAll(dst, 0755) 32 if err != nil { 33 return fmt.Errorf("error creating plugins directory: %s", err) 34 } 35 36 for _, v := range versions { 37 version, err := discovery.VersionStr(v).Parse() 38 if err != nil { 39 panic(err) 40 } 41 42 if req.Allows(version) { 43 // provider filename 44 name := m.FileName(provider, v) 45 path := filepath.Join(dst, name) 46 f, err := os.Create(path) 47 if err != nil { 48 return fmt.Errorf("error fetching provider: %s", err) 49 } 50 f.Close() 51 return nil 52 } 53 } 54 55 return fmt.Errorf("no suitable version for provider %q found with constraints %s", provider, req) 56 }