Skip to content

Commit

Permalink
Add refactor test of build
Browse files Browse the repository at this point in the history
  • Loading branch information
Gilbert MINH committed Jan 16, 2024
1 parent b8310f6 commit 107a7f8
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 53 deletions.
10 changes: 3 additions & 7 deletions cmd/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ type buildOpts struct {
HashListFilePath string `mapstructure:"hash_list_file_path"`

// Build specific options
BuildArgs map[string]string `mapstructure:"extra_build_args"`
BuildEnvs []string `mapstructure:"build_envs"`
BuildArgs map[string]string `mapstructure:"build_args"`
DisableGenerateGraph bool `mapstructure:"no_graph"`
DisableRunTests bool `mapstructure:"no_tests"`
IncludeTests []string `mapstructure:"include_tests"`
Expand Down Expand Up @@ -189,10 +188,8 @@ func init() {
fmt.Sprintf("Build Backend used to run image builds. Supported backends: %v", supportedBackends))
buildCmd.Flags().Int("rate-limit", 1,
"Concurrent number of builds that can run simultaneously")
buildCmd.Flags().StringToString("extra-build-args", map[string]string{},
"List of extra build-args to be applied to each image build.")
buildCmd.Flags().StringSlice("build-envs", []string{},
"List of extra envs to be applied to each image build.")
buildCmd.Flags().StringToString("build-args", map[string]string{},
"List of extra build-args to be applied on each image build.")
}

