github.com/hashicorp/packer@v1.14.3/command/build_timeout_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package command
     5  
     6  import (
     7  	"bytes"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
    12  	"github.com/hashicorp/packer/builder/file"
    13  	"github.com/hashicorp/packer/packer"
    14  	shell_local "github.com/hashicorp/packer/provisioner/shell-local"
    15  	"github.com/hashicorp/packer/provisioner/sleep"
    16  )
    17  
    18  // testCoreConfigBuilder creates a packer CoreConfig that has a file builder
    19  // available. This allows us to test a builder that writes files to disk.
    20  func testCoreConfigSleepBuilder(t *testing.T) *packer.CoreConfig {
    21  	components := packer.ComponentFinder{
    22  		PluginConfig: &packer.PluginConfig{
    23  			Builders: packer.MapOfBuilder{
    24  				"file": func() (packersdk.Builder, error) { return &file.Builder{}, nil },
    25  			},
    26  			Provisioners: packer.MapOfProvisioner{
    27  				"sleep":       func() (packersdk.Provisioner, error) { return &sleep.Provisioner{}, nil },
    28  				"shell-local": func() (packersdk.Provisioner, error) { return &shell_local.Provisioner{}, nil },
    29  			},
    30  		},
    31  	}
    32  	return &packer.CoreConfig{
    33  		Components: components,
    34  	}
    35  }
    36  
    37  // testMetaFile creates a Meta object that includes a file builder
    38  func testMetaSleepFile(t *testing.T) Meta {
    39  	var out, err bytes.Buffer
    40  	return Meta{
    41  		CoreConfig: testCoreConfigSleepBuilder(t),
    42  		Ui: &packersdk.BasicUi{
    43  			Writer:      &out,
    44  			ErrorWriter: &err,
    45  		},
    46  	}
    47  }
    48  
    49  func TestBuildSleepTimeout(t *testing.T) {
    50  	defer cleanup()
    51  
    52  	c := &BuildCommand{
    53  		Meta: testMetaSleepFile(t),
    54  	}
    55  
    56  	args := []string{
    57  		filepath.Join(testFixture("timeout"), "template.json"),
    58  	}
    59  
    60  	defer cleanup()
    61  
    62  	if code := c.Run(args); code == 0 {
    63  		fatalCommand(t, c.Meta)
    64  	}
    65  
    66  	for _, f := range []string{"roses.txt", "fuchsias.txt", "lilas.txt"} {
    67  		if !fileExists(f) {
    68  			t.Errorf("Expected to find %s", f)
    69  		}
    70  	}
    71  
    72  	for _, f := range []string{"campanules.txt"} {
    73  		if fileExists(f) {
    74  			t.Errorf("Expected to not find %s", f)
    75  		}
    76  	}
    77  }