ealen/echo-server

By ealen

Updated over 2 years ago

REST Server Tests (Echo-Server) API / Docker / Kubernetes / Helm (Very small image)

Image
36

10M+

ealen/echo-server repository overview

Echo-Server / Docker / Kubernetes / Helm

Codecov CodeFactor Grade GitHub stars GitHub issues DockerHub DockerHub

An echo server is a server that replicates the request sent by the client and sends it back.

Available:

  • GET / POST / PUT / PATCH / DELETE
  • Request (Query, Body, IPs, Host, Urls...)
  • Request Headers / Response Headers
  • Environment variables
  • Control via Headers/Query
  • Folders and Files
  • Monitoring

docker

Configuration

EnvironmentHelmCLIDefault
PORTservice.port--port80
LOGS__IGNORE__PINGapplication.logs.ignore.ping--logs:ignore:pingfalse
ENABLE__HOSTapplication.enable.host--enable:hosttrue
ENABLE__HTTPapplication.enable.http--enable:httptrue
ENABLE__REQUESTapplication.enable.request--enable:requesttrue
ENABLE__COOKIESapplication.enable.cookies--enable:cookiestrue
ENABLE__HEADERapplication.enable.header--enable:headertrue
ENABLE__ENVIRONMENTapplication.enable.environment--enable:environmenttrue
ENABLE__FILEapplication.enable.file--enable:filetrue

Use Echo-Server

curl

I use jq for nice curl results ;)

Custom responses
QueryHeaderContentConditions
?echo_code=X-ECHO-CODEHTTP code 200, 404200 <= CODE <= 599
404-401 or 200-500-301
?echo_body=X-ECHO-BODYBody message
?echo_env_body=X-ECHO-ENV-BODYThe key of environment variableEnable environment true
?echo_header=X-ECHO-HEADERResponse Header Lang: en-USEnable header true
?echo_time=X-ECHO-TIMEWait time in ms0 <= TIME <= 30.000
?echo_file=X-ECHO-FILEPath of Directory or FileEnable file true
Custom HTTP Status Code
➜ curl -I --header 'X-ECHO-CODE: 404' localhost:8080
➜ curl -I localhost:8080/?echo_code=404

HTTP/1.1 404 Not Found
➜ curl -I --header 'X-ECHO-CODE: 404-300' localhost:8080
➜ curl -I localhost:8080/?echo_code=404-300

HTTP/1.1 404 Not Found
HTTP/1.1 300 Multiple Choices
➜ for i in {1..10}
➜ do
➜    curl -I localhost:8080/?echo_code=200-400-500
➜ done

HTTP/1.1 500 Internal Server Error
HTTP/1.1 400 Bad Request
HTTP/1.1 200 OK
HTTP/1.1 500 Internal Server Error
HTTP/1.1 200 OK
HTTP/1.1 500 Internal Server Error
Custom Body
➜ curl --header 'X-ECHO-BODY: amazing' localhost:8080
➜ curl localhost:8080/?echo_body=amazing

"amazing"
Custom Body with Environment variable value
➜ curl --header 'X-ECHO-ENV-BODY: HOSTNAME' localhost:8080
➜ curl localhost:8080/?echo_env_body=HOSTNAME

"c53a9ed79fa2"
➜ for i in {1..10}
➜ do
➜    curl localhost:8080/?echo_env_body=HOSTNAME
➜ done

"c53a9ed79fa2"
"f10c3af61e40"
"c53a9ed79fa2"
"f10c3af61e40"
"c53a9ed79fa2"
Custom Headers
➜ curl --header 'X-ECHO-HEADER: One:1' localhost:8080
➜ curl localhost:8080/?echo_header=One:1

HTTP/1.1 200 OK
One: 1
➜ curl --header 'X-ECHO-HEADER: One:1, Two:2' localhost:8080
➜ curl "localhost:8080/?echo_header=One:1,%20Two:2"

HTTP/1.1 200 OK
One: 1
Two: 2
Custom response latency
➜ curl --header 'X-ECHO-TIME: 5000' localhost:8080
➜ curl "localhost:8080/?echo_time=5000"

