Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integration test refactoring #126

Merged
merged 38 commits into from
May 15, 2018
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
4a81561
integration test refactoring
sharifelgamal Apr 20, 2018
4469daf
config file cleanup
sharifelgamal Apr 23, 2018
cd0101e
Merge branch 'master' of github.com:GoogleCloudPlatform/kaniko into t…
sharifelgamal Apr 24, 2018
094d030
more test refactoring
sharifelgamal Apr 24, 2018
d0fd846
remove debug file
sharifelgamal Apr 24, 2018
4efd0e7
moving around more files
sharifelgamal Apr 24, 2018
9d91c1f
fixing up integration tests
sharifelgamal Apr 30, 2018
90d9c54
Merge branch 'master' of github.com:GoogleCloudPlatform/kaniko into t…
sharifelgamal Apr 30, 2018
e1c03d8
integration tests work
sharifelgamal May 2, 2018
74f089b
Merge branch 'master' of github.com:GoogleCloudPlatform/kaniko into t…
sharifelgamal May 2, 2018
b531fb3
some housekeeping
sharifelgamal May 2, 2018
0833122
fixing tests
sharifelgamal May 2, 2018
c914273
addressing comments
sharifelgamal May 2, 2018
37d4ab7
debugging
sharifelgamal May 2, 2018
229614d
debugging
sharifelgamal May 3, 2018
126db2d
actual debugging
sharifelgamal May 3, 2018
c9e005c
skip integration tests for travis
sharifelgamal May 3, 2018
fe41419
install container-diff before integration tests
sharifelgamal May 3, 2018
e0e254f
syntax
sharifelgamal May 3, 2018
386f4d6
make test failures less noisy
sharifelgamal May 3, 2018
e13ee62
fixing tests
sharifelgamal May 3, 2018
86ec5a7
hopefully fixing CI?
sharifelgamal May 8, 2018
cd126e5
fixes
sharifelgamal May 8, 2018
e6517b5
more fixes
sharifelgamal May 8, 2018
502d203
let's actually fix CI
sharifelgamal May 8, 2018
6d0892f
more testing
sharifelgamal May 8, 2018
bbdbd12
testing
sharifelgamal May 8, 2018
c9750c8
proper auth
sharifelgamal May 9, 2018
929256d
typos
sharifelgamal May 9, 2018
089bc58
Merge branch 'master' of github.com:GoogleCloudPlatform/kaniko into t…
sharifelgamal May 14, 2018
55298cc
Merge branch 'master' of github.com:GoogleCloudPlatform/kaniko into t…
sharifelgamal May 14, 2018
f9fec87
adding support for args in integration tests
sharifelgamal May 14, 2018
bd85e0a
formatting
sharifelgamal May 14, 2018
59b3232
formatting
sharifelgamal May 14, 2018
64c157e
adding support for testing bucket context
sharifelgamal May 14, 2018
416ee82
adding bucket test dockerfile
sharifelgamal May 14, 2018
0fc8385
addressing comments
sharifelgamal May 15, 2018
1050dd4
syntax
sharifelgamal May 15, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion integration-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ fi

echo "Running integration tests..."
make out/executor
go run integration_tests/integration_test_yaml.go | gcloud container builds submit --config /dev/fd/0 .
pushd integration
go test
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
150 changes: 150 additions & 0 deletions integration/integration_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
package integration

import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"os/exec"
"path"
"path/filepath"
"runtime"
"strings"
"testing"

"github.com/GoogleContainerTools/kaniko/testutil"
)

const (
executorImage = "executor-image"
dockerImage = "gcr.io/cloud-builders/docker"
ubuntuImage = "ubuntu"
testRepo = "gcr.io/kaniko-test/"
dockerPrefix = "docker-"
kanikoPrefix = "kaniko-"
daemonPrefix = "daemon://"
containerDiffOutputFile = "container-diff.json"
kanikoTestBucket = "kaniko-test-bucket"
dockerfilesPath = "dockerfiles"
onbuildBaseImage = testRepo + "onbuild-base:latest"
buildContextPath = "/workspace"
emptyContainerDiff = `[
{
"Image1": "%s:latest",
"Image2": "%s:latest",
"DiffType": "File",
"Diff": {
"Adds": null,
"Dels": null,
"Mods": null
}
}
]`
)

func TestMain(m *testing.M) {
buildKaniko := exec.Command("docker", "build", "-t", executorImage, "-f", "../deploy/Dockerfile", "..")
output, err := buildKaniko.CombinedOutput()
if err != nil {
fmt.Printf("output=%s\n", output)
fmt.Printf("err=%s\n", err)
os.Exit(1)
}
os.Exit(m.Run())
}

func TestRun(t *testing.T) {
dockerfiles, err := ioutil.ReadDir(dockerfilesPath)
if err != nil {
fmt.Printf("err=%s", err)
t.FailNow()
}

_, ex, _, _ := runtime.Caller(0)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit weird, could you use os.Args[0] instead?
https://golang.org/pkg/os/

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

os.Args gives me where the test file is actually being run, which is in a tmp folder somewhere. I actually want to access the directory where the go file actually lives, which is what runtime.Caller gives.

cwd := filepath.Dir(ex)

// Grab the latest container-diff binary
getContainerDiff := exec.Command("gsutil", "cp", "gs://container-diff/latest/container-diff-linux-amd64", ".")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's just require that container-diff is on the path.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

err = getContainerDiff.Run()
if err != nil {
t.Error(err)
t.FailNow()
}

containerDiffPerms := exec.Command("chmod", "+x", "container-diff-linux-amd64")
err = containerDiffPerms.Run()
if err != nil {
t.Error(err)
t.FailNow()
}


for _, dockerfile := range dockerfiles {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

filepath.Glob might be easier than ls'ing everything and filtering here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep. done.

if strings.HasSuffix(dockerfile.Name(), ".yaml") {
continue
}
t.Run("test_"+dockerfile.Name(), func(t *testing.T) {
// Parallelization is broken
// t.Parallel()

// build docker image
dockerImage := strings.ToLower(testRepo + dockerPrefix + dockerfile.Name())
dockerCmd := exec.Command("docker", "build", "-t", dockerImage, "-f", path.Join(dockerfilesPath, dockerfile.Name()), ".")
err = dockerCmd.Run()
if err != nil {
t.Error(err)
t.Fail()
}

// build kaniko image
kanikoImage := strings.ToLower(testRepo + kanikoPrefix + dockerfile.Name())
kanikoCmd := exec.Command("docker", "run",
"-v", os.Getenv("HOME")+"/.config/gcloud:/root/.config/gcloud",
"-v", cwd + ":/workspace",
executorImage,
"-f", path.Join(buildContextPath, dockerfilesPath, dockerfile.Name()),
"-d", kanikoImage,
"-c", buildContextPath,
)

err = kanikoCmd.Run()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: a small helper that takes the cmd and t and does this could be useful.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

if err != nil {
t.Error(err)
t.Fail()
}

// container-diff
daemonDockerImage := daemonPrefix + dockerImage
//daemonKanikoImage := daemonPrefix + kanikoImage
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


containerdiffCmd := exec.Command("./container-diff-linux-amd64", "diff", daemonDockerImage, kanikoImage, "-q", "--type=file", "--json")
diff, err := containerdiffCmd.CombinedOutput()
if err != nil {
t.Error(err)
t.Fail()
}
t.Logf("diff = %s", string(diff))

expected := fmt.Sprintf(emptyContainerDiff, dockerImage, kanikoImage)

// Let's compare the json objects themselves instead of strings to avoid
// issues with spaces and indents
var diffInt interface{}
var expectedInt interface{}

err = json.Unmarshal(diff, &diffInt)
if err != nil {
t.Error(err)
t.Fail()
}

err = json.Unmarshal([]byte(expected), &expectedInt)
if err != nil {
t.Error(err)
t.Fail()
}

testutil.CheckErrorAndDeepEqual(t, false, nil, expectedInt, diffInt)
})
}
}
12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_add.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_bucket_buildcontext.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_copy.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_extract_fs.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_mv_add.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_onbuild.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_registry.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_run.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_run_2.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_scratch.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_volume.json

This file was deleted.

12 changes: 0 additions & 12 deletions integration_tests/dockerfiles/config_test_workdir.json

This file was deleted.

Loading