Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
6 changes: 6 additions & 0 deletions tests/framework/generate_manifests.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"io"
"text/template"

. "github.com/onsi/ginkgo/v2"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/util/yaml"
"sigs.k8s.io/controller-runtime/pkg/client"
Expand Down Expand Up @@ -183,8 +184,11 @@ func GenerateScaleListenerObjects(numListeners int, tls bool) (ScaleObjects, err

backends = append(backends, backendName)

GinkgoWriter.Printf("Generating manifests for listeners %v and route %v\n", listeners, r)
objects, err := generateManifests(listeners, []route{r})
if err != nil {
GinkgoWriter.Printf("Error generating manifests: %v\n", err)

return ScaleObjects{}, err
}

Expand All @@ -209,6 +213,7 @@ func GenerateScaleListenerObjects(numListeners int, tls bool) (ScaleObjects, err
}

func generateSecrets(secrets []string) ([]client.Object, error) {
GinkgoWriter.Printf("Generating secrets\n")
objects := make([]client.Object, 0, len(secrets))

for _, secret := range secrets {
Expand All @@ -225,6 +230,7 @@ func generateSecrets(secrets []string) ([]client.Object, error) {

objects = append(objects, objs...)
}
GinkgoWriter.Printf("Generated %d secrets\n", len(objects))

return objects, nil
}
Expand Down
13 changes: 13 additions & 0 deletions tests/framework/logging.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package framework

type Option func(*Options)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I moved it to separate in case if it can be needed not only for requests in the future


type Options struct {
logEnabled bool
}

func WithLoggingDisabled() Option {
return func(opts *Options) {
opts.logEnabled = false
}
}
27 changes: 24 additions & 3 deletions tests/framework/ngf.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,35 @@ type InstallationConfig struct {
// InstallGatewayAPI installs the specified version of the Gateway API resources.
func InstallGatewayAPI(apiVersion string) ([]byte, error) {
apiPath := fmt.Sprintf("%s/v%s/standard-install.yaml", gwInstallBasePath, apiVersion)
GinkgoWriter.Printf("Installing Gateway API version %q at API path %q\n", apiVersion, apiPath)

cmd := exec.CommandContext(
context.Background(),
"kubectl", "apply", "-f", apiPath,
)
output, err := cmd.CombinedOutput()
if err != nil {
GinkgoWriter.Printf("Error installing Gateway API version %q: %v\n", apiVersion, err)

return output, err
}
GinkgoWriter.Printf("Successfully installed Gateway API version %q\n", apiVersion)

return nil, nil
}

// UninstallGatewayAPI uninstalls the specified version of the Gateway API resources.
func UninstallGatewayAPI(apiVersion string) ([]byte, error) {
apiPath := fmt.Sprintf("%s/v%s/standard-install.yaml", gwInstallBasePath, apiVersion)
GinkgoWriter.Printf("Uninstalling Gateway API version %q at API path %q\n", apiVersion, apiPath)

output, err := exec.CommandContext(context.Background(), "kubectl", "delete", "-f", apiPath).CombinedOutput()
if err != nil && !strings.Contains(string(output), "not found") {
GinkgoWriter.Printf("Error uninstalling Gateway API version %q: %v\n", apiVersion, err)

return output, err
}
GinkgoWriter.Printf("Successfully uninstalled Gateway API version %q\n", apiVersion)

return nil, nil
}
Expand Down Expand Up @@ -94,9 +102,14 @@ func InstallNGF(cfg InstallationConfig, extraArgs ...string) ([]byte, error) {

// CreateLicenseSecret creates the NGINX Plus JWT secret.
func CreateLicenseSecret(k8sClient client.Client, namespace, filename string) error {
GinkgoWriter.Printf("Creating NGINX Plus license secret in namespace %q from file %q\n", namespace, filename)

conf, err := os.ReadFile(filename)
if err != nil {
return fmt.Errorf("error reading file %q: %w", filename, err)
readFileErr := fmt.Errorf("error reading file %q: %w", filename, err)
GinkgoWriter.Printf("%v\n", readFileErr)

return readFileErr
}

ctx, cancel := context.WithTimeout(context.Background(), DefaultTimeoutConfig().CreateTimeout)
Expand All @@ -109,7 +122,10 @@ func CreateLicenseSecret(k8sClient client.Client, namespace, filename string) er
}

if err := k8sClient.Create(ctx, ns); err != nil && !apierrors.IsAlreadyExists(err) {
return fmt.Errorf("error creating namespace: %w", err)
createNSErr := fmt.Errorf("error creating namespace: %w", err)
GinkgoWriter.Printf("%v\n", createNSErr)

return createNSErr
}

secret := &core.Secret{
Expand All @@ -123,7 +139,10 @@ func CreateLicenseSecret(k8sClient client.Client, namespace, filename string) er
}

if err := k8sClient.Create(ctx, secret); err != nil && !apierrors.IsAlreadyExists(err) {
return fmt.Errorf("error creating secret: %w", err)
createSecretErr := fmt.Errorf("error creating secret: %w", err)
GinkgoWriter.Printf("%v\n", createSecretErr)

return createSecretErr
}

return nil
Expand Down Expand Up @@ -170,6 +189,7 @@ func UninstallNGF(cfg InstallationConfig, k8sClient client.Client) ([]byte, erro
args := []string{
"uninstall", cfg.ReleaseName, "--namespace", cfg.Namespace,
}
GinkgoWriter.Printf("Uninstalling NGF with command: helm %v\n", strings.Join(args, " "))

output, err := exec.CommandContext(context.Background(), "helm", args...).CombinedOutput()
if err != nil && !strings.Contains(string(output), "release: not found") {
Expand Down Expand Up @@ -204,6 +224,7 @@ func UninstallNGF(cfg InstallationConfig, k8sClient client.Client) ([]byte, erro
func setTelemetryArgs(cfg InstallationConfig) []string {
var args []string

GinkgoWriter.Printf("Setting telemetry to %v\n", cfg.Telemetry)
if cfg.Telemetry {
args = append(args, formatValueSet("nginxGateway.productTelemetry.enable", "true")...)
} else {
Expand Down
23 changes: 20 additions & 3 deletions tests/framework/portforward.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"sync"
"time"

. "github.com/onsi/ginkgo/v2"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/portforward"
"k8s.io/client-go/transport/spdy"
Expand All @@ -20,12 +21,18 @@ import (
func PortForward(config *rest.Config, namespace, podName string, ports []string, stopCh <-chan struct{}) error {
roundTripper, upgrader, err := spdy.RoundTripperFor(config)
if err != nil {
return fmt.Errorf("error creating roundtripper: %w", err)
roundTripperErr := fmt.Errorf("error creating roundtripper: %w", err)
GinkgoWriter.Printf("%v\n", roundTripperErr)

return roundTripperErr
}

serverURL, err := url.Parse(config.Host)
if err != nil {
return fmt.Errorf("error parsing rest config host: %w", err)
parseConfigErr := fmt.Errorf("error parsing rest config host: %w", err)
GinkgoWriter.Printf("%v\n", parseConfigErr)

return parseConfigErr
}

serverURL.Path = path.Join(
Expand All @@ -35,14 +42,24 @@ func PortForward(config *rest.Config, namespace, podName string, ports []string,
"portforward",
)

GinkgoWriter.Printf("Creating new dialer for serverURL: %q\n", serverURL)
dialer := spdy.NewDialer(upgrader, &http.Client{Transport: roundTripper}, http.MethodPost, serverURL)

forward := func() error {
readyCh := make(chan struct{}, 1)

GinkgoWriter.Printf(
"Starting port-forward to pod %q in namespace %q for ports %v\n",
podName,
namespace,
ports,
)
forwarder, err := portforward.New(dialer, ports, stopCh, readyCh, newSafeBuffer(), newSafeBuffer())
if err != nil {
return fmt.Errorf("error creating port forwarder: %w", err)
createPortForwardErr := fmt.Errorf("error creating port forwarder: %w", err)
GinkgoWriter.Printf("%v\n", createPortForwardErr)

return createPortForwardErr
}

return forwarder.ForwardPorts()
Expand Down
46 changes: 44 additions & 2 deletions tests/framework/request.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (
"net/http"
"strings"
"time"

. "github.com/onsi/ginkgo/v2"
)

// Get sends a GET request to the specified url.
Expand All @@ -20,18 +22,35 @@ func Get(
url, address string,
timeout time.Duration,
headers, queryParams map[string]string,
opts ...Option,
) (int, string, error) {
resp, err := makeRequest(http.MethodGet, url, address, nil, timeout, headers, queryParams)
options := &Options{logEnabled: true}
for _, opt := range opts {
opt(options)
}

resp, err := makeRequest(http.MethodGet, url, address, nil, timeout, headers, queryParams, opts...)
if err != nil {
if options.logEnabled {
GinkgoWriter.Printf(
"ERROR occurred during getting response, error: %s\nReturning status: 0, body: ''\n",
err,
)
}

return 0, "", err
}
defer resp.Body.Close()

body := new(bytes.Buffer)
_, err = body.ReadFrom(resp.Body)
if err != nil {
GinkgoWriter.Printf("ERROR in Body content: %v returning body: ''\n", err)
return resp.StatusCode, "", err
}
if options.logEnabled {
GinkgoWriter.Printf("Successfully received response and parsed body: %s\n", body.String())
}

return resp.StatusCode, body.String(), nil
}
Expand All @@ -44,14 +63,20 @@ func Post(
timeout time.Duration,
headers, queryParams map[string]string,
) (*http.Response, error) {
return makeRequest(http.MethodPost, url, address, body, timeout, headers, queryParams)
response, err := makeRequest(http.MethodPost, url, address, body, timeout, headers, queryParams)
if err != nil {
GinkgoWriter.Printf("ERROR occurred during getting response, error: %s\n", err)
}

return response, err
}

func makeRequest(
method, url, address string,
body io.Reader,
timeout time.Duration,
headers, queryParams map[string]string,
opts ...Option,
) (*http.Response, error) {
dialer := &net.Dialer{}

Expand All @@ -74,6 +99,23 @@ func makeRequest(
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()

options := &Options{logEnabled: true}

for _, opt := range opts {
opt(options)
}
if options.logEnabled {
requestDetails := fmt.Sprintf(
"Method: %s, URL: %s, Address: %s, Headers: %v, QueryParams: %v\n",
strings.ToUpper(method),
url,
address,
headers,
queryParams,
)
GinkgoWriter.Printf("Sending request: %s", requestDetails)
}

req, err := http.NewRequestWithContext(ctx, method, url, body)
if err != nil {
return nil, err
Expand Down
Loading