⏳... 5000 ms

You can change default validations with

ENVIRONMENTCLIDefault
CONTROLS__TIMES__MIN--controls:times:min0
CONTROLS__TIMES__MAX--controls:times:max60000

(Latency is defined in milliseconds)

File/Folder explorer
➜ curl --header 'X-ECHO-FILE: /' localhost:8080
➜ curl "localhost:8080/?echo_file=/"

["app", "bin", "etc", "usr", "var"]
Combine custom actions
➜ curl --header 'X-ECHO-CODE: 401' --header 'X-ECHO-BODY: Oups' localhost:8080
➜ curl "localhost:8080/?echo_body=Oups&echo_code=401"

HTTP/1.1 401 Unauthorized
"Oups"

Change default Queries/Request commands

Read the docs

EnvironmentCLIDefault
COMMANDS__HTTPBODY__QUERY--commands:httpBody:queryecho_body
COMMANDS__HTTPBODY__HEADER--commands:httpBody:headerx-echo-body
COMMANDS__HTTPENVBODY__QUERY--commands:httpEnvBody:queryecho_env_body
COMMANDS__HTTPENVBODY__HEADER--commands:httpEnvBody:headerx-echo-env-body
COMMANDS__HTTPCODE__QUERY--commands:httpCode:queryecho_code
COMMANDS__HTTPCODE__HEADER--commands:httpCode:headerx-echo-code
COMMANDS__HTTPHEADERS__QUERY--commands:httpHeaders:queryecho_header
COMMANDS__HTTPHEADERS__HEADER--commands:httpHeaders:headerx-echo-header
COMMANDS__TIME__QUERY--commands:time:queryecho_time
COMMANDS__TIME__HEADER--commands:time:headerx-echo-time
COMMANDS__FILE__QUERY--commands:file:queryecho_file
COMMANDS__FILE__HEADER--commands:file:headerx-echo-file

Loggers

Read the docs

EnvironmentCLIDefault
LOGS__APP--logs:appecho-server
LOGS__LEVEL--logs:leveldebug
LOGS__FORMAT--logs:formatdefault
Format
LOG FORMATDESCRIPTION
defaultCombine line & object
lineSimple `Fri, 22 Jan 2021 10:45:20 GMT
objectJSON { "host": {}, http: {}, request: {}}
Seq

Full example - Documentation

EnvironmentCLIDefault
LOGS__SEQ__ENABLED--logs:seq:enabledfalse
LOGS__SEQ__SERVER--logs:seq:server
LOGS__SEQ__KEY--logs:seq:key
LOGS__SEQ__LEVEL--logs:seq:levelinfo
ELK

Full example - Documentation

Setting up

Docker

Read the docs

docker run -p 8080:80 ealen/echo-server
Docker-Compose

Read the docs

Sample

version: "3"
services:
  echo-server:
    image: ealen/echo-server
    ports:
      - 8080:80

With Seq

version: "3"
services:
  echo:
    image: ealen/echo-server
    environment: 
      PORT: 80
      LOGS__SEQ__ENABLED: "true"
      LOGS__SEQ__SERVER: "http://seq:5341"
    ports: 
      - 8080:80

  seq:
    image: datalust/seq
    environment: 
      ACCEPT_EULA: "Y"
    ports:
      - 3010:80
Kubernetes

Read the docs

curl -sL https://raw.githubusercontent.com/Ealenn/Echo-Server/master/docs/examples/echo.kube.yaml | kubectl apply -f -
Kubernetes with Helm

Read the docs - Artifact Hub

helm repo add ealenn https://ealenn.github.io/charts
helm repo update
helm install --set ingress.enable=true --name echoserver ealenn/echo-server
NodeJS

Read the docs

# Dependencies
npm ci
# Run with node
node ./src/webserver --port 8080
# Run with npm script
PORT=8080 npm run start

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

License

This project is licensed under the GNU Lesser General Public License - see the LICENSE.txt file for details.

Tag summary

Content type

Image

Digest

sha256:ec8a6e958

Size

46.1 MB

Last updated

over 2 years ago

docker pull ealen/echo-server