diff --git a/test/clients.go b/test/clients.go index 005ead3c4..8384955ad 100644 --- a/test/clients.go +++ b/test/clients.go @@ -19,7 +19,11 @@ limitations under the License. package test import ( + "github.com/knative/pkg/test/logging" + "github.com/knative/pkg/test/spoof" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" + k8styped "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) @@ -29,6 +33,11 @@ type KubeClient struct { Kube *kubernetes.Clientset } +// NewSpoofingClient returns a spoofing client to make requests +func NewSpoofingClient(client *KubeClient, logger *logging.BaseLogger, domain string, resolvable bool) (*spoof.SpoofingClient, error) { + return spoof.New(client.Kube, logger, domain, resolvable) +} + // NewKubeClient instantiates and returns several clientsets required for making request to the // kube client specified by the combination of clusterName and configPath. Clients can make requests within namespace. func NewKubeClient(configPath string, clusterName string) (*KubeClient, error) { @@ -56,3 +65,22 @@ func buildClientConfig(kubeConfigPath string, clusterName string) (*rest.Config, &overrides).ClientConfig() } +// UpdateConfigMap updates the config map for specified @name with values +func (client *KubeClient) UpdateConfigMap(name string, configName string, values map[string]string) error { + configMap, err := client.getConfigMap(name).Get(configName, metav1.GetOptions{}) + if err != nil { + return err + } + + for key, value := range values { + configMap.Data[key] = value + } + + _, err = client.getConfigMap(name).Update(configMap) + return err +} + +// getConfigMap gets the knative serving config map. +func (client *KubeClient) getConfigMap(name string) k8styped.ConfigMapInterface { + return client.Kube.CoreV1().ConfigMaps(name) +} diff --git a/test/request.go b/test/request.go index 28c830dc5..d3607a519 100644 --- a/test/request.go +++ b/test/request.go @@ -24,10 +24,9 @@ import ( "net/http" "strings" + "github.com/knative/pkg/test/logging" "github.com/knative/pkg/test/spoof" "go.opencensus.io/trace" - "go.uber.org/zap" - "k8s.io/client-go/kubernetes" ) // MatchesAny is a NOP matcher. This is useful for polling until a 200 is returned. @@ -81,12 +80,12 @@ func EventuallyMatchesBody(expected string) spoof.ResponseChecker { // the domain in the request headers, otherwise it will make the request directly to domain. // desc will be used to name the metric that is emitted to track how long it took for the // domain to get into the state checked by inState. Commas in `desc` must be escaped. -func WaitForEndpointState(kubeClientset *kubernetes.Clientset, logger *zap.SugaredLogger, domain string, inState spoof.ResponseChecker, desc string, resolvable bool) error { +func WaitForEndpointState(kubeClient *KubeClient, logger *logging.BaseLogger, domain string, inState spoof.ResponseChecker, desc string, resolvable bool) error { metricName := fmt.Sprintf("WaitForEndpointState/%s", desc) _, span := trace.StartSpan(context.Background(), metricName) defer span.End() - client, err := spoof.New(kubeClientset, logger, domain, resolvable) + client, err := NewSpoofingClient(kubeClient, logger, domain, resolvable) if err != nil { return err } diff --git a/test/spoof/spoof.go b/test/spoof/spoof.go index b7bc57ea0..21f5b83bb 100644 --- a/test/spoof/spoof.go +++ b/test/spoof/spoof.go @@ -25,7 +25,7 @@ import ( "net/http" "time" - "go.uber.org/zap" + "github.com/knative/pkg/test/logging" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes" @@ -46,6 +46,7 @@ type Response struct { Body []byte } +// Interface defines the actions that can be performed by the spoofing client. type Interface interface { Do(*http.Request) (*Response, error) Poll(*http.Request, ResponseChecker) (*Response, error) @@ -71,7 +72,7 @@ type SpoofingClient struct { endpoint string domain string - logger *zap.SugaredLogger + logger *logging.BaseLogger } // New returns a SpoofingClient that rewrites requests if the target domain is not `resolveable`. @@ -79,7 +80,7 @@ type SpoofingClient struct { // follow the ingress if it moves (or if there are multiple ingresses). // // If that's a problem, see test/request.go#WaitForEndpointState for oneshot spoofing. -func New(kubeClientset *kubernetes.Clientset, logger *zap.SugaredLogger, domain string, resolvable bool) (*SpoofingClient, error) { +func New(kubeClientset *kubernetes.Clientset, logger *logging.BaseLogger, domain string, resolvable bool) (*SpoofingClient, error) { sc := SpoofingClient{ Client: http.DefaultClient, RequestInterval: requestInterval,