Skip to content

Commit

Permalink
Debugging the integration testing.
Browse files Browse the repository at this point in the history
It seems to be consistently failing (also fix a typo in the file/leg name).

I'm disabling `-v` for `go test` because it interleaves the test output in ways that make it painful to read a single failing test's output when `t.Parallel` is involved.
  • Loading branch information
mattmoor committed Dec 17, 2021
1 parent 78808c9 commit 889ee0e
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 59 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/integration_k8_tests.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Intergration tests (K8s)
name: Integration tests (K8s)

# Triggers the workflow on push or pull request events
# Triggers the workflow on pull request events
on: [pull_request]

concurrency:
Expand Down
12 changes: 6 additions & 6 deletions integration/benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func TestSnapshotBenchmark(t *testing.T) {
kanikoImage := fmt.Sprintf("%s_%d", GetKanikoImage(config.imageRepo, dockerfile), num)
buildArgs := []string{"--build-arg", fmt.Sprintf("NUM=%d", num)}
var benchmarkDir string
benchmarkDir, *err = buildKanikoImage("", dockerfile,
benchmarkDir, *err = buildKanikoImage(t.Logf, "", dockerfile,
buildArgs, []string{}, kanikoImage, contextDir, config.gcsBucket,
config.serviceAccount, false)
if *err != nil {
Expand All @@ -77,11 +77,11 @@ func TestSnapshotBenchmark(t *testing.T) {
}
wg.Wait()

fmt.Println("Number of Files,Total Build Time,Walking Filesystem, Resolving Files")
t.Log("Number of Files,Total Build Time,Walking Filesystem, Resolving Files")
timeMap.Range(func(key interface{}, value interface{}) bool {
d, _ := key.(int)
v, _ := value.(result)
fmt.Println(fmt.Sprintf("%d,%f,%f,%f", d, v.totalBuildTime, v.walkingFiles, v.resolvingFiles))
t.Logf("%d,%f,%f,%f", d, v.totalBuildTime, v.walkingFiles, v.resolvingFiles)
return true
})

Expand Down Expand Up @@ -111,7 +111,7 @@ func newResult(t *testing.T, f string) result {
if c, ok := current["Hashing files"]; ok {
r.hashingFiles = c.Seconds()
}
fmt.Println(r)
t.Log(r)
return r
}

Expand All @@ -128,7 +128,7 @@ func TestSnapshotBenchmarkGcloud(t *testing.T) {
nums := []int{10000, 50000, 100000, 200000, 300000, 500000, 700000}

var wg sync.WaitGroup
fmt.Println("Number of Files,Total Build Time,Walking Filesystem, Resolving Files")
t.Log("Number of Files,Total Build Time,Walking Filesystem, Resolving Files")
for _, num := range nums {
t.Run(fmt.Sprintf("test_benchmark_%d", num), func(t *testing.T) {
wg.Add(1)
Expand All @@ -139,7 +139,7 @@ func TestSnapshotBenchmarkGcloud(t *testing.T) {
return
}
r := newResult(t, filepath.Join(dir, "results"))
fmt.Println(fmt.Sprintf("%d,%f,%f,%f, %f", num, r.totalBuildTime, r.walkingFiles, r.resolvingFiles, r.hashingFiles))
t.Log(fmt.Sprintf("%d,%f,%f,%f, %f", num, r.totalBuildTime, r.walkingFiles, r.resolvingFiles, r.hashingFiles))
wg.Done()
defer os.Remove(dir)
defer os.Chdir(cwd)
Expand Down
30 changes: 19 additions & 11 deletions integration/images.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"runtime"
"strconv"
"strings"
"testing"
"time"

"github.com/GoogleContainerTools/kaniko/pkg/timing"
Expand Down Expand Up @@ -177,16 +178,22 @@ func FindDockerFiles(dockerfilesPath string) ([]string, error) {
// DockerFileBuilder knows how to build docker files using both Kaniko and Docker and
// keeps track of which files have been built.
type DockerFileBuilder struct {
logf Logger
// Holds all available docker files and whether or not they've been built
filesBuilt map[string]struct{}
DockerfilesToIgnore map[string]struct{}
TestCacheDockerfiles map[string]struct{}
}

type Logger func(string, ...interface{})

// NewDockerFileBuilder will create a DockerFileBuilder initialized with dockerfiles, which
// it will assume are all as yet unbuilt.
func NewDockerFileBuilder() *DockerFileBuilder {
d := DockerFileBuilder{filesBuilt: map[string]struct{}{}}
func NewDockerFileBuilder(logf Logger) *DockerFileBuilder {
d := DockerFileBuilder{
logf: logf,
filesBuilt: map[string]struct{}{},
}
d.DockerfilesToIgnore = map[string]struct{}{
"Dockerfile_test_add_404": {},
// TODO: remove test_user_run from this when https://github.com/GoogleContainerTools/container-diff/issues/237 is fixed
Expand Down Expand Up @@ -218,8 +225,8 @@ func addServiceAccountFlags(flags []string, serviceAccount string) []string {
return flags
}

func (d *DockerFileBuilder) BuildDockerImage(imageRepo, dockerfilesPath, dockerfile, contextDir string) error {
fmt.Printf("Building image for Dockerfile %s\n", dockerfile)
func (d *DockerFileBuilder) BuildDockerImage(t *testing.T, imageRepo, dockerfilesPath, dockerfile, contextDir string) error {
t.Logf("Building image for Dockerfile %s\n", dockerfile)

var buildArgs []string
buildArgFlag := "--build-arg"
Expand Down Expand Up @@ -252,21 +259,21 @@ func (d *DockerFileBuilder) BuildDockerImage(imageRepo, dockerfilesPath, dockerf
if err != nil {
return fmt.Errorf("Failed to build image %s with docker command \"%s\": %s %s", dockerImage, dockerCmd.Args, err, string(out))
}
fmt.Printf("Build image for Dockerfile %s as %s. docker build output: %s \n", dockerfile, dockerImage, out)
t.Logf("Build image for Dockerfile %s as %s. docker build output: %s \n", dockerfile, dockerImage, out)
return nil
}

// BuildImage will build dockerfile (located at dockerfilesPath) using both kaniko and docker.
// The resulting image will be tagged with imageRepo. If the dockerfile will be built with
// context (i.e. it is in `buildContextTests`) the context will be pulled from gcsBucket.
func (d *DockerFileBuilder) BuildImage(config *integrationTestConfig, dockerfilesPath, dockerfile string) error {
func (d *DockerFileBuilder) BuildImage(t *testing.T, config *integrationTestConfig, dockerfilesPath, dockerfile string) error {
_, ex, _, _ := runtime.Caller(0)
cwd := filepath.Dir(ex)

return d.BuildImageWithContext(config, dockerfilesPath, dockerfile, cwd)
return d.BuildImageWithContext(t, config, dockerfilesPath, dockerfile, cwd)
}

func (d *DockerFileBuilder) BuildImageWithContext(config *integrationTestConfig, dockerfilesPath, dockerfile, contextDir string) error {
func (d *DockerFileBuilder) BuildImageWithContext(t *testing.T, config *integrationTestConfig, dockerfilesPath, dockerfile, contextDir string) error {
if _, present := d.filesBuilt[dockerfile]; present {
return nil
}
Expand All @@ -279,7 +286,7 @@ func (d *DockerFileBuilder) BuildImageWithContext(config *integrationTestConfig,
}

timer := timing.Start(dockerfile + "_docker")
d.BuildDockerImage(imageRepo, dockerfilesPath, dockerfile, contextDir)
d.BuildDockerImage(t, imageRepo, dockerfilesPath, dockerfile, contextDir)
timing.DefaultRun.Stop(timer)

contextFlag := "-c"
Expand All @@ -302,7 +309,7 @@ func (d *DockerFileBuilder) BuildImageWithContext(config *integrationTestConfig,

kanikoImage := GetKanikoImage(imageRepo, dockerfile)
timer = timing.Start(dockerfile + "_kaniko")
if _, err := buildKanikoImage(dockerfilesPath, dockerfile, buildArgs, additionalKanikoFlags, kanikoImage,
if _, err := buildKanikoImage(d.logf, dockerfilesPath, dockerfile, buildArgs, additionalKanikoFlags, kanikoImage,
contextDir, gcsBucket, serviceAccount, true); err != nil {
return err
}
Expand Down Expand Up @@ -420,6 +427,7 @@ func (d *DockerFileBuilder) buildRelativePathsImage(imageRepo, dockerfile, servi
}

func buildKanikoImage(
logf Logger,
dockerfilesPath string,
dockerfile string,
buildArgs []string,
Expand Down Expand Up @@ -447,7 +455,7 @@ func buildKanikoImage(

// build kaniko image
additionalFlags := append(buildArgs, kanikoArgs...)
fmt.Printf("Going to build image with kaniko: %s, flags: %s \n", kanikoImage, additionalFlags)
logf("Going to build image with kaniko: %s, flags: %s \n", kanikoImage, additionalFlags)

dockerRunFlags := []string{"run", "--net=host",
"-e", benchmarkEnv,
Expand Down
51 changes: 22 additions & 29 deletions integration/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ func getDockerMajorVersion() int {
}
return ver
}
func launchTests(m *testing.M) (int, error) {

func launchTests(m *testing.M) (int, error) {
if config.isGcrRepository() {
contextFile, err := CreateIntegrationTarball()
if err != nil {
Expand All @@ -111,7 +111,7 @@ func launchTests(m *testing.M) (int, error) {
return 1, errors.Wrap(err, "Error while building images")
}

imageBuilder = NewDockerFileBuilder()
imageBuilder = NewDockerFileBuilder(log.Printf)

return m.Run(), nil
}
Expand Down Expand Up @@ -141,32 +141,25 @@ func buildRequiredImages() error {
setupCommands := []struct {
name string
command []string
}{
{
name: "Building kaniko image",
command: []string{"docker", "build", "-t", ExecutorImage, "-f", "../deploy/Dockerfile", ".."},
},
{
name: "Building cache warmer image",
command: []string{"docker", "build", "-t", WarmerImage, "-f", "../deploy/Dockerfile_warmer", ".."},
},
{
name: "Building onbuild base image",
command: []string{"docker", "build", "-t", config.onbuildBaseImage, "-f", fmt.Sprintf("%s/Dockerfile_onbuild_base", dockerfilesPath), "."},
},
{
name: "Pushing onbuild base image",
command: []string{"docker", "push", config.onbuildBaseImage},
},
{
name: "Building hardlink base image",
command: []string{"docker", "build", "-t", config.hardlinkBaseImage, "-f", fmt.Sprintf("%s/Dockerfile_hardlink_base", dockerfilesPath), "."},
},
{
name: "Pushing hardlink base image",
command: []string{"docker", "push", config.hardlinkBaseImage},
},
}
}{{
name: "Building kaniko image",
command: []string{"docker", "build", "-t", ExecutorImage, "-f", "../deploy/Dockerfile", ".."},
}, {
name: "Building cache warmer image",
command: []string{"docker", "build", "-t", WarmerImage, "-f", "../deploy/Dockerfile_warmer", ".."},
}, {
name: "Building onbuild base image",
command: []string{"docker", "build", "-t", config.onbuildBaseImage, "-f", fmt.Sprintf("%s/Dockerfile_onbuild_base", dockerfilesPath), "."},
}, {
name: "Pushing onbuild base image",
command: []string{"docker", "push", config.onbuildBaseImage},
}, {
name: "Building hardlink base image",
command: []string{"docker", "build", "-t", config.hardlinkBaseImage, "-f", fmt.Sprintf("%s/Dockerfile_hardlink_base", dockerfilesPath), "."},
}, {
name: "Pushing hardlink base image",
command: []string{"docker", "push", config.hardlinkBaseImage},
}}

for _, setupCmd := range setupCommands {
fmt.Println(setupCmd.name)
Expand Down Expand Up @@ -522,7 +515,7 @@ func TestLayers(t *testing.T) {
}

func buildImage(t *testing.T, dockerfile string, imageBuilder *DockerFileBuilder) {
if err := imageBuilder.BuildImage(config, dockerfilesPath, dockerfile); err != nil {
if err := imageBuilder.BuildImage(t, config, dockerfilesPath, dockerfile); err != nil {
t.Errorf("Error building image: %s", err)
t.FailNow()
}
Expand Down
4 changes: 2 additions & 2 deletions integration/integration_with_context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func TestWithContext(t *testing.T) {
t.Fatal(err)
}

builder := NewDockerFileBuilder()
builder := NewDockerFileBuilder(t.Logf)

for _, tdInfo := range testDirs {
name := tdInfo.Name()
Expand All @@ -47,7 +47,7 @@ func TestWithContext(t *testing.T) {
t.Parallel()

if err := builder.BuildImageWithContext(
config, "", name, testDir,
t, config, "", name, testDir,
); err != nil {
t.Fatal(err)
}
Expand Down
32 changes: 24 additions & 8 deletions integration/k8s_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func TestK8s(t *testing.T) {
t.Fatal(err)
}

builder := NewDockerFileBuilder()
builder := NewDockerFileBuilder(t.Logf)

for _, tdInfo := range testDirs {
name := tdInfo.Name()
Expand All @@ -56,7 +56,7 @@ func TestK8s(t *testing.T) {
t.Parallel()

if err := builder.BuildDockerImage(
config.imageRepo, "", name, testDir,
t, config.imageRepo, "", name, testDir,
); err != nil {
t.Fatal(err)
}
Expand All @@ -75,21 +75,21 @@ func TestK8s(t *testing.T) {
t.Fatal(err)
}

fmt.Printf("Testing K8s based Kaniko building of dockerfile %s and push to %s \n",
t.Logf("Testing K8s based Kaniko building of dockerfile %s and push to %s \n",
testDir, kanikoImage)
content, err := ioutil.ReadFile(tmpfile.Name())
if err != nil {
log.Fatal(err)
}
fmt.Printf("K8s template %s:\n%s\n", tmpfile.Name(), content)
t.Logf("K8s template %s:\n%s\n", tmpfile.Name(), content)

kubeCmd := exec.Command("kubectl", "apply", "-f", tmpfile.Name())
RunCommand(kubeCmd, t)

fmt.Printf("Waiting for K8s kaniko build job to finish: %s\n",
t.Logf("Waiting for K8s kaniko build job to finish: %s\n",
"job/kaniko-test-"+job.Name)

kubeWaitCmd := exec.Command("kubectl", "wait", "--for=condition=complete", "--timeout=120s",
kubeWaitCmd := exec.Command("kubectl", "wait", "--for=condition=complete", "--timeout=5m",
"job/kaniko-test-"+job.Name)
if out, errR := RunCommandWithoutTest(kubeWaitCmd); errR != nil {
t.Log(kubeWaitCmd.Args)
Expand All @@ -100,9 +100,25 @@ func TestK8s(t *testing.T) {
t.Error(errD)
} else {
t.Log(string(outD))
t.Error(errR)
}
t.FailNow()

descCmd = exec.Command("kubectl", "describe", "pods", "--selector", "job-name=kaniko-test-"+job.Name)
outD, errD = RunCommandWithoutTest(descCmd)
if errD != nil {
t.Error(errD)
} else {
t.Log(string(outD))
}

logsCmd := exec.Command("kubectl", "logs", "job/kaniko-test-"+job.Name)
outL, errL := RunCommandWithoutTest(logsCmd)
if errL != nil {
t.Error(errL)
} else {
t.Log(string(outL))
}

t.Fatal(errR)
}

diff := containerDiff(t, daemonPrefix+dockerImage, kanikoImage, "--no-cache")
Expand Down
2 changes: 1 addition & 1 deletion scripts/integration-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@ docker version
echo "Running integration tests..."
make out/executor
make out/warmer
go test ./integration/... -v --bucket "${GCS_BUCKET}" --repo "${IMAGE_REPO}" --timeout 50m "$@"
go test ./integration/... --bucket "${GCS_BUCKET}" --repo "${IMAGE_REPO}" --timeout 50m "$@"

0 comments on commit 889ee0e

Please sign in to comment.