github.com/sj26/packer-post-processor-tfvars@v0.1.0/post-processor_test.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"io/ioutil"
     7  	"os"
     8  	"testing"
     9  
    10  	awscommon "github.com/mitchellh/packer/builder/amazon/common"
    11  	"github.com/mitchellh/packer/packer"
    12  )
    13  
    14  func TestPostProcessor_ImplementsPostProcessor(t *testing.T) {
    15  	var _ packer.PostProcessor = new(PostProcessor)
    16  }
    17  
    18  func TestPostProcessor_Export(t *testing.T) {
    19  	postProcessor := testPP(t)
    20  
    21  	tempDir, err := ioutil.TempDir("", "")
    22  	if err != nil {
    23  		t.Error(err)
    24  	}
    25  	defer os.RemoveAll(tempDir)
    26  
    27  	previousDir, err := os.Getwd()
    28  	if err != nil {
    29  		t.Error(err)
    30  	}
    31  
    32  	err = os.Chdir(tempDir)
    33  	if err != nil {
    34  		t.Error(err)
    35  	}
    36  	defer os.Chdir(previousDir)
    37  
    38  	_, _, err = postProcessor.PostProcess(testUi(), testArtifact())
    39  	if err != nil {
    40  		t.Error("Couldn't post-process artifact: ", err)
    41  	}
    42  
    43  	if _, err := os.Stat("packer.tfvars"); err != nil {
    44  		t.Error("Expected packer.tfvars to be created")
    45  	}
    46  
    47  	contents, err := ioutil.ReadFile("packer.tfvars")
    48  	if err != nil {
    49  		t.Error(err)
    50  	}
    51  
    52  	var vars map[string]string
    53  	err = json.Unmarshal(contents, &vars)
    54  	if err != nil {
    55  		t.Error("Couldn't unmarshal JSON: ", err)
    56  	}
    57  
    58  	if _, ok := vars["packer-east-test"]; !ok {
    59  		t.Error("Expected a map key `packer-east-test`: ", vars)
    60  	}
    61  
    62  	if vars["packer-east-test"] != "foo" {
    63  		t.Error("Expected map key `packer-east-test` to be `foo`: ", vars)
    64  	}
    65  
    66  	if _, ok := vars["packer-west-test"]; !ok {
    67  		t.Error("Expected a map key `packer-west-test`: ", vars)
    68  	}
    69  
    70  	if vars["packer-west-test"] != "bar" {
    71  		t.Error("Expected map key `packer-west-test` to be `bar`: ", vars)
    72  	}
    73  }
    74  
    75  // Helpers
    76  
    77  func testConfig() map[string]interface{} {
    78  	return map[string]interface{}{
    79  		"packer_build_name": "test",
    80  	}
    81  }
    82  
    83  func testPP(t *testing.T) *PostProcessor {
    84  	var p PostProcessor
    85  	if err := p.Configure(testConfig()); err != nil {
    86  		t.Fatalf("err: %s", err)
    87  	}
    88  	return &p
    89  }
    90  
    91  func testUi() *packer.BasicUi {
    92  	return &packer.BasicUi{
    93  		Reader: new(bytes.Buffer),
    94  		Writer: new(bytes.Buffer),
    95  	}
    96  }
    97  
    98  func testArtifact() packer.Artifact {
    99  	artifact := &awscommon.Artifact{
   100  		BuilderIdValue: "mitchellh.amazonebs",
   101  		Amis: map[string]string{
   102  			"east": "foo",
   103  			"west": "bar",
   104  		},
   105  	}
   106  
   107  	return artifact
   108  }