gorankusu v0.8.0 (2025-02-03)
The git submodule in "_www/wui" has been renamed to "_www/pakakeh_ts". If you have cloned this project before, you need to rename the sub directory manually and re-init it.
$ mv _www/wui _www/pakakeh_ts $ git submodule update --init
The linter has been replaced many times, from revive to "go vet", and from using binary form of fieldalignment and shadow; to use internal command gocheck that do the same things, which simplify our setup.
Split the CSS into separate file. This is allow modifying the CSS without touching the index.html, and may be used by other HTML files later.
Fix some broken links in the documentation pages, including link to Changelog, README, and SPEC.
gorankusu v0.7.0 (2024-09-07)
Breaking changes
- all: refactoring form input for multipart form-data
-
This changes replace handling type for storing multipart form-data from "map[string][]byte" to [*multipart.Form] based on changes on module "pakakeh.go".
Enhancements
- all: make HTTP Target Params works along with WithRawBody
-
Previously, if WithRawBody is true, the Params will not be rendered and parsed during Run. This changes makes the Params works along with WithRawBody. If Params are set it will be rendered along with text area for raw body.
- _www: support HTTP target with content type "text/html"
-
In the Target form, user can select to send body as "text/html".
- all: add git.sr.ht APIs into example
-
The APIs is created using https://man.sr.ht/git.sr.ht/api.md as reference. We also needs the API to create webhook since no other way to create it in current sourcehut web.
Bug fixes
- _www: fix save on null Headers and Vars
-
If the user does not define the Headers, clicking Run on any HTTP Target will result in error when "save" function executed before it.
- _www: fix form input type file where content is binary
-
If the file in FormInput is binary, the conversion to "FormInput.value" will fail with an error like "invalid characters in String".
- all: use [route.Path] to generate parameters
-
Using [route.String] does not works if the parameter can be empty, while [route.Path] replace all keys and return the path as is.
Chores
- all: add task to initialize the repository and tools
-
The task "init" include initializing git submodule, installing third party tools for linters, and installing node packages.
gorankusu v0.6.1 (2024-04-06)
This release replace "share" module with "pakakeh.go". The "share" module repository has been moved to SourceHut with new name "pakakeh.go". For more information about the changes see "pakakeh.go" project page at https://sr.ht/~shulhan/pakakeh.go.
gorankusu v0.6.0 (2024-03-05)
Breaking changes
- target: changes Opts to non-pointer
-
Previously, we use pointer to indicated that the Target can be attacked or not. Since HTTPTarget now have AllowAttack, this options can be changes to non-pointer.
- all: change the signature of default request/response dumper
-
Instead of function that use the signature of HTTPRequestDumper/ HTTPResponseDumper; change it to function that return HTTPRequestDumper/ HTTPResponseDumper. In this way, the documentation can show the clear relation between function and its type.
New features
- all: add global HTTP headers for Target
-
The Headers field on Target define the global headers that will be send along with all HTTPTarget or WebSocketTarget. The same header can also be defined on HTTPTarget that override the value of Target.
- all: add default HTTPRunHandler
-
Previously, the default HTTPRunHandler is hidden, called dynamically based on Run is nil or not. This changes make it exported as function that return HTTPRunHandler to show how define and create a custom HTTPRunHandler.
- all: add default HTTPParamsConverter for [HTTPTarget.ParamsConverter]
-
The DefaultParamsConverter define default function to convert [HTTPTarget.Params] to its equivalent parameters in HTTP, either as query in URL or as bytes in body.
This changes introduce breaking changes in HTTPTarget where field ConvertParams renamed to ParamsConverter.
- all: set default HTTPTarget Attack if its not set
-
Previously, the function for Attack need to be coded manually.
This changes introduce new function DefaultHTTPAttack that generate HTTPAttackHandler based on the HTTPTarget method, request type, and Params; if AllowAttack is true and Attack is nil.
Bug fixes
- all: fix null navigation links
-
If the navLinks fields is empty, the HTTP API will return "null" and cause the rendering error. This changes fix this issue by allocating the slice navLinks with one capabilities to make JSON always return "[]" if its empty.
gorankusu v0.5.0 (2024-02-08)
This release rename the project from "trunks" to "gorankusu".
The original idea of "trunks" is because the core library that we use for load testing is named vegeta (from Dragon Ball), and Vegeta has a son named Trunks. In English, trunks also have multiple meanings.
In order to have a unique name, we rename the project to "gorankusu", which is a combination of "go" (the main programming language that built the application) and "torankusu" the Hepburn of "Trunks".
Breaking changes
In order for making the code consistent and conform with linters, some exported types, fields, methods, and functions has been renamed.
-
In AttackResult type, field HttpTargetID renamed to HTTPTargetID
-
HttpConvertParams renamed to HTTPConvertParams
-
HttpRunHandler renamed to HTTPRunHandler
-
HttpAttackHandler renamed to HTTPAttackHandler
-
HttpPreAttackHandler renamed to HTTPPreAttackHandler
-
HttpTarget renamed to HTTPTarget
and many more.
New features
- all: allow submit free form request body in HTTPTarget
-
In HTTPTarget we add fields RawBody and WithRawBody.
The field RawBody can be filled by anything by user. Those field can be activated by setting WithRawBody.
Implements: https://todo.sr.ht/~shulhan/gorankusu/3
- all: implement form input file
-
The FormInput now can be set to FormInputKindFile that will rendered as "<input type='file’ …>" on the web user interface.
Once submitted, the file name, type, size, and lastModification will be stored under FormInput Filename, Filetype, Filesize, and Filemodms.
Implements: https://todo.sr.ht/~shulhan/trunks/1
- all: add type to customize how to dump HTTP request and response
-
The HTTPRequestDumper define an handler to convert [http.Request] into [RunResponse] DumpRequest. The HTTPResponseDumper define an handler to convert [http.Response] into [RunResponse] DumpResponse.
In HTTPTarget we add fields RequestDumper and ResponseDumper that if its not nil it will be used to dump HTTP request and response to raw bytes.
- all: support parameter binding in HTTP Path
-
If HTTP Path contains key, for example "/:book", and the Params contains the same key, the Path will be filled with value from Params. The same key in Params will be deleted and not send on query parameter or body.
Enhancements
- _www: check HTTP response status greater or equal 400
-
Any HTTP status code below 400 are still processable and not an error.
gorankusu v0.4.1 (2023-11-11)
This release only have chores, it should not break anything.
- go.mod: update all dependencies
-
This changes set minimum Go version to version 1.20. The vegeta module finally has some update to v12.11.1.
- gitmodules: use https instead of git scheme
-
Using git scheme require private key to clone the remote repository.
- _www: update wui module
-
While at it reformat all files using default prettier.
- _www: setup eslint for linting TypeScript files
-
This changes also apply all eslint recommendations.
- Makefile: replace the Go linter and apply all their recommendations
-
Previously, we use golangci-lint as linter. This linter does not provides any useful recommendation lately and the development is quite a mess, sometimes its break when using Go tip.
In this changes we replace it with revive, fieldalignment, and shadow; and fix all of their recommendations.
gorankusu v0.4.0 (2023-05-16)
Bug fixes
- all: fix panic when attacking HTTP due to nil Attack handler
-
In attack endpoint, check if the Attack is nil before we push the request to attack queue.
Enhancements
- _www: replace WebSocket handlers with HTTP endpoints
-
The Attack and attack Cancel now call the HTTP endpoints.
- all: add boolean Kind for FormInput, FormInputKindBoolean
-
The FormInputKindBoolean only used for convertion, for example ToJsonObject. In the WUI, it still rendered as string, not as checkbox.
FormInput with this Kind will be converted to true in ToJsonObject if the Value is either "true", "yes", or "1".
- all: check and call ConvertParams when running HttpTarget
-
If the ConvertParams field is set, use it to convert the parameters into desired type.
Chores
- all: move the _doc directory under _www
- all: convert the README from asciidoc to markdown
- all: remove WebSocket server
-
Using WebSocket for communication in client require additional setup, especially if its behind proxy. For example, if we serve the gorankusu server under domain testing.local behind proxy, we need to setup route for the WebSocket too.
- go.mod: set Go version to 1.19 and update all dependencies
gorankusu v0.3.0 (2022-08-25)
This release set the minimum Go version to 1.18 and update all modules.
Chores
- all: group all documentations under directory _doc
-
The _doc directory provides an entry point for all documentation. While at it we reformat the README to use AsciiDoc markup.
- example: fix the HTTP POST handler
-
Remove call to ParseMultipartform since the request type is x-www-form-urlencoded not multipart/form-data.
- all: remove unused field Locker in RunRequest
- all: fix all linter warnings
-
Some linter, govet, warns about possible copied Mutex on HttpRequest. To fix this we implement method clone and Stringer on HttpRequest.
gorankusu v0.2.0 (2022-03-13)
Release gorankusu under GPL 3.0 or later license.
See https://kilabit.info/journal/2022/gpl for more information.
gorankusu v0.1.0 (2022-02-05)
Module gorankusu is a library and HTTP service that provide web user interface to test HTTP service, similar to Postman, and for load testing.
For the load testing we use vegeta [1] as the backend.