Return an entire options struct
parent
250e00564b
commit
9b1d2da478
|
@ -57,19 +57,26 @@ func releaseURL(binaryName, version, osName, archName string) string {
|
|||
return fmt.Sprintf("https://storage.googleapis.com/kubernetes-release/release/%s/bin/%s/%s/%s", version, osName, archName, binaryName)
|
||||
}
|
||||
|
||||
// checksumVerifier returns the binary checksum URL and hash method
|
||||
func checksumVerifier(binaryName, version, osName, archName string) (string, crypto.Hash, error) {
|
||||
binURL := releaseURL(binaryName, version, osName, archName)
|
||||
// downloadOptions returns appropriate download options for a
|
||||
func downloadOptions(url string, version string) (download.FileOptions, error) {
|
||||
fo := download.FileOptions{
|
||||
Mkdirs: download.MkdirAll,
|
||||
Options: download.Options{
|
||||
ChecksumHash: crypto.SHA1,
|
||||
Checksum: url + ".sha1",
|
||||
},
|
||||
}
|
||||
|
||||
v, err := semver.Make(version[1:])
|
||||
if err != nil {
|
||||
return "", 0, err
|
||||
return fo, err
|
||||
}
|
||||
|
||||
if v.GTE(semver.MustParse("1.17.0")) {
|
||||
return binURL + ".sha256", crypto.SHA256, nil
|
||||
fo.ChecksumHash = crypto.SHA256
|
||||
fo.Checksum = url + ".sha256"
|
||||
}
|
||||
return binURL + ".sha1", crypto.SHA1, nil
|
||||
return fo, nil
|
||||
}
|
||||
|
||||
// CacheBinary will cache a binary on the host
|
||||
|
@ -94,17 +101,10 @@ func CacheBinary(binary, version, osName, archName string) (string, error) {
|
|||
return "", errors.Wrapf(err, "mkdir %s", targetDir)
|
||||
}
|
||||
|
||||
options := download.FileOptions{
|
||||
Mkdirs: download.MkdirAll,
|
||||
}
|
||||
|
||||
ckURL, ckAlgo, err := checksumVerifier(binary, version, osName, archName)
|
||||
options, err := downloadOptions(url, version)
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "verifier")
|
||||
return "", errors.Wrap(err, "options")
|
||||
}
|
||||
options.Checksum = ckURL
|
||||
options.ChecksumHash = ckAlgo
|
||||
|
||||
glog.Infof("Downloading %s: options: %+v", url, options)
|
||||
|
||||
out.T(out.FileDownload, "Downloading {{.name}} {{.version}}", out.V{"name": binary, "version": version})
|
||||
|
|
|
@ -17,12 +17,15 @@ limitations under the License.
|
|||
package machine
|
||||
|
||||
import (
|
||||
"crypto"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"runtime"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/jimmidyson/go-download"
|
||||
"k8s.io/minikube/pkg/minikube/assets"
|
||||
"k8s.io/minikube/pkg/minikube/bootstrapper"
|
||||
"k8s.io/minikube/pkg/minikube/command"
|
||||
|
@ -215,3 +218,57 @@ func TestCacheBinary(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestDownloadOptions(t *testing.T) {
|
||||
var tc = []struct {
|
||||
url string
|
||||
version string
|
||||
want download.FileOptions
|
||||
}{
|
||||
{
|
||||
url: "https://s/kubernetes-release/release/v1.16.0/bin/amd64/kubectl",
|
||||
version: "v1.16.0",
|
||||
want: download.FileOptions{
|
||||
download.Options{
|
||||
Checksum: "https://s/kubernetes-release/release/v1.16.0/bin/amd64/kubectl.sha1",
|
||||
ChecksumHash: crypto.SHA1,
|
||||
},
|
||||
download.MkdirAll,
|
||||
},
|
||||
},
|
||||
{
|
||||
url: "https://s/kubernetes-release/release/v1.10.0/bin/hp9k/kubeadm",
|
||||
version: "v1.10.0",
|
||||
want: download.FileOptions{
|
||||
download.Options{
|
||||
Checksum: "https://s/kubernetes-release/release/v1.10.0/bin/hp9k/kubeadm.sha1",
|
||||
ChecksumHash: crypto.SHA1,
|
||||
},
|
||||
download.MkdirAll,
|
||||
},
|
||||
},
|
||||
{
|
||||
url: "https://s/kubernetes-release/release/v1.18.0/bin/arm64/kubelet",
|
||||
version: "v1.18.0",
|
||||
want: download.FileOptions{
|
||||
download.Options{
|
||||
Checksum: "https://s/kubernetes-release/release/v1.18.0/bin/arm64/kubelet.sha256",
|
||||
ChecksumHash: crypto.SHA256,
|
||||
},
|
||||
download.MkdirAll,
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, test := range tc {
|
||||
t.Run(test.version, func(t *testing.T) {
|
||||
got, err := downloadOptions(test.url, test.version)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
|
||||
if diff := cmp.Diff(test.want, got); diff != "" {
|
||||
t.Errorf("unexpected options(-want +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue