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  }