From 77ce2b39d86794e9245afdc3815905478f1dad1f Mon Sep 17 00:00:00 2001 From: Dom Del Nano Date: Mon, 15 Mar 2021 03:31:21 -0700 Subject: [PATCH] Fix the version parsing in ChecksumFileEntry.init() so that plugins whose name contain v's can `packer init` (#10760) * fix * test --- packer/plugin-getter/plugins.go | 6 +++--- packer/plugin-getter/plugins_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/packer/plugin-getter/plugins.go b/packer/plugin-getter/plugins.go index 9595b67a0..8355afd87 100644 --- a/packer/plugin-getter/plugins.go +++ b/packer/plugin-getter/plugins.go @@ -305,12 +305,12 @@ func (e ChecksumFileEntry) Arch() string { return e.arch } // func (e *ChecksumFileEntry) init(req *Requirement) (err error) { filename := e.Filename - res := strings.TrimLeft(filename, req.FilenamePrefix()) + res := strings.TrimPrefix(filename, req.FilenamePrefix()) // res now looks like v0.2.12_x5.0_freebsd_amd64.zip e.ext = filepath.Ext(res) - res = strings.TrimRight(res, e.ext) + res = strings.TrimSuffix(res, e.ext) // res now looks like v0.2.12_x5.0_freebsd_amd64 parts := strings.Split(res, "_") @@ -326,7 +326,7 @@ func (e *ChecksumFileEntry) init(req *Requirement) (err error) { func (e *ChecksumFileEntry) validate(expectedVersion string, installOpts BinaryInstallationOptions) error { if e.binVersion != expectedVersion { - return fmt.Errorf("wrong version, expected %s ", expectedVersion) + return fmt.Errorf("wrong version: '%s' does not match expected %s ", e.binVersion, expectedVersion) } if e.os != installOpts.OS || e.arch != installOpts.ARCH { return fmt.Errorf("wrong system, expected %s_%s ", installOpts.OS, installOpts.ARCH) diff --git a/packer/plugin-getter/plugins_test.go b/packer/plugin-getter/plugins_test.go index bbf9745d6..fcd0a18d5 100644 --- a/packer/plugin-getter/plugins_test.go +++ b/packer/plugin-getter/plugins_test.go @@ -27,6 +27,32 @@ var ( pluginFolderWrongChecksums = filepath.Join("testdata", "wrong_checksums") ) +func TestChecksumFileEntry_init(t *testing.T) { + expectedVersion := "v0.3.0" + req := &Requirement{ + Identifier: &addrs.Plugin{ + Hostname: "github.com", + Namespace: "ddelnano", + Type: "xenserver", + }, + } + + checkSum := &ChecksumFileEntry{ + Filename: fmt.Sprintf("packer-plugin-xenserver_%s_x5.0_darwin_amd64.zip", expectedVersion), + Checksum: "0f5969b069b9c0a58f2d5786c422341c70dfe17bd68f896fcbd46677e8c913f1", + } + + err := checkSum.init(req) + + if err != nil { + t.Fatalf("ChecksumFileEntry.init failure: %v", err) + } + + if checkSum.binVersion != expectedVersion { + t.Errorf("failed to parse ChecksumFileEntry properly expected version '%s' but found '%s'", expectedVersion, checkSum.binVersion) + } +} + func TestPlugin_ListInstallations(t *testing.T) { type fields struct {