diff --git a/.cz.toml b/.cz.toml
old mode 100644
new mode 100755
diff --git a/.github/CLA.md b/.github/CLA.md
old mode 100644
new mode 100755
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
old mode 100644
new mode 100755
diff --git a/.github/ISSUE_TEMPLATE/--bug-report.yaml b/.github/ISSUE_TEMPLATE/--bug-report.yaml
old mode 100644
new mode 100755
index b7ba100cc..10bc3c388
--- a/.github/ISSUE_TEMPLATE/--bug-report.yaml
+++ b/.github/ISSUE_TEMPLATE/--bug-report.yaml
@@ -60,17 +60,22 @@ body:
attributes:
label: Repository
options:
- - keploy
- - java-sdk
- - samples-java
- - typescript-sdk
- - samples-typescript
- - docs
- - website
- - ui
- - python-sdk
- - go-sdk
- - samples-go
+ - keploy
+ - go-sdk
+ - java-sdk
+ - python-sdk
+ - typescript-sdk
+ - docs
+ - website
+ - writers-program
+ - blog-website
+ - ui
+ - samples-go
+ - samples-java
+ - samples-rust
+ - samples-python
+ - samples-csharp
+ - samples-typescript
validations:
required: true
- type: markdown
diff --git a/.github/ISSUE_TEMPLATE/--documentation-update.yaml b/.github/ISSUE_TEMPLATE/--documentation-update.yaml
old mode 100644
new mode 100755
index 7733b9eff..6e85fc6f2
--- a/.github/ISSUE_TEMPLATE/--documentation-update.yaml
+++ b/.github/ISSUE_TEMPLATE/--documentation-update.yaml
@@ -6,7 +6,7 @@ labels: [Documentation]
body:
- type: markdown
attributes:
- value: Thank you for taking the time to file a Documentation update.
+ value: Thank you for taking the time to file a Documentation tools.
- type: textarea
attributes:
label: What do you want to add to the docs? (please state reasons if any)
@@ -20,17 +20,22 @@ body:
attributes:
label: Repository
options:
- - keploy
- - java-sdk
- - samples-java
- - typescript-sdk
- - samples-typescript
- - docs
- - website
- - ui
- - python-sdk
- - go-sdk
- - samples-go
+ - keploy
+ - go-sdk
+ - java-sdk
+ - python-sdk
+ - typescript-sdk
+ - docs
+ - website
+ - writers-program
+ - blog-website
+ - ui
+ - samples-go
+ - samples-java
+ - samples-rust
+ - samples-python
+ - samples-csharp
+ - samples-typescript
validations:
required: true
- type: markdown
diff --git a/.github/ISSUE_TEMPLATE/--feature-request.yaml b/.github/ISSUE_TEMPLATE/--feature-request.yaml
old mode 100644
new mode 100755
index 83f6b4e94..c958e1977
--- a/.github/ISSUE_TEMPLATE/--feature-request.yaml
+++ b/.github/ISSUE_TEMPLATE/--feature-request.yaml
@@ -31,20 +31,25 @@ body:
attributes:
label: Repository
options:
- - keploy
- - java-sdk
- - samples-java
- - typescript-sdk
- - samples-typescript
- - docs
- - website
- - ui
- - python-sdk
- - go-sdk
- - samples-go
+ - keploy
+ - go-sdk
+ - java-sdk
+ - python-sdk
+ - typescript-sdk
+ - docs
+ - website
+ - writers-program
+ - blog-website
+ - ui
+ - samples-go
+ - samples-java
+ - samples-rust
+ - samples-python
+ - samples-csharp
+ - samples-typescript
validations:
required: true
- type: markdown
attributes:
value: |
- Please add the respective Label to the Issue
\ No newline at end of file
+ Please add the respective Label to the Issue
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
old mode 100644
new mode 100755
diff --git a/.github/License-Apache_2.0-blue.svg b/.github/License-Apache_2.0-blue.svg
old mode 100644
new mode 100755
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
old mode 100644
new mode 100755
diff --git a/.github/docs.svg b/.github/docs.svg
old mode 100644
new mode 100755
diff --git a/.github/slack.svg b/.github/slack.svg
old mode 100644
new mode 100755
diff --git a/.github/workflows/bug.yml b/.github/workflows/bug.yml
old mode 100644
new mode 100755
diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml
old mode 100644
new mode 100755
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
old mode 100644
new mode 100755
diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
old mode 100644
new mode 100755
index accae4394..dc5b31e0a
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -35,9 +35,7 @@ jobs:
# https://github.com/sigstore/cosign-installer
- name: Install cosign
if: github.event_name != 'pull_request'
- uses: sigstore/cosign-installer@1e95c1de343b5b0c23352d6417ee3e48d5bcd422
- with:
- cosign-release: 'v1.13.1'
+ uses: sigstore/cosign-installer@v3.1.1
# Workaround: https://github.com/docker/build-push-action/issues/461
@@ -62,6 +60,11 @@ jobs:
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+ - name: Set version
+ shell: bash
+ run: |
+ echo "VERSION=$(echo ${GITHUB_REF#refs/tags/v})" >> $GITHUB_ENV
+
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
@@ -73,6 +76,9 @@ jobs:
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
+ build-args: |
+ SENTRY_DSN_DOCKER=${{secrets.SENTRY_DSN_DOCKER}}
+ VERSION=${{ env.VERSION }}
# Sign the resulting Docker image digest except on PRs.
# This will only write to the public Rekor transparency log when the Docker
@@ -85,4 +91,4 @@ jobs:
COSIGN_EXPERIMENTAL: "true"
# This step uses the identity token to provision an ephemeral certificate
# against the sigstore community Fulcio instance.
- run: cosign sign ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}
+ run: cosign sign --yes ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@${{ steps.build-and-push.outputs.digest }}
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
old mode 100644
new mode 100755
index 12b20e085..94448077c
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -25,7 +25,7 @@ jobs:
uses: stefanbuck/github-issue-parser@v3
id: issue-parser
with:
- template-path: .github/ISSUE_TEMPLATE/--documentation-update.yaml
+ template-path: .github/ISSUE_TEMPLATE/--documentation-tools.yaml
- name: Set labels based on repository field
uses: redhat-plumbers-in-action/advanced-issue-labeler@v2
diff --git a/.github/workflows/feat.yml b/.github/workflows/feat.yml
old mode 100644
new mode 100755
diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
old mode 100644
new mode 100755
index e7e7f5cbe..a07e9b513
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -1,12 +1,8 @@
name: Go
on:
-# push:
-# branches: [ main ]
pull_request:
branches: [ main ]
-# pull_request_target:
-# types: [assigned, opened, synchronize, reopened]
jobs:
@@ -16,67 +12,17 @@ jobs:
- uses: actions/checkout@v2
with:
fetch-depth: 0
-
-# - name: Check commit messages
-# uses: wagoid/commitlint-github-action@v4
-
- name: Set up Go
uses: actions/setup-go@v2
with:
- go-version: 1.17
+ go-version: "1.21"
- name: Build
run: go build -v ./...
- # - name: Test-Export
- # run: |
- # go test -coverpkg=./... -coverprofile=coverage1.tmp.txt -covermode=atomic ./...
- # cat coverage1.tmp.txt | grep -v -e "generated.go" -e "_gen.go" | grep -v -e "services.pb.go" -e "services_grpc.pb.go" > coverage1.txt
- # env:
- # KEPLOY_API_KEY: 81f83aeeedddf453966347dc136c66
- # ENABLE_DEDUP: false
- # ENABLE_TEST_EXPORT: true
- # KEPLOY_APP_NAME: Keploy-Test-App-2
- # KEPLOY_REPORT_PATH: ./
-
- - name: Test
- run: |
- export PORT=6790
- curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" | tar xz -C /tmp
- sudo mv /tmp/keploy /usr/local/bin && export KEPLOY_MODE=off && keploy &
- export PORT=6789 && export ENABLE_TEST_EXPORT=false && go test -coverpkg=./... -coverprofile=coverage.tmp.txt -covermode=atomic ./...
- cat coverage.tmp.txt | grep -v -e "http/regression/request.go" | grep -v -e "generated.go" -e "_gen.go" | grep -v -e "services.pb.go" -e "services_grpc.pb.go" > coverage.txt
- env:
- ENABLE_DEDUP: true
- ENABLE_TELEMETRY: false
-
- # - name: Test-withDeDupEnabled
- # run: |
- # go test -coverpkg=./... -coverprofile=coverage3.tmp.txt -covermode=atomic ./...
- # cat coverage3.tmp.txt | grep -v "mode: atomic" | grep -v -e "generated.go" -e "_gen.go" | grep -v -e "services.pb.go" -e "services_grpc.pb.go" > coverage3.txt
- # cat coverage1.txt coverage2.txt coverage3.txt > coverage.txt
- # env:
- # KEPLOY_API_KEY: 81f83aeeedddf453966347dc136c66
- # ENABLE_DEDUP: true
- # ENABLE_TEST_EXPORT: false
-
-
-# - uses: codecov/codecov-action@v2
-# with:
-# files: ./coverage.txt
- - name: Install goveralls
- run: go install github.com/mattn/goveralls@latest
- - name: Send coverage
- env:
- COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: |
- goveralls -coverprofile=coverage.txt -service=github
-
-
-
-# - name: Install extra dependencies
-# run: npm install -g @semantic-release/exec
-
+ - name: Build arm
+ run: GOOS=linux GOARCH=arm64 go build -v ./...
+
- uses: codfish/semantic-release-action@v1
with:
dry_run: true
@@ -84,4 +30,3 @@ jobs:
['@semantic-release/exec']
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
diff --git a/.github/workflows/golang_docker.yml b/.github/workflows/golang_docker.yml
new file mode 100755
index 000000000..86043978c
--- /dev/null
+++ b/.github/workflows/golang_docker.yml
@@ -0,0 +1,26 @@
+name: Golang On Docker
+on: [pull_request]
+jobs:
+ golang_docker:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Build docker image
+ run: |
+ docker image build -t ghcr.io/keploy/keploy:v2-dev .
+ - name: Build binary
+ run: |
+ go build -o keployv2
+
+ - name: Checkout the samples-go repository
+ uses: actions/checkout@v2
+ with:
+ repository: keploy/samples-go
+ path: samples-go
+ - name: Run gin-mongo application
+ run: |
+ cd samples-go/gin-mongo
+ source ./../../.github/workflows/test_workflow_scripts/golang-docker.sh
+
diff --git a/.github/workflows/golang_linux.yml b/.github/workflows/golang_linux.yml
new file mode 100644
index 000000000..6449563ed
--- /dev/null
+++ b/.github/workflows/golang_linux.yml
@@ -0,0 +1,22 @@
+name: Golang On Linux
+on: [pull_request]
+jobs:
+ golang_linux:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Build binary
+ run: |
+ go build -o keployv2
+ - name: Checkout the samples-go repository
+ uses: actions/checkout@v2
+ with:
+ repository: keploy/samples-go
+ path: samples-go
+ - name: Run samples-go application
+ run: |
+ cd samples-go/gin-mongo
+ source ./../../.github/workflows/test_workflow_scripts/golang-linux.sh
+
diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
new file mode 100644
index 000000000..62f21eb1a
--- /dev/null
+++ b/.github/workflows/golangci-lint.yml
@@ -0,0 +1,42 @@
+name: golangci-lint
+on:
+ push:
+ branches:
+ - master
+ - main
+ pull_request:
+
+permissions:
+ contents: read
+ # Optional: allow read access to pull request. Use with `only-new-issues` option.
+ pull-requests: read
+
+# cancel the in-progress workflow when PR is refreshed.
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
+ cancel-in-progress: true
+
+
+jobs:
+ golangci:
+ name: lint
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-go@v4
+ with:
+ go-version: '1.21'
+ cache: false
+ - name: golangci-lint
+ uses: golangci/golangci-lint-action@v3
+ with:
+ # Require: The version of golangci-lint to use.
+ # When `install-mode` is `binary` (default) the value can be v1.2 or v1.2.3 or `latest` to use the latest version.
+ # When `install-mode` is `goinstall` the value can be v1.2.3, `latest`, or the hash of a commit.
+ version: v1.54
+
+ # Optional: show only new issues if it's a pull request. The default value is `false`.
+ only-new-issues: true
+ args: --out-format=colored-line-number
+ # Optional: The mode to install golangci-lint. It can be 'binary' or 'goinstall'.
+ install-mode: "goinstall"
\ No newline at end of file
diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml
old mode 100644
new mode 100755
diff --git a/.github/workflows/java_linux.yml b/.github/workflows/java_linux.yml
new file mode 100644
index 000000000..9355173e4
--- /dev/null
+++ b/.github/workflows/java_linux.yml
@@ -0,0 +1,34 @@
+name: Java on Linux
+on: [pull_request]
+jobs:
+ java_linux:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Build Keploy binary
+ run: |
+ go build -o keployv2
+
+ - name: Checkout samples-java repository
+ uses: actions/checkout@v2
+ with:
+ repository: keploy/samples-java
+ path: samples-java
+
+ - name: Installing the necessary dependencies
+ run: |
+ cd samples-java/spring-petclinic/spring-petclinic-rest
+ ./mvnw dependency:resolve
+
+ - name: Compile the project
+ run: |
+ cd samples-java/spring-petclinic/spring-petclinic-rest
+ source ./../../../.github/workflows/test_workflow_scripts/update-java.sh
+ ./mvnw compile
+
+ - name: Run the spring-petclinic-rest app
+ run: |
+ cd samples-java/spring-petclinic/spring-petclinic-rest
+ source ./../../../.github/workflows/test_workflow_scripts/java-linux.sh
\ No newline at end of file
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
old mode 100644
new mode 100755
index b2e09235b..aec1a56b1
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -13,46 +13,14 @@ jobs:
with:
fetch-depth: 0
-# - name: Check commit messages
-# uses: wagoid/commitlint-github-action@v4
-
- name: Set up Go
uses: actions/setup-go@v2
with:
- go-version: 1.17
+ go-version: "1.21"
- name: Build
run: |
go build -v ./...
- - name: Test
- run: |
- export PORT=6790
- curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" | tar xz -C /tmp
- sudo mv /tmp/keploy /usr/local/bin && export KEPLOY_MODE=off && keploy &
- export PORT=6789 && export ENABLE_TEST_EXPORT=false && go test -coverpkg=./... -coverprofile=coverage.tmp.txt -covermode=atomic ./...
- cat coverage.tmp.txt | grep -v -e "http/regression/request.go" | grep -v -e "generated.go" -e "_gen.go" | grep -v -e "services.pb.go" -e "services_grpc.pb.go" > coverage.txt
- env:
- ENABLE_DEDUP: true
- ENABLE_TELEMETRY: false
-
-
-
- # - uses: codecov/codecov-action@v2
- # with:
- # files: ./coverage.txt
- - name: Install goveralls
- run: go install github.com/mattn/goveralls@latest
- - name: Send coverage
- env:
- COVERALLS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: goveralls -coverprofile=coverage.txt -service=github
-
-# # - name: Install extra dependencies
-# # run: npm install -g @semantic-release/exec
-# - uses: codfish/semantic-release-action@additional-packages
-# with:
-# additional_packages: |
-# ['@semantic-release/exec']
-# env:
-# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Build arm
+ run: GOOS=linux GOARCH=arm64 go build -v ./...
diff --git a/.github/workflows/node_docker.yml b/.github/workflows/node_docker.yml
new file mode 100755
index 000000000..0a14e9a65
--- /dev/null
+++ b/.github/workflows/node_docker.yml
@@ -0,0 +1,25 @@
+name: Node on Docker
+on: [pull_request]
+jobs:
+ node_docker:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Build docker image
+ run: |
+ docker image build -t ghcr.io/keploy/keploy:v2-dev .
+ - name: Build binary
+ run: |
+ go build -o keployv2
+ - name: Checkout samples-typescript repository
+ uses: actions/checkout@v2
+ with:
+ repository: keploy/samples-typescript
+ path: samples-typescript
+
+ - name: Run the express-mongoose app
+ run: |
+ cd samples-typescript/express-mongoose
+ source ./../../.github/workflows/test_workflow_scripts/node-docker.sh
\ No newline at end of file
diff --git a/.github/workflows/node_linux.yml b/.github/workflows/node_linux.yml
new file mode 100644
index 000000000..a5e1c6d65
--- /dev/null
+++ b/.github/workflows/node_linux.yml
@@ -0,0 +1,23 @@
+name: Node on Linux
+on: [pull_request]
+jobs:
+ node_linux:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Build Keploy binary
+ run: |
+ go build -o keployv2
+
+ - name: Checkout samples-typescript repository
+ uses: actions/checkout@v2
+ with:
+ repository: keploy/samples-typescript
+ path: samples-typescript
+
+ - name: Run the express-mongoose app
+ run: |
+ cd samples-typescript/express-mongoose
+ source ./../../.github/workflows/test_workflow_scripts/node-linux.sh
\ No newline at end of file
diff --git a/.github/workflows/python_docker.yml b/.github/workflows/python_docker.yml
new file mode 100755
index 000000000..8af37e008
--- /dev/null
+++ b/.github/workflows/python_docker.yml
@@ -0,0 +1,24 @@
+name: Python On Docker
+on: [pull_request]
+jobs:
+ python_docker:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Build docker image
+ run: |
+ docker image build -t ghcr.io/keploy/keploy:v2-dev .
+ - name: Build binary
+ run: |
+ go build -o keployv2
+ - name: Checkout the samples-python repository
+ uses: actions/checkout@v2
+ with:
+ repository: keploy/samples-python
+ path: samples-python
+ - name: Run the flask-mongo application
+ run: |
+ cd samples-python/flask-mongo
+ source ./../../.github/workflows/test_workflow_scripts/python-docker.sh
diff --git a/.github/workflows/python_linux.yml b/.github/workflows/python_linux.yml
new file mode 100644
index 000000000..bef730d29
--- /dev/null
+++ b/.github/workflows/python_linux.yml
@@ -0,0 +1,21 @@
+name: Python On Linux
+on: [pull_request]
+jobs:
+ python_linux:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - name: Build binary
+ run: |
+ go build -o keployv2
+ - name: Checkout the samples-python repository
+ uses: actions/checkout@v2
+ with:
+ repository: keploy/samples-python
+ path: samples-python
+ - name: Run the sample python application
+ run: |
+ cd samples-python/django-postgres/django_postgres
+ source ../../../.github/workflows/test_workflow_scripts/python-linux.sh
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
old mode 100644
new mode 100755
index dd3325a0c..e9e3a7999
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -18,7 +18,7 @@ jobs:
# - name: Set up Go
# uses: actions/setup-go@v2
# with:
-# go-version: 1.17
+# go-version: "1.20"
# - name: Checkout UI
# uses: actions/checkout@v2
@@ -49,7 +49,8 @@ jobs:
# rm -rf $GITHUB_WORKSPACE/ui
build-go:
- runs-on: macos-latest
+ # runs-on: macos-latest
+ runs-on: ubuntu-latest
# needs: build-ui
steps:
- uses: actions/checkout@v2
@@ -58,7 +59,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v2
with:
- go-version: 1.17
+ go-version: "1.21"
# - name: Checkout UI
# uses: actions/checkout@v2
@@ -72,17 +73,17 @@ jobs:
# with:
# path: web
# key: ${{ hashFiles('ui/src') }}
- - name: Import Code-Signing Certificates
- uses: Apple-Actions/import-codesign-certs@v1
- with:
- # The certificates in a PKCS12 file encoded as a base64 string created with "openssl base64 -in cert.p12 -out cert-base64.txt"
- p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
- # The password used to import the PKCS12 file.
- p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
- - name: Install gon via HomeBrew for code signing and app notarization
- run: |
- brew tap mitchellh/gon
- brew install mitchellh/gon/gon
+ # - name: Import Code-Signing Certificates
+ # uses: Apple-Actions/import-codesign-certs@v1
+ # with:
+ # # The certificates in a PKCS12 file encoded as a base64 string created with "openssl base64 -in cert.p12 -out cert-base64.txt"
+ # p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
+ # # The password used to import the PKCS12 file.
+ # p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
+ # - name: Install gon via HomeBrew for code signing and app notarization
+ # run: |
+ # brew tap mitchellh/gon
+ # brew install mitchellh/gon/gon
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
@@ -90,5 +91,6 @@ jobs:
version: latest
args: release --rm-dist
env:
- APPLE_ACCOUNT_PASSWORD: ${{ secrets.APPLE_ACCOUNT_PASSWORD }}
+ # APPLE_ACCOUNT_PASSWORD: ${{ secrets.APPLE_ACCOUNT_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ SENTRY_DSN_BINARY: ${{ secrets.SENTRY_DSN_BINARY }}
diff --git a/.github/workflows/sample-run.yml b/.github/workflows/sample-run.yml
old mode 100644
new mode 100755
index 32ef3629f..db2c13c47
--- a/.github/workflows/sample-run.yml
+++ b/.github/workflows/sample-run.yml
@@ -15,37 +15,11 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v2
with:
- go-version: 1.17
+ go-version: "1.21"
- name: Build Keploy
run: |
go build -v ./...
- - name: Setup Java
- uses: actions/setup-java@v3
- with:
- java-version: "11"
- distribution: "temurin"
-
- - name: Setup java Sample project
- run: |
- git clone https://github.com/keploy/samples-java.git &&
- curl 'https://repo1.maven.org/maven2/io/keploy/agent/1.2.6/agent-1.2.6.jar' --compressed --output samples-java/agent.jar -slient
-
- - name: Run Keploy and java project
- run: |
- sudo mkdir /root/keploy-config &&
- sudo touch /root/keploy-config/installation-id.yaml &&
- echo "ObjectID(\"6400772dd1bc96b3c5ebffec\")" > sudo /root/keploy-config/installation-id.yaml &&
- go run ./cmd/server/main.go &
- sudo apt update &&
- sudo apt install maven -y &&
- cd samples-java &&
- export KEPLOY_MODE=test &&
- export JAVA_TOOL_OPTIONS=-javaagent:${PWD}/agent.jar &&
- count=5
- for i in $(seq $count); do
- mvn spring-boot:run
- done
- echo installation-id &&
- sudo cat /root/keploy-config/installation-id.yaml
+ - name: Build arm
+ run: GOOS=linux GOARCH=arm64 go build -v ./...
\ No newline at end of file
diff --git a/.github/workflows/test_workflow_scripts/golang-docker.sh b/.github/workflows/test_workflow_scripts/golang-docker.sh
new file mode 100755
index 000000000..3288ac9b4
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/golang-docker.sh
@@ -0,0 +1,80 @@
+
+#!/bin/bash
+
+source ./../../.github/workflows/test_workflow_scripts/test-iid.sh
+
+# Start mongo before starting keploy.
+docker network create keploy-network
+docker run --name mongoDb --rm --net keploy-network -p 27017:27017 -d mongo
+
+# Generate the keploy-config file.
+sudo -E env PATH=$PATH ./../../keployv2 config --generate
+
+# Update the global noise to ts.
+config_file="./keploy.yml"
+sed -i 's/global: {}/global: {"body": {"ts":[]}}/' "$config_file"
+
+# Remove any preexisting keploy tests and mocks.
+sudo rm -rf keploy/
+docker logs mongoDb &
+
+# Start keploy in record mode.
+docker build -t gin-mongo .
+docker rm -f ginApp 2>/dev/null || true
+
+for i in {1..2}; do
+ container_name="ginApp_${i}"
+ sudo -E env PATH=$PATH ./../../keployv2 record -c "docker run -p8080:8080 --net keploy-network --rm --name ${container_name} gin-mongo" --containerName "${container_name}" &
+
+ sleep 5
+
+ # Wait for the application to start.
+ app_started=false
+ while [ "$app_started" = false ]; do
+ if curl -X GET http://localhost:8080/CJBKJd92; then
+ app_started=true
+ fi
+ sleep 3 # wait for 3 seconds before checking again.
+ done
+
+ # Start making curl calls to record the testcases and mocks.
+ curl --request POST \
+ --url http://localhost:8080/url \
+ --header 'content-type: application/json' \
+ --data '{
+ "url": "https://google.com"
+ }'
+
+ curl --request POST \
+ --url http://localhost:8080/url \
+ --header 'content-type: application/json' \
+ --data '{
+ "url": "https://facebook.com"
+ }'
+
+ curl -X GET http://localhost:8080/CJBKJd92
+
+ # Wait for 5 seconds for keploy to record the tcs and mocks.
+ sleep 5
+
+ # Stop keploy.
+ docker rm -f keploy-v2
+ docker rm -f "${container_name}"
+done
+
+# Start the keploy in test mode.
+sudo -E env PATH=$PATH ./../../keployv2 test -c 'docker run -p8080:8080 --net keploy-network --name ginApp_test gin-mongo' --containerName "ginApp_test" --apiTimeout 60 --delay 20
+docker rm -f ginApp_test
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status1=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+report_file2="./keploy/reports/test-run-0/test-set-1-report.yaml"
+test_status2=$(grep 'status:' "$report_file2" | head -n 1 | awk '{print $2}')
+
+# Return the exit code according to the status.
+if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ]; then
+ exit 0
+else
+ exit 1
+fi
diff --git a/.github/workflows/test_workflow_scripts/golang-linux.sh b/.github/workflows/test_workflow_scripts/golang-linux.sh
new file mode 100644
index 000000000..d98847763
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/golang-linux.sh
@@ -0,0 +1,109 @@
+#!/bin/bash
+
+source ./../../.github/workflows/test_workflow_scripts/test-iid.sh
+
+# Checkout a different branch
+git fetch origin
+git checkout native-linux
+
+# Start mongo before starting keploy.
+docker run --rm -d -p27017:27017 --name mongoDb mongo
+
+# Check if there is a keploy-config file, if there is, delete it.
+if [ -f "./keploy.yml" ]; then
+ rm ./keploy.yml
+fi
+
+# Generate the keploy-config file.
+sudo ./../../keployv2 config --generate
+
+# Update the global noise to ts.
+config_file="./keploy.yml"
+sed -i 's/global: {}/global: {"body": {"ts":[]}}/' "$config_file"
+
+sed -i 's/ports: 0/ports: 27017/' "$config_file"
+
+# Remove any preexisting keploy tests and mocks.
+rm -rf keploy/
+
+# Build the binary.
+go build -o ginApp
+
+for i in {1..2}; do
+# Start the gin-mongo app in record mode and record testcases and mocks.
+sudo -E env PATH="$PATH" ./../../keployv2 record -c "./ginApp" &
+
+# Wait for the application to start.
+app_started=false
+
+sleep 5
+
+while [ "$app_started" = false ]; do
+ if curl --request POST \
+ --url http://localhost:8080/url \
+ --header 'content-type: application/json' \
+ --data '{
+ "url": "https://facebook.com"
+}'; then
+ app_started=true
+ fi
+ sleep 3 # wait for 3 seconds before checking again.
+done
+
+# Get the pid of the application.
+pid=$(pgrep keploy)
+
+# Start making curl calls to record the testcases and mocks.
+curl --request POST \
+ --url http://localhost:8080/url \
+ --header 'content-type: application/json' \
+ --data '{
+ "url": "https://google.com"
+}'
+
+curl --request POST \
+ --url http://localhost:8080/url \
+ --header 'content-type: application/json' \
+ --data '{
+ "url": "https://facebook.com"
+}'
+
+curl -X GET http://localhost:8080/CJBKJd92
+
+# Wait for 5 seconds for keploy to record the tcs and mocks.
+sleep 5
+
+# Stop the gin-mongo app.
+sudo kill $pid
+
+# Wait for 5 seconds for keploy to stop.
+sleep 5
+done
+
+# Start the gin-mongo app in test mode.
+sudo -E env PATH="$PATH" ./../../keployv2 test -c "./ginApp" --delay 7
+
+# # move keployv2 to /usr/local/bin/keploy
+# mv ./../../keployv2 /usr/local/bin/keploy
+
+# sed -i 's//\/home\/runner\/work\/keploy\/keploy\/samples-go\/gin-mongo/' main_test.go
+
+# # run in mockrecord mode
+# go test
+
+# sed -i 's/MOCK_RECORD/MOCK_TEST/' main_test.go
+# # run in mocktest mode
+# go test
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status1=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+report_file2="./keploy/reports/test-run-0/test-set-1-report.yaml"
+test_status2=$(grep 'status:' "$report_file2" | head -n 1 | awk '{print $2}')
+
+# Return the exit code according to the status.
+if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ]; then
+ exit 0
+else
+ exit 1
+fi
\ No newline at end of file
diff --git a/.github/workflows/test_workflow_scripts/java-linux.sh b/.github/workflows/test_workflow_scripts/java-linux.sh
new file mode 100644
index 000000000..79cbc1666
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/java-linux.sh
@@ -0,0 +1,88 @@
+#! /bin/bash
+
+source ./../../../.github/workflows/test_workflow_scripts/test-iid.sh
+
+# Checkout a different branch
+git fetch origin
+git checkout native-linux
+
+# Start postgres instance.
+docker run -d -e POSTGRES_USER=petclinic -e POSTGRES_PASSWORD=petclinic -e POSTGRES_DB=petclinic -p 5432:5432 --name mypostgres postgres:15.2
+
+# Update the java version
+source ./../../../.github/workflows/test_workflow_scripts/update-java.sh
+
+# Remove any existing test and mocks by keploy.
+sudo rm -rf keploy/
+
+# Update the postgres database.
+docker cp ./src/main/resources/db/postgresql/initDB.sql mypostgres:/initDB.sql
+docker exec mypostgres psql -U petclinic -d petclinic -f /initDB.sql
+
+for i in {1..2}; do
+# Start keploy in record mode.
+mvn clean install -Dmaven.test.skip=true
+sudo -E env PATH=$PATH ./../../../keployv2 record -c 'java -jar target/spring-petclinic-rest-3.0.2.jar' &
+
+# Wait for the application to start.
+app_started=false
+while [ "$app_started" = false ]; do
+ if curl -X GET http://localhost:9966/petclinic/api/pettypes; then
+ app_started=true
+ fi
+ sleep 3 # wait for 3 seconds before checking again.
+done
+
+# Get the pid of the application.
+pid=$(pgrep keploy)
+
+# Start making curl calls to record the testcases and mocks.
+curl -X GET http://localhost:9966/petclinic/api/pettypes
+
+curl --request POST \
+--url http://localhost:9966/petclinic/api/pettypes \
+ --header 'content-type: application/json' \
+ --data '{
+ "name":"John Doe"}'
+
+curl -X GET http://localhost:9966/petclinic/api/pettypes
+
+curl --request POST \
+--url http://localhost:9966/petclinic/api/pettypes \
+ --header 'content-type: application/json' \
+ --data '{
+ "name":"Alice Green"}'
+
+curl -X GET http://localhost:9966/petclinic/api/pettypes
+
+ curl --request DELETE \
+--url http://localhost:9966/petclinic/api/pettypes/1
+
+curl -X GET http://localhost:9966/petclinic/api/pettypes
+
+# Wait for 5 seconds for keploy to record the tcs and mocks.
+sleep 5
+
+# Stop keploy.
+sudo kill $pid
+
+# Wait for 5 seconds for keploy to stop.
+sleep 5
+
+done
+
+# Start keploy in test mode.
+sudo -E env PATH=$PATH ./../../../keployv2 test -c 'java -jar target/spring-petclinic-rest-3.0.2.jar' --delay 20
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status1=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+report_file2="./keploy/reports/test-run-0/test-set-1-report.yaml"
+test_status2=$(grep 'status:' "$report_file2" | head -n 1 | awk '{print $2}')
+
+# Return the exit code according to the status.
+if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ]; then
+ exit 0
+else
+ exit 1
+fi
\ No newline at end of file
diff --git a/.github/workflows/test_workflow_scripts/node-docker.sh b/.github/workflows/test_workflow_scripts/node-docker.sh
new file mode 100755
index 000000000..050d0c095
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/node-docker.sh
@@ -0,0 +1,71 @@
+#! /bin/bash
+
+source ./../../.github/workflows/test_workflow_scripts/test-iid.sh
+
+# Start the docker container.
+docker network create keploy-network
+docker run --name mongoDb --rm --net keploy-network -p 27017:27017 -d mongo
+
+# Remove any preexisting keploy tests.
+sudo rm -rf keploy/
+
+# Build the image of the application.
+docker build -t node-app:1.0 .
+
+for i in {1..2}; do
+# Start keploy in record mode.
+sudo -E env PATH=$PATH ./../../keployv2 record -c "docker run -p 8000:8000 --name nodeMongoApp --network keploy-network node-app:1.0" --containerName nodeMongoApp &
+
+# Wait for the application to start.
+app_started=false
+while [ "$app_started" = false ]; do
+ if curl -X GET http://localhost:8000/students; then
+ app_started=true
+ fi
+ sleep 3 # wait for 3 seconds before checking again.
+done
+
+# Start making curl calls to record the testcases and mocks.
+curl --request POST \
+--url http://localhost:8000/students \
+ --header 'content-type: application/json' \
+ --data '{
+ "name":"John Do",
+ "email":"john@xyiz.com",
+ "phone":"0123456799"
+ }'
+
+curl --request POST \
+--url http://localhost:8000/students \
+ --header 'content-type: application/json' \
+ --data '{
+ "name":"Alice Green",
+ "email":"green@alice.com",
+ "phone":"3939201584"
+ }'
+
+curl -X GET http://localhost:8000/students
+
+# Wait for 5 seconds for keploy to record the tcs and mocks.
+sleep 5
+
+# Stop keploy.
+docker rm -f keploy-v2
+docker rm -f nodeMongoApp
+done
+
+# Start keploy in test mode.
+sudo -E env PATH=$PATH ./../../keployv2 test -c "docker run -p 8000:8000 --name nodeMongoApp --network keploy-network node-app:1.0" --containerName nodeMongoApp --apiTimeout 30 --delay 30
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status1=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+report_file2="./keploy/reports/test-run-0/test-set-1-report.yaml"
+test_status2=$(grep 'status:' "$report_file2" | head -n 1 | awk '{print $2}')
+
+# Return the exit code according to the status.
+if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ]; then
+ exit 0
+else
+ exit 1
+fi
diff --git a/.github/workflows/test_workflow_scripts/node-linux.sh b/.github/workflows/test_workflow_scripts/node-linux.sh
new file mode 100755
index 000000000..e68d6cb7b
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/node-linux.sh
@@ -0,0 +1,107 @@
+#! /bin/bash
+
+source ./../../.github/workflows/test_workflow_scripts/test-iid.sh
+
+# Start the docker container.
+docker run --name mongoDb --rm -p 27017:27017 -d mongo
+
+# Install the required node dependencies.
+npm install
+
+# Edit the conn.js file to connect to local mongodb.
+file_path="src/db/connection.js"
+sed -i "s/mongoDb:27017/localhost:27017/" "$file_path"
+
+# Remove any preexisting keploy tests.
+rm -rf keploy/
+
+for i in {1..2}; do
+# Start keploy in record mode.
+sudo -E env PATH=$PATH ./../../keployv2 record -c 'npm start' &
+
+# Wait for the application to start.
+app_started=false
+while [ "$app_started" = false ]; do
+ if curl -X GET http://localhost:8000/students; then
+ app_started=true
+ fi
+ sleep 3 # wait for 3 seconds before checking again.
+done
+
+# Get the pid of the application.
+pid=$(pgrep keploy)
+
+# Start making curl calls to record the testcases and mocks.
+curl --request POST \
+--url http://localhost:8000/students \
+ --header 'content-type: application/json' \
+ --data '{
+ "name":"John Do",
+ "email":"john@xyiz.com",
+ "phone":"0123456799"
+ }'
+
+curl --request POST \
+--url http://localhost:8000/students \
+ --header 'content-type: application/json' \
+ --data '{
+ "name":"Alice Green",
+ "email":"green@alice.com",
+ "phone":"3939201584"
+ }'
+
+curl -X GET http://localhost:8000/students
+
+# Wait for 5 seconds for keploy to record the tcs and mocks.
+sleep 5
+
+# Stop keploy.
+sudo kill $pid
+
+# Wait for 5 seconds for keploy to stop.
+sleep 5
+done
+
+# Start keploy in test mode.
+sudo -E env PATH=$PATH ./../../keployv2 test -c 'npm start' --delay 10
+
+# sudo -E env PATH=$PATH ./../../keployv2 test -c "npm test" --delay 5 --coverage
+
+sudo -E env PATH=$PATH ./../../keployv2 test -c 'npm start' --delay 10 --testsets test-set-0
+
+# Generate the keploy-config file.
+sudo ./../../keployv2 config --generate
+
+# Update the global noise to ts.
+config_file="./keploy.yml"
+sed -i 's/selectedTests: {}/selectedTests: {"test-set-0": ["test-1", "test-2"]}/' "$config_file"
+
+sudo -E env PATH=$PATH ./../../keployv2 test -c 'npm start' --apiTimeout 30 --delay 10
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status1=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+report_file2="./keploy/reports/test-run-0/test-set-1-report.yaml"
+test_status2=$(grep 'status:' "$report_file2" | head -n 1 | awk '{print $2}')
+# report_file3="./keploy/reports/test-run-1/report-1.yaml"
+# test_status3=$(grep 'status:' "$report_file3" | head -n 1 | awk '{print $2}')
+# report_file4="./keploy/reports/test-run-1/report-2.yaml"
+# test_status4=$(grep 'status:' "$report_file4" | head -n 1 | awk '{print $2}')
+report_file5="./keploy/reports/test-run-1/test-set-0-report.yaml"
+test_status5=$(grep 'status:' "$report_file5" | head -n 1 | awk '{print $2}')
+report_file6="./keploy/reports/test-run-2/test-set-0-report.yaml"
+test_status6=$(grep 'status:' "$report_file6" | head -n 1 | awk '{print $2}')
+test_total6=$(grep 'total:' "$report_file6" | head -n 1 | awk '{print $2}')
+test_failure=$(grep 'failure:' "$report_file6" | head -n 1 | awk '{print $2}')
+
+# Return the exit code according to the status.
+# if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ] && [ "$test_status3" = "PASSED" ] && [ "$test_status4" = "PASSED" ] && [ "$test_status5" = "PASSED" ] && [ "$test_status6" = "PASSED" ] && [ "$test_total6" = "2" ] && [ "$test_failure" = "0" ]; then
+# exit 0
+# else
+# exit 1
+# fi
+if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ] && [ "$test_status5" = "PASSED" ] && [ "$test_status6" = "PASSED" ] && [ "$test_total6" = "2" ] && [ "$test_failure" = "0" ]; then
+ exit 0
+else
+ exit 1
+fi
diff --git a/.github/workflows/test_workflow_scripts/python-docker.sh b/.github/workflows/test_workflow_scripts/python-docker.sh
new file mode 100755
index 000000000..0e6402b71
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/python-docker.sh
@@ -0,0 +1,71 @@
+#! /bin/bash
+
+source ./../../.github/workflows/test_workflow_scripts/test-iid.sh
+
+# Start the postgres database.
+docker network create backend
+
+# Remove old keploy tests and mocks.
+rm -rf keploy/
+
+# Generate the keploy-config file.
+sudo -E env PATH=$PATH ./../../keployv2 config --generate
+
+# Update the global noise to ignore the Allow header.
+config_file="./keploy.yml"
+sed -i 's/global: {}/global: {"header": {"Allow":[]}}/' "$config_file"
+
+# Wait for 5 seconds for it to complete.
+sleep 5
+
+# Start the django-postgres app in record mode and record testcases and mocks.
+docker build -t flask-app:1.0 .
+
+for i in {1..2}; do
+sudo -E env PATH=$PATH ./../../keployv2 record -c "docker compose up" --containerName flask-app --buildDelay 40s &
+
+# Wait for the application to start.
+app_started=false
+while [ "$app_started" = false ]; do
+ if curl http://localhost:6000/students; then
+ app_started=true
+ fi
+ sleep 3 # wait for 3 seconds before checking again.
+done
+
+# Start making curl calls to record the testcases and mocks.
+curl -X POST -H "Content-Type: application/json" -d '{"student_id": "12345", "name": "John Doe", "age": 20}' http://localhost:6000/students
+curl -X POST -H "Content-Type: application/json" -d '{"student_id": "12346", "name": "Alice Green", "age": 22}' http://localhost:6000/students
+curl http://localhost:6000/students
+curl -X PUT -H "Content-Type: application/json" -d '{"name": "Jane Smith", "age": 21}' http://localhost:6000/students/12345
+curl http://localhost:6000/students
+curl -X DELETE http://localhost:6000/students/12345
+
+# wait for 5 seconds for keploy to record.
+sleep 5
+
+# Stop the keploy container and the application container.
+docker rm -f keploy-v2
+docker rm -f flask-app
+done
+
+# Start the app in test mode.
+sudo -E env PATH=$PATH ./../../keployv2 test -c "docker compose up" --containerName flask-app --buildDelay 40s --apiTimeout 60 --delay 20
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status1=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+report_file2="./keploy/reports/test-run-0/test-set-1-report.yaml"
+test_status2=$(grep 'status:' "$report_file2" | head -n 1 | awk '{print $2}')
+
+# Return the exit code according to the status.
+if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ]; then
+ exit 0
+else
+ exit 1
+fi
+
diff --git a/.github/workflows/test_workflow_scripts/python-linux.sh b/.github/workflows/test_workflow_scripts/python-linux.sh
new file mode 100644
index 000000000..400fdfb6d
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/python-linux.sh
@@ -0,0 +1,106 @@
+#! /bin/bash
+
+source ./../../../.github/workflows/test_workflow_scripts/test-iid.sh
+
+# Checkout a different branch
+git fetch origin
+git checkout native-linux
+
+# Start the postgres database.
+docker-compose up -d
+
+# Install the dependencies.
+pip3 install -r requirements.txt
+
+# Set the environment variable for the app to run correctly.
+export PYTHON_PATH=./venv/lib/python3.10/site-packages/django
+
+# Make the required migrations.
+python3 manage.py makemigrations
+python3 manage.py migrate
+
+# Generate the keploy-config file.
+sudo ./../../../keployv2 config --generate
+
+#Clean any keploy folders.
+sudo rm -rf keploy/
+
+# Update the global noise to ignore the Allow header.
+config_file="./keploy.yml"
+sed -i 's/global: {}/global: {"header": {"Allow":[]}}/' "$config_file"
+
+# Wait for 5 seconds for it to complete
+sleep 5
+
+for i in {1..2}; do
+# Start the django-postgres app in record mode and record testcases and mocks.
+sudo -E env PATH="$PATH" ./../../../keployv2 record -c "python3 manage.py runserver" &
+
+# Wait for the application to start.
+app_started=false
+while [ "$app_started" = false ]; do
+ if curl --location 'http://127.0.0.1:8000/'; then
+ app_started=true
+ fi
+ sleep 3 # wait for 3 seconds before checking again.
+done
+
+# Get the pid of keploy.
+pid=$(pgrep keploy)
+
+# Start making curl calls to record the testcases and mocks.
+curl --location 'http://127.0.0.1:8000/user/' \
+--header 'Content-Type: application/json' \
+--data-raw ' {
+ "name": "Jane Smith",
+ "email": "jane.smith@example.com",
+ "password": "smith567",
+ "website": "www.janesmith.com"
+ }'
+
+curl --location 'http://127.0.0.1:8000/user/' \
+--header 'Content-Type: application/json' \
+--data-raw ' {
+ "name": "John Doe",
+ "email": "john.doe@example.com",
+ "password": "john567",
+ "website": "www.johndoe.com"
+ }'
+
+curl --location 'http://127.0.0.1:8000/user/'
+
+curl --location 'http://127.0.0.1:8000/user/' \
+--header 'Content-Type: application/json' \
+--data-raw ' {
+ "name": "John Doe",
+ "email": "john.doe@example.com",
+ "password": "john567",
+ "website": "www.johndoe.com"
+ }'
+
+# Wait for 5 seconds for keploy to record the tcs and mocks.
+sleep 5
+
+# Stop the gin-mongo app.
+sudo kill $pid
+
+# Wait for 5 seconds for keploy to stop.
+sleep 5
+done
+
+# Start the app in test mode.
+sudo -E env PATH="$PATH" ./../../../keployv2 test -c "python3 manage.py runserver" --delay 10
+
+# Get the test results from the testReport file.
+report_file="./keploy/reports/test-run-0/test-set-0-report.yaml"
+test_status1=$(grep 'status:' "$report_file" | head -n 1 | awk '{print $2}')
+report_file2="./keploy/reports/test-run-0/test-set-1-report.yaml"
+test_status2=$(grep 'status:' "$report_file2" | head -n 1 | awk '{print $2}')
+
+# Return the exit code according to the status.
+if [ "$test_status1" = "PASSED" ] && [ "$test_status2" = "PASSED" ]; then
+ exit 0
+else
+ exit 1
+fi
+
diff --git a/.github/workflows/test_workflow_scripts/test-iid.sh b/.github/workflows/test_workflow_scripts/test-iid.sh
new file mode 100644
index 000000000..45faacf2c
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/test-iid.sh
@@ -0,0 +1,4 @@
+# Add fake installation-id for the workflow.
+sudo mkdir ~/.keploy
+sudo touch ~/.keploy/installation-id.yaml
+echo "ObjectID('123456789')" | sudo tee ~/.keploy/installation-id.yaml > /dev/null
\ No newline at end of file
diff --git a/.github/workflows/test_workflow_scripts/update-java.sh b/.github/workflows/test_workflow_scripts/update-java.sh
new file mode 100644
index 000000000..f744fbb11
--- /dev/null
+++ b/.github/workflows/test_workflow_scripts/update-java.sh
@@ -0,0 +1,8 @@
+#! /bin/bash
+
+# Update the java version
+sudo apt update
+sudo apt install openjdk-17-jre -y
+export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
+export PATH=$JAVA_HOME/bin:$PATH
+source ~/.bashrc
\ No newline at end of file
diff --git a/.github/write-good.yml b/.github/write-good.yml
old mode 100644
new mode 100755
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
index 3d50006eb..43773bbcb
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,16 @@
# Test binary, built with `go test -c`
*.test
+# Ignore the server binary output by `go build` but not any folders with the name server
+/server
+!/server/
+
+# Ignore the config and log files
+keploy-config.yaml
+keploy.yml
+keploy-logs.txt
+
+
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
.deploy.sh
@@ -37,4 +47,12 @@ test-reports
**/._.DS_Store
#Ignore the test reports
-test-reports
\ No newline at end of file
+test-reports
+
+#Ignore the c and header files
+*.c
+*.h
+
+# Ignore the debug_bin
+__debug_bin*
+keploy
\ No newline at end of file
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 000000000..429e23ab6
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,57 @@
+# This is the configuration for golangci-lint for the restic project.
+#
+# A sample config with all settings is here:
+# https://github.com/golangci/golangci-lint/blob/master/.golangci.example.yml
+
+linters:
+ # only enable the linters listed below
+ disable-all: true
+ enable:
+ # make sure all errors returned by functions are handled
+ - errcheck
+
+ # find unused code
+ - deadcode
+
+ # show how code can be simplified
+ - gosimple
+
+ # # make sure code is formatted
+ - gofmt
+
+ # examine code and report suspicious constructs, such as Printf calls whose
+ # arguments do not align with the format string
+ - govet
+
+ # make sure names and comments are used according to the conventions
+ - revive
+
+ # detect when assignments to existing variables are not used
+ - ineffassign
+
+ # run static analysis and find errors
+ - staticcheck
+
+ # find unused variables, functions, structs, types, etc.
+ - unused
+
+ # find unused struct fields
+ - structcheck
+
+ # find unused global variables
+ - varcheck
+
+ # parse and typecheck code
+ - typecheck
+
+issues:
+ # don't use the default exclude rules, this hides (among others) ignored
+ # errors from Close() calls
+ exclude-use-default: false
+
+ # list of things to not warn about
+ exclude:
+ # revive: do not warn about missing comments for exported stuff
+ - exported (function|method|var|type|const) .* should have comment or be unexported
+ # revive: ignore constants in all caps
+ - don't use ALL_CAPS in Go names; use CamelCase
\ No newline at end of file
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
old mode 100644
new mode 100755
diff --git a/.releaserc.json b/.releaserc.json
old mode 100644
new mode 100755
diff --git a/.vaunt/badge/closer.png b/.vaunt/badge/closer.png
new file mode 100644
index 000000000..3b0bd1bf5
Binary files /dev/null and b/.vaunt/badge/closer.png differ
diff --git a/.vaunt/badge/commit_hero.png b/.vaunt/badge/commit_hero.png
new file mode 100644
index 000000000..2467c0bd2
Binary files /dev/null and b/.vaunt/badge/commit_hero.png differ
diff --git a/.vaunt/badge/docs_hero.png b/.vaunt/badge/docs_hero.png
new file mode 100644
index 000000000..d62eb1e98
Binary files /dev/null and b/.vaunt/badge/docs_hero.png differ
diff --git a/.vaunt/badge/pull_request_hero.png b/.vaunt/badge/pull_request_hero.png
new file mode 100644
index 000000000..f99d15bc1
Binary files /dev/null and b/.vaunt/badge/pull_request_hero.png differ
diff --git a/.vaunt/config.yml b/.vaunt/config.yml
new file mode 100755
index 000000000..da492e5b3
--- /dev/null
+++ b/.vaunt/config.yml
@@ -0,0 +1,38 @@
+version: 0.0.1
+achievements:
+ - achievement:
+ name: Every Bit Counts
+ icon: https://raw.githubusercontent.com/keploy/keploy/main/.vaunt/badge/commit_hero.png
+ description: No commit is too small!
+ triggers:
+ - trigger:
+ actor: author
+ action: commit
+ condition: count() >= 10
+ - achievement:
+ name: Pull Request Hero
+ icon: https://raw.githubusercontent.com/keploy/keploy/main/.vaunt/badge/pull_request_hero.png
+ description: You're a PR hero, rock on!
+ triggers:
+ - trigger:
+ actor: author
+ action: pull_request
+ condition: count(merged = true) >= 5
+ - achievement:
+ name: Docs Maker
+ icon: https://raw.githubusercontent.com/keploy/keploy/main/.vaunt/badge/docs_hero.png
+ description: Kudos for improving documentation!
+ triggers:
+ - trigger:
+ actor: author
+ action: issue
+ condition: closed = true & labels in ['Documentation']
+ - achievement:
+ name: Closer
+ icon: https://raw.githubusercontent.com/keploy/keploy/main/.vaunt/badge/closer.png
+ description: Only closers get coffee!!
+ triggers:
+ - trigger:
+ actor: assignees
+ action: issue
+ condition: closed = true
\ No newline at end of file
diff --git a/CITATION.cff b/CITATION.cff
old mode 100644
new mode 100755
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
old mode 100644
new mode 100755
index da843682d..b6a456852
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -20,7 +20,7 @@ The following behaviors are expected and requested of all community members:
* Show consideration and respect in all your actions and speech. Avoid any behavior that is demeaning, discriminatory, or harassing.
* Seek collaboration as an initial step instead of conflict.
* Refrain from demeaning, discriminatory, or harassing behavior and speech.
- * Report any unsafe situations, distress or violations of the code of conduct to the maintainers through [Slack](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA).
+ * Report any unsafe situations, distress or violations of the code of conduct to the maintainers through [Slack](https://join.slack.com/t/keploy/shared_invite/zt-2dno1yetd-Ec3el~tTwHYIHgGI0jPe7A).
* Practice empathy and kindness towards other community members.
* Respect diverse opinions, perspectives, and experiences.
* Give and receive constructive feedback in a gracious manner.
@@ -116,7 +116,7 @@ the community.
## Contact info
-* [Slack](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA)
+* [Slack](https://join.slack.com/t/keploy/shared_invite/zt-2dno1yetd-Ec3el~tTwHYIHgGI0jPe7A)
* [Mail](hello@keploy.io)
## Support π
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
old mode 100644
new mode 100755
index 0df87996b..04be8b5dc
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,7 +2,7 @@
Thank you for your interest in Keploy and for taking the time to contribute to this project. π Keploy is a project by developers for developers and there are a lot of ways you can contribute.
-If you don't know where to start contributing, ask us on our [Slack channel](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA).
+If you don't know where to start contributing, ask us on our [Slack channel](https://join.slack.com/t/keploy/shared_invite/zt-2dno1yetd-Ec3el~tTwHYIHgGI0jPe7A).
## Code of conduct
@@ -20,7 +20,6 @@ Sections
- Keploy Contribution Flow
- Keploy Server
- Keploy Documentation
- - Keploy SDK Integration
# General Contribution Flow
@@ -117,17 +116,7 @@ In the process of shipping features quickly, we may forget to keep our docs up t
Please refer to [Keploy Docs Contributing Guide](https://github.com/keploy/docs/blob/main/CONTRIBUTING.md#-how-to-set-up-the-docs-website-locally) for setting up your development environment and the follow [Keploy Style Guide](https://github.com/keploy/docs/blob/main/STYLE.md).
-### Keploy SDKs
-
-Keploy provides stable support for ``Go``, ``Java`` and ``Ts`` language based applications.
-
-- [x] [Go SDK](https://github.com/keploy/go-sdk)
-- [x] [Java SDK](https://github.com/keploy/java-sdk)
-- [x] [TypeScript SDK](https://github.com/keploy/typescript-sdk)
-
-Every SDKs support the popular and common Routers and Databases.
-
# Contact
-Feel free to join [slack](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA) to start a conversation with us.
+Feel free to join [slack](https://join.slack.com/t/keploy/shared_invite/zt-2dno1yetd-Ec3el~tTwHYIHgGI0jPe7A) to start a conversation with us.
diff --git a/Dockerfile b/Dockerfile
old mode 100644
new mode 100755
index a4046dcf8..1d8cf7c65
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,50 +1,48 @@
-## build ui
-#FROM --platform=${BUILDPLATFORM} node:18-bullseye as ui-builder
-#
-##RUN apt-get update && apt-get install libvips-dev -y
-#
-#RUN npm install -g gatsby-cli
-#
-#RUN git clone https://github.com/keploy/ui
-#
-#WORKDIR /ui
-#
-#RUN npm install --legacy-peer-deps
-#
-#ARG KEPLOY_PATH_PREFIX='/'
-#
-#RUN PATH_PREFIX="$KEPLOY_PATH_PREFIX" gatsby build --prefix-paths
-
-# build stage
-FROM --platform=${BUILDPLATFORM} golang:alpine as go-builder
-
-RUN apk add -U --no-cache ca-certificates && apk add build-base
-
-ENV GO111MODULE=on
-
-# Build Delve
-RUN go install github.com/go-delve/delve/cmd/dlv@latest
+# === Build Stage ===
+FROM golang:1.21 AS build
+# Set the working directory
WORKDIR /app
-COPY go.mod .
-COPY go.sum .
+# Define build arguments for ldflags
+ARG SENTRY_DSN_DOCKER
+ARG VERSION
+# Copy the Go module files and download dependencies
+COPY go.mod go.sum /app/
RUN go mod download
-COPY . .
+# Copy the contents of the current directory into the build container
+COPY . /app
-#COPY --from=ui-builder /ui/public /app/web/public
+# Build the keploy binary
+RUN go build -tags=viper_bind_struct -ldflags="-X main.dsn=$SENTRY_DSN_DOCKER -X main.version=$VERSION" -o keploy .
-#RUN CGO_ENABLED=0 GOOS=linux go build -o health cmd/health/main.go
-RUN CGO_ENABLED=0 GOOS=linux go build -o keploy cmd/server/main.go
+# === Runtime Stage ===
+FROM debian:bookworm-slim
-# final stage
-FROM --platform=${BUILDPLATFORM} alpine
-COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
-#COPY --from=builder /app/health /app/
-COPY --from=go-builder /app/keploy /app/
-COPY --from=go-builder /go/bin/dlv /
+ENV KEPLOY_INDOCKER=true
-EXPOSE 6789
-ENTRYPOINT ["/app/keploy"]
\ No newline at end of file
+# Update the package lists and install required packages
+RUN apt-get update
+RUN apt-get install -y ca-certificates curl sudo && \
+ apt-get clean && \
+ rm -rf /var/lib/apt/lists/*
+
+# Install Docker engine
+RUN curl -fsSL https://get.docker.com -o get-docker.sh && \
+ sh get-docker.sh && \
+ rm get-docker.sh
+
+# Install docker-compose to PATH
+RUN apt install docker-compose -y
+
+# Copy the keploy binary and the entrypoint script from the build container
+COPY --from=build /app/keploy /app/keploy
+COPY --from=build /app/entrypoint.sh /app/entrypoint.sh
+
+# Make the entrypoint.sh file executable
+RUN chmod +x /app/entrypoint.sh
+
+# Set the entrypoint
+ENTRYPOINT ["/app/entrypoint.sh", "/app/keploy"]
\ No newline at end of file
diff --git a/HACKTOBERFEST_GUIDE.md b/HACKTOBERFEST_GUIDE.md
new file mode 100644
index 000000000..8c4e9cc9f
--- /dev/null
+++ b/HACKTOBERFEST_GUIDE.md
@@ -0,0 +1,82 @@
+
+
+
Celebrate
+Open Source with Hacktoberfest 2023
+
+![image](https://github.com/keploy/docs/blob/main/static/img/hacktoberfest-2023.png?raw=true)
+
+ πΆππ ππππππππππππ ππ π ππππ
+
+
+
+---
+
+
+## Our Journey with Hacktoberfest β€οΈ
+
+[Hacktoberfest](https://hacktoberfest.com/) is an initiative that matters very deeply to us. We launched the first iteration of Keploy as a mere open-source project in December 2021. Hacktoberfest 2022 was truly a game-changer for us, as we saw over 200 contributions from some lovely members of the open-source community that October.
+
+There are many different ways you can contribute to [Keploy](https://keploy.io). If youβve ever wanted to contribute to open-source now is your chance!
+
+All backgrounds and skill levels are encouraged to participate. [Learn How to Contribute?](https://opensource.guide/how-to-contribute)
+
+# About Keploy
+
+Keploy is a next-gen E2E testing tool that provides an easy way to capture and generate tests(KTests) and data-mocks(KMocks) from real API calls. It automatically generates mocks and stubs, making the testing process simpler and more efficient.
+
+**- Automatically Mocks Dependencies**
+**- Zero Code Change Integration**
+**- Language-Agnostic Support**
+**- Native Docker/Kubernetes Support**
+**- Asynchronous Processes Support**
+
+
+
+[
β Star and try Out Keploy β
](https://keploy.io)
+
+
+
+___
+
+### Learn more about projects and contributing
+
+π¨π»βπ» **Code Contribubtion**
+
+Code contributions are a great way to get involved in supporting open source, and learn new skills. Here are some examples of ways you can contribute to open-source projects:
+
+- π Bug fixes :- If you'd like to break and build software, fix a current issue reported by the community and be a hero!
+
+- π Implement features :- You can choose from a carefully curated selection of Hacktoberfest requests that have been made by community members.
+
+- π Build a demo app :- Build a demo app with Keploy and share it with the community.
+
+
+π **Low Code and No-Code Contribution**
+
+You can choose from a carefully curated selection of Hacktoberfest requests that have been made by community members.
+
+- Technical documentation
+- User experience testing
+- Case studies
+- Technical blog post or tutorial
+- Translating to Other Languages
+- Give Talks or presentations
+- Organize event with community
+
+# Community Support
+
+The open source community needs you. Do you have what it takes to join the community and build a better future? Weβre here to help you.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
index c10996830..eea7d6ac4
--- a/README.md
+++ b/README.md
@@ -1,296 +1,159 @@
-
Welcome to Keploy π
-
-
+
+
-
+
+
+β‘οΈ Backend tests faster than unit tests, from user traffic β‘οΈ
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+π The must-have tool for developers in the AI-Gen era π
-# Keploy
-Keploy is a functional testing toolkit for developers. It **generates E2E tests for APIs (KTests)** along with **mocks or stubs(KMocks)** by recording real API calls.
-KTests can be imported as mocks for consumers and vice-versa.
-
-
![Generate Test Case from API call](https://raw.githubusercontent.com/keploy/docs/main/static/gif/how-keploy-works.gif)
-
-Merge KTests with unit testing libraries(like Go-Test, JUnit..) to track combined test-coverage.
-
-KMocks can also be referenced in existing tests or use anywhere (including any testing framework). KMocks can also be used as tests for the server.
-
-> Keploy is testing itself with [![Coverage Status](https://coveralls.io/repos/github/keploy/keploy/badge.svg?branch=main&kill_cache=1)](https://coveralls.io/github/keploy/keploy?branch=main&kill_cache=1) without writing many test-cases or data-mocks. π
+---
-[//]: # (
![Link to Demo Video link-to-video-demo](https://raw.githubusercontent.com/keploy/docs/main/static/img/link-to-demo-video.png)
)
+
-## Language Support
-- [x] [![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white)](https://github.com/keploy/go-sdk)
-- [x] [![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=java&logoColor=white)](https://github.com/keploy/java-sdk)
-- [x] [![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white)](https://github.com/keploy/typescript-sdk)
-- [ ] ![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54) : WIP [#58](https://github.com/keploy/keploy/issues/58)
+
+
+
+
+
+
-## How it works?
-#### Safely replays all CRUD operations (including non-idempotent APIs)
+
+
+
-Keploy is added as a middleware to your application that captures and replays all network interaction served to application from any source.
+
+
+
-Visit [https://docs.keploy.io](https://docs.keploy.io/docs/keploy-explained/how-keploy-works) to read more in detail..
+
+
+
+
+## π€ Introducing Keploy π°
+[Keploy](https://keploy.io) is a **developer-centric** API testing tool that creates **backend tests along with built-in-mocks**, faster than unit tests.
-
![Generate Test Case from API call](https://raw.githubusercontent.com/keploy/docs/main/static/gif/record-replay.gif)
+Keploy record API calls and replays them during testing, making it **easy to use, powerful, and extensible**. Here are Keploy's core features: π
-## Documentation
+
![Convert API calls to test cases](https://raw.githubusercontent.com/keploy/docs/main/static/gif/record-tc.gif)
-#### Here you can find the complete [Documentation](https://docs.keploy.io/) which you can reffer
+- β»οΈ **Combined Test Coverage:** Merge your Keploy Tests with your fave testing libraries(JUnit, go-test, py-test, jest) to see a combined test coverage.
-## Contributing
-Whether you are a community member or not, we would love your point of view! Feel free to first check out our
-- [contribution guidelines](https://github.com/keploy/keploy/blob/main/CONTRIBUTING.md)
-- The guide outlines the process for **creating an issue** and **submitting a pull request.**
-- [code of conduct](https://github.com/keploy/keploy/blob/main/CODE_OF_CONDUCT.md)
-- By following the guide we've set, your contribution will more likely be accepted if it enhances the project.
-## Features
+- π€ **EBPF Instrumentation:** Keploy uses EBPF like a secret sauce to make integration code-less, language-agnostic, and oh-so-lightweight.
-### 1. Export tests and mocks and maintain alongside existing tests
-
![Generate Test Case from API call](https://raw.githubusercontent.com/keploy/docs/main/static/gif/record-tc.gif)
+- π **CI/CD Integration:** Run tests with mocks anywhere you likeβlocally on the CLI, in your CI pipeline (Jenkins, Github Actions..) , or even across a Kubernetes cluster.
-### 2. Integrates with `go-test`, `junit`
-Keploy has native interoperability as it integrates with popular testing libraries like `go-test`, `junit`.
-Code coverage will be reported with existing plus KTests. It'll also be **integrated in CI pipelines/infrastructure automatically** if you already have `go-test`, `junit` integrated.
-
-
![Generate Test Case from API call](https://raw.githubusercontent.com/keploy/docs/main/static/gif/replay-tc.gif)
-
-### 3. Accurate Noise Detection
-Filters noisy fields in API responses like (timestamps, random values) to ensure high quality tests.
-
-**WIP** - **Statistical deduplication** ensures that redundant testcases are not generated. WIP (ref [#27](https://github.com/keploy/keploy/issues/27)).
-
-## Quick Installation
-
-### MacOS
-
-```shell
-curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_darwin_all.tar.gz" | tar xz -C /tmp
-
-sudo mkdir -p /usr/local/bin && sudo mv /tmp/keploy /usr/local/bin && keploy
-```
-
-### Linux
-
-
-Linux
-
-```shell
-curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" | tar xz -C /tmp
-
-sudo mkdir -p /usr/local/bin && sudo mv /tmp/keploy /usr/local/bin && keploy
-```
-
-
-
-Linux ARM
-
-```shell
-curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_arm64.tar.gz" | tar xz -C /tmp
-
-sudo mkdir -p /usr/local/bin && sudo mv /tmp/keploy /usr/local/bin && keploy
-```
-
-### Windows
+- π½οΈ **Record-Replay Complex Flows:** Keploy can record and replay complex, distributed API flows as mocks and stubs. It's like having a time machine for your testsβsaving you tons of time!
-
-Windows
+- π **Multi-Purpose Mocks:** You can also use keploy Mocks, as server Tests!
-- Download the [Keploy Windows AMD64](https://github.com/keploy/keploy/releases/latest/download/keploy_windows_amd64.tar.gz), and extract the files from the zip folder.
+> π° **Fun fact:** Keploy uses itself for testing! Check out our swanky coverage badge: [![Coverage Status](https://coveralls.io/repos/github/keploy/keploy/badge.svg?branch=main&kill_cache=1)](https://coveralls.io/github/keploy/keploy?branch=main&kill_cache=1)
-- Run the `keploy.exe` file.
-
+## π© How's the Magic Happen?
+Keploy proxy captures and replays **ALL**(CRUD operations, including non-idempotent APIs) of your app's network interactions.
-
-Windows ARM
-- Download the [Keploy Windows ARM64](https://github.com/keploy/keploy/releases/latest/download/keploy_windows_arm64.tar.gz), and extract the files from the zip folder.
+Take a journey to **[How Keploy Works?](https://keploy.io/docs/keploy-explained/how-keploy-works/)** to discover the tricks behind the curtain!
-- Run the `keploy.exe` file.
+
-
-## SDK Integration
-After running Keploy Server, **let's integrate the SDK** into the application.
-If you're integrating in custom project please choose installation [documentation according to the language](https://docs.keploy.io/application-development/) you're using.
+## π Documentation!
+Become a Keploy pro with **[Keploy Documentation](https://keploy.io/docs/)**.
-[![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white)](https://docs.keploy.io/docs/go/installation)
-[![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=java&logoColor=white)](https://docs.keploy.io/docs/java/installation)
-[![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white)](https://docs.keploy.io/docs/typescript/installation)
+## π οΈ Platform-Specific Requirements for Keploy
+Below is a table summarizing the tools needed for both native and Docker installations of Keploy on MacOS, Windows, and Linux:
-## Try Sample application
+| Operating System | Without Docker | Docker Installation | Prerequisites |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+|
![MacOS](https://www.pngplay.com/wp-content/uploads/3/Apple-Logo-Transparent-Images.png)
**MacOS** |
![Not Supported](https://upload.wikimedia.org/wikipedia/en/b/ba/Red_x.svg)
|
![Supported](https://upload.wikimedia.org/wikipedia/commons/e/e5/Green_tick_pointed.svg)
| Docker Desktop version must be 4.25.2 or above |
+|
![Windows](https://upload.wikimedia.org/wikipedia/commons/5/5f/Windows_logo_-_2012.svg)
**Windows** |
![Supported](https://upload.wikimedia.org/wikipedia/commons/e/e5/Green_tick_pointed.svg)
|
![Supported](https://upload.wikimedia.org/wikipedia/commons/e/e5/Green_tick_pointed.svg)
| - Use [WSL](https://learn.microsoft.com/en-us/windows/wsl/install#install-wsl-command) `wsl --install`
- Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11 |
+|
![Linux](https://th.bing.com/th/id/R.7802b52b7916c00014450891496fe04a?rik=r8GZM4o2Ch1tHQ&riu=http%3a%2f%2f1000logos.net%2fwp-content%2fuploads%2f2017%2f03%2fLINUX-LOGO.png&ehk=5m0lBvAd%2bzhvGg%2fu4i3%2f4EEHhF4N0PuzR%2fBmC1lFzfw%3d&risl=&pid=ImgRaw&r=0)
**Linux** |
![Supported](https://upload.wikimedia.org/wikipedia/commons/e/e5/Green_tick_pointed.svg)
|
![Supported](https://upload.wikimedia.org/wikipedia/commons/e/e5/Green_tick_pointed.svg)
| Linux kernel 5.15 or higher |
-Demos using *Echo/PostgreSQL* and *Gin/MongoDB* are available [here](https://github.com/keploy/samples-go). For this example, we will use the **Echo/PostgreSQL** sample.
+On MacOS and Windows, additional tools are required for Keploy due to the lack of native eBPF support.
-```bash
-git clone https://github.com/keploy/samples-go && cd samples-go/echo-sql
-go mod download
-```
+# π Quick Installation
-#### Start PostgreSQL instance
-```bash
-docker-compose up -d
-```
+Integrate Keploy by installing the agent locally. No code-changes required.
-#### Run the application
```shell
-export KEPLOY_MODE=record && go run handler.go main.go
+curl -O https://raw.githubusercontent.com/keploy/keploy/main/keploy.sh && source keploy.sh
```
-### Generate testcases
-To genereate testcases we just need to make some API calls. You can use [Postman](https://www.postman.com/), [Hoppscotch](https://hoppscotch.io/), or simply `curl`
+## π¬ Recording Testcases
-> Note : KTests are exported as files in the current directory(.) by default
+Start your app wit Keploy to convert API calls as Tests and Mocks/Stubs.
-#### 1. Generate shortened url
-```shell
-curl --request POST \
- --url http://localhost:8082/url \
- --header 'content-type: application/json' \
- --data '{
- "url": "https://github.com"
-}'
-```
-this will return the shortened url. The ts would automatically be ignored during testing because it'll always be different.
-```json
-{
- "ts": 1647802058801841100,
- "url": "http://localhost:8082/GuwHCgoQ"
-}
+```zsh
+keploy record -c "CMD_TO_RUN_APP"
```
-#### 2. Redirect to original url from shortened url
-```bash
-curl --request GET \
- --url http://localhost:8082/GuwHCgoQ
-```
-
-### Integration with native Go test framework
-You just need 3 lines of code in your unit test file and that's it!!π₯π₯π₯
-
-For an example, for a file named `main.go` create a unit test file as `main_test.go` in the **same folder** as `main.go`.
+For example, if you're using a simple Python app the **CMD_TO_RUN_APP** would resemble to `python main.py`, for Golang `go run main.go`, for java `java -jar xyz.jar`, for node `npm start`..
-Contents of `main_test.go`:
-```go
-package main
-
-import (
- "github.com/keploy/go-sdk/keploy"
- "testing"
-)
-func TestKeploy(t *testing.T) {
- keploy.SetTestMode()
- go main()
- keploy.AssertTests(t)
-}
+```zsh
+keploy record -c "python main.py"
```
-### Run the testcases
-**Note: Before running tests stop the sample application**
-```shell
-go test -coverpkg=./... -covermode=atomic ./...
-```
-this should show you have 74.4% coverage without writing any code!
-```shell
-ok echo-psql-url-shortener 5.820s coverage: 74.4% of statements in ./...
+## π§ͺ Running Tests
+Shut down the databases, redis, kafka or any other services your application uses. Keploy doesn't need those during test.
+```zsh
+keploy test -c "CMD_TO_RUN_APP" --delay 10
```
-The Test Run can be visualised in the terminal where Keploy server is running. You can also checkout the details of the
-Test Run Report as a report file generated locally in the Keploy Server directory.
+## β
Test Coverage Integration
+To integrate with your unit-testing library and see combine test coverage, follow this [test-coverage guide](https://keploy.io/docs/server/sdk-installation/go/).
-## Keploy SDK Modes
-### SDK Modes
-The Keploy SDKs modes can operated by setting `KEPLOY_MODE` environment variable
+> #### **If You Had Fun:** Please leave a π star on this repo! It's free, and you'll bring a smile. π π
-> *Note: KEPLOY_MODE value is case sensitive*
+## π€ Questions?
+Reach out to us. We're here to help!
-There are 3 Keploy SDK modes:
-
-1. **Off** : In the off mode the Keploy SDK will turn off all the functionality provided by the Keploy platform.
-
-```
-export KEPLOY_MODE="off"
-```
-2. **Record mode** :
- * Record requests, response and all external calls and sends to Keploy server.
- * After keploy server removes duplicates, it then runs the request on the API again to identify noisy fields.
- * Sends the noisy fields to the keploy server to be saved along with the testcase.
-
-```
-export KEPLOY_MODE="record"
-```
-3. **Test mode** :
- * Fetches testcases for the app from keploy server.
- * Calls the API with same request payload in testcase.
- * Mocks external calls based on data stored in the testcase.
- * Validates the responses and uploads results to the keploy server
-```
-export KEPLOY_MODE="test"
-```
-
-Need another language support? Please raise an [issue](https://github.com/keploy/keploy/issues/new?assignees=&labels=&template=feature_request.md&title=) or discuss on our [slack channel](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA)
+[![Slack](https://img.shields.io/badge/Slack-4A154B?style=for-the-badge&logo=slack&logoColor=white)](https://join.slack.com/t/keploy/shared_invite/zt-2dno1yetd-Ec3el~tTwHYIHgGI0jPe7A)
+[![LinkedIn](https://img.shields.io/badge/linkedin-%230077B5.svg?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/company/keploy/)
+[![YouTube](https://img.shields.io/badge/YouTube-%23FF0000.svg?style=for-the-badge&logo=YouTube&logoColor=white)](https://www.youtube.com/channel/UC6OTg7F4o0WkmNtSoob34lg)
+[![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white)](https://twitter.com/Keployio)
-## Quickstart on GitPod
-The fastest way to start with Keploy is the Gitpod-hosted version. When you're ready, you can install locally or host yourself.
-One-click deploy sample URL Shortener application sample with Keploy using Gitpod
+## π Language Support
+From Go's gopher πΉ to Python's snake π, we support:
-[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/keploy/samples-go)
+![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white)
+![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=java&logoColor=white)
+![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white)
+![Rust](https://img.shields.io/badge/Rust-darkred?style=for-the-badge&logo=rust&logoColor=white)
+![C#](https://img.shields.io/badge/csharp-purple?style=for-the-badge&logo=csharp&logoColor=white)
+![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54)
-## Current Limitations
-* **Unit Testing**: While Keploy is designed to run alongside unit testing frameworks (Go test, JUnit..) and can add to the overall code coverage, it still generates E2E tests. So it might be easier to write unit tests for some methods instead of E2E tests.
-* **Production usage** Keploy is currently focused on generating tests for developers. These tests can be captured from any environment, but we have not tested it on high volume production environments. This would need robust deduplication to avoid too many redundant tests being captured. We do have ideas on building a robust deduplication system [#27](https://github.com/keploy/keploy/issues/27)
-* **De-noise requires mocking** Keploy issues a duplicate request and compares the responses with the previous responses to find "noisy" or non-deterministic fields. We have to ensure all non-idempotent dependencies are mocked/wrapped by Keploy to avoid unnecessary side effects in downstream services.
-## Resources
-π€ [FAQs](https://docs.keploy.io/docs/keploy-explained/faq)
+## π«° Let's Build Together! π§‘
+Whether you're a newbie coder or a wizard π§ββοΈ, your perspective is golden. Take a peek at our:
-π΅οΈβοΈ [Why Keploy](https://docs.keploy.io/docs/keploy-explained/why-keploy)
+π [Contribution Guidelines](https://github.com/keploy/keploy/blob/main/CONTRIBUTING.md)
-βοΈ [Installation Guide](https://docs.keploy.io/docs/server/server-installation)
+β€οΈ [Code of Conduct](https://github.com/keploy/keploy/blob/main/CODE_OF_CONDUCT.md)
-π [Contribution Guide](https://docs.keploy.io/docs/devtools/server-contrib-guide/)
+## π² Current Limitations!
+- **Unit Testing:** While Keploy is designed to run alongside unit testing frameworks (Go test, JUnit..) and can add to the overall code coverage, it still generates integration tests.
+- **Production Lands**: Keploy is currently focused on generating tests for developers. These tests can be captured from any environment, but we have not tested it on high volume production environments. This would need robust deduplication to avoid too many redundant tests being captured. We do have ideas on building a robust deduplication system [#27](https://github.com/keploy/keploy/issues/27)
-## Community Support β€οΈ
+## β¨ Resources!
+π€ [FAQs](https://keploy.io/docs/keploy-explained/faq/)
-We'd love to collaborate with you to make Keploy great. To get started:
-* [Slack](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA) - Discussions with the community and the team.
-* [GitHub](https://github.com/keploy/keploy/issues) - For bug reports and feature requests.
+π΅οΈβοΈ [Why Keploy](https://keploy.io/docs/keploy-explained/why-keploy/)
-[![Slack](https://img.shields.io/badge/Slack-4A154B?style=for-the-badge&logo=slack&logoColor=white)](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA)
-[![LinkedIn](https://img.shields.io/badge/linkedin-%230077B5.svg?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/company/keploy/)
-[![YouTube](https://img.shields.io/badge/YouTube-%23FF0000.svg?style=for-the-badge&logo=YouTube&logoColor=white)](https://www.youtube.com/channel/UC6OTg7F4o0WkmNtSoob34lg)
-[![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white)](https://twitter.com/Keployio)
+βοΈ [Installation Guide](https://keploy.io/docs/application-development/)
-
-
-
+π [Contribution Guide](https://keploy.io/docs/keploy-explained/contribution-guide/)
\ No newline at end of file
diff --git a/READMEes-Es.md b/READMEes-Es.md
new file mode 100644
index 000000000..79a54bc4a
--- /dev/null
+++ b/READMEes-Es.md
@@ -0,0 +1,242 @@
+
+
+
+
+
+β‘οΈ Backend tests faster than unit-tests, from user traffic β‘οΈ
+
+
+
+π The must-have tool for developers in the AI-Gen era π
+
+
+---
+
+
+
+## π€ Presentando Keploy π°
+Keploy es una herramienta de prueba de backend centrada en el **desarrollador**. Realiza pruebas de backend con **mocks incorporados**, mΓ‘s rΓ‘pido que las pruebas unitarias, a partir del trΓ‘fico del usuario, lo que lo hace **fΓ‘cil de usar, potente y extensible**. π
+
+ΒΏListo para la magia? AquΓ estΓ‘n las caracterΓsticas principales de Keploy:
+
+- β»οΈ **Cobertura de prueba combinada:** Fusiona tus pruebas de Keploy con tus bibliotecas de pruebas favoritas (junit, go-test, py-test, jest) para ver una cobertura de prueba combinada.
+
+- π€ **InstrumentaciΓ³n EBPF:** Keploy utiliza EBPF como un ingrediente secreto para hacer que la integraciΓ³n sea sin cΓ³digo, independiente del lenguaje y muy ligera.
+
+- π **IntegraciΓ³n CI/CD:** Ejecuta pruebas con mocks donde quieras, ya sea localmente en la CLI, en tu canal de integraciΓ³n continua o incluso en un clΓΊster de Kubernetes. Β‘Es prueba donde la necesitas!
+
+- π **Mocks multipropΓ³sito:** Γsalos en pruebas existentes, como pruebas de servidor o simplemente para impresionar a tus amigos.
+
+- π½οΈ **GrabaciΓ³n y reproducciΓ³n de flujos complejos:** Keploy puede grabar y reproducir flujos de API complejos y distribuidos como mocks y stubs. Es como tener una mΓ‘quina del tiempo para tus pruebas, Β‘ahorrΓ‘ndote mucho tiempo!
+
+![Generar caso de prueba a partir de una llamada API](https://raw.githubusercontent.com/keploy/docs/main/static/gif/how-keploy-works.gif)
+
+> π° **Dato curioso:** Β‘Keploy se utiliza a sΓ mismo para realizar pruebas! Echa un vistazo a nuestra elegante insignia de cobertura: [![Estado de cobertura](https://coveralls.io/repos/github/keploy/keploy/badge.svg?branch=main&kill_cache=1)](https://coveralls.io/github/keploy/keploy?branch=main&kill_cache=1)
+
+## π Soporte de idiomas
+Desde el gopher de Go πΉ hasta la serpiente de Python π, ofrecemos soporte para:
+
+![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white)
+![Java](https://img.shields.io/badge/java-%23ED8B00.svg?style=for-the-badge&logo=java&logoColor=white)
+![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white)
+![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54)
+
+## π© ΒΏCΓ³mo funciona la magia?
+Nuestro mΓ‘gico π§ββοΈ proxy de Keploy captura y reproduce **TODAS** las interacciones de red de tu aplicaciΓ³n (operaciones CRUD, incluyendo APIs no idempotentes).
+
+Realiza un viaje a **[ΒΏCΓ³mo funciona Keploy?](https://docs.keploy.io/docs/keploy-explained/how-keploy-works)** para descubrir los trucos detrΓ‘s del telΓ³n.
+
+![Generar caso de prueba a partir de una llamada API](https://raw.githubusercontent.com/keploy/docs/main/static/gif/record-replay.gif)
+
+## π Β‘Aprende mΓ‘s!
+ConviΓ©rtete en un profesional de Keploy con nuestra **[DocumentaciΓ³n](https://docs.keploy.io/)**.
+
+# InstalaciΓ³n rΓ‘pida
+
+Usando **Binario** (
![](https://th.bing.com/th/id/R.7802b52b7916c00014450891496fe04a?rik=r8GZM4o2Ch1tHQ&riu=http%3a%2f%2f1000logos.net%2fwp-content%2fuploads%2f2017%2f03%2fLINUX-LOGO.png&ehk=5m0lBvAd%2bzhvGg%2fu4i3%2f4EEHhF4N0PuzR%2fBmC1lFzfw%3d&risl=&pid=ImgRaw&r=0)
Linux /
![](https://cdn.freebiesupply.com/logos/large/2x/microsoft-windows-22-logo-png-transparent.png)
WSL)
+-
+
+Keploy se puede utilizar en Linux nativamente y a travΓ©s de WSL en Windows.
+
+### Descarga el binario de Keploy.
+
+```zsh
+curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" | tar xz -C /tmp
+
+sudo mkdir -p /usr/local/bin && sudo mv /tmp/keploy /usr/local/bin && keploy
+
+
+ Arquitectura ARM
+curl --silent --location "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_arm64.tar.gz" | tar xz -C /tmp
+
+sudo mkdir-p /usr/local/bin && sudo mv /tmp/keploy /usr/local/bin && keploy
+
+
+### Captura de casos de prueba
+Para iniciar la grabaciΓ³n de llamadas a la API, ejecuta este comando en tu terminal donde normalmente ejecutas tu aplicaciΓ³n. Si necesitas configurar variables de entorno, hazlo de la manera habitual:
+
+```zsh
+sudo -E env PATH=$PATH keploy record -c "CMD_PARA_EJECUTAR_LA_APP"
+```
+
+Por ejemplo, si estΓ‘s utilizando un programa sencillo de Golang, el comando se verΓa asΓ:
+
+```zsh
+sudo -E env PATH=$PATH keploy record -c "CMD_PARA_EJECUTAR_LA_APP"
+```
+
+### EjecuciΓ³n de casos de prueba
+
+Para ejecutar los casos de prueba y generar un informe de cobertura de pruebas, utiliza este comando en la terminal donde normalmente ejecutas tu aplicaciΓ³n. Si necesitas configurar variables de entorno, hazlo de la manera habitual:
+
+```zsh
+sudo -E env PATH=$PATH keploy test -c "CMD_PARA_EJECUTAR_LA_APP" --delay 10
+ ```
+
+ Por ejemplo, si estΓ‘s utilizando un framework de Golang, el comando serΓa:
+
+ ```zsh
+ sudo -E env PATH=$PATH keploy test -c "go run main.go" --delay 10
+ ```
+
+
![](https://cdn4.iconfinder.com/data/icons/logos-and-brands/512/97_Docker_logo_logos-512.png)
InstalaciΓ³n de Docker
+
+Keploy se puede utilizar en
![](https://th.bing.com/th/id/R.7802b52b7916c00014450891496fe04a?rik=r8GZM4o2Ch1tHQ&riu=http%3a%2f%2f1000logos.net%2fwp-content%2fuploads%2f2017%2f03%2fLINUX-LOGO.png&ehk=5m0lBvAd%2bzhvGg%2fu4i3%2f4EEHhF4N0PuzR%2fBmC1lFzfw%3d&risl=&pid=ImgRaw&r=0)
Linux y
![](https://cdn.freebiesupply.com/logos/large/2x/microsoft-windows-22-logo-png-transparent.png)
Windows a travΓ©s de Docker.
+
+> **οΈ Nota:**
![](https://www.pngplay.com/wp-content/uploads/3/Apple-Logo-Transparent-Images.png)
MacOS necesitan instalar [Colima](https://github.com/abiosoft/colima#installation).
![](https://cdn.freebiesupply.com/logos/large/2x/microsoft-windows-22-logo-png-transparent.png)
Usuarios de Windows necesitan installar [WSL](https://learn.microsoft.com/en-us/windows/wsl/install#install-wsl-command).
+
+### CreaciΓ³n de alias
+
+Creemos un alias para Keploy:
+
+```shell
+alias keploy='sudo docker run --pull always --name keploy-v2 -p 16789:16789 --privileged --pid=host -it -v $(pwd):$(pwd) -w $(pwd) -v /sys/fs/cgroup:/sys/fs/cgroup -v /sys/kernel/debug:/sys/kernel/debug -v /sys/fs/bpf:/sys/fs/bpf -v /var/run/docker.sock:/var/run/docker.sock --rm ghcr.io/keploy/keploy'
+```
+
+### GrabaciΓ³n de Casos de Prueba y Datos Simulados
+
+AquΓ tienes algunos puntos a considerar antes de la grabaciΓ³n:
+- Si estΓ‘s ejecutando mediante **docker-compose**, asegΓΊrate de incluir el `
` en el servicio de tu aplicaciΓ³n en el archivo docker-compose.yaml [como se muestra aquΓ](https://github.com/keploy/samples-python/blob/9d6cf40da2eb75f6e035bedfb30e54564785d5c9/flask-mongo/docker-compose.yml#L14).
+- Debes ejecutar los contenedores en una red, si no es asΓ, asegΓΊrate de que todos tus contenedores estΓ©n en la misma red con la propiedad externa activada - [como se muestra aquΓ](https://github.com/keploy/samples-python/blob/9d6cf40da2eb75f6e035bedfb30e54564785d5c9/flask-mongo/docker-compose.yml#L24). Reemplaza el **nombre de la red** (bandera `--network`) por tu red personalizada si la cambiaste anteriormente, como la red en el ejemplo dado.
+- `Docker_CMD_to_run_user_container` se refiere al **comando de Docker para iniciar** la aplicaciΓ³n.
+
+Utiliza el alias de keploy que creamos para capturar casos de prueba. **Ejecuta** el siguiente comando dentro del **directorio raΓz** de tu aplicaciΓ³n.
+
+```shell
+keploy record -c "Docker_CMD_to_run_user_container --network " --containerName ""
+```
+
+Realiza llamadas API utilizando herramientas como [Hoppscotch](https://hoppscotch.io/), [Postman](https://www.postman.com/) o comandos cURL.
+
+Keploy capturarΓ‘ las llamadas API que hayas realizado, generando suites de pruebas que comprenden **casos de prueba (KTests) y simulaciones de datos (KMocks)** en formato `YAML`.
+
+### EjecuciΓ³n de Casos de Prueba
+
+Ahora, utiliza el alias keployV2 que creamos para ejecutar los casos de prueba. Sigue estos pasos en el **directorio raΓz** de tu aplicaciΓ³n.
+
+Cuando utilices **docker-compose** para iniciar la aplicaciΓ³n, es importante asegurarse de que el parΓ‘metro `--containerName` coincida con el nombre del contenedor en tu archivo `docker-compose.yaml`.
+
+```shell
+keploy test -c "Docker_CMD_to_run_user_container --network " --containerName "" --delay 20
+```
+
+## π€ Preguntas?
+Β‘ContΓ‘ctanos! Estamos aquΓ para ayudarte.
+
+[![Slack](https://img.shields.io/badge/Slack-4A154B?style=for-the-badge&logo=slack&logoColor=white)](https://join.slack.com/t/keploy/shared_invite/zt-12rfbvc01-o54cOG0X1G6eVJTuI_orSA)
+[![LinkedIn](https://img.shields.io/badge/linkedin-%230077B5.svg?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/company/keploy/)
+[![YouTube](https://img.shields.io/badge/YouTube-%23FF0000.svg?style=for-the-badge&logo=YouTube&logoColor=white)](https://www.youtube.com/channel/UC6OTg7F4o0WkmNtSoob34lg)
+[![Twitter](https://img.shields.io/badge/Twitter-%231DA1F2.svg?style=for-the-badge&logo=Twitter&logoColor=white)](https://twitter.com/Keployio)
+
+## π Β‘Construyamos Juntos!
+Ya seas un principiante o un mago π§ββοΈ en la programaciΓ³n, tu perspectiva es valiosa. Echa un vistazo a nuestras:
+
+π [Directrices de ContribuciΓ³n](https://github.com/keploy/keploy/blob/main/CONTRIBUTING.md)
+
+β€οΈ [CΓ³digo de Conducta](https://github.com/keploy/keploy/blob/main/CODE_OF_CONDUCT.md)
+
+## π CaracterΓsticas
+
+### **π Exporta, mantiene y muestra pruebas y simulaciones!**
+
+
+
+### **π€ Saluda a los populares frameworks de pruebas - Go-Test, JUnit, Py-Test, Jest y mΓ‘s!**
+
+
+
+### **π΅οΈ Detecta ruido con precisiΓ³n de cirujano!**
+Filtra campos ruidosos en las respuestas de las API como (marcas de tiempo, valores aleatorios) para asegurar pruebas de alta calidad.
+
+### **π Β‘Saluda a una mayor cobertura!**
+Keploy se asegura de que no se generen casos de prueba redundantes.
+
+## π² Los DesafΓos que Enfrentamos!
+- **Pruebas Unitarias:** Aunque Keploy estΓ‘ diseΓ±ado para funcionar junto con los marcos de pruebas unitarias (Go test, JUnit, etc.) y puede contribuir a la cobertura de cΓ³digo general, todavΓa genera pruebas de extremo a extremo (E2E).
+- **Entornos de ProducciΓ³n:** Keploy actualmente se centra en generar pruebas para desarrolladores. Estas pruebas se pueden capturar desde cualquier entorno, pero no las hemos probado en entornos de producciΓ³n de alto volumen. Esto requerirΓa una sΓ³lida deduplicaciΓ³n para evitar la captura de pruebas redundantes en exceso. Tenemos ideas para construir un sistema de deduplicaciΓ³n sΓ³lido [#27](https://github.com/keploy/keploy/issues/27)
+
+## β¨ Recursos!
+π€ [Preguntas Frecuentes](https://docs.keploy.io/docs/keploy-explained/faq)
+
+π΅οΈβοΈ [ΒΏPor QuΓ© Keploy?](https://docs.keploy.io/docs/keploy-explained/why-keploy)
+
+βοΈ [GuΓa de InstalaciΓ³n](https://docs.keploy.io/docs/server/server-installation)
+
+π [GuΓa de ContribuciΓ³n](https://docs.keploy.io/docs/devtools/server-contrib-guide/)
+
+## π SalΓ³n de Contribuyentes
+
+
+
+
+### Premios Disponibles
+
+| Nombre | Icono | DescripciΓ³n |
+| ---- | ---- | ----------- |
+| Creador de Documentos |
| Β‘Premiado por ayudar a mejorar la documentaciΓ³n de Keploy! |
+| Cada Bit Cuenta |
| Β‘NingΓΊn commit es demasiado pequeΓ±o! |
+| HΓ©roe de Solicitudes de ExtracciΓ³n |
| Β‘Eres un hΓ©roe de solicitudes de extracciΓ³n, sigue asΓ! |
+| Cercano|
| Β‘Solo los cercanos consiguen cafΓ©! |
diff --git a/SECURITY.md b/SECURITY.md
old mode 100644
new mode 100755
diff --git a/cli/README.md b/cli/README.md
new file mode 100755
index 000000000..71c21c5fe
--- /dev/null
+++ b/cli/README.md
@@ -0,0 +1,5 @@
+# CMD Package Documentation
+
+In this package, the `root` command and its `subcommands` are defined
+for the CLI. This package, which is called from the main package, utilizes the
+`pkg` services to execute commands.
diff --git a/cli/cli.go b/cli/cli.go
new file mode 100644
index 000000000..d7ae3aab7
--- /dev/null
+++ b/cli/cli.go
@@ -0,0 +1,22 @@
+// Package cli provides functionality for the command-line interface of the application.
+package cli
+
+import (
+ "context"
+
+ "github.com/spf13/cobra"
+ "go.keploy.io/server/v2/config"
+ "go.uber.org/zap"
+)
+
+type HookFunc func(context.Context, *zap.Logger, *config.Config, ServiceFactory, CmdConfigurator) *cobra.Command
+
+// Registered holds the registered command hooks
+var Registered map[string]HookFunc
+
+func Register(name string, f HookFunc) {
+ if Registered == nil {
+ Registered = make(map[string]HookFunc)
+ }
+ Registered[name] = f
+}
diff --git a/cli/config.go b/cli/config.go
new file mode 100644
index 000000000..a6d6f7f6e
--- /dev/null
+++ b/cli/config.go
@@ -0,0 +1,74 @@
+package cli
+
+import (
+ "context"
+ "errors"
+ "path/filepath"
+
+ "go.keploy.io/server/v2/config"
+
+ toolsSvc "go.keploy.io/server/v2/pkg/service/tools"
+ "go.keploy.io/server/v2/utils"
+
+ "github.com/spf13/cobra"
+ "go.uber.org/zap"
+)
+
+func init() {
+ Register("config", Config)
+}
+
+func Config(ctx context.Context, logger *zap.Logger, cfg *config.Config, servicefactory ServiceFactory, cmdConfigurator CmdConfigurator) *cobra.Command {
+ var cmd = &cobra.Command{
+ Use: "config",
+ Short: "manage keploy configuration file",
+ Example: "keploy config --generate --path /path/to/localdir",
+ PreRunE: func(cmd *cobra.Command, _ []string) error {
+ return cmdConfigurator.ValidateFlags(ctx, cmd)
+ },
+ RunE: func(cmd *cobra.Command, _ []string) error {
+
+ isGenerate, err := cmd.Flags().GetBool("generate")
+ if err != nil {
+ utils.LogError(logger, err, "failed to get generate flag")
+ return err
+ }
+
+ if isGenerate {
+ filePath := filepath.Join(cfg.Path, "keploy.yml")
+ if utils.CheckFileExists(filePath) {
+ override, err := utils.AskForConfirmation("Config file already exists. Do you want to override it?")
+ if err != nil {
+ utils.LogError(logger, err, "failed to ask for confirmation")
+ return err
+ }
+ if !override {
+ return nil
+ }
+ }
+ svc, err := servicefactory.GetService(ctx, cmd.Name())
+ if err != nil {
+ utils.LogError(logger, err, "failed to get service")
+ return err
+ }
+ var tools toolsSvc.Service
+ var ok bool
+ if tools, ok = svc.(toolsSvc.Service); !ok {
+ utils.LogError(logger, nil, "service doesn't satisfy tools service interface")
+ return err
+ }
+ if err := tools.CreateConfig(ctx, filePath, ""); err != nil {
+ utils.LogError(logger, err, "failed to create config")
+ return err
+ }
+ return nil
+ }
+ return errors.New("only generate flag is supported in the config command")
+ },
+ }
+ if err := cmdConfigurator.AddFlags(cmd); err != nil {
+ utils.LogError(logger, err, "failed to add flags")
+ return nil
+ }
+ return cmd
+}
diff --git a/cli/examples.go b/cli/examples.go
new file mode 100755
index 000000000..2b1b4fc3c
--- /dev/null
+++ b/cli/examples.go
@@ -0,0 +1,44 @@
+package cli
+
+import (
+ "context"
+ "fmt"
+
+ "go.keploy.io/server/v2/cli/provider"
+ "go.keploy.io/server/v2/config"
+ "go.keploy.io/server/v2/utils"
+ "go.uber.org/zap"
+
+ "github.com/spf13/cobra"
+)
+
+func init() {
+ Register("example", Example)
+}
+
+func Example(_ context.Context, logger *zap.Logger, _ *config.Config, _ ServiceFactory, _ CmdConfigurator) *cobra.Command {
+ var customSetup bool
+ var cmd = &cobra.Command{
+ Use: "example",
+ Short: "Example to record and test via keploy",
+ RunE: func(cmd *cobra.Command, _ []string) error {
+ customSetup, err := cmd.Flags().GetBool("customSetup")
+ if err != nil {
+ utils.LogError(logger, nil, "failed to read the customSetup flag")
+ return err
+ }
+ if customSetup {
+ fmt.Println(provider.Examples)
+ return nil
+ }
+ fmt.Println(provider.ExampleOneClickInstall)
+ fmt.Println(provider.WithoutexampleOneClickInstall)
+ return nil
+ },
+ }
+ cmd.SetHelpTemplate(provider.CustomHelpTemplate)
+
+ cmd.Flags().Bool("customSetup", customSetup, "Check if the user is using one click install")
+
+ return cmd
+}
diff --git a/cli/mock.go b/cli/mock.go
new file mode 100644
index 000000000..7deeb1e8b
--- /dev/null
+++ b/cli/mock.go
@@ -0,0 +1,79 @@
+package cli
+
+import (
+ "context"
+ "errors"
+
+ "github.com/spf13/cobra"
+ "go.keploy.io/server/v2/config"
+ recordSvc "go.keploy.io/server/v2/pkg/service/record"
+ replaySvc "go.keploy.io/server/v2/pkg/service/replay"
+ "go.keploy.io/server/v2/utils"
+ "go.uber.org/zap"
+)
+
+func init() {
+ Register("mock", Mock)
+}
+
+func Mock(ctx context.Context, logger *zap.Logger, _ *config.Config, serviceFactory ServiceFactory, cmdConfigurator CmdConfigurator) *cobra.Command {
+ var cmd = &cobra.Command{
+ Use: "mock",
+ Short: "Record and replay ougoung network traffic for the user application",
+ Example: `keploy mock -c "/path/to/user/app" --delay 10`,
+ RunE: func(cmd *cobra.Command, _ []string) error {
+ record, err := cmd.Flags().GetBool("record")
+ if err != nil {
+ utils.LogError(logger, nil, "failed to read the record flag")
+ return err
+ }
+ replay, err := cmd.Flags().GetBool("replay")
+ if err != nil {
+ utils.LogError(logger, nil, "failed to read the replay flag")
+ return err
+ }
+ if !record && !replay {
+ return errors.New("missing required --record or --replay flag")
+ }
+ if record && replay {
+ return errors.New("both --record and --replay flags are set")
+ }
+ if record {
+ svc, err := serviceFactory.GetService(ctx, "record")
+ if err != nil {
+ utils.LogError(logger, err, "failed to get service")
+ return err
+ }
+ var recordService recordSvc.Service
+ var ok bool
+ if recordService, ok = svc.(recordSvc.Service); ok {
+ return recordService.StartMock(ctx)
+ }
+ utils.LogError(logger, nil, "service doesn't satisfy record service interface")
+ return err
+
+ }
+ if replay {
+ svc, err := serviceFactory.GetService(ctx, "replay")
+ if err != nil {
+ utils.LogError(logger, err, "failed to get service")
+ return err
+ }
+ var replayService replaySvc.Service
+ var ok bool
+ if replayService, ok = svc.(replaySvc.Service); ok {
+ return replayService.ProvideMocks(ctx)
+ }
+ utils.LogError(logger, nil, "service doesn't satisfy replay service interface")
+ return err
+ }
+ return nil
+
+ },
+ }
+ if err := cmdConfigurator.AddFlags(cmd); err != nil {
+ utils.LogError(logger, err, "failed to add flags")
+ return nil
+ }
+ return cmd
+}
diff --git a/cli/provider/cmd.go b/cli/provider/cmd.go
new file mode 100644
index 000000000..62bca7129
--- /dev/null
+++ b/cli/provider/cmd.go
@@ -0,0 +1,369 @@
+// Package provider provides functionality for the keploy provider.\
+package provider
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+ "time"
+
+ "github.com/spf13/cobra"
+ "github.com/spf13/viper"
+ "go.keploy.io/server/v2/config"
+ "go.keploy.io/server/v2/utils"
+ "go.keploy.io/server/v2/utils/log"
+ "go.uber.org/zap"
+)
+
+func LogExample(example string) string {
+ return fmt.Sprintf("Example usage: %s", example)
+}
+
+var CustomHelpTemplate = `
+{{if .Example}}Examples:
+{{.Example}}
+{{end}}
+{{if .HasAvailableSubCommands}}Guided Commands:{{range .Commands}}{{if .IsAvailableCommand}}
+ {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}
+{{end}}
+{{if .HasAvailableFlags}}Flags:
+{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}
+{{end}}
+Use "{{.CommandPath}} [command] --help" for more information about a command.
+`
+
+var WithoutexampleOneClickInstall = `
+Note: If installed keploy without One Click Install, use "keploy example --customSetup true"
+`
+var Examples = `
+Golang Application
+ Record:
+ sudo -E env PATH=$PATH keploy record -c "/path/to/user/app/binary"
+
+ Test:
+ sudo -E env PATH=$PATH keploy test -c "/path/to/user/app/binary" --delay 2
+
+Node Application
+ Record:
+ sudo -E env PATH=$PATH keploy record -c βnpm start --prefix /path/to/node/app"
+
+ Test:
+ sudo -E env PATH=$PATH keploy test -c βnpm start --prefix /path/to/node/app" --delay 2
+
+Java
+ Record:
+ sudo -E env PATH=$PATH keploy record -c "java -jar /path/to/java-project/target/jar"
+
+ Test:
+ sudo -E env PATH=$PATH keploy test -c "java -jar /path/to/java-project/target/jar" --delay 2
+
+Docker
+ Alias:
+ alias keploy='sudo docker run --name keploy-ebpf -p 16789:16789 --privileged --pid=host -it -v $(pwd):$(pwd) -w $(pwd) -v /sys/fs/cgroup:/sys/fs/cgroup
+ -v /sys/kernel/debug:/sys/kernel/debug -v /sys/fs/bpf:/sys/fs/bpf -v /var/run/docker.sock:/var/run/docker.sock --rm ghcr.io/keploy/keploy'
+
+ Record:
+ keploy record -c "docker run -p 8080:8080 --name --network " --buildDelay 1m
+
+ Test:
+ keploy test -c "docker run -p 8080:8080 --name --network " --delay 1 --buildDelay 1m
+
+`
+
+var ExampleOneClickInstall = `
+Golang Application
+ Record:
+ keploy record -c "/path/to/user/app/binary"
+
+ Test:
+ keploy test -c "/path/to/user/app/binary" --delay 2
+
+Node Application
+ Record:
+ keploy record -c βnpm start --prefix /path/to/node/app"
+
+ Test:
+ keploy test -c βnpm start --prefix /path/to/node/app" --delay 2
+
+Java
+ Record:
+ keploy record -c "java -jar /path/to/java-project/target/jar"
+
+ Test:
+ keploy test -c "java -jar /path/to/java-project/target/jar" --delay 2
+
+Docker
+ Record:
+ keploy record -c "docker run -p 8080:8080 --name --network " --buildDelay 1m
+
+ Test:
+ keploy test -c "docker run -p 8080:8080 --name --network " --delay 1 --buildDelay 1m
+`
+
+var RootCustomHelpTemplate = `{{.Short}}
+
+Usage:{{if .Runnable}}
+ {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
+ {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}
+
+Aliases:
+ {{.NameAndAliases}}{{end}}{{if .HasExample}}
+
+Available Commands:{{range .Commands}}{{if .IsAvailableCommand}}
+ {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableFlags}}
+
+Flags:
+{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableLocalFlags}}
+
+Guided Commands:{{range .Commands}}{{if and (not .IsAvailableCommand) (not .Hidden)}}
+ {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}
+
+Examples:
+{{.Example}}
+
+Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}}
+`
+
+var RootExamples = `
+ Record:
+ keploy record -c "docker run -p 8080:8080 --name --network keploy-network " --containerName "" --delay 1 --buildDelay 1m
+
+ Test:
+ keploy test --c "docker run -p 8080:8080 --name --network keploy-network " --delay 1 --buildDelay 1m
+
+ Config:
+ keploy config --generate -p "/path/to/localdir"
+`
+
+var VersionTemplate = `{{with .Version}}{{printf "Keploy %s" .}}{{end}}{{"\n"}}`
+
+type CmdConfigurator struct {
+ logger *zap.Logger
+ cfg *config.Config
+}
+
+func NewCmdConfigurator(logger *zap.Logger, config *config.Config) *CmdConfigurator {
+ return &CmdConfigurator{
+ logger: logger,
+ cfg: config,
+ }
+}
+
+func (c *CmdConfigurator) AddFlags(cmd *cobra.Command) error {
+ var err error
+ switch cmd.Name() {
+ case "update":
+ return nil
+ case "config":
+ cmd.Flags().StringP("path", "p", ".", "Path to local directory where generated config is stored")
+ cmd.Flags().Bool("generate", false, "Generate a new keploy configuration file")
+ case "mock":
+ cmd.Flags().StringP("path", "p", c.cfg.Path, "Path to local directory where generated testcases/mocks are stored")
+ cmd.Flags().Bool("record", false, "Record all outgoing network traffic")
+ cmd.Flags().Bool("replay", false, "Intercept all outgoing network traffic and replay the recorded traffic")
+ cmd.Flags().StringP("name", "n", "mocks", "Name of the mock")
+ cmd.Flags().Uint32("pid", 0, "Process id of your application.")
+ err := cmd.MarkFlagRequired("pid")
+ if err != nil {
+ errMsg := "failed to mark pid as required flag"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ case "record", "test":
+ cmd.Flags().String("configPath", ".", "Path to the local directory where keploy configuration file is stored")
+ cmd.Flags().StringP("path", "p", ".", "Path to local directory where generated testcases/mocks are stored")
+ cmd.Flags().Uint32("port", c.cfg.Port, "GraphQL server port used for executing testcases in unit test library integration")
+ cmd.Flags().Uint32("proxyPort", c.cfg.ProxyPort, "Port used by the Keploy proxy server to intercept the outgoing dependency calls")
+ cmd.Flags().Uint32("dnsPort", c.cfg.DNSPort, "Port used by the Keploy DNS server to intercept the DNS queries")
+ cmd.Flags().StringP("command", "c", c.cfg.Command, "Command to start the user application")
+ cmd.Flags().DurationP("buildDelay", "b", c.cfg.BuildDelay, "User provided time to wait docker container build")
+ cmd.Flags().String("containerName", c.cfg.ContainerName, "Name of the application's docker container")
+ cmd.Flags().StringP("networkName", "n", c.cfg.NetworkName, "Name of the application's docker network")
+ cmd.Flags().UintSlice("passThroughPorts", config.GetByPassPorts(c.cfg), "Ports to bypass the proxy server and ignore the traffic")
+ err = cmd.Flags().MarkHidden("port")
+ if err != nil {
+ errMsg := "failed to mark port as hidden flag"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ if cmd.Name() == "test" {
+ cmd.Flags().StringSliceP("testsets", "t", utils.Keys(c.cfg.Test.SelectedTests), "Testsets to run e.g. --testsets \"test-set-1, test-set-2\"")
+ cmd.Flags().Uint64P("delay", "d", 5, "User provided time to run its application")
+ cmd.Flags().Uint64("apiTimeout", c.cfg.Test.APITimeout, "User provided timeout for calling its application")
+ cmd.Flags().String("mongoPassword", c.cfg.Test.MongoPassword, "Authentication password for mocking MongoDB conn")
+ cmd.Flags().String("coverageReportPath", c.cfg.Test.CoverageReportPath, "Write a go coverage profile to the file in the given directory.")
+ cmd.Flags().StringP("language", "l", c.cfg.Test.Language, "application programming language")
+ cmd.Flags().Bool("ignoreOrdering", c.cfg.Test.IgnoreOrdering, "Ignore ordering of array in response")
+ cmd.Flags().Bool("coverage", c.cfg.Test.Coverage, "Enable coverage reporting for the testcases. for golang please set language flag to golang, ref https://keploy.io/docs/server/sdk-installation/go/")
+ cmd.Flags().Bool("removeUnusedMocks", false, "Clear the unused mocks for the passed test-sets")
+ } else {
+ cmd.Flags().Uint64("recordTimer", 0, "User provided time to record its application")
+ }
+ case "keploy":
+ cmd.PersistentFlags().Bool("debug", c.cfg.Debug, "Run in debug mode")
+ cmd.PersistentFlags().Bool("disableTele", c.cfg.DisableTele, "Run in telemetry mode")
+ err = cmd.PersistentFlags().MarkHidden("disableTele")
+ if err != nil {
+ errMsg := "failed to mark telemetry as hidden flag"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ default:
+ return errors.New("unknown command name")
+ }
+ return nil
+}
+
+func (c CmdConfigurator) ValidateFlags(ctx context.Context, cmd *cobra.Command) error {
+ // used to bind common flags for commands like record, test. For eg: PATH, PORT, COMMAND etc.
+ err := viper.BindPFlags(cmd.Flags())
+ if err != nil {
+ errMsg := "failed to bind flags to config"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+
+ // used to bind flags with environment variables
+ viper.AutomaticEnv()
+ viper.SetEnvPrefix("KEPLOY")
+
+ //used to bind flags specific to the command for eg: testsets, delay, recordTimer etc. (nested flags)
+ err = utils.BindFlagsToViper(c.logger, cmd, "")
+ if err != nil {
+ errMsg := "failed to bind cmd specific flags to viper"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ if cmd.Name() == "test" || cmd.Name() == "record" {
+ configPath, err := cmd.Flags().GetString("configPath")
+ if err != nil {
+ utils.LogError(c.logger, nil, "failed to read the config path")
+ return err
+ }
+ viper.SetConfigName("keploy")
+ viper.SetConfigType("yml")
+ viper.AddConfigPath(configPath)
+ if err := viper.ReadInConfig(); err != nil {
+ var configFileNotFoundError viper.ConfigFileNotFoundError
+ if !errors.As(err, &configFileNotFoundError) {
+ errMsg := "failed to read config file"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ c.logger.Info("config file not found; proceeding with flags only")
+ }
+ }
+ if err := viper.Unmarshal(c.cfg); err != nil {
+ errMsg := "failed to unmarshal the config"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ if c.cfg.Debug {
+ logger, err := log.ChangeLogLevel(zap.DebugLevel)
+ *c.logger = *logger
+ if err != nil {
+ errMsg := "failed to change log level"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ }
+ c.logger.Debug("config has been initialised", zap.Any("for cmd", cmd.Name()), zap.Any("config", c.cfg))
+
+ switch cmd.Name() {
+ case "record", "test":
+ bypassPorts, err := cmd.Flags().GetUintSlice("passThroughPorts")
+ if err != nil {
+ errMsg := "failed to read the ports of outgoing calls to be ignored"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ config.SetByPassPorts(c.cfg, bypassPorts)
+
+ if c.cfg.Command == "" {
+ utils.LogError(c.logger, nil, "missing required -c flag or appCmd in config file")
+ if c.cfg.InDocker {
+ c.logger.Info(`Example usage: keploy test -c "docker run -p 8080:8080 --network myNetworkName myApplicationImageName" --delay 6`)
+ } else {
+ c.logger.Info(LogExample(RootExamples))
+ }
+ return errors.New("missing required -c flag or appCmd in config file")
+ }
+
+ if c.cfg.InDocker {
+ c.logger.Info("detected that Keploy is running in a docker container")
+ if len(c.cfg.Path) > 0 {
+ curDir, err := os.Getwd()
+ if err != nil {
+ errMsg := "failed to get current working directory"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ if strings.Contains(c.cfg.Path, "..") {
+ c.cfg.Path, err = filepath.Abs(filepath.Clean(c.cfg.Path))
+ if err != nil {
+ errMsg := "failed to get the absolute path from relative path"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ relativePath, err := filepath.Rel(curDir, c.cfg.Path)
+ if err != nil {
+ errMsg := "failed to get the relative path from absolute path"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ if relativePath == ".." || strings.HasPrefix(relativePath, "../") {
+ errMsg := "path provided is not a subdirectory of current directory. Keploy only supports recording testcases in the current directory or its subdirectories"
+ utils.LogError(c.logger, err, errMsg, zap.String("path:", c.cfg.Path))
+ return errors.New(errMsg)
+ }
+ }
+ }
+ if c.cfg.BuildDelay <= 30*time.Second {
+ c.logger.Warn(fmt.Sprintf("buildDelay is set to %v, incase your docker container takes more time to build use --buildDelay to set custom delay", c.cfg.BuildDelay))
+ c.logger.Info(`Example usage: keploy record -c "docker-compose up --build" --buildDelay 35s`)
+ }
+ if utils.CmdType(c.cfg.Command) == utils.DockerCompose {
+ if c.cfg.ContainerName == "" {
+ utils.LogError(c.logger, nil, "Couldn't find containerName")
+ c.logger.Info(`Example usage: keploy record -c "docker run -p 8080:8080 --network myNetworkName myApplicationImageName" --delay 6`)
+ return errors.New("missing required --containerName flag or containerName in config file")
+ }
+ }
+
+ }
+
+ err = utils.StartInDocker(ctx, c.logger, c.cfg)
+ if err != nil {
+ return err
+ }
+
+ absPath, err := filepath.Abs(c.cfg.Path)
+ if err != nil {
+ errMsg := "failed to get the absolute path from relative path"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ c.cfg.Path = absPath + "/keploy"
+ if cmd.Name() == "test" {
+ testSets, err := cmd.Flags().GetStringSlice("testsets")
+ if err != nil {
+ errMsg := "failed to get the testsets"
+ utils.LogError(c.logger, err, errMsg)
+ return errors.New(errMsg)
+ }
+ config.SetSelectedTests(c.cfg, testSets)
+ if c.cfg.Test.Delay <= 5 {
+ c.logger.Warn(fmt.Sprintf("Delay is set to %d seconds, incase your app takes more time to start use --delay to set custom delay", c.cfg.Test.Delay))
+ if c.cfg.InDocker {
+ c.logger.Info(`Example usage: keploy test -c "docker run -p 8080:8080 --network myNetworkName myApplicationImageName" --delay 6`)
+ } else {
+ c.logger.Info("Example usage: " + cmd.Example)
+ }
+ }
+ }
+ }
+ return nil
+}
diff --git a/cli/provider/service.go b/cli/provider/service.go
new file mode 100644
index 000000000..f7061c795
--- /dev/null
+++ b/cli/provider/service.go
@@ -0,0 +1,96 @@
+package provider
+
+import (
+ "context"
+ "errors"
+
+ "go.keploy.io/server/v2/config"
+ "go.keploy.io/server/v2/pkg/core"
+ "go.keploy.io/server/v2/pkg/core/hooks"
+ "go.keploy.io/server/v2/pkg/core/proxy"
+ "go.keploy.io/server/v2/pkg/platform/telemetry"
+ "go.keploy.io/server/v2/pkg/platform/yaml/configdb"
+ mockdb "go.keploy.io/server/v2/pkg/platform/yaml/mockdb"
+ reportdb "go.keploy.io/server/v2/pkg/platform/yaml/reportdb"
+ testdb "go.keploy.io/server/v2/pkg/platform/yaml/testdb"
+
+ "go.keploy.io/server/v2/pkg/service/record"
+ "go.keploy.io/server/v2/pkg/service/replay"
+ "go.keploy.io/server/v2/pkg/service/tools"
+ "go.keploy.io/server/v2/utils"
+ "go.uber.org/zap"
+)
+
+type ServiceProvider struct {
+ logger *zap.Logger
+ configDb *configdb.ConfigDb
+ cfg *config.Config
+}
+
+type CommonInternalService struct {
+ YamlTestDB *testdb.TestYaml
+ YamlMockDb *mockdb.MockYaml
+ YamlReportDb *reportdb.TestReport
+ Instrumentation *core.Core
+}
+
+func NewServiceProvider(logger *zap.Logger, configDb *configdb.ConfigDb, cfg *config.Config) *ServiceProvider {
+ return &ServiceProvider{
+ logger: logger,
+ configDb: configDb,
+ cfg: cfg,
+ }
+}
+
+func (n *ServiceProvider) GetTelemetryService(ctx context.Context, config config.Config) (*telemetry.Telemetry, error) {
+ installationID, err := n.configDb.GetInstallationID(ctx)
+ if err != nil {
+ return nil, errors.New("failed to get installation id")
+ }
+ return telemetry.NewTelemetry(n.logger, telemetry.Options{
+ Enabled: !config.DisableTele,
+ Version: utils.Version,
+ GlobalMap: map[string]interface{}{},
+ InstallationID: installationID,
+ },
+ ), nil
+}
+
+func (n *ServiceProvider) GetCommonServices(config config.Config) *CommonInternalService {
+ h := hooks.NewHooks(n.logger, config)
+ p := proxy.New(n.logger, h, config)
+ instrumentation := core.New(n.logger, h, p)
+ testDB := testdb.New(n.logger, config.Path)
+ mockDB := mockdb.New(n.logger, config.Path, "")
+ reportDB := reportdb.New(n.logger, config.Path+"/reports")
+ return &CommonInternalService{
+ Instrumentation: instrumentation,
+ YamlTestDB: testDB,
+ YamlMockDb: mockDB,
+ YamlReportDb: reportDB,
+ }
+}
+
+func (n *ServiceProvider) GetService(ctx context.Context, cmd string) (interface{}, error) {
+ tel, err := n.GetTelemetryService(ctx, *n.cfg)
+ if err != nil {
+ return nil, err
+ }
+ tel.Ping()
+ switch cmd {
+ case "config", "update":
+ return tools.NewTools(n.logger, tel), nil
+ // TODO: add case for mock
+ case "record", "test", "mock":
+ commonServices := n.GetCommonServices(*n.cfg)
+ if cmd == "record" {
+ return record.New(n.logger, commonServices.YamlTestDB, commonServices.YamlMockDb, tel, commonServices.Instrumentation, *n.cfg), nil
+ }
+ if cmd == "test" {
+ return replay.NewReplayer(n.logger, commonServices.YamlTestDB, commonServices.YamlMockDb, commonServices.YamlReportDb, tel, commonServices.Instrumentation, *n.cfg), nil
+ }
+ return nil, errors.New("invalid command")
+ default:
+ return nil, errors.New("invalid command")
+ }
+}
diff --git a/cli/record.go b/cli/record.go
new file mode 100755
index 000000000..47ffc0350
--- /dev/null
+++ b/cli/record.go
@@ -0,0 +1,55 @@
+package cli
+
+import (
+ "context"
+
+ "github.com/spf13/cobra"
+ "go.keploy.io/server/v2/config"
+ recordSvc "go.keploy.io/server/v2/pkg/service/record"
+ "go.keploy.io/server/v2/utils"
+ "go.uber.org/zap"
+)
+
+func init() {
+ Register("record", Record)
+}
+
+func Record(ctx context.Context, logger *zap.Logger, _ *config.Config, serviceFactory ServiceFactory, cmdConfigurator CmdConfigurator) *cobra.Command {
+ var cmd = &cobra.Command{
+ Use: "record",
+ Short: "record the keploy testcases from the API calls",
+ Example: `keploy record -c "/path/to/user/app"`,
+ PreRunE: func(cmd *cobra.Command, _ []string) error {
+ return cmdConfigurator.ValidateFlags(ctx, cmd)
+ },
+ RunE: func(cmd *cobra.Command, _ []string) error {
+ svc, err := serviceFactory.GetService(ctx, cmd.Name())
+ if err != nil {
+ utils.LogError(logger, err, "failed to get service")
+ return nil
+ }
+ var record recordSvc.Service
+ var ok bool
+ if record, ok = svc.(recordSvc.Service); !ok {
+ utils.LogError(logger, nil, "service doesn't satisfy record service interface")
+ return nil
+ }
+ err = record.Start(ctx)
+ if err != nil {
+ utils.LogError(logger, err, "failed to record")
+ return nil
+ }
+
+ return nil
+ },
+ }
+
+ err := cmdConfigurator.AddFlags(cmd)
+ if err != nil {
+ utils.LogError(logger, err, "failed to add record flags")
+ return nil
+ }
+ cmd.SilenceUsage = true
+ cmd.SilenceErrors = true
+ return cmd
+}
diff --git a/cli/root.go b/cli/root.go
new file mode 100755
index 000000000..c616cc252
--- /dev/null
+++ b/cli/root.go
@@ -0,0 +1,40 @@
+package cli
+
+import (
+ "context"
+
+ "github.com/spf13/cobra"
+ "go.keploy.io/server/v2/cli/provider"
+ "go.keploy.io/server/v2/config"
+ "go.keploy.io/server/v2/utils"
+ "go.uber.org/zap"
+)
+
+func Root(ctx context.Context, logger *zap.Logger, svcFactory ServiceFactory, cmdConfigurator CmdConfigurator) *cobra.Command {
+ conf := config.New()
+
+ var rootCmd = &cobra.Command{
+ Use: "keploy",
+ Short: "Keploy CLI",
+ Example: provider.RootExamples,
+ Version: utils.Version,
+ }
+
+ rootCmd.CompletionOptions.DisableDefaultCmd = true
+
+ rootCmd.SetHelpTemplate(provider.RootCustomHelpTemplate)
+
+ rootCmd.SetVersionTemplate(provider.VersionTemplate)
+
+ err := cmdConfigurator.AddFlags(rootCmd)
+ if err != nil {
+ utils.LogError(logger, err, "failed to set flags")
+ return nil
+ }
+
+ for _, cmd := range Registered {
+ c := cmd(ctx, logger, conf, svcFactory, cmdConfigurator)
+ rootCmd.AddCommand(c)
+ }
+ return rootCmd
+}
diff --git a/cli/service.go b/cli/service.go
new file mode 100644
index 000000000..edf027d23
--- /dev/null
+++ b/cli/service.go
@@ -0,0 +1,16 @@
+package cli
+
+import (
+ "context"
+
+ "github.com/spf13/cobra"
+)
+
+type ServiceFactory interface {
+ GetService(ctx context.Context, cmd string) (interface{}, error)
+}
+
+type CmdConfigurator interface {
+ AddFlags(cmd *cobra.Command) error
+ ValidateFlags(ctx context.Context, cmd *cobra.Command) error
+}
diff --git a/cli/test.go b/cli/test.go
new file mode 100755
index 000000000..8661cd358
--- /dev/null
+++ b/cli/test.go
@@ -0,0 +1,65 @@
+package cli
+
+import (
+ "context"
+
+ "go.keploy.io/server/v2/pkg/graph"
+ "go.keploy.io/server/v2/utils"
+
+ "github.com/spf13/cobra"
+ "go.keploy.io/server/v2/config"
+ replaySvc "go.keploy.io/server/v2/pkg/service/replay"
+ "go.uber.org/zap"
+)
+
+func init() {
+ Register("test", Test)
+}
+
+func Test(ctx context.Context, logger *zap.Logger, cfg *config.Config, serviceFactory ServiceFactory, cmdConfigurator CmdConfigurator) *cobra.Command {
+ var testCmd = &cobra.Command{
+ Use: "test",
+ Short: "run the recorded testcases and execute assertions",
+ Example: `keploy test -c "/path/to/user/app" --delay 6`,
+ PreRunE: func(cmd *cobra.Command, _ []string) error {
+ return cmdConfigurator.ValidateFlags(ctx, cmd)
+ },
+ RunE: func(cmd *cobra.Command, _ []string) error {
+
+ svc, err := serviceFactory.GetService(ctx, cmd.Name())
+ if err != nil {
+ utils.LogError(logger, err, "failed to get service")
+ return nil
+ }
+ var replay replaySvc.Service
+ var ok bool
+ if replay, ok = svc.(replaySvc.Service); !ok {
+ utils.LogError(logger, nil, "service doesn't satisfy replay service interface")
+ return nil
+ }
+ if cfg.Test.Coverage {
+ g := graph.NewGraph(logger, replay, *cfg)
+ err := g.Serve(ctx)
+ if err != nil {
+ utils.LogError(logger, err, "failed to start graph service")
+ return nil
+ }
+ }
+ err = replay.Start(ctx)
+ if err != nil {
+ utils.LogError(logger, err, "failed to replay")
+ return nil
+ }
+
+ return nil
+ },
+ }
+
+ err := cmdConfigurator.AddFlags(testCmd)
+ if err != nil {
+ utils.LogError(logger, err, "failed to add test flags")
+ return nil
+ }
+
+ return testCmd
+}
diff --git a/cli/update.go b/cli/update.go
new file mode 100644
index 000000000..ba0ee3325
--- /dev/null
+++ b/cli/update.go
@@ -0,0 +1,47 @@
+package cli
+
+import (
+ "context"
+
+ "github.com/spf13/cobra"
+ "go.keploy.io/server/v2/config"
+ toolsSvc "go.keploy.io/server/v2/pkg/service/tools"
+ "go.keploy.io/server/v2/utils"
+ "go.uber.org/zap"
+)
+
+func init() {
+ Register("update", Update)
+}
+
+// Update retrieves the command to tools Keploy
+func Update(ctx context.Context, logger *zap.Logger, _ *config.Config, serviceFactory ServiceFactory, cmdConfigurator CmdConfigurator) *cobra.Command {
+ var updateCmd = &cobra.Command{
+ Use: "update",
+ Short: "Update Keploy ",
+ Example: "keploy update",
+ RunE: func(_ *cobra.Command, _ []string) error {
+ svc, err := serviceFactory.GetService(ctx, "update")
+ if err != nil {
+ utils.LogError(logger, err, "failed to get service")
+ return nil
+ }
+ var tools toolsSvc.Service
+ var ok bool
+ if tools, ok = svc.(toolsSvc.Service); !ok {
+ utils.LogError(logger, nil, "service doesn't satisfy tools service interface")
+ return nil
+ }
+ err = tools.Update(ctx)
+ if err != nil {
+ utils.LogError(logger, err, "failed to update")
+ }
+ return nil
+ },
+ }
+ if err := cmdConfigurator.AddFlags(updateCmd); err != nil {
+ utils.LogError(logger, err, "failed to add update cmd flags")
+ return nil
+ }
+ return updateCmd
+}
diff --git a/cmd/server/keploy/mocks/mock-1.yaml b/cmd/server/keploy/mocks/mock-1.yaml
deleted file mode 100644
index f49ab4b30..000000000
--- a/cmd/server/keploy/mocks/mock-1.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-1-0
-spec:
- metadata:
- UpdateOptions: '[{ 0x140005779c4}]'
- filter: map[_id:415e534e-10f5-488b-a781-19a4bede11b5]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: '[{$set {415e534e-10f5-488b-a781-19a4bede11b5 1674553625 1674553625 1674553625 default_company grpc-nested-app { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":1,"y":23} api.Adder.Add} {{"result":81,"data":{"name":"Fabio Di Gentanio","team":{"name":"Ducati","championships":"0","points":"1001"}}} } [{mongodb NO_SQL_DB map[InsertOneOptions:[] document:x:1 y:23 name:mongodb operation:InsertOne type:NO_SQL_DB] [[44 255 129 3 1 1 15 73 110 115 101 114 116 79 110 101 82 101 115 117 108 116 1 255 130 0 1 1 1 10 73 110 115 101 114 116 101 100 73 68 1 16 0 0 0 79 255 130 1 51 103 111 46 109 111 110 103 111 100 98 46 111 114 103 47 109 111 110 103 111 45 100 114 105 118 101 114 47 98 115 111 110 47 112 114 105 109 105 116 105 118 101 46 79 98 106 101 99 116 73 68 255 131 1 1 1 8 79 98 106 101 99 116 73 68 1 255 132 0 1 6 1 24 0 0 24 255 132 20 0 12 99 255 207 255 169 25 17 100 255 225 35 255 213 255 242 14 255 219 0] [10 255 133 5 1 2 255 136 0 0 0 5 255 134 0 1 1]]}] map[] map[] [] [] gRPC}}]'
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+JmYmRrbikKDMvnUeNQcXE0DTV1NgkVdfQIM1U18TCIkk30dzCUNfQMtEkKTUl1dAwyZQBEAAA//+Ly36olQAAAA==
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA=
diff --git a/cmd/server/keploy/mocks/mock-10.yaml b/cmd/server/keploy/mocks/mock-10.yaml
deleted file mode 100644
index 643f449ba..000000000
--- a/cmd/server/keploy/mocks/mock-10.yaml
+++ /dev/null
@@ -1,131 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-0
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Next
- type: NO_SQL_DB
- objects:
- - type: '*bool'
- data: H4sIAAAAAAAA/2JmYmAEBAAA//8KlHJHBAAAAA==
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-1
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestCase'
- data: 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
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-2
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Next
- type: NO_SQL_DB
- objects:
- - type: '*bool'
- data: H4sIAAAAAAAA/2JmYmAEBAAA//8KlHJHBAAAAA==
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-3
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestCase'
- data: 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
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-4
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Next
- type: NO_SQL_DB
- objects:
- - type: '*bool'
- data: H4sIAAAAAAAA/2JmYmAEBAAA//8KlHJHBAAAAA==
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-5
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestCase'
- data: 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
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-6
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Next
- type: NO_SQL_DB
- objects:
- - type: '*bool'
- data: H4sIAAAAAAAA/2JmYmAABAAA//+cpHUwBAAAAA==
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-7
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Err
- type: NO_SQL_DB
- objects:
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-10-8
-spec:
- metadata:
- FindOptions: '[{ 0x140006fc998 map[all_keys:0 anchors:0] 0x140006fc990 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Close
- type: NO_SQL_DB
- objects:
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
diff --git a/cmd/server/keploy/mocks/mock-11.yaml b/cmd/server/keploy/mocks/mock-11.yaml
deleted file mode 100644
index 35d2f1cf8..000000000
--- a/cmd/server/keploy/mocks/mock-11.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-11-0
-spec:
- metadata:
- FindOptions: '[{ 0x140002fccf8 map[all_keys:0 anchors:0] 0x140002fccf0 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Next
- type: NO_SQL_DB
- objects:
- - type: '*bool'
- data: H4sIAAAAAAAA/2JmYmAABAAA//+cpHUwBAAAAA==
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-11-1
-spec:
- metadata:
- FindOptions: '[{ 0x140002fccf8 map[all_keys:0 anchors:0] 0x140002fccf0 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Err
- type: NO_SQL_DB
- objects:
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-11-2
-spec:
- metadata:
- FindOptions: '[{ 0x140002fccf8 map[all_keys:0 anchors:0] 0x140002fccf0 map[created:-1]}]'
- filter: map[app_id:sample-node-fetch cid:default_company]
- name: mongodb
- operation: Find.Close
- type: NO_SQL_DB
- objects:
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
diff --git a/cmd/server/keploy/mocks/mock-12.yaml b/cmd/server/keploy/mocks/mock-12.yaml
deleted file mode 100644
index 0f043e9b2..000000000
--- a/cmd/server/keploy/mocks/mock-12.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-12-0
-spec:
- metadata:
- UpdateOptions: '[{ 0x14000544d0e}]'
- filter: map[_id:84eefacb-8429-4fba-a2e9-4f6158466435]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: '[{$set {84eefacb-8429-4fba-a2e9-4f6158466435 1674627822 1674627822 RUNNING default_company sample-node-fetch default_user 0 0 3 []}}]'
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwOD6f9DzEyMbMUlRZl56TxqDCoWJqmpaYnJSboWJkaWuiZpSYm6iUapIJaZoamFiZmZibEpAyAAAP//CuzUdpUAAAA=
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
diff --git a/cmd/server/keploy/mocks/mock-13.yaml b/cmd/server/keploy/mocks/mock-13.yaml
deleted file mode 100644
index 7b717171a..000000000
--- a/cmd/server/keploy/mocks/mock-13.yaml
+++ /dev/null
@@ -1,49 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-13-0
-spec:
- metadata:
- FindOneOptions: '[]'
- filter: map[_id:220eae63-8e5f-476b-844f-d5caea86dcb4 cid:default_company]
- name: mongodb
- operation: FindOne.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestCase'
- data: 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
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-13-1
-spec:
- metadata:
- UpdateOptions: '[{ 0x1400054594a}]'
- filter: map[_id:4e9a3cce-b97e-4399-b968-cc884c4d57ea]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: '[{$set {4e9a3cce-b97e-4399-b968-cc884c4d57ea PASSED 1674627822 1674627822 84eefacb-8429-4fba-a2e9-4f6158466435 220eae63-8e5f-476b-844f-d5caea86dcb4 /getData {GET 0 0 /getData map[] map[accept:[*/*] host:[localhost:8080] user-agent:[curl/7.85.0]] {} []} [{node-fetch HTTP_CLIENT map[name:node-fetch options:undefined type:HTTP_CLIENT url:https://reqres.in/api/users/2] [[91 123 34 116 121 112 101 34 58 34 66 117 102 102 101 114 34 44 34 100 97 116 97 34 58 91 49 50 51 44 51 52 44 49 48 48 44 57 55 44 49 49 54 44 57 55 44 51 52 44 53 56 44 49 50 51 44 51 52 44 49 48 53 44 49 48 48 44 51 52 44 53 56 44 53 48 44 52 52 44 51 52 44 49 48 49 44 49 48 57 44 57 55 44 49 48 53 44 49 48 56 44 51 52 44 53 56 44 51 52 44 49 48 54 44 57 55 44 49 49 48 44 49 48 49 44 49 49 54 44 52 54 44 49 49 57 44 49 48 49 44 57 55 44 49 49 56 44 49 48 49 44 49 49 52 44 54 52 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 51 52 44 52 52 44 51 52 44 49 48 50 44 49 48 53 44 49 49 52 44 49 49 53 44 49 49 54 44 57 53 44 49 49 48 44 57 55 44 49 48 57 44 49 48 49 44 51 52 44 53 56 44 51 52 44 55 52 44 57 55 44 49 49 48 44 49 48 49 44 49 49 54 44 51 52 44 52 52 44 51 52 44 49 48 56 44 57 55 44 49 49 53 44 49 49 54 44 57 53 44 49 49 48 44 57 55 44 49 48 57 44 49 48 49 44 51 52 44 53 56 44 51 52 44 56 55 44 49 48 49 44 57 55 44 49 49 56 44 49 48 49 44 49 49 52 44 51 52 44 52 52 44 51 52 44 57 55 44 49 49 56 44 57 55 44 49 49 54 44 57 55 44 49 49 52 44 51 52 44 53 56 44 51 52 44 49 48 52 44 49 49 54 44 49 49 54 44 49 49 50 44 49 49 53 44 53 56 44 52 55 44 52 55 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 52 55 44 49 48 53 44 49 48 57 44 49 48 51 44 52 55 44 49 48 50 44 57 55 44 57 57 44 49 48 49 44 49 49 53 44 52 55 44 53 48 44 52 53 44 49 48 53 44 49 48 57 44 57 55 44 49 48 51 44 49 48 49 44 52 54 44 49 48 54 44 49 49 50 44 49 48 51 44 51 52 44 49 50 53 44 52 52 44 51 52 44 49 49 53 44 49 49 55 44 49 49 50 44 49 49 50 44 49 49 49 44 49 49 52 44 49 49 54 44 51 52 44 53 56 44 49 50 51 44 51 52 44 49 49 55 44 49 49 52 44 49 48 56 44 51 52 44 53 56 44 51 52 44 49 48 52 44 49 49 54 44 49 49 54 44 49 49 50 44 49 49 53 44 53 56 44 52 55 44 52 55 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 52 55 44 51 53 44 49 49 53 44 49 49 55 44 49 49 50 44 49 49 50 44 49 49 49 44 49 49 52 44 49 49 54 44 52 53 44 49 48 52 44 49 48 49 44 57 55 44 49 48 48 44 49 48 53 44 49 49 48 44 49 48 51 44 51 52 44 52 52 44 51 52 44 49 49 54 44 49 48 49 44 49 50 48 44 49 49 54 44 51 52 44 53 56 44 51 52 44 56 52 44 49 49 49 44 51 50 44 49 48 55 44 49 48 49 44 49 48 49 44 49 49 50 44 51 50 44 56 50 44 49 48 49 44 49 49 51 44 56 50 44 49 48 49 44 49 49 53 44 51 50 44 49 48 50 44 49 49 52 44 49 48 49 44 49 48 49 44 52 52 44 51 50 44 57 57 44 49 49 49 44 49 49 48 44 49 49 54 44 49 49 52 44 49 48 53 44 57 56 44 49 49 55 44 49 49 54 44 49 48 53 44 49 49 49 44 49 49 48 44 49 49 53 44 51 50 44 49 49 54 44 49 49 49 44 49 49 57 44 57 55 44 49 49 52 44 49 48 48 44 49 49 53 44 51 50 44 49 49 53 44 49 48 49 44 49 49 52 44 49 49 56 44 49 48 49 44 49 49 52 44 51 50 44 57 57 44 49 49 49 44 49 49 53 44 49 49 54 44 49 49 53 44 51 50 44 57 55 44 49 49 52 44 49 48 49 44 51 50 44 57 55 44 49 49 50 44 49 49 50 44 49 49 52 44 49 48 49 44 57 57 44 49 48 53 44 57 55 44 49 49 54 44 49 48 49 44 49 48 48 44 51 51 44 51 52 44 49 50 53 44 49 50 53 93 125 93] [123 34 104 101 97 100 101 114 115 34 58 123 34 100 97 116 101 34 58 34 87 101 100 44 32 50 53 32 74 97 110 32 50 48 50 51 32 48 53 58 53 53 58 49 48 32 71 77 84 34 44 34 99 111 110 116 101 110 116 45 116 121 112 101 34 58 34 97 112 112 108 105 99 97 116 105 111 110 47 106 115 111 110 59 32 99 104 97 114 115 101 116 61 117 116 102 45 56 34 44 34 116 114 97 110 115 102 101 114 45 101 110 99 111 100 105 110 103 34 58 34 99 104 117 110 107 101 100 34 44 34 99 111 110 110 101 99 116 105 111 110 34 58 34 99 108 111 115 101 34 44 34 120 45 112 111 119 101 114 101 100 45 98 121 34 58 34 69 120 112 114 101 115 115 34 44 34 97 99 99 101 115 115 45 99 111 110 116 114 111 108 45 97 108 108 111 119 45 111 114 105 103 105 110 34 58 34 42 34 44 34 101 116 97 103 34 58 34 87 47 92 34 49 49 56 45 112 98 100 119 119 70 111 57 83 75 78 104 68 51 76 120 53 105 72 74 121 110 103 112 113 48 48 92 34 34 44 34 118 105 97 34 58 34 49 46 49 32 118 101 103 117 114 34 44 34 99 97 99 104 101 45 99 111 110 116 114 111 108 34 58 34 109 97 120 45 97 103 101 61 49 52 52 48 48 34 44 34 99 102 45 99 97 99 104 101 45 115 116 97 116 117 115 34 58 34 72 73 84 34 44 34 97 103 101 34 58 34 54 57 51 48 34 44 34 114 101 112 111 114 116 45 116 111 34 58 34 123 92 34 101 110 100 112 111 105 110 116 115 92 34 58 91 123 92 34 117 114 108 92 34 58 92 34 104 116 116 112 115 58 92 92 47 92 92 47 97 46 110 101 108 46 99 108 111 117 100 102 108 97 114 101 46 99 111 109 92 92 47 114 101 112 111 114 116 92 92 47 118 51 63 115 61 83 102 108 114 65 83 116 87 79 117 85 71 51 56 88 107 53 76 53 117 68 112 90 72 56 118 83 37 50 66 116 83 78 48 117 113 120 114 65 113 112 75 114 86 51 106 99 75 90 110 86 98 122 97 73 111 74 112 108 68 56 101 101 97 55 70 100 79 89 99 50 107 122 78 54 37 50 66 71 102 117 105 78 106 100 116 101 86 80 83 83 75 101 75 119 115 84 78 73 110 65 80 56 86 82 84 116 89 84 121 70 75 82 121 50 111 90 103 81 68 71 72 67 48 106 81 37 51 68 37 51 68 92 34 125 93 44 92 34 103 114 111 117 112 92 34 58 92 34 99 102 45 110 101 108 92 34 44 92 34 109 97 120 95 97 103 101 92 34 58 54 48 52 56 48 48 125 34 44 34 110 101 108 34 58 34 123 92 34 115 117 99 99 101 115 115 95 102 114 97 99 116 105 111 110 92 34 58 48 44 92 34 114 101 112 111 114 116 95 116 111 92 34 58 92 34 99 102 45 110 101 108 92 34 44 92 34 109 97 120 95 97 103 101 92 34 58 54 48 52 56 48 48 125 34 44 34 118 97 114 121 34 58 34 65 99 99 101 112 116 45 69 110 99 111 100 105 110 103 34 44 34 115 101 114 118 101 114 34 58 34 99 108 111 117 100 102 108 97 114 101 34 44 34 99 102 45 114 97 121 34 58 34 55 56 101 101 99 50 50 57 57 102 102 99 56 54 50 48 45 66 79 77 34 44 34 99 111 110 116 101 110 116 45 101 110 99 111 100 105 110 103 34 58 34 103 122 105 112 34 125 44 34 115 116 97 116 117 115 34 58 50 48 48 44 34 115 116 97 116 117 115 84 101 120 116 34 58 34 79 75 34 125]]}] {200 map[access-control-allow-origin:[*] content-length:[280] content-type:[text/html; charset=utf-8] etag:[W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"] x-powered-by:[Express]] {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}} 0 0 } [] {{true 200 200} [{true {content-type [text/html; charset=utf-8]} {content-type [text/html; charset=utf-8]}} {true {content-length [280]} {content-length [280]}} {true {etag [W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"]} {etag [W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"]}} {true {x-powered-by [Express]} {x-powered-by [Express]}} {true {access-control-allow-origin [*]} {access-control-allow-origin [*]}}] {true JSON {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}} {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}}} []} { } { }}}]'
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/0zIsQ6CMBAA0DshDgYTP8K4daJIO+viwGLCalKupzYxQOjxgfJjdTJhfY/0zRCLdvRO+M5x/gimBTDHonFCb/aXYe4Fc8B9M/jwDGtpx8iTrGT3l9sVDwBQpSXb4DbKFPpXcYKjZutKIladrVnp0lrV2bNRRMZo0r6q2cEvAAD//+Iy1qWVAAAA
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-13-2
-spec:
- metadata:
- UpdateOptions: '[{ 0x14000037408}]'
- filter: map[_id:84eefacb-8429-4fba-a2e9-4f6158466435]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: map[$inc:[{success 1}]]
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwMD+/9DjEyMTAyAAAAA//+9etQ0ZwAAAA==
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
diff --git a/cmd/server/keploy/mocks/mock-14.yaml b/cmd/server/keploy/mocks/mock-14.yaml
deleted file mode 100644
index e38983521..000000000
--- a/cmd/server/keploy/mocks/mock-14.yaml
+++ /dev/null
@@ -1,49 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-14-0
-spec:
- metadata:
- FindOneOptions: '[]'
- filter: map[_id:dca77113-324e-4036-a7b4-4261b0daf648 cid:default_company]
- name: mongodb
- operation: FindOne.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestCase'
- data: H4sIAAAAAAAA/6xXW3MjRxXuI8lrr9dJagkFoahQSieuwDKSZkajKxWIr+u92LuxvRsoy+VqzbSkWY9mxt0jX+JyUQQSAgQIt3ALgQQIIYQQIIEQeOeNN/4EjzxS1DbVPSNZSpxkq0jtSuruc/r0d75z6bb4p/hCGmBinfJojnAK4lEEZyF1YR6mEIzPMUoi6kAGwfi10OmPJ+ZIGPVYPEnPxcpjM2EYj9LXVi+o7UtRFK7SHRBfQjART3gI4ikE4+dZaCvRtxFMxBMp+i6CzDwNOYgfIRif8bxL9ICDeEZOfLsTsHgythK4EuwTCMaWA3ubg/gbgsz6QUhhCiH0efHFNIyefxpOLdOoEzgS2eRVFkTBMrkRMOlCMnX9eJq+tnpZap2+tnr5KmGky0E8juDUEiUOZSC+iiAzGzgHUufUrOsTpoaZxYB1QXwDIXSPeCwDcLZLwg0eMddvb8Y/ys6UhPhh8ZUMjJicku6gKfHlFKSkY1MIZcXXUwBnNza7gUM9npcHzJOIyENAPIlQSXxNRu94/UkEaUhfojG268TrUR7TdJVEHTVEqCe+KXeNBgQm1yIS9fhc4FBJwone3hbrLFPOSZu+N5PH7CD0CfEtGZPhwKeGeBwEB6H7xXckvpGsGFJNLzCm9LD4YQrgzgE98zSkvkN9+0Clj3gaoU+L76UBJoclTyPIQGaFdBX+fs5AZplKAh+XCaio/AGSUfp+CuD0xubGZs/1o6pchUmE7hM/zgDcORTfjUGEn+mH8h7x1xTABzY2zzHaZpRzN/DzMltVsopnEbLET9KQEs9KROPXKZMaCssA3SXXVwmbWQupDeJnCCHxuvhpGuAOaWlLLq/ZHdolUgi3wYR0wyGJK+NXmjeoHXEQv0CQVrS/oAYcxKvHtfMEgskZzimL3MDnIF4aLf0BR2PrpOlREH9AkL7gR6pWZDCkgTNJYHuURyDeGKnqNxFCHxc/TwF85O1sbMUYFUTxPEIfE89JUp5XMR9ER8VkUrr/pPjlSG2/gGDy/avtl4ayfUIOkoNPKPRXEEJ58esMwN1DiTDs3lrEZlhsdArEizKffiV9exEBwJiqzrgip8VvUwAfGiXnuKpfQSBeRuiT4jdy98u3UuPiUfG70SJ/FcHEOxb5O7r9/1T8/eL3aRhOmhRk5gKPg/gTgsxqsJdgvVe8ngL44Kj3azveXOApVfEaQmXxR+n7aycX7+mrjNquKp8MgrE1m3jSP9l0/jzSdN54l6bzl9Gm8+bJTefm5LJ4FO5zbFKpGEYxVzQtmrP0YjlHKk0rZ5llo6k7pFW2qvDfvz/32JvJ93/SZ/7x7+a/4A6HtkjPi7bsoBsS/wDOctINPZrzA4fmWjSyOzBRaNNIRQDS5xfW04N5Kn2K2DYNI0ifK5zLdAIewe1eYBNPDutVvapP9jhlOdKmfgRn7B7zCpV8tZTXIXV4hABuwlMwNmUHfkT9KBdJ/u6K6H5U6ERd71NZu0MYp9EDvaiVq97eV/Oo3446kDareoZGpA33PlzAhlHNhU1nb28xqK1dWunMFy/vl9yliwd+O9zRdTy1nwuDPcqok2sewPjCfihD+1GJn/OcNM0CL0c8L9jLBcxtuz7AObgJdx1i2b9w/RC7Dq6bGqZd4nq4jm8Qn0b5PUp2KXuQ0R1Ged71sYZbLuPRlk+6FNfxRamFNeyR47WH1R6sYbJLIsJwHXeiKOT1QmFgpuB224UWsSkvmDm3S9o0fyNs4yMN814YBiySgHrMO3HvvYlOrkOJ4/ptrGFJKq7j9SC7TWmYXaU7q5RnW4xSLaucd5s91W6zUbBHmMOznLJdyrJ2wCOeJYxmSRjKtJZt+B58dIRA/gOYHMqUM0vr61e35i5fWFhZh0xGxnN4KSP9H9JP95h399vhk9AtyLThBXM8CBWq0z3foS3Xpw6kbmbu2DjE0jau49leq6WojIO0YZhFrWhphq5rtYpmGGX5U7S0UlUbiEpKHC+WdM2y4mVDM/Sa2qU0qomGkpVja3qsZpQ1q6wZRk1NlaSaSCytbKmfeFocGpfUJmnbUKf3zzWTRUvpKMixjoISnzGAUrHeimTIUjWWvaeRauUk4ANDyfoxf4m0T4al1uOPqc4rVTWrIv/fgudWn2AJqhhPTXlKrXasXlGBKQ00lRdFJVemkqP1OKJmqU+B8r2S4JIfIyG2/JYkMPpYq++rZ8XSu2JQHlkD8nV9sDdxpe9GObZv6kPQZeAsZa4oXa8kKWuoU4qmVjUHAAfDUqxrHkOWDFpyVdKtoOmJw3Fp1KoJ+r5ffZXYlNI0VO7X+qQMSUuDbBrJrKHTSokNtaF2zGt/1ictYakWg6occyJLdxB2wyxtHm3eTD94iDvq7cBlX5R/Gao262hZs5S9SPysqZvFrF6qW7W6UcmeX17HGh6+dnAdkzD0XJvIflO4wQP/LdePbKKM+LxFWY76dqAaax3bnZ6/TZ3YnE9tuV0uewGnWMPDtw6u4+Taka3/nS8eXMfnsIbl1Sa9KDTe63JrYKzhXZfgOjbyRnaXtnuyJdrE7tD+CbiOu2Rf3sQPGJal61LeysUqXD2qcB0vXZC8kLako1yqVLCGGVU3SRTgOj5sYOo7YeD6EW/g+sZhQ15BDVxvJJdQo1FoNAok71Mvb3tBz2l5hNG8HXQbjUJsqdEo7BY/wx+4aOyVS81pc3HxenVl2py1I2Ys8O5++Upz0d2rhGx7ZW1tduUht3n92sz+/u60OfsICZx2aC6Fq5eDYGf7Wne7fP5gd6cz2665M8WuUXzIv97slNsXyv7i4uzCFe65nUei0pXatDkbfU5+zc8yd9s64POfXXroeqs9XZyfLs438NGm1sBtFvRC5YvdyvnUa2CtISnbIm3awPWyblV1/Qhr2KdezAXvqRhutRhRYW/guq41Esa2ouBWjO0SJvNiRj2jcgv9vNJwfP3GmZTwGIeMEbmhUqW0WavWmi2rZdZoKzd7ZXkopYcStP2IG6p3QxJkU9f7k/X4UXDlEj5CYxn5Nkf/CwAA///NiZMBghEAAA==
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-14-1
-spec:
- metadata:
- UpdateOptions: '[{ 0x140009d87aa}]'
- filter: map[_id:62282cee-bfe1-4187-8df0-c900bf098782]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: '[{$set {62282cee-bfe1-4187-8df0-c900bf098782 PASSED 1674627822 1674627822 84eefacb-8429-4fba-a2e9-4f6158466435 dca77113-324e-4036-a7b4-4261b0daf648 /getData {GET 0 0 /getData map[] map[accept:[*/*] host:[localhost:8080] user-agent:[curl/7.85.0]] {} []} [{node-fetch HTTP_CLIENT map[name:node-fetch options:undefined type:HTTP_CLIENT url:https://reqres.in/api/users/2] [[91 123 34 116 121 112 101 34 58 34 66 117 102 102 101 114 34 44 34 100 97 116 97 34 58 91 49 50 51 44 51 52 44 49 48 48 44 57 55 44 49 49 54 44 57 55 44 51 52 44 53 56 44 49 50 51 44 51 52 44 49 48 53 44 49 48 48 44 51 52 44 53 56 44 53 48 44 52 52 44 51 52 44 49 48 49 44 49 48 57 44 57 55 44 49 48 53 44 49 48 56 44 51 52 44 53 56 44 51 52 44 49 48 54 44 57 55 44 49 49 48 44 49 48 49 44 49 49 54 44 52 54 44 49 49 57 44 49 48 49 44 57 55 44 49 49 56 44 49 48 49 44 49 49 52 44 54 52 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 51 52 44 52 52 44 51 52 44 49 48 50 44 49 48 53 44 49 49 52 44 49 49 53 44 49 49 54 44 57 53 44 49 49 48 44 57 55 44 49 48 57 44 49 48 49 44 51 52 44 53 56 44 51 52 44 55 52 44 57 55 44 49 49 48 44 49 48 49 44 49 49 54 44 51 52 44 52 52 44 51 52 44 49 48 56 44 57 55 44 49 49 53 44 49 49 54 44 57 53 44 49 49 48 44 57 55 44 49 48 57 44 49 48 49 44 51 52 44 53 56 44 51 52 44 56 55 44 49 48 49 44 57 55 44 49 49 56 44 49 48 49 44 49 49 52 44 51 52 44 52 52 44 51 52 44 57 55 44 49 49 56 44 57 55 44 49 49 54 44 57 55 44 49 49 52 44 51 52 44 53 56 44 51 52 44 49 48 52 44 49 49 54 44 49 49 54 44 49 49 50 44 49 49 53 44 53 56 44 52 55 44 52 55 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 52 55 44 49 48 53 44 49 48 57 44 49 48 51 44 52 55 44 49 48 50 44 57 55 44 57 57 44 49 48 49 44 49 49 53 44 52 55 44 53 48 44 52 53 44 49 48 53 44 49 48 57 44 57 55 44 49 48 51 44 49 48 49 44 52 54 44 49 48 54 44 49 49 50 44 49 48 51 44 51 52 44 49 50 53 44 52 52 44 51 52 44 49 49 53 44 49 49 55 44 49 49 50 44 49 49 50 44 49 49 49 44 49 49 52 44 49 49 54 44 51 52 44 53 56 44 49 50 51 44 51 52 44 49 49 55 44 49 49 52 44 49 48 56 44 51 52 44 53 56 44 51 52 44 49 48 52 44 49 49 54 44 49 49 54 44 49 49 50 44 49 49 53 44 53 56 44 52 55 44 52 55 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 52 55 44 51 53 44 49 49 53 44 49 49 55 44 49 49 50 44 49 49 50 44 49 49 49 44 49 49 52 44 49 49 54 44 52 53 44 49 48 52 44 49 48 49 44 57 55 44 49 48 48 44 49 48 53 44 49 49 48 44 49 48 51 44 51 52 44 52 52 44 51 52 44 49 49 54 44 49 48 49 44 49 50 48 44 49 49 54 44 51 52 44 53 56 44 51 52 44 56 52 44 49 49 49 44 51 50 44 49 48 55 44 49 48 49 44 49 48 49 44 49 49 50 44 51 50 44 56 50 44 49 48 49 44 49 49 51 44 56 50 44 49 48 49 44 49 49 53 44 51 50 44 49 48 50 44 49 49 52 44 49 48 49 44 49 48 49 44 52 52 44 51 50 44 57 57 44 49 49 49 44 49 49 48 44 49 49 54 44 49 49 52 44 49 48 53 44 57 56 44 49 49 55 44 49 49 54 44 49 48 53 44 49 49 49 44 49 49 48 44 49 49 53 44 51 50 44 49 49 54 44 49 49 49 44 49 49 57 44 57 55 44 49 49 52 44 49 48 48 44 49 49 53 44 51 50 44 49 49 53 44 49 48 49 44 49 49 52 44 49 49 56 44 49 48 49 44 49 49 52 44 51 50 44 57 57 44 49 49 49 44 49 49 53 44 49 49 54 44 49 49 53 44 51 50 44 57 55 44 49 49 52 44 49 48 49 44 51 50 44 57 55 44 49 49 50 44 49 49 50 44 49 49 52 44 49 48 49 44 57 57 44 49 48 53 44 57 55 44 49 49 54 44 49 48 49 44 49 48 48 44 51 51 44 51 52 44 49 50 53 44 49 50 53 93 125 93] [123 34 104 101 97 100 101 114 115 34 58 123 34 100 97 116 101 34 58 34 87 101 100 44 32 50 53 32 74 97 110 32 50 48 50 51 32 48 53 58 52 57 58 49 55 32 71 77 84 34 44 34 99 111 110 116 101 110 116 45 116 121 112 101 34 58 34 97 112 112 108 105 99 97 116 105 111 110 47 106 115 111 110 59 32 99 104 97 114 115 101 116 61 117 116 102 45 56 34 44 34 116 114 97 110 115 102 101 114 45 101 110 99 111 100 105 110 103 34 58 34 99 104 117 110 107 101 100 34 44 34 99 111 110 110 101 99 116 105 111 110 34 58 34 99 108 111 115 101 34 44 34 120 45 112 111 119 101 114 101 100 45 98 121 34 58 34 69 120 112 114 101 115 115 34 44 34 97 99 99 101 115 115 45 99 111 110 116 114 111 108 45 97 108 108 111 119 45 111 114 105 103 105 110 34 58 34 42 34 44 34 101 116 97 103 34 58 34 87 47 92 34 49 49 56 45 112 98 100 119 119 70 111 57 83 75 78 104 68 51 76 120 53 105 72 74 121 110 103 112 113 48 48 92 34 34 44 34 118 105 97 34 58 34 49 46 49 32 118 101 103 117 114 34 44 34 99 97 99 104 101 45 99 111 110 116 114 111 108 34 58 34 109 97 120 45 97 103 101 61 49 52 52 48 48 34 44 34 99 102 45 99 97 99 104 101 45 115 116 97 116 117 115 34 58 34 72 73 84 34 44 34 97 103 101 34 58 34 54 53 55 55 34 44 34 114 101 112 111 114 116 45 116 111 34 58 34 123 92 34 101 110 100 112 111 105 110 116 115 92 34 58 91 123 92 34 117 114 108 92 34 58 92 34 104 116 116 112 115 58 92 92 47 92 92 47 97 46 110 101 108 46 99 108 111 117 100 102 108 97 114 101 46 99 111 109 92 92 47 114 101 112 111 114 116 92 92 47 118 51 63 115 61 74 49 119 54 53 98 37 50 70 70 86 56 78 37 50 66 99 116 114 49 69 115 109 120 54 79 98 70 105 119 55 112 114 107 78 83 83 66 78 81 105 98 86 85 65 120 120 118 37 50 66 122 97 111 100 103 112 50 72 112 82 76 111 111 113 107 85 109 107 54 71 121 118 113 104 66 103 57 105 65 51 109 49 51 81 110 86 98 104 54 103 73 54 110 70 70 66 69 79 115 108 105 104 122 116 53 79 57 37 50 66 116 89 37 50 66 116 68 66 114 105 107 52 121 115 68 88 72 81 86 102 103 37 51 68 37 51 68 92 34 125 93 44 92 34 103 114 111 117 112 92 34 58 92 34 99 102 45 110 101 108 92 34 44 92 34 109 97 120 95 97 103 101 92 34 58 54 48 52 56 48 48 125 34 44 34 110 101 108 34 58 34 123 92 34 115 117 99 99 101 115 115 95 102 114 97 99 116 105 111 110 92 34 58 48 44 92 34 114 101 112 111 114 116 95 116 111 92 34 58 92 34 99 102 45 110 101 108 92 34 44 92 34 109 97 120 95 97 103 101 92 34 58 54 48 52 56 48 48 125 34 44 34 118 97 114 121 34 58 34 65 99 99 101 112 116 45 69 110 99 111 100 105 110 103 34 44 34 115 101 114 118 101 114 34 58 34 99 108 111 117 100 102 108 97 114 101 34 44 34 99 102 45 114 97 121 34 58 34 55 56 101 101 98 57 56 57 98 102 52 102 50 57 101 102 45 66 79 77 34 44 34 99 111 110 116 101 110 116 45 101 110 99 111 100 105 110 103 34 58 34 103 122 105 112 34 125 44 34 115 116 97 116 117 115 34 58 50 48 48 44 34 115 116 97 116 117 115 84 101 120 116 34 58 34 79 75 34 125]]}] {200 map[access-control-allow-origin:[*] content-length:[280] content-type:[text/html; charset=utf-8] etag:[W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"] x-powered-by:[Express]] {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}} 0 0 } [] {{true 200 200} [{true {access-control-allow-origin [*]} {access-control-allow-origin [*]}} {true {content-type [text/html; charset=utf-8]} {content-type [text/html; charset=utf-8]}} {true {content-length [280]} {content-length [280]}} {true {etag [W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"]} {etag [W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"]}} {true {x-powered-by [Express]} {x-powered-by [Express]}}] {true JSON {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}} {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}}} []} { } { }}}]'
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwOD6f9DzEyMbMUlRZl56TxqDCpmRkYWRsmpqbpJaamGuiaGFua6FilpBrrJlgYGSWkGlhbmFkYMgAAAAP//4s1CSZUAAAA=
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-14-2
-spec:
- metadata:
- UpdateOptions: '[{ 0x14000642778}]'
- filter: map[_id:84eefacb-8429-4fba-a2e9-4f6158466435]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: map[$inc:[{success 1}]]
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwMD+/9DjEyMTAyAAAAA//+9etQ0ZwAAAA==
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
diff --git a/cmd/server/keploy/mocks/mock-15.yaml b/cmd/server/keploy/mocks/mock-15.yaml
deleted file mode 100644
index db4a3a0c7..000000000
--- a/cmd/server/keploy/mocks/mock-15.yaml
+++ /dev/null
@@ -1,49 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-15-0
-spec:
- metadata:
- FindOneOptions: '[]'
- filter: map[_id:ba2a5d23-0222-42ec-b746-fbf8eacb9d6f cid:default_company]
- name: mongodb
- operation: FindOne.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestCase'
- data: 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
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-15-1
-spec:
- metadata:
- UpdateOptions: '[{ 0x140005fe77a}]'
- filter: map[_id:2d2e85d0-b360-4cca-9255-f5a02e695348]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: '[{$set {2d2e85d0-b360-4cca-9255-f5a02e695348 PASSED 1674627822 1674627822 84eefacb-8429-4fba-a2e9-4f6158466435 ba2a5d23-0222-42ec-b746-fbf8eacb9d6f /getData {GET 0 0 /getData map[] map[accept:[*/*] host:[localhost:8080] user-agent:[curl/7.85.0]] {} []} [{node-fetch HTTP_CLIENT map[name:node-fetch options:undefined type:HTTP_CLIENT url:https://reqres.in/api/users/2] [[91 123 34 116 121 112 101 34 58 34 66 117 102 102 101 114 34 44 34 100 97 116 97 34 58 91 49 50 51 44 51 52 44 49 48 48 44 57 55 44 49 49 54 44 57 55 44 51 52 44 53 56 44 49 50 51 44 51 52 44 49 48 53 44 49 48 48 44 51 52 44 53 56 44 53 48 44 52 52 44 51 52 44 49 48 49 44 49 48 57 44 57 55 44 49 48 53 44 49 48 56 44 51 52 44 53 56 44 51 52 44 49 48 54 44 57 55 44 49 49 48 44 49 48 49 44 49 49 54 44 52 54 44 49 49 57 44 49 48 49 44 57 55 44 49 49 56 44 49 48 49 44 49 49 52 44 54 52 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 51 52 44 52 52 44 51 52 44 49 48 50 44 49 48 53 44 49 49 52 44 49 49 53 44 49 49 54 44 57 53 44 49 49 48 44 57 55 44 49 48 57 44 49 48 49 44 51 52 44 53 56 44 51 52 44 55 52 44 57 55 44 49 49 48 44 49 48 49 44 49 49 54 44 51 52 44 52 52 44 51 52 44 49 48 56 44 57 55 44 49 49 53 44 49 49 54 44 57 53 44 49 49 48 44 57 55 44 49 48 57 44 49 48 49 44 51 52 44 53 56 44 51 52 44 56 55 44 49 48 49 44 57 55 44 49 49 56 44 49 48 49 44 49 49 52 44 51 52 44 52 52 44 51 52 44 57 55 44 49 49 56 44 57 55 44 49 49 54 44 57 55 44 49 49 52 44 51 52 44 53 56 44 51 52 44 49 48 52 44 49 49 54 44 49 49 54 44 49 49 50 44 49 49 53 44 53 56 44 52 55 44 52 55 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 52 55 44 49 48 53 44 49 48 57 44 49 48 51 44 52 55 44 49 48 50 44 57 55 44 57 57 44 49 48 49 44 49 49 53 44 52 55 44 53 48 44 52 53 44 49 48 53 44 49 48 57 44 57 55 44 49 48 51 44 49 48 49 44 52 54 44 49 48 54 44 49 49 50 44 49 48 51 44 51 52 44 49 50 53 44 52 52 44 51 52 44 49 49 53 44 49 49 55 44 49 49 50 44 49 49 50 44 49 49 49 44 49 49 52 44 49 49 54 44 51 52 44 53 56 44 49 50 51 44 51 52 44 49 49 55 44 49 49 52 44 49 48 56 44 51 52 44 53 56 44 51 52 44 49 48 52 44 49 49 54 44 49 49 54 44 49 49 50 44 49 49 53 44 53 56 44 52 55 44 52 55 44 49 49 52 44 49 48 49 44 49 49 51 44 49 49 52 44 49 48 49 44 49 49 53 44 52 54 44 49 48 53 44 49 49 48 44 52 55 44 51 53 44 49 49 53 44 49 49 55 44 49 49 50 44 49 49 50 44 49 49 49 44 49 49 52 44 49 49 54 44 52 53 44 49 48 52 44 49 48 49 44 57 55 44 49 48 48 44 49 48 53 44 49 49 48 44 49 48 51 44 51 52 44 52 52 44 51 52 44 49 49 54 44 49 48 49 44 49 50 48 44 49 49 54 44 51 52 44 53 56 44 51 52 44 56 52 44 49 49 49 44 51 50 44 49 48 55 44 49 48 49 44 49 48 49 44 49 49 50 44 51 50 44 56 50 44 49 48 49 44 49 49 51 44 56 50 44 49 48 49 44 49 49 53 44 51 50 44 49 48 50 44 49 49 52 44 49 48 49 44 49 48 49 44 52 52 44 51 50 44 57 57 44 49 49 49 44 49 49 48 44 49 49 54 44 49 49 52 44 49 48 53 44 57 56 44 49 49 55 44 49 49 54 44 49 48 53 44 49 49 49 44 49 49 48 44 49 49 53 44 51 50 44 49 49 54 44 49 49 49 44 49 49 57 44 57 55 44 49 49 52 44 49 48 48 44 49 49 53 44 51 50 44 49 49 53 44 49 48 49 44 49 49 52 44 49 49 56 44 49 48 49 44 49 49 52 44 51 50 44 57 57 44 49 49 49 44 49 49 53 44 49 49 54 44 49 49 53 44 51 50 44 57 55 44 49 49 52 44 49 48 49 44 51 50 44 57 55 44 49 49 50 44 49 49 50 44 49 49 52 44 49 48 49 44 57 57 44 49 48 53 44 57 55 44 49 49 54 44 49 48 49 44 49 48 48 44 51 51 44 51 52 44 49 50 53 44 49 50 53 93 125 93] [123 34 104 101 97 100 101 114 115 34 58 123 34 100 97 116 101 34 58 34 87 101 100 44 32 50 53 32 74 97 110 32 50 48 50 51 32 48 53 58 52 50 58 52 48 32 71 77 84 34 44 34 99 111 110 116 101 110 116 45 116 121 112 101 34 58 34 97 112 112 108 105 99 97 116 105 111 110 47 106 115 111 110 59 32 99 104 97 114 115 101 116 61 117 116 102 45 56 34 44 34 116 114 97 110 115 102 101 114 45 101 110 99 111 100 105 110 103 34 58 34 99 104 117 110 107 101 100 34 44 34 99 111 110 110 101 99 116 105 111 110 34 58 34 99 108 111 115 101 34 44 34 120 45 112 111 119 101 114 101 100 45 98 121 34 58 34 69 120 112 114 101 115 115 34 44 34 97 99 99 101 115 115 45 99 111 110 116 114 111 108 45 97 108 108 111 119 45 111 114 105 103 105 110 34 58 34 42 34 44 34 101 116 97 103 34 58 34 87 47 92 34 49 49 56 45 112 98 100 119 119 70 111 57 83 75 78 104 68 51 76 120 53 105 72 74 121 110 103 112 113 48 48 92 34 34 44 34 118 105 97 34 58 34 49 46 49 32 118 101 103 117 114 34 44 34 99 97 99 104 101 45 99 111 110 116 114 111 108 34 58 34 109 97 120 45 97 103 101 61 49 52 52 48 48 34 44 34 99 102 45 99 97 99 104 101 45 115 116 97 116 117 115 34 58 34 72 73 84 34 44 34 97 103 101 34 58 34 51 48 51 49 34 44 34 114 101 112 111 114 116 45 116 111 34 58 34 123 92 34 101 110 100 112 111 105 110 116 115 92 34 58 91 123 92 34 117 114 108 92 34 58 92 34 104 116 116 112 115 58 92 92 47 92 92 47 97 46 110 101 108 46 99 108 111 117 100 102 108 97 114 101 46 99 111 109 92 92 47 114 101 112 111 114 116 92 92 47 118 51 63 115 61 80 106 110 68 107 105 107 71 69 54 109 53 106 101 66 81 65 37 50 70 76 109 48 53 77 88 119 86 115 37 50 66 53 73 49 108 89 52 81 87 53 66 57 80 121 112 89 106 83 56 83 86 56 100 74 78 80 65 75 111 66 107 90 108 106 109 109 78 80 65 113 105 108 111 65 50 118 37 50 66 73 76 73 69 37 50 70 89 87 90 67 69 108 100 76 71 48 75 99 76 55 109 107 97 118 116 98 116 66 54 57 56 114 49 53 87 107 74 52 66 37 50 66 68 73 55 97 83 122 115 97 103 37 51 68 37 51 68 92 34 125 93 44 92 34 103 114 111 117 112 92 34 58 92 34 99 102 45 110 101 108 92 34 44 92 34 109 97 120 95 97 103 101 92 34 58 54 48 52 56 48 48 125 34 44 34 110 101 108 34 58 34 123 92 34 115 117 99 99 101 115 115 95 102 114 97 99 116 105 111 110 92 34 58 48 44 92 34 114 101 112 111 114 116 95 116 111 92 34 58 92 34 99 102 45 110 101 108 92 34 44 92 34 109 97 120 95 97 103 101 92 34 58 54 48 52 56 48 48 125 34 44 34 118 97 114 121 34 58 34 65 99 99 101 112 116 45 69 110 99 111 100 105 110 103 34 44 34 115 101 114 118 101 114 34 58 34 99 108 111 117 100 102 108 97 114 101 34 44 34 99 102 45 114 97 121 34 58 34 55 56 101 101 97 102 100 53 97 99 100 49 54 101 101 51 45 66 79 77 34 44 34 99 111 110 116 101 110 116 45 101 110 99 111 100 105 110 103 34 58 34 103 122 105 112 34 125 44 34 115 116 97 116 117 115 34 58 50 48 48 44 34 115 116 97 116 117 115 84 101 120 116 34 58 34 79 75 34 125]]}] {200 map[access-control-allow-origin:[*] content-length:[280] content-type:[text/html; charset=utf-8] etag:[W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"] x-powered-by:[Express]] {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}} 0 0 } [] {{true 200 200} [{true {content-length [280]} {content-length [280]}} {true {etag [W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"]} {etag [W/"118-pbdwwFo9SKNhD3Lx5iHJyngpq00"]}} {true {x-powered-by [Express]} {x-powered-by [Express]}} {true {access-control-allow-origin [*]} {access-control-allow-origin [*]}} {true {content-type [text/html; charset=utf-8]} {content-type [text/html; charset=utf-8]}}] {true JSON {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}} {"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}}} []} { } { }}}]'
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwOD6f9DzEyMbMUlRZl56TxqDCpGKUapFqYpBrpJxmYGuibJyYm6lkamprpppokGRqlmlqbGJhYMgAAAAP//7WCAEJUAAAA=
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-15-2
-spec:
- metadata:
- UpdateOptions: '[{ 0x140009d9178}]'
- filter: map[_id:84eefacb-8429-4fba-a2e9-4f6158466435]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: map[$inc:[{success 1}]]
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwMD+/9DjEyMTAyAAAAA//+9etQ0ZwAAAA==
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
diff --git a/cmd/server/keploy/mocks/mock-16.yaml b/cmd/server/keploy/mocks/mock-16.yaml
deleted file mode 100644
index b9c2234b6..000000000
--- a/cmd/server/keploy/mocks/mock-16.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-16-0
-spec:
- metadata:
- FindOneOptions: '[]'
- filter: map[_id:84eefacb-8429-4fba-a2e9-4f6158466435]
- name: mongodb
- operation: FindOne.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestRun'
- data: H4sIAAAAAAAA/4RUW28bVRCeb3djx2YDCgh44QFQEeLBSLROFHgAtXbTRjRW5MR9iSJ06p00RvbusuesRJ54gJZbudNyeeMH8CsoLZQSbqUU6E9BGnR2vfYmIuJld+bMnPnm8p2RC/KNC1Q3WJtuGkKuEu6Bs9KGT6i2ElaGA3iEai8OCrmybpRJtXVxW7mrezyO7d/raU6yu+tpv89aZ3eX1WCYJmzlmY3IqGEusTYacpeIHpG/HWBuc2sUBTzUT1uTtUCuEcnX8q0LePnhNcK9RYKlRKrrRiXj/GqtaBQPeazNdNMwd6/bCC2leZxzr7uS/bv8CuQNgtvmGPIlweuyjiEfEmY60UAz5C1Cpcs6HRrId4TqqSTuZ9c+Jszmir3xKRG9Jq/bjp42Ji4C11BZZbMTBVkWa0lkolX1cpTY9MbqIMxVt9c9Y71qve6ZNZWokYZcJFROswo4gbxD8E5EwW5W/olBqJJM9JajZAR5n4gekwseMD9S8aY2ySA8v5X/sjg+fKKH5W0P+0L6tkLy5U0Hjq3VJ3pU3nOA+clILEBbGWVBIJeIFuRdF5idnl8iuHBf5Dy3s2qYss46N7OmzE4mEj0uXzjAA5OwbY45DDjs72adlytEz8tlF6iXLVcIHryOGnFW7MZunAurbIEvErw8hc/JVveZA9Q2tza30kFoluwp6kSpfGDzzecyHm8V9ZxCrSjI6PmffZ7LfVZZa3We/3+G07kQnZXrLvZxx9uHKTcIczmoLpx+JtQtdqH/Sqi1OS7Uv4joOfneBWoroSlOb9juVzpRMlJDOITZk6/G3C9e7PG+SbNnR3REfnKABycTyMFL2HKT6AX5wQX8/babh0LI3hRD9ojoSfnRLVFsj+BMqDGTUSOnQ1t+sbM+UK1XRplMewrnT9H8jPF/OsD9ZU5NewW5RXRMfrPtKhlu2VoOZdQdInpC/nCAh8pRrbEIcIcgt4mW5XcXmDtgvH2ghqL0Q0t4Sj6yS6O8VpzSQ59sD9vZTyyNyzun7OqeTJLMz8hVHFlqMm+r/rnGUvPos43m9jnVUEfZSovPLCw1Fxebxxbwz/WvLt8df6vdXqez0jmF+wLeVunQvNSPRrEKdzGvlV2qjTAKuLHNpr8Dv/BJ7dKvOBX6NwAA//+nGTBETwYAAA==
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-16-1
-spec:
- metadata:
- UpdateOptions: '[{ 0x140005ff29a}]'
- filter: map[_id:84eefacb-8429-4fba-a2e9-4f6158466435]
- name: mongodb
- operation: UpdateOne
- type: NO_SQL_DB
- update: '[{$set {84eefacb-8429-4fba-a2e9-4f6158466435 0 1674627822 PASSED 0 0 0 []}}]'
- objects:
- - type: '*mongo.UpdateResult'
- data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwMD+/9DjEyMTAyAAAAA//+9etQ0ZwAAAA==
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA
diff --git a/cmd/server/keploy/mocks/mock-18.yaml b/cmd/server/keploy/mocks/mock-18.yaml
deleted file mode 100644
index cdddc839c..000000000
--- a/cmd/server/keploy/mocks/mock-18.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-19-0
-spec:
- metadata:
- DistinctOptions: '[]'
- fieldName: app_id
- filter: map[cid:default_company]
- name: mongodb
- operation: Distinct
- type: NO_SQL_DB
- objects:
- - type: '*[]interface {}'
- data: H4sIAAAAAAAA/3TOPU/DQAzGcScSAYkoL4D4Fl4QYmdiYEUwh5ybRLk3nd3hxuaDN10a9Tp0/f8k+ynXQ57l6wJZA3DMntYFHguWMNmhbKH+Jq9dxB9iwU/vN3mGVpFx+Ef/Xw5/P1JroR6C79ESCynsLlJBqScW4+yc5gaqNOPbLXjf4AEKE9MT93Bn4vU+7ozXhNYpwh1JP272Ci9n2weNPLogZCkkTyV64j5MXpDVfAoAAP//qWsI9iIBAAA=
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA=
diff --git a/cmd/server/keploy/mocks/mock-19.yaml b/cmd/server/keploy/mocks/mock-19.yaml
deleted file mode 100644
index cdddc839c..000000000
--- a/cmd/server/keploy/mocks/mock-19.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-19-0
-spec:
- metadata:
- DistinctOptions: '[]'
- fieldName: app_id
- filter: map[cid:default_company]
- name: mongodb
- operation: Distinct
- type: NO_SQL_DB
- objects:
- - type: '*[]interface {}'
- data: H4sIAAAAAAAA/3TOPU/DQAzGcScSAYkoL4D4Fl4QYmdiYEUwh5ybRLk3nd3hxuaDN10a9Tp0/f8k+ynXQ57l6wJZA3DMntYFHguWMNmhbKH+Jq9dxB9iwU/vN3mGVpFx+Ef/Xw5/P1JroR6C79ESCynsLlJBqScW4+yc5gaqNOPbLXjf4AEKE9MT93Bn4vU+7ozXhNYpwh1JP272Ci9n2weNPLogZCkkTyV64j5MXpDVfAoAAP//qWsI9iIBAAA=
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA=
diff --git a/cmd/server/keploy/mocks/mock-2.yaml b/cmd/server/keploy/mocks/mock-2.yaml
deleted file mode 100644
index 961bfe8a8..000000000
--- a/cmd/server/keploy/mocks/mock-2.yaml
+++ /dev/null
@@ -1,32 +0,0 @@
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-2-0
-spec:
- metadata:
- FindOneOptions: '[]'
- filter: map[_id:415e534e-10f5-488b-a781-19a4bede11b5 cid:default_company]
- name: mongodb
- operation: FindOne.Decode
- type: NO_SQL_DB
- objects:
- - type: '*models.TestCase'
- data: H4sIAAAAAAAA/6xU33MT1Rc/Z3fTJvmGH/3C8IWHr1MWHPzRhIa2WvPgTEkEOlBaE8pLptO52b2ki8nucvcGyTAdR0RFRVRU/IWiiAqKiAioqIi++OgTTz75L/jseJy726bJWNQZfUnu2XvuvZ/P+ZzPoZv0pI4Y38UDmWcBRzoC2IPaaAFTgN15wZnkNhqA3ZO+Pb+O55kvGyIK9HyUHBvx/WilTxZHw+PbpPSLfB/S04DxKAh8pBOA3VuFb4VbrwLGo0BtvQ5oFLgfIL0N2D1Sq23nzQDptApca8YTURDb6TkK7DHA2JhnPRQgfQ9o7Gr6HFMA8Ag9pWPn+wnsGuNyxrMVsuSE8KQ3xvZ6QlGYCx03CvXJ4g6VlZgs7phggtUDpKOAXds4s7lAeh7Q2OzZTZXTtdlxmQiXxhZP1JFeAoC19IyB2FNnfjmQwnGrU9FfeE9KQfwfPWdgx5UpRQdS9KyGmiKWAuilFzXEnvJU3bN5LcioBwpMMvUI0nGAIXpBqbfw/Tigjvp2HmHbzWoNHkRlmmByJlwCNOhldapTEEyWJJONIO/ZXBVhUbZLopwxHgSsyv+6kgvVAbiTXlGatAuvtdWxJQ7ABnpN4evoirZU/QEhwjyTTmmIK1rlKXCfuzZ3rWbYPnQS4H56Q0dMtu+cBDTQ2MnqIf75nkFjjKsCHlUNGJbyLVAqvakhJspT5amG48ph9RWTAOvpHQNxRZu+5ZbCp+elXEvfaYj/LU/dJXhV8CBwPDejujVsVjoDMEjv6qjRGYWoezcXKiPE0kK33XHDhjVKPreQ3gcAukLv6YjL1E3T6nPJmuF1pjZxCcYVDZvNUeker+zllgyQPgTUw7KfDxcB0tUF7xwDTI4EARfS8dwA6WKn9Vs1iu1ilRpH+gJQH3Vl6BUlhrrgP3PCNnggka53uPoGANxB5zTENX+sxnSEMYRIZwFuow9UUc6GmrfUCTVJKvpH6aMOb58HTP573r7Y1u1xtZh7eBGjXwaADH1iIP6/rRHa6ZWkGBHRpSmkC6qfPlbcLgAixkJ3Ro68nT7TEFd1FmfB1ZcB6RLA3fSpOn3p73icDtGVTpNfBYzf0uS3pP1PHL+BPtexvWk0NPJeLUD6GtAoeg/PYV1HX2mIKzvZl/bV8l4tTKVrAPfQl4r7tcXNm5gQ3HJC+xiAsZLFaoqfGjrfdAyd638ydL7tHDo3Fh86v2mr6AiuH8wO8aGBQZ7O9u8ZSg8OD1fS7N7hbDp7HxuscJtns5Uh/PWHU8VNHb/LbL6HNWpy2vLqPnObuKwqfCvt8kByO818XwMExKUHzQNmLttnNs3cpoFZXMJ8JzNi21yoX0B0D5qCB42aNHPD2T5TGd7MHTRdVudmztzCKo7XW3B6t3JXMtfxzD5TclZvSyk0LCYds8+0ZljdV7afcfzAzJn9Zp/pe44rVZDt78+as7Ozql+7655b9ewKJnaOT5ce3DFd2IyxhOdzwdTYSIy6aoCMu9yQTZ8vJC1vbYz74XzRylNx27Made7KxIFctre3mds0YChgrTc0OtFHj6ox1zpdDPkiHVJgktFnbo8WcDkAjNMhHKh6mbnzGU9UN4brtC2c/VxsrASeu9EXTt2Rzn6eiWbOaIEeQ8T4fIR0GLALVwOspsMrIWXRj3RuTY9NP6+jm/TLUvoJepL0eAw1OgIAMXoCECFmVIsTefg9AAD//7iTA+RLCQAA
- - type: '*keploy.KError'
- data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA=
----
-version: api.keploy.io/v1beta2
-kind: Generic
-name: mock-2-1
-spec:
- metadata:
- UpdateOptions: '[{