github.com/vijayrajah/packer@v1.3.2/post-processor/vagrant-cloud/post-processor_test.go (about)

     1  package vagrantcloud
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"os"
     9  	"testing"
    10  
    11  	"github.com/hashicorp/packer/packer"
    12  )
    13  
    14  func testGoodConfig() map[string]interface{} {
    15  	return map[string]interface{}{
    16  		"access_token":        "foo",
    17  		"version_description": "bar",
    18  		"box_tag":             "hashicorp/precise64",
    19  		"version":             "0.5",
    20  	}
    21  }
    22  
    23  func testBadConfig() map[string]interface{} {
    24  	return map[string]interface{}{
    25  		"access_token":        "foo",
    26  		"box_tag":             "baz",
    27  		"version_description": "bar",
    28  	}
    29  }
    30  
    31  func newSecureServer(token string, handler http.HandlerFunc) *httptest.Server {
    32  	token = fmt.Sprintf("Bearer %s", token)
    33  	return httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
    34  		if req.Header.Get("authorization") != token {
    35  			http.Error(rw, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized)
    36  			return
    37  		}
    38  		if handler != nil {
    39  			handler(rw, req)
    40  		}
    41  	}))
    42  }
    43  
    44  func TestPostProcessor_Configure_fromVagrantEnv(t *testing.T) {
    45  	var p PostProcessor
    46  	config := testGoodConfig()
    47  	server := newSecureServer("bar", nil)
    48  	defer server.Close()
    49  	config["vagrant_cloud_url"] = server.URL
    50  	config["access_token"] = ""
    51  	os.Setenv("VAGRANT_CLOUD_TOKEN", "bar")
    52  	defer func() {
    53  		os.Setenv("VAGRANT_CLOUD_TOKEN", "")
    54  	}()
    55  
    56  	if err := p.Configure(config); err != nil {
    57  		t.Fatalf("err: %s", err)
    58  	}
    59  
    60  	if p.config.AccessToken != "bar" {
    61  		t.Fatalf("Expected to get token from VAGRANT_CLOUD_TOKEN env var. Got '%s' instead",
    62  			p.config.AccessToken)
    63  	}
    64  }
    65  
    66  func TestPostProcessor_Configure_fromAtlasEnv(t *testing.T) {
    67  	var p PostProcessor
    68  	config := testGoodConfig()
    69  	config["access_token"] = ""
    70  	server := newSecureServer("foo", nil)
    71  	defer server.Close()
    72  	config["vagrant_cloud_url"] = server.URL
    73  	os.Setenv("ATLAS_TOKEN", "foo")
    74  	defer func() {
    75  		os.Setenv("ATLAS_TOKEN", "")
    76  	}()
    77  
    78  	if err := p.Configure(config); err != nil {
    79  		t.Fatalf("err: %s", err)
    80  	}
    81  
    82  	if p.config.AccessToken != "foo" {
    83  		t.Fatalf("Expected to get token from ATLAS_TOKEN env var. Got '%s' instead",
    84  			p.config.AccessToken)
    85  	}
    86  
    87  	if !p.warnAtlasToken {
    88  		t.Fatal("Expected warn flag to be set when getting token from atlas env var.")
    89  	}
    90  }
    91  
    92  func TestPostProcessor_Configure_Good(t *testing.T) {
    93  	config := testGoodConfig()
    94  	server := newSecureServer("foo", nil)
    95  	defer server.Close()
    96  	config["vagrant_cloud_url"] = server.URL
    97  	var p PostProcessor
    98  	if err := p.Configure(config); err != nil {
    99  		t.Fatalf("err: %s", err)
   100  	}
   101  }
   102  
   103  func TestPostProcessor_Configure_Bad(t *testing.T) {
   104  	config := testBadConfig()
   105  	server := newSecureServer("foo", nil)
   106  	defer server.Close()
   107  	config["vagrant_cloud_url"] = server.URL
   108  	var p PostProcessor
   109  	if err := p.Configure(config); err == nil {
   110  		t.Fatalf("should have err")
   111  	}
   112  }
   113  
   114  func testUi() *packer.BasicUi {
   115  	return &packer.BasicUi{
   116  		Reader: new(bytes.Buffer),
   117  		Writer: new(bytes.Buffer),
   118  	}
   119  }
   120  
   121  func TestPostProcessor_ImplementsPostProcessor(t *testing.T) {
   122  	var _ packer.PostProcessor = new(PostProcessor)
   123  }
   124  
   125  func TestProviderFromBuilderName(t *testing.T) {
   126  	if providerFromBuilderName("foobar") != "foobar" {
   127  		t.Fatal("should copy unknown provider")
   128  	}
   129  
   130  	if providerFromBuilderName("vmware") != "vmware_desktop" {
   131  		t.Fatal("should convert provider")
   132  	}
   133  }