func doBuild(opts buildOpts) error {
Expand Down Expand Up @@ -226,7 +223,6 @@ func doBuild(opts buildOpts) error {

shell := &exec.ShellExecutor{
Dir: workingDir,
Env: opts.BuildEnvs,
}
dockerBuilderTagger := docker.NewImageBuilderTagger(shell, opts.DryRun)

Expand Down
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ require (
gitlab.com/radiofrance/kubecli v0.4.0
golang.org/x/sync v0.6.0
golang.org/x/term v0.16.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
k8s.io/api v0.29.0
k8s.io/apimachinery v0.29.0
Expand Down Expand Up @@ -93,7 +94,7 @@ require (
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
Expand All @@ -116,6 +117,7 @@ require (
github.com/pierrec/lz4/v4 v4.1.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
Expand All @@ -139,7 +141,6 @@ require (
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
k8s.io/component-base v0.29.0 // indirect
k8s.io/klog/v2 v2.110.1 // indirect
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
Expand Down
5 changes: 4 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -191,8 +191,9 @@ github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0V
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo=
github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
Expand Down Expand Up @@ -250,6 +251,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
Expand Down
187 changes: 144 additions & 43 deletions pkg/dib/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import (
"fmt"
"testing"

"github.com/radiofrance/dib/pkg/ratelimit"
"github.com/stretchr/testify/require"

"github.com/radiofrance/dib/pkg/dag"
"github.com/radiofrance/dib/pkg/dib"
"github.com/radiofrance/dib/pkg/dockerfile"
Expand All @@ -13,10 +16,10 @@ import (
"github.com/stretchr/testify/assert"
)

func Test_Rebuild_NothingToDo(t *testing.T) {
func Test_RebuildNode_NothingToDo(t *testing.T) {
t.Parallel()

builder := &mock.Builder{}
var builder = &mock.Builder{}

Check failure on line 22 in pkg/dib/build_test.go

View workflow job for this annotation

GitHub Actions / Golang CI lint

File is not `gofumpt`-ed (gofumpt)
var testRunners []types.TestRunner
node := createNode()
node.Image.NeedsRebuild = false
Expand All @@ -31,28 +34,7 @@ func Test_Rebuild_NothingToDo(t *testing.T) {
assert.Equal(t, report.BuildStatusSkipped, buildReport.BuildStatus)
assert.Equal(t, report.TestsStatusSkipped, buildReport.TestsStatus)

assert.Equal(t, 0, builder.CallCount)
}

func Test_Rebuild_BuildAndTest(t *testing.T) {
t.Parallel()

builder := &mock.Builder{}
var testRunners []types.TestRunner
node := createNode()
node.Image.NeedsRebuild = true
node.Image.NeedsTests = true
dibReport := createDibReport()
extraBuildArgs := map[string]string{}

buildReport := dib.RebuildNode(node, builder, extraBuildArgs, testRunners, mock.RateLimiter{}, dib.ImageMetadata{},
"DIB_MANAGED_VERSION", false,
dibReport.GetBuildLogsDir(), dibReport.GetJunitReportDir(), dibReport.GetTrivyReportDir())

assert.Equal(t, report.BuildStatusSuccess, buildReport.BuildStatus)
assert.Equal(t, report.TestsStatusPassed, buildReport.TestsStatus)

assert.Equal(t, 1, builder.CallCount)
assert.Equal(t, 0, builder.CallCount, "Builder got called an incorrect number of times")
}

func Test_Rebuild_TestOnly(t *testing.T) {
Expand All @@ -63,17 +45,20 @@ func Test_Rebuild_TestOnly(t *testing.T) {
node := createNode()
node.Image.NeedsRebuild = false
node.Image.NeedsTests = true
dibReport := createDibReport()
extraBuildArgs := map[string]string{}
graph := &dag.DAG{}
graph.AddNode(node)

buildReport := dib.RebuildNode(node, builder, extraBuildArgs, testRunners, mock.RateLimiter{}, dib.ImageMetadata{},
"DIB_MANAGED_VERSION", false,
dibReport.GetBuildLogsDir(), dibReport.GetJunitReportDir(), dibReport.GetTrivyReportDir())
rateLimiter := ratelimit.NewChannelRateLimiter(1)

assert.Equal(t, report.BuildStatusSkipped, buildReport.BuildStatus)
assert.Equal(t, report.TestsStatusPassed, buildReport.TestsStatus)
dibReport := createDibReport()
extraBuildArgs := map[string]string{}

assert.Equal(t, 0, builder.CallCount)
err := dib.Rebuild(graph, builder, extraBuildArgs, testRunners, rateLimiter, "DIB_MANAGED_VERSION", true, dibReport)
require.NoError(t, err)
require.Equal(t, 1, len(dibReport.BuildReports), "The number of build reports generated is not correct")

Check failure on line 58 in pkg/dib/build_test.go

View workflow job for this annotation

GitHub Actions / Golang CI lint

len: use require.Len (testifylint)
assert.Equal(t, report.BuildStatusSkipped, dibReport.BuildReports[0].BuildStatus)
assert.Equal(t, report.TestsStatusPassed, dibReport.BuildReports[0].TestsStatus)
assert.Equal(t, 0, builder.CallCount, "Builder got called an incorrect number of times")
}

func Test_Rebuild_TestNotSupported(t *testing.T) {
Expand All @@ -85,19 +70,22 @@ func Test_Rebuild_TestNotSupported(t *testing.T) {
ShouldSupport: false,
}}
node := createNode()
node.Image.NeedsRebuild = false
node.Image.NeedsRebuild = true
node.Image.NeedsTests = true
dibReport := createDibReport()
extraBuildArgs := map[string]string{}
graph := &dag.DAG{}
graph.AddNode(node)

buildReport := dib.RebuildNode(node, builder, extraBuildArgs, testRunners, mock.RateLimiter{}, dib.ImageMetadata{},
"DIB_MANAGED_VERSION", false,
dibReport.GetBuildLogsDir(), dibReport.GetJunitReportDir(), dibReport.GetTrivyReportDir())
rateLimiter := ratelimit.NewChannelRateLimiter(1)

assert.Equal(t, report.BuildStatusSkipped, buildReport.BuildStatus)
assert.Equal(t, report.TestsStatusPassed, buildReport.TestsStatus)
dibReport := createDibReport()
extraBuildArgs := map[string]string{}

assert.Equal(t, 0, builder.CallCount)
err := dib.Rebuild(graph, builder, extraBuildArgs, testRunners, rateLimiter, "DIB_MANAGED_VERSION", true, dibReport)
require.NoError(t, err)
require.Equal(t, 1, len(dibReport.BuildReports), "The number of build reports generated is not correct")

Check failure on line 85 in pkg/dib/build_test.go

View workflow job for this annotation

GitHub Actions / Golang CI lint

len: use require.Len (testifylint)
assert.Equal(t, report.BuildStatusSuccess, dibReport.BuildReports[0].BuildStatus)
assert.Equal(t, report.TestsStatusPassed, dibReport.BuildReports[0].TestsStatus)
assert.Equal(t, 1, builder.CallCount, "Builder got called an incorrect number of times")
}

func Test_Rebuild_TestError(t *testing.T) {
Expand All @@ -123,7 +111,120 @@ func Test_Rebuild_TestError(t *testing.T) {
assert.Equal(t, report.TestsStatusFailed, buildReport.TestsStatus)
assert.Equal(t, "mock test failed", buildReport.FailureMessage)

assert.Equal(t, 0, builder.CallCount)
assert.Equal(t, 0, builder.CallCount, "Builder got called an incorrect number of times")
}

func Test_Rebuild_BuildAndTest(t *testing.T) {
t.Parallel()

builder := &mock.Builder{}
var testRunners []types.TestRunner
node := createNode()
node.Image.NeedsRebuild = true
node.Image.NeedsTests = true
graph := &dag.DAG{}
graph.AddNode(node)

rateLimiter := ratelimit.NewChannelRateLimiter(1)

dibReport := createDibReport()
extraBuildArgs := map[string]string{}

err := dib.Rebuild(graph, builder, extraBuildArgs, testRunners, rateLimiter, "DIB_MANAGED_VERSION", true, dibReport)
require.NoError(t, err)
require.Equal(t, 1, len(dibReport.BuildReports), "The number of build reports generated is not correct")

Check failure on line 135 in pkg/dib/build_test.go

View workflow job for this annotation

GitHub Actions / Golang CI lint

len: use require.Len (testifylint)
assert.Equal(t, report.BuildStatusSuccess, dibReport.BuildReports[0].BuildStatus)
assert.Equal(t, report.TestsStatusPassed, dibReport.BuildReports[0].TestsStatus)
assert.Equal(t, 1, builder.CallCount, "Builder got called an incorrect number of times")
}

func Test_Rebuild_Nothing_To_Do(t *testing.T) {
t.Parallel()

builder := &mock.Builder{}
var testRunners []types.TestRunner
node := createNode()
node.Image.NeedsRebuild = false
node.Image.NeedsTests = false
graph := &dag.DAG{}
graph.AddNode(node)

rateLimiter := ratelimit.NewChannelRateLimiter(1)

dibReport := createDibReport()
extraBuildArgs := map[string]string{}

err := dib.Rebuild(graph, builder, extraBuildArgs, testRunners, rateLimiter, "DIB_MANAGED_VERSION", true, dibReport)
require.NoError(t, err)
assert.Equal(t, 0, len(dibReport.BuildReports), "The number of build reports generated is not correct")

Check failure on line 159 in pkg/dib/build_test.go

View workflow job for this annotation

GitHub Actions / Golang CI lint

empty: use assert.Empty (testifylint)
assert.Equal(t, 0, builder.CallCount, "Builder got called an incorrect number of times")
}

func Test_Rebuild_Parent_And_2_Children(t *testing.T) {
t.Parallel()

builder := &mock.Builder{}
var testRunners []types.TestRunner
nodeParent := createNode()
nodeParent.Image.NeedsRebuild = true
nodeParent.Image.NeedsTests = false

nodeChild1 := createNode()
nodeChild1.Image.NeedsRebuild = true
nodeChild1.Image.NeedsTests = true

nodeChild2 := createNode()
nodeChild2.Image.NeedsRebuild = true
nodeChild2.Image.NeedsTests = true

nodeParent.AddChild(nodeChild1)
nodeParent.AddChild(nodeChild2)
graph := &dag.DAG{}
graph.AddNode(nodeParent)

rateLimiter := ratelimit.NewChannelRateLimiter(1)

dibReport := createDibReport()
extraBuildArgs := map[string]string{}

err := dib.Rebuild(graph, builder, extraBuildArgs, testRunners, rateLimiter, "DIB_MANAGED_VERSION", true, dibReport)
require.NoError(t, err)
assert.Equal(t, 3, len(dibReport.BuildReports), "The number of build reports generated is not correct")

Check failure on line 192 in pkg/dib/build_test.go

View workflow job for this annotation

GitHub Actions / Golang CI lint

len: use assert.Len (testifylint)
assert.Equal(t, 3, builder.CallCount, "Builder got called an incorrect number of times")
}

func Test_Rebuild_Parent_Failed_And_2_Children(t *testing.T) {
t.Parallel()

builder := &mock.Builder{}
var testRunners []types.TestRunner
nodeParent := createNode()
nodeParent.Image.NeedsRebuild = true
nodeParent.Image.NeedsTests = false
nodeParent.Image.RebuildFailed = true

nodeChild1 := createNode()
nodeChild1.Image.NeedsRebuild = true
nodeChild1.Image.NeedsTests = true

nodeChild2 := createNode()
nodeChild2.Image.NeedsRebuild = true
nodeChild2.Image.NeedsTests = true

nodeParent.AddChild(nodeChild1)
nodeParent.AddChild(nodeChild2)
graph := &dag.DAG{}
graph.AddNode(nodeParent)

rateLimiter := ratelimit.NewChannelRateLimiter(1)

dibReport := createDibReport()
extraBuildArgs := map[string]string{}

err := dib.Rebuild(graph, builder, extraBuildArgs, testRunners, rateLimiter, "DIB_MANAGED_VERSION", true, dibReport)
require.NoError(t, err)
assert.Equal(t, 3, len(dibReport.BuildReports), "The number of build reports generated is not correct")

Check failure on line 226 in pkg/dib/build_test.go

View workflow job for this annotation

GitHub Actions / Golang CI lint

len: use assert.Len (testifylint)
assert.Equal(t, 1, builder.CallCount, "Builder got called an incorrect number of times")
}

func createNode() *dag.Node {
Expand All @@ -138,6 +239,6 @@ func createNode() *dag.Node {
}

func createDibReport() *report.Report {
dibReport := report.Init("1.0.0", "reports", false, nil, "")
dibReport := report.Init("1.0.0", "../../target/reports", false, nil, "")
return dibReport
}

0 comments on commit 107a7f8

Please sign in to comment.