github.com/tonnydourado/packer@v0.6.1-0.20140701134019-5d0cd9676a37/post-processor/vagrant/post-processor_test.go (about) 1 package vagrant 2 3 import ( 4 "bytes" 5 "compress/flate" 6 "github.com/mitchellh/packer/packer" 7 "strings" 8 "testing" 9 ) 10 11 func testConfig() map[string]interface{} { 12 return map[string]interface{}{} 13 } 14 15 func testPP(t *testing.T) *PostProcessor { 16 var p PostProcessor 17 if err := p.Configure(testConfig()); err != nil { 18 t.Fatalf("err: %s", err) 19 } 20 21 return &p 22 } 23 24 func testUi() *packer.BasicUi { 25 return &packer.BasicUi{ 26 Reader: new(bytes.Buffer), 27 Writer: new(bytes.Buffer), 28 } 29 } 30 31 func TestPostProcessor_ImplementsPostProcessor(t *testing.T) { 32 var _ packer.PostProcessor = new(PostProcessor) 33 } 34 35 func TestPostProcessorPrepare_compressionLevel(t *testing.T) { 36 var p PostProcessor 37 38 // Default 39 c := testConfig() 40 delete(c, "compression_level") 41 if err := p.Configure(c); err != nil { 42 t.Fatalf("err: %s", err) 43 } 44 45 config := p.configs[""] 46 if config.CompressionLevel != flate.DefaultCompression { 47 t.Fatalf("bad: %#v", config.CompressionLevel) 48 } 49 50 // Set 51 c = testConfig() 52 c["compression_level"] = 7 53 if err := p.Configure(c); err != nil { 54 t.Fatalf("err: %s", err) 55 } 56 57 config = p.configs[""] 58 if config.CompressionLevel != 7 { 59 t.Fatalf("bad: %#v", config.CompressionLevel) 60 } 61 } 62 63 func TestPostProcessorPrepare_outputPath(t *testing.T) { 64 var p PostProcessor 65 66 // Default 67 c := testConfig() 68 delete(c, "output") 69 err := p.Configure(c) 70 if err != nil { 71 t.Fatalf("err: %s", err) 72 } 73 74 // Bad template 75 c["output"] = "bad {{{{.Template}}}}" 76 err = p.Configure(c) 77 if err == nil { 78 t.Fatal("should have error") 79 } 80 } 81 82 func TestPostProcessorPrepare_subConfigs(t *testing.T) { 83 var p PostProcessor 84 85 // Default 86 c := testConfig() 87 c["compression_level"] = 42 88 c["vagrantfile_template"] = "foo" 89 c["override"] = map[string]interface{}{ 90 "aws": map[string]interface{}{ 91 "compression_level": 7, 92 }, 93 } 94 err := p.Configure(c) 95 if err != nil { 96 t.Fatalf("err: %s", err) 97 } 98 99 if p.configs[""].CompressionLevel != 42 { 100 t.Fatalf("bad: %#v", p.configs[""].CompressionLevel) 101 } 102 103 if p.configs[""].VagrantfileTemplate != "foo" { 104 t.Fatalf("bad: %#v", p.configs[""].VagrantfileTemplate) 105 } 106 107 if p.configs["aws"].CompressionLevel != 7 { 108 t.Fatalf("bad: %#v", p.configs["aws"].CompressionLevel) 109 } 110 111 if p.configs["aws"].VagrantfileTemplate != "foo" { 112 t.Fatalf("bad: %#v", p.configs["aws"].VagrantfileTemplate) 113 } 114 } 115 116 func TestPostProcessorPostProcess_badId(t *testing.T) { 117 artifact := &packer.MockArtifact{ 118 BuilderIdValue: "invalid.packer", 119 } 120 121 _, _, err := testPP(t).PostProcess(testUi(), artifact) 122 if !strings.Contains(err.Error(), "artifact type") { 123 t.Fatalf("err: %s", err) 124 } 125 } 126 127 func TestProviderForName(t *testing.T) { 128 if v, ok := providerForName("virtualbox").(*VBoxProvider); !ok { 129 t.Fatalf("bad: %#v", v) 130 } 131 132 if providerForName("nope") != nil { 133 t.Fatal("should be nil if bad provider") 134 } 135 }