Home / File/ responsetime_test.go — fiber Source File

responsetime_test.go — fiber Source File

Architecture documentation for responsetime_test.go, a go file in the fiber codebase. 1 imports, 0 dependents.

File go FiberCore Adapters 1 imports 1 functions

Entity Profile

Dependency Diagram

graph LR
  52de1faa_55e4_78d1_8dce_7c80d053db1b["responsetime_test.go"]
  fcef1725_af89_d6cd_36cd_b228cdcc5acd["errors"]
  52de1faa_55e4_78d1_8dce_7c80d053db1b --> fcef1725_af89_d6cd_36cd_b228cdcc5acd
  style 52de1faa_55e4_78d1_8dce_7c80d053db1b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

package responsetime

import (
	"errors"
	"net/http"
	"net/http/httptest"
	"testing"
	"time"

	"github.com/gofiber/fiber/v3"
	"github.com/stretchr/testify/require"
)

func TestResponseTimeMiddleware(t *testing.T) {
	t.Parallel()

	boom := errors.New("boom")

	tests := []struct {
		name                  string
		expectedStatus        int
		useCustomErrorHandler bool
		returnError           bool
		expectHeader          bool
		skipWithNext          bool
	}{
		{
			name:           "sets duration header",
			expectedStatus: fiber.StatusOK,
			expectHeader:   true,
		},
		{
			name:           "skips when Next returns true",
			expectedStatus: fiber.StatusOK,
			expectHeader:   false,
			skipWithNext:   true,
		},
		{
			name:                  "propagates errors",
			expectedStatus:        fiber.StatusTeapot,
			useCustomErrorHandler: true,
			returnError:           true,
			expectHeader:          true,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			t.Parallel()

			configs := []Config(nil)
			if tt.skipWithNext {
				configs = []Config{{
					Next: func(fiber.Ctx) bool {
						return true
					},
				}}
			}

			appConfig := fiber.Config{}
			if tt.useCustomErrorHandler {
				appConfig.ErrorHandler = func(c fiber.Ctx, err error) error {
					t.Helper()
					require.ErrorIs(t, err, boom)

					return c.Status(fiber.StatusTeapot).SendString(err.Error())
				}
			}

			app := fiber.New(appConfig)
			app.Use(New(configs...))

			app.Get("/", func(c fiber.Ctx) error {
				if tt.returnError {
					return boom
				}

				return c.SendStatus(fiber.StatusOK)
			})

			resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", http.NoBody))

			require.NoError(t, err)
			require.Equal(t, tt.expectedStatus, resp.StatusCode)

			header := resp.Header.Get(fiber.HeaderXResponseTime)
			if tt.expectHeader {
				require.NotEmpty(t, header)

				_, parseErr := time.ParseDuration(header)
				require.NoError(t, parseErr)

				return
			}

			require.Empty(t, header)
		})
	}
}

Domain

Subdomains

Types

Dependencies

  • errors

Frequently Asked Questions

What does responsetime_test.go do?
responsetime_test.go is a source file in the fiber codebase, written in go. It belongs to the FiberCore domain, Adapters subdomain.
What functions are defined in responsetime_test.go?
responsetime_test.go defines 1 function(s): TestResponseTimeMiddleware.
What does responsetime_test.go depend on?
responsetime_test.go imports 1 module(s): errors.
Where is responsetime_test.go in the architecture?
responsetime_test.go is located at middleware/responsetime/responsetime_test.go (domain: FiberCore, subdomain: Adapters, directory: middleware/responsetime).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free