* chore: update docs and workflows for go1.24
* Fix listen bug
* Use b.Loop() for benchmarks https://go.dev/blog/testing-b-loop
* Use b.Loop() for benchmarks https://go.dev/blog/testing-b-loop
* Revert b.Loop() for some benchmarks
* Change genericParser benchmarks (runParallel)
* Change Benchmark_Router_Github_API benchmarks (runParallel)
* ♻️ refact: make genericParseType return error
* 🐛 fix: return error when parsing unsupported type
* 🚨 test: cover the default value for Params
* 🚨 test: cover default value on parsing error
* ♻️ refact: change the benchmark name
* 🚨 test: remove the duplicated maxUint16 test case
---------
Co-authored-by: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
* 🔥 feat: add Req and Res interfaces
Split the existing Ctx API into two separate APIs for Requests and
Responses. There are two goals to this change:
1. Reduce cognitive load by making it more obvious whether a Ctx method
interacts with the request or the response.
2. Increase API parity with Express.
* fix(req,res): several issues
* Sprinkle in calls to Req() and Res() to a few unit tests
* Fix improper initialization caught by ^
* Add a few missing methods
* docs: organize Ctx methods by request and response
* feat(req,res): sync more missed methods
---------
Co-authored-by: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
* ♻️ Refactor: Extract testConn err to variable
* ♻️ Refactor: Extract ErrTestGotEmptyResponse from app.Test()
* 🩹 Fix: Fix `app.Test()` auto-failing when testConn is closed
* 🩹 Fix(app_test.go): Use tab for indent instead of spaces
* 🩹 Fix(app_test.go): Fix to respect gofmt linter
* ♻️ Refactor: Update Drop tests to verify error type
* Add Drop method to DefaultCtx and remove redundant checks
Introduced a Drop method in DefaultCtx for closing connections, enabling easier resource management. Removed unnecessary nil-checks for headers in manager_msgp to simplify code logic. Added a unit test to ensure the new Drop method behaves as expected.
* Add `Drop` method to Fiber context API documentation
The `Drop` method allows silently terminating client connections without sending HTTP headers or a response body. This is useful for scenarios like mitigating DDoS attacks or blocking unauthorized access to sensitive endpoints. Example usage and function signature are included in the updated documentation.
* Remove extraneous blank line in documentation.
Eliminated an unnecessary blank line in the API context documentation for improved readability and formatting consistency. No functional changes were made to the content.
* Update API documentation example to return "Hello World!"
Revised the example code in the API documentation to return a generic "Hello World!" string instead of a dynamic response. This improves consistency and simplifies the example for easier understanding.
* Refactor Drop method and extend test coverage.
Simplified the Drop method by inlining the connection close call. Added new test cases to ensure proper handling of no-response scenarios and improved overall test coverage.
* fix golangci-lint issue
* Add test for Ctx.Drop with middleware interaction
This test ensures the correct behavior of the Ctx.Drop method when used with middleware, including response handling and error scenarios. It verifies that the middleware and handler properly handle the Drop call and its resulting effects.
* Add Drop method to DefaultCtx for closing connections
The Drop method allows closing connections without sending a response, improving control over connection handling. Also updated a test assertion to use StatusOK for improved readability and consistency.
* Refine Drop method comments to clarify error handling.
Explain the rationale for not wrapping errors in the Drop method. Emphasize that the returned error is solely for logging and not for further propagation or processing.
* Update Drop method documentation for clarity
Clarified the `Drop` method's behavior, specifying that it closes the connection without sending headers or a body. Added examples of use cases, such as DDoS mitigation and blocking sensitive endpoints.
* Refactor response header setting in middleware.
Replaced the direct header setting with the `Set` method for consistency and improved clarity. Removed a test case checking for a panic on closed response body as it is no longer applicable.
* 🔥 Feature: Add SendStreamWriter to Ctx
Create a new `*DefaultCtx` method called `SendStreamWriter()`
that maps to fasthttp's `Response.SetBodyStreamWriter()`
* 🚨 Test: Validate regular use of c.SendStreamWriter()
- Adds Test_Ctx_SendStreamWriter to ctx_test.go
* 🚨 Test: (WIP) Validate interrupted use of c.SendStreamWriter()
- Adds Test_Ctx_SendStreamWriter_Interrupted to ctx_test.go
- (Work-In-Progress) This test verifies that some data is
still sent before a client disconnects when using the method
`c.SendStreamWriter()`.
**Note:** Running this test reports a race condition when using
the `-race` flag or running `make test`. The test uses a channel
and mutex to prevent race conditions, but still triggers a warning.
* 📚 Doc: Add `SendStreamWriter` to docs/api/ctx.md
* 🩹 Fix: Remove race condition in Test_Ctx_SendStreamWriter_Interrupted
* 🎨 Styles: Update ctx_test.go to respect golangci-lint
* 📚 Doc: Update /docs/api/ctx.md to show proper `w.Flush()` error handling
* 📚 Doc: Add SendStreamWriter details to docs/whats_new.md
* 🎨 Styles: Update /docs/whats_new.md to respect markdownlint-cli2
* 🩹 Fix: Fix Fprintf syntax error in docs/whats_new.md
---------
Co-authored-by: M. Efe Çetin <efectn@protonmail.com>
* 🔥 Feature: Add thread-safe reading from a closed testConn
* 🔥 Feature: Add TestConfig to app.Test()
This commit is summarized as:
- Add the struct `TestConfig` as a parameter for `app.Test()` instead of `timeout`
- Add documentation of `TestConfig` to docs/api/app.md and in-line
- Modify middleware to use `TestConfig` instead of the previous implementation
Fixes#3149
* 📚 Doc: Add more details about TestConfig in docs
* 🩹 Fix: Correct testConn tests
- Fixes Test_Utils_TestConn_Closed_Write
- Fixes missing regular write test
* 🎨 Style: Respect linter in Add App Test Config
* 🎨 Styles: Update app.go to respect linter
* ♻️ Refactor: Rename TestConfig's ErrOnTimeout to FailOnTimeout
- Rename TestConfig.ErrOnTimeout to TestConfig.FailOnTimeout
- Update documentation to use changed name
- Also fix stale documentation about passing Timeout as a
single argument
* 🩹 Fix: Fix typo in TestConfig struct comment in app.go
* ♻️ Refactor: Change app.Test() fail on timeouterror to os.ErrDeadlineExceeded
* ♻️ Refactor:Update middleware that use the same TestConfig to use a global variable
* 🩹 Fix: Update error from FailOnTimeout to os.ErrDeadlineExceeded in tests
* 🩹 Fix: Remove errors import from middlware/proxy/proxy_test.go
* 📚 Doc: Add `app.Test()` config changes to docs/whats_new.md
* ♻ Refactor: Change app.Test() and all uses to accept 0 as no timeout instead of -1
* 📚 Doc: Add TestConfig option details to docs/whats_new.md
* 🎨 Styles: Update docs/whats_new.md to respect markdown-lint
* 🎨 Styles: Update docs/whats_new.md to use consistent style for TestConfig options description
---------
Co-authored-by: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
* Rename UserContext() to Context(). Rename Context() to RequestCtx()
* Update Ctxt docs and What's new
* Remove extra blank lines
---------
Co-authored-by: M. Efe Çetin <efectn@protonmail.com>
* Use composites for internal structures. Fix alignment of structures across Fiber
* Update struct alignment in test files
* Enable alignment check with govet
* Fix ctx autoformat unit-test
* Revert app Config struct. Add betteralign to Makefile
* Disable comment on alert since it wont work for forks
* Update benchmark.yml
* Update benchmark.yml
* Remove warning from using positional fields
* Update router.go
* test(ctx_test): Fix race condition
* chore: Release ctx resource after sending file
* refactor: sendFileBodyReader function
Refactor the `sendFileBodyReader` function to remove the unnecessary `app` parameter. This simplifies the function signature and improves code readability.
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* [v3 Maintenance]: Consolidate and Document Core Changes in v3
* feature: implement generic params function
* update: add ctx generic params benchmark function
* fix: fix linter errors on boolean types
* fix: fix linter errors on float variable types
* tests: add Test_Params_TypeAssertFail
Co-authored-by: Jason McNeil <sixcolors@mac.com>
* Update ctx_test.go
* typo: change genericType typo to GenericType in documents
* remove ParamsInt method and rewrite Params method
* add genericParseType tests and benchmarks and simplify genericQuery and genericParams tests and benchmarks
* added GetReqHeader generic function
* added tests for params generic function
* add tests for GetReqHeader generic function
* added GetReqHeader generic function
* Revert "added GetReqHeader generic function"
This reverts commit a63cebb7121fdd315c53b6f0aa3042612a0d23ac.
* fix tests and benchamarks of generic tests
* added default value to array test genericParse
* fix Params generic function on default value and fixes some tests and typos
* remove Test_Params_TypeAssertFail function(it didn't panic anyway)
* fix bad usage on parallel tests
* add convert function
* fix generic tests
* fix fail tests on use parallel multiple time
* fix typo on params comment section
* remove pointer refer on Convert
* update generic benchmarks
* reslove conflicts1
* add specific tests to integer and unsigned integer
generic parser
* fix typo on Convert document
* change uint tests of Test_genericParseTypeInts
* move generic types to utils.go file and change
bitsize of int value type to 0
* update genericParseInt unit tests
* update generic uint tests and pass value type in
check functions
* reverse dependency of Params and genericParams
* update convert docs
---------
Co-authored-by: Jason McNeil <sixcolors@mac.com>
Co-authored-by: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>
Co-authored-by: RW <rene@gofiber.io>
* added fix for embedded struct field query parsing
* updated ctx parser tests to test embedded struct field parsing
---------
Co-authored-by: Juan Calderon-Perez <835733+gaby@users.noreply.github.com>