Implement fix, add comments so it's more apparent why we're doing special logic

This commit is contained in:
Chris Bednarski 2015-08-14 17:49:08 -07:00
parent 7ecfb057ff
commit 6e8c6a15ad
2 changed files with 17 additions and 10 deletions

View File

@ -115,7 +115,10 @@ func (d *DownloadClient) Get() (string, error) {
// Files when we don't copy the file are special cased.
var f *os.File
var finalPath string
sourcePath := ""
if url.Scheme == "file" && !d.config.CopyFile {
// This is a special case where we use a source file that already exists
// locally and we don't make a copy. Normally we would copy or download.
finalPath = url.Path
log.Printf("Using local file: %s", finalPath)
@ -123,6 +126,8 @@ func (d *DownloadClient) Get() (string, error) {
if runtime.GOOS == "windows" && len(finalPath) > 0 && finalPath[0] == '/' {
finalPath = finalPath[1:len(finalPath)]
}
// Keep track of the source so we can make sure not to delete this later
sourcePath = finalPath
} else {
finalPath = d.config.TargetPath
@ -150,8 +155,10 @@ func (d *DownloadClient) Get() (string, error) {
var verify bool
verify, err = d.VerifyChecksum(finalPath)
if err == nil && !verify {
// Delete the file
os.Remove(finalPath)
// Only delete the file if we made a copy or downloaded it
if sourcePath != finalPath {
os.Remove(finalPath)
}
err = fmt.Errorf(
"checksums didn't match expected: %s",

View File

@ -340,6 +340,10 @@ func TestHashForType(t *testing.T) {
}
}
// TestDownloadFileUrl tests a special case where we use a local file for
// iso_url. In this case we can still verify the checksum but we should not
// delete the file if the checksum fails. Instead we'll just error and let the
// user fix the checksum.
func TestDownloadFileUrl(t *testing.T) {
cwd, err := os.Getwd()
if err != nil {
@ -361,14 +365,10 @@ func TestDownloadFileUrl(t *testing.T) {
client := NewDownloadClient(config)
filename, err := client.Get()
defer os.Remove(config.TargetPath)
if err != nil {
t.Fatalf("Failed to download test file")
}
if sourcePath != filename {
t.Errorf("Filename doesn't match; expected %s got %s", sourcePath, filename)
// Verify that we fail to match the checksum
_, err = client.Get()
if err.Error() != "checksums didn't match expected: 6e6f7065" {
t.Fatalf("Unexpected failure; expected checksum not to match")
}
if _, err = os.Stat(sourcePath); err != nil {