2013-08-22 14:32:59 -04:00
|
|
|
package packer
|
|
|
|
|
2013-11-02 23:47:23 -04:00
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
)
|
|
|
|
|
2013-08-22 14:32:59 -04:00
|
|
|
// MockBuilder is an implementation of Builder that can be used for tests.
|
|
|
|
// You can set some fake return values and you can keep track of what
|
|
|
|
// methods were called on the builder. It is fairly basic.
|
|
|
|
type MockBuilder struct {
|
2013-11-02 23:31:12 -04:00
|
|
|
ArtifactId string
|
|
|
|
PrepareWarnings []string
|
2013-11-02 23:47:23 -04:00
|
|
|
RunErrResult bool
|
|
|
|
RunNilResult bool
|
2013-08-22 14:32:59 -04:00
|
|
|
|
|
|
|
PrepareCalled bool
|
|
|
|
PrepareConfig []interface{}
|
|
|
|
RunCalled bool
|
|
|
|
RunHook Hook
|
|
|
|
RunUi Ui
|
|
|
|
CancelCalled bool
|
|
|
|
}
|
|
|
|
|
2013-11-02 23:31:12 -04:00
|
|
|
func (tb *MockBuilder) Prepare(config ...interface{}) ([]string, error) {
|
2013-08-22 14:32:59 -04:00
|
|
|
tb.PrepareCalled = true
|
|
|
|
tb.PrepareConfig = config
|
2013-11-02 23:31:12 -04:00
|
|
|
return tb.PrepareWarnings, nil
|
2013-08-22 14:32:59 -04:00
|
|
|
}
|
|
|
|
|
Use the hashicorp/go-getter to download files
* removed packer.Cache and references since packer.Cache is never used except in the download step. The download step now uses the new func packer.CachePath(targetPath) for this, the behavior is the same.
* removed download code from packer that was reimplemented into the go-getter library: progress bar, http download restart, checksuming from file, skip already downloaded files, symlinking, make a download cancellable by context.
* on windows if packer is running without symlinking rights and we are getting a local file, the file will be copied instead to avoid errors.
* added unit tests for step_download that are now CI tested on windows, mac & linux.
* files are now downloaded under cache dir `sha1(filename + "?checksum=" + checksum) + file_extension`
* since the output dir is based on the source url and the checksum, when the checksum fails, the file is auto deleted.
* a download file is protected and locked by a file lock,
* updated docs
* updated go modules and vendors
2019-03-13 07:11:58 -04:00
|
|
|
func (tb *MockBuilder) Run(ui Ui, h Hook) (Artifact, error) {
|
2013-08-22 14:32:59 -04:00
|
|
|
tb.RunCalled = true
|
|
|
|
tb.RunHook = h
|
|
|
|
tb.RunUi = ui
|
2013-11-02 23:47:23 -04:00
|
|
|
|
|
|
|
if tb.RunErrResult {
|
|
|
|
return nil, errors.New("foo")
|
|
|
|
}
|
|
|
|
|
|
|
|
if tb.RunNilResult {
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
2015-05-26 12:14:29 -04:00
|
|
|
if h != nil {
|
2015-06-15 13:26:46 -04:00
|
|
|
if err := h.Run(HookProvision, ui, new(MockCommunicator), nil); err != nil {
|
2015-05-26 12:14:29 -04:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-22 14:32:59 -04:00
|
|
|
return &MockArtifact{
|
|
|
|
IdValue: tb.ArtifactId,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (tb *MockBuilder) Cancel() {
|
|
|
|
tb.CancelCalled = true
|
|
|
|
}
|