Skip to content

Commit dd0d344

Browse files
authored
Merge pull request #1290 from saschagrunert/kubepkg-tests
Enhance kubepkg testing
2 parents 44fe53c + 8b0f1b7 commit dd0d344

File tree

5 files changed

+650
-104
lines changed

5 files changed

+650
-104
lines changed

pkg/kubepkg/BUILD.bazel

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ go_library(
1515
"//pkg/release:go_default_library",
1616
"//pkg/util:go_default_library",
1717
"@com_github_blang_semver//:go_default_library",
18+
"@com_github_google_go_github_v29//github:go_default_library",
1819
"@com_github_pkg_errors//:go_default_library",
1920
"@com_github_sirupsen_logrus//:go_default_library",
2021
],
@@ -31,6 +32,7 @@ filegroup(
3132
name = "all-srcs",
3233
srcs = [
3334
":package-srcs",
35+
"//pkg/kubepkg/kubepkgfakes:all-srcs",
3436
"//pkg/kubepkg/options:all-srcs",
3537
],
3638
tags = ["automanaged"],
@@ -42,9 +44,9 @@ go_test(
4244
srcs = ["kubepkg_test.go"],
4345
embed = [":go_default_library"],
4446
deps = [
45-
"//pkg/github/githubfakes:go_default_library",
47+
"//pkg/kubepkg/kubepkgfakes:go_default_library",
4648
"//pkg/kubepkg/options:go_default_library",
47-
"//pkg/release/releasefakes:go_default_library",
49+
"@com_github_pkg_errors//:go_default_library",
4850
"@com_github_stretchr_testify//require:go_default_library",
4951
],
5052
)

pkg/kubepkg/kubepkg.go

Lines changed: 78 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/pkg/errors"
3030
"github.com/sirupsen/logrus"
3131

32+
gogithub "github.com/google/go-github/v29/github"
3233
"k8s.io/release/pkg/command"
3334
"k8s.io/release/pkg/github"
3435
"k8s.io/release/pkg/kubepkg/options"
@@ -44,8 +45,8 @@ const (
4445
ChannelNightly ChannelType = "nightly"
4546

4647
minimumKubernetesVersion = "1.13.0"
47-
minimumCNIVersion = "0.7.5"
48-
pre117CNIVersion = "0.7.5"
48+
MinimumCNIVersion = "0.7.5"
49+
Pre117CNIVersion = "0.7.5"
4950

5051
kubeadmConf = "10-kubeadm.conf"
5152
)
@@ -85,18 +86,47 @@ var (
8586

8687
type Client struct {
8788
options *options.Options
88-
version *release.Version
89-
github *github.GitHub
89+
impl Impl
9090
}
9191

9292
func New(o *options.Options) *Client {
9393
return &Client{
9494
options: o,
95-
version: release.NewVersion(),
96-
github: github.New(),
95+
impl: &impl{},
9796
}
9897
}
9998

99+
func (c *Client) SetImpl(impl Impl) {
100+
c.impl = impl
101+
}
102+
103+
type impl struct{}
104+
105+
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
106+
//counterfeiter:generate . Impl
107+
type Impl interface {
108+
RunSuccessWithWorkDir(workDir, cmd string, args ...string) error
109+
RunSuccess(workDir, cmd string, args ...string) error
110+
Releases(owner, repo string, includePrereleases bool) ([]*gogithub.RepositoryRelease, error)
111+
GetKubeVersion(versionType release.VersionType) (string, error)
112+
}
113+
114+
func (i *impl) RunSuccessWithWorkDir(workDir, cmd string, args ...string) error {
115+
return command.NewWithWorkDir(workDir, cmd, args...).RunSuccess()
116+
}
117+
118+
func (i *impl) RunSuccess(workDir, cmd string, args ...string) error {
119+
return command.New(cmd, args...).RunSuccess()
120+
}
121+
122+
func (i *impl) Releases(owner, repo string, includePrereleases bool) ([]*gogithub.RepositoryRelease, error) {
123+
return github.New().Releases(owner, repo, includePrereleases)
124+
}
125+
126+
func (i *impl) GetKubeVersion(versionType release.VersionType) (string, error) {
127+
return release.NewVersion().GetKubeVersion(versionType)
128+
}
129+
100130
type Build struct {
101131
Type options.BuildType
102132
Package string
@@ -250,12 +280,12 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
250280
}
251281
}
252282

253-
bc.KubernetesVersion, err = c.getKubernetesVersion(pd)
283+
bc.KubernetesVersion, err = c.GetKubernetesVersion(pd)
254284
if err != nil {
255285
return errors.Wrap(err, "getting Kubernetes version")
256286
}
257287

258-
bc.DownloadLinkBase, err = c.getDownloadLinkBase(pd)
288+
bc.DownloadLinkBase, err = c.GetDownloadLinkBase(pd)
259289
if err != nil {
260290
return errors.Wrap(err, "getting Kubernetes download link base")
261291
}
@@ -266,14 +296,14 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
266296
// of "+" with "-", so that we build with a valid Debian package version.
267297
bc.KubernetesVersion = strings.Replace(bc.KubernetesVersion, "+", "-", 1)
268298

269-
bc.Version, err = c.getPackageVersion(pd)
299+
bc.Version, err = c.GetPackageVersion(pd)
270300
if err != nil {
271301
return errors.Wrap(err, "getting package version")
272302
}
273303

274304
logrus.Infof("%s package version: %s", bc.Name, bc.Version)
275305

276-
bc.Dependencies, err = getDependencies(pd)
306+
bc.Dependencies, err = GetDependencies(pd)
277307
if err != nil {
278308
return errors.Wrap(err, "getting dependencies")
279309
}
@@ -282,16 +312,16 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
282312

283313
bc.BuildArch = getBuildArch(bc.GoArch, bc.Type)
284314

285-
bc.CNIDownloadLink, err = getCNIDownloadLink(pd, bc.GoArch)
315+
bc.CNIDownloadLink, err = GetCNIDownloadLink(pd, bc.GoArch)
286316
if err != nil {
287317
return errors.Wrap(err, "getting CNI download link")
288318
}
289319

290320
logrus.Infof("Building %s package for %s/%s architecture...", bc.Package, bc.GoArch, bc.BuildArch)
291-
return bc.run()
321+
return c.run(bc)
292322
}
293323

294-
func (bc *buildConfig) run() error {
324+
func (c *Client) run(bc *buildConfig) error {
295325
workspaceInfo, err := os.Stat(bc.workspace)
296326
if err != nil {
297327
return err
@@ -323,31 +353,30 @@ func (bc *buildConfig) run() error {
323353
case options.BuildDeb:
324354
logrus.Infof("Running dpkg-buildpackage for %s (%s/%s)", bc.Package, bc.GoArch, bc.BuildArch)
325355

326-
dpkgErr := command.NewWithWorkDir(
356+
if err := c.impl.RunSuccessWithWorkDir(
327357
specDirWithArch,
328358
"dpkg-buildpackage",
329359
"--unsigned-source",
330360
"--unsigned-changes",
331361
"--build=binary",
332362
"--host-arch",
333363
bc.BuildArch,
334-
).RunSuccess()
335-
336-
if dpkgErr != nil {
337-
return dpkgErr
364+
); err != nil {
365+
return errors.Wrap(err, "running debian package build")
338366
}
339367

340368
fileName := fmt.Sprintf("%s_%s-%s_%s.deb", bc.Package, bc.Version, bc.Revision, bc.BuildArch)
341369
dstParts := []string{"bin", string(bc.Channel), fileName}
342370

343371
dstPath := filepath.Join(dstParts...)
344-
if mkdirErr := os.MkdirAll(dstPath, os.FileMode(0777)); mkdirErr != nil {
345-
return mkdirErr
372+
if err := os.MkdirAll(dstPath, os.FileMode(0777)); err != nil {
373+
return err
346374
}
347375

348-
mvErr := command.New("mv", filepath.Join(specDir, fileName), dstPath).RunSuccess()
349-
if mvErr != nil {
350-
return mvErr
376+
if err := c.impl.RunSuccess(
377+
"mv", filepath.Join(specDir, fileName), dstPath,
378+
); err != nil {
379+
return err
351380
}
352381

353382
logrus.Infof("Successfully built %s", dstPath)
@@ -358,17 +387,17 @@ func (bc *buildConfig) run() error {
358387
return nil
359388
}
360389

361-
func (c *Client) getPackageVersion(packageDef *PackageDefinition) (string, error) {
390+
func (c *Client) GetPackageVersion(packageDef *PackageDefinition) (string, error) {
362391
if packageDef == nil {
363392
return "", errors.New("package definition cannot be nil")
364393
}
365394

366395
logrus.Infof("Setting version for %s package...", packageDef.Name)
367396
switch packageDef.Name {
368397
case "kubernetes-cni":
369-
return getCNIVersion(packageDef)
398+
return GetCNIVersion(packageDef)
370399
case "cri-tools":
371-
return c.getCRIToolsVersion(packageDef)
400+
return c.GetCRIToolsVersion(packageDef)
372401
}
373402

374403
logrus.Infof(
@@ -378,7 +407,7 @@ func (c *Client) getPackageVersion(packageDef *PackageDefinition) (string, error
378407
return util.TrimTagPrefix(packageDef.KubernetesVersion), nil
379408
}
380409

381-
func (c *Client) getKubernetesVersion(packageDef *PackageDefinition) (string, error) {
410+
func (c *Client) GetKubernetesVersion(packageDef *PackageDefinition) (string, error) {
382411
if packageDef == nil {
383412
return "", errors.New("package definition cannot be nil")
384413
}
@@ -389,15 +418,15 @@ func (c *Client) getKubernetesVersion(packageDef *PackageDefinition) (string, er
389418
}
390419
switch packageDef.Channel {
391420
case ChannelTesting:
392-
return c.version.GetKubeVersion(release.VersionTypeStablePreRelease)
421+
return c.impl.GetKubeVersion(release.VersionTypeStablePreRelease)
393422
case ChannelNightly:
394-
return c.version.GetKubeVersion(release.VersionTypeCILatest)
423+
return c.impl.GetKubeVersion(release.VersionTypeCILatest)
395424
}
396425

397-
return c.version.GetKubeVersion(release.VersionTypeStable)
426+
return c.impl.GetKubeVersion(release.VersionTypeStable)
398427
}
399428

400-
func getCNIVersion(packageDef *PackageDefinition) (string, error) {
429+
func GetCNIVersion(packageDef *PackageDefinition) (string, error) {
401430
if packageDef == nil {
402431
return "", errors.New("package definition cannot be nil")
403432
}
@@ -416,20 +445,20 @@ func getCNIVersion(packageDef *PackageDefinition) (string, error) {
416445

417446
if packageDef.Version != "" {
418447
if kubeSemver.LT(v117) {
419-
logrus.Infof("Kubernetes version earlier than 1.17 must use CNI version <= %s", pre117CNIVersion)
420-
logrus.Infof("Setting CNI version to %s", pre117CNIVersion)
421-
return pre117CNIVersion, nil
448+
logrus.Infof("Kubernetes version earlier than 1.17 must use CNI version <= %s", Pre117CNIVersion)
449+
logrus.Infof("Setting CNI version to %s", Pre117CNIVersion)
450+
return Pre117CNIVersion, nil
422451
}
423452

424453
logrus.Infof("Setting CNI version to %s", packageDef.Version)
425454
return packageDef.Version, nil
426455
}
427456

428-
logrus.Infof("Setting CNI version to %s", minimumCNIVersion)
429-
return minimumCNIVersion, nil
457+
logrus.Infof("Setting CNI version to %s", MinimumCNIVersion)
458+
return MinimumCNIVersion, nil
430459
}
431460

432-
func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, error) {
461+
func (c *Client) GetCRIToolsVersion(packageDef *PackageDefinition) (string, error) {
433462
if packageDef == nil {
434463
return "", errors.New("package definition cannot be nil")
435464
}
@@ -470,7 +499,7 @@ func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, erro
470499

471500
criToolsVersion := fmt.Sprintf("%s.%s.0", criToolsMajor, criToolsMinor)
472501

473-
releases, err := c.github.Releases("kubernetes-sigs", "cri-tools", false)
502+
releases, err := c.impl.Releases("kubernetes-sigs", "cri-tools", false)
474503
if err != nil {
475504
return "", err
476505
}
@@ -506,27 +535,27 @@ func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, erro
506535
return criToolsVersion, nil
507536
}
508537

509-
func (c *Client) getDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
538+
func (c *Client) GetDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
510539
if packageDef == nil {
511540
return "", errors.New("package definition cannot be nil")
512541
}
513542

514543
if packageDef.Channel == ChannelNightly {
515-
return c.getCIBuildsDownloadLinkBase(packageDef)
544+
return c.GetCIBuildsDownloadLinkBase(packageDef)
516545
}
517546

518-
return getDefaultReleaseDownloadLinkBase(packageDef)
547+
return GetDefaultReleaseDownloadLinkBase(packageDef)
519548
}
520549

521-
func (c *Client) getCIBuildsDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
550+
func (c *Client) GetCIBuildsDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
522551
if packageDef == nil {
523552
return "", errors.New("package definition cannot be nil")
524553
}
525554

526555
ciVersion := packageDef.KubernetesVersion
527556
if ciVersion == "" {
528557
var err error
529-
ciVersion, err = c.version.GetKubeVersion(release.VersionTypeCILatest)
558+
ciVersion, err = c.impl.GetKubeVersion(release.VersionTypeCILatest)
530559
if err != nil {
531560
return "", err
532561
}
@@ -535,7 +564,7 @@ func (c *Client) getCIBuildsDownloadLinkBase(packageDef *PackageDefinition) (str
535564
return fmt.Sprintf("https://dl.k8s.io/ci/%s", util.AddTagPrefix(ciVersion)), nil
536565
}
537566

538-
func getDefaultReleaseDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
567+
func GetDefaultReleaseDownloadLinkBase(packageDef *PackageDefinition) (string, error) {
539568
if packageDef == nil {
540569
return "", errors.New("package definition cannot be nil")
541570
}
@@ -547,7 +576,7 @@ func getDefaultReleaseDownloadLinkBase(packageDef *PackageDefinition) (string, e
547576
), nil
548577
}
549578

550-
func getDependencies(packageDef *PackageDefinition) (map[string]string, error) {
579+
func GetDependencies(packageDef *PackageDefinition) (map[string]string, error) {
551580
if packageDef == nil {
552581
return nil, errors.New("package definition cannot be nil")
553582
}
@@ -556,11 +585,11 @@ func getDependencies(packageDef *PackageDefinition) (map[string]string, error) {
556585

557586
switch packageDef.Name {
558587
case "kubelet":
559-
deps["kubernetes-cni"] = minimumCNIVersion
588+
deps["kubernetes-cni"] = MinimumCNIVersion
560589
case "kubeadm":
561590
deps["kubelet"] = minimumKubernetesVersion
562591
deps["kubectl"] = minimumKubernetesVersion
563-
deps["kubernetes-cni"] = minimumCNIVersion
592+
deps["kubernetes-cni"] = MinimumCNIVersion
564593
deps["cri-tools"] = minimumCRIToolsVersion
565594
}
566595

@@ -571,7 +600,7 @@ func getBuildArch(goArch string, buildType options.BuildType) string {
571600
return buildArchMap[goArch][buildType]
572601
}
573602

574-
func getCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, error) {
603+
func GetCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, error) {
575604
if packageDef == nil {
576605
return "", errors.New("package definition cannot be nil")
577606
}
@@ -581,7 +610,7 @@ func getCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, err
581610
return "", err
582611
}
583612

584-
v075, err := semver.Make(pre117CNIVersion)
613+
v075, err := semver.Make(Pre117CNIVersion)
585614
if err != nil {
586615
return "", err
587616
}

0 commit comments

Comments
 (0)