Auto-update dependencies (#127)

Produced via:
  `dep ensure -update knative.dev/test-infra knative.dev/pkg`
/assign mattmoor
This commit is contained in:
mattmoor-sockpuppet 2019-10-31 08:14:13 -07:00 committed by Knative Prow Robot
parent 88e1e4db86
commit 313aaa60e5
10 changed files with 583 additions and 5 deletions

8
Gopkg.lock generated
View File

@ -933,7 +933,7 @@
[[projects]]
branch = "master"
digest = "1:2cc284a39bc41da614158a089ed2e976cd5461a93ede77f52263c1f3370995c2"
digest = "1:5ca4167264dc0212a6d38d700ec305125f38af525371465b5ad3367178bc20b4"
name = "knative.dev/pkg"
packages = [
"apis",
@ -952,18 +952,18 @@
"metrics/metricskey",
]
pruneopts = "T"
revision = "3732de5802012193835c9fe65436b761ed3fecea"
revision = "340e3aefcd4b731170fc27a72ebdc273c87ae93a"
[[projects]]
branch = "master"
digest = "1:d98cbeb7a88cc866d8353ffec3116baf6397669bde5ceb4caccf540e8cacc496"
digest = "1:5299d75a2b08a91c54ffb8b76afe21eb5f1ecf7bc4d67b859fc081f9415452bc"
name = "knative.dev/test-infra"
packages = [
"scripts",
"tools/dep-collector",
]
pruneopts = "UT"
revision = "34a629e61afcc53b94725894cdc4caf70b536ee1"
revision = "6c8da588aaa3d2bff76a9c37fd6ac5c9a6c02c09"
[[projects]]
digest = "1:8730e0150dfb2b7e173890c8b9868e7a273082ef8e39f4940e3506a481cf895c"

3
vendor/knative.dev/pkg/Gopkg.lock generated vendored
View File

@ -1337,6 +1337,7 @@
"k8s.io/api/admissionregistration/v1beta1",
"k8s.io/api/apps/v1",
"k8s.io/api/authentication/v1",
"k8s.io/api/autoscaling/v2beta1",
"k8s.io/api/batch/v1",
"k8s.io/api/core/v1",
"k8s.io/api/extensions/v1beta1",
@ -1382,6 +1383,8 @@
"k8s.io/client-go/kubernetes/fake",
"k8s.io/client-go/kubernetes/scheme",
"k8s.io/client-go/kubernetes/typed/core/v1",
"k8s.io/client-go/listers/apps/v1",
"k8s.io/client-go/listers/autoscaling/v2beta1",
"k8s.io/client-go/listers/core/v1",
"k8s.io/client-go/plugin/pkg/client/auth/gcp",
"k8s.io/client-go/rest",

View File

@ -3,10 +3,12 @@ aliases:
- evankanderson
- mattmoor
- vaikas-google
- vaikas
apis-approvers:
- mattmoor
- vaikas-google
- vaikas
- n3wscott
apis-istio-approvers:
@ -15,10 +17,12 @@ aliases:
apis-duck-approvers:
- mattmoor
- vaikas-google
- vaikas
cloudevents-approvers:
- n3wscott
- vaikas-google
- vaikas
configmap-approvers:
- mattmoor
@ -65,6 +69,7 @@ aliases:
source-approvers:
- n3wscott
- vaikas-google
- vaikas
webhook-approvers:
- mattmoor

View File

@ -0,0 +1,142 @@
/*
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.
*/
// junit.go defines types and functions specific to manipulating junit test result XML files
package junit
import (
"encoding/xml"
"fmt"
)
// TestStatusEnum is a enum for test result status
type TestStatusEnum string
const (
// Failed means junit test failed
Failed TestStatusEnum = "failed"
// Skipped means junit test skipped
Skipped TestStatusEnum = "skipped"
// Passed means junit test passed
Passed TestStatusEnum = "passed"
)
// TestSuites holds a <testSuites/> list of TestSuite results
type TestSuites struct {
XMLName xml.Name `xml:"testsuites"`
Suites []TestSuite `xml:"testsuite"`
}
// TestSuite holds <testSuite/> results
type TestSuite struct {
XMLName xml.Name `xml:"testsuite"`
Name string `xml:"name,attr"`
Time float64 `xml:"time,attr"` // Seconds
Failures int `xml:"failures,attr"`
Tests int `xml:"tests,attr"`
TestCases []TestCase `xml:"testcase"`
Properties TestProperties `xml:"properties"`
}
// TestCase holds <testcase/> results
type TestCase struct {
Name string `xml:"name,attr"`
Time float64 `xml:"time,attr"` // Seconds
ClassName string `xml:"classname,attr"`
Failure *string `xml:"failure,omitempty"`
Output *string `xml:"system-out,omitempty"`
Error *string `xml:"system-err,omitempty"`
Skipped *string `xml:"skipped,omitempty"`
Properties TestProperties `xml:"properties"`
}
// TestProperties is an array of test properties
type TestProperties struct {
Properties []TestProperty `xml:"property"`
}
// TestProperty defines a property of the test
type TestProperty struct {
Name string `xml:"name,attr"`
Value string `xml:"value,attr"`
}
// GetTestStatus returns the test status as a string
func (testCase *TestCase) GetTestStatus() TestStatusEnum {
testStatus := Passed
switch {
case testCase.Failure != nil:
testStatus = Failed
case testCase.Skipped != nil:
testStatus = Skipped
}
return testStatus
}
// AddProperty adds property to testcase
func (testCase *TestCase) AddProperty(name, val string) {
property := TestProperty{Name: name, Value: val}
testCase.Properties.Properties = append(testCase.Properties.Properties, property)
}
// AddTestCase adds a testcase to the testsuite
func (ts *TestSuite) AddTestCase(tc TestCase) {
ts.TestCases = append(ts.TestCases, tc)
}
// GetTestSuite gets TestSuite struct by name
func (testSuites *TestSuites) GetTestSuite(suiteName string) (*TestSuite, error) {
for _, testSuite := range testSuites.Suites {
if testSuite.Name == suiteName {
return &testSuite, nil
}
}
return nil, fmt.Errorf("Test suite '%s' not found", suiteName)
}
// AddTestSuite adds TestSuite to TestSuites
func (testSuites *TestSuites) AddTestSuite(testSuite *TestSuite) error {
if _, err := testSuites.GetTestSuite(testSuite.Name); err == nil {
return fmt.Errorf("Test suite '%s' already exists", testSuite.Name)
}
testSuites.Suites = append(testSuites.Suites, *testSuite)
return nil
}
// ToBytes converts TestSuites struct to bytes array
func (testSuites *TestSuites) ToBytes(prefix, indent string) ([]byte, error) {
return xml.MarshalIndent(testSuites, prefix, indent)
}
// UnMarshal converts bytes array to TestSuites struct,
// it works with both TestSuites and TestSuite structs, if
// input is a TestSuite struct it will still return a TestSuites
// struct, which is an empty wrapper TestSuites containing only
// the input Suite
func UnMarshal(buf []byte) (*TestSuites, error) {
var testSuites TestSuites
if err := xml.Unmarshal(buf, &testSuites); err == nil {
return &testSuites, nil
}
// The input might be a TestSuite if reach here, try parsing with TestSuite
testSuites.Suites = append([]TestSuite(nil), TestSuite{})
if err := xml.Unmarshal(buf, &testSuites.Suites[0]); err != nil {
return nil, err
}
return &testSuites, nil
}

View File

@ -0,0 +1,84 @@
/*
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.
*/
package certificates
import (
"context"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/client-go/kubernetes"
corelisters "k8s.io/client-go/listers/core/v1"
"knative.dev/pkg/controller"
"knative.dev/pkg/logging"
"knative.dev/pkg/system"
certresources "knative.dev/pkg/webhook/certificates/resources"
)
type reconciler struct {
client kubernetes.Interface
secretlister corelisters.SecretLister
secretName string
serviceName string
}
var _ controller.Reconciler = (*reconciler)(nil)
// Reconcile implements controller.Reconciler
func (r *reconciler) Reconcile(ctx context.Context, key string) error {
return r.reconcileCertificate(ctx)
}
func (r *reconciler) reconcileCertificate(ctx context.Context) error {
logger := logging.FromContext(ctx)
secret, err := r.secretlister.Secrets(system.Namespace()).Get(r.secretName)
if apierrors.IsNotFound(err) {
secret, err = certresources.MakeSecret(ctx, r.secretName, system.Namespace(), r.serviceName)
if err != nil {
return err
}
secret, err = r.client.CoreV1().Secrets(secret.Namespace).Create(secret)
if err != nil {
return err
}
} else if err != nil {
logger.Errorf("error accessing certificate secret %q: %v", r.secretName, err)
return err
}
if _, haskey := secret.Data[certresources.ServerKey]; !haskey {
logger.Infof("Certificate secret %q is missing key %q", r.secretName, certresources.ServerKey)
} else if _, haskey := secret.Data[certresources.ServerCert]; !haskey {
logger.Infof("Certificate secret %q is missing key %q", r.secretName, certresources.ServerCert)
} else if _, haskey := secret.Data[certresources.CACert]; !haskey {
logger.Infof("Certificate secret %q is missing key %q", r.secretName, certresources.CACert)
} else {
// It has all of the keys, it's good.
return nil
}
// Don't modify the informer copy.
secret = secret.DeepCopy()
// One of the secret's keys is missing, so synthesize a new one and update the secret.
newSecret, err := certresources.MakeSecret(ctx, r.secretName, system.Namespace(), r.serviceName)
if err != nil {
return err
}
secret.Data = newSecret.Data
_, err = r.client.CoreV1().Secrets(secret.Namespace).Update(secret)
return err
}

View File

@ -0,0 +1,67 @@
/*
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.
*/
package certificates
import (
"context"
// Injection stuff
kubeclient "knative.dev/pkg/client/injection/kube/client"
secretinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/secret"
"k8s.io/client-go/tools/cache"
"knative.dev/pkg/configmap"
"knative.dev/pkg/controller"
"knative.dev/pkg/logging"
"knative.dev/pkg/system"
"knative.dev/pkg/webhook"
)
// NewController constructs a controller for materializing webhook certificates.
// In order for it to bootstrap, an empty secret should be created with the
// expected name (and lifecycle managed accordingly), and thereafter this controller
// will ensure it has the appropriate shape for the webhook.
func NewController(
ctx context.Context,
cmw configmap.Watcher,
) *controller.Impl {
client := kubeclient.Get(ctx)
secretInformer := secretinformer.Get(ctx)
options := webhook.GetOptions(ctx)
wh := &reconciler{
secretName: options.SecretName,
serviceName: options.ServiceName,
client: client,
secretlister: secretInformer.Lister(),
}
logger := logging.FromContext(ctx)
c := controller.NewImpl(wh, logger, "WebhookCertificates")
// Reconcile when the cert bundle changes.
secretInformer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: controller.FilterWithNameAndNamespace(system.Namespace(), wh.secretName),
// It doesn't matter what we enqueue because we will always Reconcile
// the named MWH resource.
Handler: controller.HandleAll(c.Enqueue),
})
return c
}

View File

@ -35,7 +35,11 @@ const (
// MakeSecret synthesizes a Kubernetes Secret object with the keys specified by
// ServerKey, ServerCert, and CACert populated with a fresh certificate.
func MakeSecret(ctx context.Context, name, namespace, serviceName string) (*corev1.Secret, error) {
// This is mutable to make deterministic testing possible.
var MakeSecret = MakeSecretInternal
// MakeSecretInternal is only public so MakeSecret can be restored in testing. Use MakeSecret.
func MakeSecretInternal(ctx context.Context, name, namespace, serviceName string) (*corev1.Secret, error) {
serverKey, serverCert, caCert, err := CreateCerts(ctx, serviceName, namespace)
if err != nil {
return nil, err

View File

@ -0,0 +1,140 @@
/*
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.
*/
package testing
import (
"context"
"encoding/json"
"testing"
fakesharedclient "knative.dev/pkg/client/injection/client/fake"
fakekubeclient "knative.dev/pkg/client/injection/kube/client/fake"
fakedynamicclient "knative.dev/pkg/injection/clients/dynamicclient/fake"
"knative.dev/pkg/configmap"
"knative.dev/pkg/controller"
"knative.dev/pkg/logging"
logtesting "knative.dev/pkg/logging/testing"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
ktesting "k8s.io/client-go/testing"
"k8s.io/client-go/tools/record"
rtesting "knative.dev/pkg/reconciler/testing"
)
const (
// maxEventBufferSize is the estimated max number of event notifications that
// can be buffered during reconciliation.
maxEventBufferSize = 10
)
// Ctor functions create a k8s controller with given params.
type Ctor func(context.Context, *Listers, configmap.Watcher) controller.Reconciler
// MakeFactory creates a reconciler factory with fake clients and controller created by `ctor`.
func MakeFactory(ctor Ctor) rtesting.Factory {
return func(t *testing.T, r *rtesting.TableRow) (
controller.Reconciler, rtesting.ActionRecorderList, rtesting.EventList, *rtesting.FakeStatsReporter) {
ls := NewListers(r.Objects)
ctx := r.Ctx
if ctx == nil {
ctx = context.Background()
}
logger := logtesting.TestLogger(t)
ctx = logging.WithLogger(ctx, logger)
ctx, kubeClient := fakekubeclient.With(ctx, ls.GetKubeObjects()...)
ctx, sharedClient := fakesharedclient.With(ctx, ls.GetSharedObjects()...)
ctx, dynamicClient := fakedynamicclient.With(ctx,
ls.NewScheme(), ToUnstructured(t, ls.NewScheme(), r.Objects)...)
// The dynamic client's support for patching is BS. Implement it
// here via PrependReactor (this can be overridden below by the
// provided reactors).
dynamicClient.PrependReactor("patch", "*",
func(action ktesting.Action) (bool, runtime.Object, error) {
return true, nil, nil
})
eventRecorder := record.NewFakeRecorder(maxEventBufferSize)
ctx = controller.WithEventRecorder(ctx, eventRecorder)
statsReporter := &rtesting.FakeStatsReporter{}
// This is needed for the tests that use generated names and
// the object cannot be created beforehand.
kubeClient.PrependReactor("create", "*",
func(action ktesting.Action) (bool, runtime.Object, error) {
ca := action.(ktesting.CreateAction)
ls.IndexerFor(ca.GetObject()).Add(ca.GetObject())
return false, nil, nil
},
)
// Set up our Controller from the fakes.
c := ctor(ctx, &ls, configmap.NewStaticWatcher())
// Update the context with the stuff we decorated it with.
r.Ctx = ctx
for _, reactor := range r.WithReactors {
kubeClient.PrependReactor("*", "*", reactor)
sharedClient.PrependReactor("*", "*", reactor)
dynamicClient.PrependReactor("*", "*", reactor)
}
actionRecorderList := rtesting.ActionRecorderList{sharedClient, dynamicClient, kubeClient}
eventList := rtesting.EventList{Recorder: eventRecorder}
return c, actionRecorderList, eventList, statsReporter
}
}
// ToUnstructured takes a list of k8s resources and converts them to
// Unstructured objects.
// We must pass objects as Unstructured to the dynamic client fake, or it
// won't handle them properly.
func ToUnstructured(t *testing.T, sch *runtime.Scheme, objs []runtime.Object) (us []runtime.Object) {
for _, obj := range objs {
obj = obj.DeepCopyObject() // Don't mess with the primary copy
// Determine and set the TypeMeta for this object based on our test scheme.
gvks, _, err := sch.ObjectKinds(obj)
if err != nil {
t.Fatalf("Unable to determine kind for type: %v", err)
}
apiv, k := gvks[0].ToAPIVersionAndKind()
ta, err := meta.TypeAccessor(obj)
if err != nil {
t.Fatalf("Unable to create type accessor: %v", err)
}
ta.SetAPIVersion(apiv)
ta.SetKind(k)
b, err := json.Marshal(obj)
if err != nil {
t.Fatalf("Unable to marshal: %v", err)
}
u := &unstructured.Unstructured{}
if err := json.Unmarshal(b, u); err != nil {
t.Fatalf("Unable to unmarshal: %v", err)
}
us = append(us, u)
}
return
}

View File

@ -0,0 +1,132 @@
/*
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.
*/
package testing
import (
appsv1 "k8s.io/api/apps/v1"
autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
fakekubeclientset "k8s.io/client-go/kubernetes/fake"
appsv1listers "k8s.io/client-go/listers/apps/v1"
autoscalingv2beta1listers "k8s.io/client-go/listers/autoscaling/v2beta1"
corev1listers "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
istiov1alpha3 "knative.dev/pkg/apis/istio/v1alpha3"
fakesharedclientset "knative.dev/pkg/client/clientset/versioned/fake"
istiolisters "knative.dev/pkg/client/listers/istio/v1alpha3"
"knative.dev/pkg/reconciler/testing"
)
var clientSetSchemes = []func(*runtime.Scheme) error{
fakekubeclientset.AddToScheme,
fakesharedclientset.AddToScheme,
autoscalingv2beta1.AddToScheme,
}
// Listers is used to synthesize informer-style Listers from fixed lists of resources in tests.
type Listers struct {
sorter testing.ObjectSorter
}
// NewListers constructs a Listers from a collection of objects.
func NewListers(objs []runtime.Object) Listers {
scheme := NewScheme()
ls := Listers{
sorter: testing.NewObjectSorter(scheme),
}
ls.sorter.AddObjects(objs...)
return ls
}
// NewScheme constructs a scheme from the set of client schemes supported by this package.
func NewScheme() *runtime.Scheme {
scheme := runtime.NewScheme()
for _, addTo := range clientSetSchemes {
addTo(scheme)
}
return scheme
}
// NewScheme constructs a scheme from the set of client schemes supported by this lister.
func (*Listers) NewScheme() *runtime.Scheme {
return NewScheme()
}
// IndexerFor returns the indexer for the given object.
func (l *Listers) IndexerFor(obj runtime.Object) cache.Indexer {
return l.sorter.IndexerForObjectType(obj)
}
// GetKubeObjects filters the Listers initial list of objects to built-in types
func (l *Listers) GetKubeObjects() []runtime.Object {
return l.sorter.ObjectsForSchemeFunc(fakekubeclientset.AddToScheme)
}
// GetSharedObjects filters the Listers initial list of objects to types defined in knative/pkg
func (l *Listers) GetSharedObjects() []runtime.Object {
return l.sorter.ObjectsForSchemeFunc(fakesharedclientset.AddToScheme)
}
// GetHorizontalPodAutoscalerLister gets lister for HorizontalPodAutoscaler resources.
func (l *Listers) GetHorizontalPodAutoscalerLister() autoscalingv2beta1listers.HorizontalPodAutoscalerLister {
return autoscalingv2beta1listers.NewHorizontalPodAutoscalerLister(l.IndexerFor(&autoscalingv2beta1.HorizontalPodAutoscaler{}))
}
// GetVirtualServiceLister gets lister for Istio VirtualService resource.
func (l *Listers) GetVirtualServiceLister() istiolisters.VirtualServiceLister {
return istiolisters.NewVirtualServiceLister(l.IndexerFor(&istiov1alpha3.VirtualService{}))
}
// GetGatewayLister gets lister for Istio Gateway resource.
func (l *Listers) GetGatewayLister() istiolisters.GatewayLister {
return istiolisters.NewGatewayLister(l.IndexerFor(&istiov1alpha3.Gateway{}))
}
// GetDeploymentLister gets lister for K8s Deployment resource.
func (l *Listers) GetDeploymentLister() appsv1listers.DeploymentLister {
return appsv1listers.NewDeploymentLister(l.IndexerFor(&appsv1.Deployment{}))
}
// GetK8sServiceLister gets lister for K8s Service resource.
func (l *Listers) GetK8sServiceLister() corev1listers.ServiceLister {
return corev1listers.NewServiceLister(l.IndexerFor(&corev1.Service{}))
}
// GetEndpointsLister gets lister for K8s Endpoints resource.
func (l *Listers) GetEndpointsLister() corev1listers.EndpointsLister {
return corev1listers.NewEndpointsLister(l.IndexerFor(&corev1.Endpoints{}))
}
// GetSecretLister gets lister for K8s Secret resource.
func (l *Listers) GetSecretLister() corev1listers.SecretLister {
return corev1listers.NewSecretLister(l.IndexerFor(&corev1.Secret{}))
}
// GetConfigMapLister gets lister for K8s ConfigMap resource.
func (l *Listers) GetConfigMapLister() corev1listers.ConfigMapLister {
return corev1listers.NewConfigMapLister(l.IndexerFor(&corev1.ConfigMap{}))
}
// GetNamespaceLister gets lister for Namespace resource.
func (l *Listers) GetNamespaceLister() corev1listers.NamespaceLister {
return corev1listers.NewNamespaceLister(l.IndexerFor(&corev1.Namespace{}))
}

View File

@ -311,6 +311,7 @@ function create_test_cluster_with_retries() {
[[ -z "$(grep -Fo 'does not have enough resources available to fulfill' ${cluster_creation_log})" \
&& -z "$(grep -Fo 'ResponseError: code=400, message=No valid versions with the prefix' ${cluster_creation_log})" \
&& -z "$(grep -Po 'ResponseError: code=400, message=Master version "[0-9a-z\-\.]+" is unsupported' ${cluster_creation_log})" ]] \
&& -z "$(grep -Po 'only \d+ nodes out of \d+ have registered; this is likely due to Nodes failing to start correctly' ${cluster_creation_log})" ]] \
&& return 1
done
done