mirror of https://github.com/knative/client.git
115 lines
3.5 KiB
Go
115 lines
3.5 KiB
Go
// Copyright 2019 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
|
|
|
|
// http://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.
|
|
|
|
// +build tekton
|
|
|
|
package e2e
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"gotest.tools/assert"
|
|
"k8s.io/apimachinery/pkg/util/wait"
|
|
|
|
"knative.dev/client/lib/test"
|
|
"knative.dev/client/pkg/util"
|
|
)
|
|
|
|
const (
|
|
// Interval specifies the time between two polls.
|
|
Interval = 10 * time.Second
|
|
// Timeout specifies the timeout for the function PollImmediate to reach a certain status.
|
|
Timeout = 5 * time.Minute
|
|
)
|
|
|
|
func TestTektonPipeline(t *testing.T) {
|
|
it, err := test.NewKnTest()
|
|
assert.NilError(t, err)
|
|
defer func() {
|
|
assert.NilError(t, it.Teardown())
|
|
}()
|
|
|
|
kubectl := test.NewKubectl(it.Namespace())
|
|
basedir := test.CurrentDir(t) + "/../resources/tekton"
|
|
|
|
// create secret for the kn-deployer-account service account
|
|
_, err = kubectl.Run("create", "-n", it.Namespace(), "secret",
|
|
"generic", "container-registry",
|
|
"--from-file=.dockerconfigjson="+test.Flags.DockerConfigJSON,
|
|
"--type=kubernetes.io/dockerconfigjson")
|
|
assert.NilError(t, err)
|
|
|
|
_, err = kubectl.Run("apply", "-f", basedir+"/kn-deployer-rbac.yaml")
|
|
assert.NilError(t, err)
|
|
|
|
_, err = kubectl.Run("apply", "-f", tektonCatalogTask("git-clone", "0.1"))
|
|
assert.NilError(t, err)
|
|
|
|
_, err = kubectl.Run("apply", "-f", basedir+"/resources.yaml")
|
|
assert.NilError(t, err)
|
|
|
|
_, err = kubectl.Run("apply", "-f", tektonCatalogTask("buildah", "0.1"))
|
|
assert.NilError(t, err)
|
|
|
|
_, err = kubectl.Run("apply", "-f", tektonCatalogTask("kn", "0.1"))
|
|
assert.NilError(t, err)
|
|
|
|
_, err = kubectl.Run("apply", "-f", basedir+"/kn-pipeline.yaml")
|
|
assert.NilError(t, err)
|
|
|
|
_, err = kubectl.Run("create", "-f", basedir+"/kn-pipeline-run.yaml")
|
|
assert.NilError(t, err)
|
|
|
|
err = waitForPipelineSuccess(kubectl)
|
|
if err != nil {
|
|
logs, logsErr := kubectl.Run("logs", "-l", "tekton.dev/pipeline=buildah-build-kn-create", "--all-containers", "--prefix=true")
|
|
assert.NilError(t, logsErr, "Unable to gather logs from pipeline pods")
|
|
t.Fatalf("PipelineRun failed with %v, printing logs from pipeline pods:\n%s", err, logs)
|
|
}
|
|
|
|
r := test.NewKnRunResultCollector(t, it)
|
|
|
|
const serviceName = "hello"
|
|
out := it.Kn().Run("service", "describe", serviceName)
|
|
r.AssertNoError(out)
|
|
assert.Assert(t, util.ContainsAll(out.Stdout, serviceName, it.Kn().Namespace()))
|
|
assert.Assert(t, util.ContainsAll(out.Stdout, "Conditions", "ConfigurationsReady", "Ready", "RoutesReady"))
|
|
}
|
|
|
|
func waitForPipelineSuccess(k test.Kubectl) error {
|
|
return wait.PollImmediate(Interval, Timeout, func() (bool, error) {
|
|
out, err := k.Run("get", "pipelinerun", "-o=jsonpath='{.items[0].status.conditions[?(@.type==\"Succeeded\")].status}'")
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
// Return early if the run failed.
|
|
if strings.Contains(out, "False") {
|
|
return false, errors.New("pipelinerun failure")
|
|
}
|
|
return strings.Contains(out, "True"), nil
|
|
})
|
|
}
|
|
|
|
func tektonCatalogTask(taskName, version string) string {
|
|
return fmt.Sprintf(
|
|
"https://raw.githubusercontent.com/tektoncd/catalog/"+
|
|
"master/task/%s/%s/%s.yaml",
|
|
taskName, version, taskName,
|
|
)
|
|
}
|