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

build test images for e2e #974

Merged
merged 20 commits into from
Aug 20, 2020
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
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
4 changes: 4 additions & 0 deletions .ko.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Use :nonroot base image for all containers
Copy link
Member

Choose a reason for hiding this comment

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

This repo only defines one cmd/ package, right? Does defaultBaseImage accomplish anything, since it's just overridden below?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Correct.

The test image should be using this base image(test/upload-test-images.sh), but we dont have any particular use case in test images to use this base image. Also just checked their sizes, the default one is 3 times larger than alpine image. @itsmurugappan I think we can simply default to alpine base image 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.

The test images(present and future ones) will refer this base image. A non root image will give the flexibility to run in contributors clusters in which non root images are not allowed. Maybe I can change it to 'gcr.io/distroless/static:nonroot' which is used in all the knative repos.

defaultBaseImage: gcr.io/distroless/base:debug-nonroot
baseImageOverrides:
knative.dev/client/cmd/kn: docker.io/library/alpine:latest
5 changes: 3 additions & 2 deletions lib/test/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,15 @@ import (
"gotest.tools/assert"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
pkgtest "knative.dev/pkg/test"
servingv1 "knative.dev/serving/pkg/apis/serving/v1"

"knative.dev/client/pkg/util"
)

// ServiceCreate verifies given service creation in sync mode and also verifies output
func ServiceCreate(r *KnRunResultCollector, serviceName string) {
out := r.KnTest().Kn().Run("service", "create", serviceName, "--image", GetKnTestImage())
out := r.KnTest().Kn().Run("service", "create", serviceName, "--image", pkgtest.ImagePath("helloworld"))
r.AssertNoError(out)
assert.Check(r.T(), util.ContainsAllIgnoreCase(out.Stdout, "service", serviceName, "creating", "namespace", r.KnTest().Kn().Namespace(), "ready"))
}
Expand All @@ -51,7 +52,7 @@ func ServiceList(r *KnRunResultCollector, serviceName string) {
func ServiceDescribe(r *KnRunResultCollector, serviceName string) {
out := r.KnTest().Kn().Run("service", "describe", serviceName)
r.AssertNoError(out)
assert.Assert(r.T(), util.ContainsAll(out.Stdout, serviceName, r.KnTest().Kn().Namespace(), GetKnTestImage()))
assert.Assert(r.T(), util.ContainsAll(out.Stdout, serviceName, r.KnTest().Kn().Namespace(), pkgtest.ImagePath("helloworld")))
assert.Assert(r.T(), util.ContainsAll(out.Stdout, "Conditions", "ConfigurationsReady", "Ready", "RoutesReady"))
assert.Assert(r.T(), util.ContainsAll(out.Stdout, "Name", "Namespace", "URL", "Age", "Revisions"))
}
Expand Down
27 changes: 27 additions & 0 deletions test/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,30 @@ mode, use
```bash
test/local-e2e-tests.sh -short
```

## Test images

### Building the test images

The [`upload-test-images.sh`](./upload-test-images.sh) script can be used to
build and push the test images used by the e2e tests. The script
expects your environment to be setup as described in
[DEVELOPMENT.md](https://github.com/knative/serving/blob/master/DEVELOPMENT.md#install-requirements).

To run the script for all end to end test images:

```bash
./test/upload-test-images.sh
```

A docker tag may be passed as an optional parameter. This can be useful on
Minikube in tandem with the `--tag` [flag](#using-a-docker-tag):

```bash
eval $(minikube docker-env)
./test/upload-test-images.sh any-old-tag
```

### Adding new test images

New test images should be placed in `./test/test_images`.
6 changes: 6 additions & 0 deletions test/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,9 @@ function knative_setup() {
wait_until_pods_running knative-eventing || return 1
fi
}

# Create test resources and images
function test_setup() {
echo ">> Uploading test images..."
${REPO_ROOT_DIR}/test/upload-test-images.sh || return 1
}
5 changes: 1 addition & 4 deletions test/e2e-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,7 @@ smoke_test() {
ns="kne2esmoketests"

# Test image
img=${KN_TEST_IMAGE}
if [[ -z "${KN_TEST_IMAGE}" ]]; then
img="gcr.io/knative-samples/helloworld-go"
fi
img=${KO_DOCKER_REPO}/helloworld

set -x

Expand Down
3 changes: 0 additions & 3 deletions test/test_images/helloworld/go.mod

This file was deleted.

15 changes: 15 additions & 0 deletions test/test_images/helloworld/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2020 The Knative Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

image: ko://knative.dev/client/test/test_images/helloworld
Copy link
Member

Choose a reason for hiding this comment

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

What does this file accomplish? It's not a valid K8s config so ko apply will fail. Does something else consume the output of ko resolve on this file?

If you just want to publish an image, you should be able to simply run ko publish ./test/test_images/helloworld

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The goal is build and publish the images to be used in tests. Currently there is only one image, we are planning to add more. So, if it is specified in this way , we could build and publish all images using 'ko resolve --jobs=4 ${tag_option} -RBf "${image_dir}" > /dev/null' .

39 changes: 39 additions & 0 deletions test/upload-test-images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env bash
#
# Copyright 2020 The Knative Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -o errexit

function upload_test_images() {
echo ">> Publishing test images"
# Script needs to be executed from the root directory
# to pickup .ko.yaml
cd "$( dirname "$0")/.."
local image_dir="test/test_images"
local docker_tag=$1
local tag_option=""
if [ -n "${docker_tag}" ]; then
tag_option="--tags $docker_tag,latest"
fi

# ko resolve is being used for the side-effect of publishing images,
# so the resulting yaml produced is ignored.
# We limit the number of concurrent builds (jobs) to avoid OOMs.
ko resolve --jobs=4 ${tag_option} -RBf "${image_dir}" > /dev/null
}

: ${KO_DOCKER_REPO:?"You must set 'KO_DOCKER_REPO'"}

upload_test_images $@
201 changes: 201 additions & 0 deletions vendor/github.com/go-logr/logr/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 36 additions & 0 deletions vendor/github.com/go-logr/logr/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading