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 πŸ‘‹

-

- +

+ keploy logo

- +

+ +⚑️ 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 - -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-video-demo) +

-## 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) + + +Join our Community! + + + -## How it works? -#### Safely replays all CRUD operations (including non-idempotent APIs) + + Keploy Twitter + -Keploy is added as a middleware to your application that captures and replays all network interaction served to application from any source. + + Help us reach 4k stars! + -Visit [https://docs.keploy.io](https://docs.keploy.io/docs/keploy-explained/how-keploy-works) to read more in detail.. + + Keploy CNCF Landscape + +

+## 🎀 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 +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 -#### 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 +- 🌐 **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 - -### 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. +Record Replay Testing -
-## 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 **MacOS** | Not Supported | Supported | Docker Desktop version must be 4.25.2 or above | +| Windows **Windows** | Supported | Supported | - 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 **Linux** | Supported | Supported | 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 @@ +

+ keploy logo +

+

+ +⚑️ Backend tests faster than unit-tests, from user traffic ⚑️ + +

+

+🌟 The must-have tool for developers in the AI-Gen era 🌟 +

+ +--- + +

+ + + + + + + + + + + + Keploy is released under the Apache License + + + + + + + + + + + + + + + + + + + PRs welcome! + + + Help us reach 1k stars! + + + Join our Community! + + + + Keploy Twitter + +

+ +## 🎀 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** ( Linux / 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 + ``` + + InstalaciΓ³n de Docker + +Keploy se puede utilizar en Linux y Windows a travΓ©s de Docker. + +> **️ Nota:** MacOS necesitan instalar [Colima](https://github.com/abiosoft/colima#installation). 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!** + +Genera Casos de Prueba desde Llamadas API + +### **🀝 Saluda a los populares frameworks de pruebas - Go-Test, JUnit, Py-Test, Jest y mΓ‘s!** + +Genera Casos de Prueba desde Llamadas API + +### **πŸ•΅οΈ 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 +

+ contribuyentes +

+ +### Premios Disponibles + +| Nombre | Icono | DescripciΓ³n | +| ---- | ---- | ----------- | +| Creador de Documentos | icono-de-docs | Β‘Premiado por ayudar a mejorar la documentaciΓ³n de Keploy! | +| Cada Bit Cuenta | icono-de-commit | Β‘NingΓΊn commit es demasiado pequeΓ±o! | +| HΓ©roe de Solicitudes de ExtracciΓ³n | icono-de-PR-hero | Β‘Eres un hΓ©roe de solicitudes de extracciΓ³n, sigue asΓ­! | +| Cercano| icono-de-closer | Β‘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: H4sIAAAAAAAA/6xX7XMkRRnvZ3dzyeUC1ImlWBbW0nCFnrPZ2dmXzI6FmkvuklwuuZDdO4RsKtWZ6d2d3OzMpKcnuRBTlqiIiopv+IYoqIiIiAiK6He/+c1/xtJrq3tmN7twvFRJJZvt7ufpp3/P73npjviX+GIWYKJJIz5HIgriEQSnIbM0D1MIxucYJZw6kEMwfiV0+uOJORLymCWT7FyiPDYbhskoe2V9SW1f5Dxcp7sgvoxgIplEIYgnEIwvsNBWou8imEgmUvR9BLl5GkYgfoJgfNbzlulBBOIpOfHtbsCSydhq4EqwjyEYWwnsaxGIvyPINQ9CClMIoS+IL2Vh9PyTcGKF8m7gSGSTayzgwQrZCZh0IZ26fjLNXlm/JLVOXlm/tEYY6UUgHkVwYpEShzIQX0eQOxc4B1LnxDnXJ0wNcxcC1gPxLYTQXeIrOYDTPRJuRJy5fmcz+VJ2piTED4uv5WDE5JR0B02Jr2YgIx2bQigvvpkBOL2x2Qsc6kXT8oB5wok8BMTjCFXFN2T0jtcfR5CF7DJNsF0lXkyjhKY1wrtqiFAsvi13jQYEJhuc8DiaCxwqSbipt7ckOis0ikiHvjuTx+wg9AnxHRmT4cBnhngcBAehe8X3JL6RrBhSzZ5nTOlh8eMMwO0DeuZpSH2H+vaBSh/xJEKfFj/IAkwOS55EkIPcKukp/P2cgdwKlQQ+KhNQUfkjJKP0wwzAyY3Njc3Y9bkpV2ESoXvET3MAtw/Fd2MQ4af6obxL/C0D8IGNzbOMdhiNIjfwp2W2qmQVTyNUET/LQkY8LRGNX6VMaigsA3TLrq8SNtcIqQ3iFwgh8Zr4eRbgNmlpSy437C7tESmEW2BCuuGQ1JXxy9s71OYRiF8hyCran1ODCMTLx7XzGILJ2SiijLuBH4F4YbT0BxyNNcm2R0G8giC75HNVKzIY0sCpNLAxjTiI10eq+g2E0MfFLzMAH3krG1sJRgVRPIvQx8QzkpRnVcwH0VExmZTuPy5+PVLbzyGYfP9q+4WhbJ+Qg/TgmxT6SwihafHbHMCdQ4kw7F6Ds1mWGJ0C8bzMp99I355HADCmqjOpyDPi9xmAD42Sc1zVLyEQLyL0SfE7ufvF91Lj4hHxh9EifxnBxNsW+du6/f9U/L3ij1kYTpoM5OYCLwLxZwS59WA/xXq3eC0D8MFR7xu73lzgKVXxKkI18Sfp+6s3L96Ta4zariqfHIKxhk086Z9sOn8ZaTqvv0PT+eto03nj5k3nxuSCeATuMQydElorF0xabRcqM7XtglmptAtO1SaUmDXH3q7Af/7xzGOfT//+O3vqn/89+wrc5tA2iT2+ZQe9kPgHcDoivdCjBT9waKFNud2FiWKHchUByC6cb2YH80w21w0iDrd6gU08ObRM3dQn44iyAulQn8MpO2ZecWbarE7rJ4ht05BD9mzxLGQOjxDADXgCxnKUkw7c/UARl0pmIdx29vcvBPXG8mp3vnzpetVdvHjgd8JdXcdT1wthsE8ZdQrbBzB+/noo4/NRaTeKCnbgcxZ4BeJ5wX4hYG7H9QHOTsl16vMCl+G5g9PrvNjlPe9TebtLWET5fTFvF8xb+2oe9Tu8C1nD1OEG3HGIZf/C1iF2HWwZGqY94nrYwjvEp3x6n5I9yj7L6C6j0bTrYw23XRbxLZ/0KLbwRamFNeyR47UH1B6sYbJHOGHYwl3Ow8gqFgdmim6vU2wTm0ZFo+D2SIdO74QdfKThKA7DgHEJKGbeTffeneoUupQ4rt/BGpZeYws3g/w1SsP8Ot1dp1G+zSjV8oo3dztW7TbPg33CnCgfUbZHWd4OIh7lCaN5EoYyrWUbvgsfHSGQPwCTQ5lyarHZXNuau7R0frUJuZx0d0icjZl351vRktAtyoyJisZ4ECoQJ2PfoW3Xp05OBm3EbOZG7raNQyzXsYXPxe22ojIJ0kbJKGvlilbSda0+o5VKNflVrmhVUxuIqkqcLFZ1rVJJlktaSa+rXUrDTDWUrJZY0xO1Uk2r1LRSqa6mSmKmkopWq6ivZFoeGlfVJmm7pE7vn2ukixWloyAnOgpKcsYAykzlzUiGLJmJ7F2NmDM3Az4wlK4f85dK+2RU1HryMdR5VVOrzMjf9+B5pU+wBFVOpoY8pV4/Vp9RgakONJUXZSVXptKj9SSiRrVPgfJ9JsUlP6WU2NqbkqDUx2q+r56Vq++IQXlUGZCv64O9qSt9N2qJfUMfgi4DV1HmytL1mTRlS+qUsqGZxgDgYFhNdI1jyJLBilyVdCtoeupwUhp1M0Xf96uvkphSmiWV+/U+KUPS6iCbRjJr6LRqakNtqB/z2p/1SUtZqiegZo45kaU7CHvJqG4ebd7IWoe4q94OkeyL8j9D1WYdLW9U8xeJnzd0o5zXq1a1apX0/MJKE2t4+F7AFiZh6Lk2kQ2ouBMF/pvuB9lEGfGjNmUF6tuBaqwWtruxf406iTmf2nK7XPaCiGIND19Y2MLpjSVb/9vfWdjCZ7GG5a0ovSi23u1ebGGs4T2XYAuXpkv5PdqJZUu0id2l/ROwhXvkuryV7ytVKrou5e1CohKpRxW28OKS5IV0JB21elkqMapuEh5gCx+2MPWdMHB9HrWwtXHYkldQC1ut9BJqtYqtVpFM+9Sbtr0gdtoeYXTaDnqtVjGx1GoV98qfie5rtD022+APXI6vLJTNz12rXqrG8+FDi+Ze44xxjjdW9Xj3OpvdDZfZ1fKOvfyQf3X7YbIUXAy9eZNSMnPBufygbVx7eLV2xji30I7d1R2H06trjcYyXd6PmqtL/uyaeXW9yR9sHlxYXj8wgoc6988vLM7pO/efKc+fKc+38NGm1sIdFsSh8sJuF3zqtbDWkmRtkQ5tYaumV0xdP8Ia9qmXsBDFKnpbbUZUwFvY0rVWytUWD96LsT3CZEbMqjdR4Xw/ozScXLxJDqUMJsFiRG6YMSm1DaNeb7dts2bohXOXV4aSeSg1Ow+7oXoxpOE1dL0/aSbPgcvL+AiN5eSrHP0vAAD//1xPBqR8EQAA - - 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: 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 - - 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: '[{ 0x1400048e439}]' - 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[] [body.result] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMDA/r+JkYmRiQEQAAD//4pyI9BnAAAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-20.yaml b/cmd/server/keploy/mocks/mock-20.yaml deleted file mode 100644 index c2b67ead3..000000000 --- a/cmd/server/keploy/mocks/mock-20.yaml +++ /dev/null @@ -1,1583 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-0 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-1 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-2 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-3 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-4 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-5 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App cid:default_company] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.TestCase' - data: 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zKMBwuVDI3A728D3RNqDK733tYYhBlvzqEmGHxxNN9mH/eFybNm4P41a9C8b8v1pusV8n0PLxvFvXY+Tbx607hcZzr40hV7H0oxqP7nOt789dzqa1rH2ZjC2l1EfJpaogMnKUtVOR+154CXsp1nkV76HcDcV4SGu3N9Ni+8dz1K1TqfT6Y2/PCGstMJjfDtcT7KpMXzoJNfuRUfV7r40E71j3X95QuN2xl++P3TUjtVRuf1RK+vvq3nPQMDFI5pZ2DNkQ7QO9/5gb2QWgpN5uAALozdc3Pve3nSnIDg+7MzlPAmhoOF4RCvO5ciuz8UjPqR8TzYN91+yUj5mss96suliuTdgmOnryS08hA7pDfhjMKiB0B/OTd/afYOC2sniP/fsO9++PD1o3Y416GjW05fvlqd2Xv62QVfUb3/73uloaqfjabiHWqfzP5/+/qn78re1amndL80dukv/0nzsdCztfz798z9///enVZTNPv32KXtcPTzGk09//7Q9rNEX5uhfjnX/r5766e+fstk2+vTbvz956zjazkbr7eJxtfn026d//PvrsyBI09UixX/Mbq79LOxBQwDNRkuOROU///z090/fFul29oRmFK3/8a9F/JsiyK3J9Fv0WRSbwudGLCif2zNl8nk2ayvfJlMFzBrf0IMnC3lcz54iNNVPv7GZr2b1C3zGl/GK/p/NbHvz70teegOaTaUNFFFsnfkznn2LntPtv6aP2TpaHW7uZuv08fDZnW22nzvr9c2XaL348jR7eJptNovH1ZftbLO9ufn37yPHvQE3oP462pf/97d/4t+d6XS23n7WVtPHeLF6+O0fD8fF+p833cfVdrbafr6frR6289/+ISti8aV7WM9++0e0XqeLKd6eL8vN4+qfN95m9vS58zBbbX/7R//x83y7XX+epovZavsF/B/wz3/e/Pvrp0X89dNvXz+JChDixmzyuQ3a08+Npih8jqTmt89iM1K+TYX2ZCaIXz/9/eunaL3+F32msnZ8+el5xS5Pv8WSIsXi5wkQ48+NVvTt80QQJ59nQG7J07bQbMcz8sxss/766bd/f/202Ubb582/po/oym+iIPz966f5LIpnT+Q6v+Cvn377B55OadH/3810Hj1tZtv/ed5++9z++umff//6CUZPB3L76GnxsFh9RXjy9dPkMT7gmf7761e8EV/Rp69f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 - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-6 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-7 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App cid:default_company] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.TestCase' - data: H4sIAAAAAAAA/+y923cjW3ofBnT3mcvxGY9G9oqShzglZDKOhsTBrl13WkdeBRIAySbRB7zgRtK9CoXChQRBHAAkm+zFlRVFkceyLMvyOFFiWVbGiiwp0sRxbEdxHMXJSx6yVt6SP8AP+QeSl6wVD7P2rWpXoQoA732pdfp0A4Vd+/Lt7/v277vsva//j+u/+jyZ/MaOMxovWyMnef2DRPI7yWdrK8nPEsmvLw8da+w0ky8Sya/vDprs8zeWrcH4dEi+PF8mhT8xBwPy6fnu1hp+fXU8Hmw5XyWvfyWR/Ab5Mhokr/+TRPLrheHAxj/9ZiL5DfIF/fSfJ5IvVpzBKHn9O4nk181e76VzMUpe/wh96dudkyH58knxpIs6+2uJ5CebJ/bRKHn9vySSL3YuBk7ys0Qi8R9c/7XnSX/730x+bdMZd06aqGeffjk8GZ9sWocnQzQE+rXbJ1+f725toFLf3N3a+NIaWsej5PWvJpJfW3WspjNMXv96Ivkie9K8QGW+lu32rSH++CJ/MjxOXv8wkUj87PVff5FMfufYGuyNxsNuv31A/sH1fIa6+DPXf/NF0lflZ2g4ic+u/8az5DM0sM8SCeH6bz9LJr+zd3B80nR6o89RAyvW2EKNJK9/I5FQrv8Wmj3v+W8kks+Tz186pG9lq3fqjAiZvrTGHfwxkTi9/jvoLf+EJD/dHlvj09HySdNBRAgd7bdImU1nNLLazmxKetRJJH7u+j9Fc8JP/DOOju7kJBJ/8fo/Q/3zcQVX9HluOMTlUtd//1ky+edc8qw4A6ffdPr2BWaf699KJH7h+u8+TyY/5X/5rUTyRfJF0TrG/Wc8k3yx6SAC/ipiQEzK306gWfp7z5LJb+4d7B2cdvtjHT1NfppIfPf6v3iRTP45bn733Bn+EZvKn73+n58lkz+9d/D9odMeOqNR96T/OeJWzKzXv5tIyNf/4Hny2fXvoh59vewMUQncF7d3L7t9zLAvtgeOnbz+vUQicf1Pr//L58nkt1FNr9HjbbvjHFvox+S3kt9Aw2hadChff9U4dOzxKHn9h4nkc0z2P8IfRsnrf+bJzq8lkp+ao5EzHHdP+qPk9T/yi75Lo092rEbPSV7/SSL5fK0/xrKCJgNV8GfoxJ46o3Hy+k99Uv0vE4nEv3/9B8+SyX9rkhqvSR9xF69/P5H4C9f/EBHl9/Gcu7OD5+RTNPxfvf6vfLL9R4nkp/cn2/+I4/ZvoA+04RBB/yeJROLz6//6RTL5b3OMwA9vezw0h6TSz5LXP0b89MdobD9OJJPJT7B0Eon8967/22fJ5L/hJ44n1f8kkbz+x4nEwvV/g97+x/PI+PUvXv9Tv5D/s0TyG5FCHjnsu0j8X7z+754neaZ5lnyxfNIbJa//RSL5YuvknPb1373+H54lk3/eP/rtr3rLJz1c9PqfJxLq9X+Pxv7Pw4X3m18OHbuLxedFIvnJtm310PiQ0vkffUrnT6conf/Jr3T+ZbjS+dfPE//q+gfJ7xpNRVNVaKeNpgPTcsMx0oZhwbTlNESj0bKtBjSS/9//+mf/z//d9/e3m07LOu2NX9snxwOrf5H89ktn0Du5SKMVOG0OBsmfyViDbsajRKbp9PFql3zx5avtneSz5LMpZZLfTyRffNu0bWcwTuf69kkTKaUX7cvu4M8un/THTn+c3nD67XEn+VyB0mfsGabkT1mDQa9rW0gNZA5HJ/1Pd0fOMG22nf44+dOFk3RnPB6k7V7X6Y8z4udi8ifP/szbVLeZWkoBRW44umilZUN30jIQ5bRlGyANoNwSgQ0tsammFlPWYPAalw+MOrWYGp72yU/oszMapJbepkaY+V7bJ00ntQQBWEx1MMOi3/iep5b2UsG+/yXB7ljDkTP+4nTcSuupg8VU2RpeoKKvht12t586uFpMNU6aF6ml1Nv91MAajfZTSy2rN3Ku9vupRdb6MeF90rMB4vbXx4j7U0vA/Y7YP7UErhZT7eHAfk36j8qPndH4tW2NnNcDa9xJLaUyiKSjzLA77h4dWt1+ZsUZHY1PBpn2SXowtOxx13Yyo6NB+vxkeDQaWLaTOSK0onQP/YaaGaUWU8dIoT58SxnUDmpvjImfQnyRukokkz9J/noy+QLROfk1QuVEEv33LPn145N++6TZSH6z+Or1dmnj9Uo2+cmfzXf7zVd959UArzzP9g6+1ur2xs7QRBr1dbe5NA9fCXa3uRSQq4MXfevYYY1+82TgDDFrsBY/X3EQV71AA+B69Own/++/uP5X1/+hHxP/YiL50/eEiT9FCsZbrLxl7Jd8EPlXOYj8Gb+WfuYC5N/gAfIPeYD8Qw8g/8Bb5H+fB8iH1/+RbxH9JYQA77SI/jK3mvyKt5ogGPQfR2DhX3ax8F/jsfCv4NXyBwgL/1WEhX+AsfDh9V/3r2do1Y5cz37l9qAV4cq/FYkrfyOB16xfuP4bQVz5a1Nx5S+7uPLXMa78mwFc+esUV/7tSFz5Q0aWn73+h1G48vcTCMwnZATwnyFYPyeu/E2EGH4TA/RJXPmbCGBxuPKXeVz5WwxX/jbDlb/rsdwPArjyRxG40o8df8/P7wg6/t0Z0PG3EshISPwFZDg8o+bCJHQ8vP57Pqb/7Xtl+h/xTP85NhBm4UJiKvwO4oe/jzr+Ozwu/AHu8T/wM/3vTmP6H92F6T/HVsVnmKwuXPq9SLj0k//nh9e/mPzuPOoZI58/8f09GwX9+SDCQevOMw4ChRag+GcGbJkXHhlwBjxK/uTZlxT/SIasKLIG07Zhw7QsNaS01bRbabXZgAaUlGYDynPiH002gA4sI93SWmJabjbltKW31LSmSg250WgBB4Anwkjd5n5qaT9lA1sHmmikbdCU07LVtNO66jTSDcvRG03JdjSg7qdiEHUHEPXMz3r/zoyZ80Gu5LffYjTLwOyniefPb4u/5uHre8Vf5/9XjL9i/BXjrxh/xfhrGv4a/inCX/OoZ4S5/rc/8f09G3/9m2HwCi3BPAaLLHQjP9QnoiIrs6DWTE/Uz++/Tdl0CUgtiapq6KKmQzAVc50Ou2iNDxlFahGvx6+HzlcISB1jyqeWUmjsQQQjBhCMiCruRVd8Ouy9HmAORlV/H2GcKx61BaiG0BiiG0JnftKhXxQD8j9EIT1UxiMhKjFJxHCw13Kaeks19DSwgJ6WjZaS1mWtmdatliNCQ23okrGfWtyndMbvBCiNfyb4Fv8saUYL6JaYVlq2mJZtUUtbtmSnDbthNGUDKC3bIe84o8F+auntPo9y9wnM3acUI7/z499PLe3tz8K6+6mDxX2MdklxAp32EQ32MRFwT9/u72NC7KNv+/spWVNVq9V00lCytbTsQCdtGI1GGspNHcg6gLqioXJX+/t9PAI//MV14uccA+0jDLzPs9A+RsH7Hgz23vNDYfz8ASEqbtKFww/dGgHEZJhkGvexEO6nrrCAEHl83z3DX5HiARMHf3W1TGox1XQGo9TS3tsUwtGppRRF0p654IJmZLE4YwuN3A/nU0upvYPUYopAelQHBfXziHQoqE8tTnbHhfappZQf3If19WoxhVAMonVmYSPTLm1mzVJnt14tghLMX9ZLq5l228zm2rnl7d1SdsU0s1lQvKhX8qBeKWWz6LtYPq8XvO/LuWLHXt0S7ePykVkqmWapuOK+u5s/t3O9nFk6R8/Lu0dH+PnyUfPCLhSL9erWSQOydjqguZrdrldz2YyM6umsNVe3znePy5e2uZo5xGXwe7gMrifHvhfPSRtbuXo1e2m2FrZNM7daqrwZbcOyYp+vZnr4/fxpDXbO7P5mNqOgNsqvGrCHx93F/RXPanCM3j8xzVyuvNo7r5dym6ZpmtbZwop5ngvpp53NHom9ZqFzVjdR2dzL3dX1s2bBKNYqgzO7ncvxz6yKwp6tlMvrm6TfvfLu0ZtSrbreaVQ3sxm5Zpql+lq9kj+qV9eyGfkEjW25AbcUXN40Oxl5N2eWcluNSv68IhWBfdw7rYviZXN1fdA4tmkd54hOZj6zsJ41c9nsUadXq2z17PZqpts2sysmHre58uXCqtnOLWfktonrLwwz3XPMG5Nz0M693JW2Os3V8mUJGkf1Eh5LYbtQ7tQL5QuztfAS0a50bBw5mHa5Iiu/Uylf2jDfJzSdl06muXa2sGW2c9mcOG42KsZRvfLmcuNoq2cXyqf1Qvm0Jh1lM8qaabYWXpmmuZCRwYpZyr3cKpTP6xXlqF5RDp3SauawbWazZi63c5wf0z5wc5zL7VTKoFZazXRQudxWp1nIZTMK6oFZzcj6slnKrVdEsVGtlgeNfkk2Wwsl1GfTNI8yyiaaj53AfDSqVfqZ8iCj+VproY/H1Bs3X/bXe3VpvWdLxUEDyqc7FePQOl/NfGWa2YxSM82VnUwPyerZQgX10yw1K/Xq+qVVMU4p37+qVcQe/bxhVZQj+nnHLpQPzdZCDQ0ioxxmenhejWIDFodVsXherxR3arDTa1TQWNH8n2SXc4if80e16lbHbC0UkCztwPWv6pUiQLLUN82sKa737NJqpt+mn89XMwO/DK0h2pSqxct6dR2gvqIyJ+0QnZLfUuzCLpFpV8bzItJLZmvh2DRza1vS+nkNtSOZmKfN5cPM8fla1tzqNarbg4t6pXlRrxYxTTaOcB9arM9ma8E2zdXMcds0V88W6uZ5bjmjIJla87XN5ny5bWIZ6GP92GQy8MZsLTiIFmap7tNdy73sRUPaOtup5L9qSGtEL7rPeqfsmSmWt3eIjlhHsr9byF/UKuIlpTEvQ12/DJnmxtlCB8nwakXs2PkxlfPmBO/sSlsXpeo6q2PTbC20Mf8q+opZ2sicoH6UcvnycX7UrOxmscyb2a8y6iaSmbXt1S1g5wmdMyrSb7Xscq8IatUt0QbFs3phl8wZp0vwnObWz+qrRL+vlFl5EfWrU4e7N6GTaS5rmQGm/RvCp5zez6g1Mm9ce379a5qZ9q6Vkdey64V6r77SOS4eHskbO9nO5kp7XFzpHRe3gVxcaR5t7HQ69ePdN5uHR7B22L58VVrV35xrG9vt4L+5L+uF8nGtWh4188ZhA4rntYqimCVjo17NjhrS0bhcKF82l8WsvWpm89tGxy4cndnH5b6NdCfsnTW6xmWzkL9ommtZEzTzZTO3jMaRaefyGzB/bm0bfh6WEA3XwZcwf26viGHtHDcLBqhVzo3N5Tpw1/ByttMstI0NsYzk7nJDWh80C72hdZwfNLpGrl4tDpsF43wDNs82qtmLWqUIrEqxtyEVh/ayKDWk9aEtZTs1uHtmwfJ5o2AoG5XiyKqUT5vLxpD1owbfDOoVBWzAcc8uvDlztkXcB/uiPkZztlvIA2sFnJWrxZ7d3zyzj3vAqoy/qlV6pxtgq2fDMWhI5lkd6mN7db1Tk7YGqE0bjs83qs0z+3h8aRfyh/XtqW0eNgq9XqNf8vpa3erZ0tblBqR6qLSbfdk2V2rV7PkKcN/DmGcD4ROz4/W3kHvy/q6s4u8rtWqxh/uUHz1Zn7LVrbNmIT8yd8ys2TayNVjs2aul8VZFOWzALYwzsoWmalXNl7iPXTFbh+XTppnb3oL62EK6ZNmrf3NbfmOauWymXSiZpbXNEjROmwXEV+KuU832zC2jY69mR1al2GkWsMx8ZUPj9NVF9tAq5C9sWAZfVsug3gVyNl/v2P2jbPbIuLAqzUGjnTt1LtYH9eU1de24fljb6fVql/mjjZ1ir3i4OS6uFHv1ZSBv7uSUjZ18p35c7tYuTbl2WLvYvFg3ltsm0n+rjYpxWofGUa2dW985Mlq7Yn6zCraWzVKtWK5m0ZrY25GyZD276DWcyzenVuV8YW0l6t+svLlTOt9cMcXajilvFvJGtVQ/tipvQL26NsZ4QTQG9ZXBcQ3mlHpl8019GVzWd2qXGzuly3qlNH61knvzahu8qVXqvdrx5vmrwhrcPCw2swWl06jscn3undmF8kWtuoXWgnW3v1DpZVfxOucbU7ZPsXxrYaUijY4QfddWxzfsx2Z7c6cGX+203xQvbVjcNt8UD2vKq5WcVLysiWv59fLOkbK+c2S3w3ToWi5EJpezR/VKvdOsvAFVCemxtfbmsnm+tmK2K6JotMoAYaFy9WwhjzD5Sp6Oo4zWrfKoaVIMZ+Y2dyp5gPBNPVc8a1YUQGwUsYj4t37cCz4v26tI1rYCzwfc817O3MKYUMzItRWznSvY0taFVVH6K8s1c71wQ947N7eWzxay2RLC3yUTw3V5zTRLOTNb2jpB2MM0v/gitZhaPlsY4GLqOSmmIgiT+wIZzDezVEnkhjNU3+6fAiDZ/W4Pf3CEm34Hb0QZAKC0DLnhXIXavYojG6quamlJc6S0DFUprWtGI207EEia3lBUS59p49Ke90PN28XUKf4Zj+i7I2csvJ2nUSFvrm3kVgTPbcl/nMddJsxl0wcdkqOxNRwLbwu5HUEUxPCf/7I1GHwRdOidAgDV8cnY6n0B6BcarfvSGne+eEiXFG7t+MQ+euiWiDtKQMzz/SXBGgyWAlQQWC+WHr4XPHkfsjkBT+oSOMDjDniil/bal93BgeA5kpf2Jt3IBwfClbD3lkqP4AoHrtEn90v3J/UW0IF1dSAQmV9yPV22ZTi22ExLjiqlZclppnVRNNKi1XIaNtAbKpQOBCTvS6y/rqwvuZIuIDlf8gZCZHyJSfg8jTB51lSF/7i1WyyuFQtCwNEmBDmN/X46coYCwP/tHVxdHRwIe3uGLEBFEURJEiQsxiIUdEUQRSiIAAiGJoiiKohAFHSI/xFF9KsmiEAnP9H3ZQEIoiCTGjSNvWkYgghk8iYAgoqeiqQCEdAKyKuihF7DvwIgiEARRADpv/O8zHot0hdE2e36rJfBrJc1SVB1VFKl9FMkd9iSAAVRUClhVPIu6jVqBUiIHJIuAEFS8YAMA5FG0XDdhiHIBm5BVgRFxM8UGX1C3yF7xAqoqLRsoLdlBX1ARAZkXgwd16ajUoaOawHofXAg7ImA9BYagoImjPYdssHQ74BQ4+Dg6kB4CwHAMsf7w5f2ZnjDD4SyNbxY2iOe8IMDwYsEzRX8SF3t9wXUpytBEIS9A+Ht2/Hw1BFQZyAASDPg72/5Xgkze3V14xeuBNoQGo/AxnMV/I4IhT37wvr2qyI32nmkmoz2FhS6wuJ7dcD7w6tnC+MoLDl8DCypypNYcqXcK64cwVcrNWljZ1Oq7yAsuQY3L4BcvOx1NyrF3uaheVm87HSLO/XOK9N8P3Ci2LBVUQXhOHEewHVvOBE1+t1u317ae9uyur3ToSOIVwfvEmesZlQ5a7Zzy7OtgIMPPlmP/Lu09zZFE3tSSylr0P2cFP68e5I5ExvO2BJTi6mX3X4ztZQqOH1n2LVTi6ntgWMjrmbJPO9NzI7mG+Fxk7Bq6vs0O4ul6aUWUyt4SHFgLw7sxYG9OLAXB/biwF4c2IsDe3FgLw7sxYG9OLAXB/be1cDe1aJn1VE79mVuODwZejZdpM1/dXCFXr8nYzgOC8ZhwTgsGIcF47BgHBaMw4JxWPAjDguGu9z77ZPPiQLackanvbGH0D6Y8OGHj0bfi+Dje8Z//iDlXXno4AFO5ficHhUDGy0Jtpog3ZJEPS0rkpY2mgCkxZZkyHrTajWlVurq08TzZOihHV+LOFnjm+6cBw7V+BqZ7Z9IPYZM5ulBhNHBfZwFTsJ2PwvC2y9fbYebFfh3Aqunwkz/HuilPcWA3sPwxWwObEonZx57ac5zfOYR5Kc9x2fudSk+x+fG5/hc3RvQ8p/l44KoKFPKn0+wtDdp/Nw2kyDKIPJnEASsImSKIBAKoepCVWKP6IIuc4aHioA8ti0oUvdjVx3DWxeuQ/xUI+CfVMNZNNjOoDaAFmH18GV0t21Ikb5XLV9OQuUCfVAElZkYE/3DtouOH7vPRCBozA7BRoOmUSqoxKBidpI3SI31SsXvuPaa5BIJ0mFElaQ9JKVlwOr19cNXrejWGF6GVUjLyXjY+Bdqa9GmVDZPCrErgS5odH6h6CupcyVF4JqXIms/WFIRNJ0SS5lgGpUVIbYhrkzjK1F12m/Eg5D2G4hsRJhCgHKsJFKOnX8mNGw4zppZZJ4COjxaTBSZiQ1Ub/CcORta3rVKAy+4/Kd6jRreM50KhEwaNHgCUbNfxUOm0oWtd9YCKcXIqKre8KCPjJLk+iFk4ocgbVFxM8RI+9qQok1vXyc9TgQCZM1ptLn5RuBJh0Q8ASKzpRXsBYA+xqJteRzi6bSbSKBK51QiDhWN0z2K69ZgXRbuY0KIPyW0PZdZiTTh6iVeJh6cXzG3UK+VTMguCqKBWASxAuZPjiDYTaUIsurTPfhfwJGGqBIoBlQS+UzmUaWzKzNBF8EN64Suj0xGaomJE0+8KFWDX/EUBXo14HhTddfn5v4oM4IxfpclSjBGL0o1kae2KiiqrwY8VEB8WOQpExvRmF9KWVNTZVWOEDSmH1SNzbhOK5QhtwhL3meR6XuFMhBATBBQ9T41jz8r1CfGJpvILOR+JDOoCbrK+Qr9DfGTFjXPmsKN3/cKljzIHISsX0xTsm/kX5cXg6uYoQTq0SW/M9bg+ERxJRcrJz+feYBogus0QTMEQydiTbsrqvwCoahsiZlYBBU9+JO37sqzVmamYgFBAkqI65abDq7m+SFhtCgi9RQJikTNB1dZu+oNkBL6T2YzzVQcVO6B4Q0lYsZ8s0U+E90hsX5IPkEgJIIzNFZAJ1Etwi2JijY/aFL0jwo0qXAmaJIpFVUaeBHgDdTxzdiIogFUCgucHNJVT2mr/lVH8SlRldpqWMB1qmN0T3B8ep/jFVW6GXxS5YeCTzOm5p2HTy7fKF7Qb1JPRJt9vEaDUwkxS1DJgiYLisAMfwkLl+rGtVBhhXxF5TQcBVMEGWsWEu6isTISC1MkGipDjxQudMbFymQDB8c0VKOBq1BE/L4AFSiIiAayAIEkaPINnokKhzohmXkvTmooRNeKVBvQAi69FNfixWqUGq0QRwIDHhDZ50wQBVTIc0wABX2bW7Q1t1qqr9BHiBWcJgqqgRunxo2I5wqJ7T23p0qeXwUKqnhbWki6KwAuetFRfbLu/hbpStI5x4+MX6JOIcWH89zBKh7OAEQ0DU/oZM2zDWgBt2MQ14EJhYdEeo9XCrYcA8ItQHQJBgh9cHHDk2mGigg/ce8ALYqCuJDuRdYp5n+Al4L0Rv+iaaA2GtU1Md0fg+6yFqQ7QSTof2yY+kTw9upoxvQipR1P76NNL7yRzjNi2XuQyVHCViW8KOFVFcuPYbCRsPACkivDdSPxeVGuy0SmGUY0Twr3Jjh/VDwZzHRzn0Rqi5JeA9mHqKeOXjYQgpQNCuMJJhBlihOgl2oFOGoANqYJa1ESfZqHtmkYHmf64QNguVbkETIuIHNtuJhCcVGnKlL0TUAkzaNihodIe4OQquExOaYWpTQarAglQWK/Yf+jopMHj5/RhZqFCjGmmfHsuj0Za1B2QZa+YAiajs1+7BLSRWSfGgqSVQTbkYEkRUS/NMMLdgX8KbKI7UsoCSqgzZLgjQrRfNzxIRINCDBl8BfyR5E40E9cC1BBtqzK5QryME8mvM1bxIbizqKiP8n8GTjEIQLeLzh1Bg1Xh7JRhUiGMW0KiVVCRZwTvqmcwazWiSpZuIvOv6T65E2C+OmTSAbEb8icpWggIxD9kRH3zFNAxwmwiC66oEn4b1zzbW07Cd7ampnVKPMqMLYgghP4m7rdkcYgwuI6YhBR4/TfDzz9lwRSb5L/i5/IE5CATyRWfRVpgYo0L5FYmDOT/+f73d4vCJN/B/blBJNU5tqTc9cM/Q9xD8736Pab7z3WzpvvxZtuPpBNN7NENd5ME6+mH+xq+rSbaUjy8Tz5uCkuBfQ93EdDs6znkGY00JvRhe2e4QVWu6PAah+nwGo3EliFeKBIqA6JlIr/Vqi4KqRxT1wBJ70qNtE0JIyy6yZUABZR/CoVVAmH9LBl94R41d25E1wE59q1c9tFMGKXTsznt+ZzzR01i4DeiqkIMmN/kz8IgV1dHXzLx1g/N5OxdM0RHfuKXcCbZow1z16dg+Sz67/zV67/+Hky+Rm/OSt5/eNE8kXys01rbHec5vLJaX+cfJFIfmvzpNltdfknu4ORMxxzTz5lT9ZWkj+VSCSU6x8/f5b8GrlN87PvJb47T8cS3/n0+g8+ST67/qNEIvHJ9R8mksnEJy8QhcJ+idjuFL6b6fSX3N1Mugyali6nLdhS07LR0NINW5TTim47UqOpK4oo+q04A0LN+6gL89y4Lcx1E3LUhZgztj3hIrfY+oRvzryXzU/x1Znx1Znx1Znx1Znx1Znv8jG88dWZ8Qm78Qm78Qm78Qm78Qm78Qm78Qm78Qm78Qm78Qm78Qm78Qm77/gJu+/DlUjxGbnxGblxus77k64Tn5Ebp/XEaT3vdFpPfEZufHVmfHVmfHVmfHVmfHVmfHVmHNiLA3txYC8O7MWBvTiwFwf24sBeHNiLA3txYC8O7L3Pgb0P/7KiOCwYhwXjsGAcFozDgnFYMA4LxmHB9yAs+J5dXRhfnfmBBR/fM/572Ksz7+v8IXeHfBCRzLVD/q6IJL4yM74yM74yM74yM74yM74yM74yM74yM74yM74y8x258ym+MjO+MjO+MjO+MjO+MjO+MvNDBU3xlZnxlZkPBJ/iKzPjKzPjKzPjKzM9myW+MvNDp3t8ZebHOL3xlZnvwuQoYatSfGUmxb3xlZnxlZnxlZnxlZnxlZnxlZlx2m98ZWZ8ZWZ8ZWa82ead3WwTX5kZb6L5aFfT+MrM+MrM+CrB+MrM+MrMj4HPH/7KzHhyHlsJEZ8owHBAAXSAWJHICnuOUIGbViBRDSMrBGgA5o9UCNyANHkAlVXdGaPVKsR1c0u2uV/cYANbB5popG3QlNOy1bTTuuo00g3L0RtNyXY0oH4QuGGejWscbpiTLgw33OyWWwh1xwYtJ+SW2znucD14gdYCdkfsN9214JvuWvAk1+DO0fO7Xnb7MxGr2Q3vGAaKDZSGPkn9ee6/nYf67Qcm/tevf5x8lnx2H7cKB0kAFLnh6KKVlg3dSctAlNOWbYA0gHJLBDa0xKY6mwTh0/evnyX/b2aUz9MOfzVx+McPch/pPBcsz7mPdB6Gftp9pPPo2Xgf6Ye2j3SuO8TjfaTxPtJ4H2m8jzTeRxrvI433kc6sM95HGu8jjfeRxvtI432k8T7SeB9pvI803kfK9pHilgzg30rqxWck/AdvDFUAjSQreAsJ+UqyRAydhp3ZqmW4OwdklpNN94/iCA8ObLtP4eT2UFEP2TM65eHT7SSV77iz07/3he3hIN2hSh6glUOXAvtKH7Jh8p+Hmu91v408Y7uLxj0Bkse/Ag4fUnaUcCjyxjtnmF645c6ZR90rRPYJqUAwINtNYxjTvGBkj014ur5Kcz9kGdfj0YDb3eHu0blt9r1Mq/c6pniV3ie3ei0FKGsoXFUSbdzdimSEKkS3h7ygcWOBEyre8LbIcMuCS/6ZLwbXh4k3GXH0hyYf15KheJrRh518RJSh1yW6rYqbicl12/fy7ZQIqcIg27gCygTxskR7cCutwleOlApeoeavNaBg+Nruomf4DsylcPiG76p3SOPezBq6D2F4O/mghFQTt8nPYMzBHj/+gRQGU0PkQ7iiC/Tzluou0BSRdYIrotuiuXdkIDRdltBeIagI0qxcQhHymeTSkJ27CknbVSgKQ2MnEkfoR/b80WqwPIb0kkPsbve42eRPm/AANA+iAFe1orOlReeaCdcGIa3dSL48YoqTE/w4+2ANTumQz/59sZNdjNgl61ZEJY1+9wtbUKII2Qw4KXgG9BX2vkK2V0/m06ywDClsfyVjMYWQWfF+12gOKUkjpWidyDNiNcg+4CdIgSr+DkL23Rsyx4tRjOYt1RPWWoAiE1XOu1q79fjYdv41m3/fN4PuekzMNx8iCchcxBACyFwJgHN+oaanEPgrjE8keIATCYKz5D86Ip6Tp5iT8CM8wuQpdA2BoRaEq7cm4W2UoeFiUc7YmHcRnVxB5wXTTwFMb7Vk+tCsb7H0wdbwZfIWaJQJosKxAzu5QHPjkrjLZHmi7TCb6BarEm8T3dJu1G9tN+o+Po1efaSwbs5creZ6Z5Zpzb0LOOtP8TjAlRvfKQ/csSGRhz1wJFdDmF6Spx3ZwHXM4GNvPlHTgC9gyB0QMeW4D7d1EjviGgo/d8M31Gmnbzy2ScUEnuvE7TytPircaZ45l1742R7e1EdOnZeXMKmR78RPvDDyAVxe2SF7W0Iv0tVbx3EDVUX2pS5iGdIVwQCCjk/VkHX0VAF4OBDiH0RB8xZ/IKE30fsG+WKg9UEnoTIR/6DjEqQQxuyaTmYFCLqGKkbMgz/TF1T/CwYOu4sGKqSJs17QUBdQCwB7LTUcKpKp84dUBTQ6WvS6Qj9rOurplI7rCiaCiKtSCZJAoyV0Ew1fVTouT1CFNlEZwxuUOw08LEwXQngdEuWLl+coKqIBykQmNIg7KNHXUa/wBCvQN0T0hiaxN3Aj5CgaSheI5U1V3PlVJ9sMdDnQZmCUqjHlDZykF0o/HaI3ab2kXyrZ8CPjIBttgkyuiPhAhET16dg7r2ODEAuX4Y5lkgsBViC6QaxOJHU6eQlQkUAUlHwU1FUaS8ev6CEioQR5RjZwxbQZMTgcNM/ueFQ8DxqDoAatW8WpoKri/cGyraP3CcUx+Yy78IbB3kacKTOcTDJSGW0AI7vGTYGCBQPic1VF9x1Fw3Nt4MnB6xShLdUQxpwVGBqqQJGmvK8SYVPR+5oWxk5oKJw8QkxT1DUdtwnwoqPr3KRD9LNHGryjzdVW2OoiHCx5L3jzSBlYY+KL18Bgt1TqTJVZe4qnS1QcekV90pjGQUQQqT6miozFzw1AN8cT7zRwSQlJzodBp3ZyXLg3vMxiBUcXCJlpVZ4viHXA5lUnfEqnxRMAbk3QeW3CDRxNGsDtQOZUJgsHJSaQAt0kvaOOaGagGhNL1x20G+0DYUeFbuCU3epIBWQtVDSXCcQJdhaRrGkiWWhkumbpZD33xF5T/FJPYIviGaJBscdr2rSeyXhK3HHSJRuBnUkd8uRiS6ZTYkpM93EBxhIy8yEAKgkc0am+hyQTB/CcSGlN5ML7ohtkeyen1jXJFUIyI1znZIkyoqxTHqYUJKk+IgdI6DjdnuEvKptCj9U4oVC5eSe4UyMrQ+hMzbMmsLoIB8hkBr3W5UDrho+FRG5NkHwThMatU0ooZEF3KYEbI4qHaE9dJ1QhakfEnVR8C7fo4x5OCWpsSjS/EpRvrgTdvkQVi4IEUZpKk7yVGkxwqWdKARzMQdCBBjWxf5t9MWjPKXmoNxsxpuzyNjX83e6Jktc9ikQMTn3KbAw8gmfy5OcMph8xg9KlSyaKQmPNi6FLJ+J2g+oDCgoiSqmc0IOounSZk1Gifxlz+FWD7AqSrLmMzyt7qmcwKTFdZcyqBkOVdLXGdOIQHtApS/EsH1htRA+8+nEQXfsJcqASxOkPnr3xUBXCDKLk9YayJDfJgONBDBY9lvEkmJqk4cX42qBwM/SpSX6NLjJgTnEtZhRZ9/NJoE3Rr11ubN9pDCNR1lBCDImppoeGhZ83WTl4Dfg1C680VCxFzNc+SiqiTxt4fzSPFenYJcaK0GUq3U2+dsfu9hnwdOVpqXmA2z9NYAoLecMzXGgE3e653KxBpg8MmjJtcChL8kNWOqJ5piNyBVE1rnU/XiPrgR+ugelwDfim0S9dHjCf12Sm+p7gMJI1qBP6EBWM1xiJ/uISY/733SUmqgKFOjJIlk+IISX77BhdYSoHipwC9ksvT5T5cCe3ts0JPMlMqoyVsNLjLAM0d3RtIMrdUzOhxgjxdd12tXTxLxSZspKnjVDTfL9IE8BGwsCGrWrULeaZ5CqHeAAhLR2iwtZTXeGMQL4FnB9LgCSxTHkgif0Y1DelU7qFKCLyss8DYXDsSB10bEEiXi6qgInB7klw0NqZy5oLKnfCp6xuGOrcwjgwqmd0RfWmmLCqAsL1/lPKLFP9isLW1qAGgyAUhMx2k9FpNULU7zwUvqGThiEq7O7FviPCraRNDedtGYDJoapTxqBeVNKYQnY4kKxvwPiZ5bMR3ynpjUHHS5I02C8EOpEqSPUyaZPofAhI0jhtDCDaMKsJ23kMDSkq9fXhxBGNbFIg/HqLn5ACBJyqBAZjWdUVcQ248JxESw2GHQjadZ07Ch6f57UUFcpYLG6OxEJkJjo9ZEnG/GCwRY2uvxJpkqFlUoHOu7DZPmjDb/ITjtaJsiXZXkwRu4sJblnxIAzzE2L9RvW65mNLyjtECWqq61vA0SLa2ZthHteOc91wMvYIcTVjzx6CZ3elKVt1iHdC9twbeNnT8LYwwwWpkVEPlbG+K3ASnXLZmwTetqLDlN0jBjS2NdVNcsVjhdxsqQbvHJe5fmPUqZI5BniOERu72o2MiVoYGv2MlwjVXUwxOxH6uDsnNJn9oIhsgASF6sSaNDTqUceTotPeKDiERFshAWnqfRI1Ng0KzeedMnmEZyGlAvOfyDobKQbCzK9DypHAGdIvRnDK6M5bgzpTfGpZ4SJHWHXJRFB0lVEb8M5/TtrQDy5RSVhcYixE1w+N+FzcBZR2XdbpeKlhTtY5RWXbHig2ohSnaxMMkN+zCAgD6LrLAKyDoqsBmJFKREZ6hCmgepGxNjGFKNqfyT4+mlFcB2nDUYarzgCN5jmamRpRSTNsdqf3PBDl1IIBPi+JeRonEdsn5qT3jpN0ZnXyL7mcRKcxONkU+Mez/S7Otur+IvpcdmQPGbW5qc8RD1Flw/CmkQSU8QAh5813I3kTUTVVJWMANMtZJ35kZZJBgMKACXCHpjEwppLdP5CfaM1nH6raPGTTCB6DzH3imukUwmks54FgO03jIlq0N17QxINTOklao8xAncCQB6nQZRMPfMh+1ONDpaJEWZRhQrJ2qypzhHt4lZSjcQ1A0TlZ+jFRsZ1BgLMBWIeIy1TjzCUGUjUXpLK5lIgKpwmg0MVsBqCHOik0sGiQBjDb6LI7BTrxy2i8jcPQF7GgNI0zkxhPAOrYVPBGXMSfBmNwmj3kmUgkx0h3HUAkkku7grussZ4rGu+H430OkIukkWCIF8vU3SCdRjb3U4oBSL3IGtZvxLwl4W3XH6ExdUgpzTnIsaVNkGWYFxmKLg9j0kOqKTRXbRrMS63f/0+q6tGeBitcN41s0EkmxNYYQyqYBrrIZoZWC3n7QWKowRe6IsfXM77SqVVgUBVE5p46eUmFLoMwy0J2OU1lXYbQ86xjDsPoB7EzZFsK6fVcZOWhZr5OVgCNmhVkAcCpM9QK14gGJdpNkdwkCY0GfWcykivyBueG9BiDd+xRx2c0+wDSA525G/3e6fn5lZjN4blk1EWo6jTKyLLVeeWjSe4hBO/svFE1r3lxL43qKon5q7gEAZ1mU7FfiD5RJK8/1HaEkAVLJOqp1FWX7BI3B9R9eGeXikaV8t0wvMZ4ygAuFWXmuKVCqxO/oM+AlxgVVY0FTjQ31QpIXuibsRzmD38IlkAu8kXzxV+wN0+L4kQSAeDQjUc3Ls4TDOkzl5/rGJX1YNwTsMRICo9cxDaZC0niqH7UA7xI+s1r013g6kPMDMbdoDKMdOeojcvOhEIgqQHNnZsN5U4qCaJwkFLk81iwzlY16rTlnKbvKhoQ3cF7uYIkKiz6cq28tAwuA4x6hxUPPRBW00UWaPPH7ejrIvrjZjF7DePAdKBleSIbjjYt+wOT6A3RvxnjXc7Yv/HlnHy2Pt1KghZVeoum6IFZkrgf/Bl3Hr4Hb0VeE4p3CWCWc3Ggcn/7Fh75JpOn2Gkw8zLRe+L68BtGg/wbfsXoI0+DBOmaq2EVStKEI28UZUeUzFPg0bfR45tFn2Tvzd0O/uD2ssk8J2gst49Q2/v7fltTfXfkq+IdzlrgtBkgy5Pq7pGj2/pUfEN4VFmu8mlXuqvxle4PtYF6Ylr8m3fjeXi6TdMSDKzfMsQLCuTlV9HvdDHzlMlW9HiyH3eyb6AR48l5mMlh0+BfxMiObkOaFMnbHZ9Ft1cHDs4i9c91thSp4K6nShkSGxNU6CXr5NL7aBQOpwLiIHVubPJ5+87ffbPtno09D6iSY4KpqQcjjTxFn7kt/bFvlqUd9lt3tJ/RHDWHRafoc9hycMKKU/RZ7BpuuXHHH4TabE9B20gTjJwkJc1VQMf6hWyoRgYgDphK8NbHByB9cAf0Ma1RdsiH69OAzBDl/qan6EOFyQvhQPSYHZcrQRon8UgkUnq6VOX/VgD+SfXKuw9JYhW1dnH6q1dA5goYrAYQfEgL8zUrXhlingcqDO8/5ChBysCwUSi0/tDekoPEvNZhWG/d8cq+GnzD4Z/rEUOY6DAZCN/JYM06V5vOEU33EZZ//qjdjuIQI6JLBkfhMIZ56G7Tmh+02wojjuwxs6uXQiWY3Ew6hcndX73RyRGiJIf1WfeV8XGU6BcWkfXZdWfJQZZzRcYVKHK+XlD23WLQJ2K0Zki7pEh+GhqsQuj7lS9PuxH2YlQTVNhhsEtuz73CMDi6SXHzBqhOjFT1t6hxT9wR6f7+657G9lg0wAnA6zCvEsN5BkSyWWh5X0lGRrKOcAgMSt5pYJMmwE0O/aKHUD72cV/UtPAd9EVtiIiTMCVu7FNPlH2Swyy9Yyyxvx/6pptaM+4fQ+TGgv8XVe9oWMD0iyc87HPALJp8Cz2+2Zlv8Kmmn47lPesx1+sI8gcOr4PTeZqr7+Yv+hVCyNF1EknZwUkimj6X9DyJlRYiP++DmHviyE2IFxKd54wvL/EEc969Zp6IcebJ3TNPMKPdOvOE7LCkCSXYwanRRC+Sv66ILG0Ep7KRFDR/0ombMwZFwd2oR7x0RO95u3uAzpLLcKIYV5JIETljgaZWaVwqSJwHEueBzOkaNKgWV2Rq4VBYcn9ZII9++P3HmwfinwdJ9QCGwbkcXWChuNthWJCfmCecqyte9d7vVY8Qka56quA78O0RMwfdo6CDIbE5Drrnb8OJ45H3Ho/0rajTDreP5+EJgvYRsxN2ivaUC3I9gMOleanRXfRWOZmqA8PNEBXZ+u32LXC1rreiiR5NWMfIBLqv+u/M9Z+/rfHtha098UHd8UHdNwZSHpyJvEt5QrDCrlUg16JNuf88EJz059p4y60+wdbxSeHxSeHxSeFCfFJ4fFJ4fFJ4fFK44D98LT4pPD4pnDr045PCmfzFJ4XHJ4XHJ4XHJ4XHJ4UL8Unh8Unh8Unh8Unh8Unh8UnhQnxSeHxSeHxSeHxSeHxSeHxSeHzib3xSeMxJ7xcnxSeFf2izHZ8UHp8UHp8UHp8UHp8UHp8UHp8UHp8UHp8UHu9cEeKTwp/ipHD/Ts6pSc6R2wQ0ehCdTP93k+WnZTff8xYjur+I7dXmhvSRboiI97/G56B/nPtf43PQ43PQxfgc9Pgc9Hdtd2d8Dvq7MQ/xOejxZMfnoL8LkxOfgx6fg/40xl58DvoUiy4+Bz3aBIvPQY/PQY/PQY/PQY/PQY/PQY/PQY/PQRfjc9Djc9Anpj8+Bz0+B134SM5Bv9cj1DiTVVYjrFAdcpaOZ8XMSDiIj6d9x5N8PpZD2eOUmzjlJk65iY+c/4BSbh72yPkYYMQA47HOv/9AF2f/0fthQwrGNGkdQBAFUYCoHUFEhBEQFLuZUSsK0hPYtHLA5hQFNcriJECDXmZDVxCXMAog2gdShxezxWSdhILxc7R0uElvEl17ZIWtGHTNI4d80ZrYWX1M99BqFRKhoeQXgQAECc+BNm3xEAVjmiJHY59YlKZWaMyzDBmz159JjpvaUTVqqYHEKsfyPjW/82lm6z4yOmcWeJKw4d3SIf0pH8RBiN1BbO/UfedfTjQYltP1OKkl03Wkxj2hZ/PQTCMD7+NTsPk6T0337vN+ysyYcB38JInHbL3mSMlZGB5+vqVoedia4WsQWv/jJ3r7euYOAPqNXV+qs+rmD/CKCHAIw/XyM8uOVE0Nar9hR1u4meOcu4jq0aEGueKIOhL8jm6uWxHgw3ejniSTYwJE93AmTwbeA58xxzpR3OHd2aewUwiYUnGHylUDOQxNEgVpHQabO55zPP6KftFV38E3+TvO6EojknCBEiEK/q76l574Tqunzi2N77R6J+Zh1p1WNzRIuZjix5wkQHUc0y+uMywkTkrtyGlh+3tPRb7VdVx0Iu6ahvvoQPE+L996qHze21yyddMMX182KJf7owC622lattFEcijNZlIjMiXDktHcPL5gAmZYqt38CUp8bp2X6RmVeQeCNdAu+XMMJwc1M8U1kKQZmnhI27pzOu1cbalTaQ7C6jdmEGGudkV/uzeaC4mVjMrKvMX8+hNU3Uxkt5Ip73pZeIoQmQQayIVUQlIgJ+eRryGKttPYVYmeQXmib1OSr8Vp4hbSunqvrYfNckhPYIjgu3SYd17mI0I4zdX7aytiyOHtwiCTB2sLS1gOJaAv4zig9/hccjX4WVHC9TM5bWje1tU5Wjc47ReaiW9E0/+mrUtsaGq4GPqmae7lKYTI0oROYA0Fhxm2IIa0IocNBwqBtTg4O2HcGMJ1fimT9QhUIAq8avXR5Gm1k8J9lico/wDamN9J4Nt/EMW08gQbhO5K0UNKBmoOXXzvsT/TtgvcpEvT1l95Bnk9dRrxrjvMILyBYSTV5hOx0B1F8gRjhyJD/zadSCpNthgl1HIEJ3AN8cI+Xai9zV5Rm8BgUKKDu7Imt0Rwy990/D+JKqdvRlE0TwPc1+6WOad7xurs7syIIqYSTszH56IZyEoM24pkRG8oYQYjX+GcS2E4W05dZWbYnu8CCvVrMG9XmRjsTKRNZ4Qs/ZE73iIYI1zxvr8qy/BauR96ToEBE0gvuGqI4QSP8cCN8UBgJQrdjgxDlIxHcLb6eGzMzQ6/vs8UmeAOY3fPn+uqmmlz+Z/7WokQqEkDJyAIcxluk2Um1yY5QjO7lYTt9vbefUfGHmER+7SNwm2+DAV7c4jtvRlQgY5NNT34Ds+LQv0OgciN7FOqnSKSUXgmbNuxD59PyGO4hBpzaRI6Cmnqpv+pui6oZ0LRBYwEaa6eeULEG0nAB8LAYU6SW0DHSPvC9QaHanU1gougH+BFuKN99JknGCFF0GpSWYW6EWY5cMKHPwmWAmWkMO6VItX4JDYOLymFoVZei7ohidAoQ4SfbSbp5lKP96W3leiOhS1Ms1cBMSjpQfCsTZvHSOs7omTIlEWv0Tf1KJLLXm40LrfknGeiTGrI2WQJaOyAWTf3ujk9ZHabFdZ1YLqD4l3ikwfbaH63UthpHOHUmMR1rrFzC3eoFKZhZlY43c88SZx792ZHOAo8IBqqt29+OstMZTWbGk8bOL5XgCpzxl0k9W4ePgsAvJnQKJzOk3Lx+NE3XmlP0d4Rhiop+cFAGm8FubNWnFcTTpaZsFncbJCQwhPnmUWtsyGCBh5K6G5hu4VaNLMdp+5RRk8Yngtdj+Lw3DvljguAhDg8d6PV/yHCczBComVh0nDzuvrkzop3Z1ELixT4WC4AKeHtGWCGe0SOMABD3SPS3Oa8HGLO+/jBlcQwW8nn8Q5TvLMh+pxrkByyCgetvMcM3oWaMx9t8O5BFZrhcc790DMO3r0LaGG+dYrOwpSzhG9ld9yjlTqv1TlpCNyTaDw49J10ObIDRyV2ZVKong/AwskDXyfXdM9NPXk6LNeudzqse/yqG2/1W0MhJ6eGHfg6eSCrZ/dNnvbKvyhNdH6y/MwDX7lTYz0KKP5RaxMDcf26UphbkrXii5CyELkHupQwxf7o7wZdcKFrEH9OMK/VowCJ7Jd6LTKg77MUwpqYJo/umhLlQgTh3eNlzWMDF27Nvwtm7m0O7jR5zU3fyqFzYjXHPo6HBeShG3yiAMCE29ZHAcaBrv70tL2fn6M+e64eHiR/VPSUOastah8QoCU98PDOy4iXhxYBgSKppHs7pLyuqlPrvL8NbpGOkYml39e90O1j84RCZrFxuDcgcM/ABKAN0nMCXip8lCQqpyi0iSlTCSbG4he9AOOFcI7f+xQZwtPDViI9OB0zRgHCOhO6rgVmJEreQXTnQ/umR+PMW0hxAKir4awyqcGC0v1Rdu+m+sQnvKJ/OBMsFG5DxXom1jOxnvnIuncnPQMjgzJT9EygZilwP4k/lXdOIPp+GWsPq5x590isnGPlHCvn97Z7T66cw+NuT2LbakFejdVarNZitfY+du9Oai3i1zk9eAH3XcADHMBvCn9pYdheg1AN6cOB2oQqiA5V+DIlJnRIQMAl6BcT7krGSaf05EzdVH+Gg9uIoHkoO3n8EJajG8IheohrOuQzeEDO9939KPueTCbVTMYOZH73WYDTmP88PP0jgoBz9XzCcpkzE9U7qmUOayuUtsrEJZ/TVtKw8QZ1TtgWifAXubSoQKBfDjOOggvNFP5nkMb3MGp0AW7kAtNSVKqVET5TEh/918L6rEdKYqj24NmYKgqWdhVVp2uDe9F5NewVED77SnzF6x2ueOWJ7G4T8CaUc4/4eGYq5p+yoIQuRnz2vuRSQOES81yauGqHpXK5/QkG62UvmubL9nc5c/o10fNfJB4QnAhbZrpikf2Gg0sHHt64Bwz6EqVCV3MukugFJcH7/zoHqNxLLnzS5C8W8kEK+vrC03smNkTwO2jciQgVz8mBTF9eA8iHl6npWdMuq0dqVMm/esb68yH0pxY8qEo2wlRH2D7iB9KikQZvVCJiKGiZH03591zclyKdzOAKBeozYecDrSaRGcK3GHjUYYah+l+MwKuheFL02QI+8BZrgwdCU2CiV3DigxIxFokbpjTxlvjoTajcB2lCjtwPYvBJgBryhOeBn+J3JyfTG/h7EeB7ePKG6LfpDpwJqHazJ2GHzPBWySQM4z0ekWeSaIKbPxzcSRSxJ0g2gpx/e/U+516hqTMStVJEbcwPjiJ0Gwg/3XOcqkHHG+1NChWu4BDCNpV4CiS05iinZTTwftRuR3HIzQ+FeJxuhztm77fbU87D5ze28E4GKWIroujpFimQRx3huPM9n3v3qDyZwes6piadbzFwulfg5K3Fip9Lo67/kIQZyj9wHLef00LLB3aSen/zb/HsNHfgQNa9u04ihybPPTTlhkNTwodG7gfi7ke6v+t8bnyzvXcttwp8N8SrmMh3fBh2n7x7iyFBB4bu3n10pwuFFHI1HZEgov2IDpexSlTIFUuKyK4Twpvf6FeVWqfkRj16VZe754nga0OngmVgqXrIK4Bm3xV/0wt/JBh1Xa8y65rexyUrYndynbqEBqAaaACenN7hTt7Hv50TPtUlV3e7mJe7D1LmOUHDl5bf9zXAE62pEn/Dmyre+tpWnbvXT2VXralktdEnLsBTNf4KSB3w1w6qYnzh4INc/KgHLxyM6f6EFz2GX8EtQV4e0TJz6xvKp062oseT/biTfQMNGE/OA2lAGLZIkVuOH+fu+6e5PF4RHuIu0/fF+PFAHwaAdzZ9KOg0NIIfRQpeGWwUCe6WOZQuurCU4EpqM2sYlRo8zDR0XJvOsLpM41kfi/3zFLSNNGcUX2xiegEdy7ZGyCLhv6lNcrs7b5Es3mHln9You3SecUWoh4VcOMwulnZ1Cb3ENg40xIGGONAQBxriQMM7HGiY7Yp/9CiD54r3buwnLkNSMAC/NQ4+qn6gSxZBPyJBi5NnOzN8bBhhuEcmVhNZQikUwr3EyFr2XGQeRFFFunQS1yJ1EZLV3/OpQdYVDKCorYYBPrEQOFguCZLsAksJ405Jpk5IgjZc9EKvpFcYHGS+UgUyLy/7XaMuYOIFVgApAij+VdguQQVQhYXYUSYLPZ5hfnqp5eD+MUSu7/h/bJHIFGEwfeIJC/scMEEm38JGwU2mm/bmCaabCyS9Rz3mw1/h5PfzMOltNA9z9d38Rb8CYCgVI1SFdUmTkWGhGQhKT5GWJzEYeHl5F8XYEzeO4DfB8cp7juOVGMeHP49x/IeD45V3Bce7PQyibQapPUDvJuDKE09coOxH8MGjYw1hNoLXg5WHFJb97UqcHlD9hUM3w0ucPaCGdzgcr4v+vmnBDOY4h+bdcyMbFAqQfatkd9fdM2geO0PiA/Ih++kqqR7ANDj2cIElmxsvWYJwtQeJYlQUo6IYFb1PqEiZyuHciuj7/I4vrmFB6Ohnkx+CkWLO7hOlm6+0svj4Ky1JY6Qpd9Sgp0NQI5daHCSfstQCkvfKtuAwY1zWyZvsuA4vMVCiy7OssEWVdlAh3YI0/Y/AP0ZRWq1CI2+SIApQgGg4aJZl8lGTBPQDomvEjOiQC+95oTuRvi8LQBAFmdSgaexN6hdizg3XN6V5/imBvCpK6DVf6oJL13leZr32Jaeoc70MZr2sSTh3RRBVAeD/FMkdtiRAQRRULqVD9iVekDREgPDA08w4EPB0kQ6rhqB4DKBBNh76HRCC4CfyhOCCA2HvZhUdHFwJb49P+u2TZkMovnq9Xdp4vZIVjq3B3u6gaY2dV4Nx96Q/Wtp7+/P9bu8XhMm/wRtRBhDqjg1aztWB0Or2xs5wCVXxuttcgroMmpYupy3YUtOy0dDSDVuU04puO1KjqSuKKB4IfevYWWL9OBk4Qws1u0T70HeE8cXAWfI6eIp/WNp7+92RMxbeztOIkDfXNnIrgqiqhi4aEGreR13QZAPowDLSLa0lpuVmU05bektNa6rUkBuNFnAAECRDVhRZg2nbsGFalhpS2mrarbTabEADSkqzAWUhYw26maHTHjqjUfeknxk7o7FtjRzh7Zevtnfw7EUWQUT7/tIB/te0bWcwTuf69kmz228v7bUvu4MDYfmkP3b64/SG02+PO0t7oiIr0Hu8g+i0Zw0Gva6NaZg5HJ30D4TdkTNMm22nP17aK5ykO+PxIG33uk5/nBE/Fw8OhLcp2xqMT4dOM7VE6KLpECymrMHgdbeZWkq9dAa9k4v0jjMap83BILWYOh12U0upsMGkFlOohddD56vU0tvUsTPunKA6EAVSi6nB8GR88vrYOjwZppZE93u3T7+fDnvRFZ8Oe68H1tA6HqGqv59aSqWuFlMdx2o6Q/QkQLfU0l4KUS51sJjy0w79ohiQ/wFRDz0O0g+V8SiISkzSMHVwtZhqnDQvUkupt/upbnM/tbSfajlNvaUaehpYQE/LRktJ67LWTOtWyxGhoTZ0ydhPLe5TOuN3ApTGPw9P++xnSTNaQLfEtNKyxbRsi1rasiU7bdgNoykbQGnZDnnHGQ32U0tv91OjsTU+Hb22T5rOfmoJArC4TylGfufHv59a2tufoMBfEuyONRw54y9Ox620vp86WNxPla3hBSn+athtd/v7iAb7mAi4p2/39zEh9tG3/f2UrKmq1Wo6aSjZWlp2oJM2jEYjDeWmDmQdQF3RULmr/f0+HgHt97EzGlltB9eJn3MMtJ9aAt4TxELoCepGeziwX1Ma0PcQC71GkvZ6YI07+HkGzesoM+yOu0eHVrefWXFGR+OTQaZ9kh4MLXvctZ3M6GiQPj8ZHo0Glu1kjsj80KkP/YYaGuEmj0/so0dpLYNaIm2OyTTuYyHcT11hASHyOBogGeH4gbADJz+zZCHACUg0EB+gooQLAoIwsEaj/dRSy+qNnKv9fmoxMKtIgAMqAQRUArhaZLP5FSnuzi331dUyqcVU0xmMUkt7b1NoYUktpejSklrEtEktpdylJLWI1JOFRp7v9puv+mzJSy2l9g5SiymynqE66Io2j0gLdre51HRa1mlv/No+OR5Y/QtU2UR33LUutcTa/3zFwRMT0terxVTTQp3dS2UWNjLt0mbWLHV269UiKMH8Zb20mmm3zWyunVve3i1lV0wzmwXFi3olD+qVUjaLvovl83rB+76cK3bs1S3RPi4fmaWSaZaKK+67u/lzO9fLmaVz9Ly8e3SEny8fNS/sQrFYr26dNCBrpwOaq9ntejWXzcions5ac3XrfPe4fGmbq5lDXAa/h8vgenLse/GctLGVq1ezl2ZrYds0c6ulypvRNiwr9vlqpoffz5/WYOfM7m9mMwpqo/yqAXt43F3cX/GsBsfo/RPTzOXKq73zeim3aZqmaZ0trJjnuZB+2tnskdhrFjpndROVzb3cXV0/axaMYq0yOLPbuRz/zKoo7NlKuby+SfrdK+8evSnVquudRnUzm5Frplmqr9Ur+aN6dS2bkU/Q2JYbcEvB5U2zk5F3c2Ypt9Wo5M8rUhHYx73TuiheNlfXB41jm9Zxjuhk5jML61kzl80edXq1ylbPbq9mum0zu2LicZsrXy6smu3cckZum7j+wjDTPce8MTkH7dzLXWmr01wtX5agcVQv4bEUtgvlTr1QvjBbCy8R7UrHxpGDaZcrsvI7lfKlDfN9QtN56WSaa2cLW2Y7l82J42ajYhzVK28uN462enahfFovlE9r0lE2o6yZZmvhlWmaCxkZrJil3MutQvm8XlGO6hXl0CmtZg7bZjZr5nI7x/kx7QM3x7ncTqUMaqXVTAeVy211moVcNqOgHpjVjKwvm6XcekUUG9VqedDol2SztVBCfTZN8yijbKL52AnMR6NapZ8pDzKar7UW+nhMvXHzZX+9V5fWe7ZUHDSgfLpTMQ6t89XMV6aZzSg101zZyfSQrJ4tVFA/zVKzUq+uX1oV45Ty/ataRezRzxtWRTmin3fsQvnQbC3U0CAyymGmh+fVKDZgcVgVi+f1SnGnBju9RgWNFc3/SXY5h/g5f1SrbnXM1kIBydIOXP+qXikCJEt908ya4nrPLq1m+m36+Xw1M/DL0BqiTalavKxX1wHqKypz0g7RKfktxS7sEpl2ZTwvIr1kthaOTTO3tiWtn9dQO5KJedpcPswcn69lza1eo7o9uKhXmhf1ahHTZOMI96HF+my2FmzTXM0ct01z9Wyhbp7nljMKkqk1X9tszpfbJpaBPtaPTSYDb8zWgoNoYZbqPt213MteNKSts51K/quGtEb0ovusd8qemWJ5e4foiHUk+7uF/EWtIl5SGvMy1PXLkGlunC10kAyvVsSOnR9TOW9O8M6utHVRqq6zOjbN1kIb86+ir5iljcwJ6kcply8f50fNym4Wy7yZ/SqjbiKZWdte3QJ2ntA5oyL9Vssu94qgVt0SbVA8qxd2yZxxugTPaW79rL5K9PtKmZUXUb86dbh7EzqZ5rKWGWDavyF8yun9jFoj88a159e/pplp71oZeS27Xqj36iud4+Lhkbyxk+1srrTHxZXecXEbyMWV5tHGTqdTP959s3l4BGuH7ctXpVX9zbm2sd0O/pv7sl4oH9eq5VEzbxw2oHheqyiKWTI26tXsqCEdjcuF8mVzWczaq2Y2v2107MLRmX1c7ttId8LeWaNrXDYL+YumuZY1QTNfNnPLaByZdi6/AfPn1rbh52EJ0XAdfAnz5/aKGNbOcbNggFrl3NhcrgN3DS9nO81C29gQy0juLjek9UGz0Btax/lBo2vk6tXisFkwzjdg82yjmr2oVYrAqhR7G1JxaC+LUkNaH9pStlODu2cWLJ83CoayUSmOrEr5tLlsDFk/avDNoF5RwAYc9+zCmzNnW8R9sC/qYzRnu4U8sFbAWbla7Nn9zTP7uAesyvirWqV3ugG2ejYcg4ZkntWhPrZX1zs1aWuA2rTh+Hyj2jyzj8eXdiF/WN+e2uZho9DrNfolr6/VrZ4tbV1uQKqHSrvZl21zpVbNnq8A9z2MeTYQPjE7Xn8LuSfv78oq/r5SqxZ7uE/50ZP1KVvdOmsW8iNzx8yabSNbg8WevVoab1WUwwbcwjgjW2iqVtV8ifvYFbN1WD5tmrntLaiPLaRLlr36N7flN6aZy2bahZJZWtssQeO0WUB8Je461WzP3DI69mp2ZFWKnWYBy8xXNjROX11kD61C/sKGZfBltQzqXSBn8/WO3T/KZo+MC6vSHDTauVPnYn1QX15T147rh7WdXq92mT/a2Cn2ioeb4+JKsVdfBvLmTk7Z2Ml36sflbu3SlGuHtYvNi3VjuW0i/bfaqBindWgc1dq59Z0jo7Ur5jerYGvZLNWK5WoWrYm9HSlL1rOLXsO5fHNqVc4X1lai/s3Kmzul880VU6ztmPJmIW9US/Vjq/IG1KtrY4wXRGNQXxkc12BOqVc239SXwWV9p3a5sVO6rFdK41cruTevtsGbWqXeqx1vnr8qrMHNw2IzW1A6jcou1+femV0oX9SqW2gtWHf7C5VedhWvc74xZfsUy7cWVirS6AjRd211fMN+bLY3d2rw1U77TfHShsVt803xsKa8WslJxcuauJZfL+8cKes7R3Y7TIeu5UJkcjl7VK/UO83KG1CVkB5ba28um+drK2a7IopGqwwQFipXzxbyCJOv5Ok4ymjdKo+aJsVwZm5zp5IHCN/Uc8WzZkUBxEYRi4h/68e94POyvYpkbSvwfMA97+XMLYwJxYxcWzHbuYItbV1YFaW/slwz1ws35L1zc2v5bCGbLSH8XTIxXJfXTLOUM7OlrROEPUzziy9Si6nls4UBLqaek2IqgjC5L5DBfDNL1eebRYbq2/1TACS73+3hD45w0+/YiwuA0jLkhnMVavcqjmyouqqlJc2R0jJUpbSuGY207UAgaXpDUS19po3renTDB0j8unhExLM7T6N+z66mQ8B/nMddJsxl0wcdkqOxNRwLbwu5cK8u/vkvW4PBF0GH3ikAUB2fjK3eF4B+cUbjZWvkfGmNO188pEsKt3Z8Yh89dEvEHUU92oI1GCwFqCCwXiw9fC948j5kcwKe1CUw1YM/0xV/JezNGZO5L6m3gA6sydhNy7YMxxabaclRpbQsOc20LopGWrRaTsMGekOF0p1jN/M0wuRZUxX+49ZusbhWLAgBR5sQ5DT2++nIGdI42N7B1dXBgbC3xwKs0h0DrNLHGWCVbhRgfYq8ez4oCn1BUSkQFJW8oOiB8BYCgGVuemQt4A0/EMrW8GJpj3jCDw4ELxI0V/AjdbXfF1CfrgRBEPYOhLdvx8NTR0CdgQAgzYC/v+V7Jczs1dWNX7gSaENoPAIbz1XwOyIU9uwL69uvitxo55FqMtpbUOgKi+/VAe8Pr54tjKOw5PAxsKQqT2LJlXKvuHIEX63UpI2dTam+g7DkGty8AHLxstfdqBR7m4fmZfGy0y3u1DuvTPP9wIliw1ZFFYTjxHkA173hRNTod7t9e2nvbcvq9k6HjiBeHbxLnLGaUeWs2c4tz7YCDhYDEcrU0kNGDBGjsOjkw7ZEYBhtjwTmys5wRKbaGnQ/J4U/755kzsSGM7bE1GLqZbffTC2lCk7fGXbt1GJqe+DYiKs3nbFFJvc9idm9ahw69piMm4RVU98/Pmk6vdHnOxSZphZTK3hIcWAvDuzFgb04sBcH9uLAXhzYiwN7cWAvDuzFgb04sBcH9t7VwN7VomfVUTv2ZW44PBl6Nl2kzX91cIVevydjOA4LxmHBOCwYhwXjsGAcFozDgnFY8CMOC4a73Pvtk8+JAtpyRqe9sYfQPpjw4YePRt+L4ON7xn/+IOVdeejAJRtCMamr+ZHL1E3mQNQ1R3TskE3mjZYEW02QbkminpYVSUsbTQDSYksyZL1ptZpS6+6bzOdoJMLY4D7OAiVhu56FGXvHb7NvXDHuZ9c43hs+j52UmrqXnOxvTi3NtbsZlX+Cnaw3XY/uuNWVbW79wFMCAprivgAW3nfMth1/6oKnKEXkzyNY2ps0em6bQRCldvyZAwHdg0wQBD4hVF2ISuwQPXiPg/9KINGPWXUMa12Yjg8bETQC+kk1nCWD7QuK/bUIa4cvo7ttsxty+HvlvHL4yONAH3yXTwR+wzaLjh+7z0RArraRyVk9BraJ6AnG5BgU1qY7SA36Dkdx7TTJJRKkw4gqSXtID+MBrF5fP3zVim6N4WVYhbSc7N24RG0s2pTK5okeWgS8G72g6CupcyXp5UKMGuycZ19JfNsIIZYywTQqK6IFr6KiJVSd9jtwSjUdEaYQoBwriZRj558JDRuMs2YWmaWADk90r2aipjVQvcFzZmxoedcaDbzg8p/qNWp4z9itW7J7IqJHIGruq3jIVLrYtSq4BVKKkVFVveFBHxklyfU/yMT/oAUOq4qyqw0p2uT2ddLjRCBA1pxGm5tvBJ50SMQDIDIbWsHWP/QxFm3L4xBPp91EAlU6p5J7HZerexTXncG6LNzHhBA/Smh7LrMSaTI0716uR+JXzC3UWyUTsouCaLBzvIHhJwg9L11WfbqHnUHvkoaoEigGVBL5TOZRZaeUMUEXwQ3rhK5vTEZqiTtglFOR4aoGv+IpCvRqwOGm6q6vzf1RZgRj/C5LlGCMXpRqIk9tFZ/dxdWAhwqI74o8ZWIjGvNLKWtqqqzKEYLG9IOqsRnXaYUynP9yVzWo6n1qHn9WqC/MO5KOO6BOAe4MaoKucj5Cf0P8pEXNs6Zw4/e9giUPusf60aaZpmTfyL8uLwZXMXJcLFePLvmdsAbHJ4oruVg5+fnMA0QTXKfhg2l1Ita0u/QWQVazypaYiUVQ0YM/eeuuPGtlZioWECQQvARy8pRGVvP8kDBaFEVxCigSNR9cZe2qN0BK6D+ZzTRTcVC5B4Y3lIgZ880W+Ux0h8T6IfkEgZAIztBYAZ1EtQi3JCra/KBJ0T8q0KTCmaBJplRUacBFgDdQxzdjI927EQULnBzSVU9pq/5VR/EpUZUd6ogEXFe9W020CXDu4xVVuhl8UuWHgk8zpuadh08u3yhesG9ST0SbfbxGg1MJMUtQyYImC4rADH8JC5f6JNfUo5FBQUQ0kAUIJEGTb/BMVG59jyVZv293k6UoQPG+77uHWMG5l+uL1LgR8VwhsY3v149vl579UpDe8f3679qV6yJOBMCGqU8Eb6+OZkwvUtrx9D7a9N7sRn0jlr0HmRwlbFXCixJeVZVbXqGPUX/gAn2WwzTr9nzsQLnr5fmAGqYY/cgUJ8CbXfgoCtIT3PcoB+5jxEg1/DZGEQ323bxYEbjG85TbiZBZOuUGIWwgvRe3XuDbaDzQT1wLd7zz4inmz8AhDv8FU1Nn0Jjneilj9u1SVMQ54ZvKGWrU1VIs3EXnX1J98sbfV/rYkuFeTeNaiga9AQk9keYqoOPEV41cuyXhv8nFXLe07SR4a2tmVqPMq8DYIvSSHf/9phHXrcRpvx9q2i9/2cp8eb/v3GUr3n6cYJLKXHtx7poH9yHuvfke3XbzvcfacfO9eLPNB7LZZpaoxpto4tX0g11Nn3YTDUk+nicfN8WlgL6H+2dolvUc0owGejO6sF0zvMDGtw0+xm2DxANFQnXkDlNyEysRV3qfpSeugJNeld4CbeiuawrfWCi7N0QTQcX3gxvYsntCvOru2AkugnPt1rntIhixOyfm81vzueaOmkVAb8VUBJmxv8kfhMBiJfTRXHl6O7a5X9xgA1sHmmikbdCU07LVtNO66jTSDcvRG03JdjSgfhC4YZ6NaxxumJMuMW54OpEl6TyyzqhLv+MEKirEiuzlASEkgAWW4niDlkayrLroQSSaANBb2xWJGgRP6uiygdLQJ4HDPNf1xsDhnWH0hwcO3/Ix1s/NYCxRcWyroRhXB8ln7b9y/cfPk8nP+H3ZyesfJ5Ivkp9tWmO74zSXT0774+SLRPJbmyfNbqvLP9kdjJzhmHvyKXuytpL8qUQi8fXrHyefJZ8lvvPp9R98knx2/UeJROKT6z9MJJOJT16g3if+/wAAAP//ftoeihgIAwA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-8 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-9 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-10 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-11 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-12 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-13 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-14 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-15 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-16 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-17 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-18 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-19 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-20 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-21 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-22 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-23 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-24 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-25 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-26 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-27 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-28 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-29 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-30 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-31 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-32 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-33 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-34 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-35 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-36 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-37 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App cid:default_company] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.TestCase' - data: H4sIAAAAAAAA/+y925PsyLof1DUz55x9Nts+2Ca4PEDYjQmDZ+a0pGr1rBoCIkpVSpXULdVSSpkp5Z4dE7rUKpWUUml1qbuqdGIHEbxg4GCMuYO5GQMGjDHGNmDAGF544RX+Cf4FHE1kSlVdvabXmjX7cvbsiPWwVpekVCq/L79rpvT9Hv7vh3/h48HgB/5i00yizWLw8GfOBn9k8JE5HfzobPBbk9tF1CzSwSdng99CdXr4/YNJVDd3t93Bx5Ou8W+M67r79TGCprh91jQ1XLwePPxLZ4MfdAebevDwb50Nfsu4rRNx6d85G/ygO+CX/r2zwSfTRb0ZPPzHZ4PfGjN2vdhvBg9/kR9USba+7Q5+w1mv+GD/7NngN+x1UmwGD//H2eATf18vBj86Ozv75x7+xY8HT5//24PftBdNtk75yH748nbdrO0oX99yEvrDVdUdfozgDW/12wjevIxuo3IzePj9s8FvzhZRurgdPPy5s8En2jrd8za/qa2q6Fb8/ASsb8vBw79xdnb2Jx7+5U8Ggz9SRvWPN83tqlr+pPsj+vkRH+I/9PCvfjJ40uWPODlnP3r4Vz4afMQJ+9HZ2R9/+Nc/Ggz+yI9/Uq7TBdv8Ln/ANGoi/pDBw58/O1Mf/jU+e4/n//zZ4OPBx9eLbmw4YneLTceml1GTiZ9nZ3cP/ya/6+mEDH7oNVFzt5ms0wVnwrPU/qGujb3YbKLl4ts5+cids7N/6uHf5nNyOvEfnfDxODlnZ3/q4d/l43siFSdNP9Zvb0W784f/6KPB4I8d2TNd1IsqXVTJXojPw184O/tnH/79jweDH55e+Qtng08GnzhRKcZ/kJnBJ/aCM/D3uQAKVv6HZ3yW/oOPBoPf/vFPfvyTu1XVvOBnBz88O/uTD//JJ4PBHzuZ3x8fZ/gvHqbyTzz87x8NBn/0xz/507eL5e1is1mtq9/l0iqE9eEvnZ1dPvynHw8+evhLfES/hRe3vIUYy3F016tKCOwnXr1IBg//+dnZ2cPffPjPPh4Mfof39DU/7SXZooz4xcEfGvyAk5FGPSm/NY/zRdJsBg//1dngY8H2vyJ+bAYPf+tRd/7s2eCH481mcdus1tVm8PDXnqr+kUe/4UcxWwwe/sezwcdm1Qhd4ZPBO/j7+om9W2yawcPfeaLVf/fs7OyffPgvPxoM/pFvcuPrboxiiA9/+ezsH3v4LzhT/rKY8+PsiDn5ISf/9x/+6ye6/VfOBj/8xen2XzuR9h/wH/2Dn1H0v3F2dva7D//tJ4PBP3oiCKfkec3t+Lbr9EeDh7/K5em/4bT91bPBYPAbQjs7jfwnHv77jwaDf/Apcx61+m+cDR7++tnZpw//Hb/7r7+Pjj/88w9/86mS/62zwQ/equRvJfvn0fg/9fA/fDw4FZqPBp9M1mwzePhfzgafwPW2H+s//vA/fzQY/ANPqfdes8maiaYPf/vs7Orhf+K0/+3nlfe3X94ukpVQn0/OBr/hJRHj9HGj878+MTp/5x1G5397anT+7vNG5+/9aPX/PvyZwZ+8GkmXV6PL6HP1Mn31+WU8TD6PJWnxuSKpL+QXL16N0lejwf/3f/7h/+f/evL/76SLV9Eda75O1mUdVfvB71wvarbef8498Ofjuh78wxdRvbp45MRFs9g0CffNg09ezj1/8NHgo3c1Gvzps8EnvzNOkkXdfK5XyTrlZumTZbuq//BkXTWLqvn8ZlEtm2zwm5dDSVbVHx1OC3b+/VFds1UScVtwkW/W1Q/RZnH7+Xi5qJrBHzXWn2dNU3+esNWiai7k35UHf+83/9z1750nfUhw/qV8dTV6IY+U4fCz86iuv16l51+ev0Hl+Wfnd7er8y/P36QjXVTctZ9/ds4f8/Xt4vX5l793Xop5Ov/ynDPg/LPzmsvc1yWXwfMv5eMxF0JxfHfL3tn33S37uhbaz3v/0+dfnp//9LPzTCgDP/MG986//PE559/5Tz47f8pCfkVVr04vcCby02+ykbd55CRv8U1env/kp5+dx+t0f/7l+e99db5Kvzr/8qvz6DIdprGafP7F5Rfp55fDRP08ejVKPr9UoyR9pSaXrxT1q/PPvuq5Le55g9/i8u1ddbjcHS829VfnX/7eV+cboeRfJ+t08dX5l4okffZVz43u+iltX51/+eOvvkHdP/3Hkyy63Syaf+auefX5i6/Of/LZV+c4ut13zee3q+Wq+orT95UgUIzi9776ShD5FT/66qvzSBqmV1yJvriKFp9fDuPF5y8WSvL5i8vhZZwMlVdS/IK3++lXX1WCgn7cZWedHik7kY+vzr+UHs9wCeFn+DCWt3Xydc+D/j6uRV9zNfq6jppMnL/gc7a5uF01qyKPVtXFdLEpmnV9sVx/Xt9GSbNKFhebov58u74tNnWULC6Kjvf9tD57xB+0EY8suQv8g3jaBX9S98ymm8avhI59df5TIfydum1qLv8n8tCJw4lu8Enl0ttN6anEnn/2xoR0554oq/SGsko//ewwEa+75sdpOTk86v/5Z+fpot6cf/nj3zuvopI/oVxXy3Uan38myDr/8tyZf+25N19PtfPPuOGI+KDBqkrn1WJeiwjn/MvzH//k/LPzVyvWcKLOuf/+epV++T6a9seTVfrlG1acd/aN4azrxa1QkPMvD8//3elC8PSZsf70s3MetnHOXnx6c7F0bW3sZogGjuQqoKXu7GK5HGv6Up94yNWm47GmSc6eEiBR4moaP5bxlhqPxxPdyZIZlJMSF2PXHY9dZ3q8F4FtojN97G75eYyKQpyfFOk+MRyHBnAdK4fnZFI60zwa6NrFJe8nM9MZ3KISt8l4dpGLNuI+0Ub0ox+OnW33DKjTQGvHrz71xmN95pLdxlOwmmxnF0zcD+5CJbtPKlu7UPkz8DxWmKB7JcYr34dKw+9fj8e6jmdsS13dHo/H4+j+0+l4qz8zzkTTCpmlRnZPx7ytfo1m1n1qjJyQ1PfJUtdPz0VEPZybYmzZ3bgZRsXODQMriwNbu7gMx2OXmpSAggamdnG55rRNYgWqov14nF1cIn3s6jAmYEuGjpSU7I7KcpvOrDouk76PLefTGFx8amljXdOKjIUEsmQ5u1gtx9p0LOgeT19+Ohsv9cnF5XIs+jduL1ZbIRvfnIOlfo2GMEtnuHWVUUFdQYvhGTijBt6PX316zXnnlqNiIXinO4f2PsFtooCq4+n78mk8Nu8/heOlrulyk8ZkVFCya28KyBID31ED34XDQrtQzfH41afz8Xj86cWlNB27+jU08JYStaBEzRfu7CJfjjVtrOt+CZp+DCdzrOs+wVLozi4y3k6HWWro2oXKRzAOLi5fTMaubhFZjoMA13HlXo5fferyMY/H4+JCtfl8+G/MRxwE/e9eBg88N199WgmaWJNeVxajQ4slQ6eOlcs7n4zyaDu7eD0eaxdqOB5P/QvGdfX+U8LHOXZTQgOrjcjorpf7eUhk1v++iYha9L/9xMD5+NWnISfiQs0vmJjXkRMrzm0gO1tKHD9UMhYTTiuf/7U20bk8gyIMYDZ+9anBdclXrNeUOBLXpWo81sayxRJ3dlEt+9/b2UX9VIdMzhs3cFoaWBIfK2+zXj5jUwBUEwN1On3UcSBzuzR+9Wk5HusmHFrbkD9nOBYyPZ7kF+XW1MaQxYFX7ylJ9zRwBE9uCjGGV4cxj199mozHs4tyOR7P7j+l460+uVC5TplPnn2Y88lyLHSgEvYxPejAbvzq0wXnxdilT2zXhGn7eAjvfQJex0Ozs4vHc+zucG4sY8/vbITFdR8ZYB8Sue15fKpDq6c6NB7f3H+acR2eETlLQNPrefoN2UFDuHcD69CHPX716VLIr/piOnZvLtZ8HK4OcAk2KUGa0Pmx9vriyuY6Y3ozKCWg4/PFFbdvoTZhjhQGUE4k554aqJuzE1si5lS37umss+9TfGgv83FlVEHfhU/j8eSLi1rwftfJ6Yndv7gKu3k7ed5T+zseX7ggqi8+nYw9mDmG21LDlMO9NHSmaXHju23YoiYkoRruJckhIKdGKIctLO0caRd2Mpdvw2/8nSqQ0RLI8Qy+CpVRkxjgbuHqLz0Fb2NjpN5gyJKh27iBth3D5X0YaPXN8Mnc3KcGblPDyRIFTcYudH3ZQZyW8VIPbxSwjbzRUzke8j5hHgYOG7u6di3sV40TBe9vEKgoUaUxtGbxXl5zGb0hziYi+C6dvNjd5PpLlzg5DTTpBuG7UBkVEVGrsQurRcm208K5jyvI4sptfG5Hh3A9dpHk5Mmls9xNY0WVeP83uNMP3QDbxNjVoQKELt8odRsrl9rFbTxZ7K08DDQpDSxGJ+aV7YfK3F/u5r65d/bbVRho20BhhZmvV8/xy1xtV2lg1fz62/ngrm4mlqAz4Dz1zKvF3mp6PVzNV5bgJ+8r6XzIq7iTs9U81zdm1clZoMh1XI72Zr7e3UwsOSm3q/nKfPt8TcyNWeF9DEbb3j+v5tVmdb0yr8yVNeJj6v20OP8cz828js0yvYqC8SrwtitXGd2lBp8n2aZErVJjuZqzzcrxi73JpI15MjfCP3nmFdlbWTLTNhFxstRg9/Fq9DpRRneiPcMtDczGJSm/R/QFlRdNxHV5Iuexwfj5e9u73JlM5mNe8ViC83shb1cRgYmZ14mZ49Ip0aVDaHlDnJXTuo1jOMzZy5ldhsMbore0DGV7isswR5KDt6sb8Di/wcS8CibWDQ20TTwsGiz4J2vJTEvM1S4xK0uO2aimYLuas+0qVGhht0VLp2YT5vqeTiTJUUB5Q8ytXZoN9XXZaXE+n46VuQFZMDE3wcTicrHlz+JjT/rYIlC4bcKJma/39nTM2/XzYnHavggm1hsyzdvWcTB5nq/zvZZHBtgnCpZeBliiK+kymFgppxeXYL/AnIYmMYvRPiJpHbPtKggk/lzB254XXwRgl5glK8TfvE4CsF05ht3OiS3Zpd7YeTG095JEDX13Q/SdrYSNk49luwzb+dTcUQNm4t5KTgJD7fnY21d51HAdCUnK+uf114+ynkXlaM+v2ZMn54UOiPMzMeYqqbRc6NVQ62SBdXMrdACMhA0KhlqWGll3fTUSdijZj/ZRAOtIqbOIXN5DA7fREN4nk1EV7+VtUoI8NVhOvVEbDcdNqoz20dDZhsRhN0rDEmN3v/AeZTQ62IejLRvdHuRJjGXmdDSWnY9PDCBFvTzdyFwPrPZmaNWpwW6jEtTxaqTTwLlNjdH2RknvbwJtHxJHivjzh85tMpGH8dC6TYZaFironc8PlV0t5Odx3BKPUZL9qOF+KpF7nnGdxd2YhA6C7eqV19mKo/0ajoW9eCq/aDXPza092a6iPhbgsvtd7MFzctvZCJolVSFsgz+0aqqwu+dsQWKAltMxL2kWzxz2Cu/uhE09jvPo07nd5DZ5m5QjKZZHjYjjV1zWTm2w8Ourea7xZz3Kmcftp7kxS+HbXyU8x5g8PRcTLEXGSPgNPgZq4G2yN6/IcLOKeQzP+yjl+7hM76khxiItAo3x9n4xeoVkYAcSnPB7eV9h5zMMHh/7isr8odbFpXvzymRNKp5Rsk0q+L5eiVheHtV0upZpTtl8iku6kvMwT6QbH+bUT5rQt0phHxVaOv5YpqUpO1O0DBVWzMtnYgYs8XHe8Xi9e8bojiqjIhR0j7Y0sPr5NK/MgtZxCV/GJbqDBs5jBTLhK3sZMAv1ZSA70Acj3e18kYjZhb9Zvbj1J6MKIXniYrDGuA79XIN2Qa8IA+aNklYusgCV8BTJGLoF1FxkTWxdVQlLDRvUAULWxEVg4uaApHI9g7kWYRlM3AJobuEAv8xyD5i7UJFJJAGIENAQUvXT/jCiw1DCG4gATCVxnWDS3PbXp5EC1VBK5z6rQ1SOVjYDE6jz/s1tNNUKT7d8wjLgrl5Ion+SWVTPvFTGDa7q3EXL+6jo2tMZy6Gkdu37/iHp+kdyHfpVqqEg1VwMPIjr0K1qja4a30UAeAAEi5nj2yyUw2Fq3ii7nh9UJr61TkvnzkfmvYMBv5/4irmPZ3WE+PMRf76F7YBSu4JXLglvYwloEGHiGbshYQD4vA0CWbpqdDdIwdvpcyZuudnFBpxFMxq5CDtifDI2vYoWsGVzgtNtWjoVRFhzEb7BKLtOSzibIzXDLVZCJQUQ8edDgovacTEYugjAGFAcDTNIcHYdGVYo6AGM0xN5uA5g2UREZ5ObFt7z9qhwVjYz5f5+zSXLewdg4GIAUGkFsEoDW7rchoq8SfF6Zwd14en1NizlnNNDOD1B2s0nCu+vpXriIjxxy2YdAxagcpdTaXkfkVTj8+VNRjV/DgTjW08HFUT2vWOI+eLPnyWrUZ1KnTx7BJqoSnGM6VUocXmuxXxRCd9g3/EiA5q4qqGds1vO/44fqQ9luiZFShYIlNdSw/kHEJHUSMEQIpkfz0/uR1imV2FrGTGrD9dP+U3xUDvhd4M9vVaonqh+CQInoDmVMBC8Q0y5li2NSngCfSBRwwrmpInwMLvyjcaLDWeGKxxBmcubc+uuXsgeAlw+X/L7r/cvJFuHGkL4BhUp18fA4fe3+DXFgn6uz5y/ABuykYLjeAEusk0qnxyDlNiAQW8yWlOJ6zPm9M4gl4dOTjUyeSHNdYc/7xq3+i5kWYgrbRUzXeLyjTp6edvbmxY7XL8hhiss0SFunbltOE08w5HtgxUB2fE4lZb3sdDvx/n2uL4UfL4tEM9g4SnqdQzWrVfucltSt2FuSimGwZzUGb8/4WNcvZCJkBX3PgbAcQugXMupoM/FoMByHXpVneGWHeQXomJEcQs2j8c7ri+3x2MGcyjT15w+Ivig3ztkfR/PUt4/nCN1ZRfqnkzBnPPfZ5DaZbYJWcr1V6bcvpHRxJWQ0F9YNpQAa837g8IeZMgu6h1hKefH0JuM7oR99cF1bDh8Pu7EfHTH/PpWXGdol7Jin86EvbI6ewBCv6ojoq+3IU7UlIj29+L+XJsvuD4/sdeWgXKcQxn39tU+tZeG3fkH3n8j+sdm61UptVG9CVtH6+wp0FxlfR8HqeUWwIsNK0RDjfuLYsHv7/ntG5tuvAZ9pFcH5bXiaNxex1zfUaZcy7WWSnh602JhbzxkTSAz5VBK8cF/QGytqc7tpVMJ2zA072Mm5htSnRUesIaYyGQh+hf20OT27Jv+xNm4FVvZsqVgkBoJMVvv4N+U3WRBzBZVFGFlJ4e5Y7mFxZ+v2Zj6WO/sN0S1sKcYpcYCs8AOxHzMOL+g7MxwmXH9Vfl8R6I9hrHPbik+2n87XTVrtwDALbLAJlkOK3hF9ew6MayGGvAmLuoNyZ3r2LBbv9JWNp8x3/EWGIRexfjzuM7w/sprhfMRhDctuoQ6gP5kdC/owQBARhtYOQWWMbfngndupd87hazz6x52TJRrOSz6+V29UIT/wYzzY24DFqIc5LauKqTg8yH4MYmUbENwyu1VdZS3Al+nrDYjydL58yGgj/dPAe9/HoH1HqPu+hN+S3R3wu9prFtqmDteymAQz/DKllgnvwhMnf1o28czl35p7v3KCm3j0b8L+8WEP+P9Aa+ikWc0/fxbtzbZFVDJFFIc5kO/j6ZWeNNCyy1qHZfyPMZI8lkaxWgX+CWbLxiQ/CKdx7qq2iRzYly0PkjBgtUN8YEDAW0IqbGtq9CbZpdpm9opAuZ8lg0daSe7aHm5mCVDf4Y1iDUuHw3BGUkUaMxJvbJzMCQ4kR3E7csuIrrVhrlzmwI6w1VduC2YhFKmuUU6nXN5URqFx1tx6Yj4xy53SlgWqg2E/tI+vuP0Gy7TsI3BxCUpcCXg0SGlRLe2/tT5pn0toXgelNR12FqY6xcMgLCnUMfztLTuULlbxQxIR3+CAe9vGBbpJmIsRJ28KiFRefsqATS3GVV9gLn/DBxf01BRm2FV7GJF+G8bS2ob4pSkBE7ns8yOCuwinM4jVodurtkYc39oqpECAoeoGsLWHSXyJpXgrV/RVcysTViqMAVQ+E9btu5dDKCtj3TsaxrNoT8nahvhYg+rtPAA5fYKRmj0GvrWPCo3ko9h7ujyazdwrFjEq6GagHrq+dSKhnATSullWmLfxjgi+uWW05MqztTj7RlVQ+xYTsHq958fx0ok1vTxX8nbL3T2OpmmVuyDDdXTdcr65yvQwIVof3ewX2Rq7iIDNPOAWVE5uvR15zpVnGbuayvbZ1KIEzktndrzqYOGaU1Bdp1I7HWsMNsu6DDEtsr9A52xiOjqlfAfaNvyeMyWrdcEZ/MYjDm/cjgFNmHZJFFMntcTKNMrqts7t3RMt3QKrIOhT+oo5frA/RHQVR/RSxvJuhuweRxk25ClGxtoyPNB6AE89BG07IO8ISFvBGHG7bWLWkb48YI46jxgGQHWNvStbWSAwJlRjz8/9B0vLZ3pnKirhQ+GoSIbUQlnsVFHqGX8upYa7p7fb0vqkGCuv9t9auxyOMwUiu1dVFqz2BDyrIS+RVLFms19/FQeA+tRH41uvJ6u5hRALZXk16SCIh7g/sA2gG7PKCG6ugkV1UlLp4mnWoaHcEdwuknRdiv4W7nbMHe0lK338xnMPb1eE9/xElDscUBzu4JDH2QFvz+d1TmU6GvCbDXh+lA5K1tpJOJblwkQ+mTb1Yl8knoFlV2nD6W+x1W6gm0h+yDzuD9BVW3bOVCIb0kLlpk4SB2oF3shf4Ca8SyN8BTchYo6iQpWpworiF63ZOpMIsNpYAXzBSoUGjArQUKerChIa4KzSdrJl28zOgyLRHXQjnTyBCTUXef98fFJIc64/tVewOZIYq1HpC5eAIDHS/ceqe8jtN1hEd/UV9xeJQacxTMrixHdcn2CIt6weD409KdWkRa70K0YxTwf6ea79Ssrd1udz991UtqtW2bUZvj95hsU+8VMi3CLtv7Uknh8vphRhlp9S5iIZ9V50M1/OGRCn+dEjuJC3VBd2IPXLmG2K9Uqj68wwaFb7ri+1ty/pzJTO/thcf/oQcBCv9xhKIXbEPX2BHf2MxwW6oIAbl8zu9LWIU6klFlcHjNuD0LJVuPSUu0gzWNEX1Od2+Panwd1ZktAolNTXRC99auUYkndPKUHvOb2OzasOxTQ7GT+Ar9yMixTmepP5Y/qKVmU0PQJK7l9CVFKIlDPcMWsqBoPPdIYESu4/HH/ZYSlPE9ZPePxP5cfPGTXcYmbeJZa8VRrPbIjC1aHXgAhVqCQ3wiNNonCPDvPpBBlnm040yfyXci+M8useKqr3P5FxNyjHAv+euRy+w37WjrcnrIFqq+ozvUVhn5JaZcfcn5z+5/y+bonLDUinj8Q9jKunBr5ppoS4V84PZjibBJze21Yvb9IL7n+wlzr4t+ptV2U5t6ZphaU1Hueb3P6kM8KAqzGB7CKcOanCvNwyxqP1NuwYA0ps5WnqxuPbPn4N6TM8rhsal/ZtRF2W6/SIrvcyR7Z7uZoN/VKJvJzoS/EusOVs4JVJnuEDSNit6jMuL+74v5CxJNlFtkM1z7XW35/leaxX2zDXFdTwIJkRvMIFYqPnGFEnMN6Q8ntd8rjZcJeRoUp+B2Xzp1b1qEt1ZtQ7uRVyHO/3kJ7/+dKheKRTj/6fIP3R2wDzOak6eeLDSPM5ScV9gW3ThsRi9ubCIn7pV1aWg2d0QhKrObPt41HfcLGRqUM7WAhhzawph39VoBzjfL7acCuoYgfGmRL5iFfUrl/jWfukOgZTiVZ98t6FZNd+3i8s2C13PkIagtW7J1AWz0e1/7R//nWPCUgWBjHY0zlg31VX4elvEkejzfe0T/W1M7xNiyOxxGSrN6/SHu/whkeZsdjTNKD/5xHpdXEM+d4HOtMd3PoYAD4sWbj+jUd1vOoTKtfI/r69QPLSBTLEPbY2F35Sq1RmQUOqTPYMjUc1vepnP0c44MTR5cREsf6jpR1tSjU1+67+Tvr87XXYr2TxwNl8zLytUsCljuqC/8Wcf4K+9j5xyM9qeIY80CL4Ex7ezxFUmqXu1tfkb0Y1A3MwcoDVsnj39RwZrDCDEnmtrM/o4M+Fb28v1Nf0tLh9pmKeCo3JeF/i1Ssf/jGRo4NbCLhr9bbg32LFYailpXYB4aPl1tUOFacc3std+tF3D7OnBrhrPAYwLCwXDzVagKW20TBqldhsd7S26dgHuBI2NvOHtz16xHcHl37srubY4hxkJWowL19ghEB1prbR0dit6TSVjG23FDKvMQw905Qd/rfOlKoQOQGqWMXqhzi9PJ4zPCvk/w7npFe+oWIL3k++hLq0t6XnMmvEX0SjwdDxoLFzAl5fEpx5jiFPHXLbBUj9Z7HY4ti9Not4c8+Pkk26TCbQ13YOxKjke77luO+n305WR/TFR9AgxqU2IaI1xrOX56vCX+H6gM9oVulYaefzWn8hEU8qO8wz5dcyXod4hQ6rJ7hUqYE0JbqoRqV5t4OUopbJHso8xzizLBPI1uqh8TXt528v1NfmnmQ8nh4zeO7tLRqkR/KYr0dptgKvaqLx6ku8nNfXG+xS6Zgjhg05gjDCK27eEnm+VZmRZW28kgzt4tN6xYOxpjq/qyObFnoM8SYKX4pqS4DBBbURVJdUOZcOhJrHJKtcK+/KddHoq5sZnX+nECRT3T2aCMjsNz5zEIwZwD19Ij1GInfz/NzS6wPQ58Ne/ru/I7/K+qDX4a/NBZT4EAdXBHflBPDejxmvyR9C1IGdbTlx6mkBsSHzoIV0i8pHvjl0NeCdShRKTKs2cLg+UIoC38sMe6fqF1mCs9/nUI2bONnHp+WKliHvuYI/WYpdXT5igTpu/lbQUp0a0V85zoGXL53ETRGko/D3RxnvohPMY+1eT4s1kes2D/Q45huSTNuD1B7kh92+RlMAeD6z+P5LSngNpLrgJRZgYfLLZla87S0QmHfyqbq9Q8lhprHhfWagG695936YrZuuctjFHbxaRc/eDHZyaSwZWhYs7mQB54vq5396PTjJZ7qKgYYLwzqQcRqyhwRT8M+/uX5FjRgnc5SGOvUQEFxaZfuVug3ojOu7yn338zyev+9o/pu6uWaWO/i9EWGvcclzX/N8lNuz6Uwt+YJW/L8v4BKKvKflFGeb+dxISuhIm9sAwTpDFCs7GR/qnmxYe/TqbayJaCQ3LxMDcf0yozasrUlvoXT0t6ns9QmBuT3S4vSmcFSrD/tT+I7alfZlrBEtt9z/YmAbj1gUWz3h/3kQz4zJ5xfMs8HJUfkh3z86mM8V4r1R/m0v5jsFH/q0AVgDc+HsI5FPOgbIh8S8RPKLZLiOvQqjS4Ql69dt7/V57/9fmHA88kP9vqDvf5gr7/dXvtyHUZT7b3jMQRYkxg7bl+uxHpQiVWPYUZ0q4sHUdN4FV3ZVSr0F+I+fuP6+0b+RVm4mxPqL6apFYN6EyrqXORLhtDPdSiltyk5WR825E1abFsSZDTG4ZZgCEQ82u+Pi+djc48rzOPPLQlE/LbxqzTCwh5xewDFeguWu/3aCI3ukiM/kJoqcBbP6CouZMHPsES7P3B9/qXkO2BIEQS2zo/TOZYLyQ9q6vwq7NXPTF+yiwzHSI1sBYdZyf2HQ5yreMj15+T9J586MNd+wfaUDd8vnyxar9xR7h9JAe9TXSa2z8IuHpKjxLBMVO7E+qVHpAM9uVj/FfmYfbIfQrv9kABColtDD6XzBNR6YjQRlus1BTz/W+79iq6Ibq3DUr2lSpfP4JnW7Y+w3j75eB2yFAv/W8GVneO7MLe8CHX7HbZkbUKF21bA87lOX0t5k+J66iCax8X7rGeK9ezbOWFZjHn8lDkRGm1Sod/d+xLdfgo4jY9uU533XyuhIvT19tF/f7d48IM9+WBPPtiTXwd7AlewZYf3C969vkqonyrs9H001fNpYA+dun+/o4tXAu0kn8G+DagaKpK66Mbj8XyQdO8/3Pq5dWNL1hRjTKC+uyK5w+3JBGFM00Jt5siCuKAGAs71HGeh4PfwaXwUk+WW6pkWEQpdZGk0h5NIAsCVIHj6vke3X40QLsX+s8Lzqfq4vp2W4I63jyqn4vIWGc6dX+4KONV3VE9pqo80xFJK9LXsYhAhw2liQ81wCye+obYRAQES+Uwh+RIEPJ6FPnzptuPWl+CtXewQKhldFLJEcBrFuK7tWTqPMZJ9KY1iUAd+Kc8jhmvKwL2LwBAia2LnQAlLuUhZPfOQNcX+03iQSngGAX183/o0vwq0wB7al52+abXrZ0JfkMG0uSHidTdC+uP1b+gHdqABX1MWbqFc8/YFlKnqg4O+dvG0L8FqoY90P8heQiOV/KquHKTW9lSjMZKvfJAaMa4bEkAHgnrjy3Ad4zrAZR1FrNgRALwUs8Amuzford+U3ylmdEgK8b45ngc4Qviwv+FgB2uhjVQP66EKMahIDnLY+YPwWjKVhWGxBbauCMsgVfAVbaGDjfTKx7By9B0KW/gSAyb5RXodFbJqk4zPU+MDqNmsRlELoxjTDfEtaheq7wbZPGKFzOfblka6x/MXHe39sr51dJn350QFqHwMqV2MEB1m80WZqj5yJu/KL96Vn7gt6/xn6TS4VHPxPnNrifXdud+vv/iWIewdSZltiPeBtIXOdEjSX+z7PERe2axuwtYiNtAQPz68rzFH8mtM5KJrj7v1INa9r4GAreKS20OWL3ymhjjzEkPfJ0bG9UlBRUoWpd6iiuZuy+7CqtilitPAsi6gshPvt/DrbgALO2dq6DvzVGaBX+7e8/2WdJ4oIOj255+sv/TjzZz4sH6ChPxU81+v90uiBa5D2OeDCKTFgjgz/7CfMWT3TsHz+TT/lv3F43w6BZ/PdIVb9jr0wSQy4Iy21LYx5fp0vSi2rVdpfH72IZGNxLDqOeLxmrqneqKm0nZPZ9QmuqUSzP0H6OZLUvehZO9sxWy9ysptyVp362XvNV9vXS/r35/j8tWt55WO6laU67PQf7G/VHH5p/jp/qhc9euB4nsVm1FIcObF0uj7v35ZwuP6jcuKvV/ucg8ACbFEjkpzjyptFRNbwa1VOCUIxX4aE/NnpQAEVKwv6gpuNS6/Qfc+DHjy/tiiwLKPwx3VmWkbKVsUbMjtWQpY6JYWtHMm8/Fw+bVxJ3++suvWX/j4JfW4HzUPQM7b+0M2iUowgxXLbRZuEciIDeransIQSZYR5hZ1WLI/vO9CgDPBMgu9HL+MZ9ANFXkTlyBwiGgv8/gpkZzaJanj8viYORqVmJFOhfzKJDfVSGa1W4yQ7TOEMb6kzALecb9P4/Fcg5iWe118IC8KkT+5sOXxoStRWZuJ+HIKK6QnPL7WHeM7XH9+P/KlK+nv76+fvf4d91NnGY//h9cS0xcznOFhcvuO9x0ex6/03/MUJ99/+dTGOi14vEBP4wXlDyYedvv9UP68k/cZqjB3JrHhNMf3rZSmm98AoxiHEtWdSZ9Pv3xzvS2eahVuQbsomO718kRAuJsjZqazJ/E2eCP+qA/rlX28DeZByu2jEpaq47CkTdqfZX6fv/7seqr/1vm95PlZum++/fp3Ww9+Vv59lFULXeX5qXj/3ZegY3N5fBz/wX5QW6o3wt6CWo+H0MG5rnJ9j3k+OeXxTaGELDVSOenik5yJ9VofPNpDLOIHOLWRlXs64PH8JpJGDSp3UYzCXVhkHmXFfh7AnOeXFD/O//F9NJ3NuvVcpIQsUVO83s9JQyPE7XtKFvjw/rqrvLE+87g+rL9hX8T7C3DlY6hRSX6NfdDFi7Kj2UjEZ06EgOoziKkko3DILKiDykeOlkpMx/w6QzuP5/uSPHVFvIkrYY8N6rv5B/v2wb49sW/QrjIlbC180t8b+7914SEqhYWM3FP5Kka+K+QTVz5h2gKpiMsf5nk/EvLbyR/g12ss5Nd3hH3k91NJJjaBJc61qtfXnW0c5E/f0u44sH2t6t/XNUV+j8T3XYR6L5T++0UHs2zSvX+yE99vCn7poLwe4sP3e5c+49frDMr0FvmmahPr7vA9MgRoJ94nNmQePz1znZJUEflI8dz9rrJ7el18r4y17tvT5X1SCr8ASfX4PauP6solDc+HL7m94/kxHcL5okxkvyy2NmCNH9Q2lmhDSpmmuqyTcvcSG1lDWEoiVr8mPtDcAt/ctPQWFuJ7rX33bSgIb4agcpGlIQQMt0jXtgFNF+mrm4k1TVfN1mUAuPsXSiqJ9sZNS8U3c9CXRN2Jxf4t35RXon7Lar6y5r488hHavYK6+Fa+od234l+YrK/phkZb8e15ZfP28ULeyfZ03IaKWseg+009LUn98dZWnLuI7PrfaBnM0NaeOnlcsk3/m5ngufvH28VUl+ypvgt9XNgGZK+6b+LLiOwkUUdlZTVhoMWBwop5DsuwDIfUd/c3Piwdw2wcw9yHezkLS31741vMKXXJzrXS8ZPWZt/h+/pHuu+o905eyYkBs7S7Fi/2sKWBu1y033FsK81wEbMhcpdPa+SMd04eqvOprtq5OTQNp6RTW7UVd39DzJ1duo0zTTO6klf21FrdELRz/EQO2+XWybOCeuPvXJ/g2+oNmbOmq6cz1Ze2N/62ekZLUSthv74KPE3M3XN1cOasEbWHAk97rMWCdiwuUyma1rEzXcoOkJYn9XHQItDYnDXP1roIPO1JLaQ5a95SCwmkgad9EUxO6hSB7Wqe64qTF5e2n1zauagZw5/z6lgPpzjW+RA1Em8Q2Cagr/ERWHVXc+UdtYMEb3Bfr0TUDXyVlHh3qF1zqG/R126ZQQzfXr/Fe0v9FnEe7+NDDZRvmdeXCtgmU/nZGj2d3ppKrNBS1A/xT84ZrIkCd2Tn+HhO0KgLGt0wgOuX3q+uJsxxnGSUR7KWpcZy9KuvB9Pbx5zuaQCELL8korZJP8+ndaWcvk6R+fpJLZ+ykzk+t8/VzuprIm0iItdp347P0UmNHDE3B1nFgcOSyr5PSiZFpHkdEnZ3I0GWKI0UD8f3VHnRJDMrC4ew5vQnSrO9CdL7pGzaxAB8zt5F/zfnLBCy194oXV3Afrz3tKQtDQ51p471oVjyWJsp6evA9NdEP1Muw+j7UPNH3q5eeUKvuzp4bLuaV01iFiAPFbxNJzKIS+eeGuyOyn2tKFEDTEtMJmouPbFdfH6IvH1r3a5gYqXd86x7OmPHGk39GA62pRWywsfxWCNK1I0RtiIfb7ntOtQWOtihN+3tYSxhoG1jg+VhAIVNiyrnPs43y1DJsqRyWDqV5dQImznYrgI+jgLfU3agtasf9DPUzLpLyW4TgN1dLyttagApDUQ9oK5+aF9bqb/+tP4Qf35ny4/nRS1RcV4b8bFQUUtyxHXySa2rx/NdfbFHHXxaj+jpNciSmdDdWNj0EjSH8R1jD/bNulCn9Yl6OkQ8dpgTWLI7qh/iMacfZ/NF8DSmeoy/vmfn7dly50zHW3uKy/nUVuaTgy/pY8STePJXdF7EKSGXNaVhi8C+sidaFpfOOh5a7TzXUvNITxfrnsS1z5+fape2727tKY/Hlq2Tj9/KHxEvKcc6qFc3PkhfYbmXKVrHs96mCDnibbkfGNV0Wj/ju8dvrzflaaIm1ryT4bSXNREf93LcxIpaxQo86NN9YuB9p/NqHwfROi7dO7/Elyn4Nlm2Oh0zgBQe9Z3nkEBzfWnU27EvvmUM0sEOBZPTWPygc6I+7aGuX1fP61DLS+7GRIbN903e3nL+kA+Ntw4JL+02vPzOcvfLPm+ImrNZbOxeRQpWk3a9NY1jLe0rG0g/t32w324fOj0dWiwMIKPTdWNjeRT0tScP9doOciTa9vUo58/F7xMtj4h7RQ1chgHepID7R3kbElU1ZyL/u+r8wEEX1Swmh3jkUGvuIIcn+WSvq8JuT1SQVIdajCfxzGm9tqPv5nklONSi/JZcX05Ezb5Z8+5xveOZnGeiFh4+xCtdjblkJvS97fnIc//vlwy+t81dfu98YW+/NzHgcSVr5/l4GRI1j4zRnutS8PPbjO236G6elDhLDVzMV9IuCOSDH+jXXKyDHAk973Jg9+rZWr2Gw31QQQnNUrKTAsW5jwMti6tiKXyCX3c1Hnv9fFc8FA81lpRdPeFe7oQtvymcTTx02Lf6gkrEjqLm4SFmdYfhbaJbUNSOq9JuTW/1QolF7UHU+R8s7hNxfKCI/PX7UUdUPugnz2F5Xvi9y9uOdU7nPBadWMc69P38ZIlR3B37KNn9zTDchSWWQh90tqlouL3pbVPK4hLvI9LneEzUoz/4dYfHw8c44oOt+mCrvpe2SmWLGXw/X1+MVlGJ8/QkX8QncfR1ad3Hyq7Xk2Nc8Gb8PAqCPgZglCWV8xinl2AbeepBz+8i8uI+zcGK65Hd0+gp7O5Qfxsq+I4GVh32dgcNNcZ/d7r2iAHxISf9kJN+X3NSGFj794wTXoZlzcIhFH6D54cmO9HXVX3UG0/C+6RbX+f36QcdeK/4vJLTV4G0Ebpd4n2iPOYGYp+gPPhctY73I8UmFksNfdc/S2C3HPYDKFFZUrK8vyawXA66KLBqyNFGfMiDP+TB38c8eBobo5bi91szOmIMPcaX6FGnzdfHuLJoeH4t1nT5ffC41vRe8b/wn2K9+tRfd2voXH9HJmi+eNw31k73gjsbKX9jv1zYk59vX/z5ffUn8uGPh+FQTk2jt8V5fbJPvry0/WVr+8vLGz+5nPth4xhWbu/ljJa0vPHHCvWLS1piFiqh4mBpKeIdvz7aWtM4mce8xt2eN34Zl+gQLz3hRRpoPD5gfK6smcPSifbFfLrczaf2bj5dNk67VJ2VJIWl3d4QUNIybOwpZXM/KynBOc1D2Zw+2YM97os77XJvT4774sP51NyaxrO+5Fnf86372xPtCyjh993fvuC69BI9tx8s5m/vlKOSij0Rafvcnmm/Dygdsfbwr3iPUj6M+3GP8Fe3f2vfi5x36Lxlv9Q+vl9gGmCbvCXe6Pl9Zec8ljnuA1/9yveB91q/3+nyeO5IWxf/2Ms399HnvzpslbT3cVqoOCyZuQ0kah4rsI7L5IooYv8yNcETvKErIqX3N4Tbz/EjL1r9zsZyas6k5aI1t/akfy/kPd/teBZ/x9NArIRXROn3Fj2NhIGlzlnzMilZFRE1DTyt2z80LpfmdLy0Z9LSnGjxQjnihCyfYIN09D6Nndr6l/Tu0y/q3aknMdKvdpzvExP97PRt3zK+52MhTzu8Q3b1i8xPTIPHPujqJCY4yUcur/pYZ06DTDrETk/iG0+LSWsv7dV4a061NAik5Qd5/CCPv2R5BEllPhO3WakJmtj2x0s7RyL+mntjWcRBq/He8dHS9pO9sJ0TLq/o0G7YHetLbtdfedq7Y2Tp6VqtiOf/wOTyO9z/3Jrsr3ic77MG+7PTN36X3nxj7fXNXOMXk1N+a+7xZB/o7TZV35pTU3Y8nicUS/7XnJqP8irsrZBj+diuFcc7cwrSjj5B9+Pfwz9D5IOjVzyGAU08993Hfvfjts8bdvZqfMn7tX1zafv8ecXQnOo7ZzXe2VN9OZ+K8ztxTrRL+PHloc3juNx+XO6h36GzH6vOnt8TLud+we+TzKm+Fden46WT8770rm/RjudPusLH5hx01beXTntst+XPsLlO++M9PxZjEu14+1CM3T6Ok/P3MM7D+PTWnC5l0Y7TKOxFT9+kG2t/zJ+ldOPi/etd34c2Hqdl3NE6OeWhLh9p5Dzv6HmkubWXXEf5sXMyv/b+aLskcyp87c6chof+uvkQ/Y3l4zh4O/7Mdsn7aJ3VWO7/Sdwm8t98nIff/LzDfx+O92PZmXTn7NVYnU/GKm/L73G8fu66+Re8trv7pflE3Cf47vjJ0ul4tn+kUz/M996cIsmcopbHDSbY8HH3dIaqsM0eb3OQIbO32WOuCwd+bA98Djqf9IWdj7e9vL+J83olfNQ3cV6/MA1nHQYWz2FGaQDLGz9LTSAwBa+IdHifj8f7TYd32a3ZSGFrq2Hr7kNP2s/9pL3xYRH6ehP6ektXkmJP0Z7m9qWdg4IaQOBcxqvO97zyxiJ252NeDOE+JdwXcfrMLY/rybCRkgozc/YNOpbfhQ7uy97MS0zwHfKSQB6Zs+NYRE5igsechPcv3n/0tPiAvditQWlf0BJsEgUtPea89FfiHfUjPup3XUsRa1vG5fIppivM7ZblztTKbnxTdVq7cQyY2Z6c2b5T3vjh1vGt0m6Xe5vAIsTb1Su8u3vlaTEf4yssrV55/ftcHe5kmK4aqcOwgwau0kjUAGFUYBbhyilcJL6h0dzC0iCSEebXfWsdgxr4FS1wi7YuBtBFANpI1FTbklLePHsd09zrMDW8564n4On1WMca6vCCNNt7oTg61KiEZ6KmIhEYMrorM80roBdj1hDfiTAAqg+gFyN15gVwDiWmkqDYRYA1MEhtrNcbv5SBrcuv3VKeY8O58kmqvfTMjVk4yvVQm3TfOdEOJw+F90450lwMwEuve9+tWz8V3488+ry3Yjmam+4dN11ghOJ+ne0NvMpfTjx1iBf85dBpIbOn2ijgdB72f1YCc5PbDrHv+p0xfEVfz/PidI/VzNePdCvqO3AvBT5ztx7rHca2KSKi5jzmpCWo4xneU2+8E768kjbdO1e6wEIls/A21UVtFh0+1iIhAhtJpi3VgXkztA7Yeg4G/Hqxj4xdBJGqUJDItt5jX/pgHuaWl4C6iZ+/TkIpm8eGcydqHb55PdCeXic74GKrw11Dy3snhwcsJ+2lL73nt2FyevPcuy4Ca/VXtt4nvj8T2O4CU3gpMLh/1e+4dDixozwa2mL/4XF//ZLL6jvebRHf6Ym9Oy63x331vbnp3mnpMMMf9+w6ve730+/e/O7uXfrmkFCh/lLm9j9UzKEzkaRQQcMbou9pnjSh75Q0R1uH0JXju/Lb34FgAu/2LTi6p/kkH9MRM/emgCxURsW7vpfj/uK4l9Pj9R5wi80Vj/khi2f2HT6ueyL+TL3Drl2vbvaNfaOk0EeWhkjW1VcH+h5WHd4qVbhvwRVEjo/xI16sX7FI+BqWwgNenY2POv2IZyvheWQ4JspBHmN6e/AlfgFP+rNEPfdOBzt8SJ9RHCkHPDnntsdfmBOWebFi7tEB3y7Xuu83mRMRXeDvif6jU7zC0tG8yeh1376r59K37/sHJ/iM81Tq8XOxBQjLJosClNeyI/AOEU4vE9ne4xznj/ia5vb0e3539ULu8P3oyzC3NgtWwx5/8018yXuBZ4iP9bWcDvsVKNcS1FIJv5W+ULImUXvEL9N+DrxUAAElXiEf8Ho3mOHbBQCU6PU6ZJlzxJfFtXXE60HmvWMIv+u5isAD6u5HQIsmLySMsIYQ9vrvl1s/13JRTzDXd4sSmp6op+Jweqgr8IrFfGpw9eLWE7HMN/APayoJeTFvFMafo6NJYwobvX8hCTxQ8fx0f6OwYS/Pb8EvtirOD1vUt8rIgun7OWk4/8Fz+JKe9E18SYjUk/thIPDnCnp3wB9+wm/W4f0c+H2KL9zjx/X4wkDzgvAW9fisdgCLkCVqJNfBYlbbkWxtQiklqcDvwdRWmslNiy1X4OuONBfptzetu4U6gBA1HpTpkLBEjgR+bc0EfvIxVsQoRlR6HO9T/GR+Hcvhlgi826x6gg+6eiEfv6Vu3UtX4s+rgx5/liSGdYd8yOUbCnq5rySbewfJAs8YG8/gGRMrJPrhuB56k9FGfF/+ON8WXTV3Yr4LvEnfht8JEjUqAb9/x++/aTGXLx1PRhuBZxmEt7ibTw0RGIj6S6Woj3bEq/ZlUU/t8bir3308xgaXD6G/VPDBeyFHq9Gmw0vW1SNeJlKHhKVz3MUwKyxx/cWVwIeWrCns8AeNHh/iiG/qAXfvVSAS9a8EPrba4aOiehPKnB9qdTzm14dah//t93hz3F5JTNgDhLO5wPvq6xt0/Y2qt+KPF7Srd3+wr+2pvQx3Hf4GKK8VYW8sJPDVil2Hb9nbcwSm0WrUpBKbuNjahCzzkxmLsAJVfn/Pbztqu/FS9kgv17dQAtxeN1ynvVl4SwoeM9r3Dhkd8EbfwNe1QF9vdeJ2OK2zZDW66/FLixP86kvePxXynXF79k1/8rPgpRb6DjMHHfHDmbCnGEpUJTjZdfMh8JJnSDritx3xZSEGzZw07Gj/0U65VjKB3+0d6gXOjvURCqo3d165iwQeWOt09WFnmNsjFeHsWuBtC53BjqCX6x9e3jt+prsY2DfKSOvqH2ADl7KRKDDAwp4L3k0S74XiI1E/wkKSqC9hHOb3pqXC/xDBj8stwZlnE3vrVzTi89HjH99Gxo5ibq+UR3mDqFZIkR3w6HVcPN5vE4GPuia5dcAjfsJvWIETfj/BF+7w0jr51VxkD2+GWhfPBNm8xyN4ile/eqEIf4bYN/B0n8GD11xvtLbZ8t7R2cQrIImR2mAfzrFcNz5I5xFSr5DIZdWNXxW7SJd5rmtjCV+RUqY2EvhCNGJo67Pn8WpP8GwBAm/HsxH25e31eiZQstXIcGbRkPJ4667D47P38YyuIr/o6t2Boo/vOP10ggDaISTw0qcutqpU4O9otqgn9NS+Kn29tFlX3w0L/OOk8xc6z7HCUvW6+mvw6E8QFng+K1F/EPd4UjOaxQVvn277eoY2Rtx/ihzN84pstfDBvfDf0pP6bZcLffcaYg1iSX3N4zNb32HhD3N2y/1pXACISpXFZDeERvMUT1fn/nPdonKkIaxvfQlibs8cYKtx5dTEt4xUgSbm8a0Mal+pgV2oryNR79KWfFJricSax/pJXT3W0/p5uMP35vQMQ6mrD4srlnX4PMX7z09XH7eL/0rR/rLH52oe8ZW751OdErfDKznYr9DOwTokon7s63iY2a5UD0NFUm3D3M0DmOEWi3rVTiH7B/zRHg90D6s0Qy37Jt741Onq8ZQ1Jbq6QVOBt6bbb8dTPtZLjlitkFKOenxG51hfGKnNYqatsLLdIgAtGz/ipT5bT1DW/O9/PcETvF5DxAM93qi7/XXCQznUh/Z8S8hfX68Y2aTDb+jxp0KvckJbstahIhtpV9+YLRDbdfIk6hcL/OquHvk76jt1+CuzeAYzAoDAj1kgta/X3MULPX6xqMfsT0GHZ1rV3F5t+fwmJWhgpa0in/H8bZ7wfChIbbuEig+yyQKzwOfxkJhvZ56UztT2nZUt1fuwdSZRhw/8XvP9Vnzgvp4sl89+/vMO70VSY1yL+sgdXmetdXhkp/U0Bb5Fh1cW9Ph9XX1Zvasvi2cw1zK3tyff93qwff3rDMp0TYoOrzGZplYk0ddEyB/3X3QVI4F/z+N/UR97geoef5xt7JljxeDNepugx2s19/MZzDxgbkPpqXz72JYWOtvYvsAnqsPc8pweT7nHVzy1r1fcXjslVj2Bzx5uKcjmot4dzw+lQuH2P5V2U68cRViit3w8fb38Z+t3HvBmhb8YZqK+cF+P2bYr7SrMTcmR2MwvRzzfFvVV5wSGqJRtbKQ1Ac4wwlYwJ3KPHydHkWGZfrk74PlGkeHcRUqHD4mnznUC1vt4hp/F6w1LlSSKZSxmWOClcH2PDO7vau4vRDwZgfW+w7vq8SxP8M4JTrcHvHN3mNah1K83ELri9ovHyxEavXZzwe++/tpS4N+j5/BpH/GCrUjoh9zlGyVd8fwzRIkaSSf410VKUuWxfnpYykYK+nrm/kn96/fA1xT0M4G35Pd4xTMeP0Sy27rHfIn7R7ZJp98zvKRfMB4rVX6N6DvWF6RtWITCHsez+mVUgIrw+SvBbB6wfFGOhgT8HOPTTcnHEPJj1wdRVKZXPs/73wuPoeb2ZM3tQSSNanuWhWQKih5/+Vj/8IA/2dMzDKVQFfUN9bfGUxqVi31sNC9jbG1IKRs2sUzU4WtLoZQaKcG+m2t9/eCDPsFO3t+pL/Ub9Tlhh1/S4TnbUYs3FGVQ+Ku+/86fw9s5odhG1CFTzXMldifsNT7iiWy4fSQGvEYYGy7TkG2wkEy1lgbsuq9f39mnJ/VCvx1/T9gnUPf4mgIP/Zn6nEL/A3sIv194Yb9YPNaX34LH+v2i74BHJtbTlzw+ZUSXFFHf37AavxzxeOzKV+oJ/TnG99b6ue9lX56vXyrkv5QzgT/Q+f/aO9KTTVJ5KfQzGp7ETxiLeNAHmOdLU7esBf4D92cxZiGunALm7HWYmzsefzk+trweb8hh69arUmr7Wifv79QXSU3lOvQE/uJOCUvhv3o8ZyAjll33eCJFl593+eOb9Ze9zn/f8nwr6vH3I+ly77XOxJUxxgW0F2zddvoMMAnoPPbZBGFqQKb5XglLNFwOPSLJkWEFvf5KXB/j0tyj8n3wcwU9Yj0G9viIz9WD7vAYLWYH3yt86V8svp//c+A3/8HTd8BvX4dFekl5vpBj4Y89lBopLvbRjOZxwfU93P6i8ZtS6d324lvqZYv4lOuLx/NhsT7CmiM9UjahJeD2wD/JD0mXnwEJcf3n8Xwl8OdvCUujyIDBYqqFdqEqIcu4fbuLlLTXP7iNS+fOLeseD+nd+vJmveLO/3b4oG6LdT4eLg8iX2YneGXfqGfNSjQU8bTRx78839KpwaRUBhtYULjwl3s61YR+wyK1F6xWuL4jZvX+GxQCT63Di+D0rcPWIrR0fr3y0w7/XuB/kKnT4XMoIv9RMOveEfEDmsdkuw1xKiWYBfEM27ZYL7Ek2zBbN6CRnWcSz4ciULSo0jp8ktaSUmkXUi7vAbzi8Vm3/vQ++CRvXX8K+/WAK39qHvaT+3wmUaNSbwWe7Mwd8vxQjP8knuvWH/Fpf008o7Yts0tCZJ4PIdjFg7bIh7r8y7MZlQnLrhPAVCFfutjfcvr8t98vTHk++cFef7DXH+z1t9vrl4Rla1t/73jMJUTexsK+1GI9iOdPmDziWXqKfJ2W5j5VRHtwiN/ib+ZfJecfZc7lB3zrD/jWH/Ctv7/41rB07t5nPbNbz96oEQENLuvC0x/x60/wKa3kCX5sI4n+K5p3+VZz9N/Rd4sHP9iTD/bkgz35dbAnhjWbB4f3C969vkqZM4zw6ftozBL4W8r/z96bNyeK/YvDb8VK3b++PZmwquSpqV+houIEbJVF6E5NKbiDsaOJS1e/96fOBgfExKSTXma499sTRTic5bOvgU3JKyuvSekzlrYF+t7QCERk724BfdBF/p9NW1usD52FblmWqxjN1UBjYT/9rmUFnBEyYieo292F2zGZO9GuT+B+p+SjDe6vt3KDeqWzqIe60rrvmFatq1jJeA/kr+52bRf6n4E+NQgi+zbn2CK4/4vH+QDe7hxObA8bXUUz6osuGzAGU+/hfnkV01rF/fKUlgboj2P5XUjfjO7HrmICebauK1JNq+kfu4313qh3ewMrKBr9rmuxq40dLrY+I24sw/rYZVdrO/DbQ1P8YgF93JYqKNdH3Wt9dza0u5y98Ftgr9L9WbumryT7ucb6lVd/WX+0I/wwWcVtrEJrXmna4H6u24TxORhfsTz9vf15HNNqsbbl7YZKcr29MA2/uh3nPpmib626JvY/dFiTNeuTnRG0zO48qJu2P9BsvQn5ATu578xdwQkt0VyuBna9vnT7q6WusKbLr3Sr4TFGvTvXFcm0YfzW6osBc5HAObGapSh7O+je6/XVxgp3rhYs9kagV0aK+MUG56eYB4PptnwmULpGqz0I14xhgfHYLx3b1636Ym+w3eVIEYsuH+gdpvWUfvGUflJr25B/cg7H2sNQh/HMWgjOeyFi+4urLVxI71zO3KJ4oLqA+km9aTxPZWireztkcb/JbmUYxWsoomGvrKHdhfd3TWQPwvEaHfMQ2OD7yNbFdj+Ywv7RRms7APy+6fa6rFt0DL3nh3qtbYuzkVHnHY5tDMJuc9iA8S3g94rf6OzB8xoj8jbqD3tWfMvJ/rANNN+ewm6w/WTXgfZzT/yt4kuslWgH0wbWBzsWB/vx6cSfMbLLHNTnOf1p/yIXnScHzhM8T/fz1Re/VT/fqh+sNjbEfwX6l+j+vpF/1PYz+y0b3C9vv4T9FrG9o2obrfawoatmv9uzDtYXmCPXaG2cg9vXwg7nWFPoT0PnFzCm5S+gfdFw+1oDwC/uh9an48d2xW7f0q15fdEzJ1uXs4q9vg/oGe4nqOzbfQvMB8DvDsPfx2ET2V/A/I3IH7UQPVsD938cma0vjuk3Rra2t+aVjl13toA/6vWp0Vm4My1YcNahReJdHJNp9W1r+rduSmu/DvNJHhzLY9067O+3sPjpocMFpL9eaDL1Zc90GR3Ab98aaPPg3raDaro/f+Tvq8P46p4J9g/KB1YR6k/f28/x2X6eUu11/Ryp31/mT83uV3oy3iGeP+kfSud/6Yud2Q1Rv0JKXvj4g+ThKvaHfkzGM/jp/vcfByw8365vdTfWvLvoMKT/vZS2t61hf8W+XuyZ3RaGJwfotz1zyiTkbTMtf0T9WLG8bYo+B+ijOxsuGM466Ifv7Vcb/55tT9VPne/5/WxfaA/OhH+9B+TDBdAvYfz7x67C7A1Tz+hHujj0wh2gt2t70X30FdaG/SyZ1gbok0C+6Rku7n8J5ZNGuw/ttU/1X3e1cHdvcGxvWF9tuvP6rFdvhbahin5DB/plYMbnT+LRFj3TQ/Zc8D66H+zSnXdZV4zi12tuyj4T24dT9OVvQG/9Rku3lDrV77P10WSUHe73uer0g7ZVt5ZAfhyZgUL6b/dM2M+W9Ls9kH62XSBfzusLN9CrOX3L6VuSvin7UdOda4H1s/op24l+tQT+jMqS6l+L43Whfo9qyFpucHNwcP4ia9tK6x75e2D+Jtyvju3c+ybO3+tP29C/EdabVrjpavPFDshPOF9LgflwC389tOv9zN+B/A31kW7W87VhPfE7yldGeY+KXZX2kC9Y9QGVz6r3Qr8yYIA+PP3YVVigHy99oP8drPbAkLe2zeqjxa7fDdnB0AoYw+wOhopkDhrswGLdL3a4cjUTvGf9qIebBszX4nFdAmvy6Nl+pbOodzumW+1yk62rTCudXku6aSbyvo/qa6szXLsX1nR4to4Grnu/jutqw9z4J2rew/ocm9Uw7Mzas7ieNngvrHW/V4ujPdVnoge/R3VvSe0ydX43e+f6vjvNVli3Vlm4fRbm5ZN6zqiHbX1rs9LKrd0xbtgKdc5ktBnDuPPu7MbozrRQ2zh2a6pVmb1ruFO9pm7duclrh9ZLcvzper/gd1hzDrw/UZ9wtp2Rur9oX9YLj7MYtbl+4dzUSXdRbxmKpcQ1gBd7Dda0onvjVuZu2Dm0DX2hzdiZZrQWN0aHd2xn48zlvTNjA80wed3WBK3mCG7DnLy4RkJVmnqNxaMXWkvYQxHClgRrZjhcHZxdyVQkw0L1r56vLQxrK62/tAMG18LL6Al5WA1dfrXykv1uNdcWl35jUrQPHUE3ur6q6I/DZTcYLjsbC9XyG2b2ZQyYCayfMWMrLmc9+LXV8GQvSYuBNYIcrr71m9behbWC7hK1lm/qqP9jnyO1nFqZPWNJH9OBdV7/WVzLHvbo7fOtwCO9XWC9m+lj1JuCsczT/R2VE/0d4XXWC3e4pv8z52pIU68pS5l9VbPqOkfXdquhHTAfDZWNrqX7k9aYn1bPJJ7nr1XbmdTF9kJrh2CZRf1X0DmDcxt7jfresdkD6XPwd5Do9TmFMPdMb2ZUB5rUv1JZunfRL9E7NuoPjOeL+y3jmmmkp29UJxrjH71XqTriUwLvP63/Mu6xcefa9QXu0VPqV1sZdaR90usO9QIn/WFp2lUnfSNP1ZXO7BsbzSGiLXyFzCPqIQtr1wCaM1e3WjWrf2+K3pIeluHZ9eRIf9/6kHPJWkPH3sE+CLDvQOBOvWVAfiN14lBvP0B3Q2kxIn2IltZ6WN95Q9zrwOO7U79pHfocG3i8PnU5K9HD1mu2Hv2GNB7a9S9DHpzD3TZ5PXgg11H/QdTblvQlT/e8jXoKxziI4JBL0mv828LtV+L+KnmPwrzvV973K93jE+iqlY6pSB8xHcv7Ruc9uvIeXa/s5Zn3ks57aOU9tE70XX/Gpgb5DwvlbyjH1yWko/O/iE6B8BPosL9Gf9603ob12qiXZ97vL6dV/21aBXvgvFE/ztmQk9YZPTgT8vPYYiUsA+S9qHOd9D+uk1p771md8cf32sx7Ved6cK4Hdx463O7R46w36hUfyZU3QL+GNt2jvvHPy/+Qf1pMml8jG3q1JY17z/ZOPPKXv1uvrwR8LLY6px/3WEN+cqFdUwTtoAjtKsO3awvuxujOnIO2cWw3dGfMVg9Nsd1wA9fWQ31uPdtTLdGLIqMfldrEPSiM1XC07x7cfmcyOrywJ28v1e/2yd64lUxeksl7nvVvy5MR49fP9W9/BLhUYzP9wbh/K+l3KmlZPlPsB0z3Pf15Psqo72zsI/yJ/lvSj+KUvzSKL5hVpl5TPiFvoP1uz1VWbcR+4J/XW5b4gbUJ8XcCeS5eG5J/1Gbaj3738/zomMd1bH3u9ivMjWk9OJy0GNjish1skP+yV4H7eWPWl2DcdrBpDvcspJ/xXpR3N/O63+9VJLW53ms1GceFnBnbMV9PHG469WAcAsv6DWfTrjOTri2F7WCDfYvMBPaYMlZxjymLmWD/4YMK+4JVJLUqT2x+E/fdUeheOmi9Sdnp/Xqbv2lvdCwj/eR5niMTvXp92on1ZctCzITYCNpvqZ/0KlD2acexZBNaH2ljWccILcGvYtkpId8wE5tdH2Cfxqq87Vuwd1oOjzk8vis8Ahn5/fqI5v2c837O797PGfmBeidp6lv0BoXrpv6Sf1CeGfdZH+HLgonH1SbaHukNmqFO2rC3rLLH/V+j/rWoJ+wk7nEK3w97wm7bcU9YqoerjHvEonH1gzdpo560nFpbiLB3bfU1vWu9+D7wDtQPdgt72dbMl/eu3b+gd+1Z/Xpleg93cX9ehaH7CqM1ewe15gjoOSc+X0OLaJdelRGv7clc3IPYIeOh/r9wHrCn8V6taQJc28GBfWnhv9oCf1aoz+C6OQHnhb57E93o4GvqpG1MYA9b9IyJzy7qgwv74sJ7axP4HNp3k1drJhffo+Dr6Ly1Geyby2p7Gcjd39/D3GImo4O61apYzk/1gG0HL+gB26vAvq/tIO772u8l+7nqDe3QtjVGC5WNNl/w2p5h3Iayu7GVncY5G30us1roHNo1dec2ulPSzxWuo8lMoOzOMpMR6XtbA3OX9xqQ6+ubkt9sse5397JlJqO0XtKrvEAvYaVxrxLN5bjvLTMZsbBv8ITqGyzBs+Dc6bCpB6qyMgwm3cf2hbYU3Mf2TfoRLwF9ZSVA/2D/0Mg2R/pEkj6I6hdEw8sPxF5khtYByC+JXJdgyv3No156XcW1fXbV7M4rA2sBeyfZHtet9GAuT73aWdTrhtXtd+cVVwuna3thtf2w29eNSsW06pWOpeyMUN2by8pgaO8yf7dCXYW9PYJWxu/1ber3ddes95CtUNndHBymq8DaHnONbYmol023Zpv1v7v11sa2WVdjV6bZDzSr3toYC7/lK2Kz1w/ckVG/s2227jM7sxfu2kPT3Br2qjo0RdPhV7rLKBLYz9Ee+R7U+V2GXVNN9IZ8zuegLll/3IdjRv5A8NxTvnhwNtDXUFWLsR8Q9iiFPnh1virRPgb4PcD2vlTvzveR64jcogj6wWNcQ96OLdj/lcgjsJcu5NlQ5tBDt6aJGtfZ39jqTgs7G73mT90ZO9NqrdmNbe50w2Odw2Srz6cLF40F5WiUb0TkEHWd8PXOAOxG6354qgfoTbXFIruwGc2t1QgeHCD7cu50YO9YLzQnGpQpWtIN5Q+G9u4ETCDZ+oa822oFHm+t/aq6RvZuBbzjt+lL3auWOV3Bva1MRfr4Trly/R7VMzmEcfSzcUeuyGOhspCVai2dW9RRxmfTebkL+Z3ccTG/Eyo3y/VsYMNcu1nbkFnN7nBulRH0g8zeGN2p3tA2jiFvnRnDtm13qh+cndYANHkxG3fuZHmrVCqxHlWpmpSMO1EaFaS/tWj9qkJ6P4+LkxK7KbWaeuBXKyVnvtjqRn2hh51Nu+Zt9R7DOEZ3fmMrW62hbnQjCB3D4zSjAviy+HQOWmSXF7W5yquNTJk+Uwc4bUvvTNTmpmOwugnlkZ78CGkU3wpcmLsA+w4/Qtsplk/+nq98rA9l5FV4RZvzi4N+JZEzZjSsB5fv3rWDNds2Wu+XT7ZvrSD9nFuhHpqCbrvhja3P9ENnozf0QN+zUy10+BtbObihw2o1K3TmJqPDXsdYj4L0Nyt2BdCZFjsM8D0vpW+QToE9lWHf5TiHQn90AX2CuSDb2aBhTV2YcwnofVoGgr3vz5aj1IBZozyPBewzTuQfmOOB81YAbXuLXv2ANhznhUB5BNDhZP7cTC2CtSbzQdRZe14B80I2FR7vFXo+7x1+Zu/wI1rbf3/9Ql1Wph6vzdohkp3HnTtKX3jWdxv19aZtUyd8qqw7d4N2zQrdGTt35h5zY3TnruFtHKMVQvzm3FA3ZNYNVRbodiftHxYzgfEtxiq2+zYoOWO+yug3ftLugfS9ucoRm4Q2X0Q2iXZVFmI7AdTPgQ4NdHtsm4h0fqIjHiId0ZhgGwqtZ6vYluARfZ7BOn7K1gFtCJTtwXvGNpK+fwLHxzaPfaT7G4l3IhtGbI84IDtI1nzNiT6P7QraTOa1vcy1kV1kHz8/YZGdBoxBP69s1ZqHbBdVZO+A+v3BI/PHtokOsXHg9URjg3lR63DwXGibkEbZgDTynPD8c9G6yBky5Az1vcxT9pg9siUcvXOHbLwQXp65n3pXtDediT6fRPsAbReGSa2lw8V74LCRzQuc8SGCv300fvyckHpuB+Cm3UvsMz6PzOdYteYJsb3LTNioInw5ODGMHIiNCtvY9umxHSG2zU2YeN5qjEdGbGvUDDnGy4MS4SU8l/g8ObxvQmz3UQ4JnJxF57lTa85L4A7smYBsd9SezZBtL7YrIvtYdPa0je+Z57ENEdsHI1tdbNNDNkKwNh7ZI6O5iRS+cWptslVrCx6fKaIPtQU5s2gvyLj6DO8hgFu0hm3C/hjjEnVmDpe0f6rHZ3bQ4n3fYxtsT96R+cQ0abF73qa4OJxhdzxaG5xPhJfyRJvHc9LjOXGYNsT0F8FchBcx7E0mMVxQ7yPjG2p8DdJ82paocREszLLgOsFvnoNrltCIyIZeI74kJ4Y3zBtimzexGZu0HRnCuob2gsDrK/YE0C8nOeZcSdBFQCfbNY3Y3/kUP2KxXZ2mkSy+bwvXUkuPJ0/acF7Irq3F8LFDY6FnCZ4d4dSzz9MwplBr71Bw3on4RXTmPXnX7ski2Dstxr/kXhuygGGaAbJEO5YvKD4hp/BRhvwywjfyXrIfhG9h+NLnanyth3EEwcZ3vS+io+TcDxNCO8SYL0T06Tkaj8dI0GIR0WgCY50Ej6R8OHxiH6qRj3Wv7SM+RnwXgB9N2gagc1r0l/iPqHPmsP8gNS6CF3TuGhfjnYf3Afy+wHuAYFubQRggsMxFfBbx0C2GaxH+I7Dy9L0Uvj9Di2L6C+TUGC6r0bsYRGM6sey4T3zH9NaMeRPeIz3inUkeH/u/ydzw92jfzNiXWCP0LoJRNpK3IlnXSdCcrLnQ9ECvynw7wfOy4MxM8tra0RiYbqq03yieY+zHx/BFrclQKD9mphwkQh5+NP7kkOGPFFPwzdJ0D8u0FL10KP4d0dYTeORN9MMC+tewzALpfDumf7SswEb0ZX9StmLb1cx76HG4SOboyTzxiyL6IvME3o7lSQD7SG6l4JGCCecYJlLvpeQ+7I8lME7xoMgfGvMHneh98ySdTMiFvTN0A0xjUrQg3pfX6w2Iztfk+KxiHrTXe++G6wCOecDjEB9xaFzB/nKCE06KFhDeqcXxMoZ2RAsimot9720om6uxbpSSBXTE0yJ9GOIC4nUEX9E8yfj7iB++UKc0KX0Kyc/6PoJ3LsJhI4anpP472cawq8TyHcIJTLucLHnjnOdpfpGlhxySugI9twW0LbRr6kQ/OFAuakd2AiRHtY90S+3F8iKUSc6SF+GZAdmG6IxoHxCNEPF88HmrkJ9TthkC2xSd1yC/12tqyvahJb8bsX6LcELB+wn078mBHh/bQpjTa0zwZi6CxVgPYdtELovXGcXTYFopEDoOdH2alqRo5ZFOoc+179Mp5p2folOcDyP/Tp1Cj+kUp9Ny+yyLby7YLJtau6bGtqSEbBbR43N0+ZfZSeD8VUC7920iD8X20B2Sm80DFYcD9x/F/mh0bA/QpUTMX8C8WXwN/MW2KwXFDeG4IB3pLnu1Bt7XwWds7hKxQhD/J9S7FgKaD5DhTCLPgDnAd+gwLgbcO2G+6zfEV2O9qqYS/EnErrUNE58r2tt2j5xnFIu2x3QBnDkVJ6ZG+iT8PsfxUrU0f8fxVkkbLoAFRq11eEpvgXwE6DavpJUpuSqiy2JMs4kcR+AQ8DUPy8J432bR73sd8IJ9TO8Rbe/wsZ6kEDvQ7shWH9std5gfMCm7ebQ/EHci2hHJe3COtN6rzRKxfdvUesl3BtLvbBmSS+x3fIZbAvvUHFMyWWxrTO47lA/Y45g/gA/IZqztj+YI5iIQGgLWqce2YS6mpyrGtQU9z+P17mWmjWwaDMSFnsxFuNxL2BzI/nDthK2B5h9p3bcTxRjGsZZwLCYZuykn4yaj72AfvNR1+ZCgaxAWIT3gYtoA8ZtB+6Qy8F7AWw8dGl6e9q8cOhPdmODYxw7+51GxkSQGUkY0CswFju/RuCrGsAxlaDBXAf19M3pwgLhWhX8TawG8SK/KQNc7/ER8TM4vA07bhpmiU1q0/5qhHtB+Yfp6Um5P7C3ggyKiS+B7B/8luHts00dziHT4lLxAxu6ILxsrU3YgZ4LwLuPc2tVf4tw4LfFeAG9Apn8zuBU1jHsIfyYIlwxKVsFyQDLG2pno8D2TSRvNi1drHQH9M7dqzWRiX1v6HPCzBoqXfuL5LF6Y4T+ebJM2iQ6eW+T3TceGp87OjGEZnhXhE4uE3AltlpSvMb5XofxXKuEzhwRfMFRKJ4z1fS3mDbtoTvG4e0R7lV27l5CbY98gsnfwUZx2D8NWzUv6RJEORHydRE7E12U2g+bz0Xsoe3c7wnUg70J5UUyd806l4vXxXvDPwWqS71C23N5T8AlhahfZ4OB5y7SOBWgTh/dEyLaDJeW12FeG9oTYFbCNkKXwl/YFxPcasQ1Cm5Gz0PC1DkvTKzAm5t0cJb8gGb3mpcZVyT6JCRsFZQMkMm8Knn7YGZ4h45wDl5l0kcLZLcGFlA30KTqW4GlZNjF9nqLfWB+E/A/LFCQXRcfxA+0E/mX5jQm/UvbaHvEQLCcQnkLz5BSN/wEyCoX77R5NB+l3Q1p8SPHvjDM4psGR7AD3MKfF/wJazOgJv2wqTiWJK0/KDknYmKSffRZf6efPwNuM9TiR3k5oVQbvSMt/OQ/57XkIpF97vZfWhSK/FhVrQOscEQ1/K72cwJaIdTN8xuo+hiEV67JarNdm0NCYzsuHY9pB5r/YxTrZm9srIP+CNpK5Sengk8mRDZrGW4ibKkvzldg3Gdnake5+5HNTs3RTSo86trOn7YTRORMbQ2RDmFC0Q2aesL2TM4zsGnSeqVZNwmGMC+aTNA36ZI5tGBR/WIhJXpuhW9Yif3Rs/4J0USVny1ByS5KmzaDMTHRhjrIts/osOmuCP1zMD+X9MbzBZ2k/DG2PoMeJ/TUG2Zsj2BWTcgKC90i3x7iShKkFFYMpp8bF9oNI70fwDnFyFo9J8ZHIHkvR6Uj+RHiyOPINY7p/oNadJf9Rckna/7FgE367pJ8ztmO8bKxsn2dkb5sc4Wbs+yY+9gWbsnccknublBnPeJ6l5NTsPYpt6TuN2MXT+37sa3liPHlyFDtM4yFFW7SjGJkEHG3bKZuytqftYgshbQND9tCEfZueJ9+uolgBHPsiQF81oodAbuD0I3k+sQdgrsf06SAfxfHoh0XSDpukJ4k9QThG9mWxx/SVwfDHxvEwcX5/jE+0bkbyy7V9Ps7vNk4HyUPIdgp9jIT+tFGNAOw3xHULoM3ewbznyNYXxb/EMhKgw5lzxXwyH+dHjZMRl0nxcvg8m9QPVML7CE86RPw/kollJql/ALpv4nkuDv8amId67fueRTshG2fF5cF9ZZHPBOYDoPi2fZp3qPReJPWnJP/MyENI+mPbcTwc4L3gOV7vPac/TtL+cY7yv8a+3lh+pcen+Xgsb8Yy3Q7zTZGSVcVIv4jqwaj4rDN5M37PsfxxtJeGnI7rPtq/BH+NdHuUm9Y+kgvT8eadpJ0iIXck7IbbpO9LxvFYMC8JjTWn9cQ3l00S+mBGjG1aB+bQXBcT/aBBnTb+h220RzJ+pJe/w747T9qd9MMExwObMJaqXVNQDCCM6ZqgGKyE/hDH+Uc66pEOm3VmnhjjwKm4XfrcFzu8L5k0DevA8XuyfXg7sofZPsJ8nF94HAbJ/DKOkVApuwYdxwVjNXbI1wo+/4p8Nx/n6XGO43nbKVsG5UfZ0bmukZ5/oGPlqHwKg6p9FstzkN/9O2AejPHeZ7GYPJOnDvdV70G5MrKhtknsTcw79vReJH0anbQ/JFtmj3yLizj2ENasS+RCn7KpZ+XyMzhOjfZb7iMYosZ/wzjOQ8wHUz5c9J4jX9DxXirbRGz+sT9JTPLXyH8I19M2jvxVSRkhjv3Psqck5Kgjv0AV5zXGutFR7NRPk80gDAG41/C7HU6tTXCMl8MjXxGK22kjuKD/8dg2zRLaQmQ7KDfNF7l8l8t3+Ti5fJePk8t3uXyXy3f/avmO8odT8WtKVtxSqv5Dwr4nINkBnDfM/9mhPA3w3RGQfJYV7yKnakGk/ewoJwTALcm5B7JOLKd5KP4OyacistHS/7wtLQtqsQwIZFEg23JaKmaEjnHJjtdaJOMeSMxWOgYzjz38t8YeZvi6j3LraXqSx/D9a2P4nowDfw5OnojxmHDH9OEp/0o679M5Y38S+h0T69RRXRE6foPE1pH18HrviJ8k+U1yv6m1kLgx2paA8vLjOmaLLH31nFopeZxJPs6v4XPP40x+y3HyOJM8ziSPM8njTN7Cl/F8jTZa3438C1n1JhK6AzyHeJ92apwjHsfCp2tp0XronMjtsEY0rTPv0L9IV4/04gw/iKAn7BCZ+eX0vNM569wZukDivLEOgvPuF0JaHoQ1CSm7RWatwIRfRUnqFjWF1rvElMybUffvKCcnVUssyuPJPovcF5OPk/ti8nFyX0zui8l9Mf95X8yPjrV5R/n0ebvqDOpIqTWn8v/IPI9qhtNyzw/zEcU4CmXhyJcV1xI7p951wq4Y5dVucR35c/aNgq1OtPa4li8te3ZSdlaPPZYz03WyErXVdrRPKl3PoB3FX0Wwk2F/Pa4Lf9rvF8vRGTjCt2Oak6EHRjb3SN9A+l5mXad/ha0qH+fpcXSUO7xFeGDu4/E6QqKO6Qw+B/sKAzr5C8o5+ThPj3PKRhf1WMI2utiHNFdSdlgt8t0/1V+JyM9IvvhXwHxks37Hs6DqJSgJW55Gy6PQd7mgeOziqN5TXDc0snNm1EiJ8uAzdKRTtTjBc29X3yquc0yPn+gfE8eK7Gn5nsSXENmT+CoXcf/5ObGPZ8Xl4Pcc1zhI7+Wb1xFIzoOqQ5Zlv0rY4TJ8tDUH1zChziCKlchl499ANqZrqjwb4058ZMkeDpEdehv1xED9EHY6qvW7R7XLz60dfKKP0eGINvwqNW5wLAj17DzqefZ0DRqiK2A5nPIf0fAI+QCunUR4QvRZJ/Mg31HORFzHHfFJlsRv6fvIr0bXgYc8Kq4Vj2omR/f0qJgPZKth4jp/8OxxDxAN91TwztPVYV+9c+ISYQ+QnRbFY6npuBI07zNiRnS4DhIr4myPebeDbSXv8du5/lrM3yO7C+GzzrP2Jr1mZtuZjviciXtwQRkE296izxgXTRZ/x/QFXsM1/QHOmbu4DwBdv0/GMYhQ7iA2NgSb8T27BM2G6+7gGr/a5ITPkj+P5y1eavsRSU13dL+cln/4dkLfPhVvuzgrD4iqX75P+55wvX6Ai2CufNTfDNKIiIZRtRFVDMu/7nkimfe8muzvee8b2zrfNH4Axh2nbU3J/lEv6CeVkt3juOijmGi4LxEMJWqw77Ftiv77k/pXOId0PAes8fB2tnGq7lvEG+n+DhzyuUMdVFDPrFUO+3a+vp5oXov6XxODjGEGw/9TdZDzWvT/mhyEZ+ofTybfV2s8M/YO6K5sMr6R0Lg3t508URPcFKha4PuzYR/al3LY//fDvjp5tl8IFQNxFp6c8DFTNrjX8GAUA5Dz4H8BD14cTsWCwLoSMB5hkRw/on3Evk7bfNP2UI3KEcrqn0Xe/+LeYaSuBu5bS3AvyxZ33nlA/ajmRHZ84idBdga4R3ttL7NabJs44TP4Hpsescu+dX82U0zEulTpOtHHPYmimsyYDsHzhnog1lvnC5pWkbOg9Meoxzy2kWGfU4T3Cll7dI5UfDx15sSPDuAkgtWsetMwVgXzYHI2OMbKjPW5g0rZuc7yE+zPzBHOxqFX5nAl8+p+tD3uZ9r4jvOQdBT3nvDjwT6tv9hvPy//5geeCbEvvXAfvif3hbK3ncp5wfkeea6Lmsp1QfM7shdH+/Vcbgt6/iU5LVCfekkuy1PrOsf/Gcf3op7zLLZDslr1iBeIMMdgT/GEnA/kfCDnAzkfyPnAD+QDTuz/hzEhT8UDnUNzozzkHfoHe9timk3sbcTmBn1/DPL1afvkdXL/yefY+Hcyfvovuf/U80fPUb4kouNAmEd7Ptcm58X3q2fWWszEy9fGLMd631z7pWjwq397fdwtp1XldP4Np/16v/20eNMfeCaEh750H74n1nOvPhvjaQpZsmEe2xnZdFIxnaZwvmz+shhOlEP24tjNt9ZVYP8/DKtAX2GhfXGP9RVCX/b49/g6rd9kP9fL1H/ov+T+U88fP9eL/ib0qNhOeizvxXLbEa7RPDvjc2YfQyqfH/LJiTaT9zo8H8g/GRgj1JN3+kGbgPmpSL4mvrMTcUWTfUq2S8S+oNhNcN1j1BqKTyTj6gePjmGNc1EjeZa2BXu0/RrFS1XhHA+4RlTahk7TEyKP4RrSsY1Wi+dJ5peKCTzyGSZpGtVvMZY1FRRfWMXxq0B2jPcwZadPy/CwNoOAnnMmKAYSx37MgQyk8HoVyDAqjgdN+CSYlMx4QHGymgDXdnCwHkLimbBOEn3GdC+Kc/KwvmLCHNs21KcX+Jmor+Ce9rkh+j4h/dF3OC6Mi+8hObTYTzlDeKrt4V5B2IngcL6Y6DD2U43Wrs3QfgC8i+FVJrCAr5+KK674an0NzhzDJJClTRxPTMZS4z2PYXdLYKNvsZLa3GyGnLgcct2Zqogf+6zeNeqS0plVNk6/MrT6lYXT7wYGX2EGtvTgHVbD0WH3MLC3H9Taqb8VQTM6W82oT3W7s3UbltTvVcKBvWPcvloc2vWtzUort3bHuGEr1DmT0WYM4867sxujO9NCbePYralWZfau4U71mrp15yavHVq+2hCnQ9ssDm3pweWkhTOrPHoNa+/0u6shJxSj+XJioDa7otcwi8ZCGptsXesz3aratLZuo864xmo42ncPbr8zGR26oRM6vGt09jdGN9Qb6kZvqHtnz06dUNneGK1ADxVGm1dC3fAO2qzS6JiB1jXB2Thc25js2oa6Bzijzx2xXVNEba7yakMP3Zomalxnf2OrOy3sbPSaP3Vn7EyrtWY3trnTDY91DpOtPp8u3J7MunM3aNes0J2xc2fuMTdGd+4a3sYxWqG+Z6ca54a6IbNuqLIAPm+4+nbQk/au7e/dvn4AZ3TDdwOP786dvh6ozU3HYHUTx54/Ov3K6oZvBS7fCjxeB3v26Desg9/Qpx5nTuDZ7O+K/R46/46tz91+hbkxrQeHkxYDW1y2g81yFAbbfq9SG3Ii49oic2PugmHoM4PaaqjXJqxeZyYdTnrwG9aDX2XNUb8StIPN1GtW1gNbn/qN4HE4k754nPTQ71Usj7P2N2Z9CcZqB5vmcM/e+c3u9sbW1wMbjFHe3czrfr9XKamhPvWaXdYLrYU6vyN7zrdr6vam2gLvGA/szqw9a924/cp6yC82Flhjla14TXl2U22xXriYtWfqc/sB7oXz6IPfe2pxtG9t3H73bsjB8ZtdqwPu2XqhxAxZaePYq0dvpha13nbmNVuPfkMaD+3gYcirs/ZcWatLaz+sqkV1Jk29xuLRC62lF1oHj4P7wbh9nXG4+sE1pKnXlKUeZ22HDUm8scCZdjadfmXbb5pbraZyQ84NPc5iPhoVzzfkrTZ31wObXfk1Zq9bO1aryXt9CWGhBmDBbNSZQY15tPp64C21Ry8MmIG9+eLYwcMN0w08bsMMefnR5cobr9maOnx35XDmo8dttjd9/9ELNwevUZ+7Peme7KvD7Vbw/LlN4DV2j6MeOx82gmC47DwOyNz7cA6HaN62NB+wlanfmEg3rHVw+63DDd9a+Y3gfhDWV8OZpLh9/d5vSNsbzn+86Vf2jq0zA1sPbnj93quy/JBv3Xt8ZQrmF70ngpUn5wf32NtLmyGn33ss2adW4FmQXkgu39o6exWdVV3aOv3WdNjXZu3levb3DJydulbD+tYD57iIxjXBuDcmvL5Ww91qaAeMOr+baXMIR/B98AzQ+UOY9/bSftDvrgbcajqwhcduwzoM+O6jV5WWwz279cL63G8EYM8PA17e+Jy0H/D61gF78dSeZ+wFhOum9gj3n9fAnB7d0AU0EODCVp1tZ15o7axmsHV7alEN/b3XgPfBPesAuLTguUHc+VlwpC6ZtRpOA8fuBgDXRvtWxeH0wGt2Nl1bnA+57moYerN2sJ65/GrlVVv+TbWVoDHqfDVUF/7jjT1l/KYcv/+gPGi9lj/ubWdOKC1GYB9mLSlBB3gZwoLHd6d+0zr0Of3RbZiz9lzdatXtbNCwpm7D2qvzVUld6I/DZResY0P21d63Mulge1+ZDxr1PcTpvsW4M0ZQA2atLqxHdwafCx17d3B7cD2202+JaB3SfmD7q+EsNe9QZIeNnTcE8LrUGaffZT1W2gA+4dh+AGATnnlEp+pfEJ2S1+qysh/y3cc+x66GobRX53dbMDbEDVbau30FwACAjaW3rMyjfaGvcWzgN6aPbpXgTDfwmtqsHWxKagj5OKChsfwx2858AnsLWhYBz4KxFLjv3TB4cBVpC/duqYExhiOExweHE1fDOvrs9jBd5PSHgb3Dn80JokP6fBgGa/w5UOvv8by8HdUURqvJW912BO3gCO/znhc832CnXn0zHTZ24wFnid7hbqs26g8ON330llpRqzPfs77tiflBWcLhWwGQzdza3UazWKnfA+fqroZNhMdqiOaG+Xcxi/epDX3l1lYL13anvr1jAO4N+5XpcLmYQNgxVgj24NjZMDbkK4EX1qE8C3AAwlNVbLv9KXMaBiENALLlFOFcne+Z9UrHYCQ1YKWb5no2DOsbRDfZx2HoP7oNiAsMkH3AexJyKJiHbTEOkikaA1tcRDL2Xi2qwab04+D0Bc8T2b4GZNXJQZ9PfiA+ZT8PZVauvh7WAT8JDu25PHFscT5oSHsA3/3vWp/8FB7NvdCa+g1r0Z4xu36f9cG5umGw9iH9v5vhuW29OtB3Vlny6MThgkU77AZuWGeHze7Y4aSN16g/jHoVCDttyId1OPYJGKN1IADvEJ5uFtbeg7QfyjXgettgJcM0d+Ouos4gPW/UIQza+1bNn222naBe7+zLnM/UKx2z3rg5uI8ds97tGsys32fWo33rwbHZAK2N6GCn3wHkHhfhTElduKth2P3oNcE8xQMYw+Y3P5lGZz+vNSc7vSZvtZoVtmsa167+bF6Caai9W/e5TTDqa0WtWpkOQ/1uyLcO7XnF/571aSfWh+BX37t2nXHtTvHGqPtjiwHnSvR5SF/h3IBuAmA5UyauzAFNdxtW6PSttV+X5kOO3Tq2KBI9HckWcOxsGAulrdtvYZkJ0GcAT52HDrd7xLpaNq2F8mJ3CuWHYD3r8M69p7S6XVN71Jc+gPNKd1bmhky9YpompOf93nYG5eW6BPXoPv8LyL2QZwDdCegk3Tuwzp+uP+2hbPbocJsD4IujfcsG8yG8FerXIXlWXA33EqfZLSDL7cB6ehzgveAs/WAYWvuBDfUNw2tYc0QzgNxXJ3w3pyE5DXkXGmKEluBXn+aVBtf64toA9tWiza9nkZ48W82GnLQG8NzF/DQhHy5Zf4x4Z44bOW78drjR7bf2z+hFH51wFTiARyEeYBI+/HcM3zdgnCEPZUIFwezd87w4x50cd35j3DlLNl1Is0FozX1iGwsID1K/RLLZYlP3lq1HqM8tsCw7e15nG1usNLYYmq9BO6a6ZCW1vilRfjSa36G9ZbGvzIxsbYDvlQE8fJzJp/7SNiFRq/nzscVMiE7cRjYeaN9p1ya7dk3btWuTjX6YiPqMYZxQO9zY9dANnY1Wc4O2MQ1d25q7c4ft9ypw79ux7juhbTntIJrvg0t05wStqrBeA+ydCdax8DiLUZtroV1TBO2gCO0qw7drC+7G6M6cg7ZxbDd0Z8xWD02x3XAD19ZDFEeDfH76YbLXqnLC/6TWFE6fLwTN8ARtLk8yYUrJgsHnfXNqc9PsWqh2lFp9vf+oFUqhu9QDv8ZsW9hP8dFQ2dYv5CtqIZ2iA/Scj72f7isJI7+IwUL7IrL/rL+0ZxWwzydslWhv23OVVRvxeto/3/czIb7D9lyexGtDtlO1mYaDu5/nMzzPD/0S/7GkNtd7rSYjGsek/DPGCvKKYSOYY3va42CpPw7n64nDTacexBuW9RvOpl1nJl1bCtvBBvllLGZihfX9yFgNDb61crngoW8xk+HSWg/luwmMu2gyE7VaGY64mIYl+AGyKybtwWfFXDwTi0HZaz82xNWwJpz993n76pM8APkFyHxO2U0b2A8wX70lv55Ae6mxiu3/DYpPz1fYTioGo2aH+A8oPtjy1fpmqO3lPTy7OuuPe5WneSaTlCMBP3/pfpO/x3LeSZ574u8Zctmz8CKn4OBI3krz9jfy3zzD62ndJCPOp9+rDO3D98Rf1f1+n5nkePor4am+HvJ6ZlzX25w3WB9cd/yX/GtMGb9ZkcYWC2lC2+jE4+7lA46v2mmzp2swtmtqKj47kfuzi+dFYkI7ZFwe9uWNejBFuWAvjN/UcD37KK+HxJXuk7UlXhKzStUGPKoB4rw8ZrX6gpjVg4bq14A9o84X0Ow4VlebaHDOcY1TfZaoMUDlO6mo9lBVPuD6ob9obdG3if/s9yolbS5vMbzH8XwoFqoIfZeN3crhEN294VaHISeU1IZ+5/RbB7ffkfx+N7wxpr5ad6feclG0GRyPErC+2lzPUCyeyjgHTXQOnb3TY/ZtwzvcGN2FYygbx1AO7ozhtJq5d+eaoM3rC7ehzMYdWmaSJzbLTEb8hvGWVqDWVABPe61WgXqs32yxbq9SSsccqvXsmMOsWBtI79PyYK/yAnmQlYB8QOYCZcFeJZYFwfgs3KMJtUdAP5+MOHc6bOqBqqwMgxEmo31rBe1X84mgGZODZkyEG8MT2oaz0RutubZnp27ohjeGzLnGQnBDK3A4h9N7Lak6q5TUMFio87uZ3tAObVtjtFDZaPMFr+0Zxm0ouxtb2Wmcs9HnMquFzqFdU3duoztVl8zf415l2O+zOa37j9E6EveOa4bvUZ4iymvB+SGEtuE8YHQvHVOv4zxlElOP4uxJPX4T/o5j6XHdMBPnSHYEEkOv7XHeCspdAfrdEJ4vgkEO0NRkzoe3x3uxhTSQwCqBA+sMuf27bF2KoB88xjXk7Slbl8O5C+2wOLg1dePMlb1bZRidq4c3trrVQnXjGgqrH6x5uyZz7UY3eEtbF4rp7q6GIVgT0FWDtd9vBWqtLvVzHP8dcJxP7COqGQ/g/21ww2IwDsR/yb9Bs8t4TVbqd1gLwZMV6bZ/W8/rtliH3buhwrjG4uDwrF+JYv5YqENA/SFURa1m7tyau7gxJrxWMzd6Q2GcPTvVapXZjWGKbqjw+lzZOvPuvG0xCtQZOn6kM1RtSmeYBNF8h6FZkR8/WP3HDxt5q1RqdYw7VivweGvty82r+4lcqciKZth1xuGmgavoj74tMnKnI8sdVh9y3ZUbBunrltfUA2/ZTV1fUdcDRe7K4P/Yq6JQkydKw+O7+4EtLmtVR241XrjujtytPn5YVTpK9aq4BePWr4p3stxR5EqnC21esvzXXxd/XJy47a+L229/fL1YDsLRxfVFeLec3PnDiz8uNvsVuKC3/+l1bv6pVS7+uAhHm8HF9dcLc+UPNqP2ajO7W64vri8+ff38wDC8t5wF8MOo8NLvzI4VGHY89P2SJH27vfjjYjwLNqN7MKPB6tM/M/96IPi8PxS9y5JQ8i8F3hMvB2PJuxTEgeePRU8YcyJ48Gghd6vR/QBM9eKazHw5yl7gA/wZruj/1qNN4es5Ly2wxaJUZiWOK5346I/Gg4dg8493F64Gy33h79EquNtfGqP15lJerQpXg9Xs6n40uR+t17O75dVmtN54g/WoUPj6sd0zCmyBPX0P2J//Xd/Cv7LnjVabS2Xp3fmz5eT60+QwW90WqnfLzWi5ubwZLSeb6fUnoVgqF+PLxn41uv40WK2CmQc36mq+vlveFsz16P5SnoyWm+tPjbvL6WazuvSC2Wi5uWL/ZG9vC18/X3iD1ebhfuR/vriOF/zH54vBavXPDFz9fJFa7eeLPz5fPNzP4G9Zq4I3gJf9cz/68vni+utnAHjTOzQa2BB4x+r+bnP3TziY392Dl8dXZsvoysN98PRrHu6Df1aD+0G4Ri/6H7z988U3MIXRwB/do+upjf18cf3p8wXY3M8Xt398vkhuMPpVlLjkj2Cb0U/prUb3xduN7jre8s8AVT9fDO/8PZzn18+fP1/MfPDfa/AfcVwclcXx+NIbloRLwRuVLgfcuHQ54MdjkRHHQ1EQwX1/gP/gEyLPpk+J3Hb/sKRv88Y+L/E+dzlkOf9SKA3Gl0OGG16OWLEkemWmWPZH8bOjNRzoGk50vRlsHtb/eHfojmuOYeBdeJ+j+xL79RnuxefjPfv/Ct50cL8ebf562Iwvy+CWWzicNbjfx4+172eT2RL++g3+DDePrAa873O0iZ/JdfhB8HjJE7jBJSeV+EvBH7CXA5YfXxYZkRvzZY71/QG59xv47zJaN15pOFqvB5NR9Lbodxp0wY8MfRWCL7yKJjy5X3n/RDuZGAeA8T+ACPyzGmym0e9XAJLWV/ezzWwxH8yWV7XRerG5W11N7i5X9wNvM/NGV+vF6nJ7d79Yrwbe6GqBTh+DWuY38LJ19Orwzlv8sLdegbfF794QwIDQs9ms0BEgpEV0Y71CeEvDHIa4BF4/j5tpOIOoCmEM3o7hKwsxV4M1nPP1eBCsR98AgACSkwIORG+O6BlzRM8AOBBg+BI/FoNH8hJFMuFFf7QCNO7T18+QQ8IfMI+Ev2/QDnyO+SG8DFg+2qr6bOm3l4Trw1s/3cJ7EKtGI2JmfQ4lKngz/zrFGtGAmROM2Dj8Bc/mz9oIne2JFYA98wdwCZ8+X1x9uLmadLSK3JmaUQJbp3k1mcgVZaJUe2anUpPlSoWJnBqVCvhOlEH8varECadIwNNr0bNmfesBIa+zBdctc7GA16sLGLSv42RR/B5oRO65faVyJYBxpioQ2MzQOnhy82oO74HPwXvgOAr5rm/RO7qK268c5PGHniwrzY69W/c4S/S2zasAPh8l81SuRPAOqz3kArjuGZwvCtaVxx/uZFlRoJGro2hARBw8fqgBAfl4nl6lssDJXDK4V/nbREljOkx4nSgKfW1gi+RazbJaGpp3YJmLXQcnU1auBEeWO67q2vWF21crVwKQTrvVIdcV4f2yPL0STEXuKF2olPA644XBg8uyB7/ZWg1DD4+xBfsk168+tCqyUqkscGLgpHk1m8iVmgzXLdc+fmjKE6V6JUxkOH7j/mq2hbBxfAYT5W8TJ/d1OGnhduBaGj2c2CePP/wN9q4TSosR3DtFJ/cbtnXwuPoS7em5+yTL6uOHrjxRKgq78Ye2tHDt3eFm0Q28hvXgNqwHh19UrkRVlscf2rIsf7gSmJrcUf7uNqyta4sL1xbno07zao4UGcWAyhGcA3XGimLYFuN0mldTcJ8CA4kqVyJUUPpXQrkqd5SWzbLDft9aDZcdQR5/6IA5y7K8uBI1cB5G6jyG/T7+jGGQ7Lk6/rCEawo2/t/LRGDLg2FL88G2efVFlitXoiPLNeMqALj6+MEG85Q7fhTwh+G+7dhsgD/fDGxxgT/DoD55/MEBi7gS51cBPFdJH3L6fZ/Vt66tG0CpG9pgreD87ypVJQ4AlMcfGgCXogDfbfNqKcsVmW0FXqd5tZzgz9vm1SqJQyrYm05fP7j9FnICbptXd5MMmlKHBnWE0xGO11lAl+Txh1CWFbULnWEwkRLCtFydX4VbtSJ3g2G/t0om+S/gHMZkzvL4gyfLzatwIsvNxw+uvFWqVyLAKTXxbnLm1YkMcWAJ6aNPcGAnjz+MwF7IHTdBu6oBSgg1UJIooovRNZjgDq/JrNUzEI1oAdw3G/W9Y7MHvMc0Ds2SOCTLN48fpgCHmzY0nGE8949gx+S7+06/RcbQ5PGHCYRfsVyTOzdXd2AeHaVuhfW1b5sViPNy5ctVUQM4o/aaXcaro32+KgL65lSqAU6QZWAyLzozipbAM1Vaj24T0feaRe5nwbymLme+ZJ9kuVq6WsG93yE4pej+VdFB50a9L0l/ZflqyvWvBLXSqlmhHpqCbrvhja3P9ENnozf0ABaLCB3+xlYObuiwWs0KnbnJ6J1mebct3TzI6b/KxyxHrdyRspLWKo3nAtAg3FU+mmynAuiu3J08F+AGzuwLgImaknLCdJROphNmskoE/sjd1onAH+VjVgCR3OnCAKIalaRtAHrLd+/kTodp10xGHgs9abmeOVx96zetvWt3Zu15IsgPFQOoS8hhc6ogwNLaD3pnFH6AiauQ/4690NrB4OSQSqRe+HULjhclaE8HKEF7RxeigLwFF6Lw+601TBZ6pljIR66+9WpsxnlHBSZIwQBJq+PCCVQAISnwAM8UyEyc9ZMD+HQy77j4wk8MarzhEN8g+3QUVDhDZ9XnK1MvrG+8vVoc7dUvJFEf4AD4nBlYM9vOho1gM0DFHPZ6L0rM6vxayWI4+BQ6N2Exlr3br0cJA3HxjVQQ4s8tmgETgJKFHepzh7O2fpWtD0PAM4IHdw8TaSFNgYUbArDf6qZj++A9MPmwy5U30Khejd+v9YQdTCKvtmZA/oXnjYpcEDpw8KowUfzgN+qM39fHgIa5PbWozeXtTbV1h+VoWCDhyAk+Xw0hjTrLkT+Z9XvbWdeWQvQcdkzD9UDnNVwHcWqn5w2DHeu7B1hYIiqQEfFIUiDiuGBONatgTkVKFJjokUISkFdG+0JfG9oWM2hIC4IzbsPakoStPEE/T9D/tRL0YeDp+YnLfb/VMeuVj3ky/s+eZ57w9PpkQaqIis79zVeqpmnVbg4uD2C7YzqPeihVOla9/hEWYtrlxYLyYkG/WrGg2rAhIV3tzYqrsD4ptNbnoO409n4BuZcUrvsVCmAQ/SkqhMGThEk38JY64a1Av36Ing2Dxxve2TmhxTiGAtYDbYfwLDnrwe23VlDfCPSta6Mif9BGamO+m9OQnIb8vIJjTyTWtx6H3DaZTE/JhzDxF/DOHDdy3Pj9cKPuLZ/QzX9E0nyOOznu/J64c5Zs+kQxIyKbPfQYa++F0j5Z2OhZnU3q93EBtaiQMCyyOxt35Io8FioLWalm+HjGZyfayF1Y/FbuuB+9MFgObKFys4wSjV5a0GE27tzJMO4hTvasVE2KF0+URs06ShBYvbIYRoPYn27s7yiG0elCvZyac4uGh6pFJQh0upCOJtfk4gSB/odKcUcVw39pwtHTBTCSxTIqmfCeiR/P+Rd78mTE+HULN0t4vW9LDuNC6nKIfSiSNjfDX8ePpYW/VNH0vRv5bD7asEh41DhAbYB9zraj4r0tanNzQq2n+PPXUyF+zaJWrURrQ3ZdbZKGg59XwEMniclZBc+LNucXB/2Kr9YTfqeizZwodG6xvtpkJqODutWquNDGmU0bMhMoe5X6kHOKNk5m7PcqkE63gw2m06Lf71UefHu3rs5QUsq4J0+eLUSUF1X4oUUVUDHEjKSygJnY7Bo17KnK23MayKRk3HOS6s7hpUgGfWmRhTNkxufgRaum4OBIFkw1unkr39IzjW8ovel0IZP3TqLM8fSH4ikuLvd+531WYqBSvRKt0VURxqNqpAGTGVoHsEZ5/OEBxXPudKffnQ8a1qLDSexwieIiayb76DaCcGCnrlvWFvBYP3V/NYiv98xOBQbP1vpX92AlHZfEBmutibx4qUwtV5S/r4qLuty5ubrHIbFfJnJF7sj1CiwAIssw9PxUah3MC3h1xH0izQ4F3H/9HGfOkVS6V11BCXfsQPQZf/TtZBy/MB6OSyOBuxTGwvBSGHLe5WA4YC65UXEgcMxYLPHc2TH7UfLdU8tHKXh4tSgJ75xJFOqyeqPUTiTgnZO1VDgrZ+FkGt47ZeqVReFNEvU+U6l6n6NkvVKZY16SDPZwP4vzfU4sM7o5SuGLMrtwTgoZoaEYJ1Oi2MyUKBbPInh2Fv9vsFr9dbwMAP1c8W48Xo82fzHRhWAWzjZ/cWJ0AQxTHaxHHweb6V/vm0+FXhjeeYv3flmURoVeeT/6AgDqr8n9yqNOOEqIjI7tf8eZZ4PV6llggZsa3cWJidyxjz8ndQydfPRihkpV/GLQaWWJTaGh4Udl2X3LzI1M56FGeY4wFzXKgaRSSaM7MtJJT2RFUq+Psul+dBancjeOn4IJdK/L8Fw+BMH7J2d+OR7mibRNOj/v6EeYp/cZZep9xmyV3ERYa2YiZMxGIzwDkkR0IDBjDssS5Bn4Dko2iOWFn38VSigMI47LfLH8S8wI8O1BEPyzGO3X10xhsPSmd/fra+b21etinniTdz8abEb+9SV7++02OlMso0UQAaYEefd1uqhARnZlAQDMNQC/eMAnASyW38gdAIr+1Ee7zRlAiFAEpl9G2CpvVVmW//oL42sO4zmM/5owrtzfvxLETyqDOcjnIP8rg3w1uKPUt7cE+tv/crmK6BsW6azR/Zre+8Fq9id6/M/Z3dUjOxxtBmz09N+zJaUxj5aj+1msmPRWIy8mBdpoM4hOJScOOXH4aTJfezgfeRsa6BPK9f+Gd3dBNFiNgGxaPvx2+w2zyxxlcpT5/VDmJSLkcxiDof1v5f7+7j4bdZ5iwTkq5aj0O6PSy0TTH4BMt09UIvtW+PQVr6sQzQ7ucMKjd/3G3jxwwhJT8r7dFtCZXRMvXrnMlnm2XL4slaXipTD0+MvBeDy+ZIojqTwejbxxUbwtgHO5JvOOzuE68tqhs4wXhDx118RLd85LCrHb6cTH7yiV2VCe9r9lu4RSDqGUO+gHO4N+uCvoyBGEnZSFwWp1hN9wW645sUBmeP3uMyygk7lmCniSkJYU6BN5z0k86at91uv6rfCVYxg4xNMe3JQX5Lag3I2vP0Gvx23BGtzvrz8hL8ftbQE5NJaFAlNgvhUKJ0kNxXzfkNB8J3nCjPXHvfkpBvqyeTMnRk8wTZrwvopJniLCkQqWIsK3hU+f+AIHgOH29lshh4X/Ciwo9/cZoMAyBU4EXFYqiAW2wKFvJQgfBaYg4u/gM1tgc4j5L0EMFKHfAmYQUyT/Rf8DzO/bt1swniTgJ/gCD+UxliuUxQLLcgWWYQpSqcCyxQLLsIUyB/+wLPi1VGCZMvoJPy/ANwpohFKJPClJBZYR0JMMUyiCqywagGXwAOhRlgePwV8ZpsAyYoFlOPz3nIfJrFn8ACtEU3/uYea5h0t8oVgGdxbJPvPRsgFBZwtFvDFF9CyYNXgLw4Pt4MsFpsAXCyL8nyDBDyz5UCwIYkEU4edSQRTgV64glcHmgdtEuJlwM9A/QSwIZXAnmB94poh/YuE/uOcc+F3kC8xt4TVA81pZKCX/pGuen1mm++IbLTQBkP36dXP/MCqAWXEMA3Q2+P0rPb3Cs9P79uIHvhXwi8DCCmRh39LfwY5BCbDQ6rX1o2Wfo21Fy/6ePftW+HT77du323Qt5V+yeUatGzqhw7tGZ39jdEO9oW70hrp39uzUCZXtjdEK9FBhtHkl1A3voE3kv37r+N1yqSSMGOZ0/O45ga/vFr8LJvF/s6V3/enreDALHu5HBfbb7a8GSc2rooAqksp/PQ8Nt38c+TFhg4l3tApAoIr8l+/8NmwYIO8kJeOJ1Ri8PdtiDJ6A1mJwC7EUg4vQSgzxIbIQ/9715Il1Ee2MQe76X3jnj4L1nwa2TcAxami5een5vPR8Xno+Lz2fl57PS8/npefz0vN56fm89Hxeej4vPZ+Xns9Lz+el5/PS83np+bz0fF56Pi89n5f3zMt75qXn89LzeYngnIbkpedz3Mhx4xfAjbz0fI47Oe7kpefz0vN56fm89Hxeej4vPZ+Xns9LWuel5/PS83np+RxP89LzP7H0PExOiSPQk3UtEvHnp3MacGmY9wjxzwvY5wXs8wL2eQH7vIB9XsA+L2D/OS9gn1c6zsvJ/Qrl5PIC9jmM/9thPC9gn4P8fwzk8wL2eQH7nDjkxCEvYJ+jTI4yeQH7HJV+9oxyVMoL2J9zJS9gnxewzwvY5wXs8xLU/+YS1HkB+xwW8gL2OcTkBezzAvZ5Afu8gP1PKGB/unjzcnL3J1IVu6P1Q7BJxs/+e8rd/+djhn/jovm/KfSmSuy/FQTe0hsKjVcX316vsh6RaUBwwMhDiRFZv+hflkuMeCkMBO9ywDDDS1EaD0pFlhkKngRIzfMq7ZH1LAJQDLEv/A7hmRsPhJHEZ1jNzpn4d1vNznnJiaB26uNrrGaFZ0LWXxOuLkrcm0SrE9g5JyQfgjyOXwfPpC184Of7hyX5+RzqhJ4ZrVeIptIhrzjglYS7wt8Toa6wJ8dzYa4XAPdgGCu8HYewwgBWFL4KZvo9XBuuIBXpCsaE1+kIVxjfmohuRbGtVPxq9Nx/pHHHe9LE1WAN2A8U7M4heckuH9efjojUqzt7PKUrxp08MvRFINlzXBFJ+JyElbxyoSxQ2lwRaEdQYcPqD7qdxwpBGeoMkQ7EwaslpFGhYSg1ESpvWLEqnVAl6XvK0bs5rD7Fw9L38eC+1BzEQpHobUfzgwphGV6OrrFMoUSUOw6oSUDhhLtQRFoqUT7jRZbIrIrwmUgJ5qNN4vAyTt2JZ4juFhgybmIeiWHZaMTse8iA+D4BLhv+ghVY/KoiOScRKetMuVDC58uxiTvL1J0sE+nsLHl/+k6xUCrjzRKPgKZIbkEKNxysRA9SLON5Axjk8LwZlqwI7hCDIZZnMcSefxIlqI0/d7JA52fw8vBtLEvsFkwxXjxlI8i8P1L1Uw9E8FeMXyrF18oYIQT0QoneIB6NUIRLxtgFTSLkDeguso3FYrw8LrGNPLZS8DwyzBRY9C6MbhJ70mgh8aftGYlJxpDIFDjyuhJ+3XkriLGDR+YVFhsoeBGaVrgEYOF3xRAS07SXYGARnymPrFQlivaIka2ITLnwFgeCjFSZ74uAFWETHJ6nceLd4RVCCzYFCmjb2QIrARABoADhk9oQaPsTC0IxQXvgX4baGkRKODZFktBndI5FfLoCQXSWeeGYXGR4FABZIuhEb94pUgMfiQkFeDQB3JC0EkNm9KNANozAu8DjDSP7hXeNpXcbGvroEeBSGWQYRFcJ2rDS+VhKXvUkrgonEI3Qh2KJnHgZDyhwFBPm488sofciBiAGAEGK1CfIPPwsYkMjOWyEsxz1IzrBUqFcpAywyRfRh3bqnEsitf7EIxDzuMg+il9NKCX5hv5GsJjmYpKYGqfMJy3cEgUnYoS5kDgl4SwWiI6grlQoSQWpjNAaT5ct0gxCLBIWc8QExXL6p5jvCs9xZkJiGSQJiBn2cOo4qJHPFwlPoyIgTyeFIraUEFfJe4svkJTA/wvkpAmJ48Q3AHhJPHFiidNCnxHt4Mk8+AQioC3inqFYKZqEqQjFEsXS+UKTWP5PCU1F7lmhScC7WMTerAL3AnL8MjDC0gC4CyKckDHVmGgXk1xHTBDRItbVIIKXMY0px4iToPsUrBT5l4lPReG9xKdnjuaXF58iuBFjT+oxnTit9tEUjXtyI55DVMTQBAi4YqzLs9AFyRPfIPQdRhewW1GCdEyEDkjshkQ8VhSxH1Jk0ADRdzZ6XuShWxINKMFPIrwK5sAVWDCUUODA2ZSFF12EqENkTw6df+yClkREcVlME/AN0a6Jkd4LiSlWXTnoWU3ZQYSESYEtcEJBiM0TjAi+nY3gFAfEw0sSbWbBhJ4B3KPMF9Dyyb/3fDH6/1hy5mLvOEM9ypAtOeZFxdhkg7eUEaOXFI9mwxD3OJHmkWEoFi7wvhO0jRz0LObt8KwQqMcUCsEreXtizqWCIAGMFAAKgKHB3CTKTIKOWooUCjrsIBKeBezAx2EI4EHhma0qUVcYPsbQggBxoYiRgoUIypYLnFAssBwPlC9JesoOxgsFsQxDBgT4vxIJJUCBAwxAPUGA48QnI2HAiJ7nhdfiAi/g4eOJifGg7wer8XtTpy+J1MA8ngreykgzSBHIeBNYcPhlgV4Wd0Tv4fZJaR4RncSzD6aZxdGTZJ/KP2InizwNGkX2tZAgcXDmAN7KAPBEsr84QCVC6yJ4iVDOfCBCWrJL8GYRRtZkvqD4hL26TFmXBfjSUprAQHNFiRLZMJFi0NlKMWcXSrEBAt/AksPnEDXjI4qEz14qRTI/IxJCI5SoETh0uxQLDkT1QuyKeoYpnTqW09TurR9K7zeUq7KOUaIFnPwcfsQ5CKX0vp86HYo8plh4kaInSBbNoO9lRGO5DKUrQW0FLiZf0TAUqXk71pNBNaLBEe2g7n0CNGlqmwPojwFQCsCymUV8KGX65pMwHN1/GpLPZxo5RLwnRIDD4ERakDs2AyRIyuskdjSExEZAQUnugCTxeAZnKR/0YN+rg6CXx1sglROaPU09U/t0SuAVKcpKhF4i9SWtI7R2zFCIg1WG8ktO5SVaIr1/36MsilKB54iVHXOilIyJllokRgyxmDjtohSRnCSAcLGVLNI1YhgpRi/jkospSTEtgDCDAPDcM0Y7Vop88pBxMzTVOnWMsVZzZOg65r8v1mfKr9ZnygmgTdDiTCUtMc0n7heT0sNTzzyn71HPMhRNEeODjZCIoV1LFI+RKPMFH71BKqf4TRaDKpWhgwA6j8psoQRNVsVyoVhMySuxgyiBdyUm4dUqSbGVIOWQiV6JV5SUCrFngmRXpDUzlD3ApzW8/KnXPAWxgoEWGo4Q2sg4ivI/RAGSqt9hNb/+U0kXjUTRVzGWVnDcEyJafGQnzgh4QrdI/K8JNnj2b7FR0imPLdgBEUwEczUpoVxx0WtiSUBIksvkaRxbJMXyqxVCLA9E47zWOcBzR0QbjpbkL/TCv4s9UCZ0rE6nSHjMMZIUXyjCiDsIwpF0+l1Mh+bYdCgCLegUkdpR4sEn/D9oOkiIOjnj/J3I5K//VM44c8aZM86ccb4V4yxKUWTND2Ga4Gq5IKAwwWIRDFOUwGWhhIzyEsVORTBh8gOLL+Encj77S9DHf+tTOZ/N+WzOZ3M++2Z8thRv0VHszu/GbyM3wFFIjZiKqqFd5Lkr8Ye4EjMd/Pk5/FpO/szfEq6WJ1J9YimRCoUrnp5iTKQETA5wPkYkrgpUXEAqSYgOCoz2hEwMHWD0aDL7JykDP5HgkwvLv/lTubCcC8u5sJwLy7+8N+dk6ugR9z0RTCdwUeQKy5LQdBxIUz5iac94iTCkgT9JK1bO+3Pe/7s8lfP+nPfnvD/n/b+0Q+ot+P4TLLYk0tOm4j+flAze1jSXCxO5MPHbP5ULE7kwkQsTuTDxZsLEe3rd/ntCRdLvl51smMzKwmMwuJwUrFYi4EoeL66rwbM/PlUqneoE68tImSlOSEAiJRbEpNDzM5pb4M2HJbBIyasncI4tSE/BPixrxJ+oWfuEdCWwBBWKTILUFiFN+s6LT5N+SMhFRMwQ/BZPkmGYvpggwAmq+zMOUIKVSZPU88kjlM6hl9JTZ4hYwjGGPwkaJA/vaEiA8SXYS4VQw2IyqZmDV38KcnDPlIt5kxu+g8e+ns2/Y7kZjhxZXCIG7kL831++QAtfPpljjwqy8GUqCCCjAAtfPpppXnDlJ4S6lPMCKz9j30+EtpRfWFAlrVMJHJSUOBrJv0vZycJhlNiPqP+TwAP0uBx4fhjwcCdJcmR1eAK6jrVPoqKeSaLz036nmlj8MZ6/rnYJ1qdTVUvQ+GfVK0EDfG+lEokna+LESHgllUKOl/oS9RZN8Ifrt2g5VBEQstNH5T/wZie0Ybyr2fpwvFlssqYHy2BBEgvRZbKd6H9YVXjKOsQ9aaRJn8P5noDYbPMeuuq7qrpJ4/jPnek7mpXfervQu89ZxYtsvtxJM4NY/tfZebm0jUIsP4O9Z1gpwAY8GxiWOcMnSAN2TUCLlAhXKDIJQoRoFkXdcyqUU6GcCuVU6FSIyvdQICBWljEREvmkUbIEr/OxYQ0RqvSdYpqARf9F9xzfn7iTGO5yspeTvZzs5WTvabKX4Uz/t5G/LIvF6WvHH9JmBcpzHjWjAS/EzeRKfNwNJdspl+gzE8MO7ltSEqLmYKifCgkJoLtuMbEhohQbI0grF560YYlMLhHunPMwmXXCcFY862HmuYejnqWkL4/IR8tGTeWKlLlJSBiMkKMHto/7Gd5FBjWTxG1rpIIYH3+JNKER8XfSmwhcOY6gYG4Ln1420O3tt8KP7DrOsgPRZ/zRcddxYTwcl0YCdymMheGlMOS8y8FwwFxyo+JA4JixWOK57+46fs5LCnVZvVFqJzqOn9NGu3BWc+Ks3uPeYD16pj05vOUVLcqFsii8TY9yb7DaPNyP/M8X12hjSmWOeb4X+cP9DDWzPrEoeBN44T/3oy+owXg42kzv0IgNxcjo4c0e9fBm4ZuCJ9/0/war1V/pKQIo5Yp34/F6tPmLwV+DWTjb/MWJ+CsYoDpYjz4ONtO/3rMFOHpdeOct3vtVuP83euH96AsAjL8m9ysPn1nwz2pwPwjX6ED+FzdFH6xWJ48abhv8lROjduYff2w3c3SS8IUM7mv/xSAdzqMF0if6/o3dv6Ua6KdQFzXFB+iLGuXHyIh+OUbIdOt8/AqERO/cxl+5G6O7YVP381r7Lx+C4C279H+JH8vo2w8vUTQEXvRHKwDMn75+vgDMBP6AGUqyC37ERBAEjzYDtF2wUTziivC+T18/x6yO8L4feAXyVYYRx2W+WP6hbwbcZxAE/yxG+/U1Uxgsvend/fqauX3xvJkTo3v3o8Fm5F9fsrffbuE5IKkBnRp4PeQ51ykilNX4H0kGACTQQJmHH0kU8Bdw0n/qo93mJGAAUPQHEDI+fb6Qt6osy3/9BaE+h68cvs6BL+X+/kzwqj5+WFU6SvWquJVlWa5fFe9kuaPk4JaD2/ngVg3usKj9fQB3i4Wnf4BA/c/qh4hPWJD8IW+jJEn8CYoM1uh+TfZzsJr9iR75c3Z39cgOR5sBC5/4e7bEWstoObqfIVGztxp5COW00WaAdzlHwP8aAj4rT7SH85G3IQAXqSz/G97dBfDBGgIdWt74dvsNsoAcPHPwfF9x5BR0Ykj7W7m/v7tPgulpNpKDbQ62P0qseXPAvaVfNt1sVp8vvn0rfPqR1nRwLhJT8o6t6eUyW+bZcvmyVJaKl8LQ4y8H4/H4kimOpPJ4NPLGRfG7rennvKQQm4hPfExDQBpKThrBC18bytN28kxDb9LOmzTz/lgr74828h7ZeLEfoTBYrY6QE+7JNScWyASv332CBXQq10wBTxISggJ9Hu85iSfdKc86Rr4VvnIMA4d42smSMqbeFpS78fUnaES9LViD+/31J2Q8vb0tQHvpslBgCsy3QuEkcaGY3RuQlleTIsTa3vltT7CzF8yTyRw3wchokvoqBnaKvEZqQIq83hY+feIL0FH7hFs2P+vf7qyV+/uMo34zR30OEb8dREBx9S1gAvEs8l/0P8Cbvn27BePlsUP/9tih10T83L5aVEmJJ18/X+CAD8HjJU/gBpecVOIvBX/AXg5YfnxZZERuzJc51vcHny++UbIMgNSvXzf3D6MCmAzHMEB5gt+/0rMqPDurby9+4FsBvwisp0DW8y39HWwUlMsKrV5bp1Z7juKDVvuKHfpW+HT7Lcffn4C/CP1gnSYOoCzEPxgYinAWXoY3RDgswjhohMMSrLIkoF9RJK8II2bxGHhcHlIDWCDiN4jXK5dKwohhji0M5wTCvdrCAF7yf7Old/3p63gwCx7uRwX2222OEq9HiVK0alhPq/DKYNFc3vh16BUgPyWcKiFIKIkA9XdC6doogh38iKgVJEQRtUJZFpiW8WAknHYAqJOAA+7BK+AzYulN4GV45+//nPk02Fx8+wO6nC+uP130Hz9s5K1SqdWtrduoM67VCjzeWvty8+p+IlcqsqIZdp1xuGngKvqjb4uM3OnIcofVh1x35YZB+rrlNfXAW3ZT11fU9UCRuzL4v+ZVUajIE6Uqy3/9dfHHSfsvdH+nvN8X1+/pjb74I/Z8v++bkCUOv299cf3pK/HOXFxn+2Yu/oCemYtr4pe5+AN6ZS6uv0Y+GfAZqqlLwqAuri8+3V78gT0FF9cXhK8MBJ/3h6J3WRJK/qXAe+LlYCx5l4I48Pyx6AljTsxSvcBggNuAoRC/ufgj9hRcXJP3/1kbeXf+6OIPaLy/uI79BAASsZcArttAv/8vvPNHwfpPA5shL/6AHgJwDB9uriYdrSJ3pqbb15kOVz+4nebVZCJXlIlS7ZmdSk2WKxVG37t2nXHtTqUCvrMYvPH3qqJPvWaX9UJrgcBTr0XPmvWtB0C0swXXLXOxgNerC3/vNXTd7Xfvhhx5z5Txm5We21cqVwIYZ6r6ze7WDK2DJzev5vAe+By8B46jkO/6Fr2jq7j9ykEef+jJstLs2Lt1j7NEb9u8CuDz9QeHmz56S61yJYJ3WO0hF8B1z+B82UeH24Dn72RZUaxmsHU7igYQaPD4oQbQ+3ieXqWyYAO/MX10ZXCv8rfZbD36DUl37NWjN1EU+trAFsm1mmW1NDTvwDIXu47Tb02Hfa1yJTiy3HFV164v3L5auRIA7narQ64rwvtleXolmIrcUbpDu761eZ3xwuDBZdnD/8/el3U3inNd/6C+KMAhXb40NsKQIAehAXQHyGUMgpDYiW1+/bcksONUpYZ+hrf7WV9d1KpgJg3nbJ0jib3FMujyphifcVDtNAOf/gicmes4dSlThmSxWX7abmbOYqbrPVs8/LFU0PHpZjPTz/eeP20P2ja+7YONe0cmqBRL2kfWtOaRrosXe7TkHj3Nvvxxp9ouaqb1WredC8/XY0b7wgLt0Ka/2k6zmf/6B5ptXMc19yJn05qzY39fI1l49IV79CWd1M4n25/Nvvyxms1mf3y6MRazyL1DHj1wZtec2dU6Wn6qBhh2cQP2Yxmu+th1MaNGGi0/leo6F5XCc51PtobX5NPN5/kscgNmmnmS0C5vo5vZlz8iVebZbFZ/skPVH/ir/siTZPx7tMFzm/tf/mh1neRe3LWB5BM1XMAut25eMJtW2WH56Wk2cz7Z6Wy2wJ+k8tXXP5gq5ywSjCdBn7Hpy2j3q5SZcvz7PmN2Pf6NC49Wsy9/pKoSn+zqk9T9OoW5BZ8TEx44g1gNSTlTdVX9/+jMXWXPoE4TVM6+/OEpX8JW8MQZNJQvtbOZMzMDWUTLT+1m/Puw/NS99yFftU2UwJ4ngaHKqq553HyAKQDZhUcGn774ODAVLs2+/NHMZq6PJsEhVe+ZzLRNz+bVp+bgOzMk8yTuTpyJE0+gbpP7Wpfhy7nMsy9/FGqEbDaz2fL1Dz47uPNPtvIp/927z30+38y0D7QaH8XZB46zL3+sVVvMIv4Ou+bSOeUT9IoZeMon/oCLl9/ky/m3mUljPGBEoHyfeOCUMrMf2/jah7bvfWg2u3/9o1Q+vGRmWYD96OfiG9shE3SKkuD8jHD25Y+Ntl/782IW3X96VOWIXEAbsBOMONrnZ87Tp9tQ+YwfL5FRgKGdP90qfEuduYRGmiCzMOAr98jQZ1dYovvUDV75csD3BT1fb6pyldwif6WdZrP5n5863fbHwU6vcP/TbTr029X73uPvbPYpAln36Y/5LEYl9KKee76ZnowJXIj6Hkd92pN9ylI7PRkGZKDiXmqmPWrCijifwmJlPqff/L+wkOQNMPMl+pJa033hgZd15D7EFj3k3tS+p0gWk2gfJc5hhjavaeJ095N3ffMqPNoLD5aFReazCEXYhETVZbZx03sLHLJ4+t6OJ+qZqEoTKGeR69xp/OpoYdHTPQEtVyEhCpb5yXxUNnrP4C5j9EXMPx/vK/chYrDiiWPcE/qSWtM6Y3Y7i1C7buRhUcPXvEUyb6M9Vjg6QY+ziBiwKm7g5rjILdtQz7+ng3+4HjgU3rFLLaB9+d7q+ty6cT495/P1KajSxDFEEkg+929DnForvDmusH+Cp8M2TZxDYsnarx63H7WXvz1sRRJ06vz32yHa3s8DXc9EtWns365PwX70w+1qG+j2VM8qhjHkSz7Y2XZVuTu/Hewsscwub6Ynv3o83s8Ds2gO29XW/35/zf2d39JTDqaHcXzertrd9m7r3/rbYKrKNI7T+veP2tyvutxvxG2WzLZJfNhG1vRFeKqfzJAzuxXeZruSuy3E9cmXxs6/6hs9PsX+LTsFZbF0dhmDpfDka76dPhXW9EVfL2nPE38fMaHu0c9C1ud9pnx5bla5J9Xvr2F8c/Slqcq8VbGEau+1edhmDBV+1RV+RRvYkBvIeHPP4Bb20R56UMKTWYZNOrlnbs+b1AwXtEkrYkB62N6Dt/5N5v5tMg/ueeLs8km9p7r9TKdYOoW/PRZ+G5i5nHYcHLYredimFq/Dvu75wt+nlXvic8OAFmjumX8IG3/PsWvCnlarxcxaeUgmc3+XzANlFwf1LlX2YowtEkthEy386vEULmbqurFfAlW3P5N58JVNq2u7PJl/3K6rk1NlHjgVFjUeEmrwrXGTzAOh6ksbcFpTVYd94dfTU8ZEl8vDNkkM9V7dtmNb/JmAY+E3stb/V12RgMMWemG/YqERNu4+rOpJeDIM7rnHe+YeQyvdw2pmhk3arxb+kXuo1Pe2ZpF49tiOI76a073ykZQJOb5vPH+x9TJrpid1Lpy/+137gP59qcvcFq1Tab+aOIMtyKFvtQ+AqcagZOKUwiuH89upxqHiND1lCeoyqyszdvOKPNpnE/RazKdtfjIPRQMq4cmKx9M+m8z2wpqesgk8pAzKe2svC+/4uo7fbDQ748MFy6bPZ3vSZVnCoY7NMMYXHjCy0Z7uTeUHQX8/CTrhyeesAV2+nbo8gc/Cmx7uLfF6nzinlEEjU++fwOdibk7ySfBcTJwytcgP359ax07bz1u5DRWjFKfpXo1ThTm2mfJZOpRJ+yA4bL/EA1Zc8Gsy03jx3n7JdlX5h3B+2GZjLKBs96/gwUd2O2AEL4u21tiAJ0HHLfnyERYUHuhVPVYNL/MllF/o8UVj6qWclzFd4abC5EPRTI3cnO51HL9VtnaNwXpc364qR73rzc5ihZ/+zm/02P6lUDnG/P1vOaNG5k31uKHKwD16KE7+LZvstrmK4dUzGvM1b8Qr93RZjHXiSHU9rqdfiAnCxEBzda96VjqMGZ6Kj7FlSzxxhrj05N/6ci/0Oxq5E7rdH7c6ljenHV88mrzicrWgDd+aVVoVxj1GFcfFPsVBo/HR4g3EM5M3vgkXZJNasl41H8QM1FDlfFHx+vCO6Qu3pnWq6z098CQY+9O/9Wve5Q16yBvygjxa5RaSeqwcbcCv7YfEhAiDqRsNY5GO2fV4s/38jOfTlhBzHlHwSGmX4spBYc1vmQT+vSXaiASAG3RBTIqiGjkRCeaha9tMCi8EXUJIMI8ImEcVYMLslqhyMmqCeVQDJ6ohwE1ZxcA/ppbJMgMgQoBDiO1eP48SPkkNukMEIGHo84yy/fN4fpFZyE4NscKyS0kz3YYSzJGrnu8fsoVTx26AmSxBtP1s6OezMuBuGQuT7mnbVRHZvGb1cD1fygoZ9nD9+HzEhucTs0txKxySCCeiIEa0S6O2c/h2jyMCQAxAsl5CHMrUTCfCv7eOY3twk+HgUTTwBRP/FVKg7mfY8k/5ssuIej9R7w9omHAetug2YulzbgAHEcpi7zhhEgCsriGgFNu9GyUCfL9+cB41u2PuoWW25FlEKNTlM6kft7xGvVwxKg6igS0i1IkIvaekvBMNWq6IXdKeWqklACLq/YjRuoMRBZOIAJQDTrNJiRgt7zIvSHV9gFT1yWLaJajZZ8yV8/sevarrSQ23ofTN8X4nYptXCCiIKACkCRLUiiQ0bg6pZe4EfTyGSVfHbndIG7NS9WGqPokY+pOkr3dGN48InUfN/jEHMiHNseLG5jVjwlH9Fc+nnXoPArPn2AUtIuEr9HR/qfcvi+20E8ZgzzFDPmkFzSm/TQ1lz53uL27Qe4phnHnIp22Hwko+q/Yf2kNgZPJHVgu2JqC5M/aq/QBhhp1ZFCFiquPV1f2Emvw27QMvl935/HV7czpxrtp7T2O3s7hb2LgBCUx4xQ0KdNsRad2ZgcMNOkcYGNwLkhXbZ3RS3mJvH+ceXNKWZshU9gafo+1nMyZA2eeDuv/u9NkIXeQQQu9JLZQ/JlDd39MnTnX9lT+r9gXUMz0BLuUFtC53wrw6BoKFQKJ4Pn3khvJnquq7RMoeBjt12PyzsXKhet8d7d1jKsuUts42l66h7JsM9VXXPt/3FCr/RhRtqcEntIer0IP7fEmzEIMtA+XlWBib11z791t/x8pfatXfAciXqI4t+y4Hj33cHKvQsA9p5RuComTFulLdX6gybj+bTNtK9JoDAKMaWHem0PWLKKip2aVx25W0l2f7RaSectqD3dvxUfnL8+VYogqZ/EnVj+l2cF8he3zNl0I9H62IvQ1r+8QWYKXaH0vEw6bcpVIo/zW5wjc2nUcG0f6Lmj1nIHhUz0MaD0oS1t2RSaHaYxLPpy8aXzG4yz2o+uNF98dwrM4f9HlJjkLWJ7HUeBUMeABS3HYZcx8PKS1swfT1r/r+ylmtlT+/w+vAIxWtkElHfA2v8dILh/FBPX+vn0/9Pm4FD0m3S3voDHgKnMh6fM0TEUQ1iHMvSMnEUeNFvVb3j+2Nvd1QXo+/1dcFzZ0FHYXXufJ3Ulp3ZucIgy7ue6rxJibBHEnfTA1Bz+MHosEjdxVewlZjw8R/zaXub8RdWccgmFBmsrV+vsZDX+HZt+MJ3EWt3IZmYFEgvIL5fXwe36zjfM38nrScUOtophUMojpQ73dCyjF1B/xGpNN4Sonw1lQmYaL7Y6naC5lwSZtS+a+t+jvT11OUY/nM6QX/Q7HdP0Y1AFFdJiErK9SiW+6Wd4UX7LmH7vO627EK3uVe2OPW2YaqxzCM1xSkcSvV+5TPqOc1d5ZqR5De9+QGuQDh+fRV14cCgCTfoxbW1KQKz3XbRa37CmvTVedjCn1SORWqx/7dfrb0+EOlao9VCGRKKlCFrm2xWvWHbo95ZpU7RoXCq/ZibzW9E7LzMyNw1fsR4G/3L4B6/ioDjydKhvPv2tvgx6v2XuRuYKcVjIVESb6k29CQg/0SsICn6WGMZ25w459wG6Sh9za+a/ySejxTzwNxy7PY24/9HzyH7Fgjq7RYfe4P9zVbBOl9j4Ko7lzamKucEgNLkeXkmOBGrtYSGLgWq9y17ZCVMKd1j4EAa9ntGQYQAb5nrKOha6N4Ud6IXoSCAH+1LCfQOJoR2dysl8UEL6mDqKPsY89oyQoLeSvWbcMKTBgtTEgUvhwz5gZ9WsFnAfiStl0d9WCeGqUT1WKxUvZi7S0Vb+UN1PFP2ByttKntEGj/5WN8p+rvRdKhIQXziAkQGSDmE86ZGxzwAn6Lrw3S70OG/Zj2AVX+hRKg8RS5dCWa4IU0x20ugXEZTyhQz5uktdhlUqZksFcrZba6vi0Ar0LJbQyoGj8TiB2H1J2ftvUxt/T4HVLD7lMqmGBosVqWYVbTiFCxymSXRpUTUqrGQ9/OLJBAZjuEBi+cmTthoGfc8m0ug13a2EgApMfP0AxeIwpQ6E5dih2HVwivmN1ntD6hVtQx4AqvUEamTwgHq6zZGZiiCrrmU5TAINfxamoXoFvEmAfZBO1SQ9yIhuKQ0oy5NwdVH2HBRayul9xOKQxgLbtf7x8YFIbcj/Ffo65fu/KpWIggx2DHXfEo5Ph+C3m01te/nPGLLfxj5oH9KpFB1kxvsAvvhAX3K+xsQyyNlBamaGAXYw7JRHQclHeFIZ9yS4ZhzScpDW01PvClzJhr3+rxgxx6FY+FZvDEaLnKwUy1V4UWIGSynBeWr/J6hkx+y93wGDXQjxpYUxdMMOsyofxBjUfAtTHhNyEx3SiRqzwpD6kUuxA4JMYgjQGdYIKC8GxvRNsbI1QqvI5IL5k6XjNorxJZMhAcUhwcMg8kcMlj9f4Uw1g0cLFi9naNwSS1TC9r0DL3uoz0Up13hBed1P2hYU8YVf57OAnvWKFJaXEaHrMmWOaetmcrxQETVrBcYfreHpPgzR+9obyxa1ccIEcY5hNrkY4H1HgQesANl5wx196llg1FA/f5winpBB0ZFTtBDgfdvm10SCvoCPl4Wi1RFbvdI8MwLkB9ogmvwhZNMChrdb9YdhUy+BOToV0of2jhNrT2BsPBTQG0P4Vhe2WfrNsi6zj4Q+OeaCu2qK9NDMpYjSek7cKwAhbDgbGWpU8TAZFbn7T9Ae7nS5HRBXhJLXue1bITlqyZ2/VsAeeZB/eoRdWa1BZPZFAQbU9BloiO0XIuBvvCoeSTtC5sSI5ssCdgkOG8ep4qn5HSUvlfFydyRQzZx8wY4gUAVLz0GrPuNSOHI9XxTXer8Krw0DJfBmVO+EH5E9LxRqDyoQleBLWoj2nUSk5VPjL0d4/boIp6V/XfXdGEfdSUPJT01/ob1Kf10sloTw54ERgqPl8vuSS9e2BSx7P2Khn6P51I7c8rZmZ5be+4q/HgKWIyjIzOVvEVZTSNmqPy106N78KU9oAfgRofYwRkipsjRUZ6SMmIJ3TAz3RS22sGFL6WYes8prQwhAyUPZYKD1IjtPMmsMNEVDnhT9xVeNzhVdKVoQEMvvDtNXN73ApODXv3vj7gSeF37gUvJOHlVf8luIUlNbnJ3ff2x13B1g3yMZONwpeUCJaBbklbGWTtbBKzvZfJWtmfGr+8tDFXQnZLFf8r+6ETeZc3dJ8vRZAvnD5mR7aWXRonCFELafvNyHRXWDIOq9JISRmHHly8s+/axHBZBvnCtRX+Zcw/kYrq9o3ZzeEbfG2gwlO5Jt0td5W/ohQ3nA/5oWpvhf9C9dcrk8LLVP7A5EPewo5g3xZMjy+qPpTTcp4rvPaCcbwQN8p/UeUM8e8iOKwb/wQXIkCG/arybVU/gmXNQLDHALUZLbGwZEx7uY9Zd0hruWdNuY1dexezgyr/jjVllTf7DlvHPqNRH7dOFjZHM2aH44ocF3EjdX6u/YUFL7SFW9SWZszkJGNhT5pSjXe3arzQ8WRTZqGkHVZ+q+5vRZXj+pBWri2ATIolrzJSW5jAScbgeb6hUfgtVLzM5ENW+7q98wa+RE2Xhka3S83BXrU9j/MtfBz/IqO2Yjb4x5hvqOex0APLFduP/SUnGVX2IzS+0B72GQsU3mRE328cRRPs+ZJnyJCden/ovfkT9XY2l+SIajMNQbAY6h8ktHK4up8n8g7p+GFPQsM/50u2Gl/zZTRhbkmFYbq46bY5O/Zvx8cAtZsjJshZy/oEE2f7dtzhy/iHg5VgIFl7l2PKzTO+2k9pY+6Kt+NdfBkfOx5W9JDWl+OMGME4vhgn3NKSTsrLMWXiPH6usibY50t4Oc5d6UYVghQAdeyEtHvik26VNaL9H6rfOH8QeIUVeBqPveMttjqHmzKBrCtRL+100r0Ks/w3yofm0DUJ0cfukTVdu67tp+jH7bsc87UnPd+p4oFm/5Bh54aBzZG7enzLVPtqfBzGx0t9hAW9VeJkaOl8P55igofN8RlbZpyDbo8qsI1B0Kj4V3hwiVoqieEfBvyZnv2pHu39h/4iGqjwmet4qvINPf7WQs9/YG9n5h71iR6vHg9nfMstSbJeNhQDD9PNgdQwyCuF1+YwX6TwcQk7Qss6loCiOojowukY2BwKi9pxS/V8y4hPySqhmcbbAQ9exvkIhUd32IyOK4ooTcqG1HTEJ5QxEDwqfISGfGats81pEKVGGReef4JJN/h/D43UQiRKBAxr20ypuLkcS/q/ZP8w9sQNrnV8qfLRB+QaJ2zA+f9Q/QwVD6ZSJuslTFV8ymkJYW0uoqbc5sR+VfHYup4+RQ3618tnmD6flCvkarxjOZm6GAcw+jV8uZofcy0MkMc9zkJPx2t71b4qX9PjHenO9UmjVqSDf+6v4yeq40H3SFW+FBnBU0oFgrJb0sbkDPCeu6mdNf4pTASnPTFjUsaQwSXFPAuNbsKwexjs/Yf+sl8lQsXDjyq+E03Q6fzQ1PPtSNAgjdshHueuzs+xPt/TiC3AikjkrQhFGXkc4iVT5VtlkLXONmb7VVjv+qiGlFLu4mWXhab2Z0SptHBj2JEEDNU8IkZXcwlvoCH3kJVbOvqvUP7I7G0og2E8Z0jnEwMe7UwCNkcsA4IqCchYHz0fY6j7VX4e6PlhhOVkrN8LHtp/yzH4b4yX3noBIHLBLcO+WXjB27H8L/lbIiRyyUEdC8NOGEZwLWvjvxQP/Hfq14PH1OBG5gXLtafyhdTU47Eh1fjEw6a0VP4La9MLvX+5fI6wqIuwA7V/S8Gha96yRPy4fVvEmRtsGYZ3OVD2fcyQNzUwTY8rWmIdn1IVa6t8WM+PBDk+1wf6UcNLhQekv8oPh/wMCQCU/6t4/sBqdMjMLmFNWdPJ5sAWwUo0Qarxrdm3o/+RwrOrvA6eGBjme37sL34fNccqJ+kQnw7xQ5yzo8nq0EResFxpe1D5sj3gx+AfD3Th2hRQuvZ4jIjsuIQ6nkZj/KvyLeShTiwFyl3ukaS+CZvooP2b8KXyd6HGbxnE4/h95O5xEVeOnu9S9cu88EQbXv2P5acKz420ClaF3Kj8v0aW0PmPkFzl21Vem1ZqmbvQA4lYAk6to4kXTpx74UksnG1oAItV/o3woB83JQ/N4MBwQEUTnsRShMxD6n5j3cAlavT80+kqvuNhWx6YLMzwF+efGBjmA9b14XReTz7nMyum2stU+aABdX6oym+/xXONnn80r5+Xs6OFF5CvgdyrfIi6VMeD2NP5kI6fSBUwQbs0bh2+Jsq+jsP61pj/juuFiconf+P1b7z+jdc/x2tsdmm2cH45HiNA7gvvqPDlVs8HNdSOJZXMDYZ4kOz3ccu3YSu0/yI6xm/Kf7/Kv7hMjyvG8Xohghx0u9SyVzpf8rR/PqaGeBbsan7YM3eiPvQsKXlO0wOjCOh4dFwf1++n/om2VMWfB5bo+G2HW5FRjUcKD5Ceb6HmsF6bkelLcWkPYgsLLfMl3+a1qdszbcjx/9yf/yv5DphwgkDoqmOxomZt4KTj8O/Aq3+5fsUx86AnvHKLJmWjxg/I4G0+Uf5ztf8Jc4gq5z+Mp3Lya/lk3cfNkavxkdXoVbgmC7FMh3jIzAov8Elz1POXMTPO9an0/K/Ox8Kr9RA+rIckCDE3mMRErArQuYW3z6jZPXKg8r/NCbd8y9zgMW3sZ24N+QxdOsP6iBzxCdPHVAqqx98WbcOKvqRVEGdkWO8IjWCXWgpbgcrnBn9tzJ2g3QISXuX1r8xn6vns5xWTZU5V/FTCjEx3Qvv3sF9iWE8B1/HRs3DV8zsrtbS/Pr+N338tHvyNJ7/x5Dee/C/gCdqiXp73F/x4fpVxLCx5vR/NjjFPwgnsxv0dQ7ySOFf5DMUh4HZqGfZ6KE+s8kE27H94xlVwHxrBglLKkHu8ZRVUeDInlHJR2/sVCRCtuUcAvFvRMtXtPXkfH+Vsc+Bu6WSMo4gEDq/QPDMAiAwE3u/3GNarCaGNXn+2VD7VXea3RQNe1PVZC1tlb5kHX3BzrNHCPXJXcOFOHSIFZ+6jGVGQEQ/uc88uaY/m2LP7jIGE6HymNrCBgIpnEUYPUT/rsYGew/pISCP5ujYNRkWW064Ll2KVU2JiQ2Q56BLcmKtM0o5L8BoRMEEkmIcVsNLGrIXsljEJFhS/jwe5QZcI8Lf91tf5VeIk4SS8GfzN6SJcan8hnnRWno7Xo4y4b+e/8Q8KkYeeuEwPyOzU9TUyuY3B2V+HeBobqF27Uxcn5QPyhIHbroXE7sKFw3Ni3mIgvJx2e5YgiEC3wyZ6zGmX0KbLMlkfGQCxoDIJ2fGr+nZf2++CSj5htd5vTlcJzQg9r29ACqmThsSOqZvaiIKWVaBCw3iQ3hm+tfYCuabBLZMl4ha95T2C1BO3mKIWukeS9uiBAmngWtxltWmHrFT9tMcAOaHsSNajLKd8x3DAw9rGUVKuMlmbqr9DY+rGKn9xyQk33TN0TfU8mNWgxRTxsJ4SPilX60bYmMD5j/KLH+UnUS+H8bOBe9rYld7P3Ad6fneFx/kXHHga75iQoaf3AzlrV7qIif/sfh5mbkPZ7dM+YCFwiDo+79dYEfOJMrMerqfDfJAc9msQENq0UXgoqzWWdkrLuPDcU+GVyp8sUgu2btyetLyKevmStvVRWHCPmq5G1lHvb1HnowTVYSXtFMOVMGWCm+Mv7m8Rq8ICybA+/27+ZSxvCfPz/AnR9tOu/rf2l2Rr2qVozAcJEPWawSU+r2dM5CusVT4vqp+sL176E9aqP8WW9vIpxWCeeWjJex6GlCt/ulvXhz5uHdU/p5SZXuEF3YqoeM0+cbewhXE48SUPmRvYjKrxAwz9Zdin1AiPoeX3cRtUoRE8DvNlv9Rf350vG/fPKfsa5vMaaEctV/6s/V+vL7XK/jl9vz5qtuN8oP5eJZQcMVrGuTH9589fNugyfxPJ+oSbYxUDYBBZmFnjn0jrbHMWWrQPatiAVK+nSd1/gQAg4Xp+0bVo7yj7TYb9MODd/rF1TU1M0yN3pR96Qq5rOVF4JoBMoyZAYSVNVR5lvyEd7A9bx2H+RZXfsC/rUasEVOp6PJHzrAFL1MoqlOmBgJKFoOvCBUqJEXhpFXAoi9N5vwsDcE5NmcYVfciXKEotc5c3IIFMX2+q+KkwYBcxASMVH0vocEN6YqHt12SVb2em7KJ6SkIsCaX0hssAxJf1PkfFc3sinSoe4gNzXev8KUK9ig8jg5vOUseXC9QSt1DxtQu9v3D+4/XIh8hwf328/vD8X1xPXZYq/p/cGdJdL2lJJ8XzD/Y7vJXfGr/nqa++/8I8pC6vVbzAr+MF6/8mHo7G9VD1vqv9DG1awXnuwf1lv5W1H/o3oSSnqcFdOB/z6Yev59vyhdPSHvTrWrrxaE8MpMcVkb5Yvou3wVfxR3eerxzjbbBKhMJHK21sCGXRF/2/0r8fn/9wPhV/t39vVH4mTvufn/9r88Ef2j8mZbt2bZWf6v3v2EAwVPb4Vv4zfvDQ6HYab0Hn5hMEaeXayt9zlU8uVHxTW6kUnjCLIT6ppJ6vxeAND6mOH9AiJEEVu0DF87vMmO5Jc8xykh7Tuoy5rE+rBFUqv+T0rf8v+9FcuRzmc4mVysIW9PG0YnueEYXvgq3pef96ZH01P/M2P+x+hS96/wLaYoocbphPFIMhXjShExIdn8GMABtLRLlhknQiA+SCFhPoCEO6VJ2X5BirfN8wF5GON2mr8djjOKp+49tvfHuHbyhsSyvtA3r1vK/Wf7s6JtxIa5NE1/ZVT3Gk7ZO2mElnTWyi7I+qvJ9o+x3sD6jzHdX2i6HGR3U/N0wWMtTQymlHfz2G3tn+3AMfjpMQO+24X9fX+T3R33cxHn+2xu8XIZXlfNh/ctTfb+r2ckFzN6Hn7/dusFTnuxKZ/Jlg3w5Z8HL+HhkBctT7iT1TxU8fnOdMWDofqT+6P7KO78/r75WpM3x7unktGj0uINa+fc+KSddGbK/y4RuFdyo/5hO0WjeFiZv6EAK5x0kXUoPvWWNy4Zoua44P1Cv3TAqWye6JYeBENb2/7/kzqvX3Wqfh21CQ3k9AG5HAIQR4US0eQw/5EXG39/NgIbb7QyQBiE6fLWHo6737nutv5hA2NO/E+vSdb8pbzd+yXW2DFTanmJDjF+Tqb+X3fPhW/E9fjpxuZHrQ3563obo+X5tHM1zM+tSyuxwMf/PYKQSeHUILvmTsOP5NNsmSHMIFrPJG7sa/pQ8+un92WC9cI1y4xxTTOvSQ/DJ8E99k7GhoHpVtsE8TJ08sWa8q1KRNOuE4Ot1j1EDP30PPP6Uns0wb93CPAwkb1wgrp4G46EP5F76vf6v3C49/2FZm4aFSDOfy9Qn1PIk26/4vlm3reBGRISLR5j1HzuwIq9ReLVw7rPyJ78GGL0I7tKLTPfOPYRPt4UKUfGtuw0WwvWfkCHFhpv3mAKuy5vHsL/MT/IxvyF/uBz6dhbsJ49nP+Iw2mivh9HibxI7uu494cFZyr7mHkth542IhR5k3wsgWXQ4XGxMCY3PFj0PWiSNXcv8h10USO++4kFZy/x0uJCCS2PkzmV/xFIHDdlW5FqzqmxAXN2GlOWPUe75c+HDqC8+H5ki8J+BQgJHjIwm6gXPlB9xBum3oyFeieQO/FA09nrlrzvwWI3fLElH0ff6W+Dv8Lfp3esrPHCg/6dcHCxyKhfkhR8/gt76VW7zR/CH46jdP7rMkmoYVvfym6+jqOkZpgh4f4r+PE+ZSTjatMtMphbeZ/v18MCM+VvzEE6Bt+YFpbpOxn695peDIU+Q/vePyaQabU337EXfWyIm0y5jZifE61UdXHDm6b862ShMoizZ8LRppZGz/lDL5cm8gWVh7I5/MXrn1eV8sgzKdoE7Vv7D2h/tEvBbNvi88oPrsR/X/ts8SbXv9vTXwAo7lfeUN73ly5p268EPJ4o2bqRh5YMZz+jkLZcPkn8D5Yx62X2Lt1wMPnjxsV+2+8GtQpRY9iLkJ8ga+ck++cHPkitIcYE7hS8259A67VP8w8/Bd3q5kHojhfcErX8oLR9NYhjO29NpWVDneOKI0b4zGimp2UNh15hY649DXeHsuS5o4h9yTVZogjWlZC1/zardJrbIsWijFwjSFl+5X4LBNVDlq+srlua4Df9C/wJn1Ithxl4Djy2grvfCAIRLNBzTwh47cSuP59/xD6v0Dll9+11yi+ndnqsrCNZfkVPnkO66rt98HfrE3H3zPR/T+HJLFUvturjG9Aftz+S6xh/yWF+qan2ish47Hzn2CGvnC3XM8Bsdy7v9M3sdUb/HXP+z3cLk5wsXsEC5os1qE1mp+HkvGGPEqnvybftdxSqpszdrLdRLehnOnzBv4mE+CflU5wr/UZ4h1r+Laj39fODchjg7hQsVjmx5Ws++2j46XrAsP6u09BuILNUeb4l2+HDFF25G6Vo0D044vug/G7tn3+aZiR3NirQYbFqOt6fh4tON9btltbqGzP70WHj0NPm+PcRDv8iZ6wQ29EeBnthwMPuYBI734u8ohgRNhYzri2J8/KYNxxqFkfh2Ln31O89Oeef0GPq8zl5c5lIlN9v80e/vO7+d8aHaALL0J+/TmL9vdf/t3T3POlrl3/JJZ1C76x4PvXbi0b0Ng/Nv4EH4fHwY/nQQyTZDki8d9SM1pMnJPnvnaznakrx35KFcfxe9zp8pYdMs92qQJ3QmgxkfzkDLb9pc6/7sdxoGzL9plzs7xyJlr7myHV/nk6Ksat+c2KNozF+NVPHPN13YZu1VeCc5clD/J9c1Cc/Yt9z8u1w/eqdpMc+HRc7wycMwVS+3v/diOKvf/Z9ngL2Pu5h83Fo74vcuBiitlv6pmm5TZVeZNT8qXkn8fMw4/8d2qaGgpPFqvtsYxSczzODDOuQRnO9J+PuTA0e2HXL0eVGNQzRkvBTsaiQVf88Qp87be6DEBdwPH4+ifP4qH8okji2bgEx7tTmP5fQ13+QTKn44FrY4dNefhOWaNJulz4QZIc8e1YpjT2362cs09SIbxh+r7dByfWDp//WfwiJpn/1Q5rMoL/3F524XndKVi0Xlw4aEf+6csvPrl8oxGvt5P0mPaUCPFYMCmeq/wZsQmIfOGnjI25nhS89Gfx3Wo4uFLHPEbq35j1T8Sq2y5XqJfG+vr6TZraCWu8kV6FUffNcFrbh1HP7nEBV/Hz9MkGWMAyWXRwrc4vQGHLLbPfv6Ssc+vogJb5UfhWMfYki9n/m1k0ReeBF064g6ZOFL9PfjamwbE75z0d076T81JURKcfjFOeEibTqYTpMcNlR/68spft93Fb2KDnophfl3d55594Jfi89YUXxJjp327oafCessN9DpBcx5z7S4/Ta2QBVJ47nF8l9ZuOa8HcGbLopHVeE5ruZx9UWvVsAtG/M6Df+fB/8Q8eJF7057TX5szumgMvcWX5M2n/adLXFnvVX6t53TVfegy1/RL8b8eP/V89fV4PcyhK/+d+mD/59u6sXO9FjxgpPnNernGk39vXfzjdfV39oFnk3RiCt8bsbjqrtbJNzch3vQh3tzc4+JmhdM99IIqPJklb3hzj2cWx/UNb6hMrdSC1NjoeAd3F6z1vat+rDo6rHnTh7wh53jpXVuIxFHxgVR9FSyhFHPnz9Vic1wtwuNqsdnDfmPDrWGkTdjfM9DwJt2HCy5XuGw4oxWvUtNfvFuDvayLw35zCueXdfHJauEffO/DseTDseen69tz509k0F9d3/6kfOmBfLQerPvvBJtpw/WaiHH4aM10XAc0Llp79G9eozTP5X5bI/z71m/DV53zTuB31kvDy/4C3wOH4jvxxtjet2GlYpnLOvDt374OfHLG9c5IxXOXug3xT7j5eh199fdpq4hxjHNSC8piGe0Rs6vcQl3eFLfM0uuXwgfv9IZumSFe75nCz9lbW/TuS0hN4S+Nzbr3D+F83Bfyi3s7PtTfiR2QW+kts8a1xdhhaRLYK7l/KBrZZswWSewM64fezcZfzDbh0tj4cydfWxedkM07bZChvu9jp777L+19+k/tnXoXI/295fyVmOhfr9/hO+X7OBaKnfMestv/ZH7ieyr2IbdXMcFVPnJzO8Y6K56Uxjl2ehffxE7O+nATbmcHf+GIJDE2v+3xtz3+l+0RFK3/QdwWCB/s8xDPNmFFdPy1imemjoO2sxPEZBPi4qSxc67slZyvmwzH7kbh+pfY+XGMbLyfq9Xx/P+ZXf6F+z+ak/2by/krc7D/ev1mP/Kbb+Zev841/jM55U9zj3frQN/HVPfgL3wTxipPqDfqf3/hv9mrxlttx+blul4fH/0FEEP9dL3f/j//83Q+OP2iYhiwz1c4envuadaPecMx3M5u1HND7G9CrN5XT/yFe4Tb2TFcuJvVQv9+1L/p6wp1fHO+5q1c0Viu6PzcCTzNbHhS96SbFa7VfYa/cA/6/GK2gZV6ljs8W1+n8ifXUmWDZ1/F4Qb2l+sO6h2h8mk8O6ljXSZ9nbo+1WUPL+VU7Xsu57l8bu8vNqa+TtVR48VYv/lQ1vFYvcsayqWe7w7PPl8Tq7rMhrrOr9vQNS91VG0+1Oetzn24UT6qjuFV/4anC3YZ/kKPtUd/kZ6fN/SHft7MvJRDXafe2W/UM3q4nZnjP0NhovpblfP8t/odqr/Px6eZCefDb+F2Zq/mM1tdq+6B8dh3Q//rtg6H+43VXN+n2x3iYgOHNju91dM99/fJXxDDX5BexQ0+2Klyj/VMbY3NsbrmbEP+iNkz5Qvn9jic2zkZxqQ/w2p2GO39a53XWz1Gfavz+qfvwcc0CVQOMxUJau5xKXygNQVvmXHez6fi/f2gdznM2RhpH9ppH53S2DitcNHfY1Sn2N2n2O351rDCBTnxKrwJK1BzD2idy3w7jD1f4pmO3VWZ1xN0EkyNRap+/kHF9WyyN4qWSn/5TT02f6Ueaiz7Oi/xwV/ISxJz6i8vZdE5iQ/echL1fL3/MXbys/biMAfl/MkbsCsssoklfMBbvUf9oo/6V+dS9NyWd7N5r+mKqrCXFVwE5T32bdiHe+ihMozNMsSwucfpAeKgCfvNKWSoTulh+4UeX77ETq7K+IUa2y/xuJ9r0J1MxXZvDBp2yKOtyDQHiORas4i2sI6I/obGierAQcQkVJ3HwWMOOoBbXtOeHCIKUEQAConmVDuwxtx9eJ7yKh40NeKPzhfg/fncpQ4Z9IKcMP5sQRc53KBLzanItIaMG5nSiWsU51TuGYYZBcDGAMU5sZdxglbIkDZL6mMG5B4lIqRut8ONCULXfIoac0U9eIuZcB5if+fX0LqbOPPhOyc+6OSR9BU2UyeiADzEw363Yf5Ufz/yNuZ9V8vR3w173FytEUrHebav9Cr/O/HUOV7AmwnskQwXzjRR9Tyv/2y15qbCDr3u+pc1fPWzPm6L6zVWv3p8q7dl/0D3UuszD/Ox8blsuzpjdqViTt6ALl/SE49nRz2Wt8Zu2HPlai1Utkyfhau5WVz0xkXCtDaSyXvuAv9+Epy19SAF6nx9yrxjhohtcVCYoTtqX2KwSqsgLkC3zz8+z1KjXOUefNFch1+fT5z359kRRDQYdNfI5hVW6Kzl5Dxg4xe/DTPF/Ud7XbTW6t8236e/P9Pa7lpTeKM1uP/uPS6DTuy0yiahXn94W1+/Ubb6g70t+js9vXan7Payrn7yd8OelkEz/G3NbvDrcT395evv7n7kb5ClFscbU+F/avkTODeM1CKTe+aeeFXsUwwbXpEDZHwLcWR+fw+E1Hq339HRvc4nVZkumrn3NZKpNa1/9L2cGi8uazmjXu9Zt9jfqpgfyXwZvtDLvCdR73QH7drH7f1pH95bAmESOISVA786cE+oHfRWuaXGFtoiAjGlb3qxuJWZHmukQGe9upBefPpNz9agq8yDPqlAlVP+fB5LcI2unhdoPvfBBwd9SCw5zayznhx8HvUXVkyWcW75J3LWt6uc4ftNCTPmav09/fzsWq+wgU48nz6N1w98LuP14/PBlT7jShijfi4NAJPlfF2D5s6EWu+QUHFTmOGJVrR609f0D9ff80fbz+ag78cf0irYrWWHRv3Nr/UlX7WeIb3wa8FB+xVYdwZyhEG/W7/UCOZZf9Evc/4NvVSAAGdxbZ71endU0uc1AJy53WMqS3jRl6VdcNHrIf4r9PS4G0eW1gMa7ifAyeafDUqoQwiNx++Xe1w5leYTrNzjukF+rPlUoKoPj7Rese5PB20/P8c6lvlG/7DjhrYX/96S6j0ume99jdGnz4bWA9XvF6d7S05Ge/6OfnHQqvYINb9VydbSPa3YXrU/+EhfMja+1ZdExL66HyVaf67mL2f94XftLQe9n3N7X+sLj/pxo74wcOIkfSajPmuYoDqVhZ2ZXbJedmFmBrvUEExo/R7KQ2s/v+9pEGl93akTEff5vo8OyAUIkX2MTD5hsjAzrV/bSa2ffIkVKckJN97K+14/WZ2nZnpgWu+2bN/pg24/m5dvqfvoJjLU+7pk1J9lhRe8EIyUfSNdXzVWst0rJKbWM6beB3rGLEiZez7uJvF8utPfl7/1d8C3+xfd3zXdie/pd4LCzhqg7j+q++97quzLpfPpTutZJukzHfrTIQwlmn+p0fxoF71qbGo+tbfjgb/7ckw9ZR/af7luh/izmW2nu0Ev2bUvepnEnjApVnSIYbbUUP5LW60PbQQLNOgPeqM+xEXfNAbRKW5BpvmvtD62Peijkm6Xmqo97PZyrM5PnEH/G496cwqvDKnxgNBypfW+Rn6D4XnT9rv64zUf+O7P+Npf42V6HPQ3QHNnabwJiNZXq4+DvuWI5wQssu10Lww5j2iwS2WJi6XMqIVsdf/Y3mHWD+Xl8q2+yt9SAyi83iufjpfpM6tVzBi+QjY9641+pa8bgJFvdR4NOq3LYjt9GfVL6yv96hv1fK7tu1R49u148q/opdbukUpILvrhUuMpRQa3GS2OQ39oveQlMS76bRd9WUTBfsX28oL/5GjdWaXW747PfIHLCz9Czd39S9wcM60H1sOBH3ZJFR7ZhJZ3Wm9b+wyFur7K/+jmFeLSjSgI762pM/AfUI82pldYKKEaz3XbzYv4s4WJ5o8IiKH5Jbxz/973XI8/TLfHzYHRMg5ZeMAtz1R/jPrHz5l35FThlfVmb4h0FqvLsx69S+u3+0Om9VEfWRWc9YjftTdqwVV7v9MXHvTSBvt1IhJO7ifOEM8k5WrUI3ivV7/9bOnxjMhv9HQ/0IN3onj6GMrNK3TlPK4Ry4m9pxitqNntMRCrjNi3ROey9g639TFzTZXrhtSgt6wxeUi0vhDPJDlg+bFe7ZWeLSDg+3o2Gl++z9czR0ZoZx5cZhOu4q2XQY8vPOVLvs1wPfDdgXqM71T9+ZwAciRE66UvIhq0QuvvOKHmE3qPr9bIl7Yc+N2o1j8uhvHCVTlW2tjxwL+GLuMJoVrPZ6v5B+moJ7XkZV6r68Vh5DMMKVHjp87R4rgut2sMXvX4bbzjb7tZu8cnRB1EDftJxWehe6R6PKzksxpP8xog0tgyZ8cJ8vbv9XRdNX4+9qSZOoS6B2wgqvAMgtDOW9gxHHjCQj5V8a0JOmx1IKztp0zzXYYGZp1TGHL/xp808LFe8+fRQd9b1WeSGgM/LG1lOejz1L/ePwM/7hD/Nfr6m1Gfa/+mrzy8n7ucRYNeyRm/0rACjynT/LFP+aQMI6ObpJZhh55/XCWopD3VfNWwNvFZf3TUAz2hVpSkl9/qjS/gwMfTdJy59o4stN6aG35fT/nCl5zJzmKNmY36jPDCL0zs/XrpbKl1OBCAgpC+6aV+yCdoOvifzyd4pdfr6Xhg1BuNDv9LeihnfugYB9r+Rr5iErJBv2HUn0rjFqahETymlumJgd9Yrok8Dvak+Yu1fvXAR/4DfqdBf2WZL1HJAND6MWtij3zNQ7ww6hdrPma8AIOeadspvDqo/i0asEets82wVPnbqlD5UCLCsEEWBuV8TWWCVTyk+xuuigYuQgy3odGd0h7Os0Ef+Jf6+7v6wCOfrLLPsf+rQe/FsHPaaX7kQa+zcwY9sms+Ta1vMeiVJaN+38Av6w78snSJKqeMRjz5p/PBjvzXJTL5I6sHvcZiIYLM4E9M258av/g2J1r/XsX/mh97TbpRf1zuwiUMcvA13yYY9Vr902qJyhj4h9R4b9+YhsbalbsQa32iLq2CGI56yqO+4jW+3iq8hg21Y63Pnh44KFea707lh0ZtKfwXxnERN9OMGvxZlWfky/+Qv/OsN6vHi0mp+YVHPuYwbJ3btPINaMglbqYq39b8qiuGUtKYIfVExwCcZDRIVswc9ePMLPMCHzfHs55vlnnwJbMGfUi6gHcFeDzlS/qhXm/a2KywAm+9pFovRfl75qnxrlPjhY4nM/B4GvSuRj3LK71zRsXhrHceTUSXGuN8A+NbhV8qXs7I9CmqdHuP/GsbrX9PPtKnfdMLDjLtH+aQbzR8q/LPlBR2ZlzpX9eCCeuNPz1tTE+Akc8cX/Ff/4K+pq6/1HpLeNQrXqr4ITOjPrrkS2p8lDux+IfpJf2H9Vi59T9Uvwu/IO/TOtV4nC+7h6wGLVP914DlKpHVuplOGPg3yuf6BqYIqeMIgyxrxC1Wef8v6TF0Ck8eFR5kxrQLl2XKFqAe9Zcv/Idn/cmxPpPUSG3Nb+h+N55yuFmfcm//kNNgxxrTC1ngk0Ff20gN4QlGcVQ5I3/w2Z/QYO8/9JfuK35ONOiXDHrOYdbTHScl0uPV+PxhPEfPK8ZpSDhkCyeODPmi8Zpe9ER2Ch+Zh+4IpV4kHRJ6MmULp+eJvBv56wd8escX+nP9PY1PoBv1NbUe+gf8nNr/k3CC/ll6Yf9ZPdaHn+ix/rPqd9Yj0/PpGxWfSuYalub394I9bqYqHrvFVjfn/0b5vsuf+0v48jF/qbb/xiy1/sAw/nfxpT7lXJgb7Z/Z5Cp+olTHgxhQlS8toqbT+g9qPMupTGkLa1TJp7Tyjyr+gpgG8ag3BOVjH7eCh9gZ7P2H/mLYwuzSWOsvHq200ePXqOcMTCLLu1FPpB7y8yF//Jp/OR7G72eVb2Wj/n5m3JziHs4jk1Jao3AtH/vBnwFlCV/lWM4J5R6SDo4b1JDJZhIzw8y8IBn911D+mDf+iTS/op+r66PnY9Coj/gRH/SgxxjIMPlH6Uv/Z/X98L+h3/x/X7+zfvtjWosbrvKFiurxOCbCE7Q+ZUte5bXy9/Twn9ZvEsaP8eInfNk6PlX+Eqt8WM+PyP2lPkY55w1QeICv8kM25GfAIMr/VTzfav35ZyZFlnkoWS+cNKxtK5WlwreXzBKj/6FD3sCXqOlGPaQf+8vXfMXD+Dvog0Y9dVV5lD3ofFle6ZV9w2ctGzLR8bQ3xr8q33K5Jw1hgh2qOVrjzYkvHO3fqBbhWnaW8ncig3H8BrXWUxv0IlT9HtM+YLyB/1v56aB/r/U/2AIO+hyWzn8sKoc9IjjhVc4Oh5QKo6AyyZc0DPV8SWCEnt9HCc/CqjRUPpSBuietM+iT9IEhjGPKlb0n6FbFZ8P806/ok3x3/ikd5wNu8cI/ryeP+UxhZ43baz3ZZTRR+aEu/1U8N8w/0uvn7fMlD0NT3jBmqnyIoCEeDHU+NORfcSi5yWR5VwBpa/ty9foWHPPfcb1QqHzyN17/xuvfeP1zvH5gsnwM3V+OxyLGzEOu8aXT80Eqf6LsTc8ytsw70fgnYenrwTl+y7/NvxrVflzCm9/61r/1rX/rW/9z9a1RA19+ZT5zmM/e2RkDe9p0dey+6ddf6VMGxTv92L2hn9/yasi39pfxO/tr8eBvPPmNJ7/x5H8BT7xguUrO+wt+PL/KJZxk9Ho/mgy0/pYl2VW80hXLq3yGhgeV7+VY2sN8d6DyQT6s/+xXYb3roxpSSrmLl10WmlpPH1EqLdwYdiQBQzWPiPFoM7DR7f1VfLQf9fU6LoET1aCBbvAcEbpALn2/32NYr0aIcb3+rPKpTF7mt62U2er6p8ISyt4eU8te5R5yQwxqZEoDGyAe9fIcQrs3vTw3CBX+pFQgjW8YPSCXqHgWQHe6CBfwAXm7EwYozqi8xQni1Oz2rKkPwrD3FNMHZHY7JsUqJ/YTVfk4mzrDtz7+KUz4NmfIYrUIVFt9rc+KiHDf67m+5VcF+Gv6aN/4BzFd7nUNrZwlU9dbaKn354z+OsbT/64+T0poYDJaHHP3fX3j5mv7hezt2ydiC9ohMq4/RCYxCdgcsQwIqiQgTGQhg0s9Hpib56jiN2lDbdJ2GQOg5UnXQtckfNJB6hUGBqiC7pQwvX+re8L6WyTVT2ZIXffEJHqGoNvT5shDWZ+whM7atZ+Y6j+X9NhAgTCki3Cwypqdgal6nvkUMQEpqE/YRO3atW/5RMLICH6UX/woP1msmB4/rdQyWd5AvZ85bFR/1/Y4/8LDmmu84xY5DPuBwM2gJ/Uf3c/j5Mw/scYc9SaRk1/2a7g2Zh3NGdLXIzLMB437NSLSS6aO1wzaq0SWWj8aB4dMjfdLHiOT36YYxqKBixWzt2sMJqllelmDlrmn97eo847wopO6PzTsCRv0YX9pf8t39WG9obyxa+7H+ZNjpOfPC/t/an8J7WwmS2/MByNqaT0+eF7PWLPPls7nLfjj9UXr0p+W6k91/7WeL6z/p/R850J2e6b939XrS9f6vpf1USY+1FvG1j9+/lLrLY7zHXOGg1XuQZ8kKKY9fdLfyHnBPu15EjaRldJSr6cN/ScNQkWt5xcxT0JP2e+oh5Zc7x873qKEQlqBOiabA7fobZwIhWejnqB7WiVUlUfZ73G0v4d8Ocy/qPLjy3pUbRcsVNc/rEnwlBLhrVl4opUTMZAe1PgIQYmjmm9DWVu0D877XVJiBAmj5R0k050A+nuSl5QWJgda36+mk7KPLHnW12uIAdqYcAMq+01oFlbymTE5/1qf/7LeB/T+6pio9tPxAb3V+dO/q+f4Uz3P6eJf03O8Ov/X1lM/1iv97n6Ht/Kf9UOvv/+C9ZGgZtArvIoXHv6P4uH5uB768H4/g/ha//4hM3X/IkHRnlaojoyz/v306/m2ndZXTOBtTFAw2lOq8tuYlMa7eJt8HX9c9FjHeJvYwlL4yLd5bVi0h/2/q1f7dv7j+VT4vf79dT3bvzgf/KH9w1jFh7XKL/X+9wfkGidM4Ad6pHUfN0eFtztWo1fhmkzrWRrBXuWTKr6JMR/1L3V84q0SPV/7I/11HjbHZ2yZcQ66ParANgZBw7BvCw+q/FKSt/4/70erY1IM87nqfdd6sC2vkMnty/71Bf9qfuZtfvgrfLlTeCu8AFIXXOl9Bg/EcI+j3mcXJXJFAW1V/Lgm0j3rb8dE69me9W77s54tUvFlBWou4fw3vv3Gt/f45p7WS16Fkv5desrsnV7t2f6w017p1477dXV+P3DIUi7v+3T8ftFkzA2eh/Ue/f2mbq+Ipc+CjN/vJeVKr280YEmbPQqr+qjip/F7LVd/D1eLXc5A8uF5FX/rfAR9dP8iB+/OD98rD989umw+PelxgYLs6ntWGDfCyQyVD5cPyDVVftwKlf/1dJXh2YExE67rY4IaM8upNDBBWe5OSeaZGTX5E2s6HhL1nt0rbPae/l5rMvIS0M1rwYQT1QBFhM+RtTlwt3SiOJjeL9999/0Nv7a/Hbl7NafDT3k0Rt773Ruvtv42/gec95qfY9/lTbRdbd/4tNV7Ndf9yb9dn650JmJ9fOG9PXOX+dXj9r/M73sMmWvyhVPzxNTf5Z/5nAcNW3Bg5rTji0eDN0EDLWKEW8PgFdreY7QNm3CfsqAM58aJY17ChX/gFZmEffBXvvG/5vtV5zXnnHr/O37C7WF75v0d2mVXFxY1/OXuL5bN36AaBNil7hsHcH0KNafVtTauU/Em6lcY1uHW3IY4qO9xNElZuk+r2SndmjLEZAJZeBMu0hvukc1f5kiYT8vCq1+LhrZaQ1Hb1lRzZqQWUH33J3GnmA78Vz/nFtbcSrunlTRGLrwPNCH7LueTrive692GnNmt8Da3rI9uIEbCd+Fr3iKZt9GeDlx++Ye6jNLYaP6Mrelwi76IRZd/V0uSGpojKLXAQSzpiWuuoMd3XMv3YNB/TKwzl1PwoWbsWcc0o7+mPzty2WuN3mQSyOKs7aL5bsrXizaFQcn39R3d7+g76t/NojmOnP4/6Vc8LYvlbPqhrupHvM6X345dzqTxgH3z8tvX+qQL42/jM3kr5z+L2/nMi1009DjYsjnorwz9rPrtS+GBU8rM/qxzcCffaX2W2uZ+os088ECf+a9881q76B+hHXvRBx7LO+otj5xpZ03fC0/06H/XbfUVj3h5tve/TX951Nh45AzUo0bPn8k8+IBHWpy17gYt8LM+7DV2gbNu5Pd4pT/Ujb2U4YItE+dcjouGrOauUZhT+Ydw/pF+71d4e9awbH6ZT+6s7wtyi5/r2qTsqHUQtO6A5GXRyvO5M0/coO2ncLeZ1uuzDlFLdzk4FvmodVBMUCmWtE8sUxYTWHKLvtOwLZbBq/CmX3IGnvKJ6ofHw/vf5cv590F/cNC2PeuSf615e9EUfvPBwQ6t93g9nqt54rzpq/zWKPyt+/Vb9+trjU+VqzoRcacPI4791o3+rdH1W6PrX9Ty/K0l/VtD67eG1nd0138yp6bHH1PH3zqOB9MhR5/8Q3KKwT9VDvvP0Of9Om8b89qLludvvb/fWPX/N1ZpDZz/kB7nNremuw80ON/Fz1+oOR1jgN9a1L9z0v/Pc1J6Kn6aM/7fa23+1qr+nQf/zoOjl8g6vhYW/Q9pxV/iynuVX+s53W90438e/+vxkxpfj9fDHPo8mH6Jf6qd+M16+X9N6+udfdQHaMFvNdaGdfKb1cK9CXv3ZvX/2Pvv5caxblEMv9+v7u+4rst+BrNU5x9/3RohB9njW2AUNALYzKFbNUWCQYziSJQYuvQOfge/k9/GLtdeOwIEKUotdZjBOV+PSBA7rb3yWnvtjKQWsxPlqloetbbestVoz9ojaeXPanqx0J62G/7MH9efvVMtdBdFzH1U7gW5g6K66PY35W27WRr2ty+8k7cSue/24N246VhZEit7no1vO8O+1MsfG9/+hGgpK8fGg8n9rfS+U9uLi5mSOGD03tMfF6Nk987yGOEPjN/S+yj2xUtZfsEofRNcOHv0DQzv4tiV3QKPA/+4u2VpHNgb0ngn0uf42rD+415E4+i3Py6OTmRcqeGP2820dFWrP7QUe9Jp6PPidInjl5U0wPOqlp+jfovT5UV3IwP/5LCw1lfjfK9ZSdvuxf3GyzokL+TI3I7x/bCl3NwEkIcgy71Ca1nMS8Nyw54Vp0sSW5SGcMdUdcHvmKpLQxI/fHDhXrC07WacYUNd8nt3cuJdOni9Yd3p/e42f9O70YmO9IPneYxO9Or1eXvWF68LSUPqIyi+pX1SSYPuU+S5ZEPRHikSXac6q2u9DNGdQvqNNGzI91u4pzHjrJp1uDstwccEH98VH5GO/H73iCb3OSf3Ob/7fc44DlTZy1Pf4m5QWLfwl/4DfWbQlHuYXiYS79cbehtsN3hVd1iEu2VzG3L/K7u/Ft8JO+R3nML4cCfsqsjvhBXucHXIHbG4X38bDIv4TlrFzU50uLs285q7awP+HhoD3we7grtss7WX3127ecHdtUfd1+uIMFzz+3lzknivMF5zsHWzLQ23a/H9rXqMd/kZB8vaiqPwO4hbtD98/y/MA+403rhZT4O1bVtwLy38y07I55zwGT2vDdF+4e/B0K+WyDN3WKwO4Q5b3KZG9o7dgwv34sK72SG0w3CvqW62pvB3cuQ53m9vBPfmyt7GQXr3t99hXpeG/a278jJEz4/cAVucvuAO2Eoa7n0tTvm9r81K+D5Xv+Btiw1P8ma5pTeeqN5GktqF3PqqkVt7Smvpjx3Zm7W2xay7bhfKN/Q+V1jHhTQE3V2Whn16720Wzd3ZeEivzy/N3sWl3P7mu2ylYT9ql1TSL7BLZHtQSbO57N57Kw37MtwbPBTuDbZhL5T2TffCn7q5RbUqRe+xfaEvhdxj+yb3Ec8Rf5VtxP/g/lDmm6P3RNJ7EN2/MA+3Hqi/qDarb5H+EjrrMr1R/lDxXXrlXLvRkxcX5XG6U5/A3UmNQCmnK3CWJ58pTfL5ar3cLI/TbW92c9+Y1Iu9WbnpV9PpWj2fLtVz6+rM3dTm6U63sY79vT7zXbjbY3oZ83t+Ffn9vlzLV7CvMLe+2rakcg5qe4w9+VLHd9mUs41a/o9y/nLZaMhtT17Uas2pV89fLquT3mUvp19UmtN2v5q/bTTkfE9a1yqzdbFbq62qjUWmW9NrLXXht6WcjeDZ3+DYgzu+jfFruqG7IZ+LObhzuTdoQp8sHojaHYrFo72BWEPGNXgcEO4ohRi8O16YYowBvk+Jvy9yd+f76HVUb8lp/jaQ2lVnNajD/a9UH4G7dEFmg87hz9pZT/eU0uaq4a69WWnpZ3s37ZE88rKXo6tGbe1XA7m1Ha788c2kjfsCPRqfN6J6iHsfivWOEO6ydT8cugP0KnMpY79wjc3tsjB9aCHdV2nfdBprOZjVhh7oFJf2lRAPBn93CCewbn1Fx65fTgO1ft/LuPfY351DY/wy91JXMpbi58jdVrWc/emdzso1K8KdyTPIox8NSk7aGWjpiZPLZKNni0q5wdF83imDvHNKbSLvtPTV/H7UacBZu1Gx6sheo6S0M5Lmbx35qlq+8QveslV1Vq2RJBcb7Rt/21p7BcSTJ6NB6dZxVrl0mttR6UxN0HGHuUIa22+Xon2Vpnc/D4yhKS/Nywt/2sukzdZ4svKr+Yk/Ky2L2WDlVySpVS2Prxq5lVdwl351OmtVA8WrppFc1g+fQWN+ed0bu6pbiNXpY22A/b700tC9WJaqsl8DfaTiPAKPUi+nbTi7APcOP4LvlOgnf4wXPWIPxZyrCIyG0jM6zXTozFi1UH9oq+Xb4vReLlYv3+882eZyAfxzXJ/5s5rmN9qzq4Y/8relpV/wp/5GvvFmLfWqkdu2Zy3Zy9ZnrXFN8uGuY2JHAf+Ny11BfOZS7k7JOy/lb8CnEEwduHeZn6HwH9uIP8FZkNWoU6jftOHMJeL3UR0I7r4/Wo9yp9I9PucxgXvGqf4DZzzIuRXE297irn7EG3bPhYA+gvhw+PzcyDXQWsPnQdxRcZxG88I+FZXACrdP7g4/8u7wHV7bfH/7wp2nbwLVGxVnWHcelG4Fe+HZ2C2711v0Te2JqcrtcXtazNZn7ZE8bo0D6apaHrerwbJVvZwBfSvtmV915PbMlZFtt9f/UZeGkN9SXXC/b0HQM8aLmPvG9/o9sL03dhXqk/DGE+aTKGYcjfsJwD5HNjSy7Ylvgtn81EbcMhuxOiQ+FNHOdokvIaD2vERs/IivA3wIgu8heMY3En1/CP0Tn8eG2f7V0JjYh8H9EVvsB4mbb23oj7lfwRs5qrdxlCL2i2x4+6GM/TSoD7F9buVmA+y7yGB/B9j324DOn/gmStTHQdbD+kbzEtbRInMRfUKe4APyaDvt+XZsXXQPJbqH/sZRBX/MBvsSdsZcYx8v4Msz7wtjMdiUhv54yOAAvotqTVhLSeEwaMnM54X2eMvwb8P65+20SLs1wptiJQRnsh+x7WQ3G2jc31UL+agYvWxbHEe21EdFfGybaN8tjfvmhhKft8vpqMp9jV7V4XS5zTG6hH3h+6kQuGnc75PbhmhyxPZz7WZbL8E7BDMN++4EmI2wb4/7FbF/jO296ON7pj3xIRL/IPPVcZ8e9hGitanYH8nmpgv0prjZ4crNTlSyp5g/ZCd0zxgsaL/+iMAQ4S1ewyrkf+S0JOxZSwn7P93dPdt6HO4b4oOtOGs6H86TJuvnfYqT7RF+x521wXwYXTpDb8zn5PM5KYQ3cP6LcY7RBce94ZDjhTAe7b/q8mfA80VfoqcwXBjF4XVI3jyH1zLlEcyHnqWxpBbHNyIbuM+b+oxroh8ZcN3DsKD4+gqYIP7VCvc5zoX4IuKTxaxH/e9qRB7JxK8u8kiZvLeCtWSj/TnDIswL+7U9jh9r3BduS+lsh6aebS/iWE5Ye0nA8xKTF2zPK866WHF0BDuP018Y1lVHIzgtIV2iyPULQU44EXp0QF4yeqPjUnhQuUXwyx+7/FmF0AjGjW8aj/FRuu/bIeUdOpcLjD89x+NJHyFerGMeTXGsFJKRQgxHDcEhw2KsG2/D5BiNXSB5NCxWEZ/z2F8aPxL2WSHxg0i/GF/wvnsKp7uAwAH9PiEwwLjtjQAHKC4rTM5iGboieK3DP4orh98V6P0ZXsT5L9JTOV5m2FgS5jElrjtuQt8Jv61x2URg5DPZGZbxPP5N50a+M7jVeCwxS/kdw1GZ6VtM122FeE7cXER+4GcctRiSeXF4VgvL2uxOH4RvumLciM+Rx/EJfglrquaEOGasHqSDDN/pf7iNiUfqEfyWRb5HdFqBX7YE+c146x46Cob+dgLxNaKzAJ8vcv4n6goy4y+bvbqVXMzEviP2ozCdo+KoNC6K+YujUnzb1ScR7mO9VcBHASdauzgRGVfQ+0g8luK4IINYPJTLB5/afeMwnwzphZUjbAPCYyK8gMPl9XYD5vNZh+8Vl0Ebv/JutI7wWEUyDsuRlkgrJF5OaaIV4QVUdno8X6bq7fACxnNJ7L0IurnLbaOILuBjmcbsYaAFLOsoveJ50v43TB6+0KasCfYU1p/9DcN3hdFwleNT2P4drjju5rh+h2mC8K5WnL5xTHtRXsTZIduwrSDObQK+hWLWHfrbFuhFReYnwHpUcce29F6sL4JOcpS+CHuGdBtqM2I4YB6hk/mQ/XZBngu+GYrbAp/3QN77WTfi+/DC36vcvsU0kSPwRPb3cCv2T3wh0v41hmSzwnCR2yFykeplfJ0sn4bwSo3ycWTri7wkwit3bAp/7H2bTTEu/RCb4ngc+XvaFD7nU4ov6u2jOLk5keN8asWsy31JId2M8eNjbPmX+Ulg/i7i3Zsi1Ye4P3SN9ebaVsjDAfjj3B9PzO1BtpRO5Auat0yeob/Ed5XDeUMkL8jHtsvGzaLxSmSPa+tQrhDQ/1AYa6Lh+SAdrkb1GTQHGMOHvBj07lD6pt+wXOV2Vdal9BPKXStWa2RfMWyLFbqfLBdtQ/gC2nMhT8xl9iR8H5N8qWxUvpN8q7APF+GC5GZLqmC3gBxBts0reWVEr2J8Wec8m+pxFA+RXAuILkzgNmK/b3wkCzac32PeXlK5nZSjfqD1jq+e+y3XRB5IEb85gw/QDuMdTN+DOYp2rzcK5fatIuul3yXg3/E6pBKCN9/DFcV9YY4RnYz7GsNwB/1A3s35Q/SAfcbeZmeOaC4a5SFonT73DSucn7qE1ibiPHfXu3GkIvZpSEALFUdhtFwJ+RwofJRiyNcgyo+o7VtiOYY81xL6ksK5m044b5J9R3AIIs+dbYivAS4CP1A4bwD6ljCcXAneRbJ1WxLx5XB8ZVsa+tUhyX0skX+BkBtJcyAdzKPQXKD/QKRVneMy6NBorhr++2b8YAu0loG/obUgWeRnHGTrbX8gPYbnF4OnxWotwqc8Bn+v6m4xvAh/3au3h2CL5KCO+RL6XiJ/Ke3u+vTxHJgNH9EXaN8l/WV9xeoOdE8w3cXsWzHzU+yb4oXGRfiGdPo3w1vdI7SH6WeIaakq6CpEDwjnWLeGPowzHBbxvFQ3W9Lwv9rKzdYkHmuL7gNpW8X50gfax8nCmPjxcBX2SZTI3FjcN5obHtm7Gsdl2CsqJyYhvRN8lkKskb+bE+JXLpUz25BcqLqCTcjtfY/LhjWbE+93g3lvbl2shPRmHhvE/g6V5WlXCG5lg3BMFNtANNZJ9UTy3JFjeL7KxhH83UVG60jfBX1Rj+zz2hXy9Qks1OdwNSx3BF9u5RB+Ak6tmQ8O9tsRbSzEmxQCEy3eDxbW13isDMOE+hWIj1AW6FeMBfB3q9wH4Y3oXnjkWUkW+RXqk8huRdBfsI6eDSL9uhROeshHIfgAqc4bwafvtodH6DjH4GUsXxRodkVpIeIDPcTHQjItzifmjyP8m9iDIP+ITkHPovgkf6AYor+4uDGVV7mNt8EyhOgJVKaIMjnC47+DjiLQfrEi8kFxbODF24j8jtmDXR7MdAeAYcKL/wa8WPJDcdlInkqYVg7qDmHcGEbbPkuvYvsj6DZmPS1mt1NeFSM7ovpfIkN+eRkC/GvjV6K2EItrCbkGos3BePhb2eUUt3Rim5E9djcch1xiy3rcro3hoZzPO9td3kHnP1lzm+zN/RUgv8BHMq4JNvhwuOODFukWaNOVRbnCY5PM145t952Ymxtnmwp21K6fPeonZPtMfQzMhzAUeIcjHfC90z1kfg3xnKmXCeMhp4XaQZ4GMZldH4YgHyZ6WNbG2JZZFo/m/i/giy7dW0nQW8I8bQQ6M7WFFcG3LPsjtteUfhQuD53NLr5BWzEOI/ojxH54vKZKYbODu3pYT8D4zmx7QithnJoIOZhOpF/iP2B2P8Z3oMkR71OQI8wfK/Bppn9iOpnsxIYJ398K647T/wS9JBr/mMihuF04zsn9GC/rKz7myfxtwx3a5LFvGmOfyBF/xzYM27DOeER7WdBT42HEfelrj/rFo3DfjbUc6M8Z7uQOi3Qo8BZvJ0cmhEerYsSn7G1Ev9hEi/rAsD805N8W56kWMzhXgOS+aBCrxvwQ6Q2Kv6PPh2CA5rrLn7bOTh6Pv52E/bBhfhKCCaYxCpfJhvBXieCfzPNh+Pl+Tk+ibUbPl3ubpJ9frZ8S1oew7xRijJT/FHGNABI3JHULwGffIrJnx9fH8l+4joT4cOxciZxM+vle/cTkZQqyHNrLYfvApbKPyqQtk/9MJ3aksP2B+H6NzHOy/dvgPNi177sXxZBuHJeXB3CVccwEzgPg/LZNVHa4IizC9lNYfsacQwjHY4s8Hw7JXtRO9SvP2Y/DaHxcEeKvPNbL9Vexf1GOc32T63RrIjd1QVfVmX3B6sG4ZK9jZTMZZ1f/2IFl1Ynmde/ALyRfmW2Pz6YVd/TCaL55KeynCOkdIb/hKhz7ckg+FpxLwn2NRTvxzXWTkD0Yk2MbtYEVPNfJ0N96YNPyf8RHu6PjM7v8HeDeOuh38rdDkg9cg1yqYjaHcwAhp2uIc7BC9gPP82c26o4NG7dngc5pYF/errjvkzWBSyxPIzYwHyc+hremMIyPESb9/MT9SFjnd0iOhCv4NcQ8LsjVWONYK/r8M8rdpJ/D/ezm8xYjvgwhjrIWz7oyO38r5soJ5ymqQu0zrs+BvPt74Dzq4733YjJ85pw6wNWvgF7JfKhFmnvDZcdGhEU4plGKxkPidXYWW5zw3EOoWRc6C73Ppx53ll8ieWpi3HLDcEjo/w3zOLdcDkZiuHicnVjQLixzq1Bu/m48SQ/LVxY/hPUUqzvxqrCOwHP/4/wpIT1qJy6QIecauW20kzv1w3QzwCGE9x4Zu6W42SHJ8WqpOFaE83aKGC/EfyrxTcuUt1DdDvSm8STR7xL9Lukn0e+SfhL9LtHvEv3ub63fCfFwIX8tF5e3FKn/EPLvaVh3QPsN53/W+JwG+t7SsH4Wl+/iRGpBROPs+EwIwlt65h7pOlxPC3D+HdZPdeyjFf8FK1EX9LgOiHRRpNsqXiRnRMxxic/XmoTzHmjOVjQHM8k9/LvmHsbEunfO1ov8JMnh+9vm8B3MA38OTw7keAyVXf5wKL4SPffZOgI+IftO4jY1qysi5m/Q3Dq6HtWv7MiTsLwJw1tYC80bE30J+Fw+r2M2ibNXj6mVkuSZJP38HDH3JM/kl+wnyTNJ8kySPJMkz+QtYhnP12gT7V0WX4irNxGyHWAfOJzWLj8jznPho7W0RDt0TPV2qBEt2sxr/I/Z6swujomDaH7IDxF7vlycd/TMunKELRDab2KDkHP3Ey2qD0JNQsFvEVsrMBRXyYVti2xOtLv0iM4bU/dv50xOpJYYO8cTvxdJLCbpJ4nFJP0ksZgkFpPEYv7xsZjvnWvzjvrp837VEdhIkTVHzv/Ree7UDBf1nu8WI+I0Crowi2XxWmLH1LsO+RXZudoVqSN/DNwE3CqxtfNavqLuWYr4WQN5V8+M1skK1VZbizGpaD2DIsu/YrgT43/drQu/P+7H9egYGlGLnOfE2IHM587sDWzvxdZ1+lv4qpJ+Dvfj47PDK0wHtQ3vr6SF6piOoB3cK4z45E+o5yT9HO5nn4+O3bFEfHQ8hjTORfywHovdH7pfierPWL/4W+A881m/414I9RJyIV+eJ+qjELucCDJ2slPvidcNZX7OmBop7Bx8jI20rxYnavd29a14nWOx/9D9MTxXZCPq9zS/hOqeNFY54ffPj6l/PC4vh4yzW+MgCss3ryMQnodQhyzOfxXyw8XEaLMtUsNE2AOWK5Hoxr+AbizWVHk2x53GyMJ3ODA/9IrdiYHvQ1j7uNbvBtcuP7Z28J57jLY7vOFnqXFDckGEtmN259nhGjTUViB6uBA/EvER5ACpnURlAvvs03nQ7/jMBK/jjuWkTPO3/A2Lq4l14EFG8VrxuGYye6ci5HxgX43E6/zB3pM7QDxyp0JwnK0O9+odk5cId4CsPZaP5UbzSvC8j8gZ8WEdNFektdqV3S3iK3mP346N1xL5zvwuVM62nvU3+dlavJ9pR87VyB1coIMQ3xv7TGixJpPvhL/AM1LTH9Fcbc3vARDr9zkkBxH0Dupjw7jJ31mHeDasu0Rq/HrDPTFL9TiZN3mp70enNd3x+05U/1GLIXt7X77t5KhzQEL98k009kTq9SNaRHNV2f1mwCMYDxNqI7oEl3/e/cQ673E12d/z3Tf2db5p/gDkHUd9TeH7o15wn1REd+d50Ts50QAXhkOhGuwb4psS//6g+yta22g+B9R4eDvfuFD3jclG8X4HBcfcwQbV3CNrlcO9na+vJ5rUov7b5CATnCH4f6gOclKL/m9zBuGZ+sfD4bfVGo/NvUO2qxzOb6Q87s19Jwdqgtc0oRb45mjcB/9Sgvt/f9x3h8/eFyLkQBxFJ3tizIIP7jUyGOcAJDL4byCDJ9t9uSBQVwLyESbh/hnvo/510ecb9Yd6whmhuPuz6PgvvjuM1tUg99ZS2ovzxR23H2AfZVvMj0/jJNjPADDaeBtH9rhvYk/M4Ft8etQv+9b3s9X0UK5LRqwTvXsnEavJTPgQ7DfYgcRuHU9EXkX3QrAf2R3zxEdGYk6M7nN07Wwfhfx4Yc9pHB3hCcPVuHrTkKtCZDDdG5JjVeP23NYV/FxHxQk2R54RjqehV57hCp+r+97+uB/p49s9h+TjvPdQHA/uaf3Jfvtx52++455Q/9IL4fAtZ18Ef9u+My/kvEdy1sWNnHXB89vxFzN4PXe2Bbd/yZkWsKdecpbl0LqOiX/y/F5857xM/JCyl9mRBTqcMdgIMiGRA4kcSORAIgcSOfAd5UCLx/8hJ+RQPtAxPJedQ17jf3C3LeHZ1N9GfW4Q+5NwrM/bhJ/T9/e2k/nvtP/oX/r+vvY77YRYErVxAOcxzMfe8Lj8fvfIWouxdPnanGVu9429n4oHv/q31+fdKl7GiZ6/Ubyf77cflm/6HfeEytCXwuFbcj037rM5njUtTjdMcjuZTyeS01nTjtfNX5bDic+QvTh3861tFbj/j+Aqsldk8C9uiL1C+cuG/M6fi/ZNfLtKrP0j/qXv72u/267C/obsKO4n3dX3uN62Q2uizI75HHuPoXCeH+Tk0Bs5Gx/2B+SnBDlCFWftb70hmp+L9WsaO9uTVzTcRHS7UO4Lzt1EzwPJzeL8RNqvvw3EHFZ+FpXps6IvOBD91zhfKgNz3JIaUVEfushPqD5GakhzH63H50nnF8kJ3IkZhnmacN8i1zVzOL8wQ/JXke7IYRjx00d1eKjNoOF2rSHOgSS5H2OkA+VUP4N0GJfkg4ZiElJEZ9ziPFlPg7VtW8QOoflMxCZhnwnfY3lOAbFXanDGtgj29IS0YfcKbsSYG+bvQ3o/+prkhSn8HXqGlsQpR5hOvQ3ACnCH4eF4MvQh99Nla/dGGB6I7ji+OhQXyPN9ecXpnpu/R3tOcBLp0jWST0z7cjnMOe6uKG4067LtXiyXXUWfd5XyyM3pn5qyX67m7VxplF62muluvZmetJrlaVVNS52G/RBsF93+dv3Qaaw+uNl9f9OaVy2tvGr+xm+UVu1C3W5W0rNOYy21m67RbeRXDdletLO3Unt2OfOVmuSNJKk9Lo+uquWRN/OWrcbljZeRNu1q+8bPuqv2uKZ628ueW9Bvuo2a0W3YD23FnrRG6cegUN+0muVFV9EMNl9Fn7oXZT0o1IzqxB7U5LzXlMoZ96K+ahfyUru66PY35W27WRr2t+VZa9ZS29XS5qpanvkFd+kX3E1rI9+0ZrnVVfVy6s9ykjdOz/xqsPVG6UKpNvXKNbQ3LaVYHa6LVXeDaMYft/RiNqd7Y1d1C/6snfV0Tyltrhru2puVln62d9MeySMvezm6atTWfjWQW9vhyh/fTNoVR26P29Nitj5rj+RxaxxIV9XyuF0Nlq3q5czfyDee0p75VUduz1wZ4eeVkl91Kvam3eht2k1/i/boSi1PA7U8bjX9qXuxLFVlv0Zyzx9bzfTiSr2cttXLaaD6CGaPvUJ92yv4N4FSG8LebG6NZgXvf6nhj9vNtHRVqz+0FHvSaejz4nQ578+mq2Ylne0qutRu6NJVbT3tznpSJ7vo+tmh7OelYUmxH3qF+kMvI9f6zfS0OF3eBBfp+07Dv+kVpo/dkf1XoNgPzUq6Hij1zVUtP0d9FafLi+5Gvu1dlFdXDf++00B9WOurcb7XrKRNd+bfBBdlOZjVJ+74lsJcLWbd1VXmEo0x6DRKo+Lo8qrdTN931cmyjtaYkdPBhTO6ylzKwWwyKo7c5+CB3oV5NNHvFdfoby6X7Wb5tqtA/xflegm9swpmttSV7WWrsXgMRq7hVVaj4OLysVewB93G9KGruqPiOHfvzuubbsY13JF9ExQmj8GsPg9m9W2gADykdtOXWkp+267aN8GFY1eU+qpbsPWrOtrT0rLUTK+aF7WVl3WVrtKeBUpd+lRNB72qs/LG7ftOQ170stLGr69lL+ts/DngQhbhQq2QlzpZ6bHe9KfB3HsMZlOp01j+1WpMH66k8jRQllJXdR7birUMLi5vWmp50VJqj4GyXF01e4/BbLkNCvlxu2LfUbi2lPUC9l9ZToPC+rFfkcfdwnTanZceO3TuTZjDls27YY87cvqmVxjaV3J9225ebq/Uy0WvML3rzPKL7sjOtZv+Xa9gr66U3uNVM71pNXyp0/CnV6p/F2Rktate3gVq+gbNj43DcOXg/ADGwcZedhX/LpApnC6nQR34hd1WL1etjYv3Km+vWs3Lm27TGxXn96M/Rmjv3Ht3ll8FaB8nrN8a6veqBs/v3dl60W1MJXd8O/LGgEcwHuwB3n/A+WBjbzrN8qKjLG46De2xXKhvO2r5McjY8+5GXgWz/LhXmCKYbzuqs+wp9qaj+qsWgsUhmMfAAvD6wnsE+KsemtNje9ZGPBDRwsodrUbBrL6uX0xX7YpruLPeJijAewCzEsLLOuwb0M6PwiN3Lt27s5tpq1GeIlrrby7TLcWfBhelZbmhj7tKedGdBaPi9H7UVheLIHPZu8pchniMO1503Unv8apxI/UuHD7+NvfgVS57g8pq1JrZkz6Cw+jSDvEB1QFcCNTyTe+ivm0q/mO7UBsVx+7Ky6xGnUL9pl2ob9zxwnQn/mN3XkbrWFK4NjaXsXywuEmPO4X8Bmi6WZfaI0lzp9K9O6k/tkfQbtZqrLftCqyn0Wpe6ngd9qbT6C26o8i8Z7rcLayDLsLXuS+1mmU5kO0lkhOtRm+KcBP2nPGp/F+YTzn37jy96arlx6YiL7oze+OOb1eob6AN2d60mzmEAwg35sE8PWZwEZ8p8rRXuHlsZyjNlKfBhTcqTpemOwM5jngo1z9Gq1GP4t5E1EVQW9RXDuBenk0f2jl7BbCbe6iPbh/T8bal6ItuHn9uVwhfVPyHTmNNPteGmA/54+5sek8+T938e7R3Vv1sTvKyzspvtDRv29LeZ5wXtC/IN0F+edMtrAcdpa4H29uVW8g/tJSbx2DuGV5e+pb1rfbMD3SJlno5RbpZO3u79Oqy3aygfW0vuheYjt0ZnhuR30ac7HML/qKdXUzajfZNr7GWEO11m+mb7nwyBNypLjDuQd/xONZV09Nglgd9FtEA4FNGL7abN9J+HAQegHTLG0xzebVSy6dLVcl2p7J9dXE/6s7yS8w35cfurPfYLgAtSEj3QeOE9FA0j0ZdamGdotBp6BOmY29cw50uze+Hpy9oT3X7LNJVh1t/PPyO9BTfHnRWJX/fzSN5Mt0Wx86w1dDHnYK9Qfjd/Kb1OYfoaBzM6je9Qn1SHEnrZlPuoX1tz6b3PeD/tyMyt1WQR/bOIk4fHbaU6aQ4K0/bs7zcvSgPWoq9DAr5h34lDbhTBDnsQ997cEy0gRC+Az5dTeqbAHg/6DXoebEq29VabT0o59wR8PNCHnCwsbnM9kbLVWmaz5c2ltKT8ulSLV+42rYfS7V8uVyVRs2mdN/fXD60GvIUr43aYPvHQHpPG9OM6U7ai+6s/Cm4QPPUt6iPhrr8wTw6vr13MVz7WWflZeuzYtZTipkfLUsID22s75vKctpveoaXSd90Z/5tV73cFsfp3resz9uzPoy//qbdyEvtRsm4quZ7g7qE9pXa88BfYW7INkG4HKsTp8eIp7cL9VmrWb/v5e1xV5FXrYauUzsd6xbQdzyOzexVu3lJdCbEnxE+lR5KyvqR2GrxvBb0xfIN6A/T+1FJbd0FuctyueY9+vMewvN0eWQpXSmfrtVqwM+bldUI9OW8DXZ0U/0J9F6QGch2QjZJ+Rat84fbTxvQzR5bynKL5GJ/c9lA86GyFezrGW2rL7obW/Eal0iXW6P1VBQke9Fe9qbdWX3TaYC9UQ0K9THmGUjvy1O5m/CQhIe8Cw+pzupaL3NYVlaVy7/aDYT7rtFQ70fMTh4tRl3Fvkf4XCbyNKQfzuXeAMvOhDYS2vjlaKPcvNw8Yxd9as0W0xaSUVgG1Kgc/oPj9xXqp6uCTpjDOHv7vCxOaCehnV+Ydo7STSf2qDOrj3vUNzalMsj9i+lmk2U+mF8+gj03Ibrs6HmbbVCX7UFdEuUa+DHduWy7+aUpxNFEeYdhK5NYWY352pDcsxA+fBo5+/6KPiHdy/bGg7o0pDZxEft4wL9TzA7Xxay3LmaHS3871P2RJLVm3vaqkZ+1Z62ll21Pi9WbWbtRH7fHLblZSQPsi9z2HYq+nOKUzfehTW3nEK9Ky0EBwa6G1jEJlLrkXtxrxWxO87Y5rZiR1GJ2olxVy6PW1lu2Gu1ZeySt/FlNLxba03bDn+E8Ghzz87fDjZdxQvEnN5tT/PFE86qB5o2dYSxO5eJw8PnYnHuxvCjXce0oN/P6+NHlzJ615/60l5VWlyRO8anqypc/UazoEtsUJWTnfKr88FjJjMVFqjL4F7H/5/6v4iiN4LzHV4lhWxy7slvg6yn++NjPkMYOi2NnyNeGfafuRRQPbn9czPC4OPRL4se2e3G/8bIO5nFSJD5TXYCs6BamY+JPe+zM/cfu+H7YUm5uAqAbWe4VWstiXhqWG/asOF3iuExdGtZn+U2/uuhW1ctFW5k+NOvSsDuv33ed2yHkXVxIQzeT7vYVzsNC8gD7FcP+4KNyLp7JxRD8tZ8K+qKb1Y7++7x/9aAMwHEBOp99ftMCiQOMF28pr4fgL60uuP+/IMjp8YL4SfVp/6JE4weCHLzsufll19s4G9i7vNwbVNKHZaYU1iORPH8pvOnfXT1vr8zd8/cIvexZfHEieLCjb0Vl+xvFb56R9aJtEpPn06yku43tt+Rf5XvNpjRM6PRnolP/vqv6sXldb7PfaH2wbv6X/ivcSL2LtD2oy8ATitUS73fjbEl+1dobHa7BWMy6kfzs0NmfNZ8XzQkt0X5VuJeX3cHEzoK9MH/TI/Xs2bkemle6CdeWeEnOqlAbcKcGSOvlOauZF+Ssbj1cvwbBTNhfxLN5rq439GDOvMapPwrVGBDOO7m49lDG2ZL6oT9pbdG3yf9sVtKmN3ZWBN95Ph/OhTIgdllYL1oK5rtXymLbVTTTLfi3rebltt0s2b1meXZVvem5+fZNMJ8YDYnko0zlnntxP8K5eK7U2np6a1vatCrSplgNtlfV8qRVzS1b1dy2PZIUL1vbtMee5o3zk3YhNxqURJ3JGTZkadhXl1Iwr0/drIvwaeNl02DH9i4u5XYlbUZzDt18fM5hXK4N8PuoPlhJv0AflG2kH9C5gC5YSXNdEPUvA4yGAoyQfT7sK+2b7oU/dXOLalXShv3N5QL8V+Oh5lWHW6861K6qgVastpZ+4XLsbeSb9qw9u6o6Srs60dqz+rSltBS/cmlnRmnTnU0n7vh25Be8bbHhSd4st/TGE9XbSFK7kFtfNXJrT2kt/bEje7PWtph11+1C+cadS38MKulusyknvO4fxuto3jupGb7B5xTxuRZyPoTyNnIOGL8r5tT75JwyzanHefa0Hn8Nfie59KRuWI2ckSxpNIfe25BzK/jsCrLvurC/GAcVxFPDZz6CDYHFCnggxVWKB/Uj9PZv8nXlNH8bSO2qs9rn62op7Ym3nWzbWXfZGuc27Ywk+Up+dtVwV97MXbarOdnf1sfFrKMUC+XpW/q6cE53edGdoTUhW3V632teTt1s3m4mNP4r0LgagiOuGY/w/21ooy4RGuB/6b/ORVkKLmS7WZLrGJ/qzLb9o/68bUts2E17lpPa1cm2pcq9NMv5k8GGAPth5upetrZuZ9uTq+pQ9bK1pV/ISa2NfONl06Orak1vz3KqP86tWuPyuFiXcmAzlHrMZsg0BJthOGXz7c5qaefxQ735+GHprHLpbJ7QTv1yGqj1+55zcXY3dNJpJ+dVG3mppdxM2zn/sdfQJadUcpyS7HeV8qI9m0af14MLfxrMy5HnC+H5NOeUHfR/8pmhZZ1hrhCo5U2noc+zmZZzWXjhuktOOfP4YZEu5TJnxgr1mz8zbh2nlHPSpTL4vBzn999Pnj5+PaluFv2T85N/T/qL6e3mtz9yd3e3dycfT7KdZefk/GRPP7+fPF0/oeb1/t396HZ+cn7SWYx+I52Mbs8e5W5/2ZFPPp78MZr3Ts5PCv15/24UnHw8qSz6wcn51xOvv+z0YJSvJ7VFr7PsFxfL0e38/uT85PPXLw+SpAbz0RQ+9FMv/S6tZU2SB91ez7Ttp+uTjyeD0XTZvzs5P5l1Fp//HPXOO1pP7XX14NTUzN6ppgb6aWdgB6ea3gl6Az3QBoqOGs47MwSi2e18eNvrnnw8uV307zpLvGwy83n/5OPJEsPSL/5ZKV39mU2ffDx5gJ9hRf9531+mvh4zaEo2DNuSbUUx93zs9Qedh+nyz+B2tujMN6k/APCn1f798tRZLFJnncXo7K4/vOvfo+05W/bvl0Hnvp9Kff1UrFRTckre/w6Cz7/Pr+GvEwT9xfI0Nw9ue6P58PzzcDtaXKcyt/Nlf748verPh8ub88+aYVoGf4yQ6vxzZ7GYjgIA1Nn4/nZ+nard9+9OnWF/vjz/XLg9vVkuF6fBdNSfL8/k3+Tr69TXLydBZ7F8uOv3vpyc8wV//HLSWSz+HKGnX04iq/1y8vHLycPdCH6LWxW8gAb7867/15eT869fTmb95c0t7g0BBN5Y3N0ub/+cdca3d2hw/mQ0Z08e7qaHh3m4m/656Nx1Zvd4oH/D619OntAU+p1e/w4/jwD2y8n55y8nCLhfTq4/fjkJAxj/qttK+EcEZvxTFNT4PQ5u/NYuyL+cXKOJdW97G5jn1y9fvpyMeui/5+g/+sDoW/pgcBp0Te1UC/rmaUcZmKcddTDQJX3Q1TUdvfcR/YfsEG0b3SX62t3DXHwtGPRUW+0pp11Z6Z1qZmdw2pWU7mlf1k09sCTD6vV52/49dHQOE71fdpYP938Gt/iNc0WS4C0CZ/ZeCF5fABZfdmH2v6WCm87dfX/5+8NycGqhV66hu3rnbsObFe9Gw9Ecfn2CnwF4dDVovC8MiF/oc/igBaodaErnVLFN9VTrdeTTjqwOTg1JVwaqpci9Xoe++4T+O2frJiud9e/vO8M+G439LqIu+lESnwL6wlM84eHdIviTQTLUD0LjPxET+HPRWd6w388QJt2f3Y2Wo8m4M5qfZfv3k+Xt4mx4e7q46wTLUdA/u58sTle3d5P7RSfon2FRQFEt9hsa7J4NPbsNJt9t1DM0Gh97SREDsGe5XOAtwESL+cb9AtOtiHME40J0/TxtRvEMSBVwDF4n+BVHmIvOPcz5fNCZ3vefEIIglhNBDsxvdviZtMPPEDpQZPiLN+PoEX4ksEx42OsvEI/7/PULSEj4gchI+H2JIfCFy0N4POsvOxhU+dG8V5xTqQ+vfr6Gd7Coxj0SYX0MJ0oFo955RDTiDmMnyMQ4/EJm81u2j/d2zwoQzJDWgjfr7MPV2bDkpZ3STY0dfytdnA2HTjo3zGUqtVI66zjptMRCIuk0+k5NSfI9k+PHVbF66GdZ21p+FSAVsbRCz+u1yQSeZyaQ8u+To6ZkHHBBV9rNXPpMQ/3cuEjdq83q28C5OBvDO9AO3oF+cvS7v8JjlHPtZnrrDD5UHCd3UWqs7ytKXQ9WF2dTaM+OAqXPdDRGvdhVprDuEcwXp/o6gw+3jpPLgYuslPOQ/th5/JBF6vXuPIN0ekKOgjno3dwfNXzkzIfjssNcTnzWaej0WbZev/TwvKf12mRdIkcx02day3FKbbfdyE/aTTd9piHVtZzpKmUd3necmzOtlnNKuTKYNKovBbPpQ1uWt72Ly0V3FpA+VghOTv7sw2XayaXTE3KscHhxNho66awD63aynz5cOMNc5kwbOtB/4e5stALc2N2DYe6PGjkaWFLsSbsEaylUyLFAZ/DhDwS70sye9AF2OZ++X23Ut4GSn2OYHgsnx3EfP5SdYS6dk5e9bsOetBvr7dWkPA0K9Yd2of7QUifpM911nMGHouM4H840KeuUcn+UC/VVu6FP2g193C9dnI2xGZSrgmkFcxD2OJerNupSq3RxdoPey0EaUvpMB/OmeaZZGaeUu2zIcrfZrC+685LmDD6U0Jwdx5mc6R7aj2pkP7rNJvlMcJDC3B18mMOapsveH/NQWsxDtWGPO6uLs78cJ32mtxwnWz2bIlp9/NBA83RKPZYuSPC+2GrIU/L5qtPQJ+QzpAQ6gw8ttIgzfXw2hX21/a7i3zVlf9Vu+FVkEnYbaK1o/2/TmRxPH3QGHwqIllh68OribO44aUe+nAali7P5kHxeXZwtwjTkItiUmv623bzEIcTVxdntMIan5MEdj2ma0XheRnzJGXyYOU7OLUMoDY5hAk47mfHZbOWmnfK026wswiUCJjCHAZ2zM/gQOM7F2WzoOBePH9rOKpc50xFNuaGx6Z5nhg7QwBz4Y4/SwNoZfOgjWDildoh3Zab4OGkVHzHFfJE9g+Px8MyR65Uq5hGXiPZrhfym1ZC3BMYiDY3CNOQ4V48fbhANXzTA7UbovLeDOzW1vCk1L2kfnjP4MAT81a2sU7o6u0XzKOXy9Vn+vteopYHmnfRfZ4aHaMatXJSlII/hfGYg/tZKZ6bkeK0ER4Hxngm8BPY0d/nYvsD8PVun78toXjdtpfYSODlOxjxbAOzXGE8Fvn9mtPC+CeOF+a/jnN0ozTPNTV9m6zN/VtP8Rnt21fBH/ra09Av+FEpNzFrqVSO3bc9aspetz1rjmuSXLqz1yrx6cKJ/c5/iwrxOyY478pYuPJe+BniX/lSTS2nEd53y8Ln0OLRnfyGcyOYiIZxSrhQbwhkuQmlDTvlyT9pQ7lNc+pFTKkP6UVY44l1F/FYt3zqlklTM1iRnoFXs+f2opeRXvYv6pt0ojYrjUIogLiWQt3G4Z185gXl906kcUTYCjr2C/B0Es/oaUptnwjHsSS9fh/7Y8e6bDj7evRbLWIBsIWUses3Lezhq9EypkU9KfhVk5Zj9ZuUpaLkB28uTsgtC+iEtDwF7inQmpf6D0/98Om9euuEHpkReKVhuUDjtpCSO8F411fRNMMsvg41r9DfuX/SYP6IB9Dk2LWe0GnUL02UHl4LY+BV2rKv0cx01I6mrEBqFUi6bdjPPjhvw0h2RFMYfW3IDjg+Fy0Lkxy2lvupl5Hx3hmTG9KG9gWO4wFOg7MMUwdtdlho9NA4cXSwr1hJc8hk+vlfR1nAEPXM5Qvov7DcukUH5wDbIwDHzba+Ql3pNf4B4WLviGt7YWV1lLm+JHg3lFXZC6ONFF3jUUWkAw1GzshqVG/YMtyNhbVgPhL5hHTQkHp03pErm1w9QloKV12AykpaX2C23k4krt5O2Q+UpKrQMBchKBhfxWbdRlzoFe0Jppl2or+hxr+R4f3K8/+c63g9pq8cfe272Lku1fPpTcpT/R88zOS71+qOGQgkWX/lDTWdqtXr2attWEW6Xaq1Hf2anS/V8/hOUcVonpYaSUkM/W6mhbLdgY1vtzUqzyD1apq2pgO00CH4CvZeWvfsZymdQ+4mV0VDpccv2NJj7VLYi+/qBtZ1NH6/U1ro1q0utag6tB3yHsJdK/aHdvFyAvTH1V+0GLhEIPtIGkbsJD0l4yI8rV3bgWP7lY1dZhY/iC/ohHBtGsjOhjYQ2fj3ayAfzA7b59zhyn9BOQju/Ju0cpZseKIVEdbOHilTfBDN7Ey6L9KzNZjebpPwaK0MMJXpHg5KTdgZaeuLkMjExnsHRx3ScMpTOdUrtT8FsOu80tPTVnB1Temk5iNGgdOtA3gM/KprO1ARZPMwVsvWd4wWLV5bSKFD/01XjG0pplMpglwtzvhTxIVMXjheUysBHw2tqk+MFzQ9pYy2U0n/pcaXD5TPCpTbSsfgeSx/PxRcrzrAv9fJ1ctXC62NbzoyXYXdmJIZie+Pa7OeJY3mzn6rk+qbNYjafGlBinF074BYQnOP9qAS2hjeuDYX1GD9+PWka1zS8TJqtDft1vWEUD35c+Q+fHmuOK5duNJSe0Wmme24+FHcyGtKeMul1uedeSMP+1l15GVKm48grH2KPX1bS+a7SMhrkKGSzkgY+XZwuCZ/We81K+qHXWN9nRvhIy6DiDJ8tY5SUZPiuJRlwKcWYI2lTadiQ7/F1Pxlndcz1MxEd95gjecfIUqyDvrREwxE643P44mUieLCjC0auyXmr2NIz1+YIdtP+MijvfQQzodPvSqekNN377fdRxwpzmTO93j8zIB/Vo9c31Wb1LVqjM/jwgPM5136rWR53CvVJSbHl7hznRWZr8mO7MJ11GpHn9foKydhe5P3MlD+v1EppSJ7NNs/u0EpKbZob7F0OnclLdWonnfvjzJjkndLV2R1Jif1r6KSdkpNPQ/kQx4HU833n7uBcwKsz7kPH7HDC/dcv/OQcPUr3qif4wJ3c0XtSr/+0N49fG3QHZl9TTrWB1j3Vukpw2ul2pFOlb3Q0RRropqocnbPPDt8dWj4+gkdWiw/hHTOJVN5xr3LZPQfwjjm1lDrqzMLeY3jvdFLP0rU3Oaj3RTiq94Ud1jMtRXrJYbCHuxE/77NnmexldoSPnewiZ1JoD4Vcde+RKDn2SJRMZjF9dhb/vbNY/L67DIT9inE7GNz3l79L7MF0NBstf1d09gB1k+nc9z91lje/v+95Kjzg7DaYvPdg7BgVHvKu/xdCqN+Hd4tA2GF2IJJt2793T551FotnkQWAyt5S9NDZsU8/5ugY3nk2sCQcVfyrKh4rCwFFxIbvdcruKfZsZPQcKjvnCGdR2RlI4SgpeyPmOOmeU5HC8Ow03fc+xZm7HfBWcIDudSc85w/T6fsfzvxrt5sDxzbF83k7P8I5vS/4pN4XIlbpS1S0xh6E5GKU0RnSJNiGwIk5okvQNjCGoBtwfeHHPwUNRZL0gaUa1k8xIyS3O9Ppn5P+5v5cSnXmwc3t3f25dP3qdUkHRgru+p1lv3d+Kl8/XbM9JToawwg0JZDd59GiAjGnK1MIYc4R+vEODyIY19/oGwiLfvP76+URSIhJBI5fMmp1Vq7jOL//Tug1wfEEx39OHM/d3b0SxfcagwnKJyj/M6N8ZnormG9vifTX/+RyFewbUelIESY2k9hSTKz1H6O5YDHjskzsx8qiH3BWQEs0JcwhYQ4/Vucrdsf9YCkifci4/nf39nbKOstSlI3qh7hoWUIyCcn8miTzEhXyOYoJFfyLJ51DIjghpYSUfmVSeplq+h2I6fpAJbKn1OevZF0pNjuAcCiid/7G0Ty0w7ZkBk/XKbxn5zSKZ1mypcqWdWpatnGqdQP1tDMYDE4lo29bg34/GBj6dQrtyzmdN9uHcxa1w3vJF4Qjdec0SnfMICkedtrz8RtKZRZyh+Nv8SGhSEAoEg76zsGg7x4K2gkEkSBlqrNY7NA3gOVc0VN0hufvPsMU3plzKUUmCbwkJe7Ie07iYKz22ajrU+qrIknQxeEIbiQKcp3K3Q7OP0PU4zpV79xtzj/jKMf1dQoHNOaplJSSnlKpvaxGEL5vyGi+kT0Rwfr9Rj4kQF82b2lP7yGhKTLeVwnJfUyYmWARJnyd+vxZTSkIGa6vn1IJLvxTcCF3dxeDCrKUUnQkZe2UnpJTCv5mAn6kpJROvqPPckpOMOafhDGgQr8FzmChSP+L/4eE39PTNerP1kgLNaWCPiYrKUtPybKSkiUpZZspWTZSsiSnLAX+yDL61UzJkoV/Iu01GFHDPZgmbWnbKVnScEtJShnoqYw7kCXSAW4qq6gZ/CpJKVnSU7KkkL/HNKazlkkDWWNTf66x9FxjU00ZFnrToHBW2bIRQ5dTBgGMgduiWaNRJBWBQ7VSUko1Ujr8T7Phg0w/GClNT+k6fDZTugZflZRtIeCh13QAJgAD/9P0lGahN9H8UBuD/CTDP4C5gn7X1ZR0nXoN0rxWF4roP9Ga50eW6T55EpUmhLJfvy7vHvopNCtFkpDNBt+/itNLPTu9pxc3eEqRgdDCUnRhT9HvCGKgAaYuK0V/Z9nHWFts2d8Cs6fU5+unp6fraC3ln/LqjWx51pq11Ha1tLmqlmd+wV36BXfT2sg3rVludVW9nPqznOSN0zO/Gmy9ofP7L52/a5mm1pek/fm7xyS+vlv+LprEf47mwfnnr4POaPpw10/JT9c/GyZdnBkarkjq/P48Nlx/3IljwgUT7+gVAKRi8ct3Ho04BuiYtGQ89Rqj0eM9xqgFeIvRK9RTjB6ClxjogXmIf+168tS7iCFTpW/9e3bb60/vf6sS3wT0kcXLTUrPJ6Xnk9LzSen5pPR8Uno+KT2flJ5PSs8npeeT0vNJ6fmk9HxSej4pPZ+Unk9Kzyel55PS80np+aS8Z1LeMyk9n5SeT0oEJzwkKT2f0EZCGz8BbSSl5xPaSWgnKT2flJ5PSs8npeeT0vNJ6fmk9HxS0jopPZ+Unk9Kzyd0mpSe/4Gl5+FwCs9AD9e1COWf7z/TQErDvEeKf1LAPilgnxSwTwrYJwXskwL2SQH7L0kB+6TScVJO7mcoJ5cUsE9w/O+O40kB+wTl/2EonxSwTwrYJ8whYQ5JAfuEZBKSSQrYJ6T0o2eUkFJSwP6YJ0kB+6SAfVLAPilgn5Sg/juXoE4K2Ce4kBSwTzAmKWCfFLBPCtgnBex/QAH7/cWb58Pb37CpWO7fP0yX4fzZv0+5+398zvAvXDT/F8XeSIn9t8LAaxGg4Lw6eXq9ybrDphHDQT13bUmXe0bv1DIl/VTraMFpR5K6p7o96JiGLHW1wEas5nmTdsd7xhCUYOwLvwM+K4OO1rfVGK/ZMRP/Zq/ZMYPsSWoXPr7Ga5Z6JmX9Nenquq28SbY6xZ1jUvIB5Un+OmoT9fChn+8e5vTnY7gTbtO/X2CeKqa8koRXmu4Kv4dSXeFOjufSXE8Q7UEaK7xOUlghgRWnr6KZfovUhhVEMl1Rn/BczHCF/NZQdivObRXyV1m7f8jFHe/JExedeyR+QLE7huWFb/k4/7zDpF59s8chW5Hf5BFjLyLNXlEMrOErNjHyrJSlCdacgawjMNiI+YNfV4lBYIHNwGwgBZ6a2KLC3QhmIhhvxLAy95iS4jsWG1sh5hPvVnxPRe9F5qCnDGq37cwPDEILHrNnspQyqXGnIDMJGZwABQNbqdT45Is06awMaMOMYJUBSSHL2PcmmSF+W5Nov6F5hLqVWY/x79AOyXsaLBt+IQYsGcqg+6RjY12yUibZX0UOvWkJb8oSs9llOn70TT1lWgRY+g7SGPQVbHBDZ6bYiWGReSMcVMi8JZmuCCAkEYxVZYKxx++ECdb4czuLbH6JLI+8JsvUbyEZfPGCjyD2fWbqRxow/DP4oDZ/ZhGC0PCAtgggFfdgwJIJdYFLhI6A36JgNAy+PCUERpV4KVQVO2ZSMh6LkJst73Va2Op+f0ZokhwTpZRChzPJcMetgFOHit0rMnFQqDq4VpQQYpGxOIZwnvYSCjTInqrYS2UKvEdnviI65dRbbAh2UsWOx5AVUxN0r4o08e74CthCXIEaBruckm2EIggVAD8FgIDvT09pRoj3wF9JAA1mJYocYUn4M95Hg+yuRgldll7Yp8IcjxpiS5ScRODtYzXQhDMK1DSE3MBaqSOT/ahRgFF811QCMAovAjVZhDY4+sQeYKkSdgzip5RsZPt4KqVDHaRVbQ+hUf5gmHTHLdKhpghCWOWfZcrvdYJAEkKCCKsPsXn4rBNHI91sTLOK8CPeQTNlGYIDNjyQuGn79tnUhfWHmgDlKcw/SoamnJJ+w38ZLkalmK1H+rHUsIfbFvBEZ5QLzCmMZ1wh2sE6M2XaKdvCZE2mKxuigNANKmJ2hKBuRX/icld7TjJTFithTUCP8YcL2yH0fLxKuJ8UEXvaqxTJZkhdpeMaL9CU0P9rdKcpi1P0N0B4W9+zY6Hdwp8x71DpPNQQIWAQKc9wrAhPIlxEEIm6ebzSpFv/KKXJUJ5VmjQCRYNEs1LKC9jxy9CIaAPoLSA4LWaqnGkbYamjh5ioQWw1IHCL8BiLE06I7wu4YqgvU58M7b3Up2e25qdXnxje6DySussn9pt9IkdTDgLiOULFAk0DxNW5LS9DCFKlsUGIHbIHJKxoAx/TIQBJwpBYxuo6iUPqEu6AfZdZe12FsCTu0IZPOjxFc1BSMupKSylobyztRQ+BdKjuqeD95yFoW8ccVyY8gbzAoKYzuxeYKTFdFYisRvwgWsilIKcULaVx94Sko29HE7ggAUn3ti26WQijl5D0sNQUXj79954D4//nmrPCo+OS0FSiINmVRQZ32RCQSjobxNiZjUTD41Sbx44hrlwQuFOyZQF6mch22CuM6pxDYXylo4fmbKY0G1GkhkgAdY3mZgtuErzVNjMoxLQDpjxrJIBP0hBQQ+0ZUJnCE0nlFJrSgBYMQhQyEKhspRTNSMmKiowv2z7kB1O1lG5ByoAG/zNpKgFOHJAQ6Wka9MN3xiaIwdqr2mtpQdVI93xiOu/0/XCVjxvZfVsXOlbJVAgomWUQYZAcCDLafEsTl6Xs8HsAnx2VEWwnnm0YFRY7LSmcrO8BSUMVUcOQX4sJtgIzR/hmIcTTKXxJggojawMNolmxDRjRUijByzpk1sQOYBzwV1uCd1mDQc0ogwF3hSmobIRJSXhvbS7ZNZM7IMgLMt18BXMzlXEksve2yXR+SaeMRjOFHhT8us0VB2p6YXEltJHMfduyn9u9daMovEGvittGW1Rwkn34HvugmVG479sdgT1GRLgh8BOsi8bwdwvzWCXG6ApxW03h7It1I7CatxM9MVyDdY55h/DuAdQUuW2CoN8HQQUEixcWfFMs8eW9OMze34/JxwuNBCPeEyPQZii6qMjtugFCLOV1GjvuwpYZUgiaO2JJKpnBUcaH2Nm32iB4cA4C2wpZ9iL3jMBpn8KrC5yVKr1U6wt7R0TrWBIIh5gM1kt25SVWogi/bzEWdTulKtTLTiRRRMfESzWoE0M3Qrtt2IzlhBFE4V4yZmtwHDHYYEp4MabNeQHgDEbAY/cYQ8xkMXkQ3JLItfZtI7dqdhxdu/L3xfaM9Wp7xgohbYgXxxppoWkeeF8Paw+H2jxn7wltJYGn6HxjGRFJYmhJkDG24L5Q2Qi2FZE3cQLKtCBAAMEjS06Z4LIyrJRhRPQVHiAK0Z0phaJaps29BJGADBuSrCisFZLIBD1dEbXM8OkBNWrhJa1e0wqoQgIPjUIZLXOO4vMfugas6ldYzc/fKhyisQX+qnNtheQ9YaalMj9xTMITfsVWf060IbN/C0DZ+yK2CAI6mgiRanbIuFLYMFwT0MLsMrwbux5J3Xq1QUj0AdbPa4MDqrLDtKG3sHwRF/5N4kFwoRNzOsLCucQIc3zNgIw7QGGmnX6T0BEltpiKICo6BjY7TBV9Iv8D10FI1UkE56/EJn/+VongTARnIjgTwflWgtOwWWbNdxGa6KmV0nCaoGGgbgwbPdZM7JS3BXGqownTH2TyiLRI5OxPwR//rq0SOZvI2UTOJnL2zeSsyUG0k7vzq8lbFgbYSanRI1k1Yog8CSV+l1BibIA/2YefK8gf+1so1HLgqA/XEoVUOGP/FDmT0gg7IOcxmLqqCXkBkUNCYlIggwmdGN5A1jR8+iesAx844JMoy794q0RZTpTlRFlOlOWfPpqz9+jojvTdk0ynKSxzRZZpajpJpLF2RNozUSKCaehP2IuVyP5E9v8qrRLZn8j+RPYnsv+nDki9hdw/IGJNXZy2kP95UDN4W9dcokwkysQv3ypRJhJlIlEmEmXizZSJ94y6/fOUinDcL/6wYfhUFulDIuWkoFqJRip5vLiuhip//6NS0aNOUF/Gjj3ihBUkWmJBDys9P+JyCwJ8KIFFS14doDk5ZR/CfShrpO6pWXtAu9JkSgqGFGK1BvCkb3x4mPUDI9cxM8P4a+xlw3B8McSAQ1z3R2ygDZVJw9zz4Bbax/BL+9AeYpGwS+EHUYOew9vpElG8CXepUG5ohA81K/D0hxCH8ky5mDd54Rtk7OvF/DuWm1HolvESMQAF/t+fvkCLau09Y48LsqiWkAQQU4BFtXZmmhRc+QGpLlZSYOVHwH1Paov1woIqUZtKU0BTUkQi/yZjJ46G8cF+zP0PIg+y4xLk+W7Io+xlyczrcAC7dq1PaqIeyaKT3X6nmljqLp2/rnYJsacjVUtw/0fVK8EdfGulElula1J0przSSiG7S32JeYsn+N3tW7wcoQgIhfRO+Q8C7JA1TKAabw9zYMnhmh6yRBRJokRbFJz4f8RUOOQdUg46aaL7cHwkgLtt3sNWfVdTN+wc/7EzfUe38luDC499zCpe5PNV9roZdOtv5+dVoj4K3XqGeo/wUiAAPJsYFjvDA6yBhCbAI6XDCnUpxIgwzxK4e8KFEi6UcKGEC+1LUfkWDoTUSoswIV0NOyVNeK5yxxpmVNE39SgDY//F7+y+H3qTOu4StpewvYTtJWzvMNuLCab/3dhfnMdi/7PdD1G3ghA5Z5fRoAHJZXKmym9DiQ/Khe6Z4bhD7i0xNXY5GL5PhaYEiLduSdwRYXJnBL3KRaXXsDCXC6OdYxrTWYccZ8ZRjaXnGrM7S+m9PLrKlo0vlTMEd5MWchjhQA9cH/cjoosSvkySXFtjp3S+/Sa9hEYn3+ndROjJbgaFdJ36/LKOrq+fUt/z1nFZ7ug9qdffvXVcG3QHZl9TTrWB1j3Vukpw2ul2pFOlb3Q0RRropqp8863jxwySyjvuVS6758bxY67RTh11OXHc3eNB577/zPXk8MorrijXLF17mzvKg85i+XDX7305OceAMS1Fev4u8oe7Eb7Mes+i4CU04J93/b/wBeOz/vLmFvdYyFVj7vCWd+7wlmGk6cGR/ntnsfg9OkWEpYpxOxjc95e/S+TrdDQbLX9XdPIVdZDp3Pc/dZY3v7/nFeB4uNltMHnvocj933jAu/5fCDF+H94tArJn0z8XnbvO7B5vyL/5peidxWLvVgPY4FdFZ9eZf/q+t5njnYQBJXKv/V9VesM5W6C4o+9/sftT5AL9COniS/ER+eKL8jkx4l92CTJ6dT4ZAhPRO1/jn7sd4LfhUvfjrvafP0ynb3lL/1+8Wcy9/fBI4CHwsNdfIGT+/PXLCRIm8AMRKOFb8JkQwRjcX3YwuOCieCwV4b3PX79wUUdl33d8AnJVkvSBpRrWdx0ZSZ/OdPrnpL+5P5dSnXlwc3t3fy5dv3je0p7eg7t+Z9nvnZ/K10/XsA9Ya8C7hoYHmXMeYUJxF/9jzQChBO4odvOZRgG/oJ3+ze+vl3sRA6FirwOY8fnLibNyHcf5/XfA+gS/Evw6Br9yd3dHolfm8cMiXcplzoyV4zhO/sy4dZxSLkG3BN2OR7fM9Jao2t+GcNdEefoTKdR/Lr6L+kQUye8ymqBJkk+gMtT7d/cUnp3F6Dfc5LfR7dmj3O0vOzK0+GM0J1ZLf96/G2FVs7LoB5jkvP6yQ6CcEOA/jQCf1SeK3XE/WFKEYybLv7u3t1NomMWoI+obT9dPIAIS9EzQ833VkX3YSTDtj9zd3e1dGE33i5EEbRO0/V5qzZsj7rU42M1yufhy8vSU+vw9veloX2zJDHa96ZYlW6psWaemZRunWjdQTzuDweBUMvq2Nej3g4Ghf7M3/ZhBUtxFvOdjFAOiWLLXCZ76Wsgd9pPHOnrDft6wm/f7enm/t5N3x8dL4gipzmKxQ5wAk3NFT9EJnr/7BFN4V86lFJkkMIKUuB/vOYmD4ZRnAyNPqa+KJEEXh4MsEWfqdSp3Ozj/DE7U61S9c7c5/4ydp9fXKfCXzlMpKSU9pVJ7mYsg7N6AtbyaFWHR9s6jHRBnL5inFNtvSJCJLPVVAmwfe2VmQIS9Xqc+f1ZTEKg9EJZN9vqX2+vc3V3MVr9ZoD7BiF8OI0BdfQucwDKL/hf/D8mmp6dr1F+SO/R3zx16TcbP9atVlYh68vXLCUn40ALVDjSlc6rYpnqq9TryaUdWB6eGpCsD1VLkXq/z5eRJ0GUQpn79urx76KfQZBRJQsYTfP8qzir17KyeXtzgKUUGQutJ0fU8Rb8jQIFelrqsFH1htccYPni1r4DQU+rz9VNCvz+AfjH5QZ0mBZEs0B8khmKahcfwAqNhHfKgMQ3bUGVJw7/iTF4dMmZJH6RfFbgBFIj4BfL1LNPU+pK062E4JhHu1R4GNMh/jubB+eevg85o+nDXT8lP1wlJvJ4kTLZqqKeVemWyaKJv/Dz8CrEfkxyV0Gx8iADf74SPa+MMdvQj5lbAiBi3wqcsCC9TUU/k2AHiThpJuEdDQBvdfBN86d72Nr+NeiLanDx9pL7Zk/PPX8Eze3J+8m9gGr9hRlHu3z9MlycfwTV7cn7SfPywdFa5dDZfX7ULealdv5wGav2+51yc3Q2ddNrJedVGXmopN9N2zn/sNXTJKZUcpyT7XaW8aM+m0ef14MKfBvNy5PlCeD7NOWUH/d/FmaGlnWEu4zi//37y9JFPOuRM5vPd50gmfmRwI5+cgxP55Om//Otf/++//s9//f/+K1JG/vUfWBn5n0QN51//yzMazr9++3oy6p2cn5hB3zIVWz4dGErnVDPNzmm33wtONbXT78uW3TUN++Tpf/wv/0L//69//Q+EU//rvzGO/K//+J9DguV//fz1f5+Ppv9Have/IDACQx9YnUHwdP0fWGCcUoFxzFyu/ysSGHQa/40JjP/GBMZ/RbDi0/sPLDD+n/////1/Ua/0MeOwjG5V3fPxpV7pXn9+OwKn9N7sbfrKK5K3dd14i9xtjBQdraf2unpwampm71RTA/20M7CDU03vBL2BHmgDRT/5SNK5T86jGb4nH0/uHub4J/S5f784Of8qZpniJFOSY4p+E2d+cv75ufzSk+uPkEmKXsXof3L99BGySE/OT7hK3ZHUniFJ/VPT6PRPNbXbP7X6SnBqaSrSyZWB1LVApT75GMk2xVMXMk1PzqWPYp4ppJnynFL8fjjf5eT8PfNPTj7yXJf3HQn73k8iXEhwZ0eMvuO80XOuie6ojscgYJx35aBPpTjv/5btI/SL8asgsaQoBhZPik2UEyt6Pi9c94foIiqRZhYIPCa7FXhqYk0g9rghVQjMPSqQ+I7Fxian5GSxGh5/T0XvReYQOlQY+Q0UGQses2eyhGvbsKOBQpl0dqITxmSLNJXQOSOmvKkMSApZxr43yQzJqTaJ9huaR6hbmfUY/w7tkLyn8bJKRPEiQxl0n3R2uJWe1yQHW+mblvBm/PnW8Js6lJgAYOk7SGPQV8xoASvyhmGRee+UrpWpOiVLBGNVmdVkPXYnTFx99pmdRbqqJNQMxpWoiL4tGXzxgm4b+z5TUSMNGP4ZfFCbP6OltTR2KJUDSMU9GLBkQl2ScA0AeYuC0TD48pQQGFWiXasqNijwcTvxhOY+ZdtW9+vhoUlyTJRSCh3OJMMdtwJOHSo2C2SiXas6MdhExCJjcQzhPO0lFGiQPVWxdWUKvEdnNg6dcuotNgQbV7HjMWTF1GSbvDDXd8JXwBZiwmoY7HJKtsmRXXZSmh3TxgWvNCPEe2jlLgYazEoUOcKS8Ge8jwY97ksJXZZe2KfCDGYoSi6c8RZYZDyrgSbhmzJCyB2pH05HpACj+K6pBGAUXgRqsghtcIiLPci45DQYtPgpJRvZPp5K6VAHaVXbQ2iUPxgm3XGLdKgpx5ekNaKsPsTm4bNOrGR+tls46a1LbAfNQ/ewiJu2b58jt6mIGBC6LIXOi3JK+g3/ZbgYlWL4tL7Qj6WGPTO2gCc6o1xgTgduZAljnbm/Zj7t2aAiZkcI6lb0Jy53teckM2WxEtYEopUed4uR0J6PVwn3k6IsH1CKZDOkrtJxjRdoSuj/NbrTlMUp+hsgvK3v2bHQbuHPmHeodB5qiBAwiJRnOFaEJxEuIohE3TxeadKtf5TSZCjPKk0agaJBvLAp5QXs+GVoRLQB9BYQnBYzVc60jbDU0UNM1KD1ERCBk/KTIKXNHeU8hCuG+jL1ydDeS316Zmt+evWJ4Y3OIwC7fGK/2SdyNOUgIJ4jVCzQUJ+2hIU7seZlcJ6bOKIn4Yt7oN6NrhL3uA4Oc11nznSF3P6DnekkXq+b9HWI6tEyuxIN89k2CxqCix8tTknJ6CUtpaD1W8qLHsr6q0sEYSn+ujpFckrR3rFWP2H0UO7LwvWaicHzzgPj/+eas3RcdWDQD7+1OLCsv7K4MZ5puLSxrD1TPtgUnkgqJ5gUxl2N5qdor7hohzKiVxYiJjf9IPy22TWEtn3IF4bvyYm5TsMEQpMg8KWJVxWGK3bxy5teWbeL3wplMunHL2p6Q3wVrgMLI5mth2qch+4yZPZAhC2yGYqkJqxF2WH0ADM7KhwY+J9tGJUSOy0pcKz3Bp8wkq1z3hjSoEJA1BQ+pdBFXtTIiUjvUOPXUTa7CUzdpXCEy/Q+rVeRutg5jvbq0gt6jb2VDPf2LcQvTuAo3isO/K0sGA/Od5be1U70DH5NGb7lU7ioy6bIQT6oNCEPDYX4qCrm8tlgFGGVgkTiSfE9nSgTukQzjsh3fr0BUjhYLUSsohBtg/Ih/CGe00Um+kp+FxkKEzupAbl3LJKlSBQs3aRqFk6msjH/lkQFi+lV5HecXGXhDcbplDh1CmtWBkmShOxITIhxExV0dzZDYUepYhBWpUVVSuwaXwlCSlSyYeI5QsxoL6IxDk95d4+/U71/gfHgz+GK/rtT3FfdXwlTG/keJrgIAhGw2cou8dlK6GX+VSE5tVgzx2l3tkny8XSTJN7RZD78G8uHsSndaTqpN6qrjDRlelMX1fChcWh+ik6+8BULqLgPz7i03jHbohQV7fJYgc36CWHt8WJbbB/awGiFUX0/ye1ZQkQ91yMauiirsRyLdJjcxPKNjaJbACgY2aXwHTzJnvyIPYm/CymOnmJFiBJrRDC+tavh7rM1mDoq2BvHytBdAXqsPv0jdNNXScyQQhuSlSHNNV5KvkIhpYSoC+igW3E38hDxRMahZtErpJJoFr3SdLRebTpaITzdL33UuGk+K62OavOcdS20lQQDcPemZ/mbbrp+1X3UdGK2GIQLkVpcBX68jAPF+NnopLT1ay8xDxVV/yFW1ZuVZP8JrjQXr+hlGQq7LPmNLjgPh3JFbodsbhU1JOLbggiCYZD7wxERWXrKllIWVIPXLPRUl2A5igI/yCmTS39JhcvH8dUa6AtcWW7hoJkMP1j00nID/U+DfmFXpJRlwj3mFvlMGhjhBjYE4GUbvWTKzzUw0RTgtiEwe00IGmnEAYS7kkyyWku4Od200EwPTNyCO9dhHjZerQWrxXBjt7Pjrix4H6sV5k5nVOEg2GnDsgAuGPAWLvWPTzTtgyJaoIZpwsQXxqukOZoVbLCuhJaIWpgqbQGD4BulCVwUoDdDZ/tr7I4ZmXJkzMgqDftAC0jXi4WfBdfakX7xvAx8YkSDcBsZAm+ujPAAXysFZIEgZhC3BOqVrmUXC/HVdhbxfGhw/b6NyRSTBIKgGoKgZZCoOjSxYkhCj+IMslFliw4jR5cjs9v7DcAqi0QkLYrx+FJ/0wxd/g+0baH2GOIAPvtbcMOmrRFmalRRxrmpFDYSBbspbIEOhKGkTPwSaaObsNc2bA4IKgxbwiHsIzuwTdQBEg172xuY2AzU3jTj0AktRaBHBWCKpmbBmBLodpYlbLqCfuaggTNCjFuB2YUxWOUN+D4SBDYp+YIoi07LIA5VjY6nc15iQBAWzcmkHMcCgYn5MWFkNJJugxsE7Zii0A03iY5E7kyx49cFsxFpFhgcERAa5aoiXmDzgO6rhfGUbAsnAEEmWCI3ERaONk2CcRTqWMaCgwBTUiPTxLMjzmhqodo7ousbuBuZA0ZHnRyJ01h3uAMsC3WTIYG8g84yojVTxoJGIzLLwvKck72ph6keqy06t0SjZA8y7dDMNNgStk4ispGys8tDfjjZ4u1UKROzQlgAuoRGnQgSoQQB6ITfKzgnRxIxkcAa0wX/YhF3osDWTZURId4RYXKaShBRswgOEwjipB9ZUEjIOtnM4ItBt5CjmkAUhrDvWO80sWSI3aljZALtC2OAhneQj65FRrdDKCQLMkENbRBat0UgoWOBziABg2HGg7mnZWGoYLYjwyT1kOCWQ9gjMEGTbokZZoLay5kgm8u+1/apBPs4lalySS3tYCm3pSSI5yDVgQQ2IdJCv9hk5gQ8uoRFhkk2TeeuNz49WeXTI5qILbBPja5B1OApPYUxg/JHQFAiujTMKEw6vBwrOhG224QfEKVgz1uGQPTSvr4sTaBRzH8pcoRZg8YISTMZ4ovMnvAZAKWJL7C3IIplWgJlmgAnQcOTLIJSIspHpI3MldewHkRkP9YcCAUJ/ENEb1iqjpFBVvlsCEoKmywJOAjKIkcZTsHEJI1/TexNSb1M+zTVMEeXqWJO9FpAFM0K40lkTDnMXV5s35lURyKooccYEgdNDxOIXzRZBfVaEmUWSBpCljLgdQiSuhziBvx/JkdFsnaVoqLCkMpiadhs7WzOkghXEZYmV7jD2yQdQCG+PJupRgqbHsNmU6H8wCbJ07agZalhlZWs6Jjt2CtBDFMYPayvYXkQVtekw+qaFNrGMHVxxfxYk5nwe6yHobewHiVbhAWDjFHJLwwYx7dnImZfBzpxZOBMnxhDSgvZMZZOWY4iCww4TL0iUI7TOwXZdqTiiXfSoKgETE+wDNDeEdmAmTtnM7HGCI3Xvk5aMv1XkSmz0g6t0DRDv6g7io0Kig2VasQtxk1yQ9B4JAxaskSdylNLF4xAcQTIlMWKJLZMRUUS/BjEN2URuMUwItw45IGwBXQkDjoqkLCXizBgbLBzCo5aO0dZc1HmjvGU9q3EOrdAD9w3MyJR+RZjVNWleL7/I2mWsn5dp7I1ysEUKVYJed5NRrbVjmG/x0D4hU4aqlGhV3SJq/R4TFMjWwaojYnUAhe+aRF9EX4xiPxB9EUkmYWjFqZFVklQEgKnmCGYWCZh8wt3YdhUuyC/aDahDjIHywZpa+kEk7EapBvEyQd3gZoG1Vhf9xPifJLAI/Gw1ITBtG1KTC+3aLKJTJVhfDcp10UNwV0p6wSjaMQc0YNMbXNSr0YDRLCpNDPgFYOYAlRNxh1You+aHoW2w7Y+RmULc1mdVKIJefHtXS++IPINOMiCFUYiPUW3DNV0VKqm0KWC5i+w7mP4OMNZASKmLPjsOTeg/FIwhmzi9CNefrJmWRJUMaJtUNDHmM7MAWgQQx7nkEv4uBTX8KMTJzElYWAJ63yWQSeOuY3J4wUS9wxg3c0CmWhikUhohUSBuCbE6Q0HfIlzRzYpAhHUNoklBQiNneEmXgVDSERGMB3BGcKdWNxVI3FDjYaquPFs45iVeRTQtbAfhvJdOcXCLhoEsgyLkDkR0roCHnyTn+WTdAFzZTvk9JK5VQFMyaaQIOxYwnxShyMv2PTEn6npKRPz3hYCO4TqZSASXN1BJ35FGuyjjibMWXAkz4KiT5HImRkNGpnY50VcXwxZbAiYCSPp348NqOKUJHs3cgCxVltUy03i4pIhnEva7ZdGURhi1moZu+CIldSM90osPxwBR5H5PGRKCahHjUKbvEnKauFWshHjm9TpBE1swfGQM9EvKXTo0SeQJBwn8faRSb3A8KOuXMop4QvlPkScWpI4EFCMZn+ruDHo0ShLo3YhoQpbotsGgQNJcAQQQYe1LnxBPFNqYTeIfg9EQcMXaAkarMICBNDw2kgZOtqDqdLk48i87YhQMDjjJgzFkgjsowyYHMinu2KKHB1nI8gKxSnLpPyde3fxfnE8xORLWJPIuBmumRJhOZIoS2yJIQft0dCZz5DwYTxDKiypjkE1KoM7BfazHqKnsJHDPNkii7ZEcadjp+uzgoaczdiPcDHiHLTHg1hm/H/svfly2zjTN3orKtf315vJay4ASeSc55yS19hPbI8dr5qkpmTJu2R7bCeOM5V7/wroxkqQomx5DWoyiUQRINBodP96QdMBztSI7QuuICDK+KKr7aDDs4Y8RCaDsUPmUipjGIjwc/CK692G+WoFzgRdp2CJ0EweT0PrNSKIYJGBCglRcBByeVBtI/43BhgrGS3diCZj1BMXfUJyWxlQ4gkYoyhLKIi6SDzsuhYrd7etQsqwjEB/kVziDHBNnqpYX1koF7B2mRQRZiiFSRWBKUtSYcRpSZbbj7BwoXOrSi/w0SpzaIVYKHa7048ylgUVU2GBGRhbIi1IW1GXyO+KxrLKIhotmEEAjeDjxBJf+kRWHmkfjoAVGTOzOIgR/sNdgAKdDxEYCZW7Em1qxxpiLpbdgbSFQwBonRP5g15yex8+ooB76B50QJihm1wxqPnWWGqaK3WMxgciLRtboc1GDSSkIQjQKVLcGBUug2jbDTSQMw4D7EtZkBUOWHFkeF7CtEFLvzQtnatqvAb2ZXmVJ9mD/XNJ04IZg9e4M4+k79dyS5oxWSWpC0T2xGuBischMKDymy3RUiUKZQa7RWIpWQttXSamys8tn2yWN1kzMBs4a0rbSJobeh+CsFfZQB4NFEfWvBoYYok2KU0dRyyfSiT7kLs0ccz/yDA9DcuYmeZUXJH8JMlpGusqQQZZUzsCNEdUSyKhYso2eaxkr7Jf3aCk3H+AUJTTBpgUvUuxmfblGDZIIyHiAMYRdRxAhvaY5BgZsmf+kbNIZpUBDlZTdHlX3ihzg3MvhxJDPQNCVbD2PtwmuVfJiFyqtrwEUFh1vpG2y6vc+Q6OsRRTrYnuyT8ybPQsN8fny0DCPHKfh990FGU21UrYsyhsZ6bro3EdJ47Pv36/jtFHofN6QDDj3q3HsUb+E7PhMOTRSPaSslmnIFnTVEDTjN8pIe6uKynqMUYBp71wjcDdnAt7DgInkDhZhslWYlNaFnl5bKefwJ7JMm/ugiIEbh8+b0q9pkshpb9WQ9U3itl6vSNK6KZKUvhvA/JXOGgkSpROW95BxX0FOO/DlCqmBEcmlGcYU5XUuAnK8EyVflD+5DQQ9tVMqZQ9GMnYPQzBwswynV9qB6QKM5I6tfSVpkuC534YYoQXthr3ZfNsoiwRe9JDosw6kENMrBjlEjaIE4YRZnTiYf+ymjNHYho5JRdIFT94Aj+FjG0+LKyLLCQhm5wZU6Z0JJUv5K5i/M9C6eiKjOWBFbQm5UEPS9uyKhhRptsk1T7CNE34igiqAQjLOhtT4Sgq5SjG4z2PBDBKBlcpo82HxWPp3s3FdoLwHgbPcXRU8qt53BcBfG7n0nr5UyKVyDDTCuaixbiUpudQl6FPlcLWF+n6AuZHCR6wKq9iZiTTRcRv7LPITOfixlDUUufsjOVGgeIsD0LPlyUmX5TSeoNTyqHmq9AxER60zMxxy+wjEd/ER0DeSaDq65iSNNuFXGbqCJE8llmYzlEU4HmuDXoZwzH8hKbj34BlmVRmL2ot7sXh+UQ53AduavLwOekhU0cWsk/QxLZ1AtQEwBHoOEbqqBvf+quwV1GUENAkcmnQTYPecHi940Mz+nKZlWtqVujYPTdQItUEtTsGfWJmROo0NnGyfKz0Gkc9Q1mUIjFSpT0hVScWm9pd0lTAG3m8Bs7xAC1lBrngAdsH6RyU8ThKRTyDilRwKg/dAE4pRMJrrjz7EE7VYEt8LgCgYt4JzeUvIp8xjzA1JCeavWF36pwlmqrTv3kZQenYHGbHKZ+qx9s2KSqWQrw6p8pApKbDPXFPuGWKdzzsgskT1kRZIUv6vRyB+qKU25ubkuTbGBNpSWHcFjPM/C5UviQ+IAk0fTVT8jpdiAxkoh2ows1YLsPwZ2HUrL5GBuA3GWR8UctxPxaXM380UKwDSoZ2LJTLCQ9UQLQDbHdP6o/W8dJf5EbJDP1R4gBmxpMN7DSB5KZcp/srH5o+Gs8iBWI0nix09os8RmkYAyoqmvo0rKxZ5gnclWg2QV3PdNpZYaSVlCLSjuujrKjhwH2hie1Nyp6cp8fN8jBSBMy4mk7CyDCVUZaJjJmsp4IQC1xbVKV7QVkdBdFyeILCcSJ5R/5SJAiCbK8ZwhbD4Wflryt2MbOCMdQako9eZfKR7YB0TtPpbD9FtdTNLAhZwq8sS9gb4NdFMGhsGSkqQm9mzehVds+X2YLdOUST185EC2iZj1qAUVSoWBXKSqLMMcm8bgWMsviXjzVrcACfuCmfqjgaum5yr+Xn1HvJqyMYwV78fQ2BYC++TJq+sCkFezHYi8FefAX2Ys5UwpKwjp7EnV8oCCSrtxcW1LOc+0bGw6gzJznU+5EpJBgmdJBVxipCCfEYORkyvsVUbogdDQiwMsDKgBdeg84NsPIVTSnAygArA6x8DbBSjf7xzvQ4KbfYhspD5lgU1nEO+zyANfEQOOJfj8bAZWrMmDgHzYwhVmcF0yePkAQMGzBsACcva0oBw755NgkYNmDYgGFfAYZ9vlSa2mr/FQfvyzWwnPoC8oWMlWF/UXiEFGY+i1MdUVMa0lbKyT5PmomNm7CwNmRTzzVzS6JQvRKqcL+qI5qp97xhBdsHVozFM5kTKRkrTySkpjbQdUBQfIvcGkEqovBnAWki8K4aKESiKpqoesQswjN5epNEOocpy6AOssa9SnLZdhRN8LhKZkp2/MLwrQw0xpuEORfhmRLc7AXowdys6mGUlsQDvrFVdloEOPJYWTKRSnNiUgEW1sLrau2x+RI0nXpSdYJVsXmDgEiKJfbVy8Ziz+sI6WhjIU4MIUDLuhyokj3Ob021eIo/gGGbGUeD5Lro3p3z1lnL+zIARz1KjsHTUvJMlP4CVZUzOMAE56r4qArJMyDDBEvkMtdI1idiLV1aHBFApgzjHF+5ROSNmMqGRSlhI0ORUlkI2TnU04i1wBJsotmyfDRDyTeNQV0q2xczBgfDO5JQ81nmcAFvEsxEUZUkMmN4GOBTlZLke4fVssjaAqqCgPpGE5QGTIoMeBePUTKeQI3H3CwZz6xFhB44Y0cSp0BJZ7nImYpGRvg3FEvMqDyKJ0uTpYY4k1IrTyXewh8aVo6GI3/q3UKSrdTxP0kesSn0CcfJwLcJoMunLDSfSooJz0ghT+IV8oViMZRNgwUQlH3VxZXxVdsFcmwML2CEBVOlkPVdvgKgNJe8VlAlYEJp5LeV98xKaa/ARk6qM2RhhMqtr6VyK4tGVF0tbBkGyd659wh3nAC8BQtI+pCkqJpYgZoqKUQsKZQ25FcS+PU18WuW1Vb8Nws01BcTZr7SQ4a/aVz1hYZo0F8vUH8VqgiHxzeeZRqIy2mpd0Vh8dTUqMKgnSYSKxGsXyHISHCFrcof4xT9he5IYUmJ3ONMGrX90P0hAKZ0K8shJdJvL40jaVmo3eM6sO9XKFdHw20HtFpg3Fb+ShEUXivLmPHsXMsBVeIuV5vYwq2FrEKqnDc0aanCd7ly9RpL6CuFq1o43itjcpX+KxAmqgdJLqPWTKZe4ItWGloZMZNOW/lTKjmWNijOkWWNvcNlRY40G6NslpX1UIDGU8GSrJAvG3zJvzyg6tPT+8bu99tz1D3KCuxexUFjJl/lW/vTgypBVq7yBMsOpSOciyxE4qTMs+sMsWYFG9PG4TZWU0qISJ8QVTZFZSnKRocNChXyxvcgU6lA0UHninHUQ1D0XOheSL0aEXfMWLOjD75dfZ/MICvg93Jk1uPHD8qJLveWWU/20zMleTyVWs1HqtVJplhkWU3dOEq8OuN3qsOLK2vmUCiq1EPQhoV2KWma51ujgprAXWLYZCiAAWBo+I0OJOJEWRgicfO6agHiBl98RYwii4X5hiRkfFc9wC9F7QBiXxM9Am3bSZMhGAnBSAhGQjASgpHQyEiItRtN1r4paFA3zdSN5nRXQ7DRv1R/cV5ulicGZosxS46AxZZBrF7IICJlMtwEw5W8mtvAEMPVBhTT7I6peSRV7+BXL3OncEwGUjd0f5n5Hrpce0wBoqF3F7K9sLsMl0JyueGuZ4YDfJzOdHKOGYKIrbdVNOsM6kw16C0VzA8dMNkB/IHkyRwDYQYnFrGM3UgfPXG86jnW5UX/Z/4KsrCQcKyVU2RGfNsgTDjPJCksGlFFo1ROF9YBskQhcRXfUW4FADLaSkmLEP53BvkwBJQZ5LPqLQJloM1HcgGJP8h0RGwR8+4YJzLlfcdJyi+gSxuEsLiFFuK6KLEQo/xPMeVZODPU2KCKVow6xmicC9Iy8Z5aoA+jqNR1Y3wihnqhLQ6qoCowy2T4B1RqjD4WkVAcq+xR9WQWiz4YJMwBb9C4pV5sR0GZOD+LwSevoBW+h4YIfwaROblMxSNkcEnEfihfbYPeiepdUpSzrLXiDA3emC+YzIWmCJ9wE4t3cPDWVByXI1T+SsUN8B3Tjhj/ysRr7xjMhoLtG2M8DfvAflPeNRVCzBr6g3hU86eM7jsMpPqrYbtIPnkSnB/nvue4PJxm+rUtccZXn199+pVIE5R0ucChmRDJKShtIv7k3OgAHU7BGKWNbmAMuVKk81PwUULEmggjlzB1WpXiSzQZHDjF32FuYjJ43BFHDrFFAWD4ADK1LdIE9koiX9xHM3lB9gtJc+KBSELgO0qRhjSSxMfvsWoPMVrskIlPVFzl9Mjl/hJ6SypPzGWVn/mSYz68ZFCSGzuWSgeQ6IvKSXHeKCS+LAjSX//9qM+2JAdJOB+ztPxLBsSVch9EOaEQy0YLIjaOMcOu5p3FytKT51Ggf6EdpRqQo4xkv7lxBSEE17XQIV+WDNenSWcFsXY8dCJpirWIYngVqEfGkFwft8BL8NCCGrucCGroJFX5eHhYDklYgteJCjXwZwPXyhFYAwfgLXYfS+WqgIZMiRqsjFyYfBHhPbTw7WSKR8m5JCGyN00NQ32oXuBDTvXyR+i8TWJJYYPNkBSywwQFKHzQQ6XuAx6P1d0xOKvA56y6T/WwNLlNzAOtYy+JBGArSHnScA5LOryF+4WqTSYPpsXEWrkmzdV+q28vaVk8Hc2z1GSrLH4A/9iYKpIgWYpuU9lmIkG8oo3aZkyVW8hidIdWPcaeYpabUywMGEDEo3NXLPDPRHO8ki6RyoGUK0jwxIw83perpRaCIldAiRjn+uB1tNgpymeSGz0kcDtTDAKXqcx1M9pEedX6VIuoSTdy6S1CNRWLCXNi4EQKS/EUS0Fyl+41C2RIVEcFZ4Z4iQVKq1QSBQjnBFZX5fjiY10xTRJXvjkdm4ruUbSbR8Q4D1Lixm5Xw81lkR04+8k422ZLv9JxF6goN6zcC07bUfuiuToKXPMkqomvCvjlDGwZgYEhHTomLtPC6n5GlV7W2GQZ08BK0F+oxtTIVCl3/GCzJbEdl/i90PNKSvxfRdEqtE5tWW4gdglKc8NCoryxRVhjAGgTFfday3Es0DKlH2KNUqY8MkRqSQcRw+Qz6SehmYdHMqbEm4/FQAGrgGns47JMPT7xTVK441DWRKli6vtwCdA216cZEIFEZYFZxQXaoqMy913uiHoIcR9brnigLVe4O8JWEhXmq3/4NW2pDxiNbt/MNi71ExmCj1r8Yu5iy4FcUpaVbmSf4qzWujXOXx9Q08EPjyjITXkd1cU+XAKpiY8OMVTHJkLbJ2hbiuYUhvOYisOB4Lx+pfN7jW2dKJihHKiGdQmIOZCpKVqVkdSeCoiqW8Dt+rLZDGcyOdIxpRKMIBfGEwlFhzRGKUvi0R+r9Ahue63K3mda3Ncml3BI9aN0DcIYiRzizMKDTDsaAHWkSUlx0KKkActEmJjSGhkBdfWYrXsIZF5E8khoWZs9UC06qETZn6ZmVPjPSF1SaQ/CF+QiwKD+X5no/d3aBvX/8toG9R/Uf1D/rvrPcDFjjxvjKVX/BHMhA1oIaOFVtQ1o4eW1DWghoIWAFkpoIdekq8icexOowYxalZLYqJs7aOSfhMj600bWq/Jjwpo8x5o0y5GpusMN7RWZtTY1gspMUM2qB62FHUHBAWfpNAAnpYSanFoy0BVnsaaYHCqG5u1uilRLRObF+bk5jgrBF8yC36ltMAteXttgFgSzIJgFzxhDzFFlZ1KX2niwhCFqc2lJotLI4tg4/KJz3gqv/dEkWomsy/8p+SEDsgnI5nduG5DNy2sbkE1ANgHZPFN4dNKopgYo5NSclJ1J3gz3TNzpGqBSgEqhbYBKr6VtgEoBKgWo9Myx4QCZDMhUilfXnR93Dsuq/vj/aSLJVleBLakthubu8rFL/llrN0LOVAjCF96qXtyK+ymICyz1l1TKO1rUl/fLZFknIcTxg5BjWOgJKrDKgnJQgZioamxG9TRSqMJqOdRdQ4GB+w8Kr1FVisqWTTjOapZqIINo0aCQn1eSjuBXf9k+zYcVBfuegbb+4ntGya6J3PAANXZ/TfqohexwyVT9rScrojfBKleGJGlW4qrUYER9q/IDQnGr586p8S6jlUET1uFZc5vKm2aMslYVJTalvQhb/0H2iW/PU/mKD3x8JTPRIjDT0zGTBEEeka7cCDXcVTYYJRZqKMLDaj+SCH+SgrnPU26WKjAsiyOVp5ob1t3jF9+9X7kjKBPM1AaUlC6XNQJiW6WMkKrMX77INIhiuyYRvwTgFIF5IUkKfyZuizcPGbx9I/zltxrT+f/CZ/PyWz2uY/+FsY1y5j+cUOO48cdyZb12d/2jucFG5mCO7QZDNo1FAX0xQ3hBhFJMoMcMjR+00u/ZKmiloJWCVgpaqYlWMuKmD9JI8IpBUEo0tQMheStN9BWluNw7qavQ1N9wT/l+604ZLAhqMLQKajCowaAGgxpsrgbLuVFvTh36vNzV18ofXFe0kdtk2abifYb+CYHZGrfc4D6TNMj0/eoi0BKnnusXHAI59Q1M9hC5F/Fms2eq7wEN4HToH3/iEhivOLOg2L93tDRHFsCnJ77RqvkSqwdrOub1omIKpQETJleBVvRcGL0VBtEKi7Dm9ScddhWHsIohMYPCPoZ57GFjz486bLWziGZmJW+qRIjyIXmZ3PIwMezcv5WIb8yFdY/FUbG9WWI55kJ+JXKEzodEy071k6J8+SfdKpVX0tI9VH5ISjdHcrdm1ra1HpqWtrmzTUqfdatE9px6hIA1NuLv0OIE5pMtkT07uegaV71oTfVGgpb3CkUa762kvjNN8GpceHUvY/gGYZbjq4WBIyGXkaq0SSJfRAzSVI6T4G6Vr9aNZaYhQ4QX6YxpsTqjw6IWbOAmeIKvgI3xzXCRFC9aiMnPTpZzuRW/PNbqpy4cfrLVN7wQr2jEpu/ET36bpWG01Sxt9Dd+Q1seeOL9adLKxdG9nHF03mjzPEfOtWf/vIJdrnejsR76/fZ44qNUClAd8EhJqyj04YpMVuXIGDeZMmGLFZm4xKJWLnxsXD2Jqzm+P1JMpJAp3vBC9EQnPUGBj0z8EQk6ec43VJFjZwW+yhx7i8QtMCjeW5Hjq8PhFEdhnOgg4kZ4jXuBpnSE1mhxn94KkX2cJxANLKTDoEjG7oyPpUlv/FMmTq8UiXWGJROuBTjGQhNhw8IG5EOIJdETeHlXjkPh3fM7c05UvgziXE0Byrlg8h8aixUkYqCJMJP5F7iNm9BxKwd20F+SWHSQxMCSRHYnPNQMu0COyAv5EyngUK5Yfey9IHAyI4GfUqz8AoeBJnzap1TIunzoC/ZC/XEvNTbX5aAa1/mpVWO7WrU+jizfIDjOIR/15DfuyC75+0AbULSFRO6iAiYg9SS1/Y44a72rjv2gbhDfQHegzy8S0rtAA0m4p8Q4qNI++LsQSqyAJMEYrTI+5lTs3QxVk9BJkcqM03z2EB4d6WRT/Y0+DjQZzvcfEKpYijTTKIMZsRqFLuSi6mMmYKIY7q6g+1637gMiou7LDN2X5VaxsEfWGnAw9H5VjBV3h6TwR0gKt7VqXeXisA7PcBSjYnU0cpEnQ2tL1GiQYxwufGhxGjU2pyyN1miVBWlUU7sUjYXk6orQ2Dd60hWicWDfxNCOjJ6ipZzJCxLOCCIC3kKjG+N9FG1ZabWq7/oUDigJ7JAV6O4Eb+Nk4pXPgZuq145kUlBYZ1AejqQ0nqks3VDaWcT/IKKPrWmig8uGZG6U2T7xpPVtUeJrELEk5SNHicinkaMC58ggEpCTQyhhJXIEJM7PcnomAsHwFlqgagDFDADA6QPqOkPDWKEsAtZnAhZubmC2XDbI7AasCuR5G+QSBkUEAU4B3nE0rkE4lTFRXghLvHrghYAkYhzMAUexAV6gq0LcD2IwL3UmZThuD+EvyAVdgPAFBOIRO1ZQkU+QwKbMAU+l2BzwMRFxZAv2RUR4CqCFeAiDYQJdErHhNUCOsvIznSE7z3RmmbGaFgKqeulXiINK2C+MS8DLhLNuocrRwuLGnA8gKVzsSyrQPxhxwu+BcylzIRxWMgB+rFAwbAkiELRJQW5XMFwXsSFLW4K6PMOtnljZEbE7HQ1uM8FV/AlSZzLsG6wSExszhaXR7aStonvyBpOtOWcSiT0iULVIm0ibSHoJqNgYwocsLY9cGOS5mHQhffBosqc4z2YdGH6zqvYZbDZh8OW5j534VIz9mAia8qEVYCSKV+0XhbHoCXrnkDQR3zVKWgkMCxyc6gaWkcIZONemH01Lw8rw8CKRz6NalnAuEJoYnxcLKtIY5TEKMmlgswhjxHBgMlKkhNLPEcOlLc9LjMbcs9Lm4gqCaItY84U0g2FdpakIy6I3gKETClOamPZj0Soi8ZzEthyRmFHqDBNGhwc/JehnJdX1AOkmPbeCHdFzGxHVHXQAupDmigniEjvHIpQCLgfOWpH8ksTGts+pvesBN1EN7t1tD47ZmpEJn4WeJ6psjrbKMuTZty0sZyqFWGFxgcASRNplEe4Eg+go75OE4xhxpl9xItIa9oX+UmAoxxDrqqy5XBFjcCRFRiQF8jBSUDhCZLcMByOgc25+yeQSalbzeJqgTovwuWNZed9KNdEJsi/gAPBaGU93/VzMYqHY0Alpy/HyFAVSgmbo2MFni4eB4AHpWRRAFaw4LwZJLcUdW9xjCMFcLkluC0EyvhBUY6m6rQoSVEmqPNWaOipxqTbmImGscuigPIV8sKYTUgCeBNUCBWc6LBrV3gw9vDjVw0MkwgzxSeQcTAQv95PNGVI+CgZF1UVAUOTy8bFXdXJuZygPEBRU3JUZmz6q6gsCS1I4ZiZz2KKBqI1EcsX4prBHOSNIKegqXMWESVSJ2lrQyXHhCpYyWd7RNrEGrzYOQt0PyAF3kCE/TPYWU6XADHGqR4MsaSxyZPCgAIuaZfQORpvYf5vZW9IaD33mqS3RYwnMEdcKRiGFzSfOM2Nbuoxt3+USIyFrUI8hUWt65GLzmyarAa8jU2cJTYPbMhZ8bVGSxpY00H9yzYpMvRMDWDFRTFUon5OauxpzZNLVpGWuAbe9TFENC+npMQWNEjU8xc15IuUBIHdpJEhxa0FWnFGT5ajUIFluPN3Ga6APbLgW1cO1yFpGe3dpYN7UZEZ5DziMFRJHxYWO9ggyi18UMZq3VyqmqgOKjoxClLXxGFLEsmMKKkUOxPVRANu71yRKM9xp6LaGwBNWMlOxm8i2DPja5TLjgCkoU2mMyFyZ+2lLauRUoLAidTOEaahf0hKwETUOFcRDt5g2yTMD8UCsUaI1KvVpQQ0j0HwC55U4xRhWnttAUvgx0DdVIN08gggaWx4IZrAjOuikQgIvFwpgMNj1DnatnUbWnCvcgU9l34nXuSVwYNXIUKPqJQZW5XvWJ/efc89K0U+p1K2uBEsiLwgZ7SbDZWUe8duEwmM6aSSiEhWwIg3p4ZmYgaSSf4T8FTGEvEC8KH7JUP/w/YWarIjNFKRCZRbpFKQ8NzKaoIuMSXSBvxCGuwPHINKWALyI7gAG0QydfCL/Oc8kYr3fT1zyRYaMhMdKEwb2dh4pXF7IRL9YgmHIx9ZYNDPclTFFjpJBSL4fYmmbixwEsXqZjMDDsuYiJ5vmSpLKDgrTdy3P+jHb1gdWLkDKUqywa3nxWdmLb6h8jhYjBIyoPZ2AfpFgXEZu6wysvTwzRXcTOa541qBIHhs+ey0NpLw0jCGGTj+d7CDtTQXFEG1I0ntMZ+UAzNCQL4DcELTRCN8dOAa1jAdHqZFNAb5nmbBHTQ+MmYwhdGIOKhH3CgZ6NBLS+y2mCBnRl4EMhKydoyUlGBqc4TnMQjEk30ZiOIYzRDuxrMxEaaipyKoynhkEzfJGRCe2H0bK3bilwi5ERNKyArc5KmmaCA9+roKpnJc158bMcnrF2qoQQolJSqA4jkBO0gRzeiABOFeuP/6APNUqnaEeprlM1slyfgNFv6KMNkpHE0gWCCUW4lCLEznL3aBRDj4vdH0pZmEiYGY8iT6dGEjNIUWsHDkQwV5mwvIcXVyxiCdju2pt5NIQRGuRlcnh1dRK9mIePqLVJNbjiOVO4D0SSW28kxQyG1AFQx3fJJUDzMGC0zFvxJeSOvisSGgSzZOwfDioMQw/6cotjFxhJX1QnRaR+SCxYwh7qLrJYN4RGiLoW0GZgcsmAgeR4QhARQeoC/I9FagVq4H4XmwKGb7gUyBiFoVgAAJzw1qOsoc8lamazriZoxQyLbhRoBQR0t4VwAxSoeWq5KZEh3SIOJE8VeRSvmvvLqyX5kPYviiaTMGteE24hzK9A7QURuaQPWZU+QxRDsMIpbKUGEMiqkw7BapFD+IU9WRbJhc46cJUdxScriMVDaRf1TCcR50L9FjLZZkDnKkR2xdcQUCU8UUvnCTF3JKHyGQwdsi0SGUMAxF+Dl5xvdswmarAmaDrFCwRCke0MTuSyFx6yQsJCtGCykHI5UG1jfjfGGCsZLR0I5qMUU9c9AnJbWVAiSdgjKIsoSDqIvGw61qs3N22CinDMgL9RXKJM8A1eapifWWhXMDaZVJEmKEUJlUE5kxJhRGnJVluP8LChc6tKr3AR6vMoRViodjtTj/KWBZUTIUFZqg81wEWpK2oS+R3RWNZZRGNFswggEbwcWKJr1hp3DzSPhwBKzJmZnEQI/yHuwAFOh8iMBIqdyXa1I41xFwsuwNpCwew0Don8ge95PY+fEQB99A96IAwQze5YlDzrbHUNFfqGI0PRFo2tkKbjRpISEMQoFOkuDEqXAbRthtoIGccBtiXsiArHLDiyPC8hGmDln5pWlqmbCQm9mV5lSfZg/1zSdOCGYPXuDOPpO/XckuaMVklqQtE9sRrgYrHITCg8pst0VIlChGE2ySWkrXQ1mViqvzc8slmeZM1A7OBs6a0jaS5ofchCHuVDeTRQHFkzauBIZZok9LUccTyqUSyD7lLE8f8jwzT07CMmWlOxRXJT5KcprGuEmSQNbUjQHNEtSQSKqZsk8dK9ir71Q1Kyv0HCEU5bYBJ0bsUm2lfjmGDNJJHLDHJFuYoQ3tMcowM2TP/yFkks8r08Rov78obZXJy7uVQYqhnQKgK1t6H2yT3KhmRS9WWlwAKq8430nZ5lTvfwTGWYqo10T35R4aNnuXm+HwZSJjI7vPwm46izKZaCXsWhe3MdH00ruPE8fnX79cx+ih0Xg8IZty79TjWyH9iNhyGPBrJXlI26xQka5oKaJrxOyXE3XUlRT3GKOAADa4RuJtzYc9B4AQSJ8sw2UpsSssiL4/t9BPYM1nmzV1QhMDtw+dNqdd0KaT012qo+kYxW693RAndVEkK/21A/goHjUSJ0mnLO6i4rwDnfZhSxZTgzIbyDGOqkho3QRmeqTeRKH9yGgj7aqZUyh6MZOwehmBhZpnOL7UDUoUZSZ1a+krTRRZMZIgRXthq3JfNs4myROxJD4ky60AOMbEiV20g+bG0AGR0YqGVspozR2IaOSUXSBU/eAI/hYxtPiysiywkIZucGTOOWaPyhdxVjP9ZKB1dkbE8sILWpDzoYWlbVgUjynSbpNpHmKYJXxFBNQBhWWdjKhxFpRzFeLznkQBGyeAqZbT5sHgs3bu52E4Q3sPgOY6OSn7VJZaUTZvbubRe/pRIJTLMtIK5aDEupek51GXoU6Ww9UW6voD5UYIHrMqrmBnJdBHxG/ssMtO5uDEUtdQ5O2O5UaA4y4PQ82WJyReltN7glPIcvP2pTJnSh9aszB/ICMBHQN5JoOrrmJI026GQszpCJI9lFqZzFAV4nmuDXsZwDD+h6fg3YFkmldmLWot7cXg+UQ73gZuaPHxOesjUwUBNlKCJbesEKEqAI9BxjNRRN771V2GvoighoEnk0qCbBr3hYkoPzujLZVauqVmhY/fcQIlUE9TuGPSJmRGp09jEyfKx0msc9QxVKovESJX2hFSdWGxqd0lTAW/k8Ro4xwO0lBnkggdsH6RzUMbjKBXxDCpSwak8dAM4pYDqTsqzD+FUDbbE5wIAKuad0Fz+IvIZ8whTQ3Ki2Rt2p85Zoqk6/ZuXEZSOzWF2nC7lVPa2TYqKpRCvzqkyEKnpcE/cE26Z4h0Pu2DyhDVRrL9C2AsSqC9Kub25KUm+jTGRFopAGjoLdoTKl8QHJIGmr2ZKXqcLkYFMtANVuBnLZRj+LIya1dfIAPwmg4wvajnux+Jy5o8GinVAydCOhXI54YEKiHaA7e5J/dE6XvqL3CiZoT9KHMDMeLKBnSaQ3JTrdH/lQ9NH41mkQIzGk4XOfpHHKA1jQEVFU5+GxYwlX+CuRLMJ6nqm084KI62kFJF2XB9lRQ0H7gtNbG9S9uQ8PW6Wh5EiYMbVdBJGhqmMsvJezGQ9FYRY4NqiKt0LyuooiJbDExSOE8k78pciQRBke80QthgOPyt/XbGLmRWModaQfPQqk49sB6Rzmk5n+ymqpW5mQcgSfmVZwt4Avy6CQWPLSFERejNrRq+ye77MFuzOIZq8diZaQMt81AKMokLFqlBWEmWOSeZ1K2CUxb98rFmDA/jETflUxdHQdZN7LT+n3kteHcEI9uLvawgEe/Fl0vSFTSnYi8FeDPbiK7AXc6YSloR19CTu/EJBIFnRu7CgnuXcNzIeRp05yaHej0whwTChg6wyVhFKiMfIyZDxLaZyQ+xoQICVAVYGvPAadG6Ala9oSgFWBlgZYOVrgJVq9I93psdJucU2VB4yx6KwjnPY5wGsiYfAEf96NAYuU2PGxDloZgyxOiuYPnmEJGDYgGEDOHlZUwoY9s2zScCwAcMGDPsKMOzzpdLUVvuvOHhfroHl1BdQb6msCvuLwiOkMPNZnOqImtKQtlJO9nnSTGzchIW1IZt6rplbEoXqlVCF+1Ud0Uy95w0r2D6wYiyeyZxIyVh5IiE1tYGuA4LiW+TWCFIRhT8LSBPJ5Tt5i1xXNFH1iFmEZ/L0Jol0DlOWQR1kjXuV5LLtKJrgcZXMlOz4heFbGWiMNwlzLjJfVA98gS+RV1U9jNKSeMA3tspOiwBHHitLJlJpTkwqwMJaeF2tPTZfgqZTT6pOsCo2bxAQkS/1Vy8biz2vI6SjjYU4MYQALetyoEr2OL811eIp/gCGbWYcDZLront3zltnLe/LABz1KDkGT0vJM1H6C1RVzuAAE5yr4qMqJM+ADBMskctcI1mfiLV0aXFEAJkyjHN85RKRN2IqGxalhI0MRUplIWTnUE8j1gJLsIlmy/LRDCXfNAZ1qWxfzBgcDO9IQs1nmcMFvEkwE0VVksiM4WGAT1VKAvgQ62WRtQVUBQH1jSYoDZgUGfAuHqNkPIEaj7lZMp5Ziwg9cMaOJE6Bks5ykTMVjYzwbyiWmFF5FE+WJksNcSalVp5KvIU/NKwcDUf+1LuFJFup43+SPGJT6BOOk4FvE0CXT1loPpUUE56RQp7EK+QLxWIomwYLICj7qosrQ0QbIIDkZZl1rEoh67t8BUBpLnkN34dTzp4NpZFfe94zK6W9Ahs5qc6QhREqt76Wyq0sGlF1tbBlGCR7594j3HEC8BYsIOlDkqJqYgVqqqQQsaRQ2pBfSeDX18SvWVZb8d8s0FBfTJj5Sg8Z/qZx1RcaokF/vUD9VagiHB7feJZpIC6npd4VhcVTU6MKg3aaSKxEsH6FICPBFbYqf4xT9Be6I4UlJXKPM2nU9kP3hwCY0q0sh5RIv700jqRloXaP68C+X6FcHQ23HdBqgXFb+StFUHitLGPGs3MtB1SJu1xtYgu3FrIKqXLe0KSlCt/lytVrLKGvFK5q4XivjMlV+q9AmKgeJLmMWjOZeoEvWmloZcRMOm3lT6nkWNqgOEeWNfYOlxU50myMsllW1kMBGk8FS7JCvmzwJf/ygKpPT+8bu99vz1H3KCuwexUHjZl8lW/tTw+qBFm5yhMsO5SOcC6yEImTMs+uM8SaFWxMG4fbWE0pISJ9QlTZFJWlKBsdNihUyBvfg0ylAkUHnSvGUQ9B0XOheyH1akTcMWPNjj74dvV9MoOsgN/LkVmPHz8oJ7rcW2Y92U/PlOTxVGo1H6lWJ5likWU1deMo8eqM36kOL66smUOhqFIPQRsW2qWkaZ5vjQpqAneJYZOhAAaAoeE3OpCIE2VhiMTN66oFiBt88RUxiiwW5huSkPFd9QC/FLUDiH1N9Ai0bSdNhmAkBCMhGAnBSAhGQiMjIdZuNFn7pqBB3TRTN5rTXQ3BRv9S/cV5uVmeGJgtxiw5AhZbBrF6IYOIlMlwEwxX8mpuA0MMVxtQTLM7puaRVL2DX73MncIxGUjd0P1l5nvocu0xBYiG3l3I9sLuMlwKyeWGu54ZDvBxOtPJOWYIIrbeVtGsM6gz1aC3VDA/dMBkB/AHkidzDIQZnFjEMnYjffTE8arnWJcX/Z/5K8jCQsKxVk6RGfFtgzDhPJOksGhEFY1SOV1YB8gShcRVfEe5FQDIaCvl+pS2CP8n5d8KglHYRGyJlLRowf8mCYrnWFVEgPeQxy2S8fGKQAHB/2PxL28m/s4wK1QwuOoygxQcAvoTUmj1roTK0+YsuUzGH2QGJLaI5TxYKv5xppThsInKAIURRnosDF+/xhc6q5upbE1w8Ewlj8UyRqymncuHgVZXDxNrEes3Psb4CjujaZGqJYDLtJDTyXPzebxjl7Zy3lSFnZkMbgFgiNGDZFCCU0ZTIxZ9MEgHBM6ncUu9to+CqnR+FvySvIJW+JYdIrw1RGYcMxVtkaEzEdkSTKXWhUt02bukKLI6kA4FrxBFcYtRlelNERyiiBJvGOGtqTgMSKj8lYob4DsmVTH+lYmX+jGYDQXLPsZoIfaB/aa8aypEtDV0CCoBDIrtESsuEBIQBDQrzLZaJMjcBYeBVH81bBfJJ8teM7+wyYXIZOL90yD3GEWwbjTOfc9xeTjN9Etp4oyvPr/69CuRJijHc4GyM6FwUoAkRPzJuUkFCIWCqU0b3cAYcqU4rEDBAwvxeCJMeMLUWVyKrwhlcJwWf4e5icngYU4cOUROBTzjA8jUtkgT2CuJfC0hzeQF2S+kBIoHIgmB7yhFGtJIEh+/x6o9RKCxQyY+UXGV0yO3hLWEBpipKz/zJXdkPcmNHUule0v0ReWkOG8UEj0XBOmv/37UZ1uSgyScj1la/iUD4jKtoeKMkzAzXicfG4e0YVfzzmJlx8rTNtC/UMRSDWRaN0G/uXEFARJHEtAhX5YM16dJZw68gE4kTaW2BV3okTEk14dJ8BI8tKDGLieCGjoFVz4eHpZDipngdaICKfzZwLVyBNbAwawQu4+lclVAQ6ZEDVbGZUy+iPAeWvh2MsWD8lySENmbpoahPlQv8CGnfoCC1Qk0myEpZIcJClD4oIdK3Qc8Hqu7Y3BWgc9ZdZ/qYWlySw0mOVEpLIdEAhsWpDzpxECpcMiOUbXJ5LG7mFgr16S52m/17SUti6ejeZaabJXFD+AfG1NFEo9L0W0q20ykv1e0UduMqWISWYzO3qrH2FPMcnOKhQEDiHh07ooF/plojlfSJVIZnnIFCZ4HkocXc7XUQlDkCigR49QivGwXO0X5THKjhwRuZ4pB4DKVmXxGmyoDpE5ETbqRS28RiKpYTJgTAxdZWIqnWAqSu3SvWSBDojoqODPESyxQWqWSKEA4J7C6KoMZH+uKaZK48s3p2FR0j6LdPCLGeZASN3a7Gm4ui+zA2U/G2TZb+pWOu0BFuWHlXnDajtoXzdVR4JonUU3am2lgyyiWfjLlvSgLq/sZVXpZY5NlTAMLJF2qx9TIVCl3/GCzRQ7EIhAr9LySEv9XUbQKrVNblhuIXYLS3LCQKG9sEdYYANpExb3WchwLtEzph1ijlCmPDJFa0kHEMPlM+klo5uGRjCnx5mMxUMAqHBz7uCxTj098k8yZljVRqpj6PlwCtM31WQ1EIFFZYFZxgbboqMzslzuiHkLcx5YrHmjLFe6OsJVEhfnqH35NW+oDRqPbN7ONS/1EhuCjFr+Yu9hyIJeUZaUb2ac4q7VujfPXB9R0KMQjCvLIisDUxD5cAqmJjw4xVMcmQtsnaFuK5hSG85iKo4/gvH6l83uNbZ0omKEcqIZ1CYg5kKkpWpWR1J4KiKpbwO36stkMZzI50jGlEowgF8YTCUWHNEYpS+LRH6v0CG57rcreZ1rc1yaXcEj1o3QNwhiJHOLMwoNMOxoAdaRJSXHQoqQBy0SYmNIaGQF19ZitewjklUTywGtZmz1QLTqoxEwLKOM/IzFLZVgIX5CLAIP6f2Wi93drG9T/y2sb1H9Q/0H9u+rfyJB8VtU/wbTLgBYCWnhVbQNaeHltA1oIaCGghRJayDXpKjLn3gRqMKNWpSQ26uYOGvknIbL+tJH1qvyYsCbPsSbNcmSq7nBDezVHpFysO8GDUs5oneNSrjirPDTldGMfnfLh/JoDVMEs+C3bBrPg5bUNZkEwC4JZ8IwxxBxVdiZ1qY0HSxiiNpeWJCqNLI6Nwy86563w2h9NopX+k98B2QRkE9oGZPPy2gZkE5BNQDbPFB6dNKoZuyrOOLhn4k7XAJUCVAptA1R6LW0DVApQKUClZ44NB8hkQKZSvLru/LhzWFb1x/9PE0m2ugpsSW0xNHeXj13yz1q7EXKmQhC+8Fb14lbcT0FcYKm/pFLe0aK+vF8myzoJIY4fhBzDQk9QX1YWlIP6ykRVYzOqp5FCFVbLoe4aCgzcf1B4japSVLZswnFWs1QDGUSLBoX8vJJ0BL/6y/ZpPqwo2PcMtPUX3zNKdk3khgeosftr0kctZIdLpupvPVkRvQlWuTIkSbMSV6UGI+pblR8Qils9d06NdxmtDJqwDs+a21TeNGOUtaoosSntRdj6D7JPfHueyheY4OMrmYkWgZmejpkkCPKIdOVGqOGussEosVBDER5W+5FE+JMUzH2ecrNUgWFZHKk81dyw7h6/+O79yh1BmWCmNqCkdLmsERDbKmWEVGX+8kWmQRTbNYn4JQCnCMwLSVL4M3FbvHnI4O0b4S+/1ZjO/xc+m5ff6nEd+y+MbZQz/+GEGseNP5Yr67W76x/NDTYyB3NsNxiyaSwK6IsZwgsilGICPWZo/KCVfs9WQSsFrRS0UtBKTbSSETd9kEaCFyiCUqKpHQjJW2miryjF5d5JXYWm/oZ7yvdbd8pgQVCDoVVQg0ENBjUY1GBzNVjOjXpz6tDn5a6+Vv7guqKN3CbLNhXvM/RPCMzWuOUG95mkQabvVxeBljj1XL/gEMipb2Cyh8i9iDebPVN9D2gAp0P/+BOXwHjFmQXF/r2jpTmyAD498Y1WzZdYPVjTMa8XFVMoDZgwuQq0oufC6K0wiFZYhDWvP+mwqziEVQyJGRT2McxjDxt7ftRhq51FNDMreVMlQpQPycvkloeJYef+rUR8Yy6seyyOiu3NEssxF/IrkSN0PiRadqqfFOXLP+lWqbySlu6h8kNSujmSuzWztq310LS0zZ1tUvqsWyWy59QjBKyxEX+HFicwn2yJ7NnJRde46kVrqjcStLxXKNJ4byX1nWmCV+PCq3sZwzcIsxxfLQwcCbmMVKVNEvkiYpCmcpwEd6t8tW4sMw0ZIrxIZ0yL1RkdFrVgAzfBE3wFbIxvhoukeNFCTH52spzLrfjlsVY/deHwk62+4YV4RSM2fSd+8tssDaOtZmmjv/Eb2vLAE+9Pk1Yuju7ljKPzRpvnOXKuPfvnFexyvRuN9dDvt8cTH3XHPayzHuWDHurV6yTx2nYkq0gpLxLDVtWWp3rVu3XeQ79nvtAnPTJZIiRj3H7LhGFYZOISi1q5cPhxXSmu5vgyS0HVQuabw9vZE52BBdVGMvFHZAvlOZ9ykWNnBb5XHXuLxC0wKN5bkeN7zOFISWEcLyHiRninfIF2fYSmcXGf3gqRCp0nEJospPeiSMbujI+lSW/8UyaO0hSJdaAmE34OOFNDE2FQgzTgQ4gl0RN4k1iOQ+Hd8ztzTlS+DGLRC+Cjgsl/aCxWkIiBJsJm51/gNm7Px60c2EF/SWLRQRLD/iCyO+EuZ9gFckReyJ9IASeExepj7wWBYyIJ/JRiGRq9d5psizFPPo3YA5M87VR5Orz+aLgayyQPhatpO8fB1cOqD4KrpvYRcH2ge8Thb+vGsc9TaWq87ZhBybUKipei2cnv0hgQFAysSpXPUxGu7oQVqmHxDdQ0ulcjoSgLtEWFJ1CMgypFj78LkcsKyMeM0QDmY06FZMoQBQj1H6kkRDV424dpjbnKk6nbjvRnatU28uSV7jXzC5u6YJhu7D2LVbEUaaYBHTOAgAJyclH1iR6wBg3PYoAZAWZMDGYAERFmZAbMyHKrSNzbVdBwFrlODLiefuwjasWtuJXw57RiTpgWB2TjWbZxK30Gw9Z9tW3cyqrMTgAbsORSiWj9XMjDv6k0nChRmiND1xb/EUzHHC04NMggoin0CFcguZSCFOwzhj+j1Zerc99RK2qlgvh5ndaIW6xOgvNJe06f1zXJqqS9YIIsaiUpqz+C+9QU856dzYW1HGkv7QNvePWnb/V520KksRTpIx+5rThG9zQHb+oFVG5ciVLzrBWLkelo1KiniTudn/PckF8AyjQIdHll8oIEywKdAZrHDY2Be4o7Wrqf1Hd9nA60PnbICoxbUANJ+zMaNHq9597SyFai28jb/3MYEvbg1BwS2+KMm74qv/ye/OqX5FtPGM99LbfPc7wYX73TvvRCe3NYFdrfei9Z+SX2GiG9fM+twTlVzFHzBn01U6ObxMCwdW/NN1+ZP9778t2X5Td6271vqGO/EUbD+XDAdvIHbA1HjnWoOqzDizjWPtIvVGEQvrHTxfcN1KOMk/JFOaM8wUo05579SHE0yiWNC/GgylbPghUnlaT6hPmnxoqQTEouF7g96LigkYCDdizxJeZEMuWnlKGJmUpZRbqiLyNMJdO5WZC+fDfPYGJ/lpCZ4KbTLavS3yK3BxySnejnSb8alWfqZEp6s//wWQ/OaW30rKyW5pGvfzaCCI2eG9vPHWstUnlnVWrkPdbXzhJV6cCqk5q2OhWOtiozMVVWYN5ys2idHWFm7Rk9VNG2jl1p9QqS0thqMqDjuu3meXo20af7VtkzksSz8RUdmq5LMyL4aZ5N7lkVU/Y/N3GZ3O3NlzXsJaCV9uvIPTOhO3M/gy+i/HQwN5s+PWvwdGZIP286PKum/7hPT+XUMv82tJapsXryEDktyQT5IHeaPoXoT8ItTydpObrYXR0fN3q4zt5l4HryK2JDtFo0eV7pRI3PpET5R5DGZjq/dQigimlJiQ28R0MKz51Oz17lO8Hx1OXsjzOkOv1LRpBXi9OKtmqaLrxJfCTNm22x2DcLUmJsLzK0z8pUUqn8xKpNTSo4wXiQudnrNzWNKw55qOuJu6MJ89DQCyZp3qrH/2VUWX8iBPzpE+yw+XKP0M7qeEQVMamfmE/PRSOQVew7D8QqTnXE2mA0O2yoCv1sWatlRtieLwGF2hJMH+2K3cFU2nTMo/orj51VMIZf8L5ekcX0UyZDzxoYUEJ6rtaI/QQPeGBsPOBoIu+Z4MQjZDTBpfbRbGysjqnfR24Z95ivOoGnXFUjbS77uvWUig1VNnCcjdDIcCvfU9ZNpEIyq058R6512xcy9wqL2JI21DiO6QV7DbbtxAwoZ2C1poc54KYo1HYIVJ4mr+m2ZktW4Rnf2V8Ln5f2o3+HskaSxDmt22gWNgO7csaLLpJKkEaYbZg/B+KtJOAjYWCfk+Qe0LHSvlDeYK9Uzyq4KLEBXoU72qJPk2BEWkGrsrDyuhFGOXD80y+DJeee1Me9aaUYL2Nj/52pD7WaUlSFJLxRhgo/20jSNRKPk5LbtHpgPsU0WgvE7k53wXNet46V1nfFnZ4lq9bR43oUaW44T5rNS93ZsDBJWUKOJosjsR2zrrHerA+Z3UfDKgemmpTpEi9Xl8ltt5KvJIafGmVcp4yde7hDU5+EGdlhvZ+5TJyJe7MrHAUaiHrl9vglUkYKq9HUeN7A8UQBKjGMu0rqjR8+cwDeSGjkp3N5Xzx99M0U2jXSu8JQVS9qeRuQRmuQB0vFppKwfE/JZlHZIJ6bS0XFqvSsZ6NFj7Xp7mG7eS2a0Y5TVSjoGcNzXn0UwnMvyh3ngIQQnhtL+z9GeC6p2NGkVTbc9FCf3VnxcpSaL1JgsZwDKZP7M8AI9wipMAC97pG0sTlPPOa8xQ9qJ/psJcvj7RO8oyF6Qx1EKkt7Pk/wzmvO/LbBu0cVaExzzmToGYJ3LwEtNNNTuAo1BX3vZXdM0EptanWWDYEJbY1Hh75ll6OKtKrQW1pBitgFhzocY0ZaI3nRW6a0uonV3KyWatuVVmVW5+bUXXT36Wmpc1k21VJbUYP7We34UwP/ZNVUyt1f9RRSH1vKB1mhUrmCVrnczCfkn6m565TzaiWTJqacr629reVAXhnit2wH3yPqdqjSMlVOxcg/PHP3KUGhAVjzczGNDz7olUpkw/rDHYXB3g1OdjwuRB/pBfUSJ68wakqL5XXd4NNpKbRRYv6qz4HU3n3h/F2frYFbsrqYejkBoDxgT5KAb7uN4aPzYlHfpnNPRpTVVgXBx1ipwh88qiSUslYah0X8cqYCJFctihL+ZWDmyMAygBlh5ZXwQBXlm/KGTPDAZUpaTtl4y2Qrr6kvEu1ySFmA56VVrlZbFiBpkraReK7D+U1vP1qbJ4+8AWmDVkWFc6bwGB0WRrLxpIlSHIirOTPSy40kku4I7Xus9pV5WLTxuUj9COkDt95FkJQ+UHua5s2pSwEtN1TPSWletdJMoSnPhqoaf+xPtHiZGEmPtkSc+qVUpmvl9AMGMOFWPZ3Hkvx5hVfWZ8KXF8i7wYljF9zXxK7fDsqi1/AyacaEXoc5qxik0q3O5i2v1ChfU510evyh1mm6SY22andnYXePs7uJEeWpVygqOPUqtENuX1QQMbM/KFWbVsqHskeoipjWUI1Yns4EuPeQquFx1Y5zh2F2G0+ARGNwY+N6IJVx5JIYt8irUlsbm0jmPTXb3B88dehfksmuoC6JQWomlVUdwfA+wieBiWNbecMiXqvNJ/O1X7Qq47FkF1srmFQusSdU7QzGaz05K+LtvOQMHD22ototfw8hNlFL9ncb3rjyxNq8DxSqJZbzh6iCXApyKcil32x4D5JLSWXOW42cmZhkG2lcj+NIVzKtvHnrYvT39s8otFy9j7ySoUzqKleP15OgQht1xmP1pEYbUG/b4XZvC6WGLGWbZeQYJq7Qm3gSgooPKj6o+Fc4vGdW8aNU5ATcUPXiq3zFq6kniCWqxzNhdPG87qmgNYLWCFrjjQ7vQVojtqSl3tH1odV7HQpoavi8+KwYjzhVR24r1MfIbBnLcIv9q/DEaVdNpvnac7HKZK/fCNYZ5Ar+0Tu0geU+3r6bVEpDDfuNTG+oivBWKFm/K6m8ytWbsZKY3sSkigylp5ZgLyDjtNH+fYVpqOa5Re+hDP/UvAxcGyv3MLA5u/IJEeIXKR4xQio5v9I7V6Viyq5IX41BP2PU6xrv1i6xX0M1YYFhr41g6yYP7H8mWe3ZlV5SF/7MCnfwVRbihIQqccz/Bx9dvJ//2SNPvJ6Ep8w3q1ENLzDfLBvN4e6S1fsoHpbu2HTRJz6eBljlccf22Pmco8ZciUlKbrcaUVwD5zxOJN+UR/vKKvwPVan4HirljX2ARo79vV18uhggddfdPLGF/dCWezBQFdUhJdU/Mh7kBR7K/dIQZ9JGRqtzGM3DPI0x2whmMzSvh+uaR5DL/mpWMdMKnTuyc5dDxs3SDCMMIwwjfMkjtBGUNjnVKaeootv6Y/XmqSgmryT2T6+ISmGEYYRhhA1GSKpMUcN28HoU/f6BigBoOcpjIa6yMRv7U9E8wY5xXmnneVBugM9XsmSvYIRPr6S8nPOyqTTe1qtwM3r25qiqyNYuSO2l8Xog85KBVmUGekOBvio07thqXEY+S3MMSXW/U9upYUG/ipRRb7ygel6kxgPzksoKWZtlLPeIPdMx/GNNWP11OpfqKWZtw3sHv+rPdzf36piF3TLPUJVasZjwlbvXmnjFa1LjavxsntCVI1VyOdrY+tX7AbsipT5rA1jBVRtctcFV++qxfRhhGGEY4cu0goOrNowwjPCNjpAEV21w1b4BJRVctcFVG1y1wVUbXLVvzFVLKkRfWWK8TpfaU7tnzR6UFii9dFiPU01KFVAlhr6jLVMLE9PrW+vsxQ+05R5S9tVy9DT0jSr4jV8skwe/cfAbhxGGEYYR/kYmefAbhxGGEb7REZLgNw5+4zegpILfOPiNg984+I2D3/jt+Y0rGM+/fcqUf52utuBPrulq8v7k6qJAI9RWWW6XJKG7QGVebVJoPRQ4DQVOvUsWCpy+xeGNK3aszds8XqO2gLdEf5BLQS4FuRTk0qTk0mOX639gn80KiKkqkU3klUeqjGU0NXlBKpn0Qteae67QUMaCwrpVQtIxTFST6jV13C8jbMZ627PkiPP0UyXHHDxfM+DMYzQRB+rn/tH6mY1Wr6lPf93PJKx6dEjD+L389mGEYYRhhC8zwhXSMMIIwwjf6AiJYbyENIxXsWSvYIQhDWPiWy+kYdxPUoU0DN+8zItlPglpGCEN46WkYYRKa+Zzfa7OskStDMo8xPOcTIJ0ibHjfDLTlRijGFsTc9xclMesOOfVnuZF70IHn3/w+QeffyPiB5//GzASwwjDCMMIX6Y7Jfj8wwjDCN/oCMn9PGnB5x+Y6kUpqeDzDz7/4PMPPv/g839jPv/fu2TfW/Lz18DC+zmKlXAeySRV4PDRowlef/VbPNAawhzjcm/VyEOYI4Q5QpijvnNX9bwSiy+MMIwwjPCFepBCmCOMMIzwjY6Q3M95GMIcgalelJIKYY4Q5ghhjhDmCGGOtxfmqGA8//YpUz6EP0L4o7zxQ/jjBYY/Gtf5fAjjkZLVYG0KUloF31yUyFJ/w0/qTrw/sa6ocer1pX4+LJ/bKm8Nf2GxEtIYSStFsYbwyd2M5TjFvdWHU4KsJKwqG6YtHd3wYiGvXquImnmCHcS+WDW7yF6FVK9LasTvqoZhrlRqSrMK8G+B2LiCyAajmiE2/3vZvKCxRpQZFpnmwNz9ST+99JPLt2mJdKkrlKyb1VpnNgeaD01LNHdMldJnyzLKWq5INEEmtUZb7tBjADqcGdmzSz3rYkpLXFC5NK4U8sLRB2NLNfLHwDwmt/PJyh78Vk9tqNGi88QjgwYdPACJWE1GOBBIyXZ71c0fz+FDS7eVzEwPfqjYjPd0SiR2w4YuiIYehiBCH0+EGnjSBQwjLffHEaRVXT2WPQ5LOWlZWnYc3ROlP45CsXBjRRZT04kbqF7dycdg73cXUHmBqxdYxpZRgD0EmfCosCoq0S0pfaDV9C9RUuu77A0+grw2X/Erc9orr0uTlEuv9eqsiNfXXTPy5vmiSYMwU9VbV7yoyeu2jVz204JRplNqj1NmeIqcHVF/JdC8MIgZ11LDcFhpLfwqtpg3XlClpxp7gSwhWUqEcJe1qIjKlbtNDesg9kxhjNUnFRxeXv1sNBZSjms9fSoXroKryyCW2KZ01bYqz8VDz5KT0MUhJQ8YDS8KiXyDqbJHkopOShPxD947tt/pTRwvfHjjyhNr8zpCr8RC7txpkDMV5A1yJsiZNz28B8mZibyQKPMzmzUMFXFonthgBgSb5xfdI/cvMVwZtcmxHgD8OtPY6jl5BJY2/OoeLF0i/iTVlplXGdRWUFtBbb3a4T2/2op8jHdvx0X1CYvJa8b7Zd5WJPo+j6MjSPIgyYMkfxPDe5AkL50OI81xO3Hp42Ubz04pw+ZS5L0mcNYkx15HmUv53ua+plFF8oy5I5yg6jhy0m8a2KmMI9imNAWr4IZXLo2V+vs4TK4DUkkpMpuXclecQFgJIZhpA24MtyKY25SBqV9mPmVysmeJQ35ydWQKL1bNrio/ubyRSaWEcX0Lue/XqsPCXmDmFSPNMqW9EuDh+dL129Blb+9M7c+pL7TtT+fIKje754MvAYlU2B1ViqBKiVgny1RmxcSPO40rl563OlD9IalXncT7Ozd/CWVVXjUBX3PzMYTPb1IE43fbjGWaPyVHvZDaDl7X4r0PTaSeJIExNpc3QhTqNpRs/BHY+7lzcR1WeYq6DSWUPvqsh49Xy7L0IcjZI5lLc7e2z71NVGML3KfewrivknzYKk/eoPAVdFLiRT3d4VLtOWlgmpVtw5Gemcfjq2CRBYvsbTYPFtlv3HwM4RMssje5GYNFFiyyYJEFiyxYZE1e9PMarTAzCO6I+nLubsPj29Ttp7JVjek37tPTin5qTMiaK+Vn3W88DZ9edVQ2GLnByA3N3x6uDkbui2k+hvAJRu6b3IzByA1GbjByg5EbjNyHlHkPxm8wfp/S+H3IqZCJtr3fT2XkVn8Iwpy7lw74oAj/VqsAUkVPLfHdQPXwVFemTkwnUr4yq5Z7Zs+1OktN0x0/ULIw7kl8s6AVBxXtal3u6njhVvXRDK9+dKdQGjBRJz1pRc9VB4uqMduTDruKQxoe1awHt48wbOz5UYdNtXdIMTMSjRhDMv7WorWCydWvenYVR2Cs6xWHXr3ARmPUzBhYrG0o94Mp/B07y/eTi5ZDZVRltBZ6uS0udZiB6CmPEP6yTK6X07z3W3eausBsda+3eJCixURzFr+gqbGU/4kTQfE4SVtxxFpxHLfiOGrFUQqfo6jFRLu8aOWsxWirSFtF3Moz/jkrWplgGd6W5a04FpMsqPgkGvOLWSuOYt5cXBVfqX5UTFu04M34ILIIn09bcVS0MkHkB14kRStOIhQHwJpEDJemYoz89ygSY+TkgLWKo0R1I2cQx4QP1Z4so3hfxH+j0JIV4h9KRTsqFoVQ+SsVN8B3JnYFY/wry/lXlotBimUWrYkYa4KeIdFBijKWN4XhxkBrvoa8TTFiOeGXRE1LrZNeGFrULSSMLcX1THRvtBjFK3Hu61XzQJoJpoChZZI9n56ynOujVkZbecrnkDE+B71dCcpiIk74w4llJb/qb2AM+UuEUQDNii9iLqxA2SGYU8yFUljdRP4OcxOT4TMBFQg+ICZe7EQK1L6StUE+iDkSmH0mL8h+maCZeCCSELmJIg3FmBLje6zag7WEHbIChTxKoVzuF85fJBccJ5ZX8CV+5kseU4sFSW7sPSo+M9x7VPFfkraKiDMc5zZSEt+P+mxLEpBEMHFa/iUD4jLsDTYNoZylxMZlanfCCGDH4o7g40xQGPHuRP9ZbghQOcpI9psbV8Q0+XeCHVKJ/mizzgri7m8u9ZCm4mIhBiepk5XIGOGGxkvw0IIau5wIalAYrfF4eFgei7aC1wk8QfwvuVaOwBq4sEJJplUd8kpK1EhReMUmU0T8Blr49jBFY47LECL60UQwtAC0T0krp3q9hRaJBSGRpAZf4dyxq5Rg93pgVHf6iPysnusQmc9NdZziUJCUUuFIFpN8rIkQcy4viDmtBPqLsVmMShRGE2X4C9ErMbKh2jZVLSWdiqegZJaarJHF9+UEBsqSSHlPJX0RnhhKMosFzPQ0UHtDUkncDCDR+wB7ZlluzqwwVDYRD83djcw/E824Sh5EsLZiiamkY1boh0W5WlWxtXMFWwhVa88VOVOdokQludFDArczxQtwGYVnbrYRQ/IuS7VQmXQjl978X+8ywoTEM/KwDk+yDiR36V61OoZ4dNRlZsiTWCAqj3wvQMYmsKhEIfmY2tKWJFp8qW4MUTM51eORGqpzdMPqe2tY05S2gUGfhkENBvMrC70ohXlzJQ+r+6s5ubnSCBzxmBzBFyOhJpCLAKxLB4cCRyhS7meapNKYkExhGChcJKU4gkYg3+zsoVAfHq5JwAo9/iS2pKdDpyrASw3JKkGvRH25YUBQ3swil3wcmgzFOKsyjkVm0u8hdhllyjdBpCZyMCZMNZMeA5pZq50xJXJsBgHFJrhX2RqaRzL1sMSejHA0oSwQPAMM2HSNgWL44AjRcWRKrapl1FYN8C/LFdOW9e/Y9kxxb3umsJjWksVeI80aZs391EYPdW1G2XtG28iQKVQvrNpElsfS0DHVfktL3/gUVJ3n0cIrOAWW2/suN8VcVOeyVo/EGdmoEPSx4Yl2f0YHUmj18FYl935heCIhj0bFIV/+bF5+Kyf8YchXqtFKEsvADoSdRINIKheFr9QtGCB7cWyDo58EoZgSuEbUA8NGhKKfUgagtLDyh6EscWmvRtkjSYt7G4SIB1Q/SqqjTpfqNc4s+MO0NYtK2RsocvWLOfEHqYeRwS2tMWyJTzKuQ4CFFTp9kNIxNbYyhJTeAaCTgdmRp/wT/hGuAwvqBMX5msTky28VFGdQnEFxBsU5KcWZ4ULF5GmUJr9atEgKUbaMd5Mxfpnk4JRnhjqlfMDyhxgvYYugZ1+EfHyrrYKeDXo26NmgZyemZ3NNolLuzmvTtyoMUEqpoU5WjRkiD6HEJwklegP8YR1eVpDf+5sVaikyaz28YsZMhcuqh6iFFEFxwCAlW8FVYuQF5NSSXWZSoKKJHBgsoGpapEqGwWUDA+fm83wCK4DlV9sqgOUAlgNYDmD5xUdzclR8mdRRBm6ytW9FMh1JVOaKmLUx5awoqbQRUSLkNP6P7cUKuj/o/tfSKuj+oPuD7g+6/0UHpCah92tUbE7NYRv5n7XIYLKuuQAmAph49a0CmAhgIoCJACYmBiYeM+r2+4EKO+7nP2xon8rCPrBiEZLk9ylaZMkhIVUo7KwHlyzKZIELId3wg9jyWPJCrKoqqsNE6TuiKtIYFWRIoYrL5FB7BncbMnUkawT/NkWLnoG2/gJERvGSidzwAIl/f6XzqMV8cMl0wZKnKiQ0qXIhaVF54hvKg6SFEZL2lANJi9JIQ/mPZ0i8KEK5j+ege0WiRTFmeQ9/WTBp7MBWfRD09u1hOGZOVe2xSubhVkVgnidjnqRSJCsbuIa7yraQxC4NRXRY7Ueq0PQkRf6ep0SeKgir6laUp5obltDjFwy8V2EKLG3I1AaUlC4Vo0BiW2UokKrMW4CCmQZMbFSYiCMEkqriLpIT/kzcZm3ul35cY/VRbV3bVfu8I31EJ+ekyQXPbjKLsTyQ47gZXr3X8bFcFKPTlMZ1UagC4yxuWaXypSB6xHLfQQoFKRSk0FuQQmbCxEMk0G/xloMg9oLYC2LvTYg9T2j3rYk/n8ei+lr5g+tWMOK4FvYML1sLL1sLL1sLL1sLL1t7wS9be9GvI9OvankLDuh7uZXlu1Wone0Mb2SCN0Yxhi+uYjm+0QoYEdJHqMpUIfL9VyBE5fAIblL5RqdYJncwBHYR5oIJPV/v1rZgAjexEnzlUIzvOIikONFCS352srnKrYTVNM5qpy78fbLVNqzMVzRi0zb2k98p0J3Us7DR3/gN7f3vKxyetHKR058zjsbrNstzpF6Z++UF7mK92wx6BxTvm0VA8QHFBxT/cBRfhsC5sVtNlFqioYbh6k38JYTuduLA9hpEnxriKG95Eb0F/2nLgu1GzyZl9MgTu6F3Ll46xC3HXlF9msG8l4vff8PXCXPRQHHjidQlhW0flJnPnuE1sW8oM98mbZppsMkMFlEgUy6PzuwGztb4KECkAJECRHpNEInWcrihFa3PL1zBPmIoJ07H17Ykfkpti6YuvLddmuSxcRAuq9S2hNZr20KeqxOQS1wlSrlmuDD8R3AZ5GjJo2EO0WR4vXzKe5LDBDud4c9o/efiAKSrZ/M6NcuaaFk2WsnGraSVUNqKOVMR+JinrbTFf4qTig6KxAgO61BvjO1JK2rFfEK8hzxX50mZet0d70+5xXLtGmtB0zgV5RjMDGm1jE0ay1Fbee5Zo8bRqMZ5KtLgW3HWisR/NFXTTltJK25lRnY4sfK74VxWxOHHEzNY1BLrBCPNWIvqlc8TORH8HgElxJXyydvoa+uv8Tr6+vVX69/hxfnRRX+/tbr29+f1T3/PzbSG3cu/ti773ZuDtcubk4vz6w9//fv/np8M/r9W+e/oR0yi+HC/388Z+/W1dXgyuDm4+sC7+Puk/6FL+ml/n/be5yTvvydpj77vHrLee0K7vf4h7ZHDhH5tnXeHBx/kOC4uD666/LEfcAznB62bu8uDD3qA38QPH/769/9cH9y0/m3ykFacZayIWZLkFR/7B4fdb4Obv3sXw8vu+V3rvweXg4u795sH1zfv25eXrenu5cn01cHR1cH19cnF+fTNwfVNr3t90Gr9++fa502xMJX3cHr8z4ev4t92r3dwefN+/rx30T85P/rw19HPk8uvrdmL85uD85v3nw7Oj26OP/xFsrzI9OVNToK/upeXg5OeIM/06fXF+dfW1vXB1fv20cH5zYe/Fi/eH9/cXL7vDU4Ozm+m4/+Nv35t/TvV617efLs66E990NP9Y6p7efn3SX/qw5Qz0ak/pr5dnUx9mPJNZuqPKf6Ev68O/pn68O/U8ODm+IL3wSkw9cfU5dXFzcXfw+7pxdXUh1h9PznH79+uBtUdf7sa/H3ZveoOr3nX/zP1YWrq1x9Txwfd/sEVv+LQberDX1OcclNf/5iyacd/oSwxf+DU45dd+vF7NAX5HWUaTn399cfU/kX/burD1L9fpk76X6Y+fJmih9lBQQ8P3/f2c/Ke9A7y993kMH/fTQ8PaUQP9ymhX6b++IJ0Fm0cSoufr76dy597h/2Upf3k/X6c9N+TvHv4fj9K9t8fxDSnvSLKiv4BtDm4vvwy9eHfL1PXN92bb9d/9y74Lx+SKPrjC1IMfjfn/2Xqw19fShT4f1q94+7V9cHNf77dHL4vvkx9/ePL1Hb36g5uX7s6OTo5/8Jp8EUQQYz03y9fBCG+8G9fvkyRXsp6JOm+T1ievif9bvy+G6eH77OIJodpkcT9fpff9+vLl3MxAxz38OD6unt0IPoU1w0G+jL1IdJXOAvxK3wYR1eXvb+RBtiOs9DffKf9fdm9ORbXp/m6Xk9fndycnJ12T86n5w6uz24uLqePLt5fXnV7Nye9g+nrs8v3txdXZ9eX3d7B9BmsDy699xt/0LV45PCid/YkT5vmT4Jn3sAyfhGb8MvUL7FBYD9eX/I9YvADsIOxf0btBYcT+NbgfMBvBS5wNsJl9/r6y9SHw+7g+uDXl/OpP5xV5RvYEQmRIxKiX3/I1fwHbldra3xVUmbqj6n+weX11Ie//p3iOmPqwxRqjak/BG2mPkwpLTH1BxdPXT7zhZPz/tq51GZTH6b++jr1xxSoKt4HKqsmW7rVO+l/cFQF76w0HKXGpj7I5//v3IFYGM9Yf/0x1e/ywf41Nf3u0/TR+spMe/14q7O7Gq0nCz876x+nj47aM/NH87Oft9Zn5trtmZlo9a6zsxB1dtZnZvj3ePu2s6i/z86vHvc+bsS94fZZe3293V5fnVNttxZue/OD+fb6Lb++vXV2Jq7PnvXveourq53djYv9RD7nOOp/nPnc2Z2fmSa8n+Ol/seN263h9s9e++P0qbhHtBP3iH7m5ffVW3jGxnxnd+Zn+/Dd53Z7/uP6zo/rz8k27d1+nB6I9gvf9pLj773zlZlpyp+xvbafDMS8T8R44+97yQ1vf9Fuz89vfxzcdtbnV9rtdrv7/d1c+3beM87ezMxZPOgvHn/vtPm98//d+rj8vb/IVvd2Lr/3jubnzWvdHSqvzW1vL6/AuAfbW2c/1vd2l4/3d1dmpsleu73eWersLJx1dpdmpskFn9vsfrJBxf3t9vE02Zpvr89v7O8s3O6kq1FvOPjWieOf/Y/Ll/vDHvZxy+nUXph+tzzTnp+ZOTse7O1sDHpHH6dPjtozc20x7/bcn+8+to/mZ6fJUVv0v3g1fXIreKO8Bkfz/91KN477H7d/rifsrLMu5rL4eXH7uLO4fdc+fPdfTrv1ITs7ELSbX5X3b+5s/+wlC+dA06Z0areXvr/baB/Nz8zHN/39HXbW2fnx89PZxqC3uP2ts7j9bS89m5mmS+324bu1drv9bppEc+31+f9uLG7fdnboWWeHnh6sf5w+PWrPzLTn5zeHCzc4BmON5+c3d7ajvfWP08f8vvmN4/7i/Mw05SNo706TYra9Pr+8E8f7u7vbl/vn66R9+G6dj7ndbp9N0xW+HpvOeuzv7uJn5EFJ86XDd+diToOb/n/PlweddHnQS1cv9xPybXOHnXZvP07/027PTNO9dntuc3rA9+r3dzt8nO31/k5nd/lnd4d9Q75f29uJB/j5U3eHnuHnzd7i9mn78N0en8Q0PZ0eiHVlq/vJ6tVuvHrb2Vnd3EuOB/s7fK58/S9mZuc5Py+c7e1uHLcP3y3yvbSZLP/T2VmN+F46b7dn2vHyoLf+cfr8CD/ffpy+tPfQEqfN+u7qz87ucsTHyu+5OPLIlIUN2lvcgj2t9vhCzOVS+/DdsN2eX9pIl2/3+HPStuDp9uzp9PB2aaa9Mdjf/Xx519np33V2VwVNPp2JMRzKMbcP3/Xa7Y/Tw6N2++P3d5327fzsNOV7asl6tlzz2aO22APnQj725R740T58d8Bp0V7vWLJrdjBzt59ufN/cWfhnP10CuaiuDb7Ja+14+/MmyIhlvve3Fhfu9nbin0hjcw+d2Huo3f70/d0x38Mfd+Lj3sIN7vN+iXe20o279d1l2cdK+/DdkeBfWsy11z9NX/BxrM8vbA8Xrvs7WzNiz7dn/pnOVvieWfr8cSPqLQCdpzMu3/ZmZger0d7uRtyLVr93FrdgzQxZItZ0fvl75yPI97lteX/Mx3XcSbbGoVO7PZtPXwra/wA+NeT+dLYH62Y8z5a/7fb0cbI7TZZmlue2h6vDLbK60xl+2lk9Wf25frO6uDpYvYuPV4Z76aed+Z+d4V68Mrc93DvdilbXPxY/bvNP39ruv/N/dha3h3u729f9BXa6n8S3ezuUttfZp87uzPV+enazvbj9sz8bz/Q+tmcWZ9lxb/Hse2+4fd7jsjMZfN8/YRHn5z2hZznfzfy5Fa/PcLnb3jj6vrc7c/kptdbye5/3ubh63Eu2+Jr9w3libn71+/75xmD/fP0GZdf63u7M7f7i4HRvd0O0656vft8/utzuJdt3n7YWzjs7NGpvLH/cv4svOC9/2lm97u5sf+vPFj8+nc7/ub6zetrZnYk+bW1/20vYWXeHnrfXN84PhoPbuTP9vE0ub9ONi/b6erQ2txW1D8lndn59spcs3PY/bt91dtZP1k7nk9XTM7Ky2SMrp+3rpeHCbW+BXXZml7Kls5tBb/HH94PPscAcnzg+mF26Xjrfvut+XsqWTkbQ7fPS9dJQ6N/D3nD7x9LpZb40xLUX/fcXtkV/wFO7SXzcHbK7pdOLH59ml297Qxbtx+xG6JaTpWzl8+1Jf3f5eun04uRTsnDb/cxsOZJuDHrpxune7urgz2ThtjcXe9Z7ptffbN+unHa+d4adn53ddbay8CNemWvfrQ5/XO7vDKI/N5fi3Y9btytzS4lYU46Zku31vd2Niz8/M7FOvTt2193duOwml8fdHfJ9Y3H7Zzfd+N6bZef7d/Ftb7hw2l8cnHY+s5/dtH3TT9hdN1293dtZHXxKFF1P9xcHfK2+d5Pt2/1FRvVasys5djGGj6ty3Dd8j20tLkTduej79u7qoHe+8r03HETdnZt/9nYG3z5FG4NechPtp+3vnaS46X1cPt5LNy73kq3vveTm9tNu/3tvePOzt7jAx6ees5f8uOS8Vzu+XUHjn58S0BuSTnx9BX9vxue985nTpRNYq9105rg3XLjp3S1lB3dL//C147/xPcA/f5b9bvN+12/W+fWT25P9xcFNd3f9ZO1k6W5V8JF4nlgDsf7xNtdTPz+ly5f9xcFVd7hwuX/C5ju7q1f9RXb7Kel//7Q7c7e3sxp1Oc3T1avebJzup8tXvXTmmNOijuYeWgi+7t0xQf/eHR8TG3bOVwd9zsun7ZNPs8t3nd2FrYPdmQEfY4frQH7fuaDZHOdLsW6zYu88Ex+tnBx+vj3pou4Se/Js4XQv2b7tz8YL+0OuMwbfOndL2c7dspApS4PoemnA6b10s77T5885WRtcn2wkxU2X659Z/fyVz+TH0iBmn2aXTzj+Fet9Hply4GdvlvPC8s/+4kLU31095DKs83kpWzlt336aXb5AHH2ydn59sp6wb/1FPo8Y6Xq5L2TU4o/LvWRB4JRPyeXP/YTkS4urF3u7y2JP93c3hp82j052P9+ebOywIbTrHO9/XB3AfDrHvfMzMY/NdPmykwy+uePeP9++3l/48Y3zYw8x8W6idCTnzRNTTglczOXU7O1JD3Dx4T7oyZO10xnet9gbu1xnCPnJeUjoSkUX89r+znbUXWRncs90Frdv+T7aSa9P9jkm5n0M4+/7w/73zqIYSyR5b/OMHW7FCyu70cas2E8cK38WdF/keHMznQGMd7eULQ1uctjHq6f7w8E1fh4sgVz8uZfQy3383PmM8jNZ/dbd+YGft44epf3cDFnZXL9dmWvHndOjn6unR4/znDHaC3shWbjeX+D7avBz7bR9tLdDT7uL7K738+J290Hza/vvWxQY8rQ33D7uL26frZ1EP3Z3477gieHgui/28cUJjg3099ylD+sc7SWDs7XhxqAzXIj3P27wvXfTW1z4dvB5RvDOGvCe6LuCx773FrfvELucrJ0AP306o4ODj+vVPChkgMDrYs+t7/aX17cWZv7cjE52d6Prg7vlb9wmgnmwb52Ene2dCNnJ8T5/ztpmzDa3tn4cbsyLcdx0djeOQX51LveHG3/2PvIx0Z+8j5305un4dIz2Kx+PfqzOtW85hl2bW0nWZp9wP/nb3+ztzuzv7fy43k1uBge7K9nK7Mzx/nD1Yj9d/rl2OtN/yPxWKuYHvKrsyuzT5kL/cDvi6zrs7vyIhPw/WYax7c7c7nK+9eLRmdPuznrmw/tLHwXvZEIPx6JvP48N2W1nd/m4v8jxK8elnJ/Wv23sLt8JHMNxDd8HZ/TP3Xh1Y3OBza+fLHN5LmxuoVvOVpP/pjOzW1vbc59+dlLO2+tbe99Xh2xmfXth4c/Py/3Dzz/ypSE93t8R/Hyzn9Dz/WTjpPoZAvcMxJ45vz7ZGA6+debZrRjn+QrvY/8gfmYZ7W3fvj2Ym49W5tq3qzt7ZOXnHnl2XQIy9Hh/8cdhN9mmXFYvLSr/YrayED1kfre1eytdHuztbgw6cxc3K9sx2xV4tnO5/3FjwPHC0hDG1vs4c8h52YuJF1e5TD/r7HSO+zs/ot1k9fv+7szx/vnZkeCdzUvAFqJvP4/tpzOD3hAwE98Dgp9m6dz+IgNbrULWcrzYWVwQ+GHnbnmuf3Jzuz5YWFi/K5J+xPl8YfHTz8739a2FjQ0hz+M+1wN8j+4mwnY67L0A3Mt1hvBPpDPH/cUjjt+e3X4CbMZOu+nKydrgJl8adAa981WpW7l9/U21HQ6+f0r3fuwNt6O9zXk+H+E7FGuZbH/r7C5fCntjsHrb2VkRMkP4SHdQ7wYZEmTI48iQtc7ucTRCV/65N7wc7KUbP7m+PLhbVnbyf4fL3/eTW87P86BPLyx8eLgdM6E7w94Ie+P17Y2F3nmNbc7tojN20h1un3IdBTpA6uGlfxR/n90s9M6Xv/c4JjxDnj0ZrYvD3gl75xXvnUbYVMU60Te2LXXQyaXEZt8+R9t3vSET9twGYtkGNhvb3eU0MfSa8GO2Tw7X2zPtQzJz1p6f9cR4Dr0xntPro73k+Lh3vjroz8Vxf3HvZq29sbO3u0zb650/e8PBeXeHzHw6vz7p7gjfN1mbmycrP+fJ2myUrs2dJZ82N072fq7c7O10hp2T6HZ1uEXXFjuDzs7qcPV06+Rw/aIt8h4S5bOZmd0ydPHR/OLcNuaEbKn9ermTXhect/48aVf9a/IVXZnrnx5uR4vS//QJ4pyCR9bmjn6sza38WJs7uln9eURXT6Job7jy89POwrAz3LtZmesM1jaPh52d7dPO6V68u74h7HJjzMsmP8zq8X7rrG8IOWrPqRP3Frks2n03k/3YP7jb+NnZXT86+HlEVjaPfq5sHpFPmz2ytrl3s7q4fLpyFx93hp3hp8120tk8I53h9mAv2UtWP7d/rJ7u0bW5+XRtbul2ac6KjR2tbO4la5tHP1Z/Ht2tzM54+d27P0bFFz+3jw6i/sL2bPvH0tz80f1jW+3hftIZ9pLt6M/N9hBjKGzldGv4cuJYK0Nh78TCBmPPH8fpqJjNnzv9u97iCvim7i6ypUVOZ78fFWmbrZxuHRnzyZ5/PjMyrpmtzM6ouYFfd+XI5YO1Z7PHV/uo92b2ktVB7+P6zcYOPd1PNi73h71sJ+ln3d2Z/tKCFXfKdqL+9087QgZrWvyc/7ayHfeXPkZHBz+XbldmQbe5saO1gdBj192dVfT1sX96Cfu2djdz2l1cuBP7Znc76pxEZPfzzMJ+spftJBAz2v08I+T02uAG5TTt736e+dbf+XE9e9I+Wplt3x5+bh8tLdzk2rc4Y+oq4KvI9lVzvPfnIr3cnyNH4/5b9iVXyu6Kfxv4fud+fOvu3L7T/5ZjFnI8FT7dI6kj1iaKJWaEzljTsYkjU2esoQ93c7hN+rMY2zBt0kF0tBNf/1yaWxJrt7sds6WPNxqTzJv2K9DJwbhZA53ZRJcCBi3RecS/DTDjKH5ZmXX4oIQFZ6QvPptobGlRYMDM2CdmTCkz7Ca55sY+Wu4vLdzsr2y2j1ZOt2Kuo9c+t/m/Rysn7bvVza2jlc3e3dIc7MmluS15Xwrf54+4rDj8PBP26Qvap+vJj++9ZOvx1ns7gnnH+l/5v8hh+Biz3fX52Wm6fTCdiXzUle3dmTO+H7aG2z/5HNuH775BPueP1b3djdPu4vbZesLi/XPIi5zbir93FgfD7o5zfXv7luvYvnP/7EBf/7y1PiOSZ+d2p6/4TNY7Mjd4ZfmofTYupm7PzP93OjtbaK9/mr7ClNh/jtoz7fX2wsyi0J/tqT+mZr+/u5zh085EmvLCdHbRbq/P/2fq668/xsumt46GTX2Y+uvfL9+iKO2dnwzEh4PWuN/hEFncpf2of/DLm5tPDvcP8wOSvCeHZP892U9677v73eh9cpB1SRId0jxNRubhqwNl/gnCsTIxIzhY1uShrYX20qf5uYpDZU2O9LQanTuoPFr2SKfPCkomcfjsizp99kUeP8uLJBp9Lurb1QkcrKmYlLhJnkWDw05wTkS0Wpzf9JwnikvniWLxpEHtk/7/7uXlf9whcs5NsovDw+uDm/9E+HVwMjy5+U9C8SvvYLZ7ffBn9+b4P495HAkeN7zonT32o/AsEjzw6uAfzhj/Obq67OGayRN8sCD/ow9odS8vK5dakE38mlB1tOrPpz1ZBSspHhjhGbt/NuVpKzVBc0Uf/5DZL+cwn7N14YAe375waE9vRvilvCHdY3z4CHmA7FGPFM5fHMLd4rxYs2OG598Gg0meGPxHN/OcITTOmumL/YNLzsx//ftFqBbxAyoX+0SeUiTAwQc3XSCXOPsFulLc99e/X7T6k/rwCa8IXRtF9LBIs+JJn8y1T3cw+Pvs4O76Q9TqnveOL66uP0Rfxx53VNF77+qge3PQ//A+/vrrq1gHwBGwavzxQud8cI92e870wZFzzhLQkXfxFbYQv/CV/t/Vgx83lYzBWbHfFZzx15ep9u1Su93+z38E1wf+CvzVhL/mr64aslcV4A/sFtitMbvNDi4Qaj+M4b7+Pmf08ZOADNsHV9eSnt3Lk/+FJv97cjH9Pd4/uOnGosV/T87Rajk4P7g6Aaj5+fKgB1tu5eCmi1QOG/B324Aj8cTa/ulB70YynDJZ/mf/4mIgGs4B65h449fXX0IFBPYM7Pm4cKSKO5HT/jt/dXVxZbNptRoJbBvY9qlgzcQZ96unfM+v1l8Ny69pQn67v4edrwuL8l65TFtRxEUaF8X7vGDZe7LfS993Dw8P30fZASsODw56h9nDy7Q1eUhLu4grPj6gTNvifL2f3Ovotf28tpv3ab28T+3kLfl4MY7Q6l5eljanoMmHhLbkAD88+gBbsCofohYOUgiClrkejzmI2nDKyMDIr9a/SRSJLuqDLI4z9Wtr/uLww1/Cifq1td29uvvwFzhPv35tCX/peasVtaJfrValcDGU3QREy71FEai2R35ajTobY5yRt19LkZki9V4KrEq8KjPAEa9fW3/9lbZEZc+aOp5hrV/dWs9fXXmWemKVXQNHvDqOEHB1EjwBOkv+DX+4bvr16yvvL9SZfsI608/x5rN7lYj+em+o4sATXTy3Ub3YqV8GluGc+u+/N1ffDlp8MEkUceNJfP/XHFVr5Kh+jd3gVwsfxOfTkvP55X7nhBK4rLX8eW3VmG0Twwdmew8K/Wr99fXXr19fzRKiu9/f3bRv52fmFvA4xfbyoJduX/fbH6evoNTiyubOQrSXHA8686vf+zs0ghKh8ep+snHZGQ7c69u9j6uD3vmGc/3SuD6Yb2+I/LN4OiNz7aP5xV66cdfdoedzs3vt5bmN4d5wL+1srt992twYri4u3awuLt3t3cXHe8P520+by4PV4Xy0cjozXN3s/Vw5av/nVaStFXlODqLIn7bWJP9rYmlr/KH/5+S89+Gvfw+7J4NvVwet+NfXl8QZH6czAoX12v8Zsbpf/3ACRlMfHjOAwxlFBose90lgvOLzoJYxOjSnPvjdmVN/CGfm1Afpypz6QzgyOVdLN+arKXOMjjUxb6hEPfU/w4v+weD6fzfRcp/6QzjV+DKEWsihFnKohRxqIYdayKEWcqiFHGohh1rIoRZyqIUcaiGHWsihFnKohRxqIYdayKEWcqiFHGohh3pzod5cqIUcaiGHmpVBhoRayGFvhL3x3Hsj1EIOeyfsnVALOdRCDrWQQy3kUAs51EIOtZBDjdVQCznUQg61kMM+DbWQn68W8q8//i97V7rcyI3fJa+dDy6nKnkDVNfWfNiIYzSuBliZpJSxdsvZeM9kvyjMVItq2srSIoeiduNS8THyEEklfsXZwg30xUOkrkF5PEM20QD6f/z+B9B/+J3nUTkHv++8870EXYJkXxv2UyXlVEk5VVJOlZRTJeVUSTlVUk6lR1ONrlRJOcnXEyldmCopJ3FLlZRTJeWkgC9DAVMl5SSeT1g8UyXlJLbPUGxTJeVUSTlVUk6VlFMl5VRL9VnUUk2VlD8eXqdKykkiUiXlVEk5VVJOlZS3q6TcXqX0+tvZax2j/a66uZ0u/YaxF1Nx+eVvjnsW9ZqfmfzFdZ3vK0MjRzZpUbPV7hFeHTazKyl3FwLS/JJdDngB6YCUZDwoIbwYUDEpC5bDCzIW2erztdFfPbX099dX038Azb+V3KFJSSqBW1JGm0zn3imjTQbp2HkZfNwlZQTW7KvcZU8lFWgfWyq1OGyyaTQ7Mbsss2F94112ki1ur/VPm8CHbF/dzCXEBRvE9P4wsz1M/hY+XTY8X7c1LBudqE1gsqmW92y0OlEbwLJhtoM1zE5qG8WyYZadhJvEsiE8CbeIqR1ifjuYbv/Ca7gfCqfm5c1NNlQ+0AZAFBd+H543IGbnku99wZQv9d4SUEnXFyGmXWAkTBTEASdBuMNk+KAiGhMf6ObYeMxcOdUuSEDqaqFDDt1NEEep6MZEHkVHrBW24W5sZOIL323YDst2tTlQwGxg05ifipi4uuyu5RAUNvpBMo6QEZmiAtNhnI3O/EMWdlZM3eOiROyIhMxjdLU0M9StCbT9RvOIus1dj+1tbIemHVGPrX4xEZ4Zilk+UR3NQg4Kw1+URy150DKHLqjN7fj1lhQU3BCLNoSG2SY6IlWdFWEnjJt5SxlEZt4wt0+kKASNxOLcSOzmnChUuLqOszIohubxTLM8t4E9ZP7hgyC6tb2LhWs3OPljflDhr3GjEEQPKEICYd0DU49stEvlDOwIupUlI2P+8VBERmzCeIx15gLkeiyjbiLvjOoF7g74o0l6SYQA2eEKM9xmT+C1A+v8Q24ieExV7gFFgmXG8hLiMW0bDWSGp1incYoAe6hLptgpg30wRGdxWsdzwqq1SXWPQ504uLwqaTG5MqLJnoNcSBGRoqDkMyCISo5RQFiEPepfGJBGQwnKa5CkP2s+MsNdYhU9h1v2iVxmjkhYsuoUEq8LatQtHijkrZFwK2i1mT73I7EEs/JOsCGYpZehWh5SW2XCwh7Uo0KdOdNXrdrkYnMttUP16irpUDSLD6ywHOemQ4ICI4z959ziPTUCBKUQ1KA+gnn1mZpMnGW21lkU/Kg5WADOggxlPFDItC4+FzR4/ugWpXnIJRDN0BYp7Tf9r5PFuhUTtNYPx3EKWARyQp3mKnCK5cw7RA2pK0AhgOBarc10cxYaCMqsiWkYQcrrP3m7S9ZZZguxUHsCtCVhHLAj6Hlzl7BbFSU8dTpFeRG5q3ZctoWnJP8jltMW4hDdg8AL2sGxiFv6s8YObOeBI0XQJEJrEKuGSQZFApNIi82dJso/KqeJobVOEzFUZGa5B6At4Hg7MTLegGylFI60TNWDNoutDo1AlJlYTSk4NxjDveJEuB/ICsPbuU+MHMp9WsOaJ+8+ObmhfqmxiRPdYV+IaKiXEOsUVRs0ogSX+lg+V2t02C6eqcU1d8GsuwmFY1St0Jl1Om1jKTULdRTqDtz33N1PsVq30x0K9Ymqq3IOCOSyKwKQ5A0nW11UqmN9T6T579doBdWImxtMMA0c1aiLexWYmtAVqaXHWh6ERCmFHCACiE9PQCq/bazggQU03QsRplkM0ENpPTgG+vHt/4ccWP/nPWfkl49hcCu0JGnaIuZTNoakkLpBWGM20K4fW29eJ4a8c2HobtXWrWDnxrYrXmlR9wil5dWOHs25AERIjSRSBWTXcm4iSJNoVgsXUITr8s55JmaF26zTyxvJGlIVwRWIvYYConSBGaXIlYLmHCDCQI6wDL6E6MuDYQIoV2vqRP0p7Fq7XlmHUvUIUf14zggjGO5+THbVBUxM935i1Hd6OFn149a4L2jQMTZTMaR0kUENID0Rcsl8TsLHQg28V+QTdRvhOLH2xrqxaNxp6cQfgpIMh6LB8l0lQSA1cylvXAoetfQ1OzicWjM5COGtNziltVRSjanaetI6AOvJV/Mgu0zUoEUdYFS6oghcNgNSUPNWeMtOCp+AMA1yy3yk0Qw7RDK8F4Xz+SG1QEOKoAekmwvvONjQS5ur4B5YdLGlG+32fVOd3sqvamOjCB2cxIeH4AMp6nTv4k4AjzUTzgI80b5oC75zjbGoJeiK0JYgD1+umwBq9md6WlDDda6xI2jbI5oh2iYBfRgBDQSs3Vh4pvCwcacMu/bdkry50UgScUiJkMxANHTkmmmACFJ289h1FyJ3QhF47hKSsJnBRsFH2Nl9YxA9uCeB4FFkH6JnjU5dDi8NkNU6vdbri7MjYXQMA8UxIQPfhivbRIkh/e4TLFIBMLJZdmOJaj6mflRmkxiURdxmwkFOLCDIZ8lcrOFlhLnBUPwwhfBYoGRGC+CmPNYUK9yavDLcMEStLjb6qKaR6Gra363jGb5zPMMjoY2wuDVIi6bZ057G3kPfPeviveBeGGAK9Yx1SgTDpaXAxoggfYHdCILX7E2bgSq4WiBQi0c8B4VKWTEOGKv5K36BKNK7AkarWoXwWYLagowb0jxR7BWalQn7+kE9MtPb63E9wkt37XKX0gqoMjTIAq1LjuoXJChRUPUcnubp3xUv0YgAX6n3Vsy+Jw1a2OWJWzY86SYCP02xMbPfB6FE14qtpACVEzFWTUTBFXLDeE+AxHAZc6OZkaR854DQ+AOun10XBzBqgLbqLbYv4YPfyzwEKXQTTtcg3FuMGPEJUzvulAg77/ReRie02OFWhNDRYTrsKLD8ZP6o1EHk6iTD+Zxg8unflQxnMpzJcCbDuS/DyYTbWfMgRlNe5YDobYKMyW6YkJdJoZPyIjCnVE7Y/pCbS+aOZGefBD6+1LuSnU12NtnZZGf3ZmcLT6LG3p3nZm/dMkBjSw2t7aoJl8jTUuKDLCW2LvAnPjytRf7W36Kllp5XfbyXGGyFY91T9CBFDByY9zGcu0qCfQG1l4TCTYGOJnZimoHu1vjtn9gH7nnBJznLz/yu5CwnZzk5y8lZfvKrOZ2vjjasb8dmOoLczpU8t1vTzUYa3jBpa1aJjKTJf+IsVrL9yfY/l7uS7U+2P9n+ZPuf9ILUPux+j4ktaDjtYP9nr2ew39RcciaSM/Hs70rORHImkjORnIm9OROHXHX7+JyKeN2v/WXD+K0s0wc05aRUtRJiKnlsXVcD5w//qlT9VSdVX0a0vuKkHSRbYoHGTs9jnP5giK9KYNmSVz06lwPRJ/uqrBHuqFnb412R3KoCgxHUMoVJ97zYD/0KyKkGMy2/rBOG1euLEQBHqPsYDBSqMmmMnr0sFJvgpejjoTYJTQ3vFQ37Hl6jS6nxhTpsxKIhi19qRurqoygHWlMuZi8N7mFjdzfzByw3gyzLfIkYRQX/95Mv0IJ55zv2uiAL5sEmgJYCLJg3ZpoKrjzCVheeCqw8Bt07trbwLQuq1GMqgpSnhEIlv1ew06bD+sV+jf69wiPjuCQ8DyY8qBOSXdahR7qa0acNUTeE6MTtA9XEwk093612iYmna1VLdP8b1SvRHdy3UonA9pkQdc6rrRTSfNRtwls9wQePb/XjBEVALKUb5T8MsaNo2FC1PR72xMrjmh45NI6kcaK5Jaf+Y0KFvuwQ6k3S1Pmw+UqAT9scIlY9aKgbJ8cfd6YHTCvvm1x67E2eYqucL+pMM1D+4vK8qJ6joHyN9m6QpZAEWLsxrHWGPdBgliZURoqqJ6QwAiKNWQG6JxRKKJRQKKFQ1xaV+yCQdCu5ASGK46Rkoa5jn1jTQFVvSesA5v7WbZrto5Y2cZdgL8Fegr0Ee/2w17KY/tLgry1j0X2t+aGeVghWzt1hNHJAc5hcgf1pKO2LctE5M152zLklBXGHg+nzVOyWgPDULegTEYVPRtijXLA9hsWlXJzubHKznXWUOGMb3QzX3ezOLLXn8lDsHlsfKseCdBOJEkZ6oUcdH/cYq4tQHyZpjq0RgHr2F/YQGmq+27OJ5JXmDgo4AufbdTQarcA+zgLP85JewsuqeRY4mVxMioqgAZmQiwG5QONBeVHCAapYSRCc0AKje58Fvskg4OenX//L2Vcd54Bvcs412OjQ4bYTwcflTbXm0HDVZIeDwwmnZC8nh4/L+fJ2UV1mQ02WgiPYe0b47eIqG2Zdz5KdqDOk3y2q99nwLvu+Wn43k/384uxf64du57VDt3PZ97Sn738s5/M3tQn9+y2EiM0mk5tq+Qbqb9Or76+WbxDV3+Tdb8ub6jfl8rs3BzxKW4/2/Wz8x0OPpA/t1uMtqveS+W++XczHijnTd/NyUX5/I6n/M310eTmft3JS0SkbZoiaA8d/83DnjWuOZcMMqmPk3+vT4TPzGCHPDnzU+io8q76mfNnwPJPql41OMq9K8mpTmcJT6lWnWgsOcj7+2WwiW6pT1fvPy7++nU7vfQT+e928diC++ur0OzvJLqv5TTY8v8skqmfDzOC6P1ze4bgUt2pZyqdX569rY5MNs/M7KdV4fH01VR8qcOjvyoxBSCccM37w0STAl9Ppuz9WP9wMISivx9/NFjdDONpqnrC13/GiKpfV5XCQj1aj7CTTBlnyQQ6q8HxYw4C2k/K1yZXMlZ00WOmMdDZUvHv9q+q/lm0sXp1kl6Xk8Xl2+uevT09P37yRgpmk46OSjrPFYo1wvP3T383/6bdnb79kfz49PT39+Zdsdnr627MkLB+fsLydzpQDuaO4jLTf8E66iu/mh/cctM/0ACM5p0n/K03sH6rFjaZcOb96rRu/vpp9+af8olqWeXaS/fLqWvnd1XW1uJI+1e/n1ViqyTfVstTUTCrz7FWmx/r++uI/q/FSi4vxrn92MZtNs5PsK8V+b5dXo5UE2yRUSaj6jXabTBk5+eXZYjFbeOHqBOokbEnYNjT6+xK3keteRuXZagXO95H9lOQUsBg3s5+c5xznnA8KLtiAXIzxoJxMJgPIKsEnVTWeMHrv7OcmgwCf1Ov4WGdfncWdSUtw94uz/rxmW77ulU3VvbJZulcPlaB79XC5uVdhWs6kd0E5nzcUSBFhiCiwcxsefG5Ac2AIgZmkUlYQcuGQk+jNcq/NV6/AHYJQddGf+65lzUbgbDYZnquM2Qj8oVz8MDzX2bLRCFzfTqefAwABXAHQCQ2BpekBhh6oUBZikzu6Ub6rXxjcGeF4CEw7YXgXSDnvswZSI3B+joFadupZZEq0bNDybLFoIeXelvUSxRsUV57HPmiuIc3+rf9I6FqtRrK/tJL/0lfyd1l/H+1syWrW6y5TC7VkjMWYoHKARIEH5LLMB2WOJwMGKZpgjvLLyzJbeTMnhfTubrm4rYCcB4JQesXq+104IbB2Qqutb1gBM5B8FGAfZVX/LmmkLDb459//+lf2QTdxe+WDbkeXFTgfrZLCPoLCan1TZVKQ1FGlcGpfllZSdVk1cEpL1TZErbRCFTkh+le9kY6qDWumD9MvVuqv3s9+xO0yvChIBWEzYNxkH8rOAaMc5KdX1+Ph+d2kvJreLiqQr0ZJ1HcX9cI9tSpTA3bcg5Uch6eDQxJWCrMDmQi9N1cfm6LfgtQbQ+WPGoUUwDgU0puXDUZh2ZPZzStRh5h9rHIIdQ8t9iIvF7PLH15fXSaxeSY6ffzJh//+jw///5Pj4y80ZP+uurmdLo8//Hh0/OnxF9+Uy/F31eXb2e318vjTo+O//mZ2eTW5Cq/82/ymWiyDK5/bK19/dfw3R0dH9MOPP/nk+K9ulour62+/eHX002Jc8QKJfDBhqByQoigHF9XleEBwWVU5FxcFE0d/+/mH//ns+JMP/3d0dPTZh/89Oj4++uxTOemjvwQAAP//UaNe7iFxDAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-38 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-39 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-40 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-41 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-42 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-43 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-44 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-45 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-46 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-47 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-48 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-49 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-50 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App 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-20-51 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App cid:default_company] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-52 -spec: - metadata: - FindOptions: '[{ 0x140000362f0 map[all_keys:0 anchors:0] 0x14000036298 map[created:-1]}]' - filter: map[app_id:Keploy-Test-App cid:default_company] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-0 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-1 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7ajs0GFBDwwgOgIsSDkWidKPAASu2ERjRRZMd9iSI03Z00RvbusjMrkSdEaaHcChTKtZSUSymFcvsT/Al+CtJBM+u1NxFRX3bPmXPmfOfyzeGL/IYL1Dal0t0sAp8n3ANntQOfUGunUmgZwiPU+klYyNWeFjpTxsVt567uUpKYv9dXMrV3e1kQSKXs3RUxGGapNHJlM9ZimEtSaQX+i4ge4T8dYHZrexSHcqieNiZjAV8g4jv8pgt4+eEFwr1FgqVEaj0t0nF+9XY8SoZyrFW6WZS7N0yEtlBynHO/u2r/Xfkq+C2C25EJ+DOC15UqAX9BqKzHAyXB7xKqXamyoQZ/Rai9mCaBvfYbYSZXzI0/iOh1vmg6ekrrpAhcR3VN6t04tFlspLGO18QrcWrSG6uDKFfdfve08ar3u6c3RCpGCnyJUD0lRShT8PsE72Qc7tnyTw4ikVrRW4nTEfgjInqM3/aAuZFItpROB9G57fxn4/jwiR7m9zwcCOmbCsnndxw4plaf6FH+0AHmJiMxAB2hhQEBXyaa5w9cYGZ6fpngwn1J5rmdEcNMKtu5yobQu1YkepyvOsADk7AdmcgolFGwZzvPV4ie549doFG2XCF48NbFSNpiN/eSXFiTBvgSwctT+JRMdZ84QH1re2s7G0R60ZyiQZTx5ybffC7j8dbQyCnUjkNLz//t82zusyaVEufk3Wc4nQvRGf7SxQHueAcw+RphNgdVhdN3hIbBLvQfCPWOTAr1VyJ6jr92gfpqpIvTa6b71fU4HYkhHMLM8muJDIoXuxTozD47omN8wwEenEwgBy9h83WiF/gbF/AP2q4fCcH7UwzeJ6In+Vu3RLF9gjOhRsVSI6dDh783sz5UrVdGmUx7CudP0XzL+F8c4P4yp6a9At8kOsE/mnaVDDdNLUcy6jYRPcE/O8BD5ajGWAS4TeBbRCv8kwvMHjLeOlRDUfqRJTzFd8zSKK8Vp/TQJ9vDdPZ3Q+Pyzim7ustpav0Un8exxZaUOyI421xsHX+22do5K5riuDTSwjPzi62FhdaJefz7942r/4y/1Y2lXm+5g/tCuSOyoX45iEeJiPYwp4TZqc0oDmVzR+pgF37hk5mdX3Wq9F8AAAD//ya6F/FOBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-2 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-3 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bVRCeb3dtx2YDCgh4yQOgIsSDUVsnpeYBlNoJjWiiyI77EkXosHvcGNm7y56zEnlClBbKrZSWO6WkXEophNuf4E8hDTq7XnsTEfGyO3Nmznxz+c7wZX7TBiqbUulOEoAvEu6DtdqGS6i0Yim09OEQKr3Iz+VyVwudKONitzJXeymKzN/pKRmnd7uJ50ml0rsrYjBMYmnk0maoxTCTpNIK/BcRzfOfFjC7tT0KfTlUzxiTsYAvEfE+v2UDTnZ4iXB/nmAhkUpXi3icX7UVjqKhHGulThJk7jUToSWUHOfc66ym/458Dfw2wW7LCPwZwelIFYG/IJTWw4GS4PcI5Y5UyVCDvyJUXowjL732G2EmU8yNP4joDb5sOnpW6ygPXEV5Teqd0E+z2IhDHa6JV8PYpDdWB0Gm2r3OOeNV7XXObYhYjBT4CqF8VgpfxuAPCM6Z0N9Nyz8zCEScis5KGI/A14jocX7HAeZGItpSOh4EF7azXxrHhUv0KL/v4EBI11RILr9rwTK1ukSP8UcWMDcZiQFoCy0MCPgq0SJ/aAMz0/OrBBv2SzLL7bwYJlKlnSttCL2TikRP8KcW8NAkbFtGMvBl4O2mnefrRM/zxzZQK1quExw462Ik02I3d6NMWJMG+ArByVL4hEx1NyygurW9tZ0MAn3anKJGlPDnJt9sLuPxVlDLKNQK/ZSe/9nn2cxnTSolLsj/n+F0LkTn+UsbB7jjHMDkm4TZDFTlTt8RagY7138gVNsyytVfieg5/toGqquBzk9vmu6X18N4JIawCDPLr0fSy1/skqeT9NkRHePbFvDwZAIZeAGbbxG9wN/YgHvQdutICN6bYvAeET3F39oFiu0RrAk1Sik1Mjq0+Xsz60PVOkWUybSncO4UzU0Z/4sFPFjk1LRX4DtEDf7RtKtguGNqOZJR94joSf7ZAh4pRjXGPMA9At8lWuGfbGD2kPHuoRry0o8s4WneN0ujuFaswkOfbA/T2d8NjYs7p+hqL8dx6qf4Io690jjtNRefbdZP9k806gvNfqMuTp1YrDeOn2ouNo8v9BdOLuCfv2/fuDb+ljeWut3lNh7wZV8kQ/2yF44iEexiTgmzU+tB6Mt6X2pvB27uk5idP2/N078BAAD//3JkhWpOBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-4 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-5 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bVRCeb3djx2EDCgh46QOgIsSDUdO6assDKLUTGpFEkRP3JYrQqXfSGNm72z1nJfKEKC2UWyjlDqWkXEoplNuf4E8hDTq7XnsTEfGyO3Nmznxz+c7IVXnDBarrrE07DSGXCQ/AWWzBJ1SbCSvDATxCtRMHhVxZM8qk2rq4zdzVnYtj+/c6mpPs7lra7bLW2d0F1eunCVt5Yj0yqp9LrI2G/EVER+RPB5je2BxEAff1c9ZkLZArRHJf3nQBLz+8QniwSLCUSHXNqGSYX60ZDeI+D7WJdhrm7lM2QlNpHubcaS9m/zZfgrxFcFscQz4jeG3WMeQLwsRK1NMMeZdQabNO+wbyFaH6UhJ3s2u/ESZzxd74g4hel6u2o+eMiYvANVSW2WxHQZbFahKZaFm9GiU2vaHaC3PV7bSXrFet015aVYkaaMg1QuUcq4ATyPsE72wU7GTln+2FKslEbyFKBpDrRPSkvO0BMwMVb2iT9MKLm/kvi+PDJ3pc3vOwL6RvKyRf3nHg2Fp9oifkQweYGY3EArSUURYEskt0Uj5wgcnx+S7Bhfsy57mdV/2Udda5iVVltjOR6Cn51AEeGYVtccxhwGF3J+u83CB6QT5ygamy5QbBg7eiBpwVu74T58IyW+BrBC9P4ROy1X3sALWNzY3NtBea0/YUU0SpfG7zzecyHG8VUzmFmlGQ0fM/+zyd+yyz1uoi//8Mx3MhOi9futjHHW8fptwkTOegunD6jjBlsQv9B0KtxXGh/kpEz8vXLlBbDE1xetN2v7ISJQPVh0OYnH8t5m7xYue6Js2eHdFRue0Aj44mkIOXsOUW0YvyjQv4+223DoWQvTGG7BHRM/KtW6LYHsEZUWMio0ZOh5Z8b2d9oFqvjDKa9hjOH6P5GeN/cYCHy5wa9wpyh+iE/GjbVTLcsbUcyqh7RPS0/OwAj5WjWmMR4B5B7hItyE8uMH3AePdADUXph5bwrNy3S6O8VpzSQx9tD9vZ3y2Nyzun7OrOJ0nmd0ku42gwe6bROLbVqM+eUkG9cYG5fmb2FNePN46faJxm1T128gL++fv29d3ht7Iwt7g038JDAW+ptG9e6UaDWIU7mNHK7tR6GAVc32LT3YZf+KSaE/cI/RsAAP//+dw3nUwGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-6 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-7 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW2/cVBCez3Z2s8EBBQS89AFQEeJhUaM0VcMDKM0mNCKJok3SlyiCE3vSLNq1XZ9jiTwhSgvlFqDcoZSUSymFcvsT/CmkQcde7zoRES/2zJk5883lOyNX5XUXqK+zNu0sglwm3AdnsQWfUJ9LWRkO4RHqG0lYyrU1o0ymrYs7V7i6s0li/96G5jS/u5YFAWud311QnW6WspVH1mOjuoXE2mjIX0R0Qv50gPHNrV4cclc/Y03WArlCJPfkDRfwisMrhPvLBCuJ1NeMSvv5NebiXtLlvjbSzqLCfcxGmFOa+zlvtBfzf5svQd4kuC1OIJ8RvDbrBPIFYWQl7miGvEOotVlnXQP5ilB/IU2C/NpvhNFCsTf+IKLX5Krt6HljkjJwA7VlNrtxmGexmsYmXlavxKlNr692okJ1N9pL1qux0V5aVanqacg1Qu08q5BTyHsE71wc7uXln+tEKs1FbyFOe5APiehxecsDJnoq2dQm7UQXt4pfHseHT/SovOvhUEjfVki+vO3AsbX6RI/JBw4wMRiJBWgpoywIZJ9oWt53gdHh+T7BhfsiF7ldUN2Mdd65kVVldnOR6An51AEeGoRtccJRyFGwl3derhM9Jx+5wFjVcp3gwVtRPc6LXd9LCmGZLfA1glek8AnZ6j52gMbm1uZW1onMWXuKMaJMPrf5FnPpj7eOsYJCc3GY0/M/+zxe+Cyz1uoi//8Mh3MhuiBfujjEHe8QptwgjBegunT6jjBmsUv9B0KjxUmp/kpEz8rXLtBYjEx5esN2v7YSpz3VhUMYnX814aB8sbOByfJnR3RSbjnAw4MJFOAVbLlJ9Lx84wL+YdvNYyHkYIghB0T0lHzrVih2QHAG1BjJqVHQoSXf21kfqdarogymPYTzh2h+zvhfHODBKqeGvYLcJpqSH227KobbtpZjGXWXiJ6Unx3gkWpUaywD3CXIHaIF+ckFxo8Y7xypoSz92BKelnt2aVTXilN56IPtYTv7u6VxdedUXd35NM39LsllnJyZ3A5OTZ+ZbE7z9lTz9Omzqjmj1EzzTLDDp3hqkie3A/zz9639l/vf2sLs4tJ8Cw+EvKOyrnkpiHuJivYwoZXdqc0oDrm5wybYhV/6ZJpT9wT9GwAA///wPgN5TAYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-8 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-9 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RU3W8bRRCf393Zjs0FFBDw0gdARYgHI6VJaMQDKLUTGpFEkRP3JYrQ5m7TuLLvrrd7EnlClBZKgQLlG0pJ+SilUL7+Cf4ppEG757MvEREvdzM7s/Obj98OX+E3XKC2KZXuZBH4EuEBOMtt+IRaK5VCyxAeodZNwkKubmihM2Vc3Fbu6i4kifl7XSVTe3cjCwKplL27JHr9LJVGrmzGWvRzSSqtwH8R0Qn+0wEmt7YHcSj76jljMhbwZSK+z2+6gJcfXiY8WCRYSqS2oUU6zK/eigdJXw61SieLcveGidASSg5z7naW7b8jL4LfIrhtmYA/I3gdqRLwF4TKWtxTEnyNUO1IlfU1+CtC7eU0Cey13wgTuWJu/EFEr/MV09GzWidF4Dqqq1LvxaHNYj2NdbwqLsSpSW+o9qJcdbudFeNV73ZW1kUqBgp8lVA9K0UoU/B7BO9MHO7b8s/0IpFa0VuK0wH4QyJ6kt/2gKmBSLaUTnvR+e38Z+P48Ike53c9HArpmwrJ53ccOKZWn+gJ/sABpkYjMQBtoYUBAV8nmuP3XWBifH6d4MJ9Rea5nRP9TCrbucq60HtWJHqKP3WAR0Zh2zKRUSijYN92nm8QvcgfuUCjbLlB8OCtiYG0xW7uJ7mwKg3wVYKXp/AJmeo+doD61vbWdtaL9Lw5RYMo489NvvlchuOtoZFTqBWHlp7/2efJ3GdVKiXOy/+f4XguROf4SxeHuOMdwuSbhMkcVBVO3xEaBrvQfyDU2zIp1F+J6AX+2gXqy5EuTm+a7lfX4nQg+nAIE4uvJTIoXuxCoDP77IhO8m0HeHQ0gRy8hM23iF7ib1zAP2y7dSwEH4wx+ICInuFv3RLFDgjOiBoVS42cDm3+3sz6SLVeGWU07TGcP0bzLeN/cYCHy5wa9wp8h2iGfzTtKhnumFqOZdQ9Inqaf3aAx8pRjbEIcI/Ad4mW+CcXmDxivHukhqL0Y0t4lu+bpVFeK07poY+2h+ns74bG5Z1TdnUX09T6XeRLOLmzMz0zF4ZB89Tp3bA5e3p3urmzEz7fnJ8T89Ozc6dmpoNZ/PP37WsXht/q0sLyymIbD4VyV2R9/WoQDxIR7WNKCbNTm1Ecyuau1MEe/MInUzJ1T9C/AQAA//8akON2TAYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-10 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-11 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW2/cRBQ+n+3sZheHqiDghQdARYiHRZQ2dOEBlO4mNKKJIm+2L1GEpvYkXbRru56xRJ4QpYVyK1DuUNpwK6VQbk/8A/4U0kEzXu86EREv9jlzzpzvXL45fIlfc4H6ulQ6yGPwBcJdcJa78An1TiaFlhE8Qr2fRqVc62mhc2Vc3E7h6i6kqfl7fSUze7eXh6FUyt5dEoNhnkkjz6wnWgwLSSqtwH8S0YP8hwPMbWyOkkgO1RPGZCzgi0R8h193Aa84vEi4u0ywkki9p0U2zq/RSUbpUI61mSCPC/emidARSo5z7gfL9h/I8+A3CG5XpuBPCV4gVQr+nDCzmgyUBL9NqAVS5UMN/pJQfyFLQ3vtV8JsoZgbvxPRq3zJdPSU1mkZuIHaitTnkshmsZYlOlkRLyeZSW+sDuJCdfvBaePV6Aen10QmRgp8mVA7JUUkM/C7BO9kEu3Y8k8OYpFZ0VtKshH4AyJ6mN/0gMMjkW4onQ3i7c3iZ+P48Ike4Hc87AnpmwrJ57ccOKZWn+ghft8BDk9GYgC6QgsDAr5CNM/vucDs9PwKwYX7oixyOyOGuVS2czNrQp+zItEj/IkD3DsJ25WpjCMZhzu283yV6Dn+0AWaVctVggdvVYykLXZ9Jy2EFWmALxO8IoWPyVT3kQM0NjY3NvNBrNvmFE2inD8z+RZzGY+3jmZBoU4SWXr+Z5/nCp8VqZTYlv8/w+lciM7wFy72cMfbg8nXCHMFqCqdviU0DXapf09odGVaqr8Q0bP8lQs0lmNdnl4z3a+tJtlIDOEQZhdfSWVYvtiFUOf22REd4W8c4L7JBArwCjZfJ3qev3YBf6/t+oEQvDvF4F0ieoxvuBWK7RKcCTVmLDUKOnT5OzPrfdV6VZTJtKdw/hTNt4z/2QHuqXJq2ivwTaJj/INpV8Vw09RyIKNuE9Gj/JMD3F+NaoxlgNsEvkW0xD+6wNw+4619NZSlH1jC43zHLI3qWnEqD32yPUxnfzM0ru6cqqu7mGXW7zxfwJGn22J+6+j82daJZ57cah1vt8OW2BLzrah9VArx1LHjJ85G+OfvG8Ff429tbaHXW+ziUCS3RD7UL4XJKBXxDg5tZ2nYiqXSMmoJs+xLj9xsfMdx6N8AAAD//x5nUXpMBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-12 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-13 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUS28bVRQ+38zYjo0DKs8NC0BFiIVRiNNCWYBSO6ERTRTZcTdRhK5mbhuj8cww9w4iK0RpobwKlDeEEl6lFMrrT/B3WHSJdNC947EnERGbmXPuOfd85/Hdwxf5VReobUile1kEPk+4Dc5KF01CrZNKoWUAj1AbJEEhV/ta6EwZF7eTu7qLSWL+3kDJ1N7tZ74vlbJ3l8UwzFJp5MpGrEWYS1JpBf6TiO7nPxxgdnNrFAcyVI8Zk7GALxDxTX7NBbz88ALh9iLBUiK1vhbpOL96Jx4loRxrlV4W5e4NE6EjlBznPOit2H9Pvgh+neB2ZQL+hOD1pErAnxEqa/FQSfBbhGpPqizU4C8ItWfTxLfXfiXM5Iq58TsRvcIXTUdPaZ0Ugeuorkq9HQc2i/U01vGqeCFOTXpjdRjlqjvonTZe9UHv9LpIxUiBLxGqp6QIZAp+h+CdjIMdW/7JYSRSK3rLcToCv09ED/IbHnBkJJJNpdNhdG4r/9k4TTSJ7uO3PewL2TQVUpPfdOCYWptED/B7DnBkMhID0BVaGBDwZaJj/K4LzEzPLxNcuM/JPLczIsyksp2rrAu9bUWih/hjB7hrErYrExkFMvJ3bOf5CtHT/IELNMqWKwQP3poYSVvsxk6SC6vSAF8ieHkKH5Gp7kMHqG9ubW5lw0g/aU7RIMr4U5NvPpfxeGto5BTqxIGl53/2eTb3WZVKiXPy/2c4nQvRGf7cxT7uePsweZcwm4OqwulbQsNgF/r3hHpXJoX6CxE9xV+6QH0l0sXprul+dS1ORyKEQ5hZejmRfvFiF32d2WdHdJS/cYB7JhPIwUvYfJXoGf7KBZr7bVcPheC9KQbvEdEj/LVbotgewZlQo2KpkdOhy9+ZWR+o1iujTKY9hWtO0ZqW8T87wJ1lTk17Bb5G1OYfTLtKhmumlkMZdYOIHuafHODeclRjLALcIPB1omX+0QVmDxivH6ihKP3QEh7lm2ZplNeKU3rok+1hOvuboXF555Rd3aU0tX4v8Xkcbftn54/PHW+35k7Ix1sLYmG+JYIgaC3IdiDm/faxJ+ZO4J+/dm/9bb+3UF1f7PeXurgjkGdFFurn/XiUiGgHdythdmorS8OW2o5TLSOz6Au3zKx9z/Ho3wAAAP//zhTQCFEGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-14 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-15 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7Gjo0DKtcXHgAVIR6MWhKawAMotRMa0USWHfclitBkd9IYrXeXnVlEnhClhXIrUO4QSriVUii3P8Hv4R3poJn12puIiJfdc+acOd+5fHP4Er/qAtV1qXQ3i8AXCLfBWWmjQai2Uim0DOARqv0kKORKTwudKePitnJXdzFJzN/rK5nau73M96VS9u6yGIRZKo08tR5rEeaSVFqB/ySi+/kPB5jZ2BzGgQzVY8ZkLOCLRHyLX3MBLz+8SLi9SLCUSLWnRTrKr9aKh0koR9pUN4ty97qJ0BJKjnLud1fsvytfBL9OcNsyAX9C8LpSJeDPCFNr8UBJ8FuESleqLNTgLwjVZ9PEt9d+JUznirnxOxG9wpdMR89onRSBa6isSr0TBzaLThrreFW8EKcmvZE6iHLV7XfPGq9av3u2I1IxVODLhMoZKQKZgt8heKfjYNeWf3oQidSK3nKcDsHvE9GD/IYHHBuKZEPpdBCd38x/Nk4DDaL7+G0PB0I2TIXU4DcdOKbWBtED/J4DHBuPxAC0hRYGBHyF6Al+1wWmJ+dXCC7c52Se2zkRZlLZzk11hN6xItFD/LED3DUO25aJjAIZ+bu283yV6Gn+wAXqZctVggdvTQylLXZ9N8mFVWmALxO8PIWPyFT3oQPUNjY3NrNBpBfMKepEGX9q8s3nMhpvFfWcQq04sPT8zz7P5D6rUilxXv7/DCdzITrHn7s4wB3vACbvEWZyUFU4fUuoG+xC/55Qa8ukUH8hoqf4SxeorUS6ON0z3a+sxelQhHAI00svJ9IvXuyirzP77IiO8zcOcM94Ajl4CZuvET3DX7lA46Dt2pEQvD/B4H0ieoS/dksU2yc4Y2pMWWrkdGjzd2bWh6r1yijjaU/gGhO0hmX8zw5wZ5lTk16BrxPN8g+mXSXDdVPLkYy6SUQP808OcG85qjEWAW4S+AbRMv/oAjOHjDcO1VCUfmQJj/ItszTKa8UpPfTx9jCd/c3QuLxzyq7uUppav5f4Ao7L+VMngoWFx5v+1tx2c86fnW8ubM2daAZbJ5/cnpcnT8m5Wfzz197fa/bbQaWz2OsttXFHILdFFurn/XiYiGgXdythdmozS8Om2olTLSOz6Au3zKx9z/Ho3wAAAP//VOZzc1EGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-16 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-17 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW2/cRBQ+n+3sZhcHVK4vPAAqQjwsApFtKQ+gdDehEUkUbbJ9iSI0sSfNIq9tZsYSeUKUFsKtQLlDKOFWSqHc/gS/hn+AdNDY610nIuLFPmfOmfOdyzeHL/OrLlBfl9r0shh8kXAbnMUufEK9o6QwMoRHqPfTsJRra0aYTFsXt1O4unNpav9eX0uV313LgkBqnd9dEIMoU9LKU+uJEVEhSW00+E8iup//cICZjc1hEspIP2ZN1gK+RMS3+DUX8IrDS4TbywQridTXjFCj/BqdZJhGcqRN9bK4cG/aCB2h5Sjnfm8x//fkS+DXCW5XpuBPCF5P6hT8GWFqJRloCX6LUOtJnUUG/AWh/pxKg/zar4TpQrE3fieiV/iy7eg5Y9IycAO1ZWl2kjDPYlUlJlkWLybKpjdSB3Ghuv3ekvVq9HtLq0KJoQbvEWrnpAilAr9D8M4m4W5e/tlBLFQueguJGoLfJ6IH+Q0PODEU6YY2ahBf2Cx+eRwfPtF9/LaHQyF9WyH5/KYDx9bqEz3A7znAifFILEBXGGFBwFeI2vyuC0xPzq8QXLjPyyK38yLKpM47N7UqzE4uEj3EHzvAXeOwXZnKOJRxsJt3nq8SPcMfuECzarlK8OCtiKHMi13fTQthWVrgPYJXpPAR2eo+dIDGxubGZjaIzVP2FE2ijD+1+RZzGY23jmZBoU4S5vT8zz7PFD7LUmtxQf7/DCdzITrPn7s4xB3vECbvE2YKUF06fUtoWuxS/57Q6Mq0VH8hoqf5SxdoLMamPN233a+tJGooIjiE6fmXUxmUL3YuMFn+7IhO8jcOcM94AgV4BZuvET3LX7mAf9h27VgIPphg8AERPcJfuxWKHRCcMTWmcmoUdOjyd3bWR6r1qijjaU/g/AmanzP+Zwe4s8qpSa/A14me5B9suyqG67aWYxl1k4ge5p8c4N5qVGssA9wk8A2iBf7RBWaOGG8cqaEs/dgSHuVbdmlU14pTeejj7WE7+5ulcXXnVF3deaVyP8UXcTIIZrfC06eeaLXbImzNts9stcT2mXZrK5g9Jbfl6cfb7W3889f+33ujb21hbnFpvos7Qrktssi8ECTDVMS7uFsLu1NbmYpaeidRRsZ20ZdumZaK/g0AAP//ylurOk0GAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-18 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-19 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7ajo0DKtcXHgAVIR6MmqRNWh5AqZ3QiCSKnLgvUYSG3UljtN5dZmYl8oQoLZRbgXKHUMKtlEK5/Ql+Cn+i0kGz67U3EREvu+fMOXO+c/nm8GV+zQVqG1KbbhqBLxLugrPUQZNQayspjAzgEWq9JCjk6roRJtXWxW3nru58kti/19NSZXfXU9+XWmd3F0U/TJW0cmUjNiLMJamNBv9FRA/znw4wubk1iAMZ6qesyVrAl4j4Nr/uAl5+eIlwd5FgKZHauhFqmF+9HQ+SUA61SjeNcveGjdAWWg5z7nWXsn9Xvgx+g+B2ZAL+lOB1pU7AnxMqq3FfS/DbhGpX6jQ04C8JtedU4mfXfiNM5Iq98QcRvcqXbUfPGZMUgeuorkizEwdZFmsqNvGKeClWNr2h2o9y1e11l61XvdddXhNKDDT4CqF6TopAKvC7BO9sHOxm5Z/tR0JlorcYqwH4AyJ6lN/0gGMDkWxqo/rRha38l8Vpokn0EL/j4UDIpq2QmvyWA8fW2iR6hN93gGOjkViAjjDCgoCvEp3i91xgYnx+leDCfV7muZ0XYSp11rnKmjA7mUj0GH/iAPeNwnZkIqNARv5u1nm+RvQMf+gCjbLlGsGDtyoGMit2YzfJhRVpga8QvDyFj8lW95ED1De3NrfSfmRO21M0iFL+zOabz2U43hoaOYXacZDR8z/7PJn7rEitxQX5/zMcz4XoPH/h4gB3vAOYvEeYzEF14fQdoWGxC/0HQr0jk0L9lYie5q9coL4UmeJ0z3a/uhqrgQjhECYWXkmkX7zYed+k2bMjOs7fOsADownk4CVsvk70LH/tAs2DtutHQvD+GIP3iegJ/sYtUWyf4IyoUcmokdOhw9/bWR+q1iujjKY9hmuO0ZoZ439xgHvLnBr3CnyDaIZ/tO0qGW7YWo5k1C0iepx/doAHy1GtsQhwi8A3iRb5JxeYPGS8eaiGovQjS3iSb9ulUV4rTumhj7aH7ezvlsblnVN2dReUyvwUX8TxmblZfyaYPdma3Z56sXXyxNR068zs9HbLn546PSO3z8zNnTqBO3/v/XNn+K0uzi8tL3RwTyC3RRqaF/x4kIhoF/drYXdqK1VhS+/EysjILvrCLdVS0b8BAAD///IFBidNBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-20 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-21 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW2/cRBQ+n+3sZhcHVK4vPAAqQjws6ipUKTyA0t2ERjRRtJvtSxShwZ40i7y2mRlL5AlRWii3AgXKLZRwK6VQbn+Cn8KfQDpo7PWuExHxYp8z58z5zuWbw5f4NReob0htelkMvkC4A85KFz6h3lFSGBnCI9QHaVjKtb4RJtPWxe0Uru5imtq/N9BS5Xf7WRBIrfO7y2IYZUpaeWYjMSIqJKmNBv9JRA/yHw4wt7k1SkIZ6SesyVrAF4n4Nr/uAl5xeJFwZ5lgJZF63wg1zq/RSUZpJMfaTC+LC/emjdARWo5zHvRW8n9Pvgx+g+B2ZQq+RvB6Uqfgzwgza8lQS/DbhFpP6iwy4C8I9edUGuTXfiXMFoq98TsRvcqXbEfPGJOWgRuorUqzk4R5FusqMcmqeClRNr2xOowL1R30zlqvxqB3dl0oMdLgy4TaGSlCqcDvErzTSbibl396GAuVi95yokbgD4joYX7TA46NRLqpjRrG57eKXx7Hh0/0AL/j4UBI31ZIPr/lwLG1+kQP8fsOcGwyEgvQFUZYEPAVopP8ngvMTs+vEFy4z8sit3MiyqTOOzezLsxOLhI9wp84wD2TsF2ZyjiUcbCbd56vEj3DH7pAs2q5SvDgrYmRzIvd2E0LYVVa4MsEr0jhY7LVfeQAjc2tza1sGJtT9hRNoow/tfkWcxmPt45mQaFOEub0/M8+zxU+q1JrcV7+/wyncyE6x5+7OMAd7wAm7xHmClBdOn1LaFrsUv+e0OjKtFR/IaKn+UsXaKzEpjzds92vrSVqJCI4hNmlV1IZlC92MTBZ/uyIjvM3DnDfZAIFeAWbrxM9y1+5gH/Qdv1ICN6fYvA+ET3GX7sViu0TnAk1ZnJqFHTo8nd21oeq9aook2lP4fwpmp8z/mcHuLvKqWmvwDeI5vkH266K4Yat5UhG3SKiR/knB7i/GtUaywC3CHyTaJl/dIG5Q8abh2ooSz+yhMf5tl0a1bXiVB76ZHvYzv5maVzdOVVXd0mp3E/xBRxvP7V9crt9YqE13z4133pShPMtIUPZCk682F5YaIswDAP889fe39fG39r6Yr+/1MVdodwWWWReCJJRKuJd3KuF3amtTEUtvZMoI2O76Eu3TEtF/wYAAP//GSYRPk0GAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-22 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-23 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7ajo0DKtcXHgAVIR6MIDRKzAMotRMa0USRHfclitDYO22M1rvLziwiT4jSQrkVKHcoJdxKKYTbj4DfhIR00Mx67U1E1Jfdc+acOd+5fHP4Ir/qApVNqXQnDcHnCbfBWW2jTqi0Eim09OERKr3Yz+VyVwudKuPitjJXdymOzd/rKZnYu910MJBK2bsrYhikiTRyaTPSIsgkqbQC/0lE9/MfDjC7tT2KfBmox4zJWMAXiHifX3MBLzu8QLg9T7CQSKWrRTLOr9qKRnEgx1qpk4aZe81EaAklxzn3Oqv235Evgl8nuG0Zgz8heB2pYvBnhNJ6NFQS/Bah3JEqDTT4C0Ll2SQe2Gu/EmYyxdz4nYhe4Yumo6e0jvPAVZTXpN6JfJvFRhLpaE28ECUmvbE6DDPV7XVOG69qr3N6QyRipMCXCOVTUvgyAb9D8E5G/q4t/+QwFIkVvZUoGYHfJ6IH+Q0PODYS8ZbSyTA8t539bJw66kT38dseDoSsmwqpzm86cEytdaIH+D0HODYZiQFoCy0MCPgy0Ty/6wIz0/PLBBfuczLL7YwIUqls50obQu9Ykegh/tgB7pqEbctYhr4MB7u283yF6Gn+wAVqRcsVggdvXYykLXZzN86ENWmALxG8LIWPyFT3oQNUt7a3ttNhqBfNKWpEKX9q8s3mMh5vBbWMQq3It/T83z7PZj5rUilxTt56htO5EJ3hz10c4I53AJOvEmYzUJU7fUuoGexc/55Qbcs4V38hoqf4SxeoroY6P71qul9ej5KRCOAQZpZfjuUgf7FLA53aZ0d0nL9xgHsmE8jAC9h8jegZ/soF6gdt146E4L0pBu8R0SP8tVug2B7BmVCjZKmR0aHN35lZH6rWK6JMpj2Fq0/R6pbxPzvAnUVOTXsFvk70JP9g2lUwXDe1HMmom0T0MP/kAPcWoxpjHuAmgW8QrfCPLjB7yHjjUA156UeW8Cjvm6VRXCtO4aFPtofp7G+GxsWdU3R1l5PE+r3E53G82V9sLjTnFxqLzTm/ceKJs/1G//FmvzHozwsx5881Tyw08e/fO//8Nf6WN5a63eU27vDlWZEG+vlBNIpFuIu7lTA7tZEmQUPtRImWoVn0uVtq1r7nePRfAAAA//+ChhG9UQYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-24 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-25 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RU228bxRc+3+7ajv1zfqjh9sIDoCLEg1Fbp7nwAErthEYkUeTEfYkiNNiTxsjeXWZmEXlClBbKrUC5QynhVkqh3P4J3hF/DA9IB82s195ERLzsnjPnzPnO5ZvDl/glHyhtSm1aSQi+QPgfvOUmqoRSQ0lhZBcBodSOu5lc3DDCJNq6+I3U1V+IY/sP2loqd3cj6XSk1u7ukuj1EyWtXNiMjOinktRGg38jovv4Vw+Y3NoeRF3Z149ak7WALxLxbX7ZB4L08CLh/1mCuURKG0aoYX7lRjSI+3KoFVpJmLpXbISG0HKYc7u17P4t+Rz4FYLflDH4Q0LQkjoGf0worEU9LcGvE4otqZO+AX9KKD2p4o679hNhIlXsjV+I6EW+ZDt61pg4C1xGcVWa3ajrslhXkYlWxbORsukN1V6Yqn67tWK9yu3WyrpQYqDBlwnFs1J0pQK/SQjORN09V/6ZXiiUE4OlSA3A7xDRA/xqABwbiHhLG9ULz2+nPxeniirRvfxGgAMhq7ZCqvJrHjxba5Xofn7bA46NRmIBmsIICwK+QnSa3/KBifH5FYIP/ymZ5nZO9BOpXecK68LsOpHoQf7AA+4chW3KWIZdGXb2XOf5KtHj/K4PVPKWq4QAwZoYSFfs5l6cCqvSAl8mBGkK75Ot7j0PKG9tb20nvdDM2VNUiBL+yOabzmU43hIqKYUaUdfR81/7PJn6rEqtxXn53zMcz4XoHH/i4wB3ggOYfI0wmYLqzOkrQsViZ/o3hHJTxpn6IxE9xp/5QHk5NNnpNdv94lqkBqIPjzCx+EIsO9mLXeiYxD07ouP8pQfcPZpACp7D5utET/DnPlA9aLt+JATvjzF4n4ge5i/8HMX2Cd6IGgVHjZQOTf7azvpQtUEeZTTtMVx1jFZ1jP/BA6bynBr3CnyDqM7f2nblDDdsLUcy6hYRPcTfe8A9+ajWmAW4ReCbREv8nQ9MHjLePFRDVvqRJTzCt+3SyK8VL/fQR9vDdvZnS+P8zsm7+otKOb/n+QKOnzo1NzszOz1fq4uZmdr0SVGvzZ/Yma7NzczW52dPnKzvnH4Gf/+++9cf7vsniksLyyuLTdzRlTsi6ZunO9EgFuEe7tLC7tRaovo1vRspI0O76DO3REvlTWGK/gkAAP//LE+o7lEGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-26 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-27 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7ajo0Dari98ACoCPFgVEHaGh5AqZ3QiCaK7LgvUYQm3nFjtN5ddmYReUKUFkKBAuUOpYRbKYVw+xP8It6QDppZr72JiHjZPWfOmfOdyzeHL/NrLlBZl0p30hB8kXAHnOU26oRKK5FCSx8eodKL/Vwud7XQqTIubitzdRfi2Py9npKJvdtN+32plL27JIZBmkgjl9YjLYJMkkor8J9E9AD/4QCzG5ujyJeBetyYjAV8iYj3+XUX8LLDS4Q78wQLiVS6WiTj/KqtaBQHcqyVOmmYuddMhJZQcpxzr7Ns/x35EvgNgtuWMfgTgteRKgZ/RiitRkMlwVcI5Y5UaaDBXxAqzyVx3177lTCTKebG70T0Kl82HT2rdZwHrqK8IvV25Nss1pJIRyvixSgx6Y3VYZipbq9zznhVe51zayIRIwXeJZTPSuHLBPwOwTsT+Tu2/DPDUCRW9JaiZAR+n4ge4jc94NhIxBtKJ8Pwwmb2s3HqqBPdz297OBCybiqkOr/lwDG11oke5Pcc4NhkJAagLbQwIOCrRCf5XReYmZ5fJbhwn5dZbudFkEplO1daE3rbikQP88cOcPckbFvGMvRl2N+xnedrRM/wBy5QK1quETx4q2IkbbHrO3EmrEgDvEvwshQ+IlPdhw5Q3djc2EyHoW6aU9SIUv7U5JvNZTzeCmoZhVqRb+n5n32ezXxWpFLigvz/GU7nQnSeP3dxgDveAUy+TpjNQFXu9C2hZrBz/XtCtS3jXP2FiJ7mL12guhzq/PS66X55NUpGIoBDmFl8JZb9/MUu9HVqnx3Rcf7GAe6dTCADL2DzDaJn+SsXqB+03TgSgvemGLxHRI/y126BYnsEZ0KNkqVGRoc2f2dmfahar4gymfYUrj5Fq1vG/+wAc0VOTXsFvkn0JP9g2lUw3DS1HMmo20T0CP/kAPcVoxpjHuA2gW8RLfGPLjB7yHjrUA156UeW8Bjvm6VRXCtO4aFPtofp7G+GxsWdU3R1F5PE+r3MF3F8q98XJ0+fGDS2mvN+Y/5UUza25punGoPm6S0pnnhq0BycwD9/bf+9a79XUF5b6HYX27jLlwORBvqFfjSKRbiDe5QwO7WRJkFDbUeJlqFZ9Llbatb+nDNH/wYAAP//epssXFEGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-28 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-29 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7Gjs0mqFxfeABUhHgwoilBLg+g1E5oRBNZdtyXKEIT77QxWu8uO7OIPCFKC+VWoNyhlHArpVBuf4JfxBvSQTPrtTcRUV92z5lz5nzn8s3hi/yaC1Q3pNLdLAKfJ9wBZ7UNn1BtpVJoGcAjVPtJUMiVnhY6U8bFbeWu7lKSmL/XVzK1d3vZYCCVsndXxDDMUmnkmY1YizCXpNIK/BcRPcB/OsDc5tYoDmSoHjcmYwFfIOJb/LoLePnhBcJ8kWApkWpPi3ScX60Vj5JQjrWZbhbl7nUToSWUHOfc767af1e+BH6D4LZlAv6U4HWlSsCfE2bW46GS4LcJla5UWajBXxKqz6XJwF77jTCbK+bGH0T0Kl80HT2ldVIErqGyJvVOHNgsOmms4zXxYpya9MbqMMpVt989bbxq/e7pjkjFSIEvESqnpAhkCn6X4J2Mg11b/slhJFIreitxOgJ/QEQP8ZsecGQkkk2l02F0biv/2Tg+fKL7+R0P+0L6pkLy+S0HjqnVJ3qQ33eAI5ORGIC20MKAgC8TLfJ7LjA7Pb9McOE+L/Pczogwk8p2bqYj9I4ViR7mTxzg7knYtkxkFMhosGs7z1eInuEPXaBetlwhePDWxUjaYjd2k1xYkwb4EsHLU/iYTHUfOUBtc2tzKxtGumlOUSfK+DOTbz6X8XirqOcUasWBpef/9nku91mTSolz8vYznM6F6Ax/4WIfd7x9mHyVMJeDqsLpO0LdYBf6D4RaWyaF+isRPc1fuUBtNdLF6VXT/cp6nI5ECIcwu/xKIgfFi10a6Mw+O6Kj/K0D3DuZQA5ewuZrRM/y1y7g77ddOxSC96YYvEdEj/I3boliewRnQo0ZS42cDm3+3sz6QLVeGWUy7SmcP0XzLeN/cYC7ypya9gp8neg4/2jaVTJcN7UcyqibRPQI/+wA95WjGmMR4CaBbxCt8E8uMHfAeONADUXph5bwGN8yS6O8VpzSQ59sD9PZ3w2Nyzun7Ooup6n1e5nP42gQPLWwEDRF49hicLbx5GJTNprHmk80TmwvBscXZHN7+4TAv3/v/LNuvx1UOku93nIbdwbyrMhC/cIgHiUi2sU9Spid2sjSsKF24lTLyCz6wi0za3/emaf/AgAA///7DhSBUQYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-30 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-31 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7Gjo0DKtcXHgAVIR6MRF03gQdQaic0ookiO+5LFKHp7rQxWu8uO7OoeUKUFsqtQLkVCCXcSimU25/gTyEdNLNeexMR8bJ7zpwz5zuXbw5f5tddoLohle5lEfgi4S44K100CNVOKoWWATxCdZAEhVzpa6EzZVzcTu7qLiaJ+XsDJVN7t5/5vlTK3l0WwzBLpZFnNmItwlySSivwX0T0MP/pAHObW6M4kKF6ypiMBXyJiO/wGy7g5YeXCHcXCZYSqfa1SMf51TrxKAnlWJvpZVHuXjcROkLJcc6D3or99+Qr4DcJblcm4M8IXk+qBHydMLMWD5UEv0Oo9KTKQg3+klB9IU18e+03wmyumBt/ENFrfNl09JTWSRG4hsqq1NtxYLNYT2Mdr4qX49SkN1aHUa66g95p41Ub9E6vi1SMFPgKoXJKikCm4PcI3sk42LHlnxxGIrWitxynI/CHRPQov+UBR0Yi2VQ6HUbnt/KfjdNAg+ghftfDvpANUyE1+G0Hjqm1QfQIf+AARyYjMQBdoYUBAV8lavP7LjA7Pb9KcOG+KPPczogwk8p2bmZd6G0rEj3GnzrAfZOwXZnIKJCRv2M7z9eInuOPXKBetlwjePDWxEjaYjd2klxYlQb4CsHLU/iETHUfO0Btc2tzKxtGesGcok6U8ecm33wu4/FWUc8p1IkDS8//7PNc7rMqlRLn5f/PcDoXojP8hYt93PH2YfIuYS4HVYXTd4S6wS70Hwi1rkwK9Vciepa/coHaSqSL013T/cpanI5ECIcwu3QhkX7xYhd9ndlnR3SUv3WAByYTyMFL2HyD6Hn+2gUa+203DoXgvSkG7xHRE/yNW6LYHsGZUGPGUiOnQ5e/N7M+UK1XRplMewrXmKI1LON/cYB7y5ya9gp8k6jFP5p2lQw3TS2HMuo2ET3OPzvAg+WoxlgEuE3gW0TL/JMLzB0w3jpQQ1H6oSU8yXfM0iivFaf00Cfbw3T2d0Pj8s4pu7pLaWr9XuWLONqen/efXmgfb7Zb80Hz+NkTreZZ0TrXfEZIf+GYOHGsHbTwz9/bF67b7y4q64v9/lIX9wTynMhC/ZIfjxIR7eB+JcxObWZp2FTbcaplZBZ94ZaZtV9xKvRvAAAA///Wji0NUQYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-32 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-33 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RU228bxRc+3+7ajv1zfqhcX3gAVIR4MCI0jSIeQKmd0Igmiuy4L5GFht1xY7TeXXZmEXlClBbKrUC4QynhVkqh3P4J/imkg2bWa28iIl52z5lz5nzn8s3hy/yqC9S2pdLdLAJfJPwPznoHTUKtnUqhZQCPUOsnQSFXe1roTBkXt527uitJYv5eX8nU3u1lvi+VsnfXxCjMUmnkynasRZhLUmkF/pOI7uc/HGB+ZzCOAxmqx4zJWMCXiPg2v+YCXn54ifD/IsFSIrWeFukkv3o7HiehnGiVbhbl7g0ToS2UnOTc767bf1e+CH6d4HZkAv6E4HWlSsCfESqb8UhJ8FuEaleqLNTgLwi1Z9LEt9d+JczlirnxOxG9wpdNR89qnRSB66huSL0bBzaLrTTW8YZ4IU5NehN1FOWq2++eM171fvfclkjFWIGvEKpnpQhkCn6H4J2Jgz1b/plRJFIremtxOga/T0QP8hsecGIskh2l01F0YZD/bJwmmkT38dseDoVsmgqpyW86cEytTaIH+D0HODEdiQHoCC0MCPgq0Wl+1wXmZudXCS7cZ2We23kRZlLZzlW2hN61ItFD/LED3DUN25GJjAIZ+Xu287xP9BR/4AKNsmWf4MHbFGNpi93eS3JhQxrgKwQvT+EjMtV96AD1ncHOIBtFetmcokGU8acm33wuk/HW0Mgp1I4DS89/7fN87rMhlRIX5H/PcDYXovP8uYtD3PEOYfI1wnwOqgqnbwkNg13o3xPqHZkU6i9E9CR/6QL19UgXp9dM96ubcToWIRzC3OrLifSLF7vi68w+O6KT/I0D3DOdQA5ewubrRE/zVy7QPGy7fiwEH8ww+ICIHuGv3RLFDgjOlBoVS42cDh3+zsz6SLVeGWU67Rlcc4bWtIz/2QHuLHNq1ivwDaJT/INpV8lww9RyLKNuEdHD/JMD3FuOaoxFgFsEvkm0xj+6wPwR480jNRSlH1vCo3zbLI3yWnFKD326PUxnfzM0Lu+csqu7mqbW7yW+iJMLTyz5i8OhaPnPi2FrcWFpsSWC5dOtZV8unPLF48Ph8hL+/muwX7XfOVS3Vnq91Q7uCORQZKF+zo/HiYj2cLcSZqe2sjRsqd041TIyi75wy8za9xyP/gkAAP//LVRf8FEGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-34 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-35 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bVRCeb3d9ZVNUEPDCA6AixIORaGMUeABSO6ERTRTZcV8iCx17T1rD3thzViJPiNJAuRUodygl3EoplNuf4E8hDTq7XnsTEfGyO3Nmznxz+c7wHr9mA7UtqXQvDcEXCXfAWuvCJdQ6iRRaenAItUHsFXK1r4VOlXGxO7mrvRzH5u8MlEyyu/10PJZKZXdXxcRPE2nkylakhZ9LUmkF/ouI7uc/LWBhexhEnvTVY8ZkLOBLRHybX7cBJz+8RDhWJFhKpNbXIpnm1+hEQezLqVbppWHu3jQROkLJac6D3lr278mXwW8Q7K6MwZ8SnJ5UMfhzQmUjmigJfptQ7UmV+hr8JaH2XBKPs2u/Eeq5Ym78QUSv8p7p6Bmt4yJwA9V1qS9EXpbFZhLpaF28GCUmvak6CXPVHvTOGq/GoHd2UyQiUODLhOoZKTyZgN8lOKcjbzcr//QkFEkmOqtREoA/IKIH+U0HOB6IeFvpZBKeH+a/LI4Ll+g+fsfBgZCuqZBcfsuCZWp1iR7g9y3g+GwkBqArtDAg4CtEbX7PBurz8ysEG/bzMs/tnPBTqbLOVTaFvpCJRA/xJxZw9yxsV8Yy9GQ43s06z1eJnuYPbaBZtlwlOHA2RCCzYrd241xYlwb4MsHJU/iYTHUfWUBje7g9TCehXjKnaBKl/JnJN5/LdLw1NHMKdSIvo+d/9nkh91mXSonz8v9nOJ8L0Tn+wsYB7jgHMPkaYSEHVYXTd4SmwS70HwiNrowL9Vcieoq/soHGWqiL02um+9WNKAmED4tQX3klluPixS6PdZo9O6IT/K0F3DObQA5ewubrRM/w1zbgHrRdPxKC9+cYvE9Ej/A3doli+wRrRo1KRo2cDl3+3sz6ULVOGWU27TmcO0dzM8b/YgF3lTk17xX4BtEp/tG0q2S4YWo5klG3iOhh/tkC7i1HNcYiwC0C3yRa5Z9sYOGQ8eahGorSjyzhUb5tlkZ5rVilhz7bHqazvxsal3dO2dVeSZLML+aLOLG40xaekKPW0mj0ZGtRnlxqjXbaT7Taj58anRp5Oyfbso1//h7uPTv9VjeX+/2VLu705I5Iff3COApiEe7imD9ROojCl1oijluLcAuH1Cz8ulWnfwMAAP//Sb/HM0sGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-36 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-37 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7ajs2mqCDghQdARcCDUWgSxeUBlNoJjUiiyIn7Ello4p20hr2xMyuRJ0RJodwKlDuUEm6lFMrtT/CnkA6aXa+9iYh42Z0z58z5znfON8OX+TUbqG1JpbtpCL5EuAvWSgcuodZOpNDSg0Oo9WKvWFc3tdCpMiF2Ow+1F+PY/J2ekkl2djMdDKRS2dllMfTTRJp1ZSvSws9XUmkF/ouIHuQ/LWB6ux9EnvTVk8ZlPOB9Ir7Dr9uAk2/uE04UBZYKqW1qkYzqq7ejIPblyKp00zAPb5gMbaHkqOZedyX7d+XL4DcIdkfG4E8JTleqGPw5obIeDZUEv02odqVKfQ3+klB7LokH2bHfCFO5YU78QUSv8mXT0XNax0XiOqprUl+MvKyKjSTS0Zp4MUpMeSNzGOam3euumqh6r7u6IRIRKPAVQvWcFJ5MwO8SnLORt5fRPzsMRZItneUoCcAfENHD/KYDnAxEvK10Mgwv9PNflseFS/QAv+PgUErXMCSX37JgGa4u0UP8vgWcHI/EAHSEFgYEfJVont+zganJ/lWCDft5mdd2XvipVFnnKhtCX8yWRI/wJxZw7zhtR8Yy9GQ42Ms6z9eInuEPbaBR9lwjOHDWRSAzslt7cb5Ykwb4CsHJS/iYDLuPLKC+3d/up8NQt8wuGkQpf2bqzecyGm8NjVxC7cjL5PmffZ7OY9akUuKC/P8ZTuZCdJ6/sHFIO84hTL5OmM5BVRH0HaFhsAv7B0K9I+PC/JWInuavbKC+Eupi97rpfnU9SgLhwyJMLb0Sy0FxYxcHOs2uHdEp/tYC7htPIAcvYfMNomf5axtwD/tuHAvBBxMMPiCix/gbuySxA4I1lkYlk0Yuhw5/b2Z9hK1TRhlPewLnTtDcTPG/WMA9ZU1NegW+STTLP5p2lRw3DZdjFXWbiB7lny3g/nJW4ywS3CbwLaJl/skGpo84bx3hUFA/lsITfMc8GuVnxSpd9PHrYTr7u5Fx+c0ph9pLSZLFhXwJpxbEwk7rqdm55vyZM63mXGsw32ztzO42d+bmTy8MZk7vejMz+Ofv/v7jo291eXFldamDuz25K1JfvzCIgliEezjhD5UOovClpojj5hzcIiBVMrEt+jcAAP//LOcQs0kGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-38 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-39 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUS28cRRCub2Z217uMgwICLhwABSEOixJixzYHkLNrEwvbstbeXKwVambaycK8mO6R4hMiDwivAOENIZhXCIHw+hP8KaRCPbOzO7awuMx0dVXXV1/V181X+HUbaGxJpXtZBL5IuAfWShcuodFJpdDSh0No9BO/XNc3tdCZMiF2pwi1F5PE/J2+kml+djPzPKlUfnZZDIMslWZd24q1CIqVVFqB/yKih/lPC5jeHoSxLwP1lHEZD/gyEd/lSzbgFJuXCUfKAiuFNDa1SEf1NTtxmARyZNV6WVSEt0yGjlByVHO/t5L/e/JV8BsEuysT8KcEpydVAv6cUFuPh0qC3ybUe1JlgQZ/SWg8nyZefuw3wlRhmBN/ENFrfMV09IzWSZm4ifqa1OdjP69iI411vCZejlNT3sgcRoVp93urJqrZ761uiFSECnyVUD8jhS9T8LsE53Ts7+b0Tw8jkeZLZzlOQ/AHRPQov+kAR0ORbCudDqNzg+KX53HhEj3E7zjYl9I1DMnltyxYhqtL9Ai/bwFHxyMxAF2hhQEBXyOa5fdsYGqyf41gw35BFrWdFUEmVd652obQ5/Ml0WP8iQXcP07blYmMfBl5u3nn+TrRs/yhDbSqnusEB866CGVOdms3KRZr0gBfJThFCR+TYfeRBTS3B9uDbBjpebOLFlHGn5l6i7mMxttAq5BQJ/Zzef5nn6eLmDWplDgn/3+Gk7kQneUvbOzTjrMPk28QpgtQVQZ9R2gZ7NL+gdDsyqQ0fyWiZ/grG2iuRLrcvWG6X1+P01AEsAhTSxcS6ZU3dtHTWX7tiI7xtxbwwHgCBXgFm28SPcdf24C733fzUAjem2DwHhE9wd/YFYntEayxNGq5NAo5dPl7M+sDbJ0qynjaEzh3gubmiv/FAu6ramrSK/AtopP8o2lXxXHLcDlUUXeI6HH+2QIerGY1zjLBHQLfJlrmn2xg+oDz9gEOJfVDKTzJd82jUX1WrMpFH78eprO/GxlX35xqqL2UpnlcxBdxbHZ+58TCCV+05+f8nfbMS8dn2gsLJ722fNqbPXXq+NzC/JyPf/4eXLow+taXF1dWl7q415c7Igv0i14cJiLaxZFgqHQYR6+0RZK0Z+CWAZmSqW3RvwEAAP//YEzVX0kGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-40 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-41 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7ajs2mqCDghQdARYgHowJNSHgApXZCI5IocuK+RBaaeMetYW/szErkCRFaKLcC5Q6lhFsphXD7E/wppINm12uvIyJedufMOXO+853zzfBlfs0GattS6U4agvcJd8BabcMl1FqJFFp6cAi1buwV6+qWFjpVJsRu5aH2Uhybv9NVMsnObqX9vlQqO7sihn6aSLOubEda+PlKKq3AfxHR/fynBczu9ILIk756zLiMB3yJiA/5dRtw8s1LhBNFgaVCaltaJKP66q0oiH05siqdNMzDGyZDSyg5qrnbWc3+Hfky+A2C3ZYx+FOC05EqBn9OqGxEQyXBbxOqHalSX4O/JNSeS+J+duw3wkxumBN/ENGrfNl09JzWcZG4juq61BcjL6tiM4l0tC5ejBJT3sgchrlpdztrJqre7axtikQECnyFUD0nhScT8LsE52zk7WX0zw5DkWRLZyVKAvAHRPQgv+kAJwMR7yidDMMLvfyX5XHhEt3H7ziYSukahuTyWxYsw9UleoDft4CT45EYgLbQwoCArxLN8Xs2MDPZv0qwYT8v89rOCz+VKutcZVPoi9mS6CH+xALuHqdty1iGngz7e1nn+RrRM/yhDTTKnmsEB86GCGRGdnsvzhfr0gBfITh5CR+TYfeRBdR3eju9dBjqBbOLBlHKn5l687mMxltDI5dQK/Iyef5nn2fzmHWplLgg/3+Gk7kQnecvbExpx5nC5OuE2RxUFUHfERoGu7B/INTbMi7MX4noaf7KBuqroS52r5vuVzeiJBA+LMLM8iux7Bc3dqmv0+zaEZ3iby3gnvEEcvASNt8gepa/tgF32nfjWAg+mGDwARE9wt/YJYkdEKyxNCqZNHI5tPl7M+sjbJ0yynjaEzh3guZmiv/FAu4qa2rSK/BNoif5R9OukuOm4XKsom4T0cP8swXcW85qnEWC2wS+RbTCP9nA7BHnrSMcCurHUniUD82jUX5WrNJFH78eprO/GxmX35xyqL2cJFlcyPs4tejtzg/6u7IpBk8tNs/My7mmOL3wRHNhsLso5+ZPDwaPL+Kfv3v7zuhbXVlaXVtu405PDkTq6xf6URCLcA8n/KHSQRS+1BRx3DwDtwhIlUxsl/4NAAD//9iZN85JBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-42 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-43 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bRRQ+3+7ajs2mqCDghQdARYgHI0IcteYBlNoJjUiiyIn7Ello2J20Bu+FnVmJPAGlhXIrUO5QSriVUgi3P8Hf4IcgHTS7XnsTEfVld86cM+c73znfDF/i12ygtiWV7qUh+ALhDlgrXbiEWieRQksfDqHWj/1iXd3UQqfKhNidPNRejGPzd/pKJtnZzdTzpFLZ2WUxHKWJNOvKVqTFKF9JpRX4LyK6n/+0gNntQRD5cqQeMy7jAV8k4n1+3QacfPMi4VhRYKmQ2qYWybi+eicK4pEcW5VeGubhDZOhI5Qc19zvrWT/nnwJ/AbB7soY/CnB6UkVgz8nVNajoZLgtwnVnlTpSIO/JNSeSWIvO/YbYSY3zIk/iOgVvmQ6ekbruEhcR3VN6vORn1WxkUQ6WhMvRIkpb2wOw9y0+71VE1Xv91Y3RCICBb5MqJ6RwpcJ+F2CczrydzP6p4ehSLKlsxwlAfgDInqQ33SA44GIt5VOhuG5Qf7L8rhwie7jdxwcSOkahuTyWxYsw9UleoDft4Djk5EYgK7QwoCArxAt8Hs2MDPdv0KwYT8r89rOilEqVda5yobQ57Ml0UP8iQXcPUnblbEMfRl6u1nn+SrRU/yhDTTKnqsEB866CGRGdms3zhdr0gBfJjh5CR+TYfeRBdS3B9uDdBjqU2YXDaKUPzP15nMZj7eGRi6hTuRn8vzfPs/mMWtSKXFO3n6G07kQneUvbBzQjnMAk68RZnNQVQR9R2gY7ML+gVDvyrgwfyWiJ/krG6ivhLrYvWa6X12PkkCMYBFmll6OpVfc2EVPp9m1IzrB31rAPZMJ5OAlbL5O9DR/bQPuQd/1IyF4b4rBe0T0CH9jlyS2R7Am0qhk0sjl0OXvzawPsXXKKJNpT+HcKZqbKf4XC7irrKlpr8A3iOb5R9OukuOG4XKkom4R0cP8swXcW85qnEWCWwS+SbTMP9nA7CHnzUMcCupHUniU982jUX5WrNJFn7weprO/GxmX35xyqL2UJFlcyBdwQrbnTs37c3NNr33y+WbriZPtZvvxBa/p77RbrQVvbt7baeHfvwev/jP+VpcXV1aXurjTlzsiHennvCiIRbiLY6Oh0kEUvtgUcdxswS0CUiUT26X/AgAA///4m3qRSQYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-44 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-45 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUS28cRRCub2Z217uMgwICLhwABSEOixzb4IgDyNm1iYVtWWtvLtYKtWfaycK8mO6R8AkICYRXgPCGEMwrhEB4/QQu/CmkQj2zszu2sLjMdHVV11df1dfNl/hVG2hsSaV7WQS+QLgD1koXLqHRSaXQ0odDaPQTv1zXN7XQmTIhdqcItReTxPydvpJpfnYz8zypVH52WQyDLJVmXduKtQiKlVRagf8kovv5DwuY3h6EsS8D9ZhxGQ/4IhHf5tdswCk2LxKOlQVWCmlsapGO6mt24jAJ5Miq9bKoCG+ZDB2h5Kjmfm8l//fki+DXCXZXJuBPCE5PqgT8GaG2Hg+VBL9FqPekygIN/oLQeCZNvPzYr4SpwjAnfieil/mS6egZrZMycRP1NanPx35exUYa63hNPB+npryROYwK0+73Vk1Us99b3RCpCBX4MqF+RgpfpuB3CM7p2N/L6Z8eRiLNl85ynIbg94noQX7DAY6HItlWOh1G5wbFL8/jwiW6j992cCClaxiSy29asAxXl+gBfs8Cjo9HYgC6QgsDAr5C9Di/awNTk/0rBBv2s7Ko7awIMqnyztU2hD6fL4ke4o8t4O5x2q5MZOTLyNvLO89XiZ7iD2ygVfVcJThw1kUoc7Jbe0mxWJMG+DLBKUr4iAy7Dy2guT3YHmTDSJ8yu2gRZfypqbeYy2i8DbQKCXViP5fnf/Z5uohZk0qJc/L/ZziZC9FZ/tzGAe04BzD5GmG6AFVl0LeElsEu7e8Jza5MSvMXInqSv7SB5kqky91rpvv19TgNRQCLMLX0UiK98sYuejrLrx3RCf7GAu4ZT6AAr2DzdaKn+SsbcA/6rh8JwfsTDN4nokf4a7sisX2CNZZGLZdGIYcuf2dmfYitU0UZT3sC507Q3FzxP1vAXVVNTXoFvkE0xz+YdlUcNwyXIxV1i4ge5p8s4N5qVuMsE9wi8E2iZf7RBqYPOW8e4lBSP5LCo3zbPBrVZ8WqXPTx62E6+5uRcfXNqYbaS2max0V8ASd2ZnaemJsXXnt2d0G05xdmvbY46Yn2gi9Pzu7OzYhTOzP45+/BK3+NvvXlxZXVpS7u9OWuyAL9nBeHiYj2cCwYKh3G0QttkSTtebhlQKZkarv0bwAAAP//xjO+SEkGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-46 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-47 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RU328bRRCe7+5ix+ZSVBDwwgOgIsSDUaIkEPEASu2ERiRR5MR9iSy0+Katwb47bvck8gSUFsqvAuU3lBKglFIov/4J/imkQXvnsy8RUV/udnZm55tv5tuVi/KGC1R3WJt2GkLOE+6Cs9aCT6g2E1aGA3iEaicOinVl2yiTahviNvNQdzmO7d/raE6ys9tpr8daZ2dXVX+QJmzXUzuRUYN8xdpoyN9E9KD85QAzu91hFPBAP2Fd1gO5QCS35U0X8PLNC4RjRYGlQqrbRiWj+mrNaBgPeGRNtdMwD6/bDE2leVRzp72W/dv8CuQtgtviGPI5wWuzjiFfEqY2o75myLuESpt1OjCQrwnV55K4lx37nTCdG/bEn0T0mly0HT1lTFwkrqGyweZcFGRVbCWRiTbUS1FiyxuZ/TA33U573UbVOu31LZWooYZcIlROsQo4gbxP8E5GwV5G/2Q/VEm29FajZAj5iIgelrc94PhQxbvaJP3wbDf/ZXl8+EQPyHseDqT0LUPy5R0HjuXqEz0kHzrA8fFILEBLGWVBIJeJFuUDF5ie7F8muHCf57y202qQss46N7WlzLlsSfSIfOYA947TtjjmMOCwt5d1Xq4QPSMfu0C97LlC8OBtqiFnZHf24nyxwRb4EsHLS/iULLtPHKC2293tpv3QLNld1IlS+cLWm89lNN4q6rmEmlGQyfN/+zyTx2yw1uos33mGk7kQnZavXBzQjncAU64SZnJQXQT9QKhb7MK+Tqi1OC7M34joafnGBWproSl2r9ruVzajZKgGcAjTK6/G3Ctu7HLPpNm1Izoh3zvAfeMJ5OAlbLlG9Kx86wL+Qd+1IyFkf4Ih+0T0mHznliS2T3DG0pjKpJHLoSU/2lkfYuuVUcbTnsD5EzQ/U/yvDnBPWVOTXkFuEM3LT7ZdJccNy+VIRd0iokflFwe4v5zVOosEtwhyk2hVfnaBmUPOm4c4FNSPpPC43LaPRvlZcUoXffx62M7+YWVcfnPKoe5KkmRxoZzHCVaL808G3GswL841FnhutvHi0lMLjbn5M7O9uaWF2XlW+Pef7uvXR9/K6vLa+koLdwd8RqUD80IvGsYq3MOxQV+bYRS+3FBx3FiAXwSkmhPXp/8CAAD//zfAOI9JBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-48 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-49 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bVRCeb3dtx2YTVBDwwgOgIsSDkUId0vAASu2ERiRR5MR9iSx04j1pDXtjz1mJPCBEaaHcCpQ7lBJupRTC7U/wp5AGnV2vvYmI+rI7c2bOfHP5zvBlft0GaltS6W4agi8S7oK10oFLqLUTKbT04BBqvdgr5OqmFjpVxsVu5672Yhybv9NTMsnubqaDgVQqu7sshn6aSCNXtiIt/FySSivw30T0IP9lAdPb/SDypK+eMCZjAV8i4gN+wwac/PASYaZIsJRIbVOLZJRfvR0FsS9HWqWbhrl7w0RoCyVHOfe6K9m/K18Gv0mwOzIGf0ZwulLF4C8IlfVoqCT4HUK1K1Xqa/BXhNpzSTzIrv1OmMoVc+NPInqNL5uOntU6LgLXUV2T+kLkZVlsJJGO1sSLUWLSG6nDMFftXnfVeNV73dUNkYhAga8Qqmel8GQCfo/gnIm8vaz8M8NQJJnoLEdJAP6QiB7mtxzgRCDibaWTYXi+n/+yOC5cogf4XQeHQrqmQnL5bQuWqdUleog/sIAT45EYgI7QwoCArxLN8fs2MDU5v0qwYT8v89zOCT+VKutcZUPoC5lI9Ah/agH3jsN2ZCxDT4aDvazzfI3oGf7IBhplyzWCA2ddBDIrdmsvzoU1aYCvEJw8hU/IVPexBdS3+9v9dBjq0+YUDaKUPzf55nMZjbeGRk6hduRl9PzfPk/nPmtSKXFe3nmGk7kQneMvbRzijnMIk68TpnNQVTh9T2gY7EL/kVDvyLhQfyOip/lrG6ivhLo4vW66X12PkkD4sAhTS6/EclC82MWBTrNnR3SSv7OA+8YTyMFL2HyD6Fn+xgbcw7Ybx0Lw/gSD94noMf7WLlFsn2CNqVHJqJHTocM/mFkfqdYpo4ynPYFzJ2huxvhfLeCeMqcmvQLfJDrFP5l2lQw3TS3HMuo2ET3Kv1jA/eWoxlgEuE3gW0TL/LMNTB8x3jpSQ1H6sSU8zgdmaZTXilV66OPtYTr7h6FxeeeUXe2lJMn8Yr6Ik3OtgdiZfXK2ubszL5qtWbHQPL0wP9/cmZtfaO08dUrMtXbx7z/9V2dG3+ry4srqUgd3e3JXpL5+YRAFsQj3MOMPlQ6i8KWmiONmC27hkJqFb1ku/RcAAP//HnYdnUsGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-50 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - 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-20-51 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-20-52 -spec: - metadata: - FindOptions: '[{ 0x140003d0758 0x140003d0750 map[created:-1]}]' - filter: map[cid:default_company user:0x14000446630] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA diff --git a/cmd/server/keploy/mocks/mock-21.yaml b/cmd/server/keploy/mocks/mock-21.yaml deleted file mode 100644 index 0899774ee..000000000 --- a/cmd/server/keploy/mocks/mock-21.yaml +++ /dev/null @@ -1,31 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-21-0 -spec: - metadata: - FindOneOptions: '[]' - filter: map[_id:49370b62-8877-43b0-ba6e-ae7ff8531e30 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/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-21-1 -spec: - metadata: - DeleteOptions: '[]' - filter: map[_id:49370b62-8877-43b0-ba6e-ae7ff8531e30] - name: mongodb - operation: DeleteOne - type: NO_SQL_DB - objects: - - type: '*mongo.DeleteResult' - data: H4sIAAAAAAAA/9L+f5eZkZHHJTUntSQ1KLW4NKeE8f89Bka4WIpzfmleCSMLAwMD6/97jEwMgAAAAP//KHlxPTIAAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA diff --git a/cmd/server/keploy/mocks/mock-22.yaml b/cmd/server/keploy/mocks/mock-22.yaml deleted file mode 100644 index 626b61f9d..000000000 --- a/cmd/server/keploy/mocks/mock-22.yaml +++ /dev/null @@ -1,22 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-22-0 -spec: - metadata: - UpdateOptions: '[]' - filter: map[_id:fec1be96-8392-4e4e-833a-98d53331f782] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: |- - [{$set map[http_req:{POST 1 1 /api/employees map[] map[accept:[*/*] content-length:[100] content-type:[application/json] host:[localhost:8080] user-agent:[curl/7.84.0]] { - "firstName": "Myke", - "lastName": "Tyson", - "email": "mt@gmail.com", - "timestamp":1 - } []} http_resp:{200 map[] {"id":6,"firstName":"Myke","lastName":"Tyson","email":"mt@gmail.com","timestamp":1669789788} 0 0 }]}] - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r7f5iZkZEntCAlsSQ1KLW4NKeE8f8RBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwMD+/8jjEyMTAyAAAAA///CMr3+ZwAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-23.yaml b/cmd/server/keploy/mocks/mock-23.yaml deleted file mode 100644 index fb8863bf0..000000000 --- a/cmd/server/keploy/mocks/mock-23.yaml +++ /dev/null @@ -1,48 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-23-0 -spec: - metadata: - FindOneOptions: '[]' - filter: map[_id:294c275e-7cb5-46bd-b360-05ff5c715260] - name: mongodb - operation: FindOne.Decode - type: NO_SQL_DB - objects: - - type: '*models.Test' - data: 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 - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v56Vken/JgYGBtb/GxgYGQEBAAD//yDiiagRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-23-1 -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/+L6v56Vken/JgYGBtb/GxgYGQEBAAD//yDiiagRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-23-2 -spec: - metadata: - UpdateOptions: '[{ 0x1400042ec98}]' - filter: map[_id:ba2a5d23-0222-42ec-b746-fbf8eacb9d6f] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {ba2a5d23-0222-42ec-b746-fbf8eacb9d6f 1674625360 1674625360 1674625360107 default_company sample-node-fetch /getData {GET 0 0 /getData map[] map[accept:[*/*] host:[localhost:8080] user-agent:[curl/7.85.0]] {} []} {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 } { } { } [{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]]}] map[] map[] [] [] Http}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r7f52ZkZEntCAlsSQ1KLW4NKeE8f8NBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwMD+/8bjEyMTAyAAAAA///ApEcTZwAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v56Vken/JgYGBtb/GxgYGQEBAAD//yDiiagRAAAA diff --git a/cmd/server/keploy/mocks/mock-25.yaml b/cmd/server/keploy/mocks/mock-25.yaml deleted file mode 100644 index a65019ac0..000000000 --- a/cmd/server/keploy/mocks/mock-25.yaml +++ /dev/null @@ -1,15 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-25-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/+L6v5mVken/NgYGBtb/WxgYGQEBAAD//6bjly8RAAAA diff --git a/cmd/server/keploy/mocks/mock-26.yaml b/cmd/server/keploy/mocks/mock-26.yaml deleted file mode 100644 index 2eb98bcf9..000000000 --- a/cmd/server/keploy/mocks/mock-26.yaml +++ /dev/null @@ -1,15 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-26-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 diff --git a/cmd/server/keploy/mocks/mock-27.yaml b/cmd/server/keploy/mocks/mock-27.yaml deleted file mode 100644 index f839594aa..000000000 --- a/cmd/server/keploy/mocks/mock-27.yaml +++ /dev/null @@ -1,15 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-27-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 diff --git a/cmd/server/keploy/mocks/mock-29.yaml b/cmd/server/keploy/mocks/mock-29.yaml deleted file mode 100644 index cc9894b7d..000000000 --- a/cmd/server/keploy/mocks/mock-29.yaml +++ /dev/null @@ -1,31 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-29-0 -spec: - metadata: - CountOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - name: mongodb - operation: CountDocuments - type: NO_SQL_DB - objects: - - type: '*int64' - data: H4sIAAAAAAAA/2JmYWAABAAA//8u2Pg0BAAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-29-1 -spec: - metadata: - InsertOneOptions: '[]' - document: '{60620388-d564-4b6f-baa4-6d0365966759 1674642356 1674642356 sample-mocks test-1 []}' - name: mongodb - operation: InsertOne - type: NO_SQL_DB - objects: - - type: '*mongo.InsertOneResult' - data: H4sIAAAAAAAA/9L538rMyMjvmVecWlTin5calFpcmlPC+L+NgZGRkQsinJri6cIowMDAYPy/jZGtuKQoMy+dR41BxczAzMjA2MJCN8XUzETXJMksTTcpMdFE1yzFwNjM1NLMzNzUkgEQAAD///XmOd1hAAAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-3.yaml b/cmd/server/keploy/mocks/mock-3.yaml deleted file mode 100644 index c749a615b..000000000 --- a/cmd/server/keploy/mocks/mock-3.yaml +++ /dev/null @@ -1,41 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-3-0 -spec: - metadata: - FindOptions: '[{ 0x140001dd570 map[all_keys:0 anchors:0] 0x140001dd518 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:Http] - 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-3-1 -spec: - metadata: - FindOptions: '[{ 0x140001dd570 map[all_keys:0 anchors:0] 0x140001dd518 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:Http] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-3-2 -spec: - metadata: - FindOptions: '[{ 0x140001dd570 map[all_keys:0 anchors:0] 0x140001dd518 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:Http] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-30.yaml b/cmd/server/keploy/mocks/mock-30.yaml deleted file mode 100644 index 9a7eb19eb..000000000 --- a/cmd/server/keploy/mocks/mock-30.yaml +++ /dev/null @@ -1,71 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-30-0 -spec: - metadata: - FindOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - 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-30-1 -spec: - metadata: - FindOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.BrowserMock' - data: H4sIAAAAAAAA/0yOz0oCURTGzzdOGjRQPYLQdmJKvekmyCSKqEXZIsTF1Tll6DiXuTfCZWZlPUYv00sFJ0YT2pw/8Dvn+93KcwHYaGbpk+XsIu0PIVNCEd5ZCwGhdJyxdhzDJ5RuTLya146MWRLrbbbuUiecL36LjYV8ElEkHx5Q7nQTbTrWZQ/j+26Sxjyyuyfs+oMrtiYdW85pyJxoU959eDInBJAZ0aG8FODJjOCjeO20e7QLi1PWMWcW8kbwm2k8wRYhWL1rT0xuQlSWVx/Y/pe+bIu7IEfOZYodFan9qFKvh3FNVcNqT92FPa2roYqjiqo1lDqoNfDz/VUa/NXA6sSMOEzS/tCi6Ni6cI9+AwAA//+HGXDASAEAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6383KyPS/j4GBgfV/DwMjIyAAAP//cpwCYhEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-30-2 -spec: - metadata: - FindOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - 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-30-3 -spec: - metadata: - FindOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6383KyPS/j4GBgfV/DwMjIyAAAP//cpwCYhEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-30-4 -spec: - metadata: - FindOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6383KyPS/j4GBgfV/DwMjIyAAAP//cpwCYhEAAAA= diff --git a/cmd/server/keploy/mocks/mock-33.yaml b/cmd/server/keploy/mocks/mock-33.yaml deleted file mode 100644 index fc9e02008..000000000 --- a/cmd/server/keploy/mocks/mock-33.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-33-0 -spec: - metadata: - UpdateOptions: '[{ 0x140006be586}]' - filter: map[_id:5f3c2589-b46e-4975-923b-f383f57be1fc] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {5f3c2589-b46e-4975-923b-f383f57be1fc 1674642716 1674642716 123 default_company sample { 0 0 map[] map[] []} {0 map[] 0 0 } { } { } [] map[] map[] [] [] }}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+JmYmRrbikKDMvnUeNQcU0zTjZyNTCUjfJxCxV18TS3FTX0sg4STfN2MI4zdQ8KdUwLZkBEAAA//9nUGSOlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-4.yaml b/cmd/server/keploy/mocks/mock-4.yaml deleted file mode 100644 index 0d6123829..000000000 --- a/cmd/server/keploy/mocks/mock-4.yaml +++ /dev/null @@ -1,71 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-4-0 -spec: - metadata: - FindOptions: '[{ 0x14000367a98 map[all_keys:0 anchors:0] 0x14000367a90 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:gRPC] - 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-4-1 -spec: - metadata: - FindOptions: '[{ 0x14000367a98 map[all_keys:0 anchors:0] 0x14000367a90 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:gRPC] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.TestCase' - data: H4sIAAAAAAAA/6xU33MT1Rc/Z3fTJiH86Bfm+4WHr1MWHPzRhIa2WvPgTEkEOlBaE8pLptO52b2ki8nucvcGyTAdR0RFRVRU/IWiiAqKiAioqIi++OgTTz75L/jseJy726bJWNQZfUnuuXvuvZ/P+ZzPoZv0pI4Y38UDmWcBRzoC2IPaaAFTgN15wZnkNhqA3ZO+Pb+O55kvGyIK9HyUHBvx/WilTxZHw+PbpPSLfB/S04DxKAh8pBOA3VuFb4WfXgWMR4H69DqgUeB+gPQ2YPdIrbadNwOk0ypwrRlPREFsp+cosMcAY2Oe9VCA9D2gsavpc0wBwCP0lI6d7yewa4zLGc9WyJITwpPeGNvrCUVhLnTcKNQniztUVmKyuGOCCVYPkI4Cdm3jzOYC6XlAY7NnN1VO12bHZSJcGls8UUd6CQDW0jMGYk+d+eVACsetTkV/4T0pBfF/9JyBHVemFB1I0bMaaopYCqCXXtQQe8pTdc/mtSCjHigwydQjSMcBhugFpd7C/nFAHfXtPMK2m9UaPIjKNMHkTLgEaNDL6lSnIJgsSSYbQd6zuSrComyXRjljPAhYlf91JReqA3AnvaI0aRdea6tjSxyADfSawtfRFW2p+gNChHkmndIQV7bKU+A+d23uWs2wfegkwP30ho6YbP9yEtBAYyerh/jnewaNMa4KeFQ1YFjKt0Cp9KaGmChPlacajiuH1S4mAdbTOwbiyjZ9yy2FT89LuZa+0xD/U566S/Cq4EHgeG5GdWvYrHQGYJDe1VGjMwpR924uVEaIpYVuu+OGDWuUfG4hvQ8AdIXe0xGXq5um1XbJmuF1pj7iUowrGjabo9I9XtnLLRkgfQioh2U/Hy4CpKsL3jkGmBwJAi6k47kB0sVO67dqFNvFKjWO9AWgPurK0CtKDHXBkjlhGzyQSNc7XH0DAO6gcxrimj9WYzrCGEKkswC30QeqKGdDzVvqhJokFf2j9FGHt88DJv89b19s6/a4Wsw9vIjRLwNAhj4xEP/f1gjt9EpSjIjo0hTSBdVPHytuFwARY6E7I0feTp9piP/tLM6Cqy8D0iWAu+lTdfrS3/E4HaIrnSa/Chi/pclvSfufOH4Dfa5je9NoaOS9WoD0NaBR9B6ew7qOvtIQV3WyL+2r5b1amErXAO6hLxX3a4ubNzEhuOWE9jEAYyWL1RQ/NXS+6Rg61/9k6HzbOXRuLD50ftPW0xFcP5gd4kMDgzyd7d8zlB4cHq6k2b3D2XT2PjZY4TbPZitD+OsPp4qbOn6X23wPa9TktOXVfeY2cXlV+Fba5YHkdpr5vgYIiMsOmgfMXLbPbJq5TQOzuJT5TmbEtrlQv4DoHjQFDxo1aeaGs32mMryZO2i6rM7NnLmFVRyvt+D0buWuZK7jmX2m5KzellJoWEw6Zp9pzbC6r2w/4/iBmTP7zT7T9xxXqiDb3581Z2dnVb921z236tkVTOwcny49uGO6sBljhmz6fGFjxairpsi4y8f9cJZo5am47VmNOndl4kAu29vbzG0aMBSI+fsSns8FU9mJ1mnU6EQfParGXGuvGPJFOqTAJKNtbo8WcAUAjNMhHKh6mbk7M56obgzXaVs4+7nYWAk8d6MvnLojnf08E82c0QI9hojx+QjpMGAXrgZYTYdXQcqiH+ncmh6bfl5HN+mXZfQT9CTp8RhqdAQAYvQEIIKOSyqe3cxEgmhGtTiRh98DAAD//2qAJ6tZCQAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-4-2 -spec: - metadata: - FindOptions: '[{ 0x14000367a98 map[all_keys:0 anchors:0] 0x14000367a90 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:gRPC] - 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-4-3 -spec: - metadata: - FindOptions: '[{ 0x14000367a98 map[all_keys:0 anchors:0] 0x14000367a90 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:gRPC] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-4-4 -spec: - metadata: - FindOptions: '[{ 0x14000367a98 map[all_keys:0 anchors:0] 0x14000367a90 map[created:-1]}]' - filter: map[app_id:grpc-nested-app cid:default_company type:gRPC] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-42.yaml b/cmd/server/keploy/mocks/mock-42.yaml deleted file mode 100644 index af698493a..000000000 --- a/cmd/server/keploy/mocks/mock-42.yaml +++ /dev/null @@ -1,124 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-42-0 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:sample-url-shortener cid:default_company uri:/url] - 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-42-1 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:sample-url-shortener cid:default_company uri:/url] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.TestCase' - data: H4sIAAAAAAAA/6xUXW8bRRS9Z3ddO8YVCkUgHkAUisqHEjUlScsLUuoAjdKUKE76YkXVxDskLvbudmYtlCdEgFIgfEP5KgUKlFJKKdBCKfwNfs9Fd9ZxvCIFJJAffO/OnZl7zrln+A9+zgdK89qmVWU1eI0wCG9qEhVCsWq0SnWIgFBcSMKNuFRVSdoxWeJXs+LCRJJkkb8wN+W2H0zTZE4fB79AKGWJTcBvEopPmKThlt4mlLJElt4lBJM6seCPCMWJVmtar1rwaUmixkpssqRwOG5KsycJhZm48bQF/04I5lcTjQoRPcvP+8jfP4BtMzpdiUPprDxr4jSeUcdiIxC6aTPKUn9h7pBUDSzMHZpVRrUt+ARh20GtQm3ArxCCA3G4KjXbDjQjZVwYPB6bNvh1ItrJLwbAYFsldZuaZrS8mP25cyrS4u38coDckRWBQxV+yYMnwCpEd/NrHjBYX2zHoW7ZYblgUqVKLgGvE43xq6Le5vd1gg9/Wme9HVGtjrYZTbMqXXEhUYffkF15QVCupSrt2GocaiFhS7Tbs5oZba1a1v/M5CY7RA/wW6JJv/BeH489cYh28zvSX24q+kr9x4xxdffwhx6wo0fPpE50FOqoserGh08RPcrv+UC5f+UUIUBwWLVd/xszg2BGC4EnZAAdlR+QqPS+BwzUF+uLnWaU7pevKBPt4o8DYEefvvWewqc3pNzJv3nALfXFB41eNtraZhwNy7S6YeUzRKP8iQ+Pz0hHxSPaSIXrpdfddDNyAxvUEt0Af0ZEfJU/9YGb5aSj8rnWWNFtJYvYjpLACFUXSvHJpWO6kVrwlwTf0X7OBRZ8edM7JwnlCWu1SZtxZMEX8tbvcVSYV0stDf6R4E9FqfOKiCEH3NQVtqNtCr6Wc/V1Irqfv/CAO/7KxtGsR9cinyW6iz8XUs46zXvqOE3KAn+dv8p5+xyh/P95+0LftJck6F68hdEvEdEwfxMAd/YNQj+8WmomTHZoBXxe5ulrwXaeABScOzNH3sffecBteXI2XX2JwBeJHuJvZffFf+NxXuPv8ya/TCjd0OQ3hP1fHL+bf/DRPzQegmrcsuCfCcFc/Ey313v5qgfcmkdfO96qxi1XyleIxvknwX5la/MOzBrdaDr7BIRCraFagk8enV9yj861v3l0fs0/Ote3fnRGeA27wnBp78h+vW/o4XCfGhrdO6KGlvYsjQ+psaf2qDDU44+MjhUJ7kd/BgAA///H1vikZAcAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-42-2 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:sample-url-shortener cid:default_company uri:/url] - 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-42-3 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:sample-url-shortener cid:default_company uri:/url] - 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-42-4 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:sample-url-shortener cid:default_company uri:/url] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-42-5 -spec: - metadata: - UpdateOptions: '[]' - filter: map[app_id:sample-url-shortener cid:default_company uri:/url] - name: mongodb - operation: UpdateMany - type: NO_SQL_DB - update: map[$set:map[anchors:map[body.url:[https://google.com] header.Accept:[*/*] header.Content-Length:[33] header.Content-Type:[application/json] header.User-Agent:[curl/7.85.0]]]] - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r7f5CZkZEntCAlsSQ1KLW4NKeE8f8hBkYWRh7fxJLkjNQU5/zSvBJGFgZGXt/8lMy0TGSR0ILi1KISJBEumIinC6MAAwMD+/9DjEyMTAyAAAAA//+9etQ0ZwAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-42-6 -spec: - metadata: - AggregateOptions: '[{ 10s }]' - name: mongodb - operation: Aggregate.All - pipeline: '[map[$match:map[anchors:map[$ne:] app_id:sample-url-shortener cid:default_company uri:/url]] map[$group:map[_id:map[anchors:$anchors] count:map[$sum:1] dups:map[$addToSet:$_id]]] map[$match:map[count:map[$gt:1]]]]' - type: NO_SQL_DB - objects: - - type: '*[]primitive.M' - data: H4sIAAAAAAAA/xTHwQ0AEBBE0fmbPZJQmKqxbY04vu4bhEv4SNM7gfVBY0jpkl4AAAD//8TuqMglAAAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-42-7 -spec: - metadata: - UpdateOptions: '[{ 0x140000fa268}]' - filter: map[_id:0542250d-c4b0-4425-9aff-5d10a573faf5] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: |- - [{$set {0542250d-c4b0-4425-9aff-5d10a573faf5 1674725096 1674725096 1674725096 default_company sample-url-shortener /url {POST 1 1 /url map[] map[Accept:[*/*] Content-Length:[33] Content-Type:[application/json] User-Agent:[curl/7.85.0]] { - "url": "https://google.com" - } []} {200 map[Content-Type:[application/json; charset=utf-8]] {"ts":1674725096837339000,"url":"http://localhost:8080/Lhr4BWAi"} 0 0 } { } { } [{mongodb NO_SQL_DB map[UpdateOptions:[{ 0x14000632748}] filter:map[_id:Lhr4BWAi] name:mongodb operation:UpdateOne type:NO_SQL_DB update:[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]] [[94 255 129 3 1 1 12 85 112 100 97 116 101 82 101 115 117 108 116 1 255 130 0 1 4 1 12 77 97 116 99 104 101 100 67 111 117 110 116 1 4 0 1 13 77 111 100 105 102 105 101 100 67 111 117 110 116 1 4 0 1 13 85 112 115 101 114 116 101 100 67 111 117 110 116 1 4 0 1 10 85 112 115 101 114 116 101 100 73 68 1 16 0 0 0 7 255 130 1 2 1 2 0] [10 255 131 5 1 2 255 134 0 0 0 5 255 132 0 1 1]]}] map[body.url:[https://google.com] header.Accept:[*/*] header.Content-Length:[33] header.Content-Type:[application/json] header.User-Agent:[curl/7.85.0]] map[body.url:[https://google.com] header.Accept:[*/*] header.Content-Length:[33] header.Content-Type:[application/json] header.User-Agent:[curl/7.85.0]] [] [] Http}}] - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/0zIsQrCMBAA0DtbHCSCHyFugRhziLMuDl2ErkJsEg1IW5rrB9ofi1Oh63vmX4Eo6t5Z9g+fxi9jngBLFJXl5uPdtRtbxhJwW3UuhriUuk9+4IVsZrnfcAcAlKdihevEQ2zf4gB7RUZrUk425qWkMZrkxYYgyR2VpfMp2EDwDwAA//+q1lq0lQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA diff --git a/cmd/server/keploy/mocks/mock-43.yaml b/cmd/server/keploy/mocks/mock-43.yaml deleted file mode 100644 index 4410e578d..000000000 --- a/cmd/server/keploy/mocks/mock-43.yaml +++ /dev/null @@ -1,35 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-43-0 -spec: - metadata: - FindOneOptions: '[]' - filter: map[_id:0542250d-c4b0-4425-9aff-5d10a573faf5 cid:default_company] - name: mongodb - operation: FindOne.Decode - type: NO_SQL_DB - objects: - - type: '*models.TestCase' - data: H4sIAAAAAAAA/7RW7XMTXxU+Z3fTpPmlQgF1/KCGiIOASbZ5adMozKSpQoeW1qbFD5nYud29SRY3u8vem9FOp+NYFFEB8Q3fEBURERFRQRH97le/+N84XOfuJm1Ci++/6cz23nPPvfec8zzPyRV/E59XEWMrlPEqYRTFNuA4KnOzmACMVn1KODVRA4yuemZ/HKsSj3f9cKJWQ+dIxfPCkbq6PBdsP8e5t0wvo/gCYCycMA/FLcDoWd8zgqVvAMbCiVz6FqA2Sz2G4vuA0Yptn6cbDMUdOXGMtuuHk8gF15LBXgOMLLjGpxmKPwNqKxsexQQAfE5cUXH4/lEcWaC87ZoysviS73J3gVxyfZlCb2o54VRdXZ6XXqOry/NLxCcdhuIq4Mg5Skzqo/gKoDbjmhvSZ2TGcogfDLWPu34HxU0AOCq+qCGOd4hXZ9y3nFYj/Beck5Ahvlt8WcOhIxMyHUiILymoyMQSAElxQ0Ecrzc6rkltlpEXzBJO5CUorgMUxVclerv264AqqudpGNtFYncpC8u0RHg7GAJ0xdfkrmFAMF7jhHdZ1TWpLMK+2Y6FPguUMdKi/7qSu9UBOCG+LjEZBF4ZqOMOOADHxTdlfEOsGHBVP+b7gV9KfE9BPLxTnlnqUcekjrER0EfcBjgjvq0ixgdXbgNqqF0gnSD+PmdQW6CygFclAYNSfhckSt9REEfrjXqjazm8JK0YBzgmfqAhHh7At76D8J0+lEfFnxTEQ/XGSZ+2fMqY5ToZydaArOIuQEH8UEVF3JURRS9SX3oEsexEd95yAsJqNY8aKH4MAOK5+JGKeECetCbNNaNNO0Qu4hjGZBom6aUSXVy/RA3OUNwHVIOyPwgGDMXTXe1cA4xXGKM+t1yHoXg0LP2dGkVWyLpNUfwWUJ1zeKAVCYY84K0esF3KOIoXQ6p+CQAfEj9VEN+ztxprYYxBiOIewPvET2RR7gWY76ATYBKX6V8XPxvS9gPA+P9P248G2B6Tg97F+wj9CQBkxC80xPcOEGEwvRr3K354aALFQ8mnn8vcHgIiRgJ1hor8oPiVgviu4eLsqvoJoHgMcEr8Uu5+/O9oXGyLXw+L/Clg7I0if2Pa/4vij4vfqDhIGgW1qmszFL8H1Jbdz/Ri/YB4riAeGc6+dtmuunbgKp4BTIrfydyf7S/e0SWfGlYgHw0wUjOILfOTTecPQ03nxT9pOn8cbjov9286r7SzYhuP6cVCLlfUzbRRWNfThUKumJ4mzWa6aE7opDiVb5JmEf/+l/s3/jr0PWDSJunafM1wOx5xNvAIIx3Ppumub6dZ2/U5daiPWrbr24ja0mJtBRUZhzQoWnyVUT9daVGH41tG17ezU5lSMaOPVAyDehzVk9mT76i6DqcOT89Tp8XbqOTzib4pqNdB4nm2ZRAp9uwl5jp4dDOeTKa6vp0qJ1Ntzj1WzmZbrtuyacZwO6n4FiC+wluIwye9//WTPpI02sRnlJ/u8ma6hJXNFGep8sTkVGEqV9SnJ0v5qXx+Wtf1D4fXBbeVs1nbNYjddhkvl/SSnp1v+4WZT1as1Bag/EOMdlyn5ZrrOHphca32ifm12Rkc0fiGR3cNI93giSJu1jePMcqTm/1jkjk9l0/rE+ncZHKiUC4WysXJTCk3XSgVk6f0Yl5PztVWkp3Tp3KZvD6d16dLU5P/1Z69tdvaaoyFL6dFL+iuJ+qbH3Us+0xy71f/7ERB1/XJfG6qUNpqjDQtm1M/eEWsWWa5n01Dc0iH9gsy6nrUDxAY7d3jUFRanwredYnQtExZ1+bB207DxALhRpuaVbcbtvCxBde0mtagZdWTPwYDlnjfMjeLBwEgKrYlL2E8Lq5EUBFXASAin1kIGHlnO+gqmb1EPPzayv58HO95vYHsY73lAc7H1l1zIyM1c2gvBBj5T3e8zQmomuzK8I8AAAD//2SlDvl8CwAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-43-1 -spec: - metadata: - UpdateOptions: '[{ 0x14000457e4f}]' - filter: map[_id:0542250d-c4b0-4425-9aff-5d10a573faf5] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: |- - [{$set {0542250d-c4b0-4425-9aff-5d10a573faf5 1674725096 1674725096 1674725096 default_company sample-url-shortener /url {POST 1 1 /url map[] map[Accept:[*/*] Content-Length:[33] Content-Type:[application/json] User-Agent:[curl/7.85.0]] { - "url": "https://google.com" - } []} {200 map[Content-Type:[application/json; charset=utf-8]] {"ts":1674725096837339000,"url":"http://localhost:8080/Lhr4BWAi"} 0 0 } { } { } [{mongodb NO_SQL_DB map[UpdateOptions:[{ 0x14000632748}] filter:map[_id:Lhr4BWAi] name:mongodb operation:UpdateOne type:NO_SQL_DB update:[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]] [[94 255 129 3 1 1 12 85 112 100 97 116 101 82 101 115 117 108 116 1 255 130 0 1 4 1 12 77 97 116 99 104 101 100 67 111 117 110 116 1 4 0 1 13 77 111 100 105 102 105 101 100 67 111 117 110 116 1 4 0 1 13 85 112 115 101 114 116 101 100 67 111 117 110 116 1 4 0 1 10 85 112 115 101 114 116 101 100 73 68 1 16 0 0 0 7 255 130 1 2 1 2 0] [10 255 131 5 1 2 255 134 0 0 0 5 255 132 0 1 1]]}] map[body.url:[https://google.com] header.Accept:[*/*] header.Content-Length:[33] header.Content-Type:[application/json] header.User-Agent:[curl/7.85.0]] map[body.url:[https://google.com] header.Accept:[*/*] header.Content-Length:[33] header.Content-Type:[application/json] header.User-Agent:[curl/7.85.0]] [body.ts] [] Http}}] - 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-44.yaml b/cmd/server/keploy/mocks/mock-44.yaml deleted file mode 100644 index 92b40c1ed..000000000 --- a/cmd/server/keploy/mocks/mock-44.yaml +++ /dev/null @@ -1,58 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-44-0 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:xyzABC cid:default_company grpc_req.method:api.Adders.Added] - 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-44-1 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:xyzABC cid:default_company grpc_req.method:api.Adders.Added] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-44-2 -spec: - metadata: - FindOptions: '[{ map[all_keys:1 anchors:1] }]' - filter: map[app_id:xyzABC cid:default_company grpc_req.method:api.Adders.Added] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-44-3 -spec: - metadata: - UpdateOptions: '[{ 0x140006461ce}]' - filter: map[_id:74ed0c69-df4b-49d6-9df2-c25cf3ee56ae] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {74ed0c69-df4b-49d6-9df2-c25cf3ee56ae 1674759267 1674759267 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":201} api.Adders.Added} {{"result":90,"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[body.x:[2.01E+02]] map[body.x:[2.01E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQcXcJDXFINnMUjclzSRJ18QyxUzXMiXNSDfZyDQ5zTg11dQsMZUBEAAA//+OPsmLlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-45.yaml b/cmd/server/keploy/mocks/mock-45.yaml deleted file mode 100644 index e276dffd4..000000000 --- a/cmd/server/keploy/mocks/mock-45.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-45-0 -spec: - metadata: - UpdateOptions: '[{ 0x140003acd36}]' - filter: map[_id:7ece6fb3-ca8d-4628-8341-a54108910b14] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {7ece6fb3-ca8d-4628-8341-a54108910b14 1674759277 1674759277 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":202} api.Adders.Added} {{"result":90,"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[body.x:[2.02E+02]] map[body.x:[2.02E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQcU8NTnVLC3JWDc50SJF18TMyELXwtjEUDfR1MTQwMLS0CDJ0IQBEAAA//+0IrgZlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-46.yaml b/cmd/server/keploy/mocks/mock-46.yaml deleted file mode 100644 index 291fd9314..000000000 --- a/cmd/server/keploy/mocks/mock-46.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-46-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400001b146}]' - filter: map[_id:49dbe035-b2d4-4c64-9c90-fb41fa2f7aae] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {49dbe035-b2d4-4c64-9c90-fb41fa2f7aae 1674759302 1674759302 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":203} api.Adders.Added} {{"result":90,"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[body.x:[2.03E+02]] map[body.x:[2.03E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQcXEMiUp1cDYVDfJKMVE1yTZzETXMtnSQDctycQwLdEozTwxMZUBEAAA//+NC61zlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-47.yaml b/cmd/server/keploy/mocks/mock-47.yaml deleted file mode 100644 index 6dc7fddaa..000000000 --- a/cmd/server/keploy/mocks/mock-47.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-47-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400001b5be}]' - filter: map[_id:ab703a2b-7603-463d-91b5-0ab3f79088ee] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {ab703a2b-7603-463d-91b5-0ab3f79088ee 1674759325 1674759325 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":204} api.Adders.Added} {{"result":90,"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[body.x:[2.04E+02]] map[body.x:[2.04E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQSUxydzAONEoSdfczMBY18TMOEXX0jDJVNcgMck4zdzSwMIiNZUBEAAA//8fgS2jlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-48.yaml b/cmd/server/keploy/mocks/mock-48.yaml deleted file mode 100644 index cb83376d4..000000000 --- a/cmd/server/keploy/mocks/mock-48.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-48-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400001bb0e}]' - filter: map[_id:d1d1e5c7-e03e-4b4a-93bd-e0338ba436a8] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {d1d1e5c7-e03e-4b4a-93bd-e0338ba436a8 1674759331 1674759331 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":205} api.Adders.Added} {{"result":90,"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[body.x:[2.05E+02]] map[body.x:[2.05E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQSXFMMUw1TTZXDfVwDhV1yTJJFHX0jgpBcQ1tkhKNDE2S7RgAAQAAP//yeQChpUAAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-49.yaml b/cmd/server/keploy/mocks/mock-49.yaml deleted file mode 100644 index e41d34d39..000000000 --- a/cmd/server/keploy/mocks/mock-49.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-49-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400001bdfe}]' - filter: map[_id:83ed1f43-1beb-496e-9bba-e8a69352168a] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {83ed1f43-1beb-496e-9bba-e8a69352168a 1674759337 1674759337 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":206} api.Adders.Added} {{"result":90,"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[body.x:[2.06E+02]] map[body.x:[2.06E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQcXCODXFMM3EWNcwKTVJ18TSLFXXMikpUTfVItHM0tjUyNDMIpEBEAAA//8ZoaowlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-5.yaml b/cmd/server/keploy/mocks/mock-5.yaml deleted file mode 100644 index 23c2e3279..000000000 --- a/cmd/server/keploy/mocks/mock-5.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-5-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400048f20a}]' - filter: map[_id:68a5f15b-790f-488c-afa5-d81eaa2347bd] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {68a5f15b-790f-488c-afa5-d81eaa2347bd 1674553692 1674553692 RUNNING default_company grpc-nested-app default_user 0 0 1 []}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+JmYmRrbikKDMvnUeNQcXMItE0zdA0Sdfc0iBN18TCIlk3MS3RVDfFwjA1MdHI2MQ8KYUBEAAA//+1w1YGlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-50.yaml b/cmd/server/keploy/mocks/mock-50.yaml deleted file mode 100644 index 6127f88b9..000000000 --- a/cmd/server/keploy/mocks/mock-50.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-50-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400003716e}]' - filter: map[_id:fe810b44-1770-41d5-9220-de6644d23a30] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {fe810b44-1770-41d5-9220-de6644d23a30 1674759349 1674759349 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":207} api.Adders.Added} {{"result":90,"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[body.x:[2.07E+02]] map[body.x:[2.07E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQSUt1cLQIMnERNfQ3NxA18QwxVTX0sjIQDcl1czMxCTFyDjR2IABEAAA//9I8ZwJlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-51.yaml b/cmd/server/keploy/mocks/mock-51.yaml deleted file mode 100644 index e1ef9fdf6..000000000 --- a/cmd/server/keploy/mocks/mock-51.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-51-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400078943e}]' - filter: map[_id:bf98fd05-a0ba-4df0-ab11-fca20cd93f54] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {bf98fd05-a0ba-4df0-ab11-fca20cd93f54 1674759353 1674759353 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":208} api.Adders.Added} {{"result":90,"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[body.x:[2.08E+02]] map[body.x:[2.08E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQSUpzdIiLcXAVDfRIClR1yQlzUA3McnQUDctOdHIIDnF0jjN1IQBEAAA//+QLVtalQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-52.yaml b/cmd/server/keploy/mocks/mock-52.yaml deleted file mode 100644 index d3d4e7cbf..000000000 --- a/cmd/server/keploy/mocks/mock-52.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-52-0 -spec: - metadata: - UpdateOptions: '[{ 0x1400030ee8e}]' - filter: map[_id:eba8f02b-41b4-4049-8b40-52799f0a19e8] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {eba8f02b-41b4-4049-8b40-52799f0a19e8 1674759363 1674759363 1674553625 default_company xyzABC { 0 0 map[] map[] []} {0 map[] 0 0 } {{"x":209} api.Adders.Added} {{"result":90,"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[body.x:[2.09E+02]] map[body.x:[2.09E+02]] [] [] gRPC}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+NmYmRrbikKDMvnUeNQSU1KdEizcAoSdfEMMlE18TAxFLXIsnEQNfUyNzSMs0g0dAy1YIBEAAA//+LeZb+lQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= diff --git a/cmd/server/keploy/mocks/mock-6.yaml b/cmd/server/keploy/mocks/mock-6.yaml deleted file mode 100644 index d5c8b97ec..000000000 --- a/cmd/server/keploy/mocks/mock-6.yaml +++ /dev/null @@ -1,49 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-6-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/Z3fTJiH86Bfm+4WHr1MWHPzRhIa2WvPgTEkEOlBaE8pLptO52b2ki8nucvcGyTAdR0RFRVRU/IWiiAqKiAioqIi++OgTTz75L/jseJy726bJWNQZfUnO2XvuuedzPudz6CY9qSPGd/FA5lnAkY4A9qA2WsAUYHdecCa5jQZg96Rvz9vxPPNlQ0SOno+CYyO+H1n6ZHE0vL5NSr/I9yE9DRiPnMBHOgHYvVX4Vnj0KmA8ctTR64BGgfsB0tuA3SO12nbeDJBOK8e1ZjwRObGdnqOKPQYYG/OshwKk7wGNXU2fYwoAHqGndOx8P4FdY1zOeLaqLDkhPOmNsb2eUBDmXMeNXH2yuENFJSaLOyaYYPUA6Shg1zbObC6Qngc0Nnt2U8V0bXZcJkLT2OKJOtJLALCWnjEQe+rMLwdSOG51KvoL86RUif+j5wzsSJlScCBFz2qoKWApgF56UUPsKU/VPZvXgox6oMAkU48gHQcYohcUewvfjwPqqG/nUW27Wa3Bg6hNE0zOhCZAg15WtzoJwWRJMtkI8p7NVRMWRbs0ihnjQcCq/K87udAdgDvpFcVJO/FaWx9b5ABsoNdUfR1T0RaqPyBEGGfSKQ1xZas9Be5z1+au1QzHh04C3E9v6IjJ9pOTgAYaO1k9rH9+ZtAY46qBR9UAhq18CxRLb2qIifJUearhuHJYfcUkwHp6x0Bc2cZvucXw6Xkq19J3GuJ/ylN3CV4VPAgcz82oaQ2Hlc4ADNK7Omp0RlXUvZsLFRHW0qpuu+OGA2uUfG4hvQ8AdIXe0xGXq0zT6nPJmuF1pg5xKcYVDJvNQeker+zllgyQPgTUw7afD40A6eqCdo4BJkeCgAvpeG6AdLFT+q0exXaxSo0jfQGoj7oy1IoiQyVYMkdsgwcS6XqHqm8AwB10TkNc88duTEc1hiXSWYDb6APVlLMh5y12Qk6SCv5R+qhD2+cBk/+eti+2TXtcGXMPLyL0ywCQoU8MxP+3DUI7vJIUIyJKmkK6oObpY4XtAiBiLFRnpMjb6TMN8b+dzVlQ9WVAugRwN32qbl/6OxqnQ3SlU+RXAeO3FPktYf8TxW+gz3VsHxoNjbxXC5C+BjSK3sNzta6jrzTEVZ3oS/tqea8WhtI1gHvoS4X92uLiTUwIbjmhfAzAWMliNYVPLZ1vOpbO9T9ZOt92Lp0biy+d37T1dATXD2aH+NDAIE9n+/cMpQeHhytpdu9wNp29jw1WuM2z2coQ/vrDqeKmjt/lNt/DGjU5bXl1n7lNXF4VvpV2eSC5nWa+rwEC4rKD5gEzl+0zm2Zu08AsLmW+kxmxbS7ULyC6B03Bg0ZNmrnhbJ+pBG/mDpouq3MzZ25hFcfrLTi9W7krmet4Zp8pOau3hRQaFpOO2WdaM6zuK9nPOH5g5sx+s8/0PceVysn292fN2dlZNa/ddc+tenYFEzvHp0sP7pgubMbYilFXrY1xl4/74fLQylNx27Made7KxIFctre3mds0YKhX5xMkPJ8LpqITrduGbPq8LbFGJ/roUbXmWiHFEC/SIVVMMvrM7dECrgCAcTqEA1UvM/dExhPVjaGdtoWzn4uNlcBzN/rCqTvS2c8z0c4ZLdBjiBif95AOA3bhaoDVdHgVpCz6kc6t6bHp53V0k35ZRj9BT5Iej6FGRwAgRk8AIui4pOLZzUxEiGZUixN5+D0AAP//4jUDflkJAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-6-1 -spec: - metadata: - UpdateOptions: '[{ 0x14000395e2a}]' - filter: map[_id:5ffa8085-a457-4f14-ae27-d879f46dbb7a] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {5ffa8085-a457-4f14-ae27-d879f46dbb7a PASSED 1674553692 1674553692 68a5f15b-790f-488c-afa5-d81eaa2347bd 415e534e-10f5-488b-a781-19a4bede11b5 { 0 0 map[] map[] []} [{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]]}] {0 map[] 0 0 } [body.result] {{false 0 0} [] {true JSON {"result":81,"data":{"name":"Fabio Di Gentanio","team":{"name":"Ducati","championships":"0","points":"1001"}}} {"result":81,"data":{"name":"Fabio Di Gentanio","team":{"name":"Ducati","championships":"0","points":"1001"}}}} []} {{"x":1,"y":23} api.Adder.Add} {{"result":81,"data":{"name":"Fabio Di Gentanio","team":{"name":"Ducati","championships":"0","points":"1001"}}} }}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+JmYmRrbikKDMvnUeNQcU0LS3RwsDCVDfRxNRc1yTN0EQ3MdXIXDfFwtwyzcQsJSnJPJEBEAAA//8w+cMrlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-6-2 -spec: - metadata: - UpdateOptions: '[{ 0x140001344f0}]' - filter: map[_id:68a5f15b-790f-488c-afa5-d81eaa2347bd] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: map[$inc:[{success 1}]] - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMDA/r+JkYmRiQEQAAD//4pyI9BnAAAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-66.yaml b/cmd/server/keploy/mocks/mock-66.yaml deleted file mode 100644 index 4fa49a0c9..000000000 --- a/cmd/server/keploy/mocks/mock-66.yaml +++ /dev/null @@ -1,32 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-66-0 -spec: - metadata: - CountOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - name: mongodb - operation: CountDocuments - type: NO_SQL_DB - objects: - - type: '*int64' - data: H4sIAAAAAAAA/2JmYWACBAAA//8CufbaBAAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638jKyPS/hYGBgfV/EwMjIyAAAP//ngbw8hEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-66-1 -spec: - metadata: - UpdateOptions: '[]' - filter: map[app_id:sample-mocks test_name:test-1] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: map[$push:map[deps:map[$each:[]]]] - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738rMyMgTWpCSWJIalFpcmlPC+L+NgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMDA/L+NARAAAP//1UqS4GMAAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/yzIMQ7CMAwF0BSJhVP8oafIOdgQg1sZEtQ6kWOrdARx77B0fZf+OQ+n/gshSP+G17BpNga/Z66Wi0QcoFq0RdyuiUH69JXFYAUj05yQBWP1lrB6M0wMEpAq7ZjckA0bNZQHbK8cIb4s938AAAD//2YqL5J6AAAA diff --git a/cmd/server/keploy/mocks/mock-69.yaml b/cmd/server/keploy/mocks/mock-69.yaml deleted file mode 100644 index c137a9137..000000000 --- a/cmd/server/keploy/mocks/mock-69.yaml +++ /dev/null @@ -1,49 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-69-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/6xW3XMTVRQ/Z3fTJiFQKozCg05ZcPCjCQ1ttebBmZIIdKC0JpSXTKdzs3tJF5PdZfcGyTAdx/IhKn4rfiEoKgIiooIi+u6jTzz55L/gs+Nx7t02TcaizuhLes+95557fud3fqdLt+lZHTG+l4ciz0KONA/Yi9pYAVOA3fmAM8FtNAC7p3x7cR3PM180gsjQ85FzbNT3o5U+VRxT13cK4Rf5QaRjgPHICH2kVwG7dwS+pY5eB4xHhjx6E9AocD9Eeg+we7RW28WbIdIZabjWrBdERmyP58hkTwLGxj3rqRDpR0Bjb9PnmAKAZ+iojp3vJ7BrnItZz5aZJScDT3jj7IAXSAgLpuNGpj5V3C29ElPF3ZMsYPUQ6QRg107ObB4gvQBobPPspvTp2ua4LFBLY7sX1JFeBoANdNxA7K0zvxyKwHGr09EfFSclU7yHnjewI2RKwoEUPaehJoGlAProJQ2xtzxd92xeCzPygQITTD6CdApgmF6U7C3tnwLUUd/Fo9z2sVqDh1GZJpmYVUuABr0ib3USgsmSYKIR5j2byyIsi3Zl5DPOw5BV+T9Xcqk6AA/Sa5KTduK1tjq2yAHYTG/I/Dq6os1VfyIIlJ9J72qIa1rlKXCfuzZ3raZqHzoN8Di9pSMm209OAxpo7GF1lf9iz6AxzmUBT8gGVKV8ByRLb2uIifJ0ebrhuGJE7mISYBO9byCuaeO33GL4zCKVG+gHDfGu8vRDAa8GPAwdz83IblXNSmcBhugDHTU6KzPq3scD6aFyaWW3y3FVwxoln1tIHwIA3aBzOmKPjDQjt0vWLK8zeYgrMS5h2GwBSvdE5QC3RIj0CaCuyn5BLUKka0vaOQmYHA1DHgjHc0Oky53Sb9UotpdVahzpa0B9zBVKK5IMGWDFArENHgqkmx2qvgUAD9DHGuL6v1ZjJspRpUjnAe6jj2RRzivOW+woTpIS/in6tEPbFwCT/5+2L7d1e1wuFh5eRuhXASBDlwzEe9saoR1eSQSjQRQ0hXRR9tNnEttFQMSYUmekyPvpCw3x7s7iLKn6KiBdAXiYPpe3r/wbjdM8fdkp8muA8TuK/I6w/4viN9NXOrY3jYZG3quFSN8CGkXv6YVcN9INDXFtJ/rSwVreqylXug7wCH0jsV9fXryJyYBbjpKPARgrWawm8cmh813H0Ln5N0Pn+86hc2v5ofOHtonmcdNQdpgPDw7xdHZg/3B6aGSkkmaPjmTT2cfYUIXbPJutDOPvP50rbu347bH5ftaoiRnLq/vMbWJPNfCttMtDwe00830NEBBXHTEPm7lsv9k0c1sH53Al853MqG3zQP4ConvEDHjYqAkzN5LtN6XgzdwR02V1bubM7azieH0Fp28HdwVzHc/sNwVn9TaXQsNiwjH7TWuW1X0p+1nHD82cOWD2m77nuEIa2YGBrDk3Nyf7tbvuuVXPrmBiz8RM6cndM4VtGDNE0+dLG6vHXDlFJlw+4atZopWn47ZnNercFYnDuWxfXzO3ddCQSSzGS3g+D5j0TrRuo0an+9WXSU9rr6jwqg8UxGS0ze2xAq4GgAmax8Gql1mImfGC6ha1TtuBc4gHWyqh527xA6fuCOcQz0QzZ6xARxExvmipD4UuXAewjo6thZRFP9Ol9b02/bqRbtNvq+gX6E3S8Zj6Bw0Qk5MDQccVFc9uZiJCNKNanMzDnwEAAP//fWg5ylkJAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-69-1 -spec: - metadata: - UpdateOptions: '[{ 0x140006c2e8e}]' - filter: map[_id:e2f6daad-6601-4fe4-81b4-4838b6eefe99] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {e2f6daad-6601-4fe4-81b4-4838b6eefe99 FAILED 1675066334 1675066334 68a5f15b-790f-488c-afa5-d81eaa2347bd 415e534e-10f5-488b-a781-19a4bede11b5 { 0 0 map[] map[] []} [{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]]}] {0 map[] 0 0 } [body.result] {{false 0 0} [] [{true JSON {"result":81,"data":{"name":"Fabio Di Gentanio","team":{"name":"Ducati","championships":"0","points":"1001"}}} {"result":81,"data":{"name":"Fabio Di Gentanio","team":{"name":"Ducati","championships":"0","points":"1001"}}}} {false ERROR error occured}] []} {{"x":1,"y":23} api.Adder.Add} {{"result":81,"data":{"name":"Fabio Di Gentanio","team":{"name":"Ducati","championships":"0","points":"1001"}}} error occured}}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/0zIsQrCMBAA0DtbHCSCHyFuAasxpLMuDl2ErkJqLhqQtjTXD7Q/FqdC1/dMvwxR1L2zTA+K45cxTYA5isry60Pu2o0tYw64rToXfFhK3UcaeCGbWe433AHAJU3ZCteRh9C+xQH2dPLaWeuk1sdCKk9KmqJRUpmzaTSRp7KEfwAAAP//Q6Iu65UAAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5eVken/AQYGBtb/+xgYGQEBAAD//2juDlYRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-69-2 -spec: - metadata: - UpdateOptions: '[{ 0x140006c3430}]' - filter: map[_id:68a5f15b-790f-488c-afa5-d81eaa2347bd] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: map[$inc:[{failure 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-7.yaml b/cmd/server/keploy/mocks/mock-7.yaml deleted file mode 100644 index 307fef2f1..000000000 --- a/cmd/server/keploy/mocks/mock-7.yaml +++ /dev/null @@ -1,32 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-7-0 -spec: - metadata: - FindOneOptions: '[]' - filter: map[_id:68a5f15b-790f-488c-afa5-d81eaa2347bd] - name: mongodb - operation: FindOne.Decode - type: NO_SQL_DB - objects: - - type: '*models.TestRun' - data: H4sIAAAAAAAA/4RUS28cRRCub2Z217uMiQICLhwABSEOiwiJycIBlOzGiUW8ssbeXCwLdWbazqLdmWG6R8InThyA8ApvCIQ/wJ07IYEQzCuE8PgpSIW6Z2d3bGFxmanqqq6vHl8Xv8Jfu0BjTSod5DH4CuEOOEs9+IRGN5NCywgeoTFIo1Kur2qhc2Vc3G7h6h5PU/P3Bkpm9u5qHoZSKXt3UQxHeSaNXFtLtBgVklRagf8movv5LweYX98YJ5EcqceMyVjAV4n4S/7GBbzi8CrhzjLBSiKNVS2ySX7NbjJOR3Ki1YI8LtxbJkJXKDnJeRAs2X8gXwS/RnB7MgV/QfACqVLwB4RaPxkqCX6TUA+kykca/C2hcSpLQ3vtI8JcoZgbnxDRy/yq6ehprdMycBP1ZanPJ5HNYiVLdLIsXkgyk95EHcaF6g6CM8arOQjOrIhMjBX4AqF+WopIZuC3Cd6JJNq25Z8YxiKzoreYZGPwe0T0IL/uAQfHIl1XOhvGWxvFz8bx4RPdx2952BXSNxWSz284cEytPtED/K4DHJyOxAD0hBYGBHyRaIHfcYG52flFggv3OVnkdlaMcqls52orQp+3ItFDfNkB7p6G7clUxpGMw23beb5E9Ax/6gKtquUSwYPXF2Npi13bTgthWRrgCwSvSOFzMtV95gDN9Y31jXwY6445RYso5/dNvsVcJuNtoFVQqJtElp7/2ef5wmdZKiW25P/PcDYXorN8zcUu7ni7MPk6Yb4AVaXTT4SWwS71XwjNnkxL9U8iepq/c4HmUqzL0+um+/V+ko3FCA5h7uRLqQzLF3s81Ll9dkSH+EcHuGc6gQK8gs03iJ7l713A3227sS8E78wweIeIHuEf3ArFdgjOlBo1S42CDj3+2cx6T7VeFWU67RmcP0PzLeP/cIC7qpya9Qp8k+gI/2raVTHcNLXsy6jbRPQw/+4A91ajGmMZ4DaBbxEt8m8uML/HeGtPDWXp+5bwKH9olkZ1rTiVhz7dHqazHxsaV3dO1dU9mWXWL+MrOPRkRyxsHl441z721OOb7aOdTtgWm2KhHXUOSyGeOHL02LkI/1y7HHw1+TaCQb+/1D+FA5HcFPlIPx8m41TE2ziwlaVhO5ZKy6gtzLYvPXKz8h3HoX8DAAD//zy1xX9NBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-7-1 -spec: - metadata: - UpdateOptions: '[{ 0x1400069981a}]' - filter: map[_id:68a5f15b-790f-488c-afa5-d81eaa2347bd] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {68a5f15b-790f-488c-afa5-d81eaa2347bd 0 1674553692 PASSED 0 0 0 []}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMDA/r+JkYmRiQEQAAD//4pyI9BnAAAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-70.yaml b/cmd/server/keploy/mocks/mock-70.yaml deleted file mode 100644 index 45aac0b03..000000000 --- a/cmd/server/keploy/mocks/mock-70.yaml +++ /dev/null @@ -1,791 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-0 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-1 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVW28bVRCeb3dj18GhKgh44QFQEeLBKKJO2/AASu2ERiRR5MSVUBSho91pamTvLnvOSuQJUVootwLlDqUECFBKy/0/8KeQBp1dr72OiHjxzpyZM/PNzHfGclledYHqJmvTSUPIRcJdcJbbqBOqrYSV4QAeodqNg0KubBhlUm1d3Fbu6i7Esf16Xc1Jdncj9X3WOru7pHr9NGErT21GRvVzibXRkL+I6EH50wFmtrYHUcB9/YQ1WQvkEpHckddcwMsPLxHuLgCWgFQ3jEqG+GqtaBD3eahNddIwd5+2EVpK8xBzt7OcfTv8EuR1gtvmGPIJweuwjiGfEabWop5myFuESod12jeQLwjVZ5PYz679RjiSK/bGH0T0ily2HT1rTFwErqGyyuZCFGQo1pPIRKvqxSix8IZqL8xVt9tZsV61bmdlXSVqoCFXCJWzrAJOIO8QvDNRsJuVf6YXqiQTvaUoGUDeJ6KH5Q0PODZQ8ZY2SS/c2c4/WZw66kQPyNseJkLWbYVUlzcdOLbWOtFD8p4DHBuNxCZoK6NsEshVojl51wWOjM+vEly4z3GO7Zzqp6yzzk2tK3MhE4kekY8d4N5R2DbHHAYc+rtZ5+Ua0dPygQtMly3XCB68NTXgrNjN3TgXVtkmvkLwcggfka3uQweobW1vbae90Jy2p5gmSuVTizefy3C8VUznFGpFQUbP/+zzTO6zylqrHf7/GY7nQnROPncxwR1vIqdcJ8zkSXXh9C1h2uYu9B8ItTbHhfoLET0lX7pAbTk0xel12/3KWpQMVB8O4cjiyzH7xYtd8E2aPTui4/KNA9w3mkCevJRbbhA9I1+5QH3SduPQFLI3ziF7RPSYfO2WKLZHcEbUmMqoUdDh+wk6HChb9ona8p2lQ9myb7tYAjIixBhRfQyonj2KOw5wT5l243ZCbhKdkB9tR0uGm7bcQ0l3m4gelZ8d4P5yVGssAtwmyC2iJfnJBWYOGG8dqKHozqElPC6/2r1S3jxOaReMFoxt/u+W6eW1VHZ1F5Mk84vkIo43/fN8ar451+BgdrbRZJ5tnJ735xsnAtU8OTd/8slTc0388/f+8+vD38rSwvLKYhtHAz6v0r55wY8GsQp3cXQnif1GyNpw0FD2/6DwSDUnrkP/BgAA//8J/kYZbQYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-2 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-3 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVW28bVRCeb3dtx2YDSrm98ACoCPFg1KYhDTyAUjuhEUkUOXFfogiOdo8bI++FPWcl8oQoLZRbgXKHUlIoUErL/T/wj3hCGnR2vfY6IuLFO3Nmzsw3M98Z8wV+1QZqW1LpThqCzxHugLXShkuotRIptPThEGrd2C/k6qYWOlXGxW7lrvZiHJuv01Uyye5upp4nlcruLov+IE2kkStbkRaDXJJKK/CfRPQA/2EB09s7QeTLgXrcmIwFfJ6Ib/NrNuDkh+cJdxYAS0Bqm1okQ3z1VhTEAznUKp00zN0bJkJLKDnE3O2sZN+OfAn8OsFuyxj8CcHpSBWDPyNU1qO+kuC3CNWOVOlAg78g1J5NYi+79ithKlfMjd+J6BW+YDp6Wuu4CFxHdU3q3cjPUGwkkY7WxItRYuAN1X6Yq3a3s2q86t3O6oZIRKDAFwnV01L4MgG/Q3BORf5eVv6pfiiSTHSWoyQAv09ED/EbDjATiHhb6aQfnt3JP1kcFy7R/fy2g4mQrqmQXH7TgmVqdYke5PcsYGY0EpOgLbQwScCXiJ7gd21ganx+iWDDfk7m2M6IQSpV1rnKhtC7mUj0MH9sAXePwrZlLENfht5e1nm+TPQ0f2ADjbLlMsGBsy4CmRW7tRfnwpo0iS8SnBzCR2Sq+9AC6ts72ztpP9QL5hQNopQ/NXjzuQzHW0Mjp1Ar8jN6/mefp3OfNamUOCv/f4bjuRCd4c9tTHDHmcjJVwjTeVJVOH1DaJjchf49od6WcaH+TERP8Zc2UF8JdXF6xXS/uh4lgRjAIkwtvRxLr3ixi55Os2dHdJSvWcC9ownkyUu5+SrRM/yVDbiTtquHpuD9cQ7eJ6JH+Wu7RLF9gjWiRiWjRkGH7ybocKBsvk7U5m8NHcqW66aLJSAjQowRuWNAbvYoblvAkTLtxu0E3yA6wT+YjpYMN0y5h5LuFhE9wj9ZwH3lqMZYBLhF4JtEy/yjDUwfMN48UEPRnUNLeIx/MXulvHms0i4YLRjT/N8M08trqexqLyVJ5pfyORx9Uhyfk56cax7rnZxvzs0vnGwuzPsLTX++d+JYb3Z21jsu8M9f1/5+YfhbXV5cWV1q4y5f9kQ60M97URCLcA8zSpi12wwjXzZ7Unu7cAuf1PwtHIGFe+jfAAAA//+eRqxtcwYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-4 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-5 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUzW8bVRCf3+7ajs0GFBBw4QCoCHEwgsQVCQdQaic0IokiJ+4litBj97kxsne3+95K+IQILZSvAuUbSkmhQCkt3/8D/xBHpEFv12uvIyIuuzNv5s38Zub3hi/wqzZQ2ZFKt5MAfEC4A9ZaCy6h0oyl0NKHQ6h0Ij+Xy9ta6EQZF7uZudrLUWT+TkfJOL27nXieVCq9uyp6/SSWRi7thFr0M0kqrcB/EtED/IcFzO7uDUJf9tXjxmQs4PNEfJtfswEnOzxPuDMHWABS2dYiHuGrNsNB1JcjrdROgsy9ZiI0hZIjzJ32Wvpvy3Pg1wl2S0bgTwhOW6oI/BmhtBn2lAS/RSi3pUr6GvwFofJcHHnptV8JM5libvxORK/wBdPR01pHeeAqyhtS74d+imIrDnW4IV4KYwNvpPaCTLU77XXjVe2017dELAYKfJFQPi2FL2PwOwTnVOgP0/JP9QIRp6KzGsYD8PtE9BC/4QBzAxHtKh33grN72S+N48Ilup/fdjAV0jUVkstvWrBMrS7Rg/yeBcyNR2IStIQWJgn4EtFJftcGZibnlwg27Odlhu2M6CdSpZ0rbQm9n4pED/PHFnDPOGxLRjLwZeAN087zZaJn+AMbqBUtlwkOnE0xkGmxO8MoEzakSXyR4GQQPiJT3YcWUN3d291LeoFeNKeoESX8qcGbzWU03gpqGYWaoZ/S8z/7PJv5bEilxFn5/zOczIXoDH9uY4o7zlROvkKYzZKq3OkbQs3kzvXvCdWWjHL1ZyJ6mr+0gepaoPPTK6b75c0wHog+LMLMysuR9PIXu+zpJH12RCf4mgXcO55AlryQm68SPctf2YA7bbt6bAo+nOTgQyJ6lL+2CxQ7JFhjapRSauR0+G6KDkfK5utELf7W0KFouW66WAAyJsQEkTsB5KaP4rYF3F2k3aSd4BtEC/yD6WjBcMOUeyzpbhHRI/yTBdxXjGqMeYBbBL5JtMo/2sDsEePNIzXk3Tm2hMf4F7NXipvHKuyC8YIxzf/NML24loqu9kocp37n+AAnugsN4S81uvWlJ5/q1htPLHbri0tL83W/Mb8gTr4ovYXGPP7569rfB6NveXV5bX2lhbt82RVJX7/ghYNIBEPMKWHWbj0IfVnvSu3tw819EiVju0z/BgAA//9tlk6NbwYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-6 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-7 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RU3W4bVRCeb3dtx2YDCgi44QJQEeLCqCVJnXABSu2ERiRR5MS9CRE63T1pjOzd7Z6zErlClBbKX4HyD6WkUKCUhv934HV4AKRBZ9drryMibnZnzsyZ+WbmO8OX+FUbqGxKpdtJAL5AuAvWcgsuodKMpdDSh0OodCI/l8sbWuhEGRe7mbnaC1Fk/k5HyTi9u5F4nlQqvbskur0klkYubYZa9DJJKq3AfxLRQ/yHBUxubfdDX/bUk8ZkLOCLRHzAr9mAkx1eJNydAywAqWxoEQ/wVZthP+rJgVZqJ0HmXjMRmkLJAeZOezn9t+V58OsEuyUj8CcEpy1VBP6MUFoLu0qC3yKU21IlPQ3+glB5Lo689NqvhIlMMTd+J6JX+JLp6GmtozxwFeVVqXdDP0WxHoc6XBUvhbGBN1C7QabanfaK8ap22ivrIhZ9Bb5MKJ+Wwpcx+B2Ccyr099LyT3UDEaeisxTGffD7RPQIv+EAU30RbSkdd4Nz29kvjePCJXqQ33YwFtI1FZLLb1qwTK0u0cP8ngVMDUdiErSEFiYJ+ArRLL9rAxOj8ysEG/bzMsN2RvQSqdLOldaF3k1Fokf5Ywu4bxi2JSMZ+DLw9tLO81WiZ/gDG6gVLVcJDpw10ZdpsZt7USasSpP4MsHJIHxEproPLaC6tb21nXQDPWdOUSNK+FODN5vLYLwV1DIKNUM/ped/9nky81mVSolz8v9nOJoL0Rn+3MYYd5yxnHyNMJklVbnTN4SayZ3r3xOqLRnl6s9E9DR/aQPV5UDnp9dM98trYdwXPViEicWXI+nlL3bB00n67IiO8Q0LuH84gSx5ITdfJ3qWv7IBd9x2/cgUvD/KwftE9Dh/bRcotk+whtQopdTI6fDdGB0Olc03iVr8raFD0XLTdLEAZEiIESJ3BMhNH8WBBdxbpN2oneBbRNP8g+lowXDLlHsk6e4Q0WP8kwU8UIxqjHmAOwS+TbTEP9rA5CHj7UM15N05soQn+BezV4qbxyrsguGCMc3/zTC9uJaKrvZiHKd+5/kCjk2fbJw4MdfYqTdOzs7XZ46fnanPTXvz9bnGbEPOHJfy7FPz+OevG3+/MPiWlxaWVxZbuMeXOyLp6Re9sB+JYA9TSpi1Ww9CX9Z3pPZ24eY+iZKxXaZ/AwAA///VOaqlbwYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-8 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-9 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bVRCeb3dtx2YDCgh44QFQEeLBSJBADQ+g1E5oRBJFTtyXKEInu8eNkffSPWcl8oQoLZRbgXKHUlIoUErL/T/wZ/gJSIPOrtdeR0R92Z05M2fmm5nvDJ/n12ygtiWV7qYh+CzhDlgrHbiEWjuRQksfDqHWi/1Crm5qoVNlXOx27movxrH5Oz0lk+zuZup5Uqns7rIYDNNEGrmyFWkxzCWptAL/RUQP8J8WMLu9E0S+HKrHjclYwOeI+Ba/bgNOfniOcGcBsASktqlFMsJXb0dBPJQjrdJNw9y9YSK0hZIjzL3uSvbvyjPgNwh2R8bgTwlOV6oY/Dmhsh4NlAS/Tah2pUqHGvwlofZCEnvZtd8IM7libvxBRK/yedPRk1rHReA6qmtS70V+hmIjiXS0Jl6OEgNvpA7CXLV73VXjVe91VzdEIgIFvkConpTClwn4XYJzIvL3s/JPDEKRZKKzHCUB+AMieojfdIC5QMTbSieD8PRO/sviuHCJ7ud3HEyFdE2F5PJbFixTq0v0IL9vAXPjkZgEHaGFSQK+SPQUv2cDM5PziwQb9osyx3ZKDFOpss5VNoTey0Sih/kTC7hnHLYjYxn6MvT2s87zJaLn+EMbaJQtlwgOnHURyKzYrf04F9akSXyB4OQQPiZT3UcWUN/e2d5JB6FumVM0iFL+zODN5zIabw2NnELtyM/o+b99ns191qRS4rS8/QwncyE6xV/YmOKOM5WTLxNm86SqcPqW0DC5C/0HQr0j40L9hYie5a9soL4S6uL0sul+dT1KAjGERZhZeiWWXvFiFz2dZs+O6BhftYB7xxPIk5dy8xWi5/lrG3CnbVeOTMEHkxx8QESP8jd2iWIHBGtMjUpGjYIO30/R4VDZfI2ow98ZOpQt10wXS0DGhJggcieA3OxR3LKAu8u0m7QTfJ1onn80HS0ZrptyjyTdTSJ6hH+2gPvKUY2xCHCTwDeIlvknG5g9ZLxxqIaiO0eW8Bj/avZKefNYpV0wXjCm+b8bppfXUtnVXkqSzO8Mn8Uxrz/vP9HynmnOz/f7zYXWk8ebuwu7Tzfl8VbfEwst4e/u4t+/r/7TH32ry4srq0sd3OXLvkiH+iUvCmIR7mNOCbN2m2Hky2Zfam8PbuGTKpnYVfovAAD//yMyvpNvBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-10 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-11 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUX28bRRCf393Zrs2lKCDghQdARYgHo5QQ0vIASu2ERiRR5MR9iSK08a0bI/vuersnkSdEaaH8K1D+QykpFCil5f934MvwEZAG7Z7PPkdEvNzN7MzO/Gbmt8MX+VUXqGxKpVtpCD5PuAvOchM+odJIpNAygEeotOMgl8sbWuhUGRe3kbm6C3Fs/l5bycTe3Ug7HamUvbskev00kUYubUZa9DNJKq3AfxLRg/yHA0xtbQ+iQPbVE8ZkLOALRHyHX3MBLzu8QDiaAywAqWxokQzxVRvRIO7LoVZqpWHmXjMRGkLJIeZ2a9n+W/Ic+HWC25Qx+BOC15IqBn9GKK1FPSXBbxHKLanSvgZ/Qag8n8Qde+1XwpFMMTd+J6JX+KLp6Gmt4zxwFeVVqXejwKJYTyIdrYqXosTAG6q9MFPddmvFeFXbrZV1kYiBAl8ilE9LEcgE/A7BOxUFe7b8U71QJFb0lqJkAH6fiB7mNzxgeiDiLaWTXnh2O/vZOD58ogf4bQ8TIX1TIfn8pgPH1OoTPcTvOcD0aCQmQVNoYZKALxPN8bsucGR8fpngwn1BZtjOiH4qle1caV3oXSsSPcIfO8C9o7BNGcswkGFnz3aerxA9yx+4QK1ouULw4K2JgbTFbu7FmbAqTeJLBC+D8BGZ6j50gOrW9tZ22gv1CXOKGlHKnxq82VyG462gllGoEQWWnv/Z56nMZ1UqJc7K/5/heC5EZ/hzFxPc8SZy8lXCVJZU5U7fEGomd65/T6g2ZZyrPxPRM/ylC1SXQ52fXjXdL69FyUD04RCOLL4cy07+Yhc6OrXPjugYX3eA+0YTyJIXcvM1ouf4KxfwJ23XDk3B++McvE9Ej/HXboFi+wRnRI2SpUZOh+8m6HCgbL5B1ORvDR2KlhumiwUgI0KMEfljQL59FHcc4J4i7cbtBN8kmuUfTEcLhpum3ENJd5uIHuWfHOD+YlRjzAPcJvAtoiX+0QWmDhhvHagh786hJTzOv5i9Utw8TmEXjBaMaf5vhunFtVR0dReTxPqd4/M4NntyJpgPju/UZ0R3vv7UXPdkfWdn9kS9G8zInfnjT8/JJwP889f1v48Ov+WlheWVxSbuDmRXpH39YicaxCLcw7QSZu3WwyiQ9a7UnV34uU+qZOKW6d8AAAD//50qF5hvBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-12 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-13 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUX28bRRCf393Fjs0FFBDwwgOgIsSDUaM0UPEASu2ERiRR5MR9iSK03K0bI/vuersnkSdEaaH8K1D+QykpFCih5f934JvwKZAG7Z7PPkdEfbmb2Zmd+c3Mb4cv8msuUN2SSrezCHyecBeclRZ8QrWZSqFlCI9Q7SRhIVc2tdCZMi5uM3d1F5PE/L2Okqm9u5kFgVTK3l0WvX6WSiNPbcVa9HNJKq3AfxHRQ/ynA8xs7wziUPbVk8ZkLOALRHybX3cBLz+8QLi7AFgCUt3UIh3iqzXjQdKXQ22qnUW5e91EaAolh5g77RX7b8tz4DcIbksm4E8JXluqBPw5YWo97ikJfptQaUuV9TX4S0L1+TQJ7LXfCNO5Ym78QUSv8kXT0dNaJ0XgGiprUu/GoUWxkcY6XhMvx6mBN1R7Ua66nfaq8ap12qsbIhUDBb5EqJyWIpQp+F2CdyoO92z5p3qRSK3oLcfpAPwBET3Cb3rA7EAk20qnvejsTv6zcXz4RA/yOx4mQvqmQvL5LQeOqdUnepjfd4DZ0UhMgpbQwiQBXyZa4PdcYHp8fpngwn1B5tjOiH4mle3c1IbQu1YkepQ/cYD7RmFbMpFRKKNgz3aerxA9yx+6QL1suULw4K2LgbTFbu0lubAmTeJLBC+H8DGZ6j5ygNr2zvZO1ov0SXOKOlHGnxm8+VyG462inlOoGYeWnv/b55ncZ00qJc7KO89wPBeiM/yFiwnueBM5+SphJk+qCqdvCXWTu9B/INRaMinUX4joGf7KBWorkS5Or5ruV9bjdCD6cAjTS68kMihe7GKgM/vsiI7xdQe4fzSBPHkpN18jeo6/dgF/0nbtyBS8P87B+0T0OH/jlii2T3BG1Jiy1Cjo8P0EHQ6VzTeIWvydoUPZcsN0sQRkRIgxIn8MyLeP4rYD3Fum3bid4JtE8/yj6WjJcNOUeyTpbhHRY/yzAzxQjmqMRYBbBD4gWuafXGDmkPHgUA1Fd44s4Qn+1eyV8uZxSrtgtGBM8383TC+vpbKru5Sm1u8cn8exl7qhONk9PteYlycWGieeCp5uiKA73wiOz4nu3IKUCyLEv39f/+dg+K0sL66sLrVwTyi7IuvrF4N4kIhoD7NKmLXbiOJQNrpSB7vwC59MydSt0H8BAAD//5O5YGZvBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-14 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-15 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUX28bRRCf393Zjs0FFBDwwgOgIsSDkeK0NOUBlNoJjUiiyIn7QBShlW/TGNl319s9iTwhSgvlX4HyH0pJoUApDf+/A1+Ej4E0aPd89jki4uVuZmd25jczvx2+xK+6QGVTKt1OQ/AFwl1wllvwCZVmIoWWATxCpRMHuVze0EKnyri4zczVXYhj8/c6Sib27kba7Uql7N0l0euniTRyaTPSop9JUmkF/pOIHuI/HGB6a3sQBbKvnjQmYwFfJOIDfs0FvOzwIuHuHGABSGVDi2SIr9qMBnFfDrVSOw0z95qJ0BRKDjF32sv235bnwa8T3JaMwZ8QvLZUMfgzQmkt6ikJfotQbkuV9jX4C0LluSTu2mu/EqYyxdz4nYhe4Uumo2e0jvPAVZRXpd6NAotiPYl0tCpeihIDb6j2wkx1O+0V41XttFfWRSIGCnyZUD4jRSAT8DsE73QU7NnyT/dCkVjRW4qSAfh9InqE3/CAmYGIt5ROeuG57exn4/jwiR7ktz1MhPRNheTzmw4cU6tP9DC/5wAzo5GYBC2hhUkCvkJ0gt91ganx+RWCC/d5mWE7K/qpVLZzpXWhd61I9Ch/7AD3jcK2ZCzDQIbdPdt5vkr0DH/gArWi5SrBg7cmBtIWu7kXZ8KqNIkvE7wMwkdkqvvQAapb21vbaS/U8+YUNaKUPzV4s7kMx1tBLaNQMwosPf+zz9OZz6pUSpyT/z/D8VyIzvLnLia4403k5GuE6Sypyp2+IdRM7lz/nlBtyThXfyaip/lLF6guhzo/vWa6X16LkoHowyFMLb4cy27+Yhe6OrXPjugY33CA+0cTyJIXcvN1omf5KxfwJ23Xj0zB++McvE9Ej/PXboFi+wRnRI2SpUZOh+8m6HCobL5J1OJvDR2KlpumiwUgI0KMEfljQL59FAcOcG+RduN2gm8RzfEPpqMFwy1T7pGku0NEj/FPDvBAMaox5gHuEPg20RL/6ALTh4y3D9WQd+fIEp7gX8xeKW4ep7ALRgvGNP83w/TiWiq6uotJYv3O8wUck6fmd+bkSVlvnGrM1o+LnaAuTs436k8F86Ixe2K2ERyfwz9/3fj7heG3vLSwvLLYwj2B3BFpX7/YjQaxCPcwo4RZu/UwCmR9R+ruLvzcJ1Uyccv0bwAAAP//2ZNl6G8GAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-16 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-17 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RU3W4bVRCeb3dtx2YDCgi44QJQEQLJiNYJpFyAUjuhEUkUOXFvoggd7R43Rvbuds9ZCV8hSgvlr0D5h1JSKFBKw/878CI8BtKgs+u11xERN7szZ+bMfDPzneGL/KoNVLal0u0kAJ8n3AFrtQWXUGnGUmjpwyFUOpGfy+UtLXSijIvdzFztpSgyf6ejZJze3Uo8TyqV3l0RvX4SSyOXtkMt+pkklVbgP4noAf7DAmZ3dgehL/vqCWMyFvAFIj7g12zAyQ4vEO7MARaAVLa0iEf4qs1wEPXlSCu1kyBzr5kITaHkCHOnvZr+2/Ic+HWC3ZIR+BOC05YqAn9GKG2EPSXBbxHKbamSvgZ/Qag8H0deeu1XwkymmBu/E9ErfNF09LTWUR64ivK61Huhn6LYjEMdrouXwtjAG6m9IFPtTnvNeFU77bVNEYuBAl8ilE9L4csY/A7BORX6w7T8U71AxKnorITxAPw+ET3EbzjA3EBEO0rHveDsbvZL47hwie7ntx1MhXRNheTymxYsU6tL9CC/ZwFz45GYBC2hhUkCvky0wO/awMzk/DLBhv2CzLCdEf1EqrRzpU2h91KR6GH+2ALuGYdtyUgGvgy8Ydp5vkL0LH9gA7Wi5QrBgbMhBjItdnsYZcK6NIkvEZwMwkdkqvvQAqo7uzu7SS/Qi+YUNaKEPzV4s7mMxltBLaNQM/RTev5nn2czn3WplDgr/3+Gk7kQneHPbUxxx5nKyVcJs1lSlTt9Q6iZ3Ln+PaHaklGu/kxEz/CXNlBdDXR+etV0v7wRxgPRh0WYWX45kl7+Ypc8naTPjugYX7eAe8cTyJIXcvM1ouf4Kxtwp23XjkzB+5McvE9Ej/LXdoFi+wRrTI1SSo2cDt9N0eFQ2XyDqMXfGjoULTdMFwtAxoSYIHIngNz0URxYwN1F2k3aCb5J1OAfTEcLhpum3CNJd5uIHuGfLOC+YlRjzAPcJvAtohX+0QZmDxlvHaoh786RJTzGv5i9Utw8VmEXjBeMaf5vhunFtVR0tZfjOPU7x+dx7ORCo7vQeHK+Pt9tNOrz80+frIvuca9+vPHUCV/IEwuLi4v456/rfz8++pZXllbXllu4y5ddkfT1i144iEQwxJwSZu3Wg9CX9a7U3h7c3CdRMrbL9G8AAAD//9QyPZxvBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-18 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-19 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVX28bRRCf393Zrs0FFBDwwgOgIsSDUZKmTeEBlNoJjUiiyIn7EkVo8a0bI/vuuN2TyBOitFAKFCj/oZQUCpTS8v878Bn4LkiDds9nnyMiXnwzO7Mzv5n57Zgv8GsuUNmSSrfSEHyOcBeclSZ8QqWRSKFlAI9QacdBLpc3tdCpMi5uI3N1F+PYfL22kom9u5l2OlIpe3dZ9PppIo1c2oq06GeSVFqB/ySih/gPB5ja3hlEgeyrJ43JWMDnifgOv+4CXnZ4nnB3DrAApLKpRTLEV21Eg7gvh1qplYaZe81EaAglh5jbrRX7bcmXwW8Q3KaMwZ8QvJZUMfgzQmk96ikJvkQot6RK+xr8BaHyXBJ37LVfCUcyxdz4nYhe5Qumo6e1jvPAVZTXpN6NAotiI4l0tCZeihIDb6j2wkx1261V41Vtt1Y3RCIGCnyRUD4tRSAT8DsE71QU7NnyT/VCkVjRW46SAfh9InqE3/SA6YGIt5VOeuHZnexj4/jwiR7ktz1MhPRNheTzWw4cU6tP9DC/5wDTo5GYBE2hhUkCvkx0nN91gSPj88sEF+7zMsN2RvRTqWznShtC71qR6FH+2AHuG4VtyliGgQw7e7bzfIXoGf7ABWpFyxWCB29dDKQtdmsvzoQ1aRJfJHgZhI/IVPehA1S3d7Z30l6oT5pT1IhS/tTgzeYyHG8FtYxCjSiw9PzPPk9lPmtSKXFW/v8Mx3MhOsOfu5jgjjeRk68SprKkKnf6hlAzuXP9e0K1KeNc/ZmInuYvXaC6Eur89Krpfnk9SgaiD4dwZOmVWHbyF7vY0al9dkRH+boD3D+aQJa8kJuvET3LX7mAP2m7dmgK3h/n4H0iepy/dgsU2yc4I2qULDVyOnw3QYcDZfMNoiZ/a+hQtNwwXSwAGRFijMgfA/Lto7jjAPcWaTduJ/gm0TH+wXS0YLhpyj2UdLeJ6DH+yQEeKEY1xjzAbQLfIlrmH11g6oDx1oEa8u4cWsIT/IvZK8XN4xR2wWjBmOb/ZpheXEtFV3cpSaxfyudwdH52YWHmxEK3PnPs5Gx9fn5B1MXs7Fx9Zq47N999UTx1/ESAf/66/vel4W95eXFldamJewLZFWlfv9CJBrEI9zCthFm79TAKZL0rdWcXfu6Tmr8FDw7K9G8AAAD//1qxgN9zBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-20 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-21 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RV3W4bVRCeb3dtx2YDCgi44QJQEeLCSFHdkHABSu2ERjRRZMe9iSJ0vHvSGNm7y56zErlClBbKX4HyD6WkUKCUlv93gEfgYZAGnV2vvY6IeuOdOTNn5puZ74z5Ar9qA5UtqXQ7CcDnCHfBWmvBJVSasRRa+nAIlW7k53K5o4VOlHGxm5mrvRxF5ut0lYzTu53E86RS6d1V0R8ksTRyaSvUYpBJUmkF/pOIHuI/LGB2e2cY+nKgnjQmYwGfJ+Lb/JoNONnhecLdOcACkEpHi3iEr9oMh9FAjrRSOwky95qJ0BRKjjB322vpty1fAr9OsFsyAn9CcNpSReDPCKWNsK8k+C1CuS1VMtDgLwiV5+LIS6/9SpjJFHPjdyJ6hS+Yjp7SOsoDV1Fel3ov9FMUm3Gow3XxYhgbeCO1H2Sq3W2fNl7Vbvv0pojFUIEvEsqnpPBlDH6H4JwM/f20/JP9QMSp6KyG8RD8PhE9wm84wNxQRNtKx/3g7E72SeO4cIke5LcdTIV0TYXk8psWLFOrS/Qwv2cBc+ORmAQtoYVJAr5EdILftYGZyfklgg37eZlhOyMGiVRp50qbQu+lItGj/LEF3DcO25KRDHwZePtp5/ky0TP8gQ3UipbLBAfOhhjKtNit/SgT1qVJfJHgZBA+IlPdhxZQ3d7Z3kn6gV40p6gRJfypwZvNZTTeCmoZhZqhn9Lzf/s8m/msS6XEWXnnGU7mQnSGP7cxxR1nKidfIcxmSVXu9A2hZnLn+veEaktGufozET3NX9pAdS3Q+ekV0/3yRhgPxQAWYWbl5Uh6+Ytd9nSSPjuiY3zNAu4fTyBLXsjNV4me5a9swJ22XT0yBR9McvABET3OX9sFih0QrDE1Sik1cjp8N0WHQ2XzdaIWf2voULRcN10sABkTYoLInQBy00dx2wLuLdJu0k7wDaLj/IPpaMFww5R7JOluEdFj/JMFPFCMaox5gFsEvkm0yj/awOwh481DNeTdObKEJ/gXs1eKm8cq7ILxgjHN/80wvbiWiq72ShynforP4VhjodebXxJe/al5sVhvLDVO1EVvcb4+v7BwfLfXkEt+o4d//7r2z9+j3/Lmcqez0sI9vtwVyUC/4IXDSAT7mFPCrN16EPqyviu1twc390nM30LZKtN/AQAA//+iCZtMcQYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-22 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-23 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVW28bVRCeb3dtx2YDCgh44QFQEeLBKErSFngApXZCI5oosuO+RBE63j1tjLwX9pyVyBOitFBuBcodSkmhQCkt9//AX+DHIA06u157HRH1xTtzZs7MNzPfGfMFfs0GaltS6U4ags8R7oK11oZLqLUSKbT04RBqvdgv5GpXC50q42K3cld7OY7N1+kpmWR3u6nnSaWyu6tiMEwTaeTKVqTFMJek0gr8FxE9xH9awOz2ThD5cqieNCZjAZ8n4tv8ug04+eF5wt0FwBKQWleLZISv3oqCeChHWqWThrl7w0RoCSVHmHudtezbkS+D3yDYbRmDPyU4Hali8OeEykY0UBL8NqHakSodavCXhNrzSexl134jzOSKufEHEb3KF0xHT2odF4HrqK5LvRv5GYrNJNLRungpSgy8kToIc9XudU4Zr3qvc2pTJCJQ4IuE6kkpfJmA3yU4JyJ/Lyv/xCAUSSY6q1ESgD8gokf4TQeYC0S8rXQyCM/u5J8sjguX6EF+x8FUSNdUSC6/ZcEytbpED/P7FjA3HolJ0BZamCTgS0RH+T0bmJmcXyLYsF+QObbTYphKlXWusin0biYSPcqfWMB947BtGcvQl6G3l3WeLxM9yx/aQKNsuUxw4GyIQGbFbu3FubAuTeKLBCeH8DGZ6j6ygPr2zvZOOgj1U+YUDaKUPzN487mMxltDI6dQK/Izev5vn2dzn3WplDgr7zzDyVyITvMXNqa440zl5CuE2TypKpy+JTRM7kL/gVBvy7hQfyGiZ/grG6ivhbo4vWK6X92IkkAMYRFmVl6JpVe82GVPp9mzIzrC1yzg/vEE8uSl3HyV6Dn+2gbcadvVQ1Pw/iQH7xPR4/yNXaLYPsEaU6OSUaOgw/dTdDhQNl8navN3hg5ly3XTxRKQMSEmiNwJIDd7FLct4N4y7SbtBN8gWuQfTUdLhhum3ENJd4uIHuOfLeCBclRjLALcIvBNolX+yQZmDxhvHqih6M6hJTzBv5q9Ut48VmkXjBeMaf7vhunltVR2tVeSJPNTfA5HFo570vP6x5vH/Pml5lJ/frEpfLnQPNbvLx19enG+vzAv8e/f1/7ZH/1WN5e73ZU27vHlGZEO9YteFMQi3MOcEmbtNsPIl80zUnu7cAuf1PwtVK0q/RcAAP//E1nRn3EGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-24 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-25 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RV3W4bVRCeb3dtx2YDCgi44QJQEeLCqCVtEnEBSu2ERjRRZMe9iSJ0vHvSGNm7y56zEr5ClBbKX4HyD6WkUKCUlr/yDrwGD4I06Ox67XVE1BvvzJk5M9/MfGfMF/h1G6hsSaVbSQA+R7gH1loTLqHSiKXQ0odDqHQiP5fLbS10ooyL3chc7eUoMl+no2Sc3m0nnieVSu+uil4/iaWRS1uhFv1Mkkor8F9E9AjfsYDZ7Z1B6Mu+etqYjAV8nohv8xs24GSH5wn35gALQCptLeIRvmojHER9OdJKrSTI3GsmQkMoOcLcaa2l35Z8BfwmwW7KCPwZwWlJFYG/IJQ2wp6S4HcI5ZZUSV+DvyJUXogjL732O2EmU8yNP4noNb5gOnpK6ygPXEV5Xeq90E9RbMahDtfFy2Fs4I3UXpCpdqd12nhVO63TmyIWAwW+SCifksKXMfg9gnMy9Idp+Sd7gYhT0VkN4wH4QyJ6jN9ygLmBiLaVjnvB2Z3sk8Zx4RI9zO86mArpmgrJ5bctWKZWl+hR/sAC5sYjMQmaQguTBHyJ6AS/bwMzk/NLBBv2izLDdkb0E6nSzpU2hd5LRaLH+VMLeGActikjGfgy8IZp5/ky0XP8kQ3UipbLBAfOhhjItNitYZQJ69IkvkhwMgifkKnuYwuobu9s7yS9QC+ZU9SIEv7c4M3mMhpvBbWMQo3QT+n5v32ezXzWpVLirLz7DCdzITrDX9qY4o4zlZOvEGazpCp3+o5QM7lz/UdCtSmjXP2ViJ7lr22guhbo/PSK6X55I4wHog+LMLPyaiS9/MUuezpJnx3REb5mAQ+OJ5AlL+Tmq0TP8zc24E7brh6agvcnOXifiJ7kb+0CxfYJ1pgapZQaOR1+mKLDgbL5OlGTvzd0KFqumy4WgIwJMUHkTgC56aO4bQH3F2k3aSf4BtE8/2Q6WjDcMOUeSrpbRPQE/2IBDxWjGmMe4BaBbxKt8s82MHvAePNADXl3Di3hKf7N7JXi5rEKu2C8YEzz/zBML66loqu9Esepn+JzOPJMt3t0vjt/rH5iaXepflwc7daFt+DXj8uF3WOLiwvdpcVF/Pv3tTv/jH7Lm8vt9koT9/lyVyR9/ZIXDiIRDDGnhFm79SD0ZX1Xam8Pbu6TmL+FslWm/wIAAP//C18uQnEGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-26 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-27 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RV3W4bVRCeb3dtx2YDCgi44QJQEeLCCFonClyAUjuhEU0U2XFvogid7p40RvbusueshK8QoYXyV6BQfktJoUApDf/vwEvwGFwiDTq7XnsdEXHjnTkzZ+abme+M+QK/agOVTal0OwnAe4Q7YK224BIqzVgKLX04hEo38nO53NFCJ8q42M3M1V6KIvN1ukrG6d1O4nlSqfTuiuj1k1gaubQZatHPJKm0Av9BRA/w7xYwu7U9CH3ZV48bk7GAzxPxAb9mA052eJ5wZw6wAKTS0SIe4as2w0HUlyOt1E6CzL1mIjSFkiPM3fZq+m3Ll8CvE+yWjMAfE5y2VBH4U0JpPewpCX6LUG5LlfQ1+HNC5bk48tJrvxBmMsXc+I2IXuELpqOntI7ywFWU16TeDf0UxUYc6nBNvBjGBt5I7QWZanfbp41Xtds+vSFiMVDgi4TyKSl8GYPfITgnQ3+Yln+yF4g4FZ2VMB6A3yeih/gNB5gbiGhL6bgXnNvOPmkcFy7R/fy2g6mQrqmQXH7TgmVqdYke5PcsYG48EpOgJbQwScCXiOb5XRuYmZxfItiwn5cZtjOin0iVdq60IfRuKhI9zFcs4J5x2JaMZODLwBumnefLRM/wBzZQK1ouExw462Ig02I3h1EmrEmT+CLBySB8RKa6Dy2gurW9tZ30Ar1oTlEjSvgTgzeby2i8FdQyCjVDP6Xnf/Z5NvNZk0qJc/L/ZziZC9EZ/szGFHecqZx8lTCbJVW509eEmsmd698Rqi0Z5epPRPQ0f2ED1dVA56dXTffL62E8EH1YhJnllyPp5S92ydNJ+uyIjvF1C7h3PIEseSE3XyN6lr+0AXfadu3IFLw/ycH7RPQof2UXKLZPsMbUKKXUyOnw7RQdDpXNN4ha/I2hQ9Fyw3SxAGRMiAkidwLITR/FgQXcXaTdpJ3gm0Qn+HvT0YLhpin3SNLdJqJH+EcLuK8Y1RjzALcJfItohX+wgdlDxluHasi7c2QJj/HPZq8UN49V2AXjBWOa/6thenEtFV3t5ThO/RTv4dhiQ8od4Z2tLzaOP1Vv7JwVdXFcGmnhyfnFxsJC48Q8/vnz+pW/zO/feyhvLHU6yy3c5csdkfT1C144iEQwxJwSZu3Wg9CX9R2pvV24uU9i/haesMr0bwAAAP//49WFk3EGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-28 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-29 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RV3W8bRRCf393Zjs0FFBDwkgdARYgHo7ZOSs0DKLUTGtFEkR33JYrQ4ls3RvbdcbsnkSdEaaF8ldLyTSkpFCil4ft/4J9CGrR3PvscEfXFN7MzO/Obmd+O+SK/aQOlTal0K/bB5wn3wVptwiWUGpEUWnpwCKVO6GVysa2FjpVxsRupq70UhubrdJSMkrvtuNuVSiV3V0R/EEfSyIXNQItBKkmlFfhvIprnvyxgdmt7GHhyoJ4xJmMBXyDifX7LBpz08ALh/gxgDkiprUU0wlduBMNwIEdaoRX7qXvFRGgIJUeYO63V5NuSr4HfJthNGYI/IzgtqULwF4TCetBXEvweodiSKh5o8FeE0otR2E2u/U6YSRVz408ieoMvmo6e1jrMApdRXJN6J/ASFBtRoIM18WoQGXgjte+nqt1pnTFe5U7rzIaIxFCBLxGKp6XwZAT+gOCcCrzdpPxTfV9EieisBNEQfIWIHud3HGBuKMItpaO+f247/SRxXLhEj/L7DqZCuqZCcvldC5ap1SV6jD+ygLnxSEyCptDCJAFfJlrkD21gZnJ+mWDDfkmm2M6KQSxV0rnChtA7iUj0BH9qAQ+NwzZlKH1P+t3dpPN8leh5/tgGKnnLVYIDZ10MZVLs5m6YCmvSJL5EcFIIn5Cp7poFlLe2t7bjvq9PmlNUiGL+3OBN5zIabwmVlEKNwEvo+b99nk191qRS4py89wwncyE6y1/amOKOM5WTrxNm06Qqc/qOUDG5M/1HQrkpw0z9lYie469toLzq6+z0uul+cT2IhmIAizCz/Hoou9mLXerqOHl2REf4pgU8PJ5AmjyXm28QvcDf2IA7bbtxaArem+TgPSJ6ir+1cxTbI1hjahQSamR0+GGKDgfK5ltETf7e0CFvuWW6mAMyJsQEkTsB5CaPYt8CHszTbtJO8G2iGv9kOpoz3DblHkq6u0T0JP9iAY/koxpjFuAuge8QrfDPNjB7wHjnQA1Zdw4t4Wn+zeyV/OaxcrtgvGBM8/8wTM+vpbyrvRxFiZ/i8zjySu1kt774bL16vHesVl2o92pVceLYYrV29ER9sX50obdwfAH//nPz2pXRb3Fjqd1ebuIBT/ZEPNAvd4NhKPxdzClh1m7VDzxZ7Und3YGb+cTmb2Hemqf/AgAA///7RAxzcQYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-30 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-31 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW2/cVBCez3Z2s8EBBQS89AFQEeJhUdNu1ZYHUJpNaEQSRZukL1GETteTZtGu7focS+QJUVoot1DKHUpJoUApLff/wJ9CGnTs9a43IuqLPXNmzsw3M98ZuSxvuEB1jbVppSHkIuEBOAtN+ITqbMLKcACPUF2Pg0KurBplUm1d3Nnc1Z2JY/v31jUn2d3VtN1mrbO786rTTRO28thaZFQ3l1gbDfmbiA7JXw4wubHZiwLu6uesyVogl4jknrzpAl5+eInwYAGwBKS6alTSx1ebjXpxl/vaWCsNc/cJG2FWae5jXm8tZP8WX4C8RXCbHEM+I3gt1jHkC8LYctTRDHmXUGmxTrsG8hWh+lISt7NrvxPGc8Xe+JOIXpfLtqNnjImLwDVUlthsR0GGYiWJTLSkXo0SC6+vdsJcdddbi9artt5aXFGJ6mnIFULlDKuAE8j7BO90FOxk5Z/uhCrJRG8+SnqQq0T0pLztAVM9FW9ok3TC85v5L4vjwyd6XN7zMBLStxWSL+84cGytPtET8qEDTA1GYhM0lVE2CWSX6Lh84ALjw/Ndggv3Zc6xnVXdlHXWubEVZbYzkegp+dQBHhmEbXLMYcBheyfrvFwjekE+coGJsuUawYO3rHqcFbu2E+fCEtvEVwheDuETstV97AC1jc2NzbQTmpP2FBNEqXxu8eZz6Y+3iomcQrNRkNHzf/s8mfsssdbqPN9/hsO5EJ2VL12McMcbySnXCZN5Ul04fUeYsLkL/UdCrclxof5KRM/L1y5QWwhNcXrddr+yHCU91YVDGJ97LeZ28WJn2ibNnh3RYbnpAI8OJpAnL+WWG0Qvyjcu4I/abhyYQvaGOWSPiJ6Rb90SxfYIzoAaYxk1Cjr8MEKHfWXLLaKmfG/pULbcsl0sARkQYojIHwLys0dxzwEeLtNu2E7IbaJj8pPtaMlw25Z7IOnuEtHT8osDPFaOao1FgLsEuUM0Lz+7wOQ+4519NRTdObCEZ+U3u1fKm8cp7YLBgrHN/8MyvbyWyq7uXJJkfhfkIg4H06cajSNbjfr0CRXUG+eY66emT3D9aOPoscZJVu0jx8/h339uXt3tfyvzMwuLc008FPCWSrvmlXbUi1W4gymt7Nqth1HA9S027W34hU+qOXEP0X8BAAD//zRHcV5vBgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-32 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-33 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RUW28bVRCeb3dtx2YDCgh46QOgIsSDUaM0VcMDKLUTGpFEkRP3JYrgZPekMfJeuuesRJ4QpYVyC1DuUEoKBUppuf8H/hTSoLPrtdcRUV92Z87Mmflm5jvDl/l1G6htSKU7aQi+SLgP1lIbLqHWSqTQ0odDqHVjv5Cr61roVBkXu5W72vNxbP5OV8kku7ueep5UKru7KHr9NJFGrmxEWvRzSSqtwH8T0TH+ywImN7eCyJd99YwxGQv4EhHf5TdswMkPLxHuLwCWgNTWtUgG+OqtKIj7cqBVOmmYuzdMhJZQcoC521nK/h15AfwmwW7LGPwZwelIFYO/IFRWo56S4HcI1Y5UaV+DvyLUXkhiL7v2O2EiV8yNP4noNb5sOnpW67gIXEd1RerdyM9QrCWRjlbEK1Fi4A3UXpirdrezbLzq3c7ymkhEoMBXCNWzUvgyAb9HcM5E/l5W/pleKJJMdBajJAB/SESP81sOMBWIeFPppBee38p/WRwXLtGj/K6DsZCuqZBcftuCZWp1iR7jDyxgajgSk6AttDBJwPtEs/y+DUyMzvcJNuwXZY7tnOinUmWdq6wJvZuJRE/wpxbw0DBsW8Yy9GXo7WWd56tEz/FHNtAoW64SHDirIpBZsRt7cS6sSJP4CsHJIXxCprqPLaC+ubW5lfZCfdqcokGU8ucGbz6XwXhraOQUakV+Rs//7fNk7rMilRLn5b1nOJoL0Tn+0sYYd5yxnHyNMJknVYXTd4SGyV3oPxLqbRkX6q9E9Cx/bQP1pVAXp9dM96urURKIPizCxMKrsfSKFzvv6TR7dkTH+YYFPDycQJ68lJuvEz3P39iAO267fmQKPhjl4AMieoq/tUsUOyBYQ2pUMmoUdPhhjA6HyuabRG3+3tChbLlpulgCMiTECJE7AuRmj+KuBTxYpt2oneBbRDP8k+loyXDLlHsk6e4Q0ZP8iwU8Uo5qjEWAOwS+TbTIP9vA5CHj7UM1FN05soSn+TezV8qbxyrtguGCMc3/wzC9vJbKrvZCkmR+F/gijs9Nb3snZk9NN2fl9kzz5MnTojknxFzzlLcjT8iZaTm97eHff27svzz4Vhfnl5YX2njAlzsi7euXvCiIRbiHKSXM2m2GkS+bO1J7u3ALn1TJxD5G/wUAAP//PaVFum8GAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-34 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-35 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RU3W8bRRCf393Zjs0FFBDw0gdARYgHI6VJaMQDKLUTGpFEkRP3JYrQ5m7TuPJ99HZPIk+I0kIpUKB8QykpFCil5ft/4J9CGrR3PvscEfXlbmZnduY3M78dvsRv2EBtUyrdSUPwBcIDsJbbcAm1ViKFlj4cQq0b+4Vc3dBCp8q42K3c1V6IY/N3ukom2d2N1POkUtndJdHrp4k0cmUz0qKfS1JpBf6biI7xXxYwubUdRL7sq+eMyVjAF4n4Hr9pA05+eJHwYAGwBKS2oUUywFdvRUHclwOt0knD3L1hIrSEkgPM3c5y9u/I8+C3CHZbxuDPCE5Hqhj8BaGyFvWUBF8hVDtSpX0N/opQezmJveza74SJXDE3/iSi1/mS6ehpreMicB3VVan3Ij9DsZ5EOloV56LEwBuovTBX7W5nxXjVu52VdZGIQIEvE6qnpfBlAn6P4JyK/P2s/FO9UCSZ6CxFSQD+kIie5LcdYCoQ8ZbSSS88u53/sjguXKLH+V0HYyFdUyG5/I4Fy9TqEj3BH1jA1HAkJkFbaGGSgK8SzfH7NjAxOr9KsGG/InNsZ0Q/lSrrXGVd6L1MJHqKP7WAR4Zh2zKWoS9Dbz/rPF8jepE/soFG2XKN4MBZE4HMit3cj3NhVZrElwlODuETMtV9bAH1re2t7bQX6nlzigZRyp8bvPlcBuOtoZFTqBX5GT3/t8+Tuc+qVEqclfef4WguRGf4Sxtj3HHGcvJ1wmSeVBVO3xEaJneh/0iot2VcqL8S0Qv8tQ3Ul0NdnF433a+uRUkg+rAIE4uvxdIrXuyCp9Ps2REd55sW8OhwAnnyUm6+QfQSf2MD7rjtxpEp+GCUgw+I6Bn+1i5R7IBgDalRyahR0OGHMTocKptvEbX5e0OHsuWW6WIJyJAQI0TuCJCbPYp7FvBwmXajdoJvE83wT6ajJcNtU+6RpLtLRE/zLxbwWDmqMRYB7hL4DtES/2wDk4eMdw7VUHTnyBKe5d/MXilvHqu0C4YLxjT/D8P08loqu9qLSZL5necLOL6zMz0z5/te88TJXb85e3J3urmz4z/fnJ8T89Ozcydmpr1Z/PvPzSvnBt/q0sLyymIbD/lyV6R9/aoXBbEI9zGlhFm7zTDyZXNXam8PbuGTKpnYx+i/AAAA///XC6W1bwYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-36 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-37 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RV3W8bRRCf393Zjs2FqiDghQdARYgHI0obangApXZCI5ooOsd9iSK0vdukRvbdcbsn4SdEaaF8FSjfUNoABUpp+H7gP+CfQhq0dz77HBHxcjuzMzvzm5nf7vFFftUGahtSaS8NwecJd8Ba6cAl1NqJFFoGcAi1XhwUcrWrhU6VcbHbuau9GMdmdXpKJtnZbur7Uqns7LLoD9JEGrmyEWkxyCWptAL/SUT38x8WML+5NYwCOVCPGZOxgC8Q8R6/ZgNOvnmBcGcBsASk1tUiGeOrt6NhPJBjreKlYe7eMBHaQskx5p63kq2efAn8OsHuyBj8CcHxpIrBnxEqa1FfSfBbhKonVTrQ4C8IteeS2M+O/UqYyxVz4ncieoUvmo6e0jouAtdRXZX6XBRkKNaTSEer4sUoMfDGaj/MVbvnnTZe9Z53el0kYqjAlwjVU1IEMgG/Q3BORsEoK/9kPxRJJjrLUTIEv09ED/IbDnB4KOJNpZN+uLOVL1kcFy7Rffy2g5mQrqmQXH7TgmVqdYke4Pcs4PBkJCZBR2hhkoAvEy3wuzYwN92/TLBhPy9zbGfEIJUq61xlXehzmUj0EH9sAXdPwnZkLMNAhv4o6zxfIXqGP7CBRtlyheDAWRNDmRW7MYpzYVWaxJcITg7hIzLVfWgB9c2tza20H+qW2UWDKOVPDd58LuPx1tDIKdSOgoye/9nn+dxnVSolduT/z3A6F6Iz/LmNGe44Mzn5KmE+T6oKp28IDZO70L8n1DsyLtSfiehp/tIG6iuhLnavmu5X16JkKAawCHNLL8fSL27soq/T7NoRHeGvLeCeyQTy5KXcfI3oWf7KBtxZ27UDU/DuNAfvEtEjfN0uUWyXYE2oUcmoUdDhuxk67CubbxB1+FtDh7LlhuliCciEEFNE7hSQm12KPQu4q0y7aTvBN4mO8Q+moyXDTVPugaS7TUQP808WcG85qjEWAW4T+BbRMv9oA/P7jLf21VB058ASHuVfzLtSfnms0lsweWBM838zTC8/S2VXeylJMj/F53HkyZZY2D66cLZ54qnHt5vHWy2/KbbFQjNoHZVCPHHs+ImzAf75+7r31/hbXV/sdpc6OBTIbZEO9At+NIxFOMKhnST2m6FUWgZNYf4HhUdqfgoOHFj0bwAAAP//d4CR23EGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-38 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-39 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVzW8bVRCf3+7ajo0DKp8XDoCKEAejEKeFcgCldkIjmiiy416iCD15Xxuj9e6y7y0iJ0RpoXwVKN8QSoACpbR8/w/8Oxx6RBr03nrtdUTUi3fmzbyZ38z83pjP86suUNmQSnfSEHyWcBuclTbqhEorkUJLHx6h0ov9XC53tdCpMi5uK3N1F+PYfL2ekom92037famUvbssBkGaSCOXNiItgkySSivwX0R0P//pALObW8PIl4F6zJiMBXyOiG/way7gZYfnCLfnAAtAKl0tkhG+aisaxoEcaaVOGmbuNROhJZQcYe51Vuy3I18Ev05w2zIGf0LwOlLF4M8IpbVooCT4LUK5I1UaaPAXhMqzSdy3134jzGSKufEHEb3C501HT2gd54GrKK9KvR35FsV6EuloVbwQJQbeSB2Emer2OieNV7XXObkuEjFU4AuE8gkpfJmA3yF4xyN/x5Z/fBCKxIrecpQMwe8T0YP8hgccGop4U+lkEJ7Zyj42Th11ovv4bQ9TIeumQqrzmw4cU2ud6AF+zwEOjUdiErSFFiYJ+CLREX7XBWYm5xcJLtznZIbtlAhSqWznSutCb1uR6CH+2AHuGodty1iGvgz7O7bzfInoaf7ABWpFyyWCB29NDKUtdmMnzoRVaRJfIHgZhI/IVPehA1Q3tza30kGonzSnqBGl/KnBm81lNN4KahmFWpFv6fm/fZ7NfFalUuKMvPUMJ3MhOsWfu5jijjeVk3cJs1lSlTt9S6iZ3Ln+A6HalnGu/kJET/GXLlBdCXV+umu6X16LkqEI4BBmll6OZT9/sYt9ndpnR3SYv3GAe8YTyJIXcvNlomf4KxeoT9suH5iC9yY5eI+IHuGv3QLF9gjOmBolS42cDt9P0WFf2XyFqM3fGToULVdMFwtAxoSYIKpPANXto7jhAHcWaTdpJ/gqUZN/NB0tGK6acg8k3XUieph/doB7i1GNMQ9wncDXiJb5JxeY3We8tq+GvDsHlvAo/2r2SnHzOIVdMF4wpvm/G6YX11LR1V1KEuv3Ep/F4Wb/9PzRuaPNxtwx+XhjQSzMN4Tv+40F2fTFfL955Im5Y/j3792b/9jfmyivL3a7S23c4cvTIg308/1oGItwB3crYdZuI02ChtqOEi1D81+Qu6Xmn8FzPPovAAD///4r1Od0BgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-40 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-41 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RV3W8bRRCf393Fjo0DKp8vPAAqQjwYtSQ0gQdQaic0ooksO+5LFKGNb9MYne+O2z1EnhClhfJVoHxDKAEKlNLy/T/w9/CONGj3fPY5IuqLb2ZnduY3M78d8wV+1QXK61LpdhqCzxFug7PSRI1QbiRSaOnDI5S7sZ/LpY4WOlXGxW1kru5iHJuv11UysXc7aa8nlbJ3l0U/SBNp5Kn1SIsgk6TSCvwXEd3PfzrAzMbmIPJloB4zJmMBnyfim/yaC3jZ4XnC7TnAApByR4tkiK/SiAZxIIfaVDsNM/eqidAQSg4xd9sr9tuWL4JfJ7hNGYM/IXhtqWLwZ4SptaivJPgtQqktVRpo8BeE8rNJ3LPXfiNMZ4q58QcRvcIXTEdPaR3ngSsorUq9E/kWRSuJdLQqXogSA2+o9sNMdbvt08ar0m2fbolEDBT4IqF0SgpfJuB3CN7JyN+15Z/shyKxorccJQPw+0T0IL/hAUcGIt5QOumHZzezj41TQ43oPn7bw0TImqmQavymA8fUWiN6gN9zgCOjkZgETaGFSQK+RPQEv+sC0+PzSwQX7nMyw3ZGBKlUtnNTLaF3rEj0EH/sAHeNwjZlLENfhr1d23m+TPQ0f+AC1aLlMsGDtyYG0ha7vhtnwqo0iS8SvAzCR2Sq+9ABKhubG5tpP9QL5hRVopQ/NXizuQzHW0Y1o1Aj8i09/7fPM5nPqlRKnJW3nuF4LkRn+HMXE9zxJnLyHmEmS6pyp28JVZM7138gVJoyztVfiOgp/tIFKiuhzk/3TPdLa1EyEAEcwvTSy7Hs5S92sadT++yIjvI3DnDPaAJZ8kJuvkL0DH/lArVJ25VDU/D+OAfvE9Ej/LVboNg+wRlRY8pSI6fD9xN0OFA2XyVq8neGDkXLVdPFApARIcaIamNANfsobjrAnUXajdsJvkY0yz+ajhYM10y5h5LuBhE9zD87wL3FqMaYB7hB4OtEy/yTC8wcMF4/UEPenUNLeJR/NXuluHmcwi4YLRjT/N8N04trqejqLiWJ9XuJz+GonD9xzF9YeLze25rbrs/1ZufrC1tzx+r+1vEnt+fl8RNybhb//r33z5r9baHUWux0lpq4w5fbIg30871oEItwF3crYdZuPU2CutqJEi1D81+Qu6Xmn8FzPPovAAD//2TZd5x0BgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-42 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-43 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVW28bVRCeb3djx8YBlesLD4CKEA9GIOKW8gBK7YRGJFHkxH2JInSye9IYrXeXc85K5AlRWgi3AuUOoQQoUErL/T/wa/gHSIPOrtdeR0R98c6cmTPzzcx3xnyRX3WB6rrUpptG4POE2+AsdtAgVNtKCiMDeIRqLwkKubJmhEm1dXHbuas7lyT26/W0VNndtdT3pdbZ3QXRD1MlrTy1HhsR5pLURoP/IqL7+U8HmNnYHMSBDPVj1mQt4AtEfJNfcwEvP7xAuL0AWAJSXTNCDfHV2vEgCeVQm+qmUe5etxHaQssh5l53Mft25Uvg1wluRybgTwheV+oE/BlhaiXuawl+i1DpSp2GBvwFofqcSvzs2m+E6VyxN/4golf4ou3oGWOSInANlWVpduIgQ7GqYhMvixdjZeEN1X6Uq26vu2S9ar3u0qpQYqDBe4TKGSkCqcDvELzTcbCblX+6HwmVid5CrAbg94noQX7DA44NRLKhjepH5zbzTxangQbRffy2h4mQDVshNfhNB46ttUH0AL/nAMdGI7EJOsIImwR8iajF77rA9Pj8EsGF+7zMsZ0VYSp11rmpVWF2MpHoIf7YAe4ahe3IREaBjPzdrPN8megZ/sAF6mXLZYIHb0UMZFbs+m6SC8vSJt4jeDmEj8hW96ED1DY2NzbTfmSesqeoE6X8qcWbz2U43irqOYXacZDR83/7PJP7LEutxTl56xmO50J0lj93McEdbyIn7xNm8qS6cPqWULe5C/0HQq0jk0L9hYie5i9doLYYmeJ033a/shKrgQjhEKbnX06kX7zYOd+k2bMjOs7fOMA9ownkyUu5+QrRs/yVCzQmbVeOTMEH4xx8QESP8NduiWIHBGdEjamMGgUdvp+gw6Gy+SpRh7+zdChbrtouloCMCDFG1BgDamSP4qYD3Fmm3bid4GtET/KPtqMlwzVb7pGku0FED/PPDnBvOao1FgFuEPg60QL/5AIzh4zXD9VQdOfIEh7lX+1eKW8ep7QLRgvGNv93y/TyWiq7uvNKZX6Kz+O4789uBSdPPNFstUTQnG2d2mqK7VOt5pY/e0Juy5OPt1rb+Pfv/X/2hr+VhbnFpfkO7gjktkhD84IfDxIR7eJuLezabaYqbOqdWBkZ2f+Cwi3VUtF/AQAA//9co73fcAYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-44 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-45 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVW28bVRCeb3dtx8YBlesLD4CKEA9GTdImLQ+g1E5oRBJFTtyXKEIH70ljtN5dzjkrkSdEaaHcCpQ7hBKgQCkt9//AT+FPVBp0dr32OiLqi3fmzJyZb2a+M+aL/JoLVDakNu0kBJ8n3AVnqYU6odJUUhjpwyNUOrGfy+V1I0yirYvbzFzd+Ti2X6+jpUrvrifdrtQ6vbsoekGipJVLG5ERQSZJbTT4byJ6mP9ygMnNrX7ky0A/ZU3WAr5AxLf4dRfwssMLhLtzgAUglXUj1ABftRn140AOtFI7CTP3mo3QFFoOMHfaS+m3LV8Gv0FwWzIGf0rw2lLH4M8JpdWopyX4bUK5LXUSGPCXhMpzKu6m134nTGSKvfEnEb3KF21HzxgT54GrKK9IsxP5KYo1FZloRbwUKQtvoPbCTHU77WXrVe20l9eEEn0NvkQon5HClwr8LsE7Hfm7afmne6FQqegtRqoP/oCIHuU3PeBIX8Sb2qheeG4r+6Rx6qgTPcTveBgLWbcVUp3fcuDYWutEj/D7DnBkOBKboCWMsEnAl4lO8HsuMDE6v0xw4T4vM2xnRZBInXautCbMTioSPcafOMB9w7AtGcvQl2F3N+08XyF6hj90gVrRcoXgwVsVfZkWu7EbZ8KKtIkvEbwMwsdkq/vIAaqbW5tbSS80J+0pakQJf2bxZnMZjLeCWkahZuSn9PzfPk9mPitSa3FO3nmGo7kQneUvXIxxxxvLyXuEySypzp2+I9Rs7lz/kVBtyThXfyWip/krF6guhSY/3bPdL69Gqi8COISJhVdi2c1f7HzXJOmzIzrK3zrAA8MJZMkLufkq0bP8tQvUx21XD03B+6McvE9ET/A3boFi+wRnSI1SSo2cDj+M0eFA2XyNqMXfWzoULddsFwtAhoQYIaqPANXTR3HLAe4t0m7UTvB1ohn+yXa0YLhuyz2UdDeJ6HH+xQEeLEa1xjzATQLfIFrkn11g8oDxxoEa8u4cWsKT/JvdK8XN4xR2wXDB2Ob/YZleXEtFV3dBqdRP8XkcnZmb7c74s8cbs9tTLzaOH5uabpyand5udKenTs7I7VNzcyeO4fY/e//eHvyWF+eXlhdauMeX2yIJzAvdqB+LcBf3a2HXbiNRQUPvRMrI0P4X5G6Jlor+CwAA//9k/RDCcAYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-46 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-47 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVW28bVRCeb3djx8YBlesLD4CKEA9GtUKVwgMotRMa0USRHfclitBh96QxWu8u55yVyBOitFBuBQqUWygBCpTScv8P/BT+BNKgs+u11xFRX7wzZ+bMfDPznTFf4NdcoLohtemmEfgc4Q44Kx00CNW2ksLIAB6h2k+CQq70jDCpti5uO3d1F5PEfr2+liq720t9X2qd3V0WgzBV0sozG7ERYS5JbTT4LyJ6kP90gLnNrWEcyFA/YU3WAj5PxLf4dRfw8sPzhDsLgCUg1Z4RaoSv1o6HSShH2kw3jXL3uo3QFlqOMPe7K9m3K18Gv0FwOzIBXyF4XakT8GeEmbV4oCX4bUKlK3UaGvAXhOpzKvGza78RZnPF3viDiF7lC7ajp4xJisA1VFal2YmDDMW6ik28Kl6KlYU3UgdRrrr97mnrVet3T68LJYYafJFQOSVFIBX4XYJ3Mg52s/JPDiKhMtFbjtUQ/AERPcxvesCRoUg2tVGD6OxW/sniNNAgeoDf8TAVsmErpAa/5cCxtTaIHuL3HeDIeCQ2QUcYYZOALxEd5/dcYHZyfongwn1e5tjOiDCVOuvczLowO5lI9Ah/4gD3jMN2ZCKjQEb+btZ5vkz0DH/oAvWy5TLBg7cmhjIrdmM3yYVVaRNfJHg5hI/JVveRA9Q2tza30kFkTthT1IlS/tTizecyGm8V9ZxC7TjI6Pm/fZ7LfVal1uKsvP0MJ3MhOsOfu5jijjeVk/cIc3lSXTh9S6jb3IX+A6HWkUmh/kJET/OXLlBbiUxxume7X1mL1VCEcAizS68k0i9e7KJv0uzZER3lbxzgvvEE8uSl3HyV6Fn+ygUa07arh6bg/UkO3ieix/hrt0SxfYIzpsZMRo2CDt9P0eFA2XyNqMPfWTqULddsF0tAxoSYIGpMADWyR3HLAe4u027STvB1onn+0Xa0ZLhuyz2UdDeJ6FH+2QHuL0e1xiLATQLfIFrmn1xg7oDxxoEaiu4cWsLj/KvdK+XN45R2wXjB2Ob/bpleXktlV3dJqcxP8TkcbT21fXy7dWyhOd86Md98UgTzTSED2fSPvdhaWGiJIAh8/Pv33j9XRr+V9cVeb6mDuwK5LdLQvODHw0REu7hXC7t2m6kKm3onVkZG9r+gcEu1VPRfAAAA//+P3gfbcAYAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-48 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-49 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RVW28bVRCeb3dtx2YDKtcXHgAVIR6MIDRKzAMotRMa0USRHfclitCx97QxWu8ue84i/IQoLZRbgXKHUgIUKKXl/hvgNyEhDTq7XnsdEfHinTkzZ+abme+M+Ty/bAOVbal0OwnAZwm3wFpvwSVUmrEUWnpwCJVu5OVyuaOFTpRxsZuZq70SRebrdJWM07udpN+XSqV318TAT2Jp5NJ2qIWfSVJpBf6DiO7l3y1gfmd3GHrSV48Yk7GAzxHxTX7FBpzs8Bzh1hxgAUilo0U8xldthsPIl2Ot1E6CzL1mIjSFkmPM3fZ6+m3L58GvEuyWjMAfEZy2VBH4E0JpMxwoCX6DUG5Llfga/Bmh8nQc9dNrvxDmMsXc+I2IXuLzpqMntI7ywFWUN6TeC70UxVYc6nBDPBfGBt5YHQSZanfbJ41Xtds+uSViMVTgC4TyCSk8GYPfIjjHQ2+Uln98EIg4FZ21MB6C3yWi+/k1BzgyFNGO0vEgOLObfdI4Llyie/hNBzMhXVMhufy6BcvU6hLdx+9YwJHJSEyCltDCJAFfJFrkt21gbnp+kWDDfkZm2E4JP5Eq7VxpS+i9VCR6gD+0gDsmYVsykoEng/4o7TxfInqS37OBWtFyieDA2RRDmRa7PYoyYUOaxBcITgbhAzLVvW8B1Z3dnd1kEOhlc4oaUcIfG7zZXMbjraCWUagZeik9/7PP85nPhlRKnJH/P8PpXIhO8ac2ZrjjzOTky4T5LKnKnb4m1EzuXP+OUG3JKFd/IqIn+HMbqK4HOj+9bLpf3gzjofBhEeZWX4xkP3+xK32dpM+O6Ch/ZQF3TSaQJS/k5itET/EXNuDO2q4cmoL3pzl4n4ge4i/tAsX2CdaEGqWUGjkdvp2hw4Gy+SpRi78xdCharpouFoBMCDFF5E4BuemjuGkBtxdpN20n+BrR4/y96WjBcM2UeyjpbhDRg/yjBdxdjGqMeYAbBL5OtMY/2MD8AeP1AzXk3Tm0hIf5Z7NXipvHKuyCyYIxzf/VML24loqu9mocp34v8FkcbfSWG0uNxaX6cmPBqx977HSv3nu00av3e4tCLHgLjWNLDfzz197ff45/y1srnc5qC7d58rRIfP1sPxxGIhjhTiXM2q0nsV9Xe2GsZWD+C3K3xPwzOJZD/wYAAP//srkVUnQGAAA= - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-50 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - 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-70-51 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-70-52 -spec: - metadata: - FindOptions: '[{ 0x1400047c020 0x1400047c018 map[created:-1]}]' - filter: map[cid:default_company user:0x14000414370] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA diff --git a/cmd/server/keploy/mocks/mock-71.yaml b/cmd/server/keploy/mocks/mock-71.yaml deleted file mode 100644 index fd4769b60..000000000 --- a/cmd/server/keploy/mocks/mock-71.yaml +++ /dev/null @@ -1,173 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-71-0 -spec: - metadata: - FindOptions: '[{ 0x140003a2fc0 0x140003a2ca8 map[created:-1]}]' - filter: map[_id:0x14000342720 cid:default_company user:0x14000342830] - 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-71-1 -spec: - metadata: - FindOptions: '[{ 0x140003a2fc0 0x140003a2ca8 map[created:-1]}]' - filter: map[_id:0x14000342720 cid:default_company user:0x14000342830] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '**models.TestRun' - data: H4sIAAAAAAAA/4RV3W8bRRCf393Zjo0DKp8vPAAqQjwYNZC0hgdQaic0IokiJ+5LFKGNb9MYne+O2z2peUKUFspXgfINpQQopZQWKPA/8E8hDdo9n32OiHjxzezMzvxm5rdjvsCvu0BlQyrdSUPwOcJdcJbaqBMqrUQKLX14hEo39nO5vK6FTpVxcVuZqzsfx+brdZVM7N31tNeTStm7i6IfpIk0cmkj0iLIJKm0Av9FRA/znw4wvbk1iHwZqKeMyVjA54n4Nr/hAl52eJ5wdw6wAKSyrkUyxFdtRYM4kEOt1EnDzL1mIrSEkkPM3c6S/Xbkq+A3CW5bxuDPCF5Hqhj8BaG0GvWVBL9DKHekSgMN/opQeTGJe/ba74SpTDE3/iCi1/iC6egpreM8cBXlFal3I9+iWEsiHa2IV6LEwBuq/TBT3W5n2XhVu53lNZGIgQJfJJRPSeHLBPwewTsZ+Xu2/JP9UCRW9BajZAD+kIge5bc84MhAxJtKJ/3wzFb2sXHqqBM9xO96mAhZNxVSnd924Jha60SP8AcOcGQ0EpOgLbQwScCXiOb4fReYGp9fIrhwX5IZttMiSKWynSutCb1rRaLH+FMHuG8Uti1jGfoy7O3ZzvNlouf5IxeoFS2XCR68VTGQttiNvTgTVqRJfJHgZRA+IVPdxw5Q3dza3Er7oW6aU9SIUv7c4M3mMhxvBbWMQq3It/T8zz5PZz4rUilxRv7/DMdzITrNX7qY4I43kZOvEKazpCp3+p5QM7lz/Tqh2pZxrv5KRM/x1y5QXQp1fnrFdL+8GiUDEcAhTC2cjWUvf7HzPZ3aZ0d0lL9zgAdGE8iSF3LzVaIX+BsXqE/arh6agvfHOXifiJ7gb90CxfYJzogaJUuNnA4/TtDhQNl8jajNPxg6FC3XTBcLQEaEGCOqjwHV7aO47QD3Fmk3bif4BtEz/JPpaMFww5R7KOluEdHj/IsDPFiMaox5gFsEvkm0yD+7wPQB480DNeTdObSEJ/k3s1eKm8cp7ILRgjHNv2OYXlxLRVd3IUms31k+h6PPntiZbTaPbTe2m8eajdntE3MN0duRjd6cnJFzT8udmeMz+OfvO9dn7e9xlBfnl5YX2rjHlzsiDfTLvWgQi3AP9yth1m4jTYKG2o0SLUPzX5C7peafwTFA6N8AAAD//7McIS12BgAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-71-2 -spec: - metadata: - FindOptions: '[{ 0x140003a2fc0 0x140003a2ca8 map[created:-1]}]' - filter: map[_id:0x14000342720 cid:default_company user:0x14000342830] - 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-71-3 -spec: - metadata: - FindOptions: '[{ 0x140003a2fc0 0x140003a2ca8 map[created:-1]}]' - filter: map[_id:0x14000342720 cid:default_company user:0x14000342830] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-71-4 -spec: - metadata: - FindOptions: '[{ 0x140003a2fc0 0x140003a2ca8 map[created:-1]}]' - filter: map[_id:0x14000342720 cid:default_company user:0x14000342830] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-71-5 -spec: - metadata: - FindOptions: '[{ }]' - filter: map[run_id:97f4880b-b808-4b75-acfe-c5e1e52ef161] - 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-71-6 -spec: - metadata: - FindOptions: '[{ }]' - filter: map[run_id:97f4880b-b808-4b75-acfe-c5e1e52ef161] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.Test' - data: H4sIAAAAAAAA/6xW+2/b1Bc/x3bTJd902r4I+JEsKkLbcOM4duIENtQ2HSv0RR9DogqTY988Jsc29o20qqoQ2xjjNcZ4wxgDxhhjA8Y/wT+FdtG1m0c7pglEf4jvOffecz6fcz4+LrvDzoqI0ioJKbJzgHtRmK1iGjCxQk3aDflydIWaASU2SoDJaa/jO2TbGlnuuvHxFI8wbYYkNsW15dnouUxeQ3YeUKwSH9mngNIyCX1knwOOLHjtkCB7BzCxTMKuQ5F9CTj6fOBb0bXfAPfEBr/xOwC8zt4UEUePU+r3AicxMU9oy7MjFEuBR71585QXcHjbZtuNTXFteY6fSq4tzy2ZgdkJkV0ATBwnpk0CZO8BSlOevRHRn2q7ZhAtpWNe0EF2CQAOsLckxP0d018PadB2m7X4EcVJYxrgcfauhDtCpjlDSLO3BRQ41zRAhn0gIO5fr3U8mzjhBE9QNanJkyC7CKCz90XEPQP/RUARxRdJjO2E6XRJGFVuZMmkrWgJkGWfCIiP9MNWiU9cm7jWRlR5dhngKPtQREwN71wGlFBaMDskIru64ceLecITXwCUYggfA2f3kYCYXK+t17ptlxrciymALvuM4437st3eUUzFEpr2bMLL/7d1HovPzJMwNJvk4T0c9AXgBPtCxB3akXbkZFcAx+KkYe/Qd4Apnrtn3wBMVonfM38BgAr7SkRMzrq0573Cq59Y8IKO6aAAuGfmtE+s7XcgMWnRrumgBADj7FsB8dF+B+LkQ7nZVYDn2NciYnrn3tUHpmDXBjnYNQB4in0jDknsGqDQl8ZIJI2eHH7YIYddtNl1gCr7nstheOc6r+IQkL4gBojSA0Dp6KW4IyD+f1h2g3IiuwlQYD/yig5t3OR0Hyi62wDwJPtZQHxsOCrf7AW4DchuARxjP4mIY7s2b+3i0KvOAykcZL/yuTI8eYShWdAfMLz4d7nSh8fS8FFxJgiic/ekV9g5HC+rpaKqFesyyZt5WSvkC3KdlPOyrTeKZa1BDL2oYOLY5OzcTBX//OPuDW37d7xcamiGodTluqEYslYv6bJpNYhs6SRPdJU08sU8jiu6pqq6YsuWVldkTVN1uWw2GrJu5xVTLxUaZkNHKdcNHERpaXFlFQUOlzsEKbUWkkCebBKX4v+sbuDkShOGPqEkJi2L+BTFQ7lDe6c9lxKXynPEbdIWCoVCuueKurbP9H2nbZm07bm5U6Hn4oHNVCaT7QZOtpLJtij1w0ou1/S8pkMmLK+TTW0BIo52PLfp2XVMLiyeXHlp7mR1ChNJzydBFCq55tsmJYsukeiGTwaHEt1og11c3xwPCc1szrUCberlyXZGVdSCrORltZjJaxVdq+jFCUMta4aeOazoBSUzu7Ka6Rw5rE4UlHJBKRul4r+6cz+lra3a2DZen4MPD65vPuu2naOZ+3+V03lNUZRiQS1pxlYt0Wg7lATRJ+Vk26702NQk1+yQfpGE5qvsDT414jQ9oZ/hQk/Pm9RqEXva67qUT6Sxec9uN9rDnjU/JPwT3vekep7ZKu4DgFF2hksD9qfY2REU2HkAGOH/ECAg3sNLiDvb/sTutj+TsVpmEBJ6pEsbsoGTm1kaZiv5YknP65qqqHpJU7WSoihPx9qIpFHJ5RzPMp2WF9KKoRhKrleALFfJaN2zNyZoiPyPo7iHlyAydsF5KB745zcAUZBeWFlcwJk+F62k6kq5aBRKhUL5oVz4KzXg81+UBBAQ4K8AAAD//ysXtvS2CQAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-71-7 -spec: - metadata: - FindOptions: '[{ }]' - filter: map[run_id:97f4880b-b808-4b75-acfe-c5e1e52ef161] - 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-71-8 -spec: - metadata: - FindOptions: '[{ }]' - filter: map[run_id:97f4880b-b808-4b75-acfe-c5e1e52ef161] - name: mongodb - operation: Find.Decode - type: NO_SQL_DB - objects: - - type: '*models.Test' - data: H4sIAAAAAAAA/5RV7XMT1Rc+z+4mafIL/ATHlw9+qEwdR2a2aZukSSugbdNCx76ZUvzQKXize9PESXbX3ZsZ+smRF8U3RBRfEVEREUHFf8I/gn/F4Tp3N28FOgxfknvuOXuec57z7Fl5W57WAeMoDwTkGcJuaPMlpAnxVcFEK1DHxKpgvuA2DEJyxm16Dd62YuWWE4WnVIYZFvDI1NfK8+F/mb8N+R5BL3EP8kuCUeaBB/k1Ibbk1gMO+SEhXuZBqyEgvyUkDvueFT72F2EgMtQTfxPRO/KsDiSOCOF1EicRX+Si5tphFSu+K9xF9pbrq/LaZt2JTH2tvKCikmvlhRXms2YAeY4QP8KZzX3IjwnGtGtvhe1P1x3mh0djzvWbkBeI6Hn5vgHsaTJvPRB+3dnciP7CPGmkiZ6RHxnYljKtOqS0/ECDpnpNEw3KTzVgz/pG07V5IxhWACUmmAKBPE+Ul5/owEDv/jxBh/4aj2o7xhotHoTMxVaYqIVHon3ykgY82U1b4h53bO5YWyHz8iLRIfmZDqT6PRcJBowl1uRhs0e3vOiwyBXwOYIRlfAFqe4+14Dk+sb6RqvuiKK6RYqoJb9S9UZzaY83gVQkoRnX5or+h/K8K4pZ5EHANvmjZ9ibC9Ex+Y2ObdoxtmHKy4RdEWjQCfqJkFLYHfs6IVniXsf8g4gm5Xc6kJx3ROf2smI/vuT6TdaARhiYPelxq/0OxKcs0WINGEQ0JH/UgKe6E4jA+7DlFaJX5Pc6kN7uu7IjhLzaw5BXiehF+YPeJ7GrBK0rjVgojY4cftkmh/valteISvJnJYd+zzXFYl8hXUH0Kkr3CkqHL8VtDdjbL7senZA3iLLyV8Von+OGandH0d0iohfk7xrwdH9W5ewkuEWQN4nm5G86sOs+5837euiws2MLL8k/1V7p3zxa3y7oLhhF/h2l9P611B+qz/p+GHdPvyTPYGhkhNnF4lje5Faem7mxyrjJqoWCaY/nC4V8lk9MFCYQX5laXZ0t4d9/7lwfb/8OTRSquWJxpGJWiiNFM1cp5E1mVblp5fkoz4/x6uj4KIZyo1mWHR2rmFmey5q5YmXULBYmCqZdsccqFVbJ5idGkMhMemrdAfrh2aPQoCGZWaj5uek3pupALHQOdC+01FrAfXNqkzsC/7NafiNTGC7mh0fiU5bFPQF9f2Y/AUg0XWfTtStILi2fWH194URpGrHdc3XHXnb4sifqrhNo6xvxar0huB9uzRN1e7IDtGE4rMk7SZKux32mnulkGC5xy7W5IbY83oegyQuT8l0d0Ft+A/KUmnX7m5WY8TkL35kzhMSaZ3eN9uonekKejqnvXb3JlYNoRp5Cr/f/g4h2333TmTOeu/uqlA9e7K0J4QWTmcym6242+LDlNmlPSp6NQZPniCimPkog4J52HFp6xnUEd4QZKvxZwU+KTE00Gy8PWjXmB1wcbImqWRxYcK2w94elh3mADdZ8Xj2470HnvkOrnA8uixr3D2TYoeFUijQgQr+nHVfiBLC9jJ3roMcIVQpAr/CHEvPIgDAJYisLU/NLj9nn49JCIBD9FwAA///TxAYz8QgAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-71-9 -spec: - metadata: - FindOptions: '[{ }]' - filter: map[run_id:97f4880b-b808-4b75-acfe-c5e1e52ef161] - 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-71-10 -spec: - metadata: - FindOptions: '[{ }]' - filter: map[run_id:97f4880b-b808-4b75-acfe-c5e1e52ef161] - name: mongodb - operation: Find.Err - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-71-11 -spec: - metadata: - FindOptions: '[{ }]' - filter: map[run_id:97f4880b-b808-4b75-acfe-c5e1e52ef161] - name: mongodb - operation: Find.Close - type: NO_SQL_DB - objects: - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L6v5WVken/DgYGBtb/2xgYGQEBAAD//2zPrbkRAAAA diff --git a/cmd/server/keploy/mocks/mock-72.yaml b/cmd/server/keploy/mocks/mock-72.yaml deleted file mode 100644 index 58f7d0aae..000000000 --- a/cmd/server/keploy/mocks/mock-72.yaml +++ /dev/null @@ -1,19 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-72-0 -spec: - metadata: - UpdateOptions: '[{ 0x140001f1f58}]' - filter: map[_id:8bb569cb-197c-4646-8237-ff6dec1654e0] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: |- - [{$set {8bb569cb-197c-4646-8237-ff6dec1654e0 1675766517 1675766517 1674725096 default_company sample-url-shortener /url {POST 1 1 /url map[] map[Accept:[*/*] Content-Length:[33] User-Agent:[foo-bar]] { - "url": "https://google.com" - } []} {200 map[] {"ts":1674725096837339000,"url":"http://localhost:8080/Lhr4BWAi"} 0 0 } { } { } [{mongodb NO_SQL_DB map[UpdateOptions:[{ 0x14000632748}] filter:map[_id:Lhr4BWAi] name:mongodb operation:UpdateOne type:NO_SQL_DB update:[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]] [[94 255 129 3 1 1 12 85 112 100 97 116 101 82 101 115 117 108 116 1 255 130 0 1 4 1 12 77 97 116 99 104 101 100 67 111 117 110 116 1 4 0 1 13 77 111 100 105 102 105 101 100 67 111 117 110 116 1 4 0 1 13 85 112 115 101 114 116 101 100 67 111 117 110 116 1 4 0 1 10 85 112 115 101 114 116 101 100 73 68 1 16 0 0 0 7 255 130 1 2 1 2 0] [10 255 131 5 1 2 255 134 0 0 0 5 255 132 0 1 1]]}] map[] map[] [] [] Http}}] - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+JmYmRrbikKDMvnUeNQcUiKcnUzDI5SdfQ0jxZ18TMxEzXwsjYXDctzSwlNdnQzNQk1YABEAAA///oBBdQlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-8.yaml b/cmd/server/keploy/mocks/mock-8.yaml deleted file mode 100644 index 446d86962..000000000 --- a/cmd/server/keploy/mocks/mock-8.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-8-0 -spec: - metadata: - UpdateOptions: '[{ 0x140004cff68}]' - filter: map[_id:220eae63-8e5f-476b-844f-d5caea86dcb4] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {220eae63-8e5f-476b-844f-d5caea86dcb4 1674626110 1674626110 1674626110809 default_company sample-node-fetch /getData {GET 0 0 /getData map[] map[accept:[*/*] host:[localhost:8080] user-agent:[curl/7.85.0]] {} []} {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 } { } { } [{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]]}] map[] map[] [] [] Http}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMBg+r+JmYmRrbikKDMvnUeNQcXIyCA1MdXMWNci1TRN18TcLEnXwsQkTTfFNDkxNdHCLCU5yYQBEAAA///Dt0IWlQAAAA== - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/mocks/mock-9.yaml b/cmd/server/keploy/mocks/mock-9.yaml deleted file mode 100644 index 759f6acda..000000000 --- a/cmd/server/keploy/mocks/mock-9.yaml +++ /dev/null @@ -1,32 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-9-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/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= ---- -version: api.keploy.io/v1beta2 -kind: Generic -name: mock-9-1 -spec: - metadata: - UpdateOptions: '[{ 0x1400069cf9a}]' - filter: map[_id:220eae63-8e5f-476b-844f-d5caea86dcb4] - name: mongodb - operation: UpdateOne - type: NO_SQL_DB - update: '[{$set {220eae63-8e5f-476b-844f-d5caea86dcb4 1674626110 1674626110 1674626110809 default_company sample-node-fetch /getData {GET 0 0 /getData map[] map[accept:[*/*] host:[localhost:8080] user-agent:[curl/7.85.0]] {} []} {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 } { } { } [{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]]}] map[] map[] [] [] Http}}]' - objects: - - type: '*mongo.UpdateResult' - data: H4sIAAAAAAAA/4r738jMyMgTWpCSWJIalFpcmlPC+L+JgZGFkcc3sSQ5IzXFOb80r4SRhYGR1zc/JTMtE1kktKA4tagESYQLJuLpwijAwMDA/r+JkYmRiQEQAAD//4pyI9BnAAAA - - type: '*keploy.KError' - data: H4sIAAAAAAAA/+L638zKyPS/jYGBgfV/CwMjIyAAAP//7jjoexEAAAA= diff --git a/cmd/server/keploy/tests/test-1.yaml b/cmd/server/keploy/tests/test-1.yaml deleted file mode 100644 index f8e5993a8..000000000 --- a/cmd/server/keploy/tests/test-1.yaml +++ /dev/null @@ -1,38 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-1 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept-Encoding: gzip - Content-Length: "1667" - Content-Type: application/json - User-Agent: Go-http-client/1.1 - body: '{"captured":1674553625,"app_id":"grpc-nested-app","uri":"","http_req":{"method":"","proto_major":0,"proto_minor":0,"url":"","url_params":null,"header":null,"body":"","binary":"","form":null},"http_resp":{"status_code":0,"header":null,"body":"","status_message":"","proto_major":0,"proto_minor":0,"binary":""},"grpc_req":{"body":"{\"x\":1,\"y\":23}","method":"api.Adder.Add"},"grpc_resp":{"body":"{\"result\":81,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}","error":""},"deps":[{"name":"mongodb","type":"NO_SQL_DB","meta":{"InsertOneOptions":"[]","document":"x:1 y:23","name":"mongodb","operation":"InsertOne","type":"NO_SQL_DB"},"data":["LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA","Cv+FBQEC/4gAAAAF/4YAAQE="]}],"test_case_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests","mock_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks","mocks":[{"Version":"api.keploy.io/v1beta2","Kind":"Generic","Spec":{"Metadata":{"InsertOneOptions":"[]","document":"x:1 y:23","name":"mongodb","operation":"InsertOne","type":"NO_SQL_DB"},"Objects":[{"Type":"*mongo.InsertOneResult","Data":"LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA"},{"Type":"*keploy.KError","Data":"Cv+FBQEC/4gAAAAF/4YAAQE="}]}}],"type":"gRPC"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"415e534e-10f5-488b-a781-19a4bede11b5"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-1-0 - assertions: - noise: - - header.Content-Type - - body.id - created: 1674553625 diff --git a/cmd/server/keploy/tests/test-10.yaml b/cmd/server/keploy/tests/test-10.yaml deleted file mode 100644 index c8d50f028..000000000 --- a/cmd/server/keploy/tests/test-10.yaml +++ /dev/null @@ -1,33 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-10 -spec: - metadata: {} - grpc_req: - body: '{"app":"sample-node-fetch","offset":"0","limit":"25","TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock"}' - method: services.RegressionService.GetTCS - grpc_resp: - body: '{"tcs":[{"id":"220eae63-8e5f-476b-844f-d5caea86dcb4","created":1674626110,"updated":1674626110,"captured":1674626110809,"CID":"default_company","appID":"sample-node-fetch","URI":"/getData","HttpReq":{"Method":"GET","URL":"/getData","Header":{"accept":{"Value":["*/*"]},"host":{"Value":["localhost:8080"]},"user-agent":{"Value":["curl/7.85.0"]}},"Body":"{}"},"HttpResp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"Deps":[{"Name":"node-fetch","Type":"HTTP_CLIENT","Meta":{"name":"node-fetch","options":"undefined","type":"HTTP_CLIENT","url":"https://reqres.in/api/users/2"},"Data":[{"Bin":"W3sidHlwZSI6IkJ1ZmZlciIsImRhdGEiOlsxMjMsMzQsMTAwLDk3LDExNiw5NywzNCw1OCwxMjMsMzQsMTA1LDEwMCwzNCw1OCw1MCw0NCwzNCwxMDEsMTA5LDk3LDEwNSwxMDgsMzQsNTgsMzQsMTA2LDk3LDExMCwxMDEsMTE2LDQ2LDExOSwxMDEsOTcsMTE4LDEwMSwxMTQsNjQsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCwzNCw0NCwzNCwxMDIsMTA1LDExNCwxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDc0LDk3LDExMCwxMDEsMTE2LDM0LDQ0LDM0LDEwOCw5NywxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDg3LDEwMSw5NywxMTgsMTAxLDExNCwzNCw0NCwzNCw5NywxMTgsOTcsMTE2LDk3LDExNCwzNCw1OCwzNCwxMDQsMTE2LDExNiwxMTIsMTE1LDU4LDQ3LDQ3LDExNCwxMDEsMTEzLDExNCwxMDEsMTE1LDQ2LDEwNSwxMTAsNDcsMTA1LDEwOSwxMDMsNDcsMTAyLDk3LDk5LDEwMSwxMTUsNDcsNTAsNDUsMTA1LDEwOSw5NywxMDMsMTAxLDQ2LDEwNiwxMTIsMTAzLDM0LDEyNSw0NCwzNCwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzQsNTgsMTIzLDM0LDExNywxMTQsMTA4LDM0LDU4LDM0LDEwNCwxMTYsMTE2LDExMiwxMTUsNTgsNDcsNDcsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCw0NywzNSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDUsMTA0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzQsNDQsMzQsMTE2LDEwMSwxMjAsMTE2LDM0LDU4LDM0LDg0LDExMSwzMiwxMDcsMTAxLDEwMSwxMTIsMzIsODIsMTAxLDExMyw4MiwxMDEsMTE1LDMyLDEwMiwxMTQsMTAxLDEwMSw0NCwzMiw5OSwxMTEsMTEwLDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMTE5LDk3LDExNCwxMDAsMTE1LDMyLDExNSwxMDEsMTE0LDExOCwxMDEsMTE0LDMyLDk5LDExMSwxMTUsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDEwMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzMsMzQsMTI1LDEyNV19XQ=="},{"Bin":"eyJoZWFkZXJzIjp7ImRhdGUiOiJXZWQsIDI1IEphbiAyMDIzIDA1OjU1OjEwIEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJ0cmFuc2Zlci1lbmNvZGluZyI6ImNodW5rZWQiLCJjb25uZWN0aW9uIjoiY2xvc2UiLCJ4LXBvd2VyZWQtYnkiOiJFeHByZXNzIiwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjoiKiIsImV0YWciOiJXL1wiMTE4LXBiZHd3Rm85U0tOaEQzTHg1aUhKeW5ncHEwMFwiIiwidmlhIjoiMS4xIHZlZ3VyIiwiY2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTQ0MDAiLCJjZi1jYWNoZS1zdGF0dXMiOiJISVQiLCJhZ2UiOiI2OTMwIiwicmVwb3J0LXRvIjoie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92Mz9zPVNmbHJBU3RXT3VVRzM4WGs1TDV1RHBaSDh2UyUyQnRTTjB1cXhyQXFwS3JWM2pjS1puVmJ6YUlvSnBsRDhlZWE3RmRPWWMya3pONiUyQkdmdWlOamR0ZVZQU1NLZUt3c1ROSW5BUDhWUlR0WVR5RktSeTJvWmdRREdIQzBqUSUzRCUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSIsIm5lbCI6IntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9IiwidmFyeSI6IkFjY2VwdC1FbmNvZGluZyIsInNlcnZlciI6ImNsb3VkZmxhcmUiLCJjZi1yYXkiOiI3OGVlYzIyOTlmZmM4NjIwLUJPTSIsImNvbnRlbnQtZW5jb2RpbmciOiJnemlwIn0sInN0YXR1cyI6MjAwLCJzdGF0dXNUZXh0IjoiT0sifQ=="}]}]},{"id":"dca77113-324e-4036-a7b4-4261b0daf648","created":1674625757,"updated":1674625757,"captured":1674625757557,"CID":"default_company","appID":"sample-node-fetch","URI":"/getData","HttpReq":{"Method":"GET","URL":"/getData","Header":{"accept":{"Value":["*/*"]},"host":{"Value":["localhost:8080"]},"user-agent":{"Value":["curl/7.85.0"]}},"Body":"{}"},"HttpResp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"Deps":[{"Name":"node-fetch","Type":"HTTP_CLIENT","Meta":{"name":"node-fetch","options":"undefined","type":"HTTP_CLIENT","url":"https://reqres.in/api/users/2"},"Data":[{"Bin":"W3sidHlwZSI6IkJ1ZmZlciIsImRhdGEiOlsxMjMsMzQsMTAwLDk3LDExNiw5NywzNCw1OCwxMjMsMzQsMTA1LDEwMCwzNCw1OCw1MCw0NCwzNCwxMDEsMTA5LDk3LDEwNSwxMDgsMzQsNTgsMzQsMTA2LDk3LDExMCwxMDEsMTE2LDQ2LDExOSwxMDEsOTcsMTE4LDEwMSwxMTQsNjQsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCwzNCw0NCwzNCwxMDIsMTA1LDExNCwxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDc0LDk3LDExMCwxMDEsMTE2LDM0LDQ0LDM0LDEwOCw5NywxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDg3LDEwMSw5NywxMTgsMTAxLDExNCwzNCw0NCwzNCw5NywxMTgsOTcsMTE2LDk3LDExNCwzNCw1OCwzNCwxMDQsMTE2LDExNiwxMTIsMTE1LDU4LDQ3LDQ3LDExNCwxMDEsMTEzLDExNCwxMDEsMTE1LDQ2LDEwNSwxMTAsNDcsMTA1LDEwOSwxMDMsNDcsMTAyLDk3LDk5LDEwMSwxMTUsNDcsNTAsNDUsMTA1LDEwOSw5NywxMDMsMTAxLDQ2LDEwNiwxMTIsMTAzLDM0LDEyNSw0NCwzNCwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzQsNTgsMTIzLDM0LDExNywxMTQsMTA4LDM0LDU4LDM0LDEwNCwxMTYsMTE2LDExMiwxMTUsNTgsNDcsNDcsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCw0NywzNSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDUsMTA0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzQsNDQsMzQsMTE2LDEwMSwxMjAsMTE2LDM0LDU4LDM0LDg0LDExMSwzMiwxMDcsMTAxLDEwMSwxMTIsMzIsODIsMTAxLDExMyw4MiwxMDEsMTE1LDMyLDEwMiwxMTQsMTAxLDEwMSw0NCwzMiw5OSwxMTEsMTEwLDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMTE5LDk3LDExNCwxMDAsMTE1LDMyLDExNSwxMDEsMTE0LDExOCwxMDEsMTE0LDMyLDk5LDExMSwxMTUsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDEwMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzMsMzQsMTI1LDEyNV19XQ=="},{"Bin":"eyJoZWFkZXJzIjp7ImRhdGUiOiJXZWQsIDI1IEphbiAyMDIzIDA1OjQ5OjE3IEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJ0cmFuc2Zlci1lbmNvZGluZyI6ImNodW5rZWQiLCJjb25uZWN0aW9uIjoiY2xvc2UiLCJ4LXBvd2VyZWQtYnkiOiJFeHByZXNzIiwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjoiKiIsImV0YWciOiJXL1wiMTE4LXBiZHd3Rm85U0tOaEQzTHg1aUhKeW5ncHEwMFwiIiwidmlhIjoiMS4xIHZlZ3VyIiwiY2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTQ0MDAiLCJjZi1jYWNoZS1zdGF0dXMiOiJISVQiLCJhZ2UiOiI2NTc3IiwicmVwb3J0LXRvIjoie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92Mz9zPUoxdzY1YiUyRkZWOE4lMkJjdHIxRXNteDZPYkZpdzdwcmtOU1NCTlFpYlZVQXh4diUyQnphb2RncDJIcFJMb29xa1VtazZHeXZxaEJnOWlBM20xM1FuVmJoNmdJNm5GRkJFT3NsaWh6dDVPOSUyQnRZJTJCdERCcmlrNHlzRFhIUVZmZyUzRCUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSIsIm5lbCI6IntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9IiwidmFyeSI6IkFjY2VwdC1FbmNvZGluZyIsInNlcnZlciI6ImNsb3VkZmxhcmUiLCJjZi1yYXkiOiI3OGVlYjk4OWJmNGYyOWVmLUJPTSIsImNvbnRlbnQtZW5jb2RpbmciOiJnemlwIn0sInN0YXR1cyI6MjAwLCJzdGF0dXNUZXh0IjoiT0sifQ=="}]}]},{"id":"ba2a5d23-0222-42ec-b746-fbf8eacb9d6f","created":1674625360,"updated":1674625360,"captured":1674625360107,"CID":"default_company","appID":"sample-node-fetch","URI":"/getData","HttpReq":{"Method":"GET","URL":"/getData","Header":{"accept":{"Value":["*/*"]},"host":{"Value":["localhost:8080"]},"user-agent":{"Value":["curl/7.85.0"]}},"Body":"{}"},"HttpResp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"Deps":[{"Name":"node-fetch","Type":"HTTP_CLIENT","Meta":{"name":"node-fetch","options":"undefined","type":"HTTP_CLIENT","url":"https://reqres.in/api/users/2"},"Data":[{"Bin":"W3sidHlwZSI6IkJ1ZmZlciIsImRhdGEiOlsxMjMsMzQsMTAwLDk3LDExNiw5NywzNCw1OCwxMjMsMzQsMTA1LDEwMCwzNCw1OCw1MCw0NCwzNCwxMDEsMTA5LDk3LDEwNSwxMDgsMzQsNTgsMzQsMTA2LDk3LDExMCwxMDEsMTE2LDQ2LDExOSwxMDEsOTcsMTE4LDEwMSwxMTQsNjQsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCwzNCw0NCwzNCwxMDIsMTA1LDExNCwxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDc0LDk3LDExMCwxMDEsMTE2LDM0LDQ0LDM0LDEwOCw5NywxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDg3LDEwMSw5NywxMTgsMTAxLDExNCwzNCw0NCwzNCw5NywxMTgsOTcsMTE2LDk3LDExNCwzNCw1OCwzNCwxMDQsMTE2LDExNiwxMTIsMTE1LDU4LDQ3LDQ3LDExNCwxMDEsMTEzLDExNCwxMDEsMTE1LDQ2LDEwNSwxMTAsNDcsMTA1LDEwOSwxMDMsNDcsMTAyLDk3LDk5LDEwMSwxMTUsNDcsNTAsNDUsMTA1LDEwOSw5NywxMDMsMTAxLDQ2LDEwNiwxMTIsMTAzLDM0LDEyNSw0NCwzNCwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzQsNTgsMTIzLDM0LDExNywxMTQsMTA4LDM0LDU4LDM0LDEwNCwxMTYsMTE2LDExMiwxMTUsNTgsNDcsNDcsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCw0NywzNSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDUsMTA0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzQsNDQsMzQsMTE2LDEwMSwxMjAsMTE2LDM0LDU4LDM0LDg0LDExMSwzMiwxMDcsMTAxLDEwMSwxMTIsMzIsODIsMTAxLDExMyw4MiwxMDEsMTE1LDMyLDEwMiwxMTQsMTAxLDEwMSw0NCwzMiw5OSwxMTEsMTEwLDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMTE5LDk3LDExNCwxMDAsMTE1LDMyLDExNSwxMDEsMTE0LDExOCwxMDEsMTE0LDMyLDk5LDExMSwxMTUsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDEwMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzMsMzQsMTI1LDEyNV19XQ=="},{"Bin":"eyJoZWFkZXJzIjp7ImRhdGUiOiJXZWQsIDI1IEphbiAyMDIzIDA1OjQyOjQwIEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJ0cmFuc2Zlci1lbmNvZGluZyI6ImNodW5rZWQiLCJjb25uZWN0aW9uIjoiY2xvc2UiLCJ4LXBvd2VyZWQtYnkiOiJFeHByZXNzIiwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjoiKiIsImV0YWciOiJXL1wiMTE4LXBiZHd3Rm85U0tOaEQzTHg1aUhKeW5ncHEwMFwiIiwidmlhIjoiMS4xIHZlZ3VyIiwiY2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTQ0MDAiLCJjZi1jYWNoZS1zdGF0dXMiOiJISVQiLCJhZ2UiOiIzMDMxIiwicmVwb3J0LXRvIjoie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92Mz9zPVBqbkRraWtHRTZtNWplQlFBJTJGTG0wNU1Yd1ZzJTJCNUkxbFk0UVc1QjlQeXBZalM4U1Y4ZEpOUEFLb0JrWmxqbW1OUEFxaWxvQTJ2JTJCSUxJRSUyRllXWkNFbGRMRzBLY0w3bWthdnRidEI2OThyMTVXa0o0QiUyQkRJN2FTenNhZyUzRCUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSIsIm5lbCI6IntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9IiwidmFyeSI6IkFjY2VwdC1FbmNvZGluZyIsInNlcnZlciI6ImNsb3VkZmxhcmUiLCJjZi1yYXkiOiI3OGVlYWZkNWFjZDE2ZWUzLUJPTSIsImNvbnRlbnQtZW5jb2RpbmciOiJnemlwIn0sInN0YXR1cyI6MjAwLCJzdGF0dXNUZXh0IjoiT0sifQ=="}]}]}]}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-10-0 - - mock-10-1 - - mock-10-2 - - mock-10-3 - - mock-10-4 - - mock-10-5 - - mock-10-6 - - mock-10-7 - - mock-10-8 - assertions: - noise: [] - created: 1674627822 diff --git a/cmd/server/keploy/tests/test-11.yaml b/cmd/server/keploy/tests/test-11.yaml deleted file mode 100644 index 547ebc1e2..000000000 --- a/cmd/server/keploy/tests/test-11.yaml +++ /dev/null @@ -1,27 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-11 -spec: - metadata: {} - grpc_req: - body: '{"app":"sample-node-fetch","offset":"25","limit":"25","TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock"}' - method: services.RegressionService.GetTCS - grpc_resp: - body: '{}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-11-0 - - mock-11-1 - - mock-11-2 - assertions: - noise: [] - created: 1674627822 diff --git a/cmd/server/keploy/tests/test-12.yaml b/cmd/server/keploy/tests/test-12.yaml deleted file mode 100644 index 335d03698..000000000 --- a/cmd/server/keploy/tests/test-12.yaml +++ /dev/null @@ -1,26 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-12 -spec: - metadata: {} - grpc_req: - body: '{"total":"3","app":"sample-node-fetch","TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock"}' - method: services.RegressionService.Start - grpc_resp: - body: '{"id":"84eefacb-8429-4fba-a2e9-4f6158466435"}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-12-0 - assertions: - noise: - - body.id - created: 1674627822 diff --git a/cmd/server/keploy/tests/test-13.yaml b/cmd/server/keploy/tests/test-13.yaml deleted file mode 100644 index 0bac28d91..000000000 --- a/cmd/server/keploy/tests/test-13.yaml +++ /dev/null @@ -1,27 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-13 -spec: - metadata: {} - grpc_req: - body: '{"ID":"220eae63-8e5f-476b-844f-d5caea86dcb4","AppID":"sample-node-fetch","RunID":"84eefacb-8429-4fba-a2e9-4f6158466435","Resp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock"}' - method: services.RegressionService.Test - grpc_resp: - body: '{"pass":{"pass":true}}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-13-0 - - mock-13-1 - - mock-13-2 - assertions: - noise: [] - created: 1674627822 diff --git a/cmd/server/keploy/tests/test-14.yaml b/cmd/server/keploy/tests/test-14.yaml deleted file mode 100644 index bdb14b108..000000000 --- a/cmd/server/keploy/tests/test-14.yaml +++ /dev/null @@ -1,27 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-14 -spec: - metadata: {} - grpc_req: - body: '{"ID":"dca77113-324e-4036-a7b4-4261b0daf648","AppID":"sample-node-fetch","RunID":"84eefacb-8429-4fba-a2e9-4f6158466435","Resp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock","Type":"Http"}' - method: services.RegressionService.Test - grpc_resp: - body: '{"pass":{"pass":true}}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-14-0 - - mock-14-1 - - mock-14-2 - assertions: - noise: [] - created: 1674627822 diff --git a/cmd/server/keploy/tests/test-15.yaml b/cmd/server/keploy/tests/test-15.yaml deleted file mode 100644 index 1a83b128c..000000000 --- a/cmd/server/keploy/tests/test-15.yaml +++ /dev/null @@ -1,27 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-15 -spec: - metadata: {} - grpc_req: - body: '{"ID":"ba2a5d23-0222-42ec-b746-fbf8eacb9d6f","AppID":"sample-node-fetch","RunID":"84eefacb-8429-4fba-a2e9-4f6158466435","Resp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock","Type":"Http"}' - method: services.RegressionService.Test - grpc_resp: - body: '{"pass":{"pass":true}}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-15-0 - - mock-15-1 - - mock-15-2 - assertions: - noise: [] - created: 1674627822 diff --git a/cmd/server/keploy/tests/test-16.yaml b/cmd/server/keploy/tests/test-16.yaml deleted file mode 100644 index 5d1e3f895..000000000 --- a/cmd/server/keploy/tests/test-16.yaml +++ /dev/null @@ -1,26 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-16 -spec: - metadata: {} - grpc_req: - body: '{"status":"true","id":"84eefacb-8429-4fba-a2e9-4f6158466435"}' - method: services.RegressionService.End - grpc_resp: - body: '{"message":"OK"}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-16-0 - - mock-16-1 - assertions: - noise: [] - created: 1674627823 diff --git a/cmd/server/keploy/tests/test-18.yaml b/cmd/server/keploy/tests/test-18.yaml deleted file mode 100644 index 481c85d19..000000000 --- a/cmd/server/keploy/tests/test-18.yaml +++ /dev/null @@ -1,53 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-18 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "96" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testlist - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"getApps","variables":{},"query":"query getApps {\n apps {\n id\n }\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"apps":[{"id":"Keploy-Test-App"},{"id":"demo-WebGo-V6-App"},{"id":"grpc-nested-app"},{"id":"listmonk-app"},{"id":"listmonk-app-2"},{"id":"listmonk-app-4"},{"id":"my-app"},{"id":"myApp"},{"id":"sample-node-fetch"},{"id":"sample-url-shortener"},{"id":"typescript-sdk"}]}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-18-0 - assertions: - noise: - - header.Access-Control-Allow-Origin - - header.Access-Control-Expose-Headers - - body.data.apps.id - - header.Access-Control-Allow-Credentials - created: 1674628831 diff --git a/cmd/server/keploy/tests/test-19.yaml b/cmd/server/keploy/tests/test-19.yaml deleted file mode 100644 index 568d67722..000000000 --- a/cmd/server/keploy/tests/test-19.yaml +++ /dev/null @@ -1,49 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-19 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "96" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testlist - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"getApps","variables":{},"query":"query getApps {\n apps {\n id\n }\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"apps":[{"id":"Keploy-Test-App"},{"id":"demo-WebGo-V6-App"},{"id":"grpc-nested-app"},{"id":"listmonk-app"},{"id":"listmonk-app-2"},{"id":"listmonk-app-4"},{"id":"my-app"},{"id":"myApp"},{"id":"sample-node-fetch"},{"id":"sample-url-shortener"},{"id":"typescript-sdk"}]}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-19-0 - assertions: - noise: [] - created: 1674628832 diff --git a/cmd/server/keploy/tests/test-2.yaml b/cmd/server/keploy/tests/test-2.yaml deleted file mode 100644 index 07f9caf00..000000000 --- a/cmd/server/keploy/tests/test-2.yaml +++ /dev/null @@ -1,35 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-2 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/denoise - header: - Accept-Encoding: gzip - Content-Length: "579" - Content-Type: application/json - User-Agent: Go-http-client/1.1 - body: '{"id":"415e534e-10f5-488b-a781-19a4bede11b5","app_id":"grpc-nested-app","run_id":"","resp":{"status_code":0,"header":null,"body":"","status_message":"","proto_major":0,"proto_minor":0,"binary":""},"grpc_resp":{"body":"{\"result\":87,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}","error":""},"test_case_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests","mock_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks","type":"gRPC"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Vary: Origin - body: "" - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-2-0 - - mock-2-1 - assertions: - noise: [] - created: 1674553627 diff --git a/cmd/server/keploy/tests/test-20.yaml b/cmd/server/keploy/tests/test-20.yaml deleted file mode 100644 index 31cc615f0..000000000 --- a/cmd/server/keploy/tests/test-20.yaml +++ /dev/null @@ -1,113 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-20 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "361" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testlist - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"getTc","variables":{"app":"Keploy-Test-App"},"query":"query getTc($app: String!) {\n testCase(app: $app) {\n id\n created\n updated\n captured\n uri\n httpReq {\n protoMajor\n protoMinor\n method\n url\n }\n httpResp {\n statusCode\n }\n deps {\n name\n type\n }\n }\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"testCase":[{"id":"e5cc04db-37be-4a50-b76a-cbbbe04c3820","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"83fac442-efc1-418c-a7c0-4fd7e7b9a5bb","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"87b3bbf4-c376-4494-b935-74290b0c520b","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"9d57662c-9de2-4be9-99a2-aeb19bfcab29","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/denoise","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/denoise"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"},{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"374b4e42-22dd-4b79-ba45-162ab2ef73fc","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/denoise","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/denoise"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"},{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"c3f979bc-0e4c-49df-b5a0-1d8a51a7bf40","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"37b24603-e4b8-41ee-9a9e-521455dd15ae","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"750707e1-a79a-4df7-8748-099fef6449ed","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/denoise","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/denoise"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"},{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"3051e426-661c-4cf6-8ab7-3a5d331d4115","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"cd731904-0154-4b6c-9e2a-83ea073a5f11","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"13e8d0ba-d7a4-461e-9672-128a88a449b5","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"5c30fa10-0fe2-4724-ac2b-ad4fe06dd1f7","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"1394eb85-2e84-483b-ba9c-10cb75004d8a","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"9db7c072-a966-46e6-bcce-63df74c11e1f","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"fc991093-bc2b-4d1f-a617-8887575991a0","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/denoise","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/denoise"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"},{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"b2af78f1-5b46-453d-932a-dc5696586324","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"571ab84f-9e0c-470b-82fc-4d95a9b74d08","created":"2022-11-30T14:40:39Z","updated":"2022-11-30T14:40:39Z","captured":"2022-11-30T14:40:39Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"e51a20bd-fcfa-4937-b5e0-25e7ee4953f8","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"6904694a-54df-4b3c-b00e-2058188f9df9","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"0c0394b5-d170-4356-b11f-b67f9e4292bd","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"19261dbe-651c-4686-a4d3-bb72706b904a","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"e3e4049a-60ed-4d43-9f31-31df8946f874","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"e7d626bc-80fb-42d1-a1c3-33b5d2ab64c3","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"95fc371e-c11b-4238-88ab-a0400ada4fc0","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/testcase","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/testcase"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"}]},{"id":"dd4e4001-820a-4762-9e27-3b704b33cf2c","created":"2022-11-30T14:40:38Z","updated":"2022-11-30T14:40:38Z","captured":"2022-11-30T14:40:38Z","uri":"/api/regression/denoise","httpReq":{"protoMajor":1,"protoMinor":1,"method":"POST","url":"/api/regression/denoise"},"httpResp":{"statusCode":200},"deps":[{"name":"mongodb","type":"NO_SQL_DB"},{"name":"mongodb","type":"NO_SQL_DB"}]}]}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-20-0 - - mock-20-1 - - mock-20-2 - - mock-20-3 - - mock-20-4 - - mock-20-5 - - mock-20-6 - - mock-20-7 - - mock-20-8 - - mock-20-9 - - mock-20-10 - - mock-20-11 - - mock-20-12 - - mock-20-13 - - mock-20-14 - - mock-20-15 - - mock-20-16 - - mock-20-17 - - mock-20-18 - - mock-20-19 - - mock-20-20 - - mock-20-21 - - mock-20-22 - - mock-20-23 - - mock-20-24 - - mock-20-25 - - mock-20-26 - - mock-20-27 - - mock-20-28 - - mock-20-29 - - mock-20-30 - - mock-20-31 - - mock-20-32 - - mock-20-33 - - mock-20-34 - - mock-20-35 - - mock-20-36 - - mock-20-37 - - mock-20-38 - - mock-20-39 - - mock-20-40 - - mock-20-41 - - mock-20-42 - - mock-20-43 - - mock-20-44 - - mock-20-45 - - mock-20-46 - - mock-20-47 - - mock-20-48 - - mock-20-49 - - mock-20-50 - - mock-20-51 - - mock-20-52 - assertions: - noise: - - body.data.testCase.httpReq.protoMajor - - body.data.testCase.updated - - body.data.testCase.deps.name - - body.data.testCase.deps.type - - body.data.testCase.httpReq.method - - body.data.testCase.captured - - body.data.testCase.uri - - body.data.testCase.httpReq.protoMinor - - body.data.testCase.id - - body.data.testCase.httpReq.url - - body.data.testCase.created - - body.data.testCase.httpResp.statusCode - created: 1674628831 diff --git a/cmd/server/keploy/tests/test-21.yaml b/cmd/server/keploy/tests/test-21.yaml deleted file mode 100644 index 154c0fa85..000000000 --- a/cmd/server/keploy/tests/test-21.yaml +++ /dev/null @@ -1,50 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-21 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "174" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testlist?index=1 - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"deleteTestCase","variables":{"id":"49370b62-8877-43b0-ba6e-ae7ff8531e30"},"query":"mutation deleteTestCase($id: String!) {\n deleteTestCase(id: $id)\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"deleteTestCase":true}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-21-0 - - mock-21-1 - assertions: - noise: [] - created: 1674629976 diff --git a/cmd/server/keploy/tests/test-22.yaml b/cmd/server/keploy/tests/test-22.yaml deleted file mode 100644 index 051a7a6bd..000000000 --- a/cmd/server/keploy/tests/test-22.yaml +++ /dev/null @@ -1,49 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-22 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "1004" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testlist?index=7&tcId=fec1be96-8392-4e4e-833a-98d53331f782 - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"updateTestCase","variables":{"tc":[{"id":"fec1be96-8392-4e4e-833a-98d53331f782","created":"2022-11-30T06:28:15Z","updated":"2022-11-30T06:28:15Z","captured":"2022-11-30T06:28:15Z","cid":"default_company","app":"myApp","uri":"/api/employees","httpReq":{"protoMajor":1,"protoMinor":1,"url":"/api/employees","urlParam":null,"header":[{"key":"content-length","value":["100"]},{"key":"host","value":["localhost:8080"]},{"key":"content-type","value":["application/json"]},{"key":"user-agent","value":["curl/7.84.0"]},{"key":"accept","value":["*/*"]}],"method":"POST","body":"{\n \"firstName\": \"Myke\",\n \"lastName\": \"Tyson\",\n \"email\": \"mt@gmail.com\",\n \"timestamp\":1\n}"},"httpResp":{"statusCode":200,"header":null,"body":"{\"id\":6,\"firstName\":\"Myke\",\"lastName\":\"Tyson\",\"email\":\"mt@gmail.com\",\"timestamp\":1669789788}"},"deps":null,"anchors":null,"noise":null}]},"query":"mutation updateTestCase($tc: [TestCaseInput]) {\n updateTestCase(tc: $tc)\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"updateTestCase":true}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-22-0 - assertions: - noise: [] - created: 1674637546 diff --git a/cmd/server/keploy/tests/test-23.yaml b/cmd/server/keploy/tests/test-23.yaml deleted file mode 100644 index 5cb3ece75..000000000 --- a/cmd/server/keploy/tests/test-23.yaml +++ /dev/null @@ -1,51 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-23 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "183" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testruns/detail?id=9a14ece4-0f76-4687-86d8-d6f30f222c1a&index=0&tdId=294c275e-7cb5-46bd-b360-05ff5c715260 - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"normalizeTests","variables":{"ids":["294c275e-7cb5-46bd-b360-05ff5c715260"]},"query":"mutation normalizeTests($ids: [String!]!) {\n normalizeTests(ids: $ids)\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"normalizeTests":true}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-23-0 - - mock-23-1 - - mock-23-2 - assertions: - noise: [] - created: 1674640251 diff --git a/cmd/server/keploy/tests/test-25.yaml b/cmd/server/keploy/tests/test-25.yaml deleted file mode 100644 index 6b4a8e040..000000000 --- a/cmd/server/keploy/tests/test-25.yaml +++ /dev/null @@ -1,49 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-25 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "229" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testruns/detail/?id=9a14ece4-0f76-4687-86d8-d6f30f222c1a&index=0&tdId=294c275e-7cb5-46bd-b360-05ff5c715260 - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"getTc","variables":{"id":"ba2a5d23-0222-42ec-b746-fbf8eacb9d6f"},"query":"query getTc($id: String!) {\n testCase(id: $id) {\n id\n created\n updated\n captured\n cid\n app\n uri\n }\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"testCase":[{"id":"ba2a5d23-0222-42ec-b746-fbf8eacb9d6f","created":"2023-01-25T05:42:40Z","updated":"2023-01-25T05:42:40Z","captured":"55036-10-06T23:08:27Z","cid":"default_company","app":"sample-node-fetch","uri":"/getData"}]}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-25-0 - assertions: - noise: [] - created: 1674640454 diff --git a/cmd/server/keploy/tests/test-26.yaml b/cmd/server/keploy/tests/test-26.yaml deleted file mode 100644 index aa8ff6b96..000000000 --- a/cmd/server/keploy/tests/test-26.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-26 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase/ba2a5d23-0222-42ec-b746-fbf8eacb9d6f - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "36" - Content-Type: application/json - Postman-Token: 16720d99-158a-4c6b-b6c9-d68aaf9d4c11 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "url": "https://youtube.com" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"ba2a5d23-0222-42ec-b746-fbf8eacb9d6f","created":1674625360,"updated":1674625360,"captured":1674625360107,"cid":"default_company","app_id":"sample-node-fetch","uri":"/getData","http_req":{"method":"GET","proto_major":0,"proto_minor":0,"url":"/getData","url_params":null,"header":{"accept":["*/*"],"host":["localhost:8080"],"user-agent":["curl/7.85.0"]},"body":"{}","binary":"","form":null},"http_resp":{"status_code":200,"header":{"access-control-allow-origin":["*"],"content-length":["280"],"content-type":["text/html; charset=utf-8"],"etag":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""],"x-powered-by":["Express"]},"body":"{\"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!\"}}","status_message":"","proto_major":0,"proto_minor":0,"binary":""},"grpc_req":{"body":"","method":""},"grpc_resp":{"body":"","error":""},"deps":[{"name":"node-fetch","type":"HTTP_CLIENT","meta":{"name":"node-fetch","options":"undefined","type":"HTTP_CLIENT","url":"https://reqres.in/api/users/2"},"data":["W3sidHlwZSI6IkJ1ZmZlciIsImRhdGEiOlsxMjMsMzQsMTAwLDk3LDExNiw5NywzNCw1OCwxMjMsMzQsMTA1LDEwMCwzNCw1OCw1MCw0NCwzNCwxMDEsMTA5LDk3LDEwNSwxMDgsMzQsNTgsMzQsMTA2LDk3LDExMCwxMDEsMTE2LDQ2LDExOSwxMDEsOTcsMTE4LDEwMSwxMTQsNjQsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCwzNCw0NCwzNCwxMDIsMTA1LDExNCwxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDc0LDk3LDExMCwxMDEsMTE2LDM0LDQ0LDM0LDEwOCw5NywxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDg3LDEwMSw5NywxMTgsMTAxLDExNCwzNCw0NCwzNCw5NywxMTgsOTcsMTE2LDk3LDExNCwzNCw1OCwzNCwxMDQsMTE2LDExNiwxMTIsMTE1LDU4LDQ3LDQ3LDExNCwxMDEsMTEzLDExNCwxMDEsMTE1LDQ2LDEwNSwxMTAsNDcsMTA1LDEwOSwxMDMsNDcsMTAyLDk3LDk5LDEwMSwxMTUsNDcsNTAsNDUsMTA1LDEwOSw5NywxMDMsMTAxLDQ2LDEwNiwxMTIsMTAzLDM0LDEyNSw0NCwzNCwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzQsNTgsMTIzLDM0LDExNywxMTQsMTA4LDM0LDU4LDM0LDEwNCwxMTYsMTE2LDExMiwxMTUsNTgsNDcsNDcsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCw0NywzNSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDUsMTA0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzQsNDQsMzQsMTE2LDEwMSwxMjAsMTE2LDM0LDU4LDM0LDg0LDExMSwzMiwxMDcsMTAxLDEwMSwxMTIsMzIsODIsMTAxLDExMyw4MiwxMDEsMTE1LDMyLDEwMiwxMTQsMTAxLDEwMSw0NCwzMiw5OSwxMTEsMTEwLDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMTE5LDk3LDExNCwxMDAsMTE1LDMyLDExNSwxMDEsMTE0LDExOCwxMDEsMTE0LDMyLDk5LDExMSwxMTUsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDEwMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzMsMzQsMTI1LDEyNV19XQ==","eyJoZWFkZXJzIjp7ImRhdGUiOiJXZWQsIDI1IEphbiAyMDIzIDA1OjQyOjQwIEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJ0cmFuc2Zlci1lbmNvZGluZyI6ImNodW5rZWQiLCJjb25uZWN0aW9uIjoiY2xvc2UiLCJ4LXBvd2VyZWQtYnkiOiJFeHByZXNzIiwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjoiKiIsImV0YWciOiJXL1wiMTE4LXBiZHd3Rm85U0tOaEQzTHg1aUhKeW5ncHEwMFwiIiwidmlhIjoiMS4xIHZlZ3VyIiwiY2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTQ0MDAiLCJjZi1jYWNoZS1zdGF0dXMiOiJISVQiLCJhZ2UiOiIzMDMxIiwicmVwb3J0LXRvIjoie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92Mz9zPVBqbkRraWtHRTZtNWplQlFBJTJGTG0wNU1Yd1ZzJTJCNUkxbFk0UVc1QjlQeXBZalM4U1Y4ZEpOUEFLb0JrWmxqbW1OUEFxaWxvQTJ2JTJCSUxJRSUyRllXWkNFbGRMRzBLY0w3bWthdnRidEI2OThyMTVXa0o0QiUyQkRJN2FTenNhZyUzRCUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSIsIm5lbCI6IntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9IiwidmFyeSI6IkFjY2VwdC1FbmNvZGluZyIsInNlcnZlciI6ImNsb3VkZmxhcmUiLCJjZi1yYXkiOiI3OGVlYWZkNWFjZDE2ZWUzLUJPTSIsImNvbnRlbnQtZW5jb2RpbmciOiJnemlwIn0sInN0YXR1cyI6MjAwLCJzdGF0dXNUZXh0IjoiT0sifQ=="]}],"all_keys":null,"anchors":null,"noise":null,"mocks":null,"type":"Http"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-26-0 - assertions: - noise: [] - created: 1674641078 diff --git a/cmd/server/keploy/tests/test-27.yaml b/cmd/server/keploy/tests/test-27.yaml deleted file mode 100644 index 894f84b36..000000000 --- a/cmd/server/keploy/tests/test-27.yaml +++ /dev/null @@ -1,25 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-27 -spec: - metadata: {} - grpc_req: - body: '{"id":"ba2a5d23-0222-42ec-b746-fbf8eacb9d6f","app":"sample-node-fetch"}' - method: services.RegressionService.GetTC - grpc_resp: - body: '{"id":"ba2a5d23-0222-42ec-b746-fbf8eacb9d6f","created":1674625360,"updated":1674625360,"captured":1674625360107,"CID":"default_company","appID":"sample-node-fetch","URI":"/getData","HttpReq":{"Method":"GET","URL":"/getData","Header":{"accept":{"Value":["*/*"]},"host":{"Value":["localhost:8080"]},"user-agent":{"Value":["curl/7.85.0"]}},"Body":"{}"},"HttpResp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"Deps":[{"Name":"node-fetch","Type":"HTTP_CLIENT","Meta":{"name":"node-fetch","options":"undefined","type":"HTTP_CLIENT","url":"https://reqres.in/api/users/2"},"Data":[{"Bin":"W3sidHlwZSI6IkJ1ZmZlciIsImRhdGEiOlsxMjMsMzQsMTAwLDk3LDExNiw5NywzNCw1OCwxMjMsMzQsMTA1LDEwMCwzNCw1OCw1MCw0NCwzNCwxMDEsMTA5LDk3LDEwNSwxMDgsMzQsNTgsMzQsMTA2LDk3LDExMCwxMDEsMTE2LDQ2LDExOSwxMDEsOTcsMTE4LDEwMSwxMTQsNjQsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCwzNCw0NCwzNCwxMDIsMTA1LDExNCwxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDc0LDk3LDExMCwxMDEsMTE2LDM0LDQ0LDM0LDEwOCw5NywxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDg3LDEwMSw5NywxMTgsMTAxLDExNCwzNCw0NCwzNCw5NywxMTgsOTcsMTE2LDk3LDExNCwzNCw1OCwzNCwxMDQsMTE2LDExNiwxMTIsMTE1LDU4LDQ3LDQ3LDExNCwxMDEsMTEzLDExNCwxMDEsMTE1LDQ2LDEwNSwxMTAsNDcsMTA1LDEwOSwxMDMsNDcsMTAyLDk3LDk5LDEwMSwxMTUsNDcsNTAsNDUsMTA1LDEwOSw5NywxMDMsMTAxLDQ2LDEwNiwxMTIsMTAzLDM0LDEyNSw0NCwzNCwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzQsNTgsMTIzLDM0LDExNywxMTQsMTA4LDM0LDU4LDM0LDEwNCwxMTYsMTE2LDExMiwxMTUsNTgsNDcsNDcsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCw0NywzNSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDUsMTA0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzQsNDQsMzQsMTE2LDEwMSwxMjAsMTE2LDM0LDU4LDM0LDg0LDExMSwzMiwxMDcsMTAxLDEwMSwxMTIsMzIsODIsMTAxLDExMyw4MiwxMDEsMTE1LDMyLDEwMiwxMTQsMTAxLDEwMSw0NCwzMiw5OSwxMTEsMTEwLDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMTE5LDk3LDExNCwxMDAsMTE1LDMyLDExNSwxMDEsMTE0LDExOCwxMDEsMTE0LDMyLDk5LDExMSwxMTUsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDEwMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzMsMzQsMTI1LDEyNV19XQ=="},{"Bin":"eyJoZWFkZXJzIjp7ImRhdGUiOiJXZWQsIDI1IEphbiAyMDIzIDA1OjQyOjQwIEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJ0cmFuc2Zlci1lbmNvZGluZyI6ImNodW5rZWQiLCJjb25uZWN0aW9uIjoiY2xvc2UiLCJ4LXBvd2VyZWQtYnkiOiJFeHByZXNzIiwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjoiKiIsImV0YWciOiJXL1wiMTE4LXBiZHd3Rm85U0tOaEQzTHg1aUhKeW5ncHEwMFwiIiwidmlhIjoiMS4xIHZlZ3VyIiwiY2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTQ0MDAiLCJjZi1jYWNoZS1zdGF0dXMiOiJISVQiLCJhZ2UiOiIzMDMxIiwicmVwb3J0LXRvIjoie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92Mz9zPVBqbkRraWtHRTZtNWplQlFBJTJGTG0wNU1Yd1ZzJTJCNUkxbFk0UVc1QjlQeXBZalM4U1Y4ZEpOUEFLb0JrWmxqbW1OUEFxaWxvQTJ2JTJCSUxJRSUyRllXWkNFbGRMRzBLY0w3bWthdnRidEI2OThyMTVXa0o0QiUyQkRJN2FTenNhZyUzRCUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSIsIm5lbCI6IntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9IiwidmFyeSI6IkFjY2VwdC1FbmNvZGluZyIsInNlcnZlciI6ImNsb3VkZmxhcmUiLCJjZi1yYXkiOiI3OGVlYWZkNWFjZDE2ZWUzLUJPTSIsImNvbnRlbnQtZW5jb2RpbmciOiJnemlwIn0sInN0YXR1cyI6MjAwLCJzdGF0dXNUZXh0IjoiT0sifQ=="}]}]}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-27-0 - assertions: - noise: [] - created: 1674641780 diff --git a/cmd/server/keploy/tests/test-28.yaml b/cmd/server/keploy/tests/test-28.yaml deleted file mode 100644 index d70847823..000000000 --- a/cmd/server/keploy/tests/test-28.yaml +++ /dev/null @@ -1,50 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-28 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/deps - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "229" - Content-Type: application/json - Postman-Token: f3144cf8-bcc2-4800-996b-306d3f993e36 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "app_id": "sample-mocks", - "test_name": "test-1", - "deps": [ - { - "status": 200, - "headers": { - "Accept": "en" - }, - "body": "hi there" - } - ] - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"json: cannot unmarshal number into Go struct field BrowserMockReq.deps of type models.FetchResponse"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674642296 diff --git a/cmd/server/keploy/tests/test-29.yaml b/cmd/server/keploy/tests/test-29.yaml deleted file mode 100644 index d62525146..000000000 --- a/cmd/server/keploy/tests/test-29.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-29 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/deps - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "59" - Content-Type: application/json - Postman-Token: 1ef4b8de-9b26-44b4-a282-02fe838a8de3 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "app_id": "sample-mocks", - "test_name": "test-1" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Vary: Origin - body: "" - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-29-0 - - mock-29-1 - assertions: - noise: [] - created: 1674642356 diff --git a/cmd/server/keploy/tests/test-3.yaml b/cmd/server/keploy/tests/test-3.yaml deleted file mode 100644 index b3462b539..000000000 --- a/cmd/server/keploy/tests/test-3.yaml +++ /dev/null @@ -1,37 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-3 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase?app=grpc-nested-app&offset=0&limit=25&testCasePath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests&mockPath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks - header: - Accept-Encoding: gzip - User-Agent: Go-http-client/1.1 - body: "" - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Eof: "false" - Vary: Origin - body: | - null - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-3-0 - - mock-3-1 - - mock-3-2 - assertions: - noise: [] - created: 1674553692 diff --git a/cmd/server/keploy/tests/test-30.yaml b/cmd/server/keploy/tests/test-30.yaml deleted file mode 100644 index 8653ca3a0..000000000 --- a/cmd/server/keploy/tests/test-30.yaml +++ /dev/null @@ -1,41 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-30 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/deps?appid=sample-mocks&testName=test-1 - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Postman-Token: 75e84a72-8aa4-4f6a-8d5e-b82cd03e7066 - User-Agent: PostmanRuntime/7.30.0 - body: "" - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - [{"id":"60620388-d564-4b6f-baa4-6d0365966759","created":1674642356,"updated":1674642356,"app_id":"sample-mocks","test_name":"test-1","deps":null}] - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-30-0 - - mock-30-1 - - mock-30-2 - - mock-30-3 - - mock-30-4 - assertions: - noise: [] - created: 1674642544 diff --git a/cmd/server/keploy/tests/test-31.yaml b/cmd/server/keploy/tests/test-31.yaml deleted file mode 100644 index 16c49eed0..000000000 --- a/cmd/server/keploy/tests/test-31.yaml +++ /dev/null @@ -1,37 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-31 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "8" - Content-Type: application/json - Postman-Token: 6f17b706-7e71-4a25-83c3-34a1db83676f - User-Agent: PostmanRuntime/7.30.0 - body: "{\n \n}" - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"captured timestamp cant be empty"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674642642 diff --git a/cmd/server/keploy/tests/test-32.yaml b/cmd/server/keploy/tests/test-32.yaml deleted file mode 100644 index 1da43edbb..000000000 --- a/cmd/server/keploy/tests/test-32.yaml +++ /dev/null @@ -1,40 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-32 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "23" - Content-Type: application/json - Postman-Token: b19cdedc-c2cd-4b18-848f-db542c3ee45d - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 123 - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"app id needs to be declared"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674642694 diff --git a/cmd/server/keploy/tests/test-33.yaml b/cmd/server/keploy/tests/test-33.yaml deleted file mode 100644 index 85c5b624f..000000000 --- a/cmd/server/keploy/tests/test-33.yaml +++ /dev/null @@ -1,44 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-33 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "47" - Content-Type: application/json - Postman-Token: 5c487a1e-c764-4f70-9bbe-0cefe48a20e3 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 123, - "app_id": "sample" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"5f3c2589-b46e-4975-923b-f383f57be1fc"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-33-0 - assertions: - noise: - - body.id - created: 1674642716 diff --git a/cmd/server/keploy/tests/test-34.yaml b/cmd/server/keploy/tests/test-34.yaml deleted file mode 100644 index 20224e8ff..000000000 --- a/cmd/server/keploy/tests/test-34.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-34 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "76" - Content-Type: application/json - Postman-Token: 069e9dce-aade-4ee9-9e9e-f6d7f8bdede1 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 123, - "app_id": "sample", - "test_case_path": "../" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"file path should be absolute"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674712481 diff --git a/cmd/server/keploy/tests/test-35.yaml b/cmd/server/keploy/tests/test-35.yaml deleted file mode 100644 index 3208ce3b9..000000000 --- a/cmd/server/keploy/tests/test-35.yaml +++ /dev/null @@ -1,36 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-35 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/test - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "0" - Postman-Token: bd3e03bc-7690-4b17-a598-ad2e5e9aadeb - User-Agent: PostmanRuntime/7.30.0 - body: "" - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"render: unable to automatically decode the request content type"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674712662 diff --git a/cmd/server/keploy/tests/test-36.yaml b/cmd/server/keploy/tests/test-36.yaml deleted file mode 100644 index ad88d1501..000000000 --- a/cmd/server/keploy/tests/test-36.yaml +++ /dev/null @@ -1,40 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-36 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/test - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "16" - Content-Type: application/json - Postman-Token: 4b5d7063-fed3-453c-a340-ebdfec1ef0dc - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "id": "" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"id is required"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674712903 diff --git a/cmd/server/keploy/tests/test-37.yaml b/cmd/server/keploy/tests/test-37.yaml deleted file mode 100644 index 88ff1827a..000000000 --- a/cmd/server/keploy/tests/test-37.yaml +++ /dev/null @@ -1,41 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-37 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/test - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "37" - Content-Type: application/json - Postman-Token: 4de4b94b-8440-4a2b-8536-1c7e8556d2ea - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "id": "123", - "app_id": "" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"app id is required"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674712927 diff --git a/cmd/server/keploy/tests/test-38.yaml b/cmd/server/keploy/tests/test-38.yaml deleted file mode 100644 index 0af1bf20e..000000000 --- a/cmd/server/keploy/tests/test-38.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-38 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/test - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "72" - Content-Type: application/json - Postman-Token: 69983f93-011d-4dff-ae6a-48e0a60e43d2 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "id": "123", - "app_id": "sample", - "test_case_path": "../" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"file path should be absolute"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674712952 diff --git a/cmd/server/keploy/tests/test-39.yaml b/cmd/server/keploy/tests/test-39.yaml deleted file mode 100644 index 9ac009df2..000000000 --- a/cmd/server/keploy/tests/test-39.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-39 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/denoise - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "72" - Content-Type: application/json - Postman-Token: 910b5fe9-1268-4f9a-b2b6-5d870a6fd21d - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "id": "123", - "app_id": "sample", - "test_case_path": "../" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"file path should be absolute"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674713091 diff --git a/cmd/server/keploy/tests/test-4.yaml b/cmd/server/keploy/tests/test-4.yaml deleted file mode 100644 index 5616ae3d0..000000000 --- a/cmd/server/keploy/tests/test-4.yaml +++ /dev/null @@ -1,39 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-4 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase?app=grpc-nested-app&offset=0&limit=25&testCasePath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests&mockPath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks - header: - Accept-Encoding: gzip - User-Agent: Go-http-client/1.1 - body: "" - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Eof: "false" - Vary: Origin - body: | - [{"id":"415e534e-10f5-488b-a781-19a4bede11b5","created":1674553625,"updated":1674553625,"captured":1674553625,"cid":"default_company","app_id":"grpc-nested-app","uri":"","http_req":{"method":"","proto_major":0,"proto_minor":0,"url":"","url_params":null,"header":null,"body":"","binary":"","form":null},"http_resp":{"status_code":0,"header":null,"body":"","status_message":"","proto_major":0,"proto_minor":0,"binary":""},"grpc_req":{"body":"{\"x\":1,\"y\":23}","method":"api.Adder.Add"},"grpc_resp":{"body":"{\"result\":81,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}","error":""},"deps":[{"name":"mongodb","type":"NO_SQL_DB","meta":{"InsertOneOptions":"[]","document":"x:1 y:23","name":"mongodb","operation":"InsertOne","type":"NO_SQL_DB"},"data":["LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA","Cv+FBQEC/4gAAAAF/4YAAQE="]}],"all_keys":null,"anchors":null,"noise":["body.result"],"mocks":null,"type":"gRPC"}] - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-4-0 - - mock-4-1 - - mock-4-2 - - mock-4-3 - - mock-4-4 - assertions: - noise: [] - created: 1674553692 diff --git a/cmd/server/keploy/tests/test-40.yaml b/cmd/server/keploy/tests/test-40.yaml deleted file mode 100644 index 49e31a002..000000000 --- a/cmd/server/keploy/tests/test-40.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-40 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/regression/start?app=grpc-nested-app&total=1x1&testCasePath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests&mockPath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "72" - Content-Type: application/json - Postman-Token: 3e16f93c-0b48-469b-9552-1bc9ad52a5cc - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "id": "123", - "app_id": "sample", - "test_case_path": "../" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"strconv.Atoi: parsing \"1x1\": invalid syntax"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674717885 diff --git a/cmd/server/keploy/tests/test-41.yaml b/cmd/server/keploy/tests/test-41.yaml deleted file mode 100644 index bc7f78dae..000000000 --- a/cmd/server/keploy/tests/test-41.yaml +++ /dev/null @@ -1,42 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-41 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/regression/start?total=1&testCasePath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests&mockPath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "72" - Content-Type: application/json - Postman-Token: 09d7bb0c-b768-4ae4-9f31-fa7315c4c057 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "id": "123", - "app_id": "sample", - "test_case_path": "../" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"missing app id"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: [] - created: 1674717948 diff --git a/cmd/server/keploy/tests/test-42.yaml b/cmd/server/keploy/tests/test-42.yaml deleted file mode 100644 index 5106f24a5..000000000 --- a/cmd/server/keploy/tests/test-42.yaml +++ /dev/null @@ -1,44 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-42 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept-Encoding: gzip - Content-Length: "2133" - Content-Type: application/json - User-Agent: Go-http-client/1.1 - body: '{"captured":1674725096,"app_id":"sample-url-shortener","uri":"/url","http_req":{"method":"POST","proto_major":1,"proto_minor":1,"url":"/url","url_params":{},"header":{"Accept":["*/*"],"Content-Length":["33"],"Content-Type":["application/json"],"User-Agent":["curl/7.85.0"]},"body":"{\n \"url\": \"https://google.com\"\n}","binary":"","form":null},"http_resp":{"status_code":200,"header":{"Content-Type":["application/json; charset=utf-8"]},"body":"{\"ts\":1674725096837339000,\"url\":\"http://localhost:8080/Lhr4BWAi\"}","status_message":"","proto_major":0,"proto_minor":0,"binary":""},"grpc_req":{"body":"","method":""},"grpc_resp":{"body":"","error":""},"deps":[{"name":"mongodb","type":"NO_SQL_DB","meta":{"UpdateOptions":"[{\u003cnil\u003e \u003cnil\u003e \u003cnil\u003e \u003cnil\u003e 0x14000632748}]","filter":"map[_id:Lhr4BWAi]","name":"mongodb","operation":"UpdateOne","type":"NO_SQL_DB","update":"[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]"},"data":["Xv+BAwEBDFVwZGF0ZVJlc3VsdAH/ggABBAEMTWF0Y2hlZENvdW50AQQAAQ1Nb2RpZmllZENvdW50AQQAAQ1VcHNlcnRlZENvdW50AQQAAQpVcHNlcnRlZElEARAAAAAH/4IBAgECAA==","Cv+DBQEC/4YAAAAF/4QAAQE="]}],"test_case_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/samples-go/gin-mongo/keploy/tests","mock_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/samples-go/gin-mongo/keploy/mocks","mocks":[{"Version":"api.keploy.io/v1beta2","Kind":"Generic","Spec":{"Metadata":{"UpdateOptions":"[{\u003cnil\u003e \u003cnil\u003e \u003cnil\u003e \u003cnil\u003e 0x14000632748}]","filter":"map[_id:Lhr4BWAi]","name":"mongodb","operation":"UpdateOne","type":"NO_SQL_DB","update":"[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]"},"Objects":[{"Type":"*mongo.UpdateResult","Data":"Xv+BAwEBDFVwZGF0ZVJlc3VsdAH/ggABBAEMTWF0Y2hlZENvdW50AQQAAQ1Nb2RpZmllZENvdW50AQQAAQ1VcHNlcnRlZENvdW50AQQAAQpVcHNlcnRlZElEARAAAAAH/4IBAgECAA=="},{"Type":"*keploy.KError","Data":"Cv+DBQEC/4YAAAAF/4QAAQE="}]}}],"type":"Http"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"0542250d-c4b0-4425-9aff-5d10a573faf5"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-42-0 - - mock-42-1 - - mock-42-2 - - mock-42-3 - - mock-42-4 - - mock-42-5 - - mock-42-6 - - mock-42-7 - assertions: - noise: - - body.id - created: 1674725096 diff --git a/cmd/server/keploy/tests/test-43.yaml b/cmd/server/keploy/tests/test-43.yaml deleted file mode 100644 index 04a36e6e6..000000000 --- a/cmd/server/keploy/tests/test-43.yaml +++ /dev/null @@ -1,35 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-43 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/denoise - header: - Accept-Encoding: gzip - Content-Length: "575" - Content-Type: application/json - User-Agent: Go-http-client/1.1 - body: '{"id":"0542250d-c4b0-4425-9aff-5d10a573faf5","app_id":"sample-url-shortener","run_id":"","resp":{"status_code":200,"header":{"Content-Type":["application/json; charset=utf-8"]},"body":"{\"ts\":1674725098912779000,\"url\":\"http://localhost:8080/Lhr4BWAi\"}","status_message":"","proto_major":0,"proto_minor":0,"binary":""},"grpc_resp":{"body":"","error":""},"test_case_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/samples-go/gin-mongo/keploy/tests","mock_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/samples-go/gin-mongo/keploy/mocks","type":"Http"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Vary: Origin - body: "" - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-43-0 - - mock-43-1 - assertions: - noise: [] - created: 1674725098 diff --git a/cmd/server/keploy/tests/test-44.yaml b/cmd/server/keploy/tests/test-44.yaml deleted file mode 100644 index f2cc1eaa8..000000000 --- a/cmd/server/keploy/tests/test-44.yaml +++ /dev/null @@ -1,100 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-44 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 424f09c7-e930-47df-b932-f56657fd2211 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":201, \"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"74ed0c69-df4b-49d6-9df2-c25cf3ee56ae"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-44-0 - - mock-44-1 - - mock-44-2 - - mock-44-3 - assertions: - noise: - - body.id - created: 1674759267 diff --git a/cmd/server/keploy/tests/test-45.yaml b/cmd/server/keploy/tests/test-45.yaml deleted file mode 100644 index b0fe5beb0..000000000 --- a/cmd/server/keploy/tests/test-45.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-45 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 0dd315ee-d9fe-4ebb-a8e8-7d62fceefb8a - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":202,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"7ece6fb3-ca8d-4628-8341-a54108910b14"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-45-0 - assertions: - noise: - - body.id - created: 1674759277 diff --git a/cmd/server/keploy/tests/test-46.yaml b/cmd/server/keploy/tests/test-46.yaml deleted file mode 100644 index 93a3af11d..000000000 --- a/cmd/server/keploy/tests/test-46.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-46 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: c9acc7da-3511-4a7b-bb5e-ac125f6f66ca - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":203,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"49dbe035-b2d4-4c64-9c90-fb41fa2f7aae"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-46-0 - assertions: - noise: - - body.id - created: 1674759302 diff --git a/cmd/server/keploy/tests/test-47.yaml b/cmd/server/keploy/tests/test-47.yaml deleted file mode 100644 index 240189337..000000000 --- a/cmd/server/keploy/tests/test-47.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-47 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: b99b038a-3990-4da4-8360-e8a503f16635 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":204,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"ab703a2b-7603-463d-91b5-0ab3f79088ee"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-47-0 - assertions: - noise: - - body.id - created: 1674759325 diff --git a/cmd/server/keploy/tests/test-48.yaml b/cmd/server/keploy/tests/test-48.yaml deleted file mode 100644 index b58823316..000000000 --- a/cmd/server/keploy/tests/test-48.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-48 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 08dcbdb7-1e92-45d4-bdaf-fa0328fdd969 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":205,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"d1d1e5c7-e03e-4b4a-93bd-e0338ba436a8"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-48-0 - assertions: - noise: - - body.id - created: 1674759331 diff --git a/cmd/server/keploy/tests/test-49.yaml b/cmd/server/keploy/tests/test-49.yaml deleted file mode 100644 index e4091d4a4..000000000 --- a/cmd/server/keploy/tests/test-49.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-49 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: b16c21dc-c2f4-48b3-afd2-de6a9e454b66 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":206,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"83ed1f43-1beb-496e-9bba-e8a69352168a"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-49-0 - assertions: - noise: - - body.id - created: 1674759337 diff --git a/cmd/server/keploy/tests/test-5.yaml b/cmd/server/keploy/tests/test-5.yaml deleted file mode 100644 index 2e15fd882..000000000 --- a/cmd/server/keploy/tests/test-5.yaml +++ /dev/null @@ -1,35 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-5 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/regression/start?app=grpc-nested-app&total=1&testCasePath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests&mockPath=/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks - header: - Accept-Encoding: gzip - User-Agent: Go-http-client/1.1 - body: "" - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"68a5f15b-790f-488c-afa5-d81eaa2347bd"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-5-0 - assertions: - noise: - - body.id - created: 1674553692 diff --git a/cmd/server/keploy/tests/test-50.yaml b/cmd/server/keploy/tests/test-50.yaml deleted file mode 100644 index 4e64815e7..000000000 --- a/cmd/server/keploy/tests/test-50.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-50 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 05f7263c-dbe1-4e8b-bf5f-e1fcfff9c403 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":207,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"fe810b44-1770-41d5-9220-de6644d23a30"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-50-0 - assertions: - noise: - - body.id - created: 1674759349 diff --git a/cmd/server/keploy/tests/test-51.yaml b/cmd/server/keploy/tests/test-51.yaml deleted file mode 100644 index e54b07e78..000000000 --- a/cmd/server/keploy/tests/test-51.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-51 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: d61323f4-a3a2-4812-812e-6c72d39fda9f - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":208,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"bf98fd05-a0ba-4df0-ab11-fca20cd93f54"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-51-0 - assertions: - noise: - - body.id - created: 1674759353 diff --git a/cmd/server/keploy/tests/test-52.yaml b/cmd/server/keploy/tests/test-52.yaml deleted file mode 100644 index 4e9f16ed0..000000000 --- a/cmd/server/keploy/tests/test-52.yaml +++ /dev/null @@ -1,97 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-52 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: ad1041a4-77f8-44c9-850b-40bdde725189 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":209,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"eba8f02b-41b4-4049-8b40-52799f0a19e8"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-52-0 - assertions: - noise: - - body.id - created: 1674759363 diff --git a/cmd/server/keploy/tests/test-54.yaml b/cmd/server/keploy/tests/test-54.yaml deleted file mode 100644 index 41dea0016..000000000 --- a/cmd/server/keploy/tests/test-54.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-54 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 9be7f670-b13b-421c-b747-37f9dd7a8b68 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":210,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759551 diff --git a/cmd/server/keploy/tests/test-55.yaml b/cmd/server/keploy/tests/test-55.yaml deleted file mode 100644 index 7e55b8e18..000000000 --- a/cmd/server/keploy/tests/test-55.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-55 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: c9f82fb4-57fd-4e7c-86e7-027e40856156 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":211,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759749 diff --git a/cmd/server/keploy/tests/test-56.yaml b/cmd/server/keploy/tests/test-56.yaml deleted file mode 100644 index 8a994e7e7..000000000 --- a/cmd/server/keploy/tests/test-56.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-56 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 7670b6fe-8509-4eba-aae3-6860bf6f67e4 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":212,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759754 diff --git a/cmd/server/keploy/tests/test-57.yaml b/cmd/server/keploy/tests/test-57.yaml deleted file mode 100644 index ea4e45305..000000000 --- a/cmd/server/keploy/tests/test-57.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-57 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: ac282ae1-a51f-4a7b-bd85-90440dd2d131 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":213,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759757 diff --git a/cmd/server/keploy/tests/test-58.yaml b/cmd/server/keploy/tests/test-58.yaml deleted file mode 100644 index dacb37d07..000000000 --- a/cmd/server/keploy/tests/test-58.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-58 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 4e100456-f5e2-426e-a1ab-4a5f3515cd80 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":214,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759760 diff --git a/cmd/server/keploy/tests/test-59.yaml b/cmd/server/keploy/tests/test-59.yaml deleted file mode 100644 index 6d38bcf5a..000000000 --- a/cmd/server/keploy/tests/test-59.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-59 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: fd581e86-5a53-4e41-9f3c-75d159608259 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":215,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759763 diff --git a/cmd/server/keploy/tests/test-6.yaml b/cmd/server/keploy/tests/test-6.yaml deleted file mode 100644 index d5737a366..000000000 --- a/cmd/server/keploy/tests/test-6.yaml +++ /dev/null @@ -1,38 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-6 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/test - header: - Accept-Encoding: gzip - Content-Length: "615" - Content-Type: application/json - User-Agent: Go-http-client/1.1 - body: '{"id":"415e534e-10f5-488b-a781-19a4bede11b5","app_id":"grpc-nested-app","run_id":"68a5f15b-790f-488c-afa5-d81eaa2347bd","resp":{"status_code":0,"header":null,"body":"","status_message":"","proto_major":0,"proto_minor":0,"binary":""},"grpc_resp":{"body":"{\"result\":81,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}","error":""},"test_case_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests","mock_path":"/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks","type":"gRPC"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"pass":true} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-6-0 - - mock-6-1 - - mock-6-2 - assertions: - noise: [] - created: 1674553692 diff --git a/cmd/server/keploy/tests/test-60.yaml b/cmd/server/keploy/tests/test-60.yaml deleted file mode 100644 index 26e55dbda..000000000 --- a/cmd/server/keploy/tests/test-60.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-60 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 80949a0a-6abb-4ee0-8bbc-cf820c86819d - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":216,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759766 diff --git a/cmd/server/keploy/tests/test-61.yaml b/cmd/server/keploy/tests/test-61.yaml deleted file mode 100644 index 4bd9f0bd9..000000000 --- a/cmd/server/keploy/tests/test-61.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-61 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 265d8533-2de8-4377-969d-dbb09db6913b - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":217,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759770 diff --git a/cmd/server/keploy/tests/test-62.yaml b/cmd/server/keploy/tests/test-62.yaml deleted file mode 100644 index f39339703..000000000 --- a/cmd/server/keploy/tests/test-62.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-62 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 99b4a6fe-06d6-4eb4-9f6e-9fc34d29d7ec - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":218,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759773 diff --git a/cmd/server/keploy/tests/test-63.yaml b/cmd/server/keploy/tests/test-63.yaml deleted file mode 100644 index dcca88c98..000000000 --- a/cmd/server/keploy/tests/test-63.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-63 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 8c82c058-6af1-4d2f-8f6f-a95335212fae - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":219,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759777 diff --git a/cmd/server/keploy/tests/test-64.yaml b/cmd/server/keploy/tests/test-64.yaml deleted file mode 100644 index 176cfae94..000000000 --- a/cmd/server/keploy/tests/test-64.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-64 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: e263ecec-6b7e-4a82-a1c6-1b5a78b7620e - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":220,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: - - body.id - created: 1674759781 diff --git a/cmd/server/keploy/tests/test-65.yaml b/cmd/server/keploy/tests/test-65.yaml deleted file mode 100644 index 81e51af6f..000000000 --- a/cmd/server/keploy/tests/test-65.yaml +++ /dev/null @@ -1,94 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-65 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "2175" - Content-Type: application/json - Postman-Token: 1899b3cf-4920-4db4-ae85-2c6862d245c3 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674553625, - "app_id": "xyzABC", - "grpc_req": { - "body": "{\"x\":221,\"y\":1}", - "method": "api.Adders.Added" - }, - "grpc_resp": { - "body": "{\"result\":90,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "data": [ - "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA", - "Cv+FBQEC/4gAAAAF/4YAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "InsertOneOptions": "[]", - "document": "x:1 y:23", - "name": "mongodb", - "operation": "InsertOne", - "type": "NO_SQL_DB" - }, - "Objects": [ - { - "Type": "*mongo.InsertOneResult", - "Data": "LP+BAwEBD0luc2VydE9uZVJlc3VsdAH/ggABAQEKSW5zZXJ0ZWRJRAEQAAAAT/+CATNnby5tb25nb2RiLm9yZy9tb25nby1kcml2ZXIvYnNvbi9wcmltaXRpdmUuT2JqZWN0SUT/gwEBAQhPYmplY3RJRAH/hAABBgEYAAAY/4QUAAxj/8//qRkRZP/hI//V//IO/9sA" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+FBQEC/4gAAAAF/4YAAQE=" - } - ] - } - } - ], - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":""} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - assertions: - noise: ["body.id"] - created: 1674759783 diff --git a/cmd/server/keploy/tests/test-66.yaml b/cmd/server/keploy/tests/test-66.yaml deleted file mode 100644 index 19b051aa6..000000000 --- a/cmd/server/keploy/tests/test-66.yaml +++ /dev/null @@ -1,44 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-66 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/deps - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "59" - Content-Type: application/json - Postman-Token: 8aa09456-c8e8-474b-95fc-6aa3d009ca20 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "app_id": "sample-mocks", - "test_name": "test-1" - } - body_type: utf-8 - resp: - status_code: 400 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"status":"Invalid request.","error":"write exception: write errors: [The argument to $each in $push must be an array but it was of type: null]"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-66-0 - - mock-66-1 - assertions: - noise: [] - created: 1674760382 diff --git a/cmd/server/keploy/tests/test-69.yaml b/cmd/server/keploy/tests/test-69.yaml deleted file mode 100644 index 4cf39074c..000000000 --- a/cmd/server/keploy/tests/test-69.yaml +++ /dev/null @@ -1,62 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-69 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/test - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "777" - Content-Type: application/json - Postman-Token: 2d272d10-fd87-43a5-ad04-c1722c116f95 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "id": "415e534e-10f5-488b-a781-19a4bede11b5", - "app_id": "grpc-nested-app", - "run_id": "68a5f15b-790f-488c-afa5-d81eaa2347bd", - "resp": { - "status_code": 0, - "header": null, - "body": "", - "status_message": "", - "proto_major": 0, - "proto_minor": 0, - "binary": "" - }, - "grpc_resp": { - "body": "{\"result\":81,\"data\":{\"name\":\"Fabio Di Gentanio\",\"team\":{\"name\":\"Ducati\",\"championships\":\"0\",\"points\":\"1001\"}}}", - "error": "error occured" - }, - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/go/grpc-example-app/keploy/mocks", - "type": "gRPC" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"pass":false} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-69-0 - - mock-69-1 - - mock-69-2 - assertions: - noise: [] - created: 1675066335 diff --git a/cmd/server/keploy/tests/test-7.yaml b/cmd/server/keploy/tests/test-7.yaml deleted file mode 100644 index 1cd33d08b..000000000 --- a/cmd/server/keploy/tests/test-7.yaml +++ /dev/null @@ -1,33 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-7 -spec: - metadata: {} - req: - method: GET - proto_major: 1 - proto_minor: 1 - url: /api/regression/end?status=true&id=68a5f15b-790f-488c-afa5-d81eaa2347bd - header: - Accept-Encoding: gzip - User-Agent: Go-http-client/1.1 - body: "" - body_type: utf-8 - resp: - status_code: 200 - header: - Vary: Origin - body: "" - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-7-0 - - mock-7-1 - assertions: - noise: [] - created: 1674553692 diff --git a/cmd/server/keploy/tests/test-70.yaml b/cmd/server/keploy/tests/test-70.yaml deleted file mode 100644 index 32a1650f3..000000000 --- a/cmd/server/keploy/tests/test-70.yaml +++ /dev/null @@ -1,95 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-70 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "232" - Content-Type: application/json - Postman-Token: 5d5d45e4-cda3-4ab0-8e46-7156350c473c - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "operationName": "getRecentTestRuns", - "variables": {}, - "query": "query getRecentTestRuns {\n testRun {\n id\n created\n updated\n status\n app\n user\n success\n failure\n total\n }\n}\n" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json - Vary: Origin - body: '{"data":{"testRun":[{"id":"4cfe7945-ed00-4ee0-89c9-3da465962754","created":"2023-01-26T07:32:56Z","updated":"2023-01-26T07:32:56Z","status":"FAILED","app":"grpc-nested-app","user":"default_user","success":0,"failure":0,"total":1},{"id":"9a14ece4-0f76-4687-86d8-d6f30f222c1a","created":"2023-01-25T09:49:36Z","updated":"2023-01-25T09:49:36Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":9,"failure":1,"total":10},{"id":"f34ad94f-917f-408f-8992-d423a5bec342","created":"2023-01-25T09:45:37Z","updated":"2023-01-25T09:45:37Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":3},{"id":"3671187f-7659-40b4-83c9-8757e40eeb29","created":"2023-01-25T09:36:46Z","updated":"2023-01-25T09:36:46Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":3},{"id":"cf3d18c9-33ff-4827-b4b6-e78fca48adbb","created":"2023-01-25T09:28:19Z","updated":"2023-01-25T09:28:19Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":3},{"id":"390d7d1b-0af7-45f9-bb38-fd0eb7165e2d","created":"2023-01-25T09:27:35Z","updated":"2023-01-25T09:27:35Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":3},{"id":"bfda8f01-3e45-46c7-acf3-c01af15ee5ad","created":"2023-01-25T09:16:05Z","updated":"2023-01-25T09:16:05Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":3},{"id":"e98f3e7e-2921-4afd-a782-6d8a21512d43","created":"2023-01-25T09:11:09Z","updated":"2023-01-25T09:11:09Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":3},{"id":"953f5304-4f33-4479-af1c-1362dae25888","created":"2023-01-25T09:10:45Z","updated":"2023-01-25T09:10:45Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":3},{"id":"4177067f-0381-447a-a112-02f24fba956d","created":"2023-01-25T08:48:05Z","updated":"2023-01-25T08:48:05Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":2,"failure":1,"total":3},{"id":"46bb19ac-71a8-4945-ab81-1663fb4e9d4b","created":"2023-01-25T08:46:28Z","updated":"2023-01-25T08:46:28Z","status":"PASSED","app":"sample-node-fetch","user":"default_user","success":3,"failure":0,"total":3},{"id":"27ceccb7-6d04-4b03-ade2-6bb45930b20e","created":"2023-01-25T08:46:08Z","updated":"2023-01-25T08:46:08Z","status":"PASSED","app":"sample-node-fetch","user":"default_user","success":3,"failure":0,"total":3},{"id":"2bb03b31-58f8-4a0b-ac6d-4e6f1776b877","created":"2023-01-25T07:27:44Z","updated":"2023-01-25T07:27:44Z","status":"PASSED","app":"sample-node-fetch","user":"default_user","success":3,"failure":0,"total":3},{"id":"84eefacb-8429-4fba-a2e9-4f6158466435","created":"2023-01-25T06:23:42Z","updated":"2023-01-25T09:45:37Z","status":"PASSED","app":"sample-node-fetch","user":"default_user","success":24,"failure":0,"total":3},{"id":"b38c9579-2f13-49f3-a615-30695904f424","created":"2023-01-25T06:18:48Z","updated":"2023-01-25T06:18:48Z","status":"PASSED","app":"sample-node-fetch","user":"default_user","success":14,"failure":0,"total":14},{"id":"d19440f4-17ad-4bee-917e-242348eac05b","created":"2023-01-25T06:12:23Z","updated":"2023-01-25T06:12:23Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":14},{"id":"91bc0561-5eb3-448a-9aa9-6cfe0e31e1bc","created":"2023-01-25T06:07:44Z","updated":"2023-01-25T06:07:44Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":14},{"id":"bb135ddc-27fd-47f1-bbd6-85a8145231c4","created":"2023-01-25T05:59:17Z","updated":"2023-01-25T05:59:17Z","status":"FAILED","app":"sample-node-fetch","user":"default_user","success":0,"failure":0,"total":14},{"id":"68a5f15b-790f-488c-afa5-d81eaa2347bd","created":"2023-01-24T09:48:12Z","updated":"2023-01-24T09:48:12Z","status":"PASSED","app":"grpc-nested-app","user":"default_user","success":2,"failure":2,"total":1},{"id":"3cf26063-09e1-4a42-addd-4e3da2c35709","created":"2023-01-23T12:15:52Z","updated":"2023-01-23T12:15:54Z","status":"PASSED","app":"sample-url-shortener","user":"default_user","success":2,"failure":0,"total":2},{"id":"e760d882-cb4f-4c37-8b40-db19f7e16e43","created":"2023-01-23T12:08:07Z","updated":"2023-01-23T12:08:08Z","status":"PASSED","app":"sample-url-shortener","user":"default_user","success":2,"failure":0,"total":2},{"id":"cc4bd761-55ad-459b-af95-bc46efe7055f","created":"2023-01-23T12:00:04Z","updated":"2023-01-23T12:00:04Z","status":"FAILED","app":"sample-url-shortener","user":"default_user","success":0,"failure":0,"total":0},{"id":"376c3d64-6f1b-4012-962f-c2183ef97750","created":"2023-01-23T11:48:14Z","updated":"2023-01-23T11:48:14Z","status":"FAILED","app":"sample-url-shortener","user":"default_user","success":0,"failure":0,"total":0},{"id":"19f5f107-3183-4ad3-aede-c0b1771adddc","created":"2023-01-23T11:47:23Z","updated":"2023-01-23T11:47:23Z","status":"PASSED","app":"sample-url-shortener","user":"default_user","success":0,"failure":0,"total":0},{"id":"9b897957-892d-41fb-b09b-cb5aa2d29479","created":"2023-01-03T19:07:15Z","updated":"2023-01-03T19:07:15Z","status":"PASSED","app":"sample-url-shortener","user":"default_user","success":2,"failure":0,"total":2}]}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-70-0 - - mock-70-1 - - mock-70-2 - - mock-70-3 - - mock-70-4 - - mock-70-5 - - mock-70-6 - - mock-70-7 - - mock-70-8 - - mock-70-9 - - mock-70-10 - - mock-70-11 - - mock-70-12 - - mock-70-13 - - mock-70-14 - - mock-70-15 - - mock-70-16 - - mock-70-17 - - mock-70-18 - - mock-70-19 - - mock-70-20 - - mock-70-21 - - mock-70-22 - - mock-70-23 - - mock-70-24 - - mock-70-25 - - mock-70-26 - - mock-70-27 - - mock-70-28 - - mock-70-29 - - mock-70-30 - - mock-70-31 - - mock-70-32 - - mock-70-33 - - mock-70-34 - - mock-70-35 - - mock-70-36 - - mock-70-37 - - mock-70-38 - - mock-70-39 - - mock-70-40 - - mock-70-41 - - mock-70-42 - - mock-70-43 - - mock-70-44 - - mock-70-45 - - mock-70-46 - - mock-70-47 - - mock-70-48 - - mock-70-49 - - mock-70-50 - - mock-70-51 - - mock-70-52 - assertions: - noise: [] - created: 1675075786 diff --git a/cmd/server/keploy/tests/test-71.yaml b/cmd/server/keploy/tests/test-71.yaml deleted file mode 100644 index c70d0a4aa..000000000 --- a/cmd/server/keploy/tests/test-71.yaml +++ /dev/null @@ -1,64 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-71 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/query - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Accept-Language: en-GB,en - Authorization: BEARER - Connection: keep-alive - Content-Length: "1432" - Content-Type: application/json - Cookie: connect.sid=s%3AdxWsE0jhYYsXQwFQKZJhtK_5Jli7MPB1.Wjbj0YQ3J7yJE1Zx21NQAWPtrz1f8i73j9FAnlvbrSg - Origin: http://localhost:6790 - Referer: http://localhost:6790/testruns/detail/?id=97f4880b-b808-4b75-acfe-c5e1e52ef161 - Sec-Fetch-Dest: empty - Sec-Fetch-Mode: cors - Sec-Fetch-Site: same-origin - Sec-Gpc: "1" - User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 - body: '{"operationName":"getRecentTestRuns","variables":{"id":"97f4880b-b808-4b75-acfe-c5e1e52ef161"},"query":"query getRecentTestRuns($id: String) {\n testRun(id: $id) {\n id\n created\n updated\n status\n app\n user\n success\n failure\n total\n tests {\n id\n status\n started\n completed\n testCaseID\n deps {\n name\n type\n meta {\n key\n value\n }\n }\n uri\n noise\n req {\n protoMajor\n protoMinor\n url\n urlParam {\n key\n value\n }\n header {\n key\n value\n }\n method\n body\n }\n result {\n statusCode {\n normal\n expected\n actual\n }\n headersResult {\n normal\n expected {\n key\n value\n }\n actual {\n key\n value\n }\n }\n bodyResult {\n normal\n type\n expected\n actual\n errors {\n key\n missingInExpected\n missingInActual\n }\n }\n depResult {\n name\n type\n meta {\n normal\n key\n expected\n actual\n }\n }\n }\n }\n }\n}\n"}' - body_type: utf-8 - resp: - status_code: 200 - header: - Access-Control-Allow-Credentials: "true" - Access-Control-Allow-Origin: '*' - Access-Control-Expose-Headers: Link - Content-Type: application/json - Vary: Origin - body: '{"data":{"testRun":[{"id":"97f4880b-b808-4b75-acfe-c5e1e52ef161","created":"2023-01-31T08:36:42Z","updated":"2023-01-31T08:36:43Z","status":"FAILED","app":"sample-url-shortener","user":"default_user","success":1,"failure":1,"total":2,"tests":[{"id":"9276246b-e1a1-4313-be91-d5f694fe8560","status":"FAILED","started":"2023-01-31T08:36:42Z","completed":"2023-01-31T08:36:42Z","testCaseID":"0542250d-c4b0-4425-9aff-5d10a573faf5","deps":[{"name":"mongodb","type":"NO_SQL_DB","meta":[{"key":"update","value":"[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]"},{"key":"UpdateOptions","value":"[{\u003cnil\u003e \u003cnil\u003e \u003cnil\u003e \u003cnil\u003e 0x14000632748}]"},{"key":"filter","value":"map[_id:Lhr4BWAi]"},{"key":"name","value":"mongodb"},{"key":"operation","value":"UpdateOne"},{"key":"type","value":"NO_SQL_DB"}]}],"uri":"/url","noise":["body.ts"],"req":{"protoMajor":1,"protoMinor":1,"url":"/url","urlParam":null,"header":[{"key":"User-Agent","value":["curl/7.85.0"]},{"key":"Accept","value":["*/*"]},{"key":"Content-Length","value":["33"]},{"key":"Content-Type","value":["application/json"]}],"method":"POST","body":"{\n \"url\": \"https://google.com\"\n}"},"result":{"statusCode":{"normal":true,"expected":200,"actual":200},"headersResult":[{"normal":true,"expected":{"key":"Content-Type","value":["application/json; charset=utf-8"]},"actual":{"key":"Content-Type","value":["application/json; charset=utf-8"]}}],"bodyResult":{"normal":false,"type":"JSON","expected":"{\"ts\":1674725096837339000,\"url\":\"http://localhost:8080/url/Lhr4BWAi\"}","actual":"{\"ts\":1675154202574247000,\"url\":\"http://localhost:8080/Lhr4BWAi\"}","errors":null},"depResult":null}},{"id":"00ad8825-ec5e-42b6-af77-d657753e9979","status":"PASSED","started":"2023-01-31T08:36:43Z","completed":"2023-01-31T08:36:43Z","testCaseID":"413a312b-3e43-48b1-8797-dbd2bbab3590","deps":[{"name":"mongodb","type":"NO_SQL_DB","meta":[{"key":"FindOneOptions","value":"[]"},{"key":"filter","value":"map[_id:Lhr4BWAi]"},{"key":"name","value":"mongodb"},{"key":"operation","value":"FindOne.Decode"},{"key":"type","value":"NO_SQL_DB"}]}],"uri":"/:param","noise":null,"req":{"protoMajor":1,"protoMinor":1,"url":"/Lhr4BWAi","urlParam":[{"key":"param","value":"Lhr4BWAi"}],"header":[{"key":"Accept","value":["*/*"]},{"key":"User-Agent","value":["curl/7.85.0"]}],"method":"GET","body":""},"result":{"statusCode":{"normal":true,"expected":303,"actual":303},"headersResult":[{"normal":true,"expected":{"key":"Content-Type","value":["text/html; charset=utf-8"]},"actual":{"key":"Content-Type","value":["text/html; charset=utf-8"]}},{"normal":true,"expected":{"key":"Location","value":["https://google.com"]},"actual":{"key":"Location","value":["https://google.com"]}}],"bodyResult":{"normal":true,"type":"PLAIN","expected":"\u003ca href=\"https://google.com\"\u003eSee Other\u003c/a\u003e.\n\n","actual":"\u003ca href=\"https://google.com\"\u003eSee Other\u003c/a\u003e.\n\n","errors":null},"depResult":null}}]}]}}' - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-71-0 - - mock-71-1 - - mock-71-2 - - mock-71-3 - - mock-71-4 - - mock-71-5 - - mock-71-6 - - mock-71-7 - - mock-71-8 - - mock-71-9 - - mock-71-10 - - mock-71-11 - assertions: - noise: - - body.data.testRun.tests.deps.meta.key - - body.data.testRun.tests.req.header.key - - body.data.testRun.tests.deps.meta.value - - body.data.testRun.tests.req.header.value - created: 1675154476 diff --git a/cmd/server/keploy/tests/test-72.yaml b/cmd/server/keploy/tests/test-72.yaml deleted file mode 100644 index fc69142d6..000000000 --- a/cmd/server/keploy/tests/test-72.yaml +++ /dev/null @@ -1,145 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: Http -name: test-72 -spec: - metadata: {} - req: - method: POST - proto_major: 1 - proto_minor: 1 - url: /api/regression/testcase - header: - Accept: '*/*' - Accept-Encoding: gzip, deflate, br - Connection: keep-alive - Content-Length: "3600" - Content-Type: application/json - Postman-Token: 35707399-3a5d-42ee-be2b-19b868cd9620 - User-Agent: PostmanRuntime/7.30.0 - body: |- - { - "captured": 1674725096, - "app_id": "sample-url-shortener", - "uri": "/url", - "remove": ["all.header.Content-Type"], - "replace": { - "method": "DELETE", - "proto_major": "0", - "proto_minor":"0", - "header.User-Agent": "foo-bar", - "domain": "google.com" - }, - "http_req": { - "method": "POST", - "proto_major": 1, - "proto_minor": 1, - "url": "/url", - "url_params": {}, - "header": { - "Accept": [ - "*/*" - ], - "Content-Length": [ - "33" - ], - "Content-Type": [ - "application/json" - ], - "User-Agent": [ - "curl/7.85.0" - ] - }, - "body": "{\n \"url\": \"https://google.com\"\n}", - "binary": "", - "form": null - }, - "http_resp": { - "status_code": 200, - "header": { - "Content-Type": [ - "application/json; charset=utf-8" - ] - }, - "body": "{\"ts\":1674725096837339000,\"url\":\"http://localhost:8080/Lhr4BWAi\"}", - "status_message": "", - "proto_major": 0, - "proto_minor": 0, - "binary": "" - }, - "grpc_req": { - "body": "", - "method": "" - }, - "grpc_resp": { - "body": "", - "error": "" - }, - "deps": [ - { - "name": "mongodb", - "type": "NO_SQL_DB", - "meta": { - "UpdateOptions": "[{\u003cnil\u003e \u003cnil\u003e \u003cnil\u003e \u003cnil\u003e 0x14000632748}]", - "filter": "map[_id:Lhr4BWAi]", - "name": "mongodb", - "operation": "UpdateOne", - "type": "NO_SQL_DB", - "update": "[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]" - }, - "data": [ - "Xv+BAwEBDFVwZGF0ZVJlc3VsdAH/ggABBAEMTWF0Y2hlZENvdW50AQQAAQ1Nb2RpZmllZENvdW50AQQAAQ1VcHNlcnRlZENvdW50AQQAAQpVcHNlcnRlZElEARAAAAAH/4IBAgECAA==", - "Cv+DBQEC/4YAAAAF/4QAAQE=" - ] - } - ], - "test_case_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/samples-go/gin-mongo/keploy/tests", - "mock_path": "/Users/ritikjain/Desktop/go-practice/skp-workspace/samples-go/gin-mongo/keploy/mocks", - "mocks": [ - { - "Version": "api.keploy.io/v1beta2", - "Kind": "Generic", - "Spec": { - "Metadata": { - "UpdateOptions": "[{\u003cnil\u003e \u003cnil\u003e \u003cnil\u003e \u003cnil\u003e 0x14000632748}]", - "filter": "map[_id:Lhr4BWAi]", - "name": "mongodb", - "operation": "UpdateOne", - "type": "NO_SQL_DB", - "update": "[{$set {Lhr4BWAi 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 2023-01-26 14:54:56.829485 +0530 IST m=+2.309309876 https://google.com}}]" - }, - "Objects": [ - { - "Type": "*mongo.UpdateResult", - "Data": "Xv+BAwEBDFVwZGF0ZVJlc3VsdAH/ggABBAEMTWF0Y2hlZENvdW50AQQAAQ1Nb2RpZmllZENvdW50AQQAAQ1VcHNlcnRlZENvdW50AQQAAQpVcHNlcnRlZElEARAAAAAH/4IBAgECAA==" - }, - { - "Type": "*keploy.KError", - "Data": "Cv+DBQEC/4YAAAAF/4QAAQE=" - } - ] - } - } - ], - "type": "Http" - } - body_type: utf-8 - resp: - status_code: 200 - header: - Content-Type: application/json; charset=utf-8 - Vary: Origin - body: | - {"id":"8bb569cb-197c-4646-8237-ff6dec1654e0"} - body_type: utf-8 - status_message: "" - proto_major: 1 - proto_minor: 1 - objects: - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - mocks: - - mock-72-0 - assertions: - noise: - - body.id - created: 1675766517 diff --git a/cmd/server/keploy/tests/test-8.yaml b/cmd/server/keploy/tests/test-8.yaml deleted file mode 100644 index cdf2b321e..000000000 --- a/cmd/server/keploy/tests/test-8.yaml +++ /dev/null @@ -1,26 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-8 -spec: - metadata: {} - grpc_req: - body: '{"Captured":1674626110809,"AppID":"sample-node-fetch","URI":"/getData","HttpReq":{"Method":"GET","URL":"/getData","Header":{"accept":{"Value":["*/*"]},"host":{"Value":["localhost:8080"]},"user-agent":{"Value":["curl/7.85.0"]}},"Body":"{}"},"HttpResp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"Dependency":[{"Name":"node-fetch","Type":"HTTP_CLIENT","Meta":{"name":"node-fetch","options":"undefined","type":"HTTP_CLIENT","url":"https://reqres.in/api/users/2"},"Data":[{"Bin":"W3sidHlwZSI6IkJ1ZmZlciIsImRhdGEiOlsxMjMsMzQsMTAwLDk3LDExNiw5NywzNCw1OCwxMjMsMzQsMTA1LDEwMCwzNCw1OCw1MCw0NCwzNCwxMDEsMTA5LDk3LDEwNSwxMDgsMzQsNTgsMzQsMTA2LDk3LDExMCwxMDEsMTE2LDQ2LDExOSwxMDEsOTcsMTE4LDEwMSwxMTQsNjQsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCwzNCw0NCwzNCwxMDIsMTA1LDExNCwxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDc0LDk3LDExMCwxMDEsMTE2LDM0LDQ0LDM0LDEwOCw5NywxMTUsMTE2LDk1LDExMCw5NywxMDksMTAxLDM0LDU4LDM0LDg3LDEwMSw5NywxMTgsMTAxLDExNCwzNCw0NCwzNCw5NywxMTgsOTcsMTE2LDk3LDExNCwzNCw1OCwzNCwxMDQsMTE2LDExNiwxMTIsMTE1LDU4LDQ3LDQ3LDExNCwxMDEsMTEzLDExNCwxMDEsMTE1LDQ2LDEwNSwxMTAsNDcsMTA1LDEwOSwxMDMsNDcsMTAyLDk3LDk5LDEwMSwxMTUsNDcsNTAsNDUsMTA1LDEwOSw5NywxMDMsMTAxLDQ2LDEwNiwxMTIsMTAzLDM0LDEyNSw0NCwzNCwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzQsNTgsMTIzLDM0LDExNywxMTQsMTA4LDM0LDU4LDM0LDEwNCwxMTYsMTE2LDExMiwxMTUsNTgsNDcsNDcsMTE0LDEwMSwxMTMsMTE0LDEwMSwxMTUsNDYsMTA1LDExMCw0NywzNSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDUsMTA0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzQsNDQsMzQsMTE2LDEwMSwxMjAsMTE2LDM0LDU4LDM0LDg0LDExMSwzMiwxMDcsMTAxLDEwMSwxMTIsMzIsODIsMTAxLDExMyw4MiwxMDEsMTE1LDMyLDEwMiwxMTQsMTAxLDEwMSw0NCwzMiw5OSwxMTEsMTEwLDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMTE5LDk3LDExNCwxMDAsMTE1LDMyLDExNSwxMDEsMTE0LDExOCwxMDEsMTE0LDMyLDk5LDExMSwxMTUsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDEwMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzMsMzQsMTI1LDEyNV19XQ=="},{"Bin":"eyJoZWFkZXJzIjp7ImRhdGUiOiJXZWQsIDI1IEphbiAyMDIzIDA1OjU1OjEwIEdNVCIsImNvbnRlbnQtdHlwZSI6ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiLCJ0cmFuc2Zlci1lbmNvZGluZyI6ImNodW5rZWQiLCJjb25uZWN0aW9uIjoiY2xvc2UiLCJ4LXBvd2VyZWQtYnkiOiJFeHByZXNzIiwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIjoiKiIsImV0YWciOiJXL1wiMTE4LXBiZHd3Rm85U0tOaEQzTHg1aUhKeW5ncHEwMFwiIiwidmlhIjoiMS4xIHZlZ3VyIiwiY2FjaGUtY29udHJvbCI6Im1heC1hZ2U9MTQ0MDAiLCJjZi1jYWNoZS1zdGF0dXMiOiJISVQiLCJhZ2UiOiI2OTMwIiwicmVwb3J0LXRvIjoie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92Mz9zPVNmbHJBU3RXT3VVRzM4WGs1TDV1RHBaSDh2UyUyQnRTTjB1cXhyQXFwS3JWM2pjS1puVmJ6YUlvSnBsRDhlZWE3RmRPWWMya3pONiUyQkdmdWlOamR0ZVZQU1NLZUt3c1ROSW5BUDhWUlR0WVR5RktSeTJvWmdRREdIQzBqUSUzRCUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSIsIm5lbCI6IntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9IiwidmFyeSI6IkFjY2VwdC1FbmNvZGluZyIsInNlcnZlciI6ImNsb3VkZmxhcmUiLCJjZi1yYXkiOiI3OGVlYzIyOTlmZmM4NjIwLUJPTSIsImNvbnRlbnQtZW5jb2RpbmciOiJnemlwIn0sInN0YXR1cyI6MjAwLCJzdGF0dXNUZXh0IjoiT0sifQ=="}]}],"TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock","Mocks":[{"Version":"api.keploy.io/v1beta1","Kind":"Http","Spec":{"Metadata":{"name":"node-fetch","options":"undefined","type":"HTTP_CLIENT","url":"https://reqres.in/api/users/2"},"Req":{"Method":"GET","URL":"https://reqres.in/api/users/2"},"Res":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"age":{"Value":["6930"]},"cache-control":{"Value":["max-age=14400"]},"cf-cache-status":{"Value":["HIT"]},"cf-ray":{"Value":["78eec2299ffc8620-BOM"]},"connection":{"Value":["close"]},"content-encoding":{"Value":["gzip"]},"content-type":{"Value":["application/json; charset=utf-8"]},"date":{"Value":["Wed, 25 Jan 2023 05:55:10 GMT"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"nel":{"Value":["{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"]},"report-to":{"Value":["{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=SflrAStWOuUG38Xk5L5uDpZH8vS%2BtSN0uqxrAqpKrV3jcKZnVbzaIoJplD8eea7FdOYc2kzN6%2BGfuiNjdteVPSSKeKwsTNInAP8VRTtYTyFKRy2oZgQDGHC0jQ%3D%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}"]},"server":{"Value":["cloudflare"]},"transfer-encoding":{"Value":["chunked"]},"vary":{"Value":["Accept-Encoding"]},"via":{"Value":["1.1 vegur"]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"}}}],"Type":"Http"}' - method: services.RegressionService.PostTC - grpc_resp: - body: '{"tcsId":{"id":"220eae63-8e5f-476b-844f-d5caea86dcb4"}}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-8-0 - assertions: - noise: - - body.tcsId.id - created: 1674626110 diff --git a/cmd/server/keploy/tests/test-9.yaml b/cmd/server/keploy/tests/test-9.yaml deleted file mode 100644 index 9deacffea..000000000 --- a/cmd/server/keploy/tests/test-9.yaml +++ /dev/null @@ -1,26 +0,0 @@ -version: api.keploy.io/v1beta2 -kind: gRPC -name: test-9 -spec: - metadata: {} - grpc_req: - body: '{"ID":"220eae63-8e5f-476b-844f-d5caea86dcb4","AppID":"sample-node-fetch","Resp":{"StatusCode":200,"Header":{"access-control-allow-origin":{"Value":["*"]},"content-length":{"Value":["280"]},"content-type":{"Value":["text/html; charset=utf-8"]},"etag":{"Value":["W/\"118-pbdwwFo9SKNhD3Lx5iHJyngpq00\""]},"x-powered-by":{"Value":["Express"]}},"Body":"{\"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!\"}}"},"TestCasePath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests","MockPath":"/Users/ritikjain/Desktop/js-practice/samples-typescript/keploy-tests/mock","Type":"Http"}' - method: services.RegressionService.DeNoise - grpc_resp: - body: '{"message":"OK"}' - error: nil - objects: - - type: error - data: H4sIAAAAAAAA//IwKfZ0hAL9cldHxwB9fUcEsAUEAAD///Skc6kgAAAA - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA= - - type: error - data: "" - mocks: - - mock-9-0 - - mock-9-1 - assertions: - noise: [] - created: 1674626110 diff --git a/cmd/server/main.go b/cmd/server/main.go deleted file mode 100644 index befaf7b73..000000000 --- a/cmd/server/main.go +++ /dev/null @@ -1,56 +0,0 @@ -package main - -import ( - v "github.com/hashicorp/go-version" - - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" - "go.keploy.io/server/server" -) - -// version is the version of the server and will be injected during build by ldflags -// see https://goreleaser.com/customization/build/ - -var version string - -func main() { - // main method to start Keploy server - if version == "" { - version = getKeployVersion() - } - server.Server(version) -} - -func getKeployVersion() string { - - repo, err := git.PlainOpen(".") - if err != nil { - return "v0.1.0-dev" - } - - tagIter, err := repo.Tags() - if err != nil { - return "v0.1.0-dev" - } - - var latestTag string - var latestTagVersion *v.Version - - err = tagIter.ForEach(func(tagRef *plumbing.Reference) error { - tagName := tagRef.Name().Short() - tagVersion, err := v.NewVersion(tagName) - if err == nil { - if latestTagVersion == nil || latestTagVersion.LessThan(tagVersion) { - latestTagVersion = tagVersion - latestTag = tagName - } - } - return nil - }) - - if err != nil { - return "v0.1.0-dev" - } - - return latestTag + "-dev" -} diff --git a/cmd/server/main_test.go b/cmd/server/main_test.go deleted file mode 100644 index a5ec1345b..000000000 --- a/cmd/server/main_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package main - -import ( - "os" - "path/filepath" - "strings" - "testing" - - "github.com/keploy/go-sdk/keploy" - "go.uber.org/zap" -) - -// MakeFunctionRunOnRootFolder changes current directory to root when test file is executed -func MakeFunctionRunOnRootFolder() { - logConf := zap.NewDevelopmentConfig() - logConf.Level = zap.NewAtomicLevelAt(zap.InfoLevel) - logger, err := logConf.Build() - if err != nil { - panic(err) - } - defer logger.Sync() - ospath, err := os.Getwd() - if err != nil { - logger.Error("failed to get current directory path", zap.Error(err)) - } - // already in root directory - if !strings.Contains(ospath, "cmd/server") { - return - } - - // get the absolute path of listmonk root directory - dir, err := filepath.Abs("../../") - if err != nil { - logger.Error("failed to get root directory path of listmonk", zap.Error(err)) - } - - // change current direstory to root - err = os.Chdir(dir) - if err != nil { - logger.Error("failed to change current directory path to root listmonk", zap.Error(err)) - } -} - -func TestKeploy(t *testing.T) { - MakeFunctionRunOnRootFolder() - keploy.SetTestMode() - go main() - keploy.AssertTests(t) -} diff --git a/config/config.go b/config/config.go new file mode 100644 index 000000000..eb8f195c1 --- /dev/null +++ b/config/config.go @@ -0,0 +1,93 @@ +// Package config provides configuration structures for the application. +package config + +import "time" + +type Config struct { + Path string `json:"path" yaml:"path" mapstructure:"path" ` + Command string `json:"command" yaml:"command" mapstructure:"command"` + Port uint32 `json:"port" yaml:"port" mapstructure:"port"` + DNSPort uint32 `json:"dnsPort" yaml:"dnsPort" mapstructure:"dnsPort"` + ProxyPort uint32 `json:"proxyPort" yaml:"proxyPort" mapstructure:"proxyPort"` + Debug bool `json:"debug" yaml:"debug" mapstructure:"debug"` + DisableTele bool `json:"disableTele" yaml:"disableTele" mapstructure:"disableTele"` + InDocker bool `json:"inDocker" yaml:"inDocker" mapstructure:"inDocker"` + ContainerName string `json:"containerName" yaml:"containerName" mapstructure:"containerName"` + NetworkName string `json:"networkName" yaml:"networkName" mapstructure:"networkName"` + BuildDelay time.Duration `json:"buildDelay" yaml:"buildDelay" mapstructure:"buildDelay"` + Test Test `json:"test" yaml:"test" mapstructure:"test"` + Record Record `json:"record" yaml:"record" mapstructure:"record"` + ConfigPath string `json:"configPath" yaml:"configPath" mapstructure:"configPath"` + BypassRules []BypassRule `json:"bypassRules" yaml:"bypassRules" mapstructure:"bypassRules"` + KeployContainer string `json:"keployContainer" yaml:"keployContainer" mapstructure:"keployContainer"` + KeployNetwork string `json:"keployNetwork" yaml:"keployNetwork" mapstructure:"keployNetwork"` +} + +type Record struct { + Filters []Filter `json:"filters" yaml:"filters" mapstructure:"filters"` + RecordTimer time.Duration `json:"recordTimer" yaml:"recordTimer" mapstructure:"recordTimer"` +} + +type BypassRule struct { + Path string `json:"path" yaml:"path" mapstructure:"path"` + Host string `json:"host" yaml:"host" mapstructure:"host"` + Port uint `json:"port" yaml:"port" mapstructure:"port"` +} + +type Filter struct { + BypassRule `mapstructure:",squash"` + URLMethods []string `json:"urlMethods" yaml:"urlMethods" mapstructure:"urlMethods"` + Headers map[string]string `json:"headers" yaml:"headers" mapstructure:"headers"` +} + +type Test struct { + SelectedTests map[string][]string `json:"selectedTests" yaml:"selectedTests" mapstructure:"selectedTests"` + GlobalNoise Globalnoise `json:"globalNoise" yaml:"globalNoise" mapstructure:"globalNoise"` + Delay uint64 `json:"delay" yaml:"delay" mapstructure:"delay"` + APITimeout uint64 `json:"apiTimeout" yaml:"apiTimeout" mapstructure:"apiTimeout"` + Coverage bool `json:"coverage" yaml:"coverage" mapstructure:"coverage"` // boolean to capture the coverage in test + CoverageReportPath string `json:"coverageReportPath" yaml:"coverageReportPath " mapstructure:"coverageReportPath"` // directory path to store the coverage files + IgnoreOrdering bool `json:"ignoreOrdering" yaml:"ignoreOrdering" mapstructure:"ignoreOrdering"` + MongoPassword string `json:"mongoPassword" yaml:"mongoPassword" mapstructure:"mongoPassword"` + Language string `json:"language" yaml:"language" mapstructure:"language"` + RemoveUnusedMocks bool `json:"removeUnusedMocks" yaml:"removeUnusedMocks" mapstructure:"removeUnusedMocks"` +} + +type Globalnoise struct { + Global GlobalNoise `json:"global" yaml:"global" mapstructure:"global"` + Testsets TestsetNoise `json:"test-sets" yaml:"test-sets" mapstructure:"test-sets"` +} + +type ( + Noise map[string][]string + GlobalNoise map[string]map[string][]string + TestsetNoise map[string]map[string]map[string][]string +) + +func SetByPassPorts(conf *Config, ports []uint) { + for _, port := range ports { + conf.BypassRules = append(conf.BypassRules, BypassRule{ + Path: "", + Host: "", + Port: port, + }) + } +} + +func GetByPassPorts(conf *Config) []uint { + var ports []uint + for _, rule := range conf.BypassRules { + ports = append(ports, rule.Port) + } + return ports +} + +func SetSelectedTests(conf *Config, testSets []string) { + if conf.Test.SelectedTests == nil { + conf.Test.SelectedTests = make(map[string][]string) + } + + for _, testSet := range testSets { + conf.Test.SelectedTests[testSet] = []string{} + } +} diff --git a/config/default.go b/config/default.go new file mode 100644 index 000000000..62bf7340d --- /dev/null +++ b/config/default.go @@ -0,0 +1,103 @@ +package config + +import ( + yaml3 "gopkg.in/yaml.v3" + "sigs.k8s.io/kustomize/kyaml/yaml" + "sigs.k8s.io/kustomize/kyaml/yaml/merge2" + "sigs.k8s.io/kustomize/kyaml/yaml/walk" +) + +// defaultConfig is a variable to store the default configuration of the Keploy CLI. It is not a constant because enterprise need update the default configuration. +var defaultConfig = ` +path: "" +command: "" +port: 0 +proxyPort: 16789 +dnsPort: 26789 +debug: false +disableTele: false +inDocker: false +containerName: "" +networkName: "" +buildDelay: 30s +test: + selectedTests: {} + globalNoise: + global: {} + test-sets: {} + delay: 5 + apiTimeout: 5 + coverage: false + coverageReportPath: "" + ignoreOrdering: true + mongoPassword: "default@123" + language: "" + removeUnusedMocks: false +record: + recordTimer: 0s + filters: [] +configPath: "" +bypassRules: [] +` + +func GetDefaultConfig() string { + return defaultConfig +} + +func SetDefaultConfig(cfgStr string) { + defaultConfig = cfgStr +} + +const InternalConfig = ` +keployContainer: "keploy-v2" +keployNetwork: "keploy-network" +inDocker: false +` + +var config = &Config{} + +func New() *Config { + // merge default config with internal config + mergedConfig, err := Merge(defaultConfig, InternalConfig) + if err != nil { + panic(err) + + } + err = yaml3.Unmarshal([]byte(mergedConfig), config) + if err != nil { + panic(err) + } + return config +} + +func Merge(srcStr, destStr string) (string, error) { + return mergeStrings(srcStr, destStr, false, yaml.MergeOptions{}) +} + +// Reference: https://github.com/kubernetes-sigs/kustomize/blob/537c4fa5c2bf3292b273876f50c62ce1c81714d7/kyaml/yaml/merge2/merge2.go#L24 +// VisitKeysAsScalars is set to true to enable merging comments. +// inferAssociativeLists is set to fasle to disable merging associative lists. +func mergeStrings(srcStr, destStr string, infer bool, mergeOptions yaml.MergeOptions) (string, error) { + src, err := yaml.Parse(srcStr) + if err != nil { + return "", err + } + + dest, err := yaml.Parse(destStr) + if err != nil { + return "", err + } + + result, err := walk.Walker{ + Sources: []*yaml.RNode{dest, src}, + Visitor: merge2.Merger{}, + InferAssociativeLists: infer, + VisitKeysAsScalars: true, + MergeOptions: mergeOptions, + }.Walk() + if err != nil { + return "", err + } + + return result.String() +} diff --git a/deployment/keploy/.helmignore b/deployment/keploy/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/deployment/keploy/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/deployment/keploy/Chart.lock b/deployment/keploy/Chart.lock deleted file mode 100644 index 7e1fb3f7f..000000000 --- a/deployment/keploy/Chart.lock +++ /dev/null @@ -1,6 +0,0 @@ -dependencies: -- name: mongodb - repository: https://charts.bitnami.com/bitnami - version: 11.1.1 -digest: sha256:c71d0ee843b9ff4e512aae5ff1a8caa20f4fb6d16938485695da98cb67c30a9b -generated: "2022-03-26T22:38:47.909512+05:30" diff --git a/deployment/keploy/Chart.yaml b/deployment/keploy/Chart.yaml deleted file mode 100644 index bd18ad172..000000000 --- a/deployment/keploy/Chart.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: v2 -name: keploy -description: A Helm chart to Deploy Keploy - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -## This is the version number of the application being deployed. This version number should be -## incremented each time you make changes to the application. Versions are not expected to -## follow Semantic Versioning. They should reflect the version the application is using. -#appVersion: 1.16.0 - -# Chart.yaml -dependencies: - - name: mongodb - version: "11.1.1" - condition: mongodb.enabled - repository: "https://charts.bitnami.com/bitnami" diff --git a/deployment/keploy/README.md b/deployment/keploy/README.md deleted file mode 100644 index 8bd1971bb..000000000 --- a/deployment/keploy/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Keploy Helm Chart -The Keploy Helm chart helps easy installation of Keploy on your Kubernetes cluster. It automatically deploys a mongo instance using the [Bitnami Mongo Helm chart](https://github.com/bitnami/charts/tree/master/bitnami/mongodb) - -## Installation -```shell -helm upgrade -i keploy . -``` - -## Access via kube proxy -```shell -export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=keploy,app.kubernetes.io/instance=keploy" -o jsonpath="{.items[0].metadata.name}") -export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") -kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT -``` -Then the keploy service should be accessible on http://127.0.0.1:8080 - -## Access via ingress -To access Keploy though ingress, please add information about ingress in the [values.yaml](values.yaml) file. - -To host keploy on a subpath of a domain (eg: example.com/keploy). You can set the env value KEPLOY_PATH_PREFIX in [values.yaml] and then build a custom docker image with the KEPLOY_PATH_PREFIX argument set. Then you have to use this docker image in your helm chart. diff --git a/deployment/keploy/charts/mongodb-11.1.1.tgz b/deployment/keploy/charts/mongodb-11.1.1.tgz deleted file mode 100644 index 10725473f..000000000 Binary files a/deployment/keploy/charts/mongodb-11.1.1.tgz and /dev/null differ diff --git a/deployment/keploy/templates/NOTES.txt b/deployment/keploy/templates/NOTES.txt deleted file mode 100644 index 41ebf2c56..000000000 --- a/deployment/keploy/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "verification-server.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "verification-server.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "verification-server.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "verification-server.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT - echo "Visit http://127.0.0.1:8080 to use your application" -{{- end }} diff --git a/deployment/keploy/templates/_helpers.tpl b/deployment/keploy/templates/_helpers.tpl deleted file mode 100644 index 8dbe25042..000000000 --- a/deployment/keploy/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "verification-server.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "verification-server.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "verification-server.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "verification-server.labels" -}} -helm.sh/chart: {{ include "verification-server.chart" . }} -{{ include "verification-server.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "verification-server.selectorLabels" -}} -app.kubernetes.io/name: {{ include "verification-server.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "verification-server.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "verification-server.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/deployment/keploy/templates/deployment.yaml b/deployment/keploy/templates/deployment.yaml deleted file mode 100644 index a0caf8e22..000000000 --- a/deployment/keploy/templates/deployment.yaml +++ /dev/null @@ -1,67 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "verification-server.fullname" . }} - labels: - {{- include "verification-server.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "verification-server.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "verification-server.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "verification-server.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: {{ .Values.command }} - ports: - - name: http - containerPort: {{ .Values.httpPort }} - protocol: TCP - env: - {{- range $key, $value := $.Values.env }} - - name: {{ $key }} - value: {{ $value | quote }} - {{- end }} - livenessProbe: - httpGet: - path: /healthz - port: http - readinessProbe: - httpGet: - path: /healthz - port: http - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/deployment/keploy/templates/hpa.yaml b/deployment/keploy/templates/hpa.yaml deleted file mode 100644 index 0b0c170db..000000000 --- a/deployment/keploy/templates/hpa.yaml +++ /dev/null @@ -1,28 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2beta1 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "verification-server.fullname" . }} - labels: - {{- include "verification-server.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "verification-server.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/deployment/keploy/templates/ingress.yaml b/deployment/keploy/templates/ingress.yaml deleted file mode 100644 index cbcf12669..000000000 --- a/deployment/keploy/templates/ingress.yaml +++ /dev/null @@ -1,44 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "verification-server.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "verification-server.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - pathType: Prefix - backend: - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} diff --git a/deployment/keploy/templates/service.yaml b/deployment/keploy/templates/service.yaml deleted file mode 100644 index b3ce2038f..000000000 --- a/deployment/keploy/templates/service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "verification-server.fullname" . }} - labels: - {{- include "verification-server.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - {{- if (eq .Values.service.type "ClusterIP") }} - nodePort: null - {{- end }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "verification-server.selectorLabels" . | nindent 4 }} diff --git a/deployment/keploy/templates/serviceaccount.yaml b/deployment/keploy/templates/serviceaccount.yaml deleted file mode 100644 index 565f58e75..000000000 --- a/deployment/keploy/templates/serviceaccount.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "verification-server.serviceAccountName" . }} - labels: - {{- include "verification-server.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/deployment/keploy/templates/tests/test-connection.yaml b/deployment/keploy/templates/tests/test-connection.yaml deleted file mode 100644 index 32647b7b2..000000000 --- a/deployment/keploy/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "verification-server.fullname" . }}-regression-connection" - labels: - {{- include "verification-server.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": regression -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "verification-server.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/deployment/keploy/values.yaml b/deployment/keploy/values.yaml deleted file mode 100644 index 71cc1d6fe..000000000 --- a/deployment/keploy/values.yaml +++ /dev/null @@ -1,96 +0,0 @@ -# Default values for keploy. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/keploy/keploy - pullPolicy: Always - # Overrides the image tag whose default is the chart appVersion. - tag: "latest" - -httpPort: 6789 - -# imagePullSecrets: -# - name: "shubham-docker-secret-2" -nameOverride: "" -fullnameOverride: "" - -env: - KEPLOY_MODE: "off" - KEPLOY_MONGO_URI: "mongodb://keploy-mongodb:27017" - KEPLOY_PATH_PREFIX: "/" -# CLUSTER_TABLE: "hybridk8s-cluster-regression" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 80 - -ingress: - enabled: false - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: [] - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 6 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} - -# for production deployments it's recommended to disable this and use a production grade mongodb cluster -mongodb: - enabled: true - auth: - enabled: false - service: - nameOverride: "keploy-mongo" diff --git a/docker-compose-debug.yaml b/docker-compose-debug.yaml deleted file mode 100644 index 4e1a97c53..000000000 --- a/docker-compose-debug.yaml +++ /dev/null @@ -1,21 +0,0 @@ -version: "3.9" -services: - keploy: - build: . - ports: - - "6789:6789" - - "40000:40000" - environment: - KEPLOY_MODE: "off" - KEPLOY_MONGO_URI: "mongodb://mongo:27017" - security_opt: - - "seccomp:unconfined" - cap_add: - - SYS_PTRACE - entrypoint: /dlv --headless --listen=:40000 --api-version=2 exec /app/keploy - depends_on: - - mongo - mongo: - image: "mongo" - ports: - - "27017:27017" \ No newline at end of file diff --git a/docker-compose-dev.yaml b/docker-compose-dev.yaml deleted file mode 100644 index 4ff8cf04f..000000000 --- a/docker-compose-dev.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: "3.9" -services: - keploy: - build: . - ports: - - "6789:6789" - environment: - KEPLOY_MODE: "off" - KEPLOY_MONGO_URI: "mongodb://mongo:27017" - ENABLE_TEST_EXPORT: "false" - depends_on: - - mongo - mongo: - image: "mongo" - ports: - - "27017:27017" \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index c69728ec3..000000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,16 +0,0 @@ -version: "3.9" -services: - keploy: - image: ghcr.io/keploy/keploy - ports: - - "6789:6789" - environment: - KEPLOY_MODE: "off" - KEPLOY_MONGO_URI: "mongodb://mongo:27017" - ENABLE_TEST_EXPORT: "false" - depends_on: - - mongo - mongo: - image: "mongo" - ports: - - "27017:27017" \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 000000000..532f13f7a --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if ! mountpoint -q /sys/kernel/debug; then + sudo mount -t debugfs debugfs /sys/kernel/debug +fi + +sudo -E "$@" diff --git a/go.mod b/go.mod old mode 100644 new mode 100755 index 280d826af..07f68f811 --- a/go.mod +++ b/go.mod @@ -1,51 +1,143 @@ -module go.keploy.io/server +module go.keploy.io/server/v2 -go 1.16 +go 1.21.0 -//replace github.com/keploy/go-sdk => ../go-sdk +replace github.com/jackc/pgproto3/v2 => github.com/keploy/pgproto3/v2 v2.0.5 require ( - github.com/99designs/gqlgen v0.15.1 // v should be less or equal 0.15.1 - github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de - github.com/go-chi/chi v1.5.4 - github.com/go-chi/cors v1.2.0 - github.com/go-chi/render v1.0.1 - github.com/go-git/go-git/v5 v5.6.1 - github.com/go-test/deep v1.0.8 - github.com/google/uuid v1.3.0 - github.com/hashicorp/go-version v1.6.0 - github.com/imdario/mergo v0.3.14 // indirect - github.com/k0kubun/pp/v3 v3.1.0 - github.com/kelseyhightower/envconfig v1.4.0 - github.com/keploy/go-sdk v0.8.6 - github.com/soheilhy/cmux v0.1.5 - github.com/vektah/gqlparser/v2 v2.2.0 // v should b4 less or equal 2.2.0 - github.com/wI2L/jsondiff v0.3.0 - go.mongodb.org/mongo-driver v1.8.3 - go.uber.org/zap v1.22.0 - google.golang.org/protobuf v1.28.1 + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/cilium/ebpf v0.13.2 + github.com/cloudflare/cfssl v1.6.4 + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v24.0.4+incompatible + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/fatih/color v1.15.0 + github.com/k0kubun/pp/v3 v3.2.0 + github.com/miekg/dns v1.1.55 + github.com/moby/term v0.5.0 // indirect + github.com/morikuni/aec v1.0.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/spf13/cobra v1.7.0 + go.mongodb.org/mongo-driver v1.11.6 + go.uber.org/zap v1.24.0 + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/sys v0.18.0 + google.golang.org/protobuf v1.33.0 // indirect ) require ( - github.com/fatih/color v1.15.0 - github.com/olekukonko/tablewriter v0.0.5 - github.com/yudai/gojsondiff v1.0.0 + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sergi/go-diff v1.3.1 // indirect + github.com/sosodev/duration v1.2.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tidwall/gjson v1.17.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/urfave/cli/v2 v2.27.1 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect + github.com/yudai/pp v2.0.1+incompatible // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/term v0.18.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + k8s.io/kube-openapi v0.0.0-20230601164746-7562a1006961 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) require ( - golang.org/x/sync v0.1.0 - google.golang.org/grpc v1.48.0 gopkg.in/yaml.v3 v3.0.1 + gotest.tools/v3 v3.5.0 // indirect ) require ( - github.com/Microsoft/go-winio v0.6.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310 // indirect - github.com/cloudflare/circl v1.3.2 // indirect + github.com/go-logr/logr v1.2.4 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/certificate-transparency-go v1.1.4 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jackc/chunkreader/v2 v2.0.0 // indirect + github.com/jackc/pgio v1.0.0 // indirect + github.com/jmoiron/sqlx v1.3.3 // indirect + github.com/klauspost/compress v1.17.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/sergi/go-diff v1.3.1 // indirect - github.com/stretchr/testify v1.8.0 // indirect - github.com/yudai/pp v2.0.1+incompatible // indirect - golang.org/x/tools v0.7.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 + github.com/rivo/uniseg v0.2.0 // indirect + github.com/spf13/pflag v1.0.5 + github.com/weppos/publicsuffix-go v0.15.1-0.20210511084619-b1f36a2d6c0b // indirect + github.com/zmap/zcrypto v0.0.0-20210511125630-18f1e0152cfc // indirect + github.com/zmap/zlint/v3 v3.1.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/mod v0.16.0 // indirect + golang.org/x/net v0.22.0 + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.19.0 // indirect + k8s.io/klog/v2 v2.80.1 // indirect +) + +require ( + github.com/99designs/gqlgen v0.17.45 + github.com/agnivade/levenshtein v1.1.1 + github.com/charmbracelet/glamour v0.6.0 + github.com/emirpasic/gods v1.18.1 + github.com/getsentry/sentry-go v0.17.0 + github.com/jackc/pgproto3/v2 v2.3.2 + github.com/spf13/viper v1.18.2 + github.com/vektah/gqlparser/v2 v2.5.11 + github.com/wI2L/jsondiff v0.5.0 + github.com/xdg-go/pbkdf2 v1.0.0 + github.com/xdg-go/scram v1.1.1 + github.com/xdg-go/stringprep v1.0.4 + github.com/yudai/gojsondiff v1.0.0 + golang.org/x/sync v0.6.0 + sigs.k8s.io/kustomize/kyaml v0.16.0 +) + +require ( + github.com/alecthomas/chroma v0.10.0 // indirect + github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de + github.com/aymanbagabas/go-osc52 v1.0.3 // indirect + github.com/aymerick/douceur v0.2.0 // indirect + github.com/dlclark/regexp2 v1.4.0 // indirect + github.com/gorilla/css v1.0.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/microcosm-cc/bluemonday v1.0.21 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.13.0 // indirect + github.com/yuin/goldmark v1.5.2 // indirect + github.com/yuin/goldmark-emoji v1.0.1 // indirect ) diff --git a/go.sum b/go.sum old mode 100644 new mode 100755 index 02a57eb49..a332f3b9f --- a/go.sum +++ b/go.sum @@ -1,337 +1,185 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/99designs/gqlgen v0.15.1 h1:48bRXecwlCNTa/n2bMSp2rQsXNxwZ54QHbiULNf78ec= -github.com/99designs/gqlgen v0.15.1/go.mod h1:nbeSjFkqphIqpZsYe1ULVz0yfH8hjpJdJIQoX/e0G2I= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= -github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310 h1:dGAdTcqheKrQ/TW76sAcmO2IorwXplUw2inPkOzykbw= -github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= -github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= -github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/agnivade/levenshtein v1.1.0/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= +github.com/99designs/gqlgen v0.17.45 h1:bH0AH67vIJo8JKNKPJP+pOPpQhZeuVRQLf53dKIpDik= +github.com/99designs/gqlgen v0.17.45/go.mod h1:Bas0XQ+Jiu/Xm5E33jC8sES3G+iC2esHBMXcq0fUPs0= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/PuerkitoBio/goquery v1.9.1 h1:mTL6XjbJTZdpfL+Gwl5U2h1l9yEkJjhmlTeV9VPW7UI= +github.com/PuerkitoBio/goquery v1.9.1/go.mod h1:cW1n6TmIMDoORQU5IU/P1T3tGFunOeXEpGP2WHRwkbY= github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= +github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= +github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de h1:FxWPpzIjnTlhPwqqXc4/vE0f7GvRjuAsbW+HOIe8KnA= github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de/go.mod h1:DCaWoUhZrYW9p1lxo/cm8EmUOOzAPSEZNGF2DK1dJgw= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go v1.39.0/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.42.23/go.mod h1:gyRszuZ/icHmHAVE4gc/r+cfCmhA1AD+vqfWbgI+eHs= +github.com/aymanbagabas/go-osc52 v1.0.3 h1:DTwqENW7X9arYimJrPeGZcV0ln14sGMt3pHZspWD+Mg= +github.com/aymanbagabas/go-osc52 v1.0.3/go.mod h1:zT8H+Rk4VSabYN90pWyugflM3ZhpTZNC7cASDfUCdT4= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/bnkamalesh/webgo/v4 v4.1.11/go.mod h1:taIAonQTzao8G5rnB22WgKmQuIOWHpQ0n/YLAidBXlM= -github.com/bnkamalesh/webgo/v6 v6.2.2/go.mod h1:2Y+dEdTp1xC/ra+3PAVZV6hh4sCI+iPK7mcHt+t9bfM= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/bwesterb/go-ristretto v1.2.2/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.2 h1:VWp8dY3yH69fdM7lM6A1+NhhVoDu9vqK0jOgmkQHFWk= -github.com/cloudflare/circl v1.3.2/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/charmbracelet/glamour v0.6.0 h1:wi8fse3Y7nfcabbbDuwolqTqMQPMnVPeZhDM273bISc= +github.com/charmbracelet/glamour v0.6.0/go.mod h1:taqWV4swIMMbWALc0m7AfE9JkPSU8om2538k9ITBxOc= +github.com/cilium/ebpf v0.13.2 h1:uhLimLX+jF9BTPPvoCUYh/mBeoONkjgaJ9w9fn0mRj4= +github.com/cilium/ebpf v0.13.2/go.mod h1:DHp1WyrLeiBh19Cf/tfiSMhqheEiK8fXFZ4No0P1Hso= +github.com/cloudflare/cfssl v1.6.4 h1:NMOvfrEjFfC63K3SGXgAnFdsgkmiq4kATme5BfcqrO8= +github.com/cloudflare/cfssl v1.6.4/go.mod h1:8b3CQMxfWPAeom3zBnGJ6sd+G1NkL5TXqmDXacb+1J0= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY= -github.com/creasty/defaults v1.6.0 h1:ltuE9cfphUtlrBeomuu8PEyISTXnxqkBIoQfXgv7BSc= -github.com/creasty/defaults v1.6.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= +github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.4+incompatible h1:s/LVDftw9hjblvqIeTiGYXBCD95nOEEl7qRsRrIOuQI= +github.com/docker/docker v24.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fullstorydev/grpcurl v1.8.7 h1:xJWosq3BQovQ4QrdPO72OrPiWuGgEsxY8ldYsJbPrqI= -github.com/fullstorydev/grpcurl v1.8.7/go.mod h1:pVtM4qe3CMoLaIzYS8uvTuDj2jVYmXqMUkZeijnXp/E= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/gliderlabs/ssh v0.3.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-chi/chi v1.5.4 h1:QHdzF2szwjqVV4wmByUnTcsbIg7UGaQ0tPF2t5GcAIs= -github.com/go-chi/chi v1.5.4/go.mod h1:uaf8YgoFazUOkPBG7fxPftUylNumIev9awIWOENIuEg= -github.com/go-chi/cors v1.2.0 h1:tV1g1XENQ8ku4Bq3K9ub2AtgG+p16SmzeMSGTwrOKdE= -github.com/go-chi/cors v1.2.0/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= -github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8= -github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4= -github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= -github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.2.0/go.mod h1:kh02eMX+wdqqxgNMEyq8YgwlIOsDOa9homkUq1PoTMs= -github.com/go-git/go-git/v5 v5.6.1 h1:q4ZRqQl4pR/ZJHc1L5CFjGA1a10u76aV1iC+nh+bHsk= -github.com/go-git/go-git/v5 v5.6.1/go.mod h1:mvyoL6Unz0PiTQrGQfSfiLFhBH1c1e84ylC2MDs4ee8= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.7.0/go.mod h1:xm76BBt941f7yWdGnI2DVPFFg1UK3YY04qifoXU3lOk= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig= -github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= +github.com/getsentry/sentry-go v0.17.0/go.mod h1:B82dxtBvxG0KaPD8/hfSV+VcHD+Lg/xUS4JuQn1P4cM= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= +github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= -github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/goccy/go-json v0.9.4/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/certificate-transparency-go v1.1.4 h1:hCyXHDbtqlr/lMXU0D4WgbalXL0Zk4dSWWMbPV8VrqY= +github.com/google/certificate-transparency-go v1.1.4/go.mod h1:D6lvbfwckhNrbM9WVl1EVeMOyzC19mpIjMOI4nxBHtQ= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/imdario/mergo v0.3.14 h1:fOqeC1+nCuuk6PKQdg9YmosXX7Y7mHX6R/0ZldI9iHo= -github.com/imdario/mergo v0.3.14/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.14.0 h1:MBbQK392K3u8NTLbKOCIi3XdI+y+c6yt5oMq0X3xviw= -github.com/jhump/protoreflect v1.14.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/k0kubun/pp/v3 v3.1.0 h1:ifxtqJkRZhw3h554/z/8zm6AAbyO4LLKDlA5eV+9O8Q= -github.com/k0kubun/pp/v3 v3.1.0/go.mod h1:vIrP5CF0n78pKHm2Ku6GVerpZBJvscg48WepUYEk2gw= -github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= -github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= -github.com/keploy/go-sdk v0.5.3/go.mod h1:FrKEdAbypVbeHdboueHZ3icD24pPRSn/jsZ5KLzzjJQ= -github.com/keploy/go-sdk v0.6.6-alpha/go.mod h1:ytWcfOLeqCr9GyZLTRljEARgtSHuuvaKhOpIX20SIps= -github.com/keploy/go-sdk v0.6.7/go.mod h1:uD1ds3mbVdhQaRVzK33Dch5Nbocc/1LzQ5oda96/Hss= -github.com/keploy/go-sdk v0.7.4/go.mod h1:TtJIM+Gkq76FzfkD8W9u1F8NDkC9sVY8nYvmbRo1nhg= -github.com/keploy/go-sdk v0.8.6-0.20230408143434-b5dec5fdc66f/go.mod h1:j+G9XyqYIXKjO3JC+K0mlvCsCp/M7dbp8+wqzDIkvTU= -github.com/keploy/go-sdk v0.8.6 h1:MH3vPZmf4cxMsNJ1f8RprlRwStKP6ww1U9znjJAIN3I= -github.com/keploy/go-sdk v0.8.6/go.mod h1:S1m9bb59u+5dTNdTnH4mIgyRVUH231OmRh4LWXKIfT8= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinmbeaulieu/eq-go v1.0.0/go.mod h1:G3S8ajA56gKBZm4UB9AOyoOS37JO3roToPzKNM8dtdM= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jackc/chunkreader/v2 v2.0.0 h1:DUwgMQuuPnS0rhMXenUtZpqZqrR/30NWY+qQvTpSvEs= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jmoiron/sqlx v1.3.3 h1:j82X0bf7oQ27XeqxicSZsTU5suPwKElg3oyxNn43iTk= +github.com/jmoiron/sqlx v1.3.3/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/k0kubun/pp/v3 v3.2.0 h1:h33hNTZ9nVFNP3u2Fsgz8JXiF5JINoZfFq4SvKJwNcs= +github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA= +github.com/keploy/pgproto3/v2 v2.0.5 h1:8spdNKZ+nOnHVxiimDsqulBRN6viPXPghkA7xppnzJ8= +github.com/keploy/pgproto3/v2 v2.0.5/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/labstack/echo/v4 v4.6.1/go.mod h1:RnjgMWNDB9g/HucVWhQYNQP9PvbYf6adqftqryo7s9k= -github.com/labstack/echo/v4 v4.6.3/go.mod h1:Hk5OiHj0kDqmFq7aHe7eDqI7CUhuCrfpupQtLGGLm7A= -github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= -github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= -github.com/lestrrat-go/httpcc v1.0.0/go.mod h1:tGS/u00Vh5N6FHNkExqGGNId8e0Big+++0Gf8MBnAvE= -github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= -github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= -github.com/lestrrat-go/jwx v1.2.19/go.mod h1:bWTBO7IHHVMtNunM8so9MT8wD+euEY1PzGEyCnuI2qM= -github.com/lestrrat-go/jwx v1.2.20/go.mod h1:tLE1XszaFgd7zaS5wHe4NxA+XVhu7xgdRvDpNyi3kNM= -github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY= -github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= -github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/matryer/moq v0.2.3/go.mod h1:9RtPYjTnH1bSBIkpvtHkFN7nbWAnO7oRpdJkEIn6UtE= -github.com/matryer/moq v0.2.5 h1:BGQISyhl7Gc9W/gMYmAJONh9mT6AYeyeTjNupNPknMs= -github.com/matryer/moq v0.2.5/go.mod h1:9RtPYjTnH1bSBIkpvtHkFN7nbWAnO7oRpdJkEIn6UtE= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.2.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/microcosm-cc/bluemonday v1.0.21 h1:dNH3e4PSyE4vNX+KlRGHT5KrSvjeUkoNPwEORjffHJg= +github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM= +github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo= +github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.13.0 h1:wK20DRpJdDX8b7Ek2QfhvqhRQFZ237RGRO0RQ/Iqdy0= +github.com/muesli/termenv v0.13.0/go.mod h1:sP1+uffeLaEYpyOTb8pLCUctGcGLnoFjSn4YJK5e2bc= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -339,49 +187,62 @@ github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= +github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9 h1:arwj11zP0yJIxIRiDn22E0H8PxfF7TsTrc2wIPFIsf4= +github.com/protocolbuffers/protoscope v0.0.0-20221109213918-8e7a6aafa2c9/go.mod h1:SKZx6stCn03JN3BOWTwvVIO2ajMkb/zQdTceXYhKw/4= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= -github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sosodev/duration v1.2.0 h1:pqK/FLSjsAADWY74SyWDCjOcd5l7H8GSnnOGEB9A1Us= +github.com/sosodev/duration v1.2.0/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -389,45 +250,44 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw= -github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.17.0 h1:/Jocvlh98kcTfpN2+JzGQWQcqrPQwDrVEMApx/M5ZwM= +github.com/tidwall/gjson v1.17.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.35.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= -github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= -github.com/valyala/fasthttp v1.44.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seBFc2uWtgiY= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vektah/gqlparser/v2 v2.2.0 h1:bAc3slekAAJW6sZTi07aGq0OrfaCjj4jxARAaC7g2EM= -github.com/vektah/gqlparser/v2 v2.2.0/go.mod h1:i3mQIGIrbK2PD1RrCeMTlVbkF2FJ6WkU1KJlJlC+3F4= -github.com/wI2L/jsondiff v0.2.0/go.mod h1:axTcwtBkY4TsKuV+RgoMhHyHKKFRI6nnjRLi8LLYQnA= -github.com/wI2L/jsondiff v0.3.0 h1:iTzQ9u/d86GE9RsBzVHX88f2EA1vQUboHwLhSQFc1s4= -github.com/wI2L/jsondiff v0.3.0/go.mod h1:y1IMzNNjlSsk3IUoJdRJO7VRBtzMvRgyo4Vu0LdHpTc= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho= +github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/vektah/gqlparser/v2 v2.5.11 h1:JJxLtXIoN7+3x6MBdtIP59TP1RANnY7pXOaDnADQSf8= +github.com/vektah/gqlparser/v2 v2.5.11/go.mod h1:1rCcfwB2ekJofmluGWXMSEnPMZgbxzwj6FaZ/4OT8Cc= +github.com/wI2L/jsondiff v0.5.0 h1:RRMTi/mH+R2aXcPe1VYyvGINJqQfC3R+KSEakuU1Ikw= +github.com/wI2L/jsondiff v0.5.0/go.mod h1:qqG6hnK0Lsrz2BpIVCxWiK9ItsBCpIZQiv0izJjOZ9s= +github.com/weppos/publicsuffix-go v0.13.1-0.20210123135404-5fd73613514e/go.mod h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE= +github.com/weppos/publicsuffix-go v0.15.1-0.20210511084619-b1f36a2d6c0b h1:FsyNrX12e5BkplJq7wKOLk0+C6LZ+KGXvuEcKUYm5ss= +github.com/weppos/publicsuffix-go v0.15.1-0.20210511084619-b1f36a2d6c0b/go.mod h1:HYux0V0Zi04bHNwOHy4cXJVz/TQjYonnF6aoYhj+3QE= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/scram v1.1.0 h1:d70R37I0HrDLsafRrMBXyrD4lmQbCHE873t00Vr0gm0= -github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= -github.com/xdg-go/stringprep v1.0.2 h1:6iq84/ryjjeRmMJwxutI51F2GIPlP5BfTvXHeYjyhBc= -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= @@ -437,384 +297,155 @@ github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3Ifn github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= github.com/yudai/pp v2.0.1+incompatible h1:Q4//iY4pNF6yPLZIigmvcl7k/bPgrcTPIFIcmawg5bI= github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.keploy.io/server v0.5.2/go.mod h1:TL7IcngMUjrpm9uoJbY7dfqfNNOqE5NSgQ+eHh3pp0I= -go.keploy.io/server v0.5.6/go.mod h1:/wHYlepZLITJ+MsYnRfRED9K/ENset2JhfzeAqSGnV0= -go.keploy.io/server v0.7.8/go.mod h1:Xm0Zzt2iBRrvoDY7fBMm8M+geV+ZlkknbqKRVjC3K0I= -go.keploy.io/server v0.7.12/go.mod h1:ch4rD1NCgtxozDHD9yVk+sLHWz5HgefOqrgEdEIgfBQ= -go.keploy.io/server v0.7.20/go.mod h1:cu/y7NQ8Io1OP2BfMtfFQugYd/UanRvDWpzcyulx/Qo= -go.keploy.io/server v0.8.6-0.20230408144107-6942a76b2d25/go.mod h1:SGs8n07hQVoxf+TsbuwSoPQKKxgJ8GVQiCTcqiI//d4= -go.mongodb.org/mongo-driver v1.8.3 h1:TDKlTkGDKm9kkJVUOAXDK5/fkqKHJVwYQSpoRfB43R4= -go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +github.com/yuin/goldmark v1.5.2 h1:ALmeCk/px5FSm1MAcFBAsVKZjDuMVj8Tm7FFIlMJnqU= +github.com/yuin/goldmark v1.5.2/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os= +github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ= +github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE= +github.com/zmap/zcertificate v0.0.0-20180516150559-0e3d58b1bac4/go.mod h1:5iU54tB79AMBcySS0R2XIyZBAVmeHranShAFELYx7is= +github.com/zmap/zcrypto v0.0.0-20210123152837-9cf5beac6d91/go.mod h1:R/deQh6+tSWlgI9tb4jNmXxn8nSCabl5ZQsBX9//I/E= +github.com/zmap/zcrypto v0.0.0-20210511125630-18f1e0152cfc h1:zkGwegkOW709y0oiAraH/3D8njopUR/pARHv4tZZ6pw= +github.com/zmap/zcrypto v0.0.0-20210511125630-18f1e0152cfc/go.mod h1:FM4U1E3NzlNMRnSUTU3P1UdukWhYGifqEsjk9fn7BCk= +github.com/zmap/zlint/v3 v3.1.0 h1:WjVytZo79m/L1+/Mlphl09WBob6YTGljN5IGWZFpAv0= +github.com/zmap/zlint/v3 v3.1.0/go.mod h1:L7t8s3sEKkb0A2BxGy1IWrxt1ZATa1R4QfJZaQOD3zU= +go.mongodb.org/mongo-driver v1.11.6 h1:XM7G6PjiGAO5betLF13BIa5TlLUUE3uJ/2Ox3Lz1K+o= +go.mongodb.org/mongo-driver v1.11.6/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.22.0 h1:Zcye5DUgBloQ9BaT4qc9BnjOFog5TvBSAGkJ3Nf70c0= -go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= -golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20201217014255-9d1352758620/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200815165600-90abf76919f3/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230601164746-7562a1006961 h1:pqRVJGQJz6oeZby8qmPKXYIBjyrcv7EHCe/33UkZMYA= +k8s.io/kube-openapi v0.0.0-20230601164746-7562a1006961/go.mod h1:l8HTwL5fqnlns4jOveW1L75eo7R9KFHxiE0bsPGy428= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kustomize/kyaml v0.16.0 h1:6J33uKSoATlKZH16unr2XOhDI+otoe2sR3M8PDzW3K0= +sigs.k8s.io/kustomize/kyaml v0.16.0/go.mod h1:xOK/7i+vmE14N2FdFyugIshB8eF6ALpy7jI87Q2nRh4= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/gon.json b/gon.json old mode 100644 new mode 100755 diff --git a/goreleaser.yaml b/goreleaser.yaml old mode 100644 new mode 100755 index 3ee40ff97..e9a384cee --- a/goreleaser.yaml +++ b/goreleaser.yaml @@ -1,54 +1,54 @@ # GoReleaser configuration archives: - - + - name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}" - + builds: - binary: keploy id: keploy - main: ./cmd/server/main.go - # ldflags: - # - -s -w -X main.build={{.Version}} + main: ./main.go + ldflags: + - -s -w -X main.dsn={{.Env.SENTRY_DSN_BINARY}} + - -s -w -X main.version={{.Version}} env: - CGO_ENABLED=0 goos: - linux - - windows - goarch: - - amd64 - - 386 - - arm64 - - binary: keploy - id: keploy-macos - main: ./cmd/server/main.go - env: - - CGO_ENABLED=0 - goos: - - darwin + # - windows goarch: - amd64 - arm64 + # - binary: keploy + # id: keploy-macos + # main: ./cli/server/main.go + # env: + # - CGO_ENABLED=0 + # goos: + # - darwin + # goarch: + # - amd64 + # - arm64 -universal_binaries: -- - # ID of resulting universal binary. - # - # Defaults to the project name. - id: keploy-mac-universal +# universal_binaries: +# - +# # ID of resulting universal binary. +# # +# # Defaults to the project name. +# id: keploy-mac-universal - # IDs to use to filter the built binaries. - # - # Defaults to the `id` field. - # Since: v1.3. - ids: - - keploy-macos +# # IDs to use to filter the built binaries. +# # +# # Defaults to the `id` field. +# # Since: v1.3. +# ids: +# - keploy-macos # Whether to remove the previous single-arch binaries from the artifact list. # If left as false, your end release might have both several macOS archives: # amd64, arm64 and all. # # Defaults to false. - replace: true - hooks: - post: gon -log-level=info -log-json ./gon.json + # replace: true + # hooks: + # post: gon -log-level=info -log-json ./gon.json diff --git a/gqlgen.yml b/gqlgen.yml deleted file mode 100644 index 7f58dee88..000000000 --- a/gqlgen.yml +++ /dev/null @@ -1,56 +0,0 @@ -# Where are all the schema files located? globs are supported eg src/**/*.graphqls -schema: - - graph/*.graphqls - -# Where should the generated server code go? -exec: - filename: graph/generated/generated.go - package: generated - -# Uncomment to enable federation -# federation: -# filename: graph/generated/federation.go -# package: generated - -# Where should any generated models go? -model: - filename: graph/model/models_gen.go - package: model - -# Where should the resolver implementations go? -resolver: - layout: follow-schema - dir: graph - package: graph - -# Optional: turn on use `gqlgen:"fieldName"` tags in your models -# struct_tag: json - -# Optional: turn on to use []Thing instead of []*Thing -# omit_slice_element_pointers: false - -# Optional: set to speed up generation time by not performing a final validation pass. -# skip_validation: true - -# gqlgen will search for any type names in the schema in these go packages -# if they match it will use them, otherwise it will generate them. -autobind: - - "go.keploy.io/server/graph/model" - -# This section declares type mapping between the GraphQL and go type systems -# -# The first line in each type will be used as defaults for resolver arguments and -# modelgen, the others will be allowed when binding to fields. Configure them to -# your liking -models: - ID: - model: - - github.com/99designs/gqlgen/graphql.ID - - github.com/99designs/gqlgen/graphql.Int - - github.com/99designs/gqlgen/graphql.Int64 - - github.com/99designs/gqlgen/graphql.Int32 - Int: - model: - - github.com/99designs/gqlgen/graphql.Int - - github.com/99designs/gqlgen/graphql.Int64 - - github.com/99designs/gqlgen/graphql.Int32 diff --git a/graph/ext.graphqls b/graph/ext.graphqls deleted file mode 100644 index b8d9da6f1..000000000 --- a/graph/ext.graphqls +++ /dev/null @@ -1,2 +0,0 @@ -type Query -type Mutation \ No newline at end of file diff --git a/graph/ext.resolvers.go b/graph/ext.resolvers.go deleted file mode 100644 index d366aad2e..000000000 --- a/graph/ext.resolvers.go +++ /dev/null @@ -1,17 +0,0 @@ -package graph - -// This file will be automatically regenerated based on the schema, any resolver implementations -// will be copied through when generating and any unknown code will be moved to the end. - -import ( - "go.keploy.io/server/graph/generated" -) - -// Mutation returns generated.MutationResolver implementation. -func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResolver{r} } - -// Query returns generated.QueryResolver implementation. -func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} } - -type mutationResolver struct{ *Resolver } -type queryResolver struct{ *Resolver } diff --git a/graph/generated/generated.go b/graph/generated/generated.go deleted file mode 100644 index bb5b59c66..000000000 --- a/graph/generated/generated.go +++ /dev/null @@ -1,8423 +0,0 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - -package generated - -import ( - "bytes" - "context" - "errors" - "io" - "strconv" - "sync" - "time" - - "github.com/99designs/gqlgen/graphql" - "github.com/99designs/gqlgen/graphql/introspection" - gqlparser "github.com/vektah/gqlparser/v2" - "github.com/vektah/gqlparser/v2/ast" - "go.keploy.io/server/graph/model" -) - -// region ************************** generated!.gotpl ************************** - -// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface. -func NewExecutableSchema(cfg Config) graphql.ExecutableSchema { - return &executableSchema{ - resolvers: cfg.Resolvers, - directives: cfg.Directives, - complexity: cfg.Complexity, - } -} - -type Config struct { - Resolvers ResolverRoot - Directives DirectiveRoot - Complexity ComplexityRoot -} - -type ResolverRoot interface { - Mutation() MutationResolver - Query() QueryResolver - Subscription() SubscriptionResolver -} - -type DirectiveRoot struct { -} - -type ComplexityRoot struct { - App struct { - ID func(childComplexity int) int - } - - BodyResult struct { - Actual func(childComplexity int) int - Errors func(childComplexity int) int - Expected func(childComplexity int) int - Normal func(childComplexity int) int - Type func(childComplexity int) int - } - - DepMetaResult struct { - Actual func(childComplexity int) int - Expected func(childComplexity int) int - Key func(childComplexity int) int - Normal func(childComplexity int) int - } - - DepResult struct { - Meta func(childComplexity int) int - Name func(childComplexity int) int - Type func(childComplexity int) int - } - - Dependency struct { - Meta func(childComplexity int) int - Name func(childComplexity int) int - Type func(childComplexity int) int - } - - HTTPReq struct { - Body func(childComplexity int) int - Header func(childComplexity int) int - Method func(childComplexity int) int - ProtoMajor func(childComplexity int) int - ProtoMinor func(childComplexity int) int - URL func(childComplexity int) int - URLParam func(childComplexity int) int - } - - HTTPResp struct { - Body func(childComplexity int) int - Header func(childComplexity int) int - StatusCode func(childComplexity int) int - } - - Header struct { - Key func(childComplexity int) int - Value func(childComplexity int) int - } - - HeaderResult struct { - Actual func(childComplexity int) int - Expected func(childComplexity int) int - Key func(childComplexity int) int - Normal func(childComplexity int) int - } - - IntResult struct { - Actual func(childComplexity int) int - Expected func(childComplexity int) int - Normal func(childComplexity int) int - } - - JSONError struct { - Key func(childComplexity int) int - MissingInActual func(childComplexity int) int - MissingInExpected func(childComplexity int) int - } - - Kv struct { - Key func(childComplexity int) int - Value func(childComplexity int) int - } - - Mutation struct { - DeleteTestCase func(childComplexity int, id string) int - NormalizeTests func(childComplexity int, ids []string) int - UpdateTestCase func(childComplexity int, tc []*model.TestCaseInput) int - } - - Query struct { - Apps func(childComplexity int) int - TestCase func(childComplexity int, app *string, id *string, offset *int, limit *int) int - TestRun func(childComplexity int, user *string, app *string, id *string, from *time.Time, to *time.Time, offset *int, limit *int) int - } - - Result struct { - BodyResult func(childComplexity int) int - DepResult func(childComplexity int) int - HeadersResult func(childComplexity int) int - StatusCode func(childComplexity int) int - } - - Subscription struct { - TestRun func(childComplexity int, app *string, id *string) int - } - - Test struct { - Completed func(childComplexity int) int - Deps func(childComplexity int) int - ID func(childComplexity int) int - Noise func(childComplexity int) int - Req func(childComplexity int) int - Result func(childComplexity int) int - Started func(childComplexity int) int - Status func(childComplexity int) int - TestCaseID func(childComplexity int) int - URI func(childComplexity int) int - } - - TestCase struct { - Anchors func(childComplexity int) int - App func(childComplexity int) int - Captured func(childComplexity int) int - Cid func(childComplexity int) int - Created func(childComplexity int) int - Deps func(childComplexity int) int - HTTPReq func(childComplexity int) int - HTTPResp func(childComplexity int) int - ID func(childComplexity int) int - Noise func(childComplexity int) int - URI func(childComplexity int) int - Updated func(childComplexity int) int - } - - TestRun struct { - App func(childComplexity int) int - Created func(childComplexity int) int - Failure func(childComplexity int) int - ID func(childComplexity int) int - Status func(childComplexity int) int - Success func(childComplexity int) int - Tests func(childComplexity int) int - Total func(childComplexity int) int - Updated func(childComplexity int) int - User func(childComplexity int) int - } -} - -type MutationResolver interface { - UpdateTestCase(ctx context.Context, tc []*model.TestCaseInput) (bool, error) - DeleteTestCase(ctx context.Context, id string) (bool, error) - NormalizeTests(ctx context.Context, ids []string) (bool, error) -} -type QueryResolver interface { - Apps(ctx context.Context) ([]*model.App, error) - TestRun(ctx context.Context, user *string, app *string, id *string, from *time.Time, to *time.Time, offset *int, limit *int) ([]*model.TestRun, error) - TestCase(ctx context.Context, app *string, id *string, offset *int, limit *int) ([]*model.TestCase, error) -} -type SubscriptionResolver interface { - TestRun(ctx context.Context, app *string, id *string) (<-chan []*model.TestRun, error) -} - -type executableSchema struct { - resolvers ResolverRoot - directives DirectiveRoot - complexity ComplexityRoot -} - -func (e *executableSchema) Schema() *ast.Schema { - return parsedSchema -} - -func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) { - ec := executionContext{nil, e} - _ = ec - switch typeName + "." + field { - - case "App.id": - if e.complexity.App.ID == nil { - break - } - - return e.complexity.App.ID(childComplexity), true - - case "BodyResult.actual": - if e.complexity.BodyResult.Actual == nil { - break - } - - return e.complexity.BodyResult.Actual(childComplexity), true - - case "BodyResult.errors": - if e.complexity.BodyResult.Errors == nil { - break - } - - return e.complexity.BodyResult.Errors(childComplexity), true - - case "BodyResult.expected": - if e.complexity.BodyResult.Expected == nil { - break - } - - return e.complexity.BodyResult.Expected(childComplexity), true - - case "BodyResult.normal": - if e.complexity.BodyResult.Normal == nil { - break - } - - return e.complexity.BodyResult.Normal(childComplexity), true - - case "BodyResult.type": - if e.complexity.BodyResult.Type == nil { - break - } - - return e.complexity.BodyResult.Type(childComplexity), true - - case "DepMetaResult.actual": - if e.complexity.DepMetaResult.Actual == nil { - break - } - - return e.complexity.DepMetaResult.Actual(childComplexity), true - - case "DepMetaResult.expected": - if e.complexity.DepMetaResult.Expected == nil { - break - } - - return e.complexity.DepMetaResult.Expected(childComplexity), true - - case "DepMetaResult.key": - if e.complexity.DepMetaResult.Key == nil { - break - } - - return e.complexity.DepMetaResult.Key(childComplexity), true - - case "DepMetaResult.normal": - if e.complexity.DepMetaResult.Normal == nil { - break - } - - return e.complexity.DepMetaResult.Normal(childComplexity), true - - case "DepResult.meta": - if e.complexity.DepResult.Meta == nil { - break - } - - return e.complexity.DepResult.Meta(childComplexity), true - - case "DepResult.name": - if e.complexity.DepResult.Name == nil { - break - } - - return e.complexity.DepResult.Name(childComplexity), true - - case "DepResult.type": - if e.complexity.DepResult.Type == nil { - break - } - - return e.complexity.DepResult.Type(childComplexity), true - - case "Dependency.meta": - if e.complexity.Dependency.Meta == nil { - break - } - - return e.complexity.Dependency.Meta(childComplexity), true - - case "Dependency.name": - if e.complexity.Dependency.Name == nil { - break - } - - return e.complexity.Dependency.Name(childComplexity), true - - case "Dependency.type": - if e.complexity.Dependency.Type == nil { - break - } - - return e.complexity.Dependency.Type(childComplexity), true - - case "HTTPReq.body": - if e.complexity.HTTPReq.Body == nil { - break - } - - return e.complexity.HTTPReq.Body(childComplexity), true - - case "HTTPReq.header": - if e.complexity.HTTPReq.Header == nil { - break - } - - return e.complexity.HTTPReq.Header(childComplexity), true - - case "HTTPReq.method": - if e.complexity.HTTPReq.Method == nil { - break - } - - return e.complexity.HTTPReq.Method(childComplexity), true - - case "HTTPReq.protoMajor": - if e.complexity.HTTPReq.ProtoMajor == nil { - break - } - - return e.complexity.HTTPReq.ProtoMajor(childComplexity), true - - case "HTTPReq.protoMinor": - if e.complexity.HTTPReq.ProtoMinor == nil { - break - } - - return e.complexity.HTTPReq.ProtoMinor(childComplexity), true - - case "HTTPReq.url": - if e.complexity.HTTPReq.URL == nil { - break - } - - return e.complexity.HTTPReq.URL(childComplexity), true - - case "HTTPReq.urlParam": - if e.complexity.HTTPReq.URLParam == nil { - break - } - - return e.complexity.HTTPReq.URLParam(childComplexity), true - - case "HTTPResp.body": - if e.complexity.HTTPResp.Body == nil { - break - } - - return e.complexity.HTTPResp.Body(childComplexity), true - - case "HTTPResp.header": - if e.complexity.HTTPResp.Header == nil { - break - } - - return e.complexity.HTTPResp.Header(childComplexity), true - - case "HTTPResp.statusCode": - if e.complexity.HTTPResp.StatusCode == nil { - break - } - - return e.complexity.HTTPResp.StatusCode(childComplexity), true - - case "Header.key": - if e.complexity.Header.Key == nil { - break - } - - return e.complexity.Header.Key(childComplexity), true - - case "Header.value": - if e.complexity.Header.Value == nil { - break - } - - return e.complexity.Header.Value(childComplexity), true - - case "HeaderResult.actual": - if e.complexity.HeaderResult.Actual == nil { - break - } - - return e.complexity.HeaderResult.Actual(childComplexity), true - - case "HeaderResult.expected": - if e.complexity.HeaderResult.Expected == nil { - break - } - - return e.complexity.HeaderResult.Expected(childComplexity), true - - case "HeaderResult.key": - if e.complexity.HeaderResult.Key == nil { - break - } - - return e.complexity.HeaderResult.Key(childComplexity), true - - case "HeaderResult.normal": - if e.complexity.HeaderResult.Normal == nil { - break - } - - return e.complexity.HeaderResult.Normal(childComplexity), true - - case "IntResult.actual": - if e.complexity.IntResult.Actual == nil { - break - } - - return e.complexity.IntResult.Actual(childComplexity), true - - case "IntResult.expected": - if e.complexity.IntResult.Expected == nil { - break - } - - return e.complexity.IntResult.Expected(childComplexity), true - - case "IntResult.normal": - if e.complexity.IntResult.Normal == nil { - break - } - - return e.complexity.IntResult.Normal(childComplexity), true - - case "JSONError.key": - if e.complexity.JSONError.Key == nil { - break - } - - return e.complexity.JSONError.Key(childComplexity), true - - case "JSONError.missingInActual": - if e.complexity.JSONError.MissingInActual == nil { - break - } - - return e.complexity.JSONError.MissingInActual(childComplexity), true - - case "JSONError.missingInExpected": - if e.complexity.JSONError.MissingInExpected == nil { - break - } - - return e.complexity.JSONError.MissingInExpected(childComplexity), true - - case "Kv.key": - if e.complexity.Kv.Key == nil { - break - } - - return e.complexity.Kv.Key(childComplexity), true - - case "Kv.value": - if e.complexity.Kv.Value == nil { - break - } - - return e.complexity.Kv.Value(childComplexity), true - - case "Mutation.deleteTestCase": - if e.complexity.Mutation.DeleteTestCase == nil { - break - } - - args, err := ec.field_Mutation_deleteTestCase_args(context.TODO(), rawArgs) - if err != nil { - return 0, false - } - - return e.complexity.Mutation.DeleteTestCase(childComplexity, args["id"].(string)), true - - case "Mutation.normalizeTests": - if e.complexity.Mutation.NormalizeTests == nil { - break - } - - args, err := ec.field_Mutation_normalizeTests_args(context.TODO(), rawArgs) - if err != nil { - return 0, false - } - - return e.complexity.Mutation.NormalizeTests(childComplexity, args["ids"].([]string)), true - - case "Mutation.updateTestCase": - if e.complexity.Mutation.UpdateTestCase == nil { - break - } - - args, err := ec.field_Mutation_updateTestCase_args(context.TODO(), rawArgs) - if err != nil { - return 0, false - } - - return e.complexity.Mutation.UpdateTestCase(childComplexity, args["tc"].([]*model.TestCaseInput)), true - - case "Query.apps": - if e.complexity.Query.Apps == nil { - break - } - - return e.complexity.Query.Apps(childComplexity), true - - case "Query.testCase": - if e.complexity.Query.TestCase == nil { - break - } - - args, err := ec.field_Query_testCase_args(context.TODO(), rawArgs) - if err != nil { - return 0, false - } - - return e.complexity.Query.TestCase(childComplexity, args["app"].(*string), args["id"].(*string), args["offset"].(*int), args["limit"].(*int)), true - - case "Query.testRun": - if e.complexity.Query.TestRun == nil { - break - } - - args, err := ec.field_Query_testRun_args(context.TODO(), rawArgs) - if err != nil { - return 0, false - } - - return e.complexity.Query.TestRun(childComplexity, args["user"].(*string), args["app"].(*string), args["id"].(*string), args["from"].(*time.Time), args["To"].(*time.Time), args["offset"].(*int), args["limit"].(*int)), true - - case "Result.bodyResult": - if e.complexity.Result.BodyResult == nil { - break - } - - return e.complexity.Result.BodyResult(childComplexity), true - - case "Result.depResult": - if e.complexity.Result.DepResult == nil { - break - } - - return e.complexity.Result.DepResult(childComplexity), true - - case "Result.headersResult": - if e.complexity.Result.HeadersResult == nil { - break - } - - return e.complexity.Result.HeadersResult(childComplexity), true - - case "Result.statusCode": - if e.complexity.Result.StatusCode == nil { - break - } - - return e.complexity.Result.StatusCode(childComplexity), true - - case "Subscription.TestRun": - if e.complexity.Subscription.TestRun == nil { - break - } - - args, err := ec.field_Subscription_TestRun_args(context.TODO(), rawArgs) - if err != nil { - return 0, false - } - - return e.complexity.Subscription.TestRun(childComplexity, args["app"].(*string), args["id"].(*string)), true - - case "Test.completed": - if e.complexity.Test.Completed == nil { - break - } - - return e.complexity.Test.Completed(childComplexity), true - - case "Test.deps": - if e.complexity.Test.Deps == nil { - break - } - - return e.complexity.Test.Deps(childComplexity), true - - case "Test.id": - if e.complexity.Test.ID == nil { - break - } - - return e.complexity.Test.ID(childComplexity), true - - case "Test.noise": - if e.complexity.Test.Noise == nil { - break - } - - return e.complexity.Test.Noise(childComplexity), true - - case "Test.req": - if e.complexity.Test.Req == nil { - break - } - - return e.complexity.Test.Req(childComplexity), true - - case "Test.result": - if e.complexity.Test.Result == nil { - break - } - - return e.complexity.Test.Result(childComplexity), true - - case "Test.started": - if e.complexity.Test.Started == nil { - break - } - - return e.complexity.Test.Started(childComplexity), true - - case "Test.status": - if e.complexity.Test.Status == nil { - break - } - - return e.complexity.Test.Status(childComplexity), true - - case "Test.testCaseID": - if e.complexity.Test.TestCaseID == nil { - break - } - - return e.complexity.Test.TestCaseID(childComplexity), true - - case "Test.uri": - if e.complexity.Test.URI == nil { - break - } - - return e.complexity.Test.URI(childComplexity), true - - case "TestCase.anchors": - if e.complexity.TestCase.Anchors == nil { - break - } - - return e.complexity.TestCase.Anchors(childComplexity), true - - case "TestCase.app": - if e.complexity.TestCase.App == nil { - break - } - - return e.complexity.TestCase.App(childComplexity), true - - case "TestCase.captured": - if e.complexity.TestCase.Captured == nil { - break - } - - return e.complexity.TestCase.Captured(childComplexity), true - - case "TestCase.cid": - if e.complexity.TestCase.Cid == nil { - break - } - - return e.complexity.TestCase.Cid(childComplexity), true - - case "TestCase.created": - if e.complexity.TestCase.Created == nil { - break - } - - return e.complexity.TestCase.Created(childComplexity), true - - case "TestCase.deps": - if e.complexity.TestCase.Deps == nil { - break - } - - return e.complexity.TestCase.Deps(childComplexity), true - - case "TestCase.httpReq": - if e.complexity.TestCase.HTTPReq == nil { - break - } - - return e.complexity.TestCase.HTTPReq(childComplexity), true - - case "TestCase.httpResp": - if e.complexity.TestCase.HTTPResp == nil { - break - } - - return e.complexity.TestCase.HTTPResp(childComplexity), true - - case "TestCase.id": - if e.complexity.TestCase.ID == nil { - break - } - - return e.complexity.TestCase.ID(childComplexity), true - - case "TestCase.noise": - if e.complexity.TestCase.Noise == nil { - break - } - - return e.complexity.TestCase.Noise(childComplexity), true - - case "TestCase.uri": - if e.complexity.TestCase.URI == nil { - break - } - - return e.complexity.TestCase.URI(childComplexity), true - - case "TestCase.updated": - if e.complexity.TestCase.Updated == nil { - break - } - - return e.complexity.TestCase.Updated(childComplexity), true - - case "TestRun.app": - if e.complexity.TestRun.App == nil { - break - } - - return e.complexity.TestRun.App(childComplexity), true - - case "TestRun.created": - if e.complexity.TestRun.Created == nil { - break - } - - return e.complexity.TestRun.Created(childComplexity), true - - case "TestRun.failure": - if e.complexity.TestRun.Failure == nil { - break - } - - return e.complexity.TestRun.Failure(childComplexity), true - - case "TestRun.id": - if e.complexity.TestRun.ID == nil { - break - } - - return e.complexity.TestRun.ID(childComplexity), true - - case "TestRun.status": - if e.complexity.TestRun.Status == nil { - break - } - - return e.complexity.TestRun.Status(childComplexity), true - - case "TestRun.success": - if e.complexity.TestRun.Success == nil { - break - } - - return e.complexity.TestRun.Success(childComplexity), true - - case "TestRun.tests": - if e.complexity.TestRun.Tests == nil { - break - } - - return e.complexity.TestRun.Tests(childComplexity), true - - case "TestRun.total": - if e.complexity.TestRun.Total == nil { - break - } - - return e.complexity.TestRun.Total(childComplexity), true - - case "TestRun.updated": - if e.complexity.TestRun.Updated == nil { - break - } - - return e.complexity.TestRun.Updated(childComplexity), true - - case "TestRun.user": - if e.complexity.TestRun.User == nil { - break - } - - return e.complexity.TestRun.User(childComplexity), true - - } - return 0, false -} - -func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler { - rc := graphql.GetOperationContext(ctx) - ec := executionContext{rc, e} - first := true - - switch rc.Operation.Operation { - case ast.Query: - return func(ctx context.Context) *graphql.Response { - if !first { - return nil - } - first = false - data := ec._Query(ctx, rc.Operation.SelectionSet) - var buf bytes.Buffer - data.MarshalGQL(&buf) - - return &graphql.Response{ - Data: buf.Bytes(), - } - } - case ast.Mutation: - return func(ctx context.Context) *graphql.Response { - if !first { - return nil - } - first = false - data := ec._Mutation(ctx, rc.Operation.SelectionSet) - var buf bytes.Buffer - data.MarshalGQL(&buf) - - return &graphql.Response{ - Data: buf.Bytes(), - } - } - case ast.Subscription: - next := ec._Subscription(ctx, rc.Operation.SelectionSet) - - var buf bytes.Buffer - return func(ctx context.Context) *graphql.Response { - buf.Reset() - data := next() - - if data == nil { - return nil - } - data.MarshalGQL(&buf) - - return &graphql.Response{ - Data: buf.Bytes(), - } - } - - default: - return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation")) - } -} - -type executionContext struct { - *graphql.OperationContext - *executableSchema -} - -func (ec *executionContext) introspectSchema() (*introspection.Schema, error) { - if ec.DisableIntrospection { - return nil, errors.New("introspection disabled") - } - return introspection.WrapSchema(parsedSchema), nil -} - -func (ec *executionContext) introspectType(name string) (*introspection.Type, error) { - if ec.DisableIntrospection { - return nil, errors.New("introspection disabled") - } - return introspection.WrapTypeFromDef(parsedSchema, parsedSchema.Types[name]), nil -} - -var sources = []*ast.Source{ - {Name: "graph/ext.graphqls", Input: `type Query -type Mutation`, BuiltIn: false}, - {Name: "graph/schema.graphqls", Input: `extend type Mutation { - updateTestCase(tc: [TestCaseInput]): Boolean! - deleteTestCase(id: String!): Boolean! - # normalizeTests accepts array of test IDs (part of a test run) and updates the respective testcases - # with the responses from the test results - normalizeTests(ids: [String!]!): Boolean! -} - -input TestCaseInput { - id: String! - created: Time - updated: Time - captured: Time - cid: String - app: String - uri: String - httpReq: HTTPReqInput - httpResp: HTTPRespInput - deps: [DependencyInput] - anchors: [String!] - noise: [String!] -} - -input HTTPReqInput { - protoMajor: Int - protoMinor: Int - url: String - urlParam: [KVInput] - header: [HeaderInput] - method: Method - body: String -} - -input HTTPRespInput { - statusCode: Int - header: [HeaderInput] - body: String -} - -input HeaderInput { - key: String! - value: [String!] -} - -input DependencyInput { - name: String! - type: DependencyType! - meta: [KVInput] -} - -input KVInput { - key: String! - value: String! -} - -type App { - id: String! -} - - -type TestRun { - id: String! - created: Time! - updated: Time! - status: TestRunStatus! - app: String! - user: String! - success: Int! - failure: Int! - total: Int! - tests: [Test] -} - -enum TestRunStatus { - RUNNING - FAILED - PASSED -} - -enum TestStatus { - PENDING - RUNNING - FAILED - PASSED -} - -type Test { - id: String! - status: TestStatus! - started: Time! - completed: Time - result: Result - testCaseID: String! - uri: String - req: HTTPReq - deps: [Dependency!] - noise: [String!] -} - -type Header { - key: String! - value: [String!] -} - -enum Method { - GET - PUT - HEAD - POST - PATCH - DELETE - OPTIONS - TRACE -} - -type HTTPReq { - protoMajor: Int! - protoMinor: Int! - url: String - urlParam: [Kv] - header: [Header] - method: Method! - body: String! -} - -type Result { - statusCode: IntResult! - headersResult: [HeaderResult] - bodyResult: BodyResult! - depResult: [DepResult!] -} - -type DepResult { - name: String! - type: DependencyType! - meta: [DepMetaResult!] -} - -type DepMetaResult { - normal: Boolean - key: String - expected: String - actual: String -} - -type IntResult { - normal: Boolean - expected: Int! - actual: Int! -} - -type HeaderResult { - normal: Boolean - key: String! - expected: Header! - actual: Header! -} - -type BodyResult { - normal: Boolean! - type: BodyType! - expected: String! - actual: String! - errors: [JSONError!] -} - -type JSONError { - key: String! - missingInExpected: Boolean! - missingInActual: Boolean! -} - -enum BodyType { - PLAIN - JSON -} - -type Kv { - key: String! - value: String! -} - -type TestCase { - id: String! - created: Time! - updated: Time! - captured: Time! - cid: String! - app: String! - uri: String! - httpReq: HTTPReq! - httpResp: HTTPResp! - deps: [Dependency!] - anchors: [String!] - noise: [String!] -} - -type HTTPResp { - statusCode: Int! - header: [Header!] - body: String! -} - -type Dependency { - name: String! - type: DependencyType! - meta: [Kv!] -} - -enum DependencyType { - NO_SQL_DB - SQL_DB - HTTP_CLIENT -} - -extend type Query { - apps: [App!] - testRun(user: String, app: String, id: String, from: Time, To: Time,offset: Int, limit: Int): [TestRun] - testCase(app: String, id: String,offset: Int, limit: Int): [TestCase] -} - -type Subscription { - TestRun(app: String, id: String): [TestRun] -} - -scalar Time -`, BuiltIn: false}, -} -var parsedSchema = gqlparser.MustLoadSchema(sources...) - -// endregion ************************** generated!.gotpl ************************** - -// region ***************************** args.gotpl ***************************** - -func (ec *executionContext) field_Mutation_deleteTestCase_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["id"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("id")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["id"] = arg0 - return args, nil -} - -func (ec *executionContext) field_Mutation_normalizeTests_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 []string - if tmp, ok := rawArgs["ids"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("ids")) - arg0, err = ec.unmarshalNString2αš•stringαš„(ctx, tmp) - if err != nil { - return nil, err - } - } - args["ids"] = arg0 - return args, nil -} - -func (ec *executionContext) field_Mutation_updateTestCase_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 []*model.TestCaseInput - if tmp, ok := rawArgs["tc"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("tc")) - arg0, err = ec.unmarshalOTestCaseInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCaseInput(ctx, tmp) - if err != nil { - return nil, err - } - } - args["tc"] = arg0 - return args, nil -} - -func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 string - if tmp, ok := rawArgs["name"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) - arg0, err = ec.unmarshalNString2string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["name"] = arg0 - return args, nil -} - -func (ec *executionContext) field_Query_testCase_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 *string - if tmp, ok := rawArgs["app"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("app")) - arg0, err = ec.unmarshalOString2αš–string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["app"] = arg0 - var arg1 *string - if tmp, ok := rawArgs["id"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("id")) - arg1, err = ec.unmarshalOString2αš–string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["id"] = arg1 - var arg2 *int - if tmp, ok := rawArgs["offset"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("offset")) - arg2, err = ec.unmarshalOInt2αš–int(ctx, tmp) - if err != nil { - return nil, err - } - } - args["offset"] = arg2 - var arg3 *int - if tmp, ok := rawArgs["limit"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("limit")) - arg3, err = ec.unmarshalOInt2αš–int(ctx, tmp) - if err != nil { - return nil, err - } - } - args["limit"] = arg3 - return args, nil -} - -func (ec *executionContext) field_Query_testRun_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 *string - if tmp, ok := rawArgs["user"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("user")) - arg0, err = ec.unmarshalOString2αš–string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["user"] = arg0 - var arg1 *string - if tmp, ok := rawArgs["app"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("app")) - arg1, err = ec.unmarshalOString2αš–string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["app"] = arg1 - var arg2 *string - if tmp, ok := rawArgs["id"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("id")) - arg2, err = ec.unmarshalOString2αš–string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["id"] = arg2 - var arg3 *time.Time - if tmp, ok := rawArgs["from"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("from")) - arg3, err = ec.unmarshalOTime2αš–timeᚐTime(ctx, tmp) - if err != nil { - return nil, err - } - } - args["from"] = arg3 - var arg4 *time.Time - if tmp, ok := rawArgs["To"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("To")) - arg4, err = ec.unmarshalOTime2αš–timeᚐTime(ctx, tmp) - if err != nil { - return nil, err - } - } - args["To"] = arg4 - var arg5 *int - if tmp, ok := rawArgs["offset"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("offset")) - arg5, err = ec.unmarshalOInt2αš–int(ctx, tmp) - if err != nil { - return nil, err - } - } - args["offset"] = arg5 - var arg6 *int - if tmp, ok := rawArgs["limit"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("limit")) - arg6, err = ec.unmarshalOInt2αš–int(ctx, tmp) - if err != nil { - return nil, err - } - } - args["limit"] = arg6 - return args, nil -} - -func (ec *executionContext) field_Subscription_TestRun_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 *string - if tmp, ok := rawArgs["app"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("app")) - arg0, err = ec.unmarshalOString2αš–string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["app"] = arg0 - var arg1 *string - if tmp, ok := rawArgs["id"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("id")) - arg1, err = ec.unmarshalOString2αš–string(ctx, tmp) - if err != nil { - return nil, err - } - } - args["id"] = arg1 - return args, nil -} - -func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 bool - if tmp, ok := rawArgs["includeDeprecated"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) - arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) - if err != nil { - return nil, err - } - } - args["includeDeprecated"] = arg0 - return args, nil -} - -func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { - var err error - args := map[string]interface{}{} - var arg0 bool - if tmp, ok := rawArgs["includeDeprecated"]; ok { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) - arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) - if err != nil { - return nil, err - } - } - args["includeDeprecated"] = arg0 - return args, nil -} - -// endregion ***************************** args.gotpl ***************************** - -// region ************************** directives.gotpl ************************** - -// endregion ************************** directives.gotpl ************************** - -// region **************************** field.gotpl ***************************** - -func (ec *executionContext) _App_id(ctx context.Context, field graphql.CollectedField, obj *model.App) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "App", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.ID, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _BodyResult_normal(ctx context.Context, field graphql.CollectedField, obj *model.BodyResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "BodyResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Normal, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _BodyResult_type(ctx context.Context, field graphql.CollectedField, obj *model.BodyResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "BodyResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Type, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(model.BodyType) - fc.Result = res - return ec.marshalNBodyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐBodyType(ctx, field.Selections, res) -} - -func (ec *executionContext) _BodyResult_expected(ctx context.Context, field graphql.CollectedField, obj *model.BodyResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "BodyResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Expected, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _BodyResult_actual(ctx context.Context, field graphql.CollectedField, obj *model.BodyResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "BodyResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Actual, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _BodyResult_errors(ctx context.Context, field graphql.CollectedField, obj *model.BodyResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "BodyResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Errors, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.JSONError) - fc.Result = res - return ec.marshalOJSONError2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐJSONErrorαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _DepMetaResult_normal(ctx context.Context, field graphql.CollectedField, obj *model.DepMetaResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "DepMetaResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Normal, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*bool) - fc.Result = res - return ec.marshalOBoolean2αš–bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _DepMetaResult_key(ctx context.Context, field graphql.CollectedField, obj *model.DepMetaResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "DepMetaResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Key, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) _DepMetaResult_expected(ctx context.Context, field graphql.CollectedField, obj *model.DepMetaResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "DepMetaResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Expected, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) _DepMetaResult_actual(ctx context.Context, field graphql.CollectedField, obj *model.DepMetaResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "DepMetaResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Actual, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) _DepResult_name(ctx context.Context, field graphql.CollectedField, obj *model.DepResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "DepResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Name, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _DepResult_type(ctx context.Context, field graphql.CollectedField, obj *model.DepResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "DepResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Type, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(model.DependencyType) - fc.Result = res - return ec.marshalNDependencyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyType(ctx, field.Selections, res) -} - -func (ec *executionContext) _DepResult_meta(ctx context.Context, field graphql.CollectedField, obj *model.DepResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "DepResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Meta, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.DepMetaResult) - fc.Result = res - return ec.marshalODepMetaResult2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepMetaResultαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _Dependency_name(ctx context.Context, field graphql.CollectedField, obj *model.Dependency) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Dependency", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Name, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Dependency_type(ctx context.Context, field graphql.CollectedField, obj *model.Dependency) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Dependency", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Type, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(model.DependencyType) - fc.Result = res - return ec.marshalNDependencyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyType(ctx, field.Selections, res) -} - -func (ec *executionContext) _Dependency_meta(ctx context.Context, field graphql.CollectedField, obj *model.Dependency) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Dependency", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Meta, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.Kv) - fc.Result = res - return ec.marshalOKv2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKvαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPReq_protoMajor(ctx context.Context, field graphql.CollectedField, obj *model.HTTPReq) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPReq", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.ProtoMajor, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPReq_protoMinor(ctx context.Context, field graphql.CollectedField, obj *model.HTTPReq) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPReq", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.ProtoMinor, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPReq_url(ctx context.Context, field graphql.CollectedField, obj *model.HTTPReq) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPReq", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.URL, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPReq_urlParam(ctx context.Context, field graphql.CollectedField, obj *model.HTTPReq) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPReq", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.URLParam, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.Kv) - fc.Result = res - return ec.marshalOKv2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKv(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPReq_header(ctx context.Context, field graphql.CollectedField, obj *model.HTTPReq) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPReq", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Header, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.Header) - fc.Result = res - return ec.marshalOHeader2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPReq_method(ctx context.Context, field graphql.CollectedField, obj *model.HTTPReq) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPReq", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Method, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(model.Method) - fc.Result = res - return ec.marshalNMethod2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐMethod(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPReq_body(ctx context.Context, field graphql.CollectedField, obj *model.HTTPReq) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPReq", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Body, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPResp_statusCode(ctx context.Context, field graphql.CollectedField, obj *model.HTTPResp) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPResp", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.StatusCode, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPResp_header(ctx context.Context, field graphql.CollectedField, obj *model.HTTPResp) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPResp", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Header, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.Header) - fc.Result = res - return ec.marshalOHeader2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _HTTPResp_body(ctx context.Context, field graphql.CollectedField, obj *model.HTTPResp) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HTTPResp", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Body, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Header_key(ctx context.Context, field graphql.CollectedField, obj *model.Header) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Header", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Key, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Header_value(ctx context.Context, field graphql.CollectedField, obj *model.Header) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Header", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Value, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]string) - fc.Result = res - return ec.marshalOString2αš•stringαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _HeaderResult_normal(ctx context.Context, field graphql.CollectedField, obj *model.HeaderResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HeaderResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Normal, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*bool) - fc.Result = res - return ec.marshalOBoolean2αš–bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _HeaderResult_key(ctx context.Context, field graphql.CollectedField, obj *model.HeaderResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HeaderResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Key, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _HeaderResult_expected(ctx context.Context, field graphql.CollectedField, obj *model.HeaderResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HeaderResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Expected, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*model.Header) - fc.Result = res - return ec.marshalNHeader2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx, field.Selections, res) -} - -func (ec *executionContext) _HeaderResult_actual(ctx context.Context, field graphql.CollectedField, obj *model.HeaderResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "HeaderResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Actual, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*model.Header) - fc.Result = res - return ec.marshalNHeader2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx, field.Selections, res) -} - -func (ec *executionContext) _IntResult_normal(ctx context.Context, field graphql.CollectedField, obj *model.IntResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "IntResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Normal, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*bool) - fc.Result = res - return ec.marshalOBoolean2αš–bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _IntResult_expected(ctx context.Context, field graphql.CollectedField, obj *model.IntResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "IntResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Expected, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _IntResult_actual(ctx context.Context, field graphql.CollectedField, obj *model.IntResult) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "IntResult", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Actual, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _JSONError_key(ctx context.Context, field graphql.CollectedField, obj *model.JSONError) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "JSONError", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Key, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _JSONError_missingInExpected(ctx context.Context, field graphql.CollectedField, obj *model.JSONError) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "JSONError", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.MissingInExpected, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _JSONError_missingInActual(ctx context.Context, field graphql.CollectedField, obj *model.JSONError) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "JSONError", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.MissingInActual, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _Kv_key(ctx context.Context, field graphql.CollectedField, obj *model.Kv) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Kv", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Key, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Kv_value(ctx context.Context, field graphql.CollectedField, obj *model.Kv) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Kv", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Value, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Mutation_updateTestCase(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Mutation", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field_Mutation_updateTestCase_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().UpdateTestCase(rctx, args["tc"].([]*model.TestCaseInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _Mutation_deleteTestCase(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Mutation", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field_Mutation_deleteTestCase_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().DeleteTestCase(rctx, args["id"].(string)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _Mutation_normalizeTests(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Mutation", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field_Mutation_normalizeTests_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().NormalizeTests(rctx, args["ids"].([]string)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) _Query_apps(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Query", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().Apps(rctx) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.App) - fc.Result = res - return ec.marshalOApp2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐAppαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _Query_testRun(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Query", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field_Query_testRun_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().TestRun(rctx, args["user"].(*string), args["app"].(*string), args["id"].(*string), args["from"].(*time.Time), args["To"].(*time.Time), args["offset"].(*int), args["limit"].(*int)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.TestRun) - fc.Result = res - return ec.marshalOTestRun2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRun(ctx, field.Selections, res) -} - -func (ec *executionContext) _Query_testCase(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Query", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field_Query_testCase_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().TestCase(rctx, args["app"].(*string), args["id"].(*string), args["offset"].(*int), args["limit"].(*int)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.TestCase) - fc.Result = res - return ec.marshalOTestCase2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCase(ctx, field.Selections, res) -} - -func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Query", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field_Query___type_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.introspectType(args["name"].(string)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*introspection.Type) - fc.Result = res - return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) -} - -func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Query", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.introspectSchema() - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*introspection.Schema) - fc.Result = res - return ec.marshalO__Schema2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐSchema(ctx, field.Selections, res) -} - -func (ec *executionContext) _Result_statusCode(ctx context.Context, field graphql.CollectedField, obj *model.Result) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Result", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.StatusCode, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*model.IntResult) - fc.Result = res - return ec.marshalNIntResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐIntResult(ctx, field.Selections, res) -} - -func (ec *executionContext) _Result_headersResult(ctx context.Context, field graphql.CollectedField, obj *model.Result) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Result", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.HeadersResult, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.HeaderResult) - fc.Result = res - return ec.marshalOHeaderResult2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderResult(ctx, field.Selections, res) -} - -func (ec *executionContext) _Result_bodyResult(ctx context.Context, field graphql.CollectedField, obj *model.Result) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Result", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.BodyResult, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*model.BodyResult) - fc.Result = res - return ec.marshalNBodyResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐBodyResult(ctx, field.Selections, res) -} - -func (ec *executionContext) _Result_depResult(ctx context.Context, field graphql.CollectedField, obj *model.Result) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Result", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.DepResult, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.DepResult) - fc.Result = res - return ec.marshalODepResult2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepResultαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _Subscription_TestRun(ctx context.Context, field graphql.CollectedField) (ret func() graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - fc := &graphql.FieldContext{ - Object: "Subscription", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field_Subscription_TestRun_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return nil - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Subscription().TestRun(rctx, args["app"].(*string), args["id"].(*string)) - }) - if err != nil { - ec.Error(ctx, err) - return nil - } - if resTmp == nil { - return nil - } - return func() graphql.Marshaler { - res, ok := <-resTmp.(<-chan []*model.TestRun) - if !ok { - return nil - } - return graphql.WriterFunc(func(w io.Writer) { - w.Write([]byte{'{'}) - graphql.MarshalString(field.Alias).MarshalGQL(w) - w.Write([]byte{':'}) - ec.marshalOTestRun2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRun(ctx, field.Selections, res).MarshalGQL(w) - w.Write([]byte{'}'}) - }) - } -} - -func (ec *executionContext) _Test_id(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.ID, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_status(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Status, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(model.TestStatus) - fc.Result = res - return ec.marshalNTestStatus2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestStatus(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_started(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Started, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(time.Time) - fc.Result = res - return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_completed(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Completed, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*time.Time) - fc.Result = res - return ec.marshalOTime2αš–timeᚐTime(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_result(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Result, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*model.Result) - fc.Result = res - return ec.marshalOResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐResult(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_testCaseID(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.TestCaseID, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_uri(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.URI, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_req(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Req, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*model.HTTPReq) - fc.Result = res - return ec.marshalOHTTPReq2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPReq(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_deps(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Deps, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.Dependency) - fc.Result = res - return ec.marshalODependency2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _Test_noise(ctx context.Context, field graphql.CollectedField, obj *model.Test) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Test", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Noise, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]string) - fc.Result = res - return ec.marshalOString2αš•stringαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_id(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.ID, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_created(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Created, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(time.Time) - fc.Result = res - return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_updated(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Updated, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(time.Time) - fc.Result = res - return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_captured(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Captured, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(time.Time) - fc.Result = res - return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_cid(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Cid, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_app(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.App, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_uri(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.URI, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_httpReq(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.HTTPReq, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*model.HTTPReq) - fc.Result = res - return ec.marshalNHTTPReq2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPReq(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_httpResp(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.HTTPResp, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*model.HTTPResp) - fc.Result = res - return ec.marshalNHTTPResp2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPResp(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_deps(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Deps, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.Dependency) - fc.Result = res - return ec.marshalODependency2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_anchors(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Anchors, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]string) - fc.Result = res - return ec.marshalOString2αš•stringαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestCase_noise(ctx context.Context, field graphql.CollectedField, obj *model.TestCase) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestCase", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Noise, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]string) - fc.Result = res - return ec.marshalOString2αš•stringαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_id(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.ID, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_created(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Created, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(time.Time) - fc.Result = res - return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_updated(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Updated, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(time.Time) - fc.Result = res - return ec.marshalNTime2timeᚐTime(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_status(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Status, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(model.TestRunStatus) - fc.Result = res - return ec.marshalNTestRunStatus2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRunStatus(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_app(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.App, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_user(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.User, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_success(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Success, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_failure(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Failure, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_total(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Total, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(int) - fc.Result = res - return ec.marshalNInt2int(ctx, field.Selections, res) -} - -func (ec *executionContext) _TestRun_tests(ctx context.Context, field graphql.CollectedField, obj *model.TestRun) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "TestRun", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Tests, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]*model.Test) - fc.Result = res - return ec.marshalOTest2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTest(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Directive", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Name, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Directive", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Description, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalOString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Directive", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Locations, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.([]string) - fc.Result = res - return ec.marshalN__DirectiveLocation2αš•stringαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Directive", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Args, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.([]introspection.InputValue) - fc.Result = res - return ec.marshalN__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Directive_isRepeatable(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Directive", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.IsRepeatable, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Name, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Description, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalOString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.IsDeprecated(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.DeprecationReason(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Field", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Name, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Field", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Description, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalOString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Field", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Args, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.([]introspection.InputValue) - fc.Result = res - return ec.marshalN__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Field", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Type, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*introspection.Type) - fc.Result = res - return ec.marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Field", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.IsDeprecated(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(bool) - fc.Result = res - return ec.marshalNBoolean2bool(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Field", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.DeprecationReason(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Name, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalNString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Description, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalOString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Type, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*introspection.Type) - fc.Result = res - return ec.marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) -} - -func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - Args: nil, - IsMethod: false, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.DefaultValue, nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Schema", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Types(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.([]introspection.Type) - fc.Result = res - return ec.marshalN__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Schema", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.QueryType(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*introspection.Type) - fc.Result = res - return ec.marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Schema", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.MutationType(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*introspection.Type) - fc.Result = res - return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Schema", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.SubscriptionType(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*introspection.Type) - fc.Result = res - return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Schema", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Directives(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.([]introspection.Directive) - fc.Result = res - return ec.marshalN__Directive2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirectiveαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Kind(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalN__TypeKind2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Name(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*string) - fc.Result = res - return ec.marshalOString2αš–string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Description(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(string) - fc.Result = res - return ec.marshalOString2string(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field___Type_fields_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Fields(args["includeDeprecated"].(bool)), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]introspection.Field) - fc.Result = res - return ec.marshalO__Field2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐFieldαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.Interfaces(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]introspection.Type) - fc.Result = res - return ec.marshalO__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.PossibleTypes(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]introspection.Type) - fc.Result = res - return ec.marshalO__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - rawArgs := field.ArgumentMap(ec.Variables) - args, err := ec.field___Type_enumValues_args(ctx, rawArgs) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - fc.Args = args - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.EnumValues(args["includeDeprecated"].(bool)), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]introspection.EnumValue) - fc.Result = res - return ec.marshalO__EnumValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValueαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.InputFields(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.([]introspection.InputValue) - fc.Result = res - return ec.marshalO__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx, field.Selections, res) -} - -func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "__Type", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: false, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return obj.OfType(), nil - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - return graphql.Null - } - res := resTmp.(*introspection.Type) - fc.Result = res - return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) -} - -// endregion **************************** field.gotpl ***************************** - -// region **************************** input.gotpl ***************************** - -func (ec *executionContext) unmarshalInputDependencyInput(ctx context.Context, obj interface{}) (model.DependencyInput, error) { - var it model.DependencyInput - asMap := map[string]interface{}{} - for k, v := range obj.(map[string]interface{}) { - asMap[k] = v - } - - for k, v := range asMap { - switch k { - case "name": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) - it.Name, err = ec.unmarshalNString2string(ctx, v) - if err != nil { - return it, err - } - case "type": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("type")) - it.Type, err = ec.unmarshalNDependencyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyType(ctx, v) - if err != nil { - return it, err - } - case "meta": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("meta")) - it.Meta, err = ec.unmarshalOKVInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKVInput(ctx, v) - if err != nil { - return it, err - } - } - } - - return it, nil -} - -func (ec *executionContext) unmarshalInputHTTPReqInput(ctx context.Context, obj interface{}) (model.HTTPReqInput, error) { - var it model.HTTPReqInput - asMap := map[string]interface{}{} - for k, v := range obj.(map[string]interface{}) { - asMap[k] = v - } - - for k, v := range asMap { - switch k { - case "protoMajor": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("protoMajor")) - it.ProtoMajor, err = ec.unmarshalOInt2αš–int(ctx, v) - if err != nil { - return it, err - } - case "protoMinor": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("protoMinor")) - it.ProtoMinor, err = ec.unmarshalOInt2αš–int(ctx, v) - if err != nil { - return it, err - } - case "url": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("url")) - it.URL, err = ec.unmarshalOString2αš–string(ctx, v) - if err != nil { - return it, err - } - case "urlParam": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("urlParam")) - it.URLParam, err = ec.unmarshalOKVInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKVInput(ctx, v) - if err != nil { - return it, err - } - case "header": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("header")) - it.Header, err = ec.unmarshalOHeaderInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderInput(ctx, v) - if err != nil { - return it, err - } - case "method": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("method")) - it.Method, err = ec.unmarshalOMethod2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐMethod(ctx, v) - if err != nil { - return it, err - } - case "body": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("body")) - it.Body, err = ec.unmarshalOString2αš–string(ctx, v) - if err != nil { - return it, err - } - } - } - - return it, nil -} - -func (ec *executionContext) unmarshalInputHTTPRespInput(ctx context.Context, obj interface{}) (model.HTTPRespInput, error) { - var it model.HTTPRespInput - asMap := map[string]interface{}{} - for k, v := range obj.(map[string]interface{}) { - asMap[k] = v - } - - for k, v := range asMap { - switch k { - case "statusCode": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("statusCode")) - it.StatusCode, err = ec.unmarshalOInt2αš–int(ctx, v) - if err != nil { - return it, err - } - case "header": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("header")) - it.Header, err = ec.unmarshalOHeaderInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderInput(ctx, v) - if err != nil { - return it, err - } - case "body": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("body")) - it.Body, err = ec.unmarshalOString2αš–string(ctx, v) - if err != nil { - return it, err - } - } - } - - return it, nil -} - -func (ec *executionContext) unmarshalInputHeaderInput(ctx context.Context, obj interface{}) (model.HeaderInput, error) { - var it model.HeaderInput - asMap := map[string]interface{}{} - for k, v := range obj.(map[string]interface{}) { - asMap[k] = v - } - - for k, v := range asMap { - switch k { - case "key": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - it.Key, err = ec.unmarshalNString2string(ctx, v) - if err != nil { - return it, err - } - case "value": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("value")) - it.Value, err = ec.unmarshalOString2αš•stringαš„(ctx, v) - if err != nil { - return it, err - } - } - } - - return it, nil -} - -func (ec *executionContext) unmarshalInputKVInput(ctx context.Context, obj interface{}) (model.KVInput, error) { - var it model.KVInput - asMap := map[string]interface{}{} - for k, v := range obj.(map[string]interface{}) { - asMap[k] = v - } - - for k, v := range asMap { - switch k { - case "key": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("key")) - it.Key, err = ec.unmarshalNString2string(ctx, v) - if err != nil { - return it, err - } - case "value": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("value")) - it.Value, err = ec.unmarshalNString2string(ctx, v) - if err != nil { - return it, err - } - } - } - - return it, nil -} - -func (ec *executionContext) unmarshalInputTestCaseInput(ctx context.Context, obj interface{}) (model.TestCaseInput, error) { - var it model.TestCaseInput - asMap := map[string]interface{}{} - for k, v := range obj.(map[string]interface{}) { - asMap[k] = v - } - - for k, v := range asMap { - switch k { - case "id": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("id")) - it.ID, err = ec.unmarshalNString2string(ctx, v) - if err != nil { - return it, err - } - case "created": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("created")) - it.Created, err = ec.unmarshalOTime2αš–timeᚐTime(ctx, v) - if err != nil { - return it, err - } - case "updated": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("updated")) - it.Updated, err = ec.unmarshalOTime2αš–timeᚐTime(ctx, v) - if err != nil { - return it, err - } - case "captured": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("captured")) - it.Captured, err = ec.unmarshalOTime2αš–timeᚐTime(ctx, v) - if err != nil { - return it, err - } - case "cid": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("cid")) - it.Cid, err = ec.unmarshalOString2αš–string(ctx, v) - if err != nil { - return it, err - } - case "app": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("app")) - it.App, err = ec.unmarshalOString2αš–string(ctx, v) - if err != nil { - return it, err - } - case "uri": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("uri")) - it.URI, err = ec.unmarshalOString2αš–string(ctx, v) - if err != nil { - return it, err - } - case "httpReq": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("httpReq")) - it.HTTPReq, err = ec.unmarshalOHTTPReqInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPReqInput(ctx, v) - if err != nil { - return it, err - } - case "httpResp": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("httpResp")) - it.HTTPResp, err = ec.unmarshalOHTTPRespInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPRespInput(ctx, v) - if err != nil { - return it, err - } - case "deps": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("deps")) - it.Deps, err = ec.unmarshalODependencyInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyInput(ctx, v) - if err != nil { - return it, err - } - case "anchors": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("anchors")) - it.Anchors, err = ec.unmarshalOString2αš•stringαš„(ctx, v) - if err != nil { - return it, err - } - case "noise": - var err error - - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("noise")) - it.Noise, err = ec.unmarshalOString2αš•stringαš„(ctx, v) - if err != nil { - return it, err - } - } - } - - return it, nil -} - -// endregion **************************** input.gotpl ***************************** - -// region ************************** interface.gotpl *************************** - -// endregion ************************** interface.gotpl *************************** - -// region **************************** object.gotpl **************************** - -var appImplementors = []string{"App"} - -func (ec *executionContext) _App(ctx context.Context, sel ast.SelectionSet, obj *model.App) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, appImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("App") - case "id": - out.Values[i] = ec._App_id(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var bodyResultImplementors = []string{"BodyResult"} - -func (ec *executionContext) _BodyResult(ctx context.Context, sel ast.SelectionSet, obj *model.BodyResult) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, bodyResultImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("BodyResult") - case "normal": - out.Values[i] = ec._BodyResult_normal(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "type": - out.Values[i] = ec._BodyResult_type(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "expected": - out.Values[i] = ec._BodyResult_expected(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "actual": - out.Values[i] = ec._BodyResult_actual(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "errors": - out.Values[i] = ec._BodyResult_errors(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var depMetaResultImplementors = []string{"DepMetaResult"} - -func (ec *executionContext) _DepMetaResult(ctx context.Context, sel ast.SelectionSet, obj *model.DepMetaResult) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, depMetaResultImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("DepMetaResult") - case "normal": - out.Values[i] = ec._DepMetaResult_normal(ctx, field, obj) - case "key": - out.Values[i] = ec._DepMetaResult_key(ctx, field, obj) - case "expected": - out.Values[i] = ec._DepMetaResult_expected(ctx, field, obj) - case "actual": - out.Values[i] = ec._DepMetaResult_actual(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var depResultImplementors = []string{"DepResult"} - -func (ec *executionContext) _DepResult(ctx context.Context, sel ast.SelectionSet, obj *model.DepResult) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, depResultImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("DepResult") - case "name": - out.Values[i] = ec._DepResult_name(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "type": - out.Values[i] = ec._DepResult_type(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "meta": - out.Values[i] = ec._DepResult_meta(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var dependencyImplementors = []string{"Dependency"} - -func (ec *executionContext) _Dependency(ctx context.Context, sel ast.SelectionSet, obj *model.Dependency) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, dependencyImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Dependency") - case "name": - out.Values[i] = ec._Dependency_name(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "type": - out.Values[i] = ec._Dependency_type(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "meta": - out.Values[i] = ec._Dependency_meta(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var hTTPReqImplementors = []string{"HTTPReq"} - -func (ec *executionContext) _HTTPReq(ctx context.Context, sel ast.SelectionSet, obj *model.HTTPReq) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, hTTPReqImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("HTTPReq") - case "protoMajor": - out.Values[i] = ec._HTTPReq_protoMajor(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "protoMinor": - out.Values[i] = ec._HTTPReq_protoMinor(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "url": - out.Values[i] = ec._HTTPReq_url(ctx, field, obj) - case "urlParam": - out.Values[i] = ec._HTTPReq_urlParam(ctx, field, obj) - case "header": - out.Values[i] = ec._HTTPReq_header(ctx, field, obj) - case "method": - out.Values[i] = ec._HTTPReq_method(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "body": - out.Values[i] = ec._HTTPReq_body(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var hTTPRespImplementors = []string{"HTTPResp"} - -func (ec *executionContext) _HTTPResp(ctx context.Context, sel ast.SelectionSet, obj *model.HTTPResp) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, hTTPRespImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("HTTPResp") - case "statusCode": - out.Values[i] = ec._HTTPResp_statusCode(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "header": - out.Values[i] = ec._HTTPResp_header(ctx, field, obj) - case "body": - out.Values[i] = ec._HTTPResp_body(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var headerImplementors = []string{"Header"} - -func (ec *executionContext) _Header(ctx context.Context, sel ast.SelectionSet, obj *model.Header) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, headerImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Header") - case "key": - out.Values[i] = ec._Header_key(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "value": - out.Values[i] = ec._Header_value(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var headerResultImplementors = []string{"HeaderResult"} - -func (ec *executionContext) _HeaderResult(ctx context.Context, sel ast.SelectionSet, obj *model.HeaderResult) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, headerResultImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("HeaderResult") - case "normal": - out.Values[i] = ec._HeaderResult_normal(ctx, field, obj) - case "key": - out.Values[i] = ec._HeaderResult_key(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "expected": - out.Values[i] = ec._HeaderResult_expected(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "actual": - out.Values[i] = ec._HeaderResult_actual(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var intResultImplementors = []string{"IntResult"} - -func (ec *executionContext) _IntResult(ctx context.Context, sel ast.SelectionSet, obj *model.IntResult) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, intResultImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("IntResult") - case "normal": - out.Values[i] = ec._IntResult_normal(ctx, field, obj) - case "expected": - out.Values[i] = ec._IntResult_expected(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "actual": - out.Values[i] = ec._IntResult_actual(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var jSONErrorImplementors = []string{"JSONError"} - -func (ec *executionContext) _JSONError(ctx context.Context, sel ast.SelectionSet, obj *model.JSONError) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, jSONErrorImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("JSONError") - case "key": - out.Values[i] = ec._JSONError_key(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "missingInExpected": - out.Values[i] = ec._JSONError_missingInExpected(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "missingInActual": - out.Values[i] = ec._JSONError_missingInActual(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var kvImplementors = []string{"Kv"} - -func (ec *executionContext) _Kv(ctx context.Context, sel ast.SelectionSet, obj *model.Kv) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, kvImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Kv") - case "key": - out.Values[i] = ec._Kv_key(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "value": - out.Values[i] = ec._Kv_value(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var mutationImplementors = []string{"Mutation"} - -func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors) - - ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{ - Object: "Mutation", - }) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Mutation") - case "updateTestCase": - out.Values[i] = ec._Mutation_updateTestCase(ctx, field) - if out.Values[i] == graphql.Null { - invalids++ - } - case "deleteTestCase": - out.Values[i] = ec._Mutation_deleteTestCase(ctx, field) - if out.Values[i] == graphql.Null { - invalids++ - } - case "normalizeTests": - out.Values[i] = ec._Mutation_normalizeTests(ctx, field) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var queryImplementors = []string{"Query"} - -func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors) - - ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{ - Object: "Query", - }) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Query") - case "apps": - field := field - out.Concurrently(i, func() (res graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - } - }() - res = ec._Query_apps(ctx, field) - return res - }) - case "testRun": - field := field - out.Concurrently(i, func() (res graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - } - }() - res = ec._Query_testRun(ctx, field) - return res - }) - case "testCase": - field := field - out.Concurrently(i, func() (res graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - } - }() - res = ec._Query_testCase(ctx, field) - return res - }) - case "__type": - out.Values[i] = ec._Query___type(ctx, field) - case "__schema": - out.Values[i] = ec._Query___schema(ctx, field) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var resultImplementors = []string{"Result"} - -func (ec *executionContext) _Result(ctx context.Context, sel ast.SelectionSet, obj *model.Result) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, resultImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Result") - case "statusCode": - out.Values[i] = ec._Result_statusCode(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "headersResult": - out.Values[i] = ec._Result_headersResult(ctx, field, obj) - case "bodyResult": - out.Values[i] = ec._Result_bodyResult(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "depResult": - out.Values[i] = ec._Result_depResult(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var subscriptionImplementors = []string{"Subscription"} - -func (ec *executionContext) _Subscription(ctx context.Context, sel ast.SelectionSet) func() graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, subscriptionImplementors) - ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{ - Object: "Subscription", - }) - if len(fields) != 1 { - ec.Errorf(ctx, "must subscribe to exactly one stream") - return nil - } - - switch fields[0].Name { - case "TestRun": - return ec._Subscription_TestRun(ctx, fields[0]) - default: - panic("unknown field " + strconv.Quote(fields[0].Name)) - } -} - -var testImplementors = []string{"Test"} - -func (ec *executionContext) _Test(ctx context.Context, sel ast.SelectionSet, obj *model.Test) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, testImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("Test") - case "id": - out.Values[i] = ec._Test_id(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "status": - out.Values[i] = ec._Test_status(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "started": - out.Values[i] = ec._Test_started(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "completed": - out.Values[i] = ec._Test_completed(ctx, field, obj) - case "result": - out.Values[i] = ec._Test_result(ctx, field, obj) - case "testCaseID": - out.Values[i] = ec._Test_testCaseID(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "uri": - out.Values[i] = ec._Test_uri(ctx, field, obj) - case "req": - out.Values[i] = ec._Test_req(ctx, field, obj) - case "deps": - out.Values[i] = ec._Test_deps(ctx, field, obj) - case "noise": - out.Values[i] = ec._Test_noise(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var testCaseImplementors = []string{"TestCase"} - -func (ec *executionContext) _TestCase(ctx context.Context, sel ast.SelectionSet, obj *model.TestCase) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, testCaseImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("TestCase") - case "id": - out.Values[i] = ec._TestCase_id(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "created": - out.Values[i] = ec._TestCase_created(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "updated": - out.Values[i] = ec._TestCase_updated(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "captured": - out.Values[i] = ec._TestCase_captured(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "cid": - out.Values[i] = ec._TestCase_cid(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "app": - out.Values[i] = ec._TestCase_app(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "uri": - out.Values[i] = ec._TestCase_uri(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "httpReq": - out.Values[i] = ec._TestCase_httpReq(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "httpResp": - out.Values[i] = ec._TestCase_httpResp(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "deps": - out.Values[i] = ec._TestCase_deps(ctx, field, obj) - case "anchors": - out.Values[i] = ec._TestCase_anchors(ctx, field, obj) - case "noise": - out.Values[i] = ec._TestCase_noise(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var testRunImplementors = []string{"TestRun"} - -func (ec *executionContext) _TestRun(ctx context.Context, sel ast.SelectionSet, obj *model.TestRun) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, testRunImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("TestRun") - case "id": - out.Values[i] = ec._TestRun_id(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "created": - out.Values[i] = ec._TestRun_created(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "updated": - out.Values[i] = ec._TestRun_updated(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "status": - out.Values[i] = ec._TestRun_status(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "app": - out.Values[i] = ec._TestRun_app(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "user": - out.Values[i] = ec._TestRun_user(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "success": - out.Values[i] = ec._TestRun_success(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "failure": - out.Values[i] = ec._TestRun_failure(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "total": - out.Values[i] = ec._TestRun_total(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "tests": - out.Values[i] = ec._TestRun_tests(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var __DirectiveImplementors = []string{"__Directive"} - -func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("__Directive") - case "name": - out.Values[i] = ec.___Directive_name(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "description": - out.Values[i] = ec.___Directive_description(ctx, field, obj) - case "locations": - out.Values[i] = ec.___Directive_locations(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "args": - out.Values[i] = ec.___Directive_args(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "isRepeatable": - out.Values[i] = ec.___Directive_isRepeatable(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var __EnumValueImplementors = []string{"__EnumValue"} - -func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("__EnumValue") - case "name": - out.Values[i] = ec.___EnumValue_name(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "description": - out.Values[i] = ec.___EnumValue_description(ctx, field, obj) - case "isDeprecated": - out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "deprecationReason": - out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var __FieldImplementors = []string{"__Field"} - -func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("__Field") - case "name": - out.Values[i] = ec.___Field_name(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "description": - out.Values[i] = ec.___Field_description(ctx, field, obj) - case "args": - out.Values[i] = ec.___Field_args(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "type": - out.Values[i] = ec.___Field_type(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "isDeprecated": - out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "deprecationReason": - out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var __InputValueImplementors = []string{"__InputValue"} - -func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("__InputValue") - case "name": - out.Values[i] = ec.___InputValue_name(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "description": - out.Values[i] = ec.___InputValue_description(ctx, field, obj) - case "type": - out.Values[i] = ec.___InputValue_type(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "defaultValue": - out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var __SchemaImplementors = []string{"__Schema"} - -func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("__Schema") - case "types": - out.Values[i] = ec.___Schema_types(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "queryType": - out.Values[i] = ec.___Schema_queryType(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "mutationType": - out.Values[i] = ec.___Schema_mutationType(ctx, field, obj) - case "subscriptionType": - out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj) - case "directives": - out.Values[i] = ec.___Schema_directives(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -var __TypeImplementors = []string{"__Type"} - -func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler { - fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors) - - out := graphql.NewFieldSet(fields) - var invalids uint32 - for i, field := range fields { - switch field.Name { - case "__typename": - out.Values[i] = graphql.MarshalString("__Type") - case "kind": - out.Values[i] = ec.___Type_kind(ctx, field, obj) - if out.Values[i] == graphql.Null { - invalids++ - } - case "name": - out.Values[i] = ec.___Type_name(ctx, field, obj) - case "description": - out.Values[i] = ec.___Type_description(ctx, field, obj) - case "fields": - out.Values[i] = ec.___Type_fields(ctx, field, obj) - case "interfaces": - out.Values[i] = ec.___Type_interfaces(ctx, field, obj) - case "possibleTypes": - out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj) - case "enumValues": - out.Values[i] = ec.___Type_enumValues(ctx, field, obj) - case "inputFields": - out.Values[i] = ec.___Type_inputFields(ctx, field, obj) - case "ofType": - out.Values[i] = ec.___Type_ofType(ctx, field, obj) - default: - panic("unknown field " + strconv.Quote(field.Name)) - } - } - out.Dispatch() - if invalids > 0 { - return graphql.Null - } - return out -} - -// endregion **************************** object.gotpl **************************** - -// region ***************************** type.gotpl ***************************** - -func (ec *executionContext) marshalNApp2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐApp(ctx context.Context, sel ast.SelectionSet, v *model.App) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._App(ctx, sel, v) -} - -func (ec *executionContext) marshalNBodyResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐBodyResult(ctx context.Context, sel ast.SelectionSet, v *model.BodyResult) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._BodyResult(ctx, sel, v) -} - -func (ec *executionContext) unmarshalNBodyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐBodyType(ctx context.Context, v interface{}) (model.BodyType, error) { - var res model.BodyType - err := res.UnmarshalGQL(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNBodyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐBodyType(ctx context.Context, sel ast.SelectionSet, v model.BodyType) graphql.Marshaler { - return v -} - -func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) { - res, err := graphql.UnmarshalBoolean(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler { - res := graphql.MarshalBoolean(v) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - } - return res -} - -func (ec *executionContext) marshalNDepMetaResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepMetaResult(ctx context.Context, sel ast.SelectionSet, v *model.DepMetaResult) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._DepMetaResult(ctx, sel, v) -} - -func (ec *executionContext) marshalNDepResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepResult(ctx context.Context, sel ast.SelectionSet, v *model.DepResult) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._DepResult(ctx, sel, v) -} - -func (ec *executionContext) marshalNDependency2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependency(ctx context.Context, sel ast.SelectionSet, v *model.Dependency) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._Dependency(ctx, sel, v) -} - -func (ec *executionContext) unmarshalNDependencyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyType(ctx context.Context, v interface{}) (model.DependencyType, error) { - var res model.DependencyType - err := res.UnmarshalGQL(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNDependencyType2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyType(ctx context.Context, sel ast.SelectionSet, v model.DependencyType) graphql.Marshaler { - return v -} - -func (ec *executionContext) marshalNHTTPReq2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPReq(ctx context.Context, sel ast.SelectionSet, v *model.HTTPReq) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._HTTPReq(ctx, sel, v) -} - -func (ec *executionContext) marshalNHTTPResp2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPResp(ctx context.Context, sel ast.SelectionSet, v *model.HTTPResp) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._HTTPResp(ctx, sel, v) -} - -func (ec *executionContext) marshalNHeader2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx context.Context, sel ast.SelectionSet, v *model.Header) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._Header(ctx, sel, v) -} - -func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) { - res, err := graphql.UnmarshalInt(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler { - res := graphql.MarshalInt(v) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - } - return res -} - -func (ec *executionContext) marshalNIntResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐIntResult(ctx context.Context, sel ast.SelectionSet, v *model.IntResult) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._IntResult(ctx, sel, v) -} - -func (ec *executionContext) marshalNJSONError2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐJSONError(ctx context.Context, sel ast.SelectionSet, v *model.JSONError) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._JSONError(ctx, sel, v) -} - -func (ec *executionContext) marshalNKv2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKv(ctx context.Context, sel ast.SelectionSet, v *model.Kv) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec._Kv(ctx, sel, v) -} - -func (ec *executionContext) unmarshalNMethod2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐMethod(ctx context.Context, v interface{}) (model.Method, error) { - var res model.Method - err := res.UnmarshalGQL(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNMethod2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐMethod(ctx context.Context, sel ast.SelectionSet, v model.Method) graphql.Marshaler { - return v -} - -func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) { - res, err := graphql.UnmarshalString(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler { - res := graphql.MarshalString(v) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - } - return res -} - -func (ec *executionContext) unmarshalNString2αš•stringαš„(ctx context.Context, v interface{}) ([]string, error) { - var vSlice []interface{} - if v != nil { - if tmp1, ok := v.([]interface{}); ok { - vSlice = tmp1 - } else { - vSlice = []interface{}{v} - } - } - var err error - res := make([]string, len(vSlice)) - for i := range vSlice { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) - res[i], err = ec.unmarshalNString2string(ctx, vSlice[i]) - if err != nil { - return nil, err - } - } - return res, nil -} - -func (ec *executionContext) marshalNString2αš•stringαš„(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler { - ret := make(graphql.Array, len(v)) - for i := range v { - ret[i] = ec.marshalNString2string(ctx, sel, v[i]) - } - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) unmarshalNTestRunStatus2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRunStatus(ctx context.Context, v interface{}) (model.TestRunStatus, error) { - var res model.TestRunStatus - err := res.UnmarshalGQL(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNTestRunStatus2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRunStatus(ctx context.Context, sel ast.SelectionSet, v model.TestRunStatus) graphql.Marshaler { - return v -} - -func (ec *executionContext) unmarshalNTestStatus2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestStatus(ctx context.Context, v interface{}) (model.TestStatus, error) { - var res model.TestStatus - err := res.UnmarshalGQL(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNTestStatus2goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestStatus(ctx context.Context, sel ast.SelectionSet, v model.TestStatus) graphql.Marshaler { - return v -} - -func (ec *executionContext) unmarshalNTime2timeᚐTime(ctx context.Context, v interface{}) (time.Time, error) { - res, err := graphql.UnmarshalTime(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalNTime2timeᚐTime(ctx context.Context, sel ast.SelectionSet, v time.Time) graphql.Marshaler { - res := graphql.MarshalTime(v) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - } - return res -} - -func (ec *executionContext) marshalN__Directive2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler { - return ec.___Directive(ctx, sel, &v) -} - -func (ec *executionContext) marshalN__Directive2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirectiveαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler { - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__Directive2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirective(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) { - res, err := graphql.UnmarshalString(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler { - res := graphql.MarshalString(v) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - } - return res -} - -func (ec *executionContext) unmarshalN__DirectiveLocation2αš•stringαš„(ctx context.Context, v interface{}) ([]string, error) { - var vSlice []interface{} - if v != nil { - if tmp1, ok := v.([]interface{}); ok { - vSlice = tmp1 - } else { - vSlice = []interface{}{v} - } - } - var err error - res := make([]string, len(vSlice)) - for i := range vSlice { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) - res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i]) - if err != nil { - return nil, err - } - } - return res, nil -} - -func (ec *executionContext) marshalN__DirectiveLocation2αš•stringαš„(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler { - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalN__EnumValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler { - return ec.___EnumValue(ctx, sel, &v) -} - -func (ec *executionContext) marshalN__Field2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler { - return ec.___Field(ctx, sel, &v) -} - -func (ec *executionContext) marshalN__InputValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler { - return ec.___InputValue(ctx, sel, &v) -} - -func (ec *executionContext) marshalN__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler { - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__InputValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValue(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalN__Type2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler { - return ec.___Type(ctx, sel, &v) -} - -func (ec *executionContext) marshalN__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler { - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__Type2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler { - if v == nil { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - return ec.___Type(ctx, sel, v) -} - -func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) { - res, err := graphql.UnmarshalString(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler { - res := graphql.MarshalString(v) - if res == graphql.Null { - if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { - ec.Errorf(ctx, "must not be null") - } - } - return res -} - -func (ec *executionContext) marshalOApp2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐAppαš„(ctx context.Context, sel ast.SelectionSet, v []*model.App) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalNApp2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐApp(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) { - res, err := graphql.UnmarshalBoolean(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler { - return graphql.MarshalBoolean(v) -} - -func (ec *executionContext) unmarshalOBoolean2αš–bool(ctx context.Context, v interface{}) (*bool, error) { - if v == nil { - return nil, nil - } - res, err := graphql.UnmarshalBoolean(v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOBoolean2αš–bool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return graphql.MarshalBoolean(*v) -} - -func (ec *executionContext) marshalODepMetaResult2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepMetaResultαš„(ctx context.Context, sel ast.SelectionSet, v []*model.DepMetaResult) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalNDepMetaResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepMetaResult(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalODepResult2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepResultαš„(ctx context.Context, sel ast.SelectionSet, v []*model.DepResult) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalNDepResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDepResult(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalODependency2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyαš„(ctx context.Context, sel ast.SelectionSet, v []*model.Dependency) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalNDependency2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependency(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) unmarshalODependencyInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyInput(ctx context.Context, v interface{}) ([]*model.DependencyInput, error) { - if v == nil { - return nil, nil - } - var vSlice []interface{} - if v != nil { - if tmp1, ok := v.([]interface{}); ok { - vSlice = tmp1 - } else { - vSlice = []interface{}{v} - } - } - var err error - res := make([]*model.DependencyInput, len(vSlice)) - for i := range vSlice { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) - res[i], err = ec.unmarshalODependencyInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyInput(ctx, vSlice[i]) - if err != nil { - return nil, err - } - } - return res, nil -} - -func (ec *executionContext) unmarshalODependencyInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐDependencyInput(ctx context.Context, v interface{}) (*model.DependencyInput, error) { - if v == nil { - return nil, nil - } - res, err := ec.unmarshalInputDependencyInput(ctx, v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOHTTPReq2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPReq(ctx context.Context, sel ast.SelectionSet, v *model.HTTPReq) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._HTTPReq(ctx, sel, v) -} - -func (ec *executionContext) unmarshalOHTTPReqInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPReqInput(ctx context.Context, v interface{}) (*model.HTTPReqInput, error) { - if v == nil { - return nil, nil - } - res, err := ec.unmarshalInputHTTPReqInput(ctx, v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) unmarshalOHTTPRespInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHTTPRespInput(ctx context.Context, v interface{}) (*model.HTTPRespInput, error) { - if v == nil { - return nil, nil - } - res, err := ec.unmarshalInputHTTPRespInput(ctx, v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOHeader2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx context.Context, sel ast.SelectionSet, v []*model.Header) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalOHeader2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - return ret -} - -func (ec *executionContext) marshalOHeader2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderαš„(ctx context.Context, sel ast.SelectionSet, v []*model.Header) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalNHeader2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalOHeader2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeader(ctx context.Context, sel ast.SelectionSet, v *model.Header) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._Header(ctx, sel, v) -} - -func (ec *executionContext) unmarshalOHeaderInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderInput(ctx context.Context, v interface{}) ([]*model.HeaderInput, error) { - if v == nil { - return nil, nil - } - var vSlice []interface{} - if v != nil { - if tmp1, ok := v.([]interface{}); ok { - vSlice = tmp1 - } else { - vSlice = []interface{}{v} - } - } - var err error - res := make([]*model.HeaderInput, len(vSlice)) - for i := range vSlice { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) - res[i], err = ec.unmarshalOHeaderInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderInput(ctx, vSlice[i]) - if err != nil { - return nil, err - } - } - return res, nil -} - -func (ec *executionContext) unmarshalOHeaderInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderInput(ctx context.Context, v interface{}) (*model.HeaderInput, error) { - if v == nil { - return nil, nil - } - res, err := ec.unmarshalInputHeaderInput(ctx, v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOHeaderResult2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderResult(ctx context.Context, sel ast.SelectionSet, v []*model.HeaderResult) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalOHeaderResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderResult(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - return ret -} - -func (ec *executionContext) marshalOHeaderResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐHeaderResult(ctx context.Context, sel ast.SelectionSet, v *model.HeaderResult) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._HeaderResult(ctx, sel, v) -} - -func (ec *executionContext) unmarshalOInt2αš–int(ctx context.Context, v interface{}) (*int, error) { - if v == nil { - return nil, nil - } - res, err := graphql.UnmarshalInt(v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOInt2αš–int(ctx context.Context, sel ast.SelectionSet, v *int) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return graphql.MarshalInt(*v) -} - -func (ec *executionContext) marshalOJSONError2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐJSONErrorαš„(ctx context.Context, sel ast.SelectionSet, v []*model.JSONError) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalNJSONError2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐJSONError(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) unmarshalOKVInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKVInput(ctx context.Context, v interface{}) ([]*model.KVInput, error) { - if v == nil { - return nil, nil - } - var vSlice []interface{} - if v != nil { - if tmp1, ok := v.([]interface{}); ok { - vSlice = tmp1 - } else { - vSlice = []interface{}{v} - } - } - var err error - res := make([]*model.KVInput, len(vSlice)) - for i := range vSlice { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) - res[i], err = ec.unmarshalOKVInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKVInput(ctx, vSlice[i]) - if err != nil { - return nil, err - } - } - return res, nil -} - -func (ec *executionContext) unmarshalOKVInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKVInput(ctx context.Context, v interface{}) (*model.KVInput, error) { - if v == nil { - return nil, nil - } - res, err := ec.unmarshalInputKVInput(ctx, v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOKv2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKv(ctx context.Context, sel ast.SelectionSet, v []*model.Kv) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalOKv2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKv(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - return ret -} - -func (ec *executionContext) marshalOKv2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKvαš„(ctx context.Context, sel ast.SelectionSet, v []*model.Kv) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalNKv2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKv(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalOKv2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐKv(ctx context.Context, sel ast.SelectionSet, v *model.Kv) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._Kv(ctx, sel, v) -} - -func (ec *executionContext) unmarshalOMethod2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐMethod(ctx context.Context, v interface{}) (*model.Method, error) { - if v == nil { - return nil, nil - } - var res = new(model.Method) - err := res.UnmarshalGQL(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOMethod2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐMethod(ctx context.Context, sel ast.SelectionSet, v *model.Method) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return v -} - -func (ec *executionContext) marshalOResult2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐResult(ctx context.Context, sel ast.SelectionSet, v *model.Result) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._Result(ctx, sel, v) -} - -func (ec *executionContext) unmarshalOString2string(ctx context.Context, v interface{}) (string, error) { - res, err := graphql.UnmarshalString(v) - return res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler { - return graphql.MarshalString(v) -} - -func (ec *executionContext) unmarshalOString2αš•stringαš„(ctx context.Context, v interface{}) ([]string, error) { - if v == nil { - return nil, nil - } - var vSlice []interface{} - if v != nil { - if tmp1, ok := v.([]interface{}); ok { - vSlice = tmp1 - } else { - vSlice = []interface{}{v} - } - } - var err error - res := make([]string, len(vSlice)) - for i := range vSlice { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) - res[i], err = ec.unmarshalNString2string(ctx, vSlice[i]) - if err != nil { - return nil, err - } - } - return res, nil -} - -func (ec *executionContext) marshalOString2αš•stringαš„(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - for i := range v { - ret[i] = ec.marshalNString2string(ctx, sel, v[i]) - } - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) unmarshalOString2αš–string(ctx context.Context, v interface{}) (*string, error) { - if v == nil { - return nil, nil - } - res, err := graphql.UnmarshalString(v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOString2αš–string(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return graphql.MarshalString(*v) -} - -func (ec *executionContext) marshalOTest2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTest(ctx context.Context, sel ast.SelectionSet, v []*model.Test) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalOTest2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTest(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - return ret -} - -func (ec *executionContext) marshalOTest2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTest(ctx context.Context, sel ast.SelectionSet, v *model.Test) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._Test(ctx, sel, v) -} - -func (ec *executionContext) marshalOTestCase2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCase(ctx context.Context, sel ast.SelectionSet, v []*model.TestCase) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalOTestCase2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCase(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - return ret -} - -func (ec *executionContext) marshalOTestCase2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCase(ctx context.Context, sel ast.SelectionSet, v *model.TestCase) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._TestCase(ctx, sel, v) -} - -func (ec *executionContext) unmarshalOTestCaseInput2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCaseInput(ctx context.Context, v interface{}) ([]*model.TestCaseInput, error) { - if v == nil { - return nil, nil - } - var vSlice []interface{} - if v != nil { - if tmp1, ok := v.([]interface{}); ok { - vSlice = tmp1 - } else { - vSlice = []interface{}{v} - } - } - var err error - res := make([]*model.TestCaseInput, len(vSlice)) - for i := range vSlice { - ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) - res[i], err = ec.unmarshalOTestCaseInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCaseInput(ctx, vSlice[i]) - if err != nil { - return nil, err - } - } - return res, nil -} - -func (ec *executionContext) unmarshalOTestCaseInput2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestCaseInput(ctx context.Context, v interface{}) (*model.TestCaseInput, error) { - if v == nil { - return nil, nil - } - res, err := ec.unmarshalInputTestCaseInput(ctx, v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOTestRun2αš•αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRun(ctx context.Context, sel ast.SelectionSet, v []*model.TestRun) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalOTestRun2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRun(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - return ret -} - -func (ec *executionContext) marshalOTestRun2αš–goαš—keployαš—ioαš‹serverαš‹graphαš‹modelᚐTestRun(ctx context.Context, sel ast.SelectionSet, v *model.TestRun) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec._TestRun(ctx, sel, v) -} - -func (ec *executionContext) unmarshalOTime2αš–timeᚐTime(ctx context.Context, v interface{}) (*time.Time, error) { - if v == nil { - return nil, nil - } - res, err := graphql.UnmarshalTime(v) - return &res, graphql.ErrorOnPath(ctx, err) -} - -func (ec *executionContext) marshalOTime2αš–timeᚐTime(ctx context.Context, sel ast.SelectionSet, v *time.Time) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return graphql.MarshalTime(*v) -} - -func (ec *executionContext) marshalO__EnumValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValueαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__EnumValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValue(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalO__Field2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐFieldαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__Field2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐField(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalO__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__InputValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValue(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalO__Schema2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec.___Schema(ctx, sel, v) -} - -func (ec *executionContext) marshalO__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler { - if v == nil { - return graphql.Null - } - ret := make(graphql.Array, len(v)) - var wg sync.WaitGroup - isLen1 := len(v) == 1 - if !isLen1 { - wg.Add(len(v)) - } - for i := range v { - i := i - fc := &graphql.FieldContext{ - Index: &i, - Result: &v[i], - } - ctx := graphql.WithFieldContext(ctx, fc) - f := func(i int) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = nil - } - }() - if !isLen1 { - defer wg.Done() - } - ret[i] = ec.marshalN__Type2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, sel, v[i]) - } - if isLen1 { - f(i) - } else { - go f(i) - } - - } - wg.Wait() - - for _, e := range ret { - if e == graphql.Null { - return graphql.Null - } - } - - return ret -} - -func (ec *executionContext) marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler { - if v == nil { - return graphql.Null - } - return ec.___Type(ctx, sel, v) -} - -// endregion ***************************** type.gotpl ***************************** diff --git a/graph/model/models_gen.go b/graph/model/models_gen.go deleted file mode 100644 index fab595b1c..000000000 --- a/graph/model/models_gen.go +++ /dev/null @@ -1,406 +0,0 @@ -// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. - -package model - -import ( - "fmt" - "io" - "strconv" - "time" -) - -type App struct { - ID string `json:"id"` -} - -type BodyResult struct { - Normal bool `json:"normal"` - Type BodyType `json:"type"` - Expected string `json:"expected"` - Actual string `json:"actual"` - Errors []*JSONError `json:"errors"` -} - -type DepMetaResult struct { - Normal *bool `json:"normal"` - Key *string `json:"key"` - Expected *string `json:"expected"` - Actual *string `json:"actual"` -} - -type DepResult struct { - Name string `json:"name"` - Type DependencyType `json:"type"` - Meta []*DepMetaResult `json:"meta"` -} - -type Dependency struct { - Name string `json:"name"` - Type DependencyType `json:"type"` - Meta []*Kv `json:"meta"` -} - -type DependencyInput struct { - Name string `json:"name"` - Type DependencyType `json:"type"` - Meta []*KVInput `json:"meta"` -} - -type HTTPReq struct { - ProtoMajor int `json:"protoMajor"` - ProtoMinor int `json:"protoMinor"` - URL *string `json:"url"` - URLParam []*Kv `json:"urlParam"` - Header []*Header `json:"header"` - Method Method `json:"method"` - Body string `json:"body"` -} - -type HTTPReqInput struct { - ProtoMajor *int `json:"protoMajor"` - ProtoMinor *int `json:"protoMinor"` - URL *string `json:"url"` - URLParam []*KVInput `json:"urlParam"` - Header []*HeaderInput `json:"header"` - Method *Method `json:"method"` - Body *string `json:"body"` -} - -type HTTPResp struct { - StatusCode int `json:"statusCode"` - Header []*Header `json:"header"` - Body string `json:"body"` -} - -type HTTPRespInput struct { - StatusCode *int `json:"statusCode"` - Header []*HeaderInput `json:"header"` - Body *string `json:"body"` -} - -type Header struct { - Key string `json:"key"` - Value []string `json:"value"` -} - -type HeaderInput struct { - Key string `json:"key"` - Value []string `json:"value"` -} - -type HeaderResult struct { - Normal *bool `json:"normal"` - Key string `json:"key"` - Expected *Header `json:"expected"` - Actual *Header `json:"actual"` -} - -type IntResult struct { - Normal *bool `json:"normal"` - Expected int `json:"expected"` - Actual int `json:"actual"` -} - -type JSONError struct { - Key string `json:"key"` - MissingInExpected bool `json:"missingInExpected"` - MissingInActual bool `json:"missingInActual"` -} - -type KVInput struct { - Key string `json:"key"` - Value string `json:"value"` -} - -type Kv struct { - Key string `json:"key"` - Value string `json:"value"` -} - -type Result struct { - StatusCode *IntResult `json:"statusCode"` - HeadersResult []*HeaderResult `json:"headersResult"` - BodyResult *BodyResult `json:"bodyResult"` - DepResult []*DepResult `json:"depResult"` -} - -type Test struct { - ID string `json:"id"` - Status TestStatus `json:"status"` - Started time.Time `json:"started"` - Completed *time.Time `json:"completed"` - Result *Result `json:"result"` - TestCaseID string `json:"testCaseID"` - URI *string `json:"uri"` - Req *HTTPReq `json:"req"` - Deps []*Dependency `json:"deps"` - Noise []string `json:"noise"` -} - -type TestCase struct { - ID string `json:"id"` - Created time.Time `json:"created"` - Updated time.Time `json:"updated"` - Captured time.Time `json:"captured"` - Cid string `json:"cid"` - App string `json:"app"` - URI string `json:"uri"` - HTTPReq *HTTPReq `json:"httpReq"` - HTTPResp *HTTPResp `json:"httpResp"` - Deps []*Dependency `json:"deps"` - Anchors []string `json:"anchors"` - Noise []string `json:"noise"` -} - -type TestCaseInput struct { - ID string `json:"id"` - Created *time.Time `json:"created"` - Updated *time.Time `json:"updated"` - Captured *time.Time `json:"captured"` - Cid *string `json:"cid"` - App *string `json:"app"` - URI *string `json:"uri"` - HTTPReq *HTTPReqInput `json:"httpReq"` - HTTPResp *HTTPRespInput `json:"httpResp"` - Deps []*DependencyInput `json:"deps"` - Anchors []string `json:"anchors"` - Noise []string `json:"noise"` -} - -type TestRun struct { - ID string `json:"id"` - Created time.Time `json:"created"` - Updated time.Time `json:"updated"` - Status TestRunStatus `json:"status"` - App string `json:"app"` - User string `json:"user"` - Success int `json:"success"` - Failure int `json:"failure"` - Total int `json:"total"` - Tests []*Test `json:"tests"` -} - -type BodyType string - -const ( - BodyTypePlain BodyType = "PLAIN" - BodyTypeJSON BodyType = "JSON" -) - -var AllBodyType = []BodyType{ - BodyTypePlain, - BodyTypeJSON, -} - -func (e BodyType) IsValid() bool { - switch e { - case BodyTypePlain, BodyTypeJSON: - return true - } - return false -} - -func (e BodyType) String() string { - return string(e) -} - -func (e *BodyType) UnmarshalGQL(v interface{}) error { - str, ok := v.(string) - if !ok { - return fmt.Errorf("enums must be strings") - } - - *e = BodyType(str) - if !e.IsValid() { - return fmt.Errorf("%s is not a valid BodyType", str) - } - return nil -} - -func (e BodyType) MarshalGQL(w io.Writer) { - fmt.Fprint(w, strconv.Quote(e.String())) -} - -type DependencyType string - -const ( - DependencyTypeNoSQLDb DependencyType = "NO_SQL_DB" - DependencyTypeSQLDb DependencyType = "SQL_DB" - DependencyTypeHTTPClient DependencyType = "HTTP_CLIENT" -) - -var AllDependencyType = []DependencyType{ - DependencyTypeNoSQLDb, - DependencyTypeSQLDb, - DependencyTypeHTTPClient, -} - -func (e DependencyType) IsValid() bool { - switch e { - case DependencyTypeNoSQLDb, DependencyTypeSQLDb, DependencyTypeHTTPClient: - return true - } - return false -} - -func (e DependencyType) String() string { - return string(e) -} - -func (e *DependencyType) UnmarshalGQL(v interface{}) error { - str, ok := v.(string) - if !ok { - return fmt.Errorf("enums must be strings") - } - - *e = DependencyType(str) - if !e.IsValid() { - return fmt.Errorf("%s is not a valid DependencyType", str) - } - return nil -} - -func (e DependencyType) MarshalGQL(w io.Writer) { - fmt.Fprint(w, strconv.Quote(e.String())) -} - -type Method string - -const ( - MethodGet Method = "GET" - MethodPut Method = "PUT" - MethodHead Method = "HEAD" - MethodPost Method = "POST" - MethodPatch Method = "PATCH" - MethodDelete Method = "DELETE" - MethodOptions Method = "OPTIONS" - MethodTrace Method = "TRACE" -) - -var AllMethod = []Method{ - MethodGet, - MethodPut, - MethodHead, - MethodPost, - MethodPatch, - MethodDelete, - MethodOptions, - MethodTrace, -} - -func (e Method) IsValid() bool { - switch e { - case MethodGet, MethodPut, MethodHead, MethodPost, MethodPatch, MethodDelete, MethodOptions, MethodTrace: - return true - } - return false -} - -func (e Method) String() string { - return string(e) -} - -func (e *Method) UnmarshalGQL(v interface{}) error { - str, ok := v.(string) - if !ok { - return fmt.Errorf("enums must be strings") - } - - *e = Method(str) - if !e.IsValid() { - return fmt.Errorf("%s is not a valid Method", str) - } - return nil -} - -func (e Method) MarshalGQL(w io.Writer) { - fmt.Fprint(w, strconv.Quote(e.String())) -} - -type TestRunStatus string - -const ( - TestRunStatusRunning TestRunStatus = "RUNNING" - TestRunStatusFailed TestRunStatus = "FAILED" - TestRunStatusPassed TestRunStatus = "PASSED" -) - -var AllTestRunStatus = []TestRunStatus{ - TestRunStatusRunning, - TestRunStatusFailed, - TestRunStatusPassed, -} - -func (e TestRunStatus) IsValid() bool { - switch e { - case TestRunStatusRunning, TestRunStatusFailed, TestRunStatusPassed: - return true - } - return false -} - -func (e TestRunStatus) String() string { - return string(e) -} - -func (e *TestRunStatus) UnmarshalGQL(v interface{}) error { - str, ok := v.(string) - if !ok { - return fmt.Errorf("enums must be strings") - } - - *e = TestRunStatus(str) - if !e.IsValid() { - return fmt.Errorf("%s is not a valid TestRunStatus", str) - } - return nil -} - -func (e TestRunStatus) MarshalGQL(w io.Writer) { - fmt.Fprint(w, strconv.Quote(e.String())) -} - -type TestStatus string - -const ( - TestStatusPending TestStatus = "PENDING" - TestStatusRunning TestStatus = "RUNNING" - TestStatusFailed TestStatus = "FAILED" - TestStatusPassed TestStatus = "PASSED" -) - -var AllTestStatus = []TestStatus{ - TestStatusPending, - TestStatusRunning, - TestStatusFailed, - TestStatusPassed, -} - -func (e TestStatus) IsValid() bool { - switch e { - case TestStatusPending, TestStatusRunning, TestStatusFailed, TestStatusPassed: - return true - } - return false -} - -func (e TestStatus) String() string { - return string(e) -} - -func (e *TestStatus) UnmarshalGQL(v interface{}) error { - str, ok := v.(string) - if !ok { - return fmt.Errorf("enums must be strings") - } - - *e = TestStatus(str) - if !e.IsValid() { - return fmt.Errorf("%s is not a valid TestStatus", str) - } - return nil -} - -func (e TestStatus) MarshalGQL(w io.Writer) { - fmt.Fprint(w, strconv.Quote(e.String())) -} diff --git a/graph/resolver.go b/graph/resolver.go deleted file mode 100644 index f78f2dce0..000000000 --- a/graph/resolver.go +++ /dev/null @@ -1,29 +0,0 @@ -package graph - -//go:generate go run github.com/99designs/gqlgen - -import ( - "go.keploy.io/server/pkg/service/regression" - // "go.keploy.io/server/pkg/service/run" - "go.keploy.io/server/pkg/service/testCase" - "go.uber.org/zap" -) - -// This file will not be regenerated automatically. -// -// It serves as dependency injection for your app, add any dependencies you require here. -func NewResolver(logger *zap.Logger, reg regression.Service, tcSvc testCase.Service) *Resolver { - return &Resolver{ - logger: logger, - // user: user, - tcSvc: tcSvc, - reg: reg, - } -} - -type Resolver struct { - logger *zap.Logger - // user user.Service - reg regression.Service - tcSvc testCase.Service -} diff --git a/graph/schema.graphqls b/graph/schema.graphqls deleted file mode 100644 index 77b3353b5..000000000 --- a/graph/schema.graphqls +++ /dev/null @@ -1,226 +0,0 @@ -extend type Mutation { - updateTestCase(tc: [TestCaseInput]): Boolean! - deleteTestCase(id: String!): Boolean! - # normalizeTests accepts array of test IDs (part of a test run) and updates the respective testcases - # with the responses from the test results - normalizeTests(ids: [String!]!): Boolean! -} - -input TestCaseInput { - id: String! - created: Time - updated: Time - captured: Time - cid: String - app: String - uri: String - httpReq: HTTPReqInput - httpResp: HTTPRespInput - deps: [DependencyInput] - anchors: [String!] - noise: [String!] -} - -input HTTPReqInput { - protoMajor: Int - protoMinor: Int - url: String - urlParam: [KVInput] - header: [HeaderInput] - method: Method - body: String -} - -input HTTPRespInput { - statusCode: Int - header: [HeaderInput] - body: String -} - -input HeaderInput { - key: String! - value: [String!] -} - -input DependencyInput { - name: String! - type: DependencyType! - meta: [KVInput] -} - -input KVInput { - key: String! - value: String! -} - -type App { - id: String! -} - - -type TestRun { - id: String! - created: Time! - updated: Time! - status: TestRunStatus! - app: String! - user: String! - success: Int! - failure: Int! - total: Int! - tests: [Test] -} - -enum TestRunStatus { - RUNNING - FAILED - PASSED -} - -enum TestStatus { - PENDING - RUNNING - FAILED - PASSED -} - -type Test { - id: String! - status: TestStatus! - started: Time! - completed: Time - result: Result - testCaseID: String! - uri: String - req: HTTPReq - deps: [Dependency!] - noise: [String!] -} - -type Header { - key: String! - value: [String!] -} - -enum Method { - GET - PUT - HEAD - POST - PATCH - DELETE - OPTIONS - TRACE -} - -type HTTPReq { - protoMajor: Int! - protoMinor: Int! - url: String - urlParam: [Kv] - header: [Header] - method: Method! - body: String! -} - -type Result { - statusCode: IntResult! - headersResult: [HeaderResult] - bodyResult: BodyResult! - depResult: [DepResult!] -} - -type DepResult { - name: String! - type: DependencyType! - meta: [DepMetaResult!] -} - -type DepMetaResult { - normal: Boolean - key: String - expected: String - actual: String -} - -type IntResult { - normal: Boolean - expected: Int! - actual: Int! -} - -type HeaderResult { - normal: Boolean - key: String! - expected: Header! - actual: Header! -} - -type BodyResult { - normal: Boolean! - type: BodyType! - expected: String! - actual: String! - errors: [JSONError!] -} - -type JSONError { - key: String! - missingInExpected: Boolean! - missingInActual: Boolean! -} - -enum BodyType { - PLAIN - JSON -} - -type Kv { - key: String! - value: String! -} - -type TestCase { - id: String! - created: Time! - updated: Time! - captured: Time! - cid: String! - app: String! - uri: String! - httpReq: HTTPReq! - httpResp: HTTPResp! - deps: [Dependency!] - anchors: [String!] - noise: [String!] -} - -type HTTPResp { - statusCode: Int! - header: [Header!] - body: String! -} - -type Dependency { - name: String! - type: DependencyType! - meta: [Kv!] -} - -enum DependencyType { - NO_SQL_DB - SQL_DB - HTTP_CLIENT -} - -extend type Query { - apps: [App!] - testRun(user: String, app: String, id: String, from: Time, To: Time,offset: Int, limit: Int): [TestRun] - testCase(app: String, id: String,offset: Int, limit: Int): [TestCase] -} - -type Subscription { - TestRun(app: String, id: String): [TestRun] -} - -scalar Time diff --git a/graph/schema.resolvers.go b/graph/schema.resolvers.go deleted file mode 100644 index 61eae3908..000000000 --- a/graph/schema.resolvers.go +++ /dev/null @@ -1,176 +0,0 @@ -package graph - -// This file will be automatically regenerated based on the schema, any resolver implementations -// will be copied through when generating and any unknown code will be moved to the end. - -import ( - "context" - "fmt" - "strings" - "time" - - "go.keploy.io/server/graph/generated" - "go.keploy.io/server/graph/model" - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" -) - -func (r *mutationResolver) UpdateTestCase(ctx context.Context, tc []*model.TestCaseInput) (bool, error) { - var tcs []models.TestCase - for _, t := range tc { - tcs = append(tcs, ConvertTestCaseInput(t)) - } - err := r.tcSvc.Update(ctx, tcs) - if err != nil { - return false, err - } - return true, nil -} - -func (r *mutationResolver) DeleteTestCase(ctx context.Context, id string) (bool, error) { - err := r.tcSvc.Delete(ctx, DEFAULT_COMPANY, id) - if err != nil { - return false, err - } - return true, nil -} - -func (r *mutationResolver) NormalizeTests(ctx context.Context, ids []string) (bool, error) { - var errStrings []string - for _, id := range ids { - err := r.reg.Normalize(ctx, DEFAULT_COMPANY, id) - if err != nil { - errStrings = append(errStrings, id+": "+err.Error()) - } - } - if len(errStrings) != 0 { - return false, fmt.Errorf(strings.Join(errStrings, "\n")) - } - return true, nil -} - -func (r *queryResolver) Apps(ctx context.Context) ([]*model.App, error) { - apps, err := r.tcSvc.GetApps(ctx, DEFAULT_COMPANY) - if err != nil { - return nil, err - } - var res []*model.App - for _, v := range apps { - res = append(res, &model.App{ID: v}) - } - - return res, nil -} - -func (r *queryResolver) TestRun(ctx context.Context, user *string, app *string, id *string, from *time.Time, to *time.Time, offset *int, limit *int) ([]*model.TestRun, error) { - preloads := GetPreloads(ctx) - summary := true - if pkg.Contains(preloads, "tests") { - summary = false - } - - usr := DEFAULT_USER - - runs, err := r.reg.GetTestRun(ctx, summary, DEFAULT_COMPANY, &usr, app, id, from, to, offset, limit) - if err != nil { - return nil, err - } - - var res []*model.TestRun - for _, run := range runs { - var tests []*model.Test - if run.Tests != nil { - for _, t := range run.Tests { - uri := t.URI - completed := time.Unix(t.Completed, 0).UTC() - tests = append(tests, &model.Test{ - ID: t.ID, - Status: ConvertTestStatus(t.Status), - Started: time.Unix(t.Started, 0).UTC(), - Completed: &completed, - TestCaseID: t.TestCaseID, - URI: &uri, - Req: ConvertHttpReq(t.Req), - Noise: t.Noise, - Deps: ConvertDeps(t.Dep), - Result: ConvertResult(t.Result), - }) - } - } - - ts := &model.TestRun{ - ID: run.ID, - Status: ConvertTestRunStatus(run.Status), - Created: time.Unix(run.Created, 0).UTC(), - Updated: time.Unix(run.Updated, 0).UTC(), - App: run.App, - User: run.User, - Success: run.Success, - Failure: run.Failure, - Total: run.Total, - Tests: tests, - } - //if run.Updated != nil { - // ts.Updated = time.Unix(*run.Updated, 0) - //} - //if run.Created != nil { - // ts.Created = time.Unix(*run.Created, 0) - //} - //if run.App != nil { - // ts.App = *run.App - //} - //if run.User != nil { - // ts.User = *run.User - //} - //if run.Success != nil { - // ts.Success = *run.Success - //} - //if run.Failure != nil { - // ts.Failure = *run.Failure - //} - //if run.Total != nil { - // ts.Total = *run.Total - //} - - res = append(res, ts) - - } - - return res, nil -} - -func (r *queryResolver) TestCase(ctx context.Context, app *string, id *string, offset *int, limit *int) ([]*model.TestCase, error) { - a := "" - if app != nil { - a = *app - } - - if id != nil { - tc, err := r.tcSvc.Get(ctx, DEFAULT_COMPANY, a, *id) - if err != nil { - return nil, err - } - return []*model.TestCase{ConvertTestCase(tc)}, nil - } - - // Currently, ui graphQl query for mongoDB stored testcases. - // Empty tcsType returns testcases of all types. - tcs, err := r.tcSvc.GetAll(ctx, DEFAULT_COMPANY, a, offset, limit, "", "", "") - if err != nil { - return nil, err - } - var res []*model.TestCase - for _, v := range tcs { - res = append(res, ConvertTestCase(v)) - } - return res, nil -} - -func (r *subscriptionResolver) TestRun(ctx context.Context, app *string, id *string) (<-chan []*model.TestRun, error) { - panic(fmt.Errorf("not implemented")) -} - -// Subscription returns generated.SubscriptionResolver implementation. -func (r *Resolver) Subscription() generated.SubscriptionResolver { return &subscriptionResolver{r} } - -type subscriptionResolver struct{ *Resolver } diff --git a/graph/tools.go b/graph/tools.go deleted file mode 100644 index 1be5dfdb2..000000000 --- a/graph/tools.go +++ /dev/null @@ -1,6 +0,0 @@ -//go:build keploy_codegen_tools -// +build keploy_codegen_tools - -package graph - -import _ "github.com/99designs/gqlgen" diff --git a/graph/utils.go b/graph/utils.go deleted file mode 100644 index 1294a409c..000000000 --- a/graph/utils.go +++ /dev/null @@ -1,314 +0,0 @@ -package graph - -import ( - "context" - "net/http" - "time" - - "github.com/99designs/gqlgen/graphql" - "go.keploy.io/server/graph/model" - "go.keploy.io/server/pkg/models" -) - -const DEFAULT_COMPANY = "default_company" -const DEFAULT_USER = "default_user" - -func ConvertTestRunStatus(s models.TestRunStatus) model.TestRunStatus { - switch s { - case models.TestRunStatusFailed: - return model.TestRunStatusFailed - case models.TestRunStatusRunning: - return model.TestRunStatusRunning - default: - return model.TestRunStatusPassed - } -} - -func ConvertTestStatus(s models.TestStatus) model.TestStatus { - switch s { - case models.TestStatusFailed: - return model.TestStatusFailed - case models.TestStatusPassed: - return model.TestStatusPassed - case models.TestStatusPending: - return model.TestStatusPending - default: - return model.TestStatusRunning - } -} - -func ConvertMethod(m models.Method) model.Method { - switch m { - case models.MethodGet: - return model.MethodGet - case models.MethodPost: - return model.MethodPost - case models.MethodPut: - return model.MethodPut - case models.MethodDelete: - return model.MethodDelete - case models.MethodHead: - return model.MethodHead - case models.MethodOptions: - return model.MethodOptions - case models.MethodTrace: - return model.MethodTrace - default: - return model.MethodPatch - } -} - -func ConvertMapToKV(m map[string]string) []*model.Kv { - var kv []*model.Kv - for k, v := range m { - kv = append(kv, &model.Kv{ - Key: k, - Value: v, - }) - } - return kv -} - -func ConvertHttpReq(r models.HttpReq) *model.HTTPReq { - params := ConvertMapToKV(r.URLParams) - var header []*model.Header - for k, v := range r.Header { - header = append(header, &model.Header{ - Key: k, - Value: v, - }) - } - - return &model.HTTPReq{ - ProtoMajor: r.ProtoMajor, - ProtoMinor: r.ProtoMinor, - URLParam: params, - Header: header, - Method: ConvertMethod(r.Method), - Body: r.Body, - URL: &r.URL, - } -} - -func ConvertIntResult(i models.IntResult) *model.IntResult { - return &model.IntResult{ - Normal: &i.Normal, - Expected: i.Expected, - Actual: i.Actual, - } -} - -func ConvertHeader(h models.Header) *model.Header { - return &model.Header{ - Key: h.Key, - Value: h.Value, - } -} - -func ConvertHeaderResult(h models.HeaderResult) *model.HeaderResult { - return &model.HeaderResult{ - Normal: &h.Normal, - Expected: ConvertHeader(h.Expected), - Actual: ConvertHeader(h.Actual), - } -} - -func ConvertBodyType(b models.BodyType) model.BodyType { - switch b { - case models.BodyTypeJSON: - return model.BodyTypeJSON - default: - return model.BodyTypePlain - } -} - -func ConvertResult(r models.Result) *model.Result { - var headers []*model.HeaderResult - for _, h := range r.HeadersResult { - headers = append(headers, ConvertHeaderResult(h)) - } - // TODO: change type of model.Result.BodyResult from *model.BodyResult to []*model.BodyResult - var bodyResult *model.BodyResult - if len(r.BodyResult) > 0 { - bodyResult = &model.BodyResult{ - Normal: r.BodyResult[0].Normal, - Type: ConvertBodyType(r.BodyResult[0].Type), - Expected: r.BodyResult[0].Expected, - Actual: r.BodyResult[0].Actual, - } - } - return &model.Result{ - StatusCode: ConvertIntResult(r.StatusCode), - HeadersResult: headers, - BodyResult: bodyResult, - DepResult: nil, - } -} - -func ConvertHeaderInput(h []*model.HeaderInput) http.Header { - headers := http.Header{} - for _, v := range h { - headers[v.Key] = v.Value - } - return headers -} - -func ConvertTestCaseInput(input *model.TestCaseInput) models.TestCase { - tc := models.TestCase{ - ID: input.ID, - //Anchors: anchors, - Noise: input.Noise, - } - if input.Created != nil { - tc.Created = input.Created.Unix() - } - if input.Updated != nil { - tc.Updated = input.Updated.Unix() - } - if input.Captured != nil { - tc.Captured = input.Captured.Unix() - } - if input.Cid != nil { - tc.CID = *input.Cid - } - if input.App != nil { - tc.AppID = *input.App - } - - if input.URI != nil { - tc.URI = *input.URI - } - - if input.HTTPReq != nil { - params := map[string]string{} - for _, v := range input.HTTPReq.URLParam { - params[v.Key] = v.Value - } - req := models.HttpReq{ - URLParams: params, - Header: ConvertHeaderInput(input.HTTPReq.Header), - } - if input.HTTPReq.Method != nil { - req.Method = models.Method(*input.HTTPReq.Method) - } - - if input.HTTPReq.ProtoMajor != nil { - req.ProtoMajor = *input.HTTPReq.ProtoMajor - } - - if input.HTTPReq.ProtoMinor != nil { - req.ProtoMinor = *input.HTTPReq.ProtoMinor - } - - if input.HTTPReq.Body != nil { - req.Body = *input.HTTPReq.Body - } - if input.HTTPReq.URL != nil { - req.URL = *input.HTTPReq.URL - } - tc.HttpReq = req - } - if input.HTTPResp != nil { - resp := models.HttpResp{ - Header: ConvertHeaderInput(input.HTTPResp.Header), - } - if input.HTTPResp.StatusCode != nil { - resp.StatusCode = *input.HTTPResp.StatusCode - } - - if input.HTTPResp.Body != nil { - resp.Body = *input.HTTPResp.Body - } - tc.HttpResp = resp - } - - if input.Deps != nil { - var deps []models.Dependency - for _, v := range input.Deps { - meta := map[string]string{} - for _, m := range v.Meta { - if m != nil { - meta[m.Key] = m.Value - } - } - deps = append(deps, models.Dependency{ - Name: v.Name, - Type: models.DependencyType(v.Type), - Meta: meta, - }) - } - tc.Deps = deps - } - - return tc -} - -func ConvertDeps(deps []models.Dependency) []*model.Dependency { - var res []*model.Dependency - for _, d := range deps { - res = append(res, &model.Dependency{ - Name: d.Name, - Type: model.DependencyType(d.Type), - Meta: ConvertMapToKV(d.Meta), - }) - } - return res -} - -func ConvertTestCase(t models.TestCase) *model.TestCase { - var h []*model.Header - for k, v := range t.HttpResp.Header { - h = append(h, &model.Header{ - Key: k, - Value: v, - }) - } - - var anchors []string - for k := range t.Anchors { - anchors = append(anchors, k) - } - - return &model.TestCase{ - ID: t.ID, - Created: time.Unix(t.Created, 0).UTC(), - Updated: time.Unix(t.Updated, 0).UTC(), - Captured: time.Unix(t.Captured, 0).UTC(), - Cid: t.CID, - App: t.AppID, - URI: t.URI, - HTTPReq: ConvertHttpReq(t.HttpReq), - HTTPResp: &model.HTTPResp{ - StatusCode: t.HttpResp.StatusCode, - Header: h, - Body: t.HttpResp.Body, - }, - Deps: ConvertDeps(t.Deps), - Anchors: anchors, - Noise: t.Noise, - } -} - -func GetPreloads(ctx context.Context) []string { - return GetNestedPreloads( - graphql.GetOperationContext(ctx), - graphql.CollectFieldsCtx(ctx, nil), - "", - ) -} - -func GetNestedPreloads(ctx *graphql.OperationContext, fields []graphql.CollectedField, prefix string) (preloads []string) { - for _, column := range fields { - prefixColumn := GetPreloadString(prefix, column.Name) - preloads = append(preloads, prefixColumn) - preloads = append(preloads, GetNestedPreloads(ctx, graphql.CollectFields(ctx, column.Selections, nil), prefixColumn)...) - } - return -} - -func GetPreloadString(prefix, name string) string { - if len(prefix) > 0 { - return prefix + "." + name - } - return name -} diff --git a/grpc/grpcserver/server.go b/grpc/grpcserver/server.go deleted file mode 100644 index 1357c35b3..000000000 --- a/grpc/grpcserver/server.go +++ /dev/null @@ -1,428 +0,0 @@ -package grpcserver - -import ( - "context" - "errors" - "net" - "net/http" - "strconv" - "strings" - "time" - - "github.com/google/uuid" - "github.com/keploy/go-sdk/integrations/kgrpcserver" - "github.com/keploy/go-sdk/keploy" - "go.keploy.io/server/graph" - grpcMock "go.keploy.io/server/grpc/mock" - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/grpc/utils" - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" - historyConfig "go.keploy.io/server/pkg/platform/fs" - "go.keploy.io/server/pkg/platform/telemetry" - "go.keploy.io/server/pkg/service/mock" - regression2 "go.keploy.io/server/pkg/service/regression" - tcSvc "go.keploy.io/server/pkg/service/testCase" - "go.uber.org/zap" - "google.golang.org/grpc" - "google.golang.org/grpc/reflection" -) - -type Server struct { - logger *zap.Logger - testExport bool - testReportPath string - svc regression2.Service - tcSvc tcSvc.Service - mock mock.Service - hs *historyConfig.HistCfg - tele telemetry.Service - client http.Client - proto.UnimplementedRegressionServiceServer -} - -func New(k *keploy.Keploy, logger *zap.Logger, svc regression2.Service, m mock.Service, tc tcSvc.Service, hs *historyConfig.HistCfg, listener net.Listener, testExport bool, testReportPath string, telemetry telemetry.Service, cl http.Client) error { - - // create an instance for grpc server - srv := grpc.NewServer(kgrpcserver.UnaryInterceptor(k)) - proto.RegisterRegressionServiceServer(srv, &Server{ - logger: logger, - svc: svc, - mock: m, - testExport: testExport, - testReportPath: testReportPath, - tcSvc: tc, - tele: telemetry, - client: cl, - }) - reflection.Register(srv) - err := srv.Serve(listener) - return err - -} - -func (srv *Server) StartMocking(ctx context.Context, request *proto.StartMockReq) (*proto.StartMockResp, error) { - if request.Mode == "test" { - return &proto.StartMockResp{ - Exists: false, - }, nil - } - exists, err := srv.mock.FileExists(ctx, request.Path, request.OverWrite) - return &proto.StartMockResp{ - Exists: exists, - }, err -} - -func (srv *Server) PutMock(ctx context.Context, request *proto.PutMockReq) (*proto.PutMockResp, error) { - err := srv.mock.Put(ctx, request.Path, request.Mock, request.Mock.Spec.Metadata, request.Remove, request.Replace) - if err != nil { - return nil, err - } - srv.tele.RecordedMock(ctx, request.Mock.Kind) - return &proto.PutMockResp{Inserted: 1}, nil -} - -func (srv *Server) GetMocks(ctx context.Context, request *proto.GetMockReq) (*proto.GetMockResp, error) { - // reads the mocks from yaml file - mocks, err := srv.mock.GetAll(ctx, request.Path, request.Name) - if err != nil { - return &proto.GetMockResp{}, err - } - res, err := grpcMock.Decode(mocks) - if err != nil { - srv.logger.Error(err.Error()) - return &proto.GetMockResp{}, err - } - response := &proto.GetMockResp{ - Mocks: res, - } - return response, nil -} - -func (srv *Server) End(ctx context.Context, request *proto.EndRequest) (*proto.EndResponse, error) { - stat := models.TestRunStatusFailed - id := request.Id - if request.Status == "true" { - stat = models.TestRunStatusPassed - } - now := time.Now().Unix() - - err := srv.svc.PutTest(ctx, models.TestRun{ - ID: id, - Updated: now, - Status: stat, - }, srv.testExport, id, "", "", srv.testReportPath, 0) - if err != nil { - return &proto.EndResponse{Message: err.Error()}, nil - } - return &proto.EndResponse{Message: "OK"}, nil -} - -func (srv *Server) Start(ctx context.Context, request *proto.StartRequest) (*proto.StartResponse, error) { - t := request.Total - total, err := strconv.Atoi(t) - if err != nil { - return nil, err - } - app := request.App - if app == "" { - return nil, errors.New("app is required in request") - } - id := uuid.New().String() - now := time.Now().Unix() - - err = srv.svc.PutTest(ctx, models.TestRun{ - ID: id, - Created: now, - Updated: now, - Status: models.TestRunStatusRunning, - CID: graph.DEFAULT_COMPANY, - App: app, - User: graph.DEFAULT_USER, - Total: total, - }, srv.testExport, id, request.TestCasePath, request.MockPath, srv.testReportPath, total) - if err != nil { - return nil, err - } - - err = srv.hs.CaptureTestsEvent(request.TestCasePath, request.MockPath, request.AppPath, srv.testReportPath, id) - if err != nil { - srv.logger.Error("failed to capture test run event", zap.Error(err)) - } - return &proto.StartResponse{Id: id}, nil -} - -func getProtoMap(m map[string][]string) map[string]*proto.StrArr { - res := map[string]*proto.StrArr{} - for k, v := range m { - arr := &proto.StrArr{} - arr.Value = append(arr.Value, v...) - res[k] = arr - } - return res -} -func getProtoTC(tcs models.TestCase) (*proto.TestCase, error) { - reqHeader := getProtoMap(map[string][]string(tcs.HttpReq.Header)) - respHeader := getProtoMap(map[string][]string(tcs.HttpResp.Header)) - deps := []*proto.Dependency{} - allKeys := getProtoMap(map[string][]string(tcs.AllKeys)) - anchors := getProtoMap(map[string][]string(tcs.Anchors)) - for _, j := range tcs.Deps { - data := []*proto.DataBytes{} - for _, k := range j.Data { - data = append(data, &proto.DataBytes{ - Bin: k, - }) - } - deps = append(deps, &proto.Dependency{ - Name: j.Name, - Type: string(j.Type), - Meta: j.Meta, - Data: data, - }) - } - ptcs := &proto.TestCase{ - Id: tcs.ID, - Created: tcs.Created, - Updated: tcs.Updated, - Captured: tcs.Captured, - CID: tcs.CID, - AppID: tcs.AppID, - URI: tcs.URI, - HttpReq: &proto.HttpReq{ - Method: string(tcs.HttpReq.Method), - ProtoMajor: int64(tcs.HttpReq.ProtoMajor), - ProtoMinor: int64(tcs.HttpReq.ProtoMinor), - URL: tcs.HttpReq.URL, - URLParams: tcs.HttpReq.URLParams, - Header: reqHeader, - Body: tcs.HttpReq.Body, - Form: grpcMock.GetProtoFormData(tcs.HttpReq.Form), - }, - HttpResp: &proto.HttpResp{ - StatusCode: int64(tcs.HttpResp.StatusCode), - Header: respHeader, - Body: tcs.HttpResp.Body, - StatusMessage: tcs.HttpResp.StatusMessage, - ProtoMajor: int64(tcs.HttpResp.ProtoMajor), - ProtoMinor: int64(tcs.HttpResp.ProtoMinor), - Binary: tcs.HttpResp.Binary, - }, - Deps: deps, - Mocks: tcs.Mocks, - AllKeys: allKeys, - Anchors: anchors, - Noise: tcs.Noise, - } - return ptcs, nil -} - -func (srv *Server) GetTC(ctx context.Context, request *proto.GetTCRequest) (*proto.TestCase, error) { - id := request.Id - app := request.App - // print(tcs) - tcs, err := srv.tcSvc.Get(ctx, graph.DEFAULT_COMPANY, app, id) - if err != nil { - return nil, err - } - ptcs, err := getProtoTC(tcs) - if err != nil { - return nil, err - } - return ptcs, nil -} - -func (srv *Server) GetTCS(ctx context.Context, request *proto.GetTCSRequest) (*proto.GetTCSResponse, error) { - app := request.App - if app == "" { - return nil, errors.New("app is required in request") - } - offsetStr := request.Offset - limitStr := request.Limit - var ( - offset int - limit int - err error - tcs []models.TestCase - eof bool = srv.testExport - ) - if offsetStr != "" { - offset, err = strconv.Atoi(offsetStr) - if err != nil { - srv.logger.Error("request for fetching testcases in converting offset to integer") - } - } - if limitStr != "" { - limit, err = strconv.Atoi(limitStr) - if err != nil { - srv.logger.Error("request for fetching testcases in converting limit to integer") - } - } - - // fetches all testcases for the user application. - tcs, err = srv.tcSvc.GetAll(ctx, graph.DEFAULT_COMPANY, app, &offset, &limit, request.TestCasePath, request.MockPath, "") - if err != nil { - return nil, err - } - var ptcs []*proto.TestCase - for i := 0; i < len(tcs); i++ { - ptc, err := getProtoTC(tcs[i]) - if err != nil { - return nil, err - } - ptcs = append(ptcs, ptc) - } - return &proto.GetTCSResponse{Tcs: ptcs, Eof: eof}, nil -} - -func (srv *Server) PostTC(ctx context.Context, request *proto.TestCaseReq) (*proto.PostTCResponse, error) { - // find noisy fields - m, err := pkg.FlattenHttpResponse(utils.GetHttpHeader(request.HttpResp.Header), request.HttpResp.Body) - if err != nil { - msg := "error in flattening http response" - srv.logger.Error(msg, zap.Error(err)) - return nil, errors.New(msg) - } - noise := pkg.FindNoisyFields(m, func(k string, vals []string) bool { - // check if k is date - for _, v := range vals { - if pkg.IsTime(v) { - return true - } - } - - // maybe we need to concatenate the values - return pkg.IsTime(strings.Join(vals, ", ")) - }) - - deps := []models.Dependency{} - for _, j := range request.Dependency { - data := [][]byte{} - for _, k := range j.Data { - data = append(data, k.Bin) - } - deps = append(deps, models.Dependency{ - Name: j.Name, - Type: models.DependencyType(j.Type), - Meta: j.Meta, - Data: data, - }) - } - now := time.Now().UTC().Unix() - tc := models.TestCase{ - ID: uuid.New().String(), - Created: now, - Updated: now, - Captured: request.Captured, - URI: request.URI, - AppID: request.AppID, - HttpReq: models.HttpReq{ - Method: models.Method(request.HttpReq.Method), - ProtoMajor: int(request.HttpReq.ProtoMajor), - ProtoMinor: int(request.HttpReq.ProtoMinor), - URL: request.HttpReq.URL, - URLParams: request.HttpReq.URLParams, - Body: request.HttpReq.Body, - Header: utils.GetHttpHeader(request.HttpReq.Header), - Form: grpcMock.GetMockFormData(request.HttpReq.Form), - }, - HttpResp: models.HttpResp{ - StatusCode: int(request.HttpResp.StatusCode), - Body: request.HttpResp.Body, - Header: utils.GetHttpHeader(request.HttpResp.Header), - StatusMessage: request.HttpResp.StatusMessage, - ProtoMajor: int(request.HttpResp.ProtoMajor), - ProtoMinor: int(request.HttpResp.ProtoMinor), - Binary: request.HttpResp.Binary, - }, - Deps: deps, - Noise: noise, - Mocks: request.Mocks, - Type: request.Type, - } - - if request.GrpcReq != nil { - tc.GrpcReq = models.GrpcReq{ - Body: request.GrpcReq.Body, - Method: request.GrpcReq.Method, - } - } - if request.GrpcResp != nil { - tc.GrpcResp = models.GrpcResp{ - Body: request.GrpcResp.Body, - Err: request.GrpcResp.Err, - } - } - inserted, err := srv.tcSvc.Insert(ctx, []models.TestCase{tc}, request.TestCasePath, request.MockPath, graph.DEFAULT_COMPANY, request.Remove, request.Replace) - - err = srv.hs.CapturedRecordEvents(request.TestCasePath, request.MockPath, request.AppPath) - if err != nil { - return nil, err - } - if err != nil { - srv.logger.Error("error putting testcase", zap.Error(err)) - return nil, err - } - if len(inserted) == 0 { - srv.logger.Error("unknown failure while inserting testcase") - return nil, err - } - return &proto.PostTCResponse{ - TcsId: map[string]string{"id": inserted[0]}, - }, nil -} - -func (srv *Server) DeNoise(ctx context.Context, request *proto.TestReq) (*proto.DeNoiseResponse, error) { - - var body string - // Http is the default type of testcase - if request.Type == "" { - request.Type = string(models.HTTP) - } - switch request.Type { - case string(models.HTTP): - body = request.Resp.Body - case string(models.GRPC_EXPORT): - body = request.GrpcResp.Body - } - err := srv.svc.DeNoise(ctx, graph.DEFAULT_COMPANY, request.ID, request.AppID, body, utils.GetStringMap(request.Resp.Header), request.TestCasePath, request.Type) - if err != nil { - return &proto.DeNoiseResponse{Message: err.Error()}, nil - } - return &proto.DeNoiseResponse{Message: "OK"}, nil -} - -func (srv *Server) Test(ctx context.Context, request *proto.TestReq) (*proto.TestResponse, error) { - - var ( - pass bool - err error - ) - // default value for tcsType is Http - if request.Type == "" { - request.Type = string(models.HTTP) - } - switch request.Type { - case string(models.HTTP): - pass, err = srv.svc.Test(ctx, graph.DEFAULT_COMPANY, request.AppID, request.RunID, request.ID, request.TestCasePath, request.MockPath, models.HttpResp{ - StatusCode: int(request.Resp.StatusCode), - Header: utils.GetStringMap(request.Resp.Header), - Body: request.Resp.Body, - StatusMessage: request.Resp.StatusMessage, - ProtoMajor: int(request.Resp.ProtoMajor), - ProtoMinor: int(request.Resp.ProtoMinor), - }) - case string(models.GRPC_EXPORT): - pass, err = srv.svc.TestGrpc(ctx, models.GrpcResp{ - Body: request.GrpcResp.Body, - Err: request.GrpcResp.Err, - }, graph.DEFAULT_COMPANY, request.AppID, request.RunID, request.ID, request.TestCasePath, request.MockPath) - } - - if err != nil { - return nil, err - } - return &proto.TestResponse{ - Pass: map[string]bool{"pass": pass}, - }, nil -} diff --git a/grpc/mock/mock.go b/grpc/mock/mock.go deleted file mode 100644 index 6c8e2e10c..000000000 --- a/grpc/mock/mock.go +++ /dev/null @@ -1,407 +0,0 @@ -package mock - -import ( - "bytes" - "compress/gzip" - "encoding/base64" - "fmt" - "io/ioutil" - "net/http" - "strings" - "unicode/utf8" - - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/grpc/utils" - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" -) - -func Encode(doc *proto.Mock) (models.Mock, error) { - res := models.Mock{ - Version: models.Version(doc.Version), - Kind: models.Kind(doc.Kind), - Name: doc.Name, - } - switch doc.Kind { - case string(models.HTTP): - spec := models.HttpSpec{ - Metadata: doc.Spec.Metadata, - Request: models.MockHttpReq{ - Method: models.Method(doc.Spec.Req.Method), - ProtoMajor: int(doc.Spec.Req.ProtoMajor), - ProtoMinor: int(doc.Spec.Req.ProtoMinor), - URL: doc.Spec.Req.URL, - Header: ToMockHeader(utils.GetHttpHeader(doc.Spec.Req.Header)), - Body: string(doc.Spec.Req.Body), - BodyType: string(models.BodyTypeUtf8), - Form: GetMockFormData(doc.Spec.Req.Form), - }, - Response: models.MockHttpResp{ - StatusCode: int(doc.Spec.Res.StatusCode), - Header: ToMockHeader(utils.GetHttpHeader(doc.Spec.Res.Header)), - Body: string(doc.Spec.Res.Body), - BodyType: string(models.BodyTypeUtf8), - StatusMessage: doc.Spec.Res.StatusMessage, - ProtoMajor: int(doc.Spec.Res.ProtoMajor), - ProtoMinor: int(doc.Spec.Res.ProtoMinor), - Binary: doc.Spec.Res.Binary, - }, - Objects: ToModelObjects(doc.Spec.Objects), - Mocks: doc.Spec.Mocks, - Assertions: utils.GetHttpHeader(doc.Spec.Assertions), - Created: doc.Spec.Created, - } - if doc.Spec.Req.BodyData != nil { - if !utf8.ValidString(string(doc.Spec.Req.BodyData)) { - spec.Request.BodyType = string(models.BodyTypeBinary) - spec.Request.Body = base64.StdEncoding.EncodeToString(doc.Spec.Req.BodyData) - } else { - spec.Request.Body = string(doc.Spec.Req.BodyData) - } - } - if doc.Spec.Res.BodyData != nil { - if !utf8.ValidString(string(doc.Spec.Res.BodyData)) { - spec.Response.BodyType = string(models.BodyTypeBinary) - spec.Response.Body = base64.StdEncoding.EncodeToString(doc.Spec.Res.BodyData) - } else { - spec.Response.Body = string(doc.Spec.Res.BodyData) - } - } - - err := res.Spec.Encode(&spec) - if err != nil { - return res, fmt.Errorf("failed to encode http spec for mock with name: %s. error: %s", doc.Name, err.Error()) - } - - case string(models.SQL): - spec := models.SQlSpec{ - Type: models.SqlOutputType(doc.Spec.Type), - Metadata: doc.Spec.Metadata, - Int: int(doc.Spec.Int), - Err: doc.Spec.Err, - } - if doc.Spec.Table != nil { - spec.Table = models.Table{ - Cols: ToModelCols(doc.Spec.Table.Cols), - Rows: doc.Spec.Table.Rows, - } - } - err := res.Spec.Encode(&spec) - if err != nil { - return res, fmt.Errorf("failed to encode sql spec for mock with name: %s. error: %s", doc.Name, err.Error()) - } - - case string(models.GENERIC): - err := res.Spec.Encode(&models.GenericSpec{ - Metadata: doc.Spec.Metadata, - Objects: ToModelObjects(doc.Spec.Objects), - }) - if err != nil { - return res, fmt.Errorf("failed to encode generic spec for mock with name: %s. error: %s", doc.Name, err.Error()) - } - case string(models.GRPC_EXPORT): - spec := models.GrpcSpec{ - Metadata: doc.Spec.Metadata, - Request: models.GrpcReq{ - Body: doc.Spec.GrpcRequest.Body, - Method: doc.Spec.GrpcRequest.Method, - }, - // Request: models.MockHttpReq{ - // Method: models.Method(doc.Spec.Req.Method), - // ProtoMajor: int(doc.Spec.Req.ProtoMajor), - // ProtoMinor: int(doc.Spec.Req.ProtoMinor), - // URL: doc.Spec.Req.URL, - // Header: ToMockHeader(utils.GetHttpHeader(doc.Spec.Req.Header)), - // Body: doc.Spec.Req.Body, - // }, - // Response: models.MockHttpResp{ - // StatusCode: int(doc.Spec.Res.StatusCode), - // Header: ToMockHeader(utils.GetHttpHeader(doc.Spec.Res.Header)), - // Body: doc.Spec.Res.Body, - // StatusMessage: doc.Spec.Res.StatusMessage, - // ProtoMajor: int(doc.Spec.Res.ProtoMajor), - // ProtoMinor: int(doc.Spec.Res.ProtoMinor), - // }, - Response: models.GrpcResp{ - Body: doc.Spec.GrpcResp.Body, - Err: doc.Spec.GrpcResp.Err, - }, - Objects: ToModelObjects(doc.Spec.Objects), - Mocks: doc.Spec.Mocks, - Assertions: utils.GetHttpHeader(doc.Spec.Assertions), - Created: doc.Spec.Created, - } - for _, j := range doc.Spec.Objects { - spec.Objects = append(spec.Objects, models.Object{Type: j.Type, Data: string(j.Data)}) - } - err := res.Spec.Encode(&spec) - if err != nil { - return res, fmt.Errorf("failed to encode http spec for mock with name: %s. error: %s", doc.Name, err.Error()) - } - default: - return res, fmt.Errorf("mock with name %s is not of a valid kind", doc.Name) - } - return res, nil -} - -func ToModelCols(cols []*proto.SqlCol) []models.SqlCol { - res := []models.SqlCol{} - for _, j := range cols { - res = append(res, models.SqlCol{ - Name: j.Name, - Type: j.Type, - Precision: int(j.Precision), - Scale: int(j.Scale), - }) - } - return res -} - -func toProtoCols(cols []models.SqlCol) ([]*proto.SqlCol, error) { - if len(cols) == 0 { - return nil, nil - } - res := []*proto.SqlCol{} - for _, j := range cols { - - res = append(res, &proto.SqlCol{ - Name: j.Name, - Type: j.Type, - Precision: int64(j.Precision), - Scale: int64(j.Scale), - }) - } - return res, nil -} -func ToModelObjects(objs []*proto.Mock_Object) []models.Object { - res := []models.Object{} - for _, j := range objs { - var b bytes.Buffer - gz := gzip.NewWriter(&b) - if _, err := gz.Write(j.Data); err != nil { - return nil - } - gz.Close() - data := base64.StdEncoding.EncodeToString(b.Bytes()) - res = append(res, models.Object{ - Type: j.Type, - Data: data, - }) - } - return res -} - -func toProtoObjects(objs []models.Object) ([]*proto.Mock_Object, error) { - res := []*proto.Mock_Object{} - for _, j := range objs { - data := []byte{} - bin, err := base64.StdEncoding.DecodeString(j.Data) - if err != nil { - return nil, err - } - r := bytes.NewReader(bin) - if r.Len() > 0 { - gzr, err := gzip.NewReader(r) - if err != nil { - return nil, err - } - data, err = ioutil.ReadAll(gzr) - if err != nil { - return nil, err - } - } - res = append(res, &proto.Mock_Object{ - Type: j.Type, - Data: data, - }) - } - return res, nil -} - -func Decode(doc []models.Mock) ([]*proto.Mock, error) { - res := []*proto.Mock{} - for _, j := range doc { - mock := &proto.Mock{ - Version: string(j.Version), - Name: j.Name, - Kind: string(j.Kind), - } - switch j.Kind { - case models.HTTP: - spec := &models.HttpSpec{} - err := j.Spec.Decode(spec) - if err != nil { - return res, fmt.Errorf("failed to decode the http spec of mock with name: %s. error: %s", j.Name, err.Error()) - } - obj, err := toProtoObjects(spec.Objects) - if err != nil { - return res, err - } - mock.Spec = &proto.Mock_SpecSchema{ - Metadata: spec.Metadata, - Type: string(models.HTTP), - Req: &proto.HttpReq{ - Method: string(spec.Request.Method), - ProtoMajor: int64(spec.Request.ProtoMajor), - ProtoMinor: int64(spec.Request.ProtoMinor), - URL: spec.Request.URL, - Header: utils.GetProtoMap(ToHttpHeader(spec.Request.Header)), - Body: spec.Request.Body, - Form: GetProtoFormData(spec.Request.Form), - BodyData: nil, - }, - Objects: obj, - Res: &proto.HttpResp{ - StatusCode: int64(spec.Response.StatusCode), - Header: utils.GetProtoMap(ToHttpHeader(spec.Response.Header)), - Body: spec.Response.Body, - StatusMessage: spec.Response.StatusMessage, - ProtoMajor: int64(spec.Response.ProtoMajor), - ProtoMinor: int64(spec.Request.ProtoMinor), - Binary: spec.Response.Binary, - BodyData: nil, - }, - Mocks: spec.Mocks, - Assertions: utils.GetProtoMap(spec.Assertions), - Created: spec.Created, - } - if spec.Request.BodyType == string(models.BodyTypeBinary) { - bin, err := base64.StdEncoding.DecodeString(spec.Request.Body) - if err != nil { - return nil, err - } - mock.Spec.Req.BodyData = bin - mock.Spec.Req.Body = "" - } - if spec.Response.BodyType == string(models.BodyTypeBinary) { - bin, err := base64.StdEncoding.DecodeString(spec.Response.Body) - if err != nil { - return nil, err - } - mock.Spec.Res.BodyData = bin - mock.Spec.Res.Body = "" - } - case models.SQL: - spec := &models.SQlSpec{} - err := j.Spec.Decode(spec) - if err != nil { - return res, fmt.Errorf("failed to decode the sql spec of mock with name: %s. error: %s", j.Name, err.Error()) - } - cols, err := toProtoCols(spec.Table.Cols) - if err != nil { - return res, err - } - mock.Spec = &proto.Mock_SpecSchema{ - Type: string(spec.Type), - Metadata: spec.Metadata, - Int: int64(spec.Int), - Err: spec.Err, - } - if cols != nil { - mock.Spec.Table = &proto.Table{ - Cols: cols, - Rows: spec.Table.Rows, - } - } - if spec.Err == nil { - fmt.Println("\n\n\n nilnil", spec.Err, mock.Spec.Err) - } - - case models.GENERIC: - spec := &models.GenericSpec{} - err := j.Spec.Decode(spec) - if err != nil { - return res, fmt.Errorf("failed to decode the generic spec of mock with name: %s. error: %s", j.Name, err.Error()) - } - obj, err := toProtoObjects(spec.Objects) - if err != nil { - return res, err - } - mock.Spec = &proto.Mock_SpecSchema{ - Metadata: spec.Metadata, - Objects: obj, - } - case models.GRPC_EXPORT: - spec := &models.GrpcSpec{} - err := j.Spec.Decode(spec) - if err != nil { - return res, fmt.Errorf("failed to decode the generic spec of mock with name: %s. error: %s", j.Name, err.Error()) - } - mock.Spec = &proto.Mock_SpecSchema{ - Metadata: spec.Metadata, - GrpcRequest: &proto.GrpcReq{ - Body: spec.Request.Body, - Method: spec.Request.Method, - }, - GrpcResp: &proto.GrpcResp{ - Body: spec.Response.Body, - Err: spec.Response.Err, - }, - Type: string(models.GRPC_EXPORT), - Objects: []*proto.Mock_Object{}, - Mocks: spec.Mocks, - Assertions: utils.GetProtoMap(spec.Assertions), - Created: spec.Created, - } - for _, j := range spec.Objects { - mock.Spec.Objects = append(mock.Spec.Objects, &proto.Mock_Object{ - Type: j.Type, - Data: []byte(j.Data), - }) - } - default: - return res, fmt.Errorf("mock with name %s is not of a valid kind", j.Name) - } - res = append(res, mock) - } - return res, nil -} - -func ToHttpHeader(mockHeader map[string]string) http.Header { - header := http.Header{} - for i, j := range mockHeader { - match := pkg.IsTime(j) - if match { - //Values like "Tue, 17 Jan 2023 16:34:58 IST" should be considered as single element - header[i] = []string{j} - continue - } - header[i] = strings.Split(j, ",") - } - return header -} - -func ToMockHeader(httpHeader http.Header) map[string]string { - header := map[string]string{} - for i, j := range httpHeader { - header[i] = strings.Join(j, ",") - } - return header -} - -func GetMockFormData(formData []*proto.FormData) []models.FormData { - mockFormDataList := []models.FormData{} - - for _, j := range formData { - mockFormDataList = append(mockFormDataList, models.FormData{ - Key: j.Key, - Values: j.Values, - Paths: j.Paths, - }) - } - return mockFormDataList -} - -func GetProtoFormData(formData []models.FormData) []*proto.FormData { - - protoFormDataList := []*proto.FormData{} - - for _, j := range formData { - protoFormDataList = append(protoFormDataList, &proto.FormData{ - Key: j.Key, - Values: j.Values, - Paths: j.Paths, - }) - } - return protoFormDataList -} \ No newline at end of file diff --git a/grpc/regression/services.pb.go b/grpc/regression/services.pb.go deleted file mode 100644 index 2c4a2a596..000000000 --- a/grpc/regression/services.pb.go +++ /dev/null @@ -1,3422 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc v3.21.12 -// source: grpc/regression/services.proto - -package regression - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Dependency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` - Type string `protobuf:"bytes,2,opt,name=Type,proto3" json:"Type,omitempty"` - Meta map[string]string `protobuf:"bytes,3,rep,name=Meta,proto3" json:"Meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Data []*DataBytes `protobuf:"bytes,4,rep,name=Data,proto3" json:"Data,omitempty"` -} - -func (x *Dependency) Reset() { - *x = Dependency{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Dependency) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Dependency) ProtoMessage() {} - -func (x *Dependency) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Dependency.ProtoReflect.Descriptor instead. -func (*Dependency) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{0} -} - -func (x *Dependency) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Dependency) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *Dependency) GetMeta() map[string]string { - if x != nil { - return x.Meta - } - return nil -} - -func (x *Dependency) GetData() []*DataBytes { - if x != nil { - return x.Data - } - return nil -} - -type DataBytes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Bin []byte `protobuf:"bytes,1,opt,name=Bin,proto3" json:"Bin,omitempty"` -} - -func (x *DataBytes) Reset() { - *x = DataBytes{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataBytes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataBytes) ProtoMessage() {} - -func (x *DataBytes) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataBytes.ProtoReflect.Descriptor instead. -func (*DataBytes) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{1} -} - -func (x *DataBytes) GetBin() []byte { - if x != nil { - return x.Bin - } - return nil -} - -type TestCaseReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Captured int64 `protobuf:"varint,1,opt,name=Captured,proto3" json:"Captured,omitempty"` - AppID string `protobuf:"bytes,2,opt,name=AppID,proto3" json:"AppID,omitempty"` - URI string `protobuf:"bytes,3,opt,name=URI,proto3" json:"URI,omitempty"` - HttpReq *HttpReq `protobuf:"bytes,4,opt,name=HttpReq,proto3" json:"HttpReq,omitempty"` - HttpResp *HttpResp `protobuf:"bytes,5,opt,name=HttpResp,proto3" json:"HttpResp,omitempty"` - Dependency []*Dependency `protobuf:"bytes,6,rep,name=Dependency,proto3" json:"Dependency,omitempty"` - TestCasePath string `protobuf:"bytes,7,opt,name=TestCasePath,proto3" json:"TestCasePath,omitempty"` - MockPath string `protobuf:"bytes,8,opt,name=MockPath,proto3" json:"MockPath,omitempty"` - Mocks []*Mock `protobuf:"bytes,9,rep,name=Mocks,proto3" json:"Mocks,omitempty"` - Remove []string `protobuf:"bytes,10,rep,name=Remove,proto3" json:"Remove,omitempty"` - Replace map[string]string `protobuf:"bytes,11,rep,name=Replace,proto3" json:"Replace,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Type string `protobuf:"bytes,12,opt,name=Type,proto3" json:"Type,omitempty"` - GrpcReq *GrpcReq `protobuf:"bytes,13,opt,name=GrpcReq,proto3" json:"GrpcReq,omitempty"` - GrpcResp *GrpcResp `protobuf:"bytes,14,opt,name=GrpcResp,proto3" json:"GrpcResp,omitempty"` - AppPath string `protobuf:"bytes,15,opt,name=AppPath,proto3" json:"AppPath,omitempty"` -} - -func (x *TestCaseReq) Reset() { - *x = TestCaseReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TestCaseReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TestCaseReq) ProtoMessage() {} - -func (x *TestCaseReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TestCaseReq.ProtoReflect.Descriptor instead. -func (*TestCaseReq) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{2} -} - -func (x *TestCaseReq) GetCaptured() int64 { - if x != nil { - return x.Captured - } - return 0 -} - -func (x *TestCaseReq) GetAppID() string { - if x != nil { - return x.AppID - } - return "" -} - -func (x *TestCaseReq) GetURI() string { - if x != nil { - return x.URI - } - return "" -} - -func (x *TestCaseReq) GetHttpReq() *HttpReq { - if x != nil { - return x.HttpReq - } - return nil -} - -func (x *TestCaseReq) GetHttpResp() *HttpResp { - if x != nil { - return x.HttpResp - } - return nil -} - -func (x *TestCaseReq) GetDependency() []*Dependency { - if x != nil { - return x.Dependency - } - return nil -} - -func (x *TestCaseReq) GetTestCasePath() string { - if x != nil { - return x.TestCasePath - } - return "" -} - -func (x *TestCaseReq) GetMockPath() string { - if x != nil { - return x.MockPath - } - return "" -} - -func (x *TestCaseReq) GetMocks() []*Mock { - if x != nil { - return x.Mocks - } - return nil -} - -func (x *TestCaseReq) GetRemove() []string { - if x != nil { - return x.Remove - } - return nil -} - -func (x *TestCaseReq) GetReplace() map[string]string { - if x != nil { - return x.Replace - } - return nil -} - -func (x *TestCaseReq) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *TestCaseReq) GetGrpcReq() *GrpcReq { - if x != nil { - return x.GrpcReq - } - return nil -} - -func (x *TestCaseReq) GetGrpcResp() *GrpcResp { - if x != nil { - return x.GrpcResp - } - return nil -} - -func (x *TestCaseReq) GetAppPath() string { - if x != nil { - return x.AppPath - } - return "" -} - -type TestReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` - AppID string `protobuf:"bytes,2,opt,name=AppID,proto3" json:"AppID,omitempty"` - RunID string `protobuf:"bytes,3,opt,name=RunID,proto3" json:"RunID,omitempty"` - Resp *HttpResp `protobuf:"bytes,4,opt,name=Resp,proto3" json:"Resp,omitempty"` - TestCasePath string `protobuf:"bytes,5,opt,name=TestCasePath,proto3" json:"TestCasePath,omitempty"` - MockPath string `protobuf:"bytes,6,opt,name=MockPath,proto3" json:"MockPath,omitempty"` - Type string `protobuf:"bytes,7,opt,name=Type,proto3" json:"Type,omitempty"` - GrpcResp *GrpcResp `protobuf:"bytes,8,opt,name=GrpcResp,proto3" json:"GrpcResp,omitempty"` -} - -func (x *TestReq) Reset() { - *x = TestReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TestReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TestReq) ProtoMessage() {} - -func (x *TestReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TestReq.ProtoReflect.Descriptor instead. -func (*TestReq) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{3} -} - -func (x *TestReq) GetID() string { - if x != nil { - return x.ID - } - return "" -} - -func (x *TestReq) GetAppID() string { - if x != nil { - return x.AppID - } - return "" -} - -func (x *TestReq) GetRunID() string { - if x != nil { - return x.RunID - } - return "" -} - -func (x *TestReq) GetResp() *HttpResp { - if x != nil { - return x.Resp - } - return nil -} - -func (x *TestReq) GetTestCasePath() string { - if x != nil { - return x.TestCasePath - } - return "" -} - -func (x *TestReq) GetMockPath() string { - if x != nil { - return x.MockPath - } - return "" -} - -func (x *TestReq) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *TestReq) GetGrpcResp() *GrpcResp { - if x != nil { - return x.GrpcResp - } - return nil -} - -type TestCase struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Created int64 `protobuf:"varint,2,opt,name=created,proto3" json:"created,omitempty"` - Updated int64 `protobuf:"varint,3,opt,name=updated,proto3" json:"updated,omitempty"` - Captured int64 `protobuf:"varint,4,opt,name=captured,proto3" json:"captured,omitempty"` - CID string `protobuf:"bytes,5,opt,name=CID,proto3" json:"CID,omitempty"` - AppID string `protobuf:"bytes,6,opt,name=appID,proto3" json:"appID,omitempty"` - URI string `protobuf:"bytes,7,opt,name=URI,proto3" json:"URI,omitempty"` - HttpReq *HttpReq `protobuf:"bytes,8,opt,name=HttpReq,proto3" json:"HttpReq,omitempty"` - HttpResp *HttpResp `protobuf:"bytes,9,opt,name=HttpResp,proto3" json:"HttpResp,omitempty"` - Deps []*Dependency `protobuf:"bytes,10,rep,name=Deps,proto3" json:"Deps,omitempty"` - AllKeys map[string]*StrArr `protobuf:"bytes,11,rep,name=allKeys,proto3" json:"allKeys,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Anchors map[string]*StrArr `protobuf:"bytes,12,rep,name=anchors,proto3" json:"anchors,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Noise []string `protobuf:"bytes,13,rep,name=noise,proto3" json:"noise,omitempty"` - Mocks []*Mock `protobuf:"bytes,14,rep,name=Mocks,proto3" json:"Mocks,omitempty"` - GrpcReq *GrpcReq `protobuf:"bytes,15,opt,name=GrpcReq,proto3" json:"GrpcReq,omitempty"` - GrpcResp *GrpcResp `protobuf:"bytes,16,opt,name=GrpcResp,proto3" json:"GrpcResp,omitempty"` - Type string `protobuf:"bytes,17,opt,name=Type,proto3" json:"Type,omitempty"` -} - -func (x *TestCase) Reset() { - *x = TestCase{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TestCase) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TestCase) ProtoMessage() {} - -func (x *TestCase) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TestCase.ProtoReflect.Descriptor instead. -func (*TestCase) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{4} -} - -func (x *TestCase) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *TestCase) GetCreated() int64 { - if x != nil { - return x.Created - } - return 0 -} - -func (x *TestCase) GetUpdated() int64 { - if x != nil { - return x.Updated - } - return 0 -} - -func (x *TestCase) GetCaptured() int64 { - if x != nil { - return x.Captured - } - return 0 -} - -func (x *TestCase) GetCID() string { - if x != nil { - return x.CID - } - return "" -} - -func (x *TestCase) GetAppID() string { - if x != nil { - return x.AppID - } - return "" -} - -func (x *TestCase) GetURI() string { - if x != nil { - return x.URI - } - return "" -} - -func (x *TestCase) GetHttpReq() *HttpReq { - if x != nil { - return x.HttpReq - } - return nil -} - -func (x *TestCase) GetHttpResp() *HttpResp { - if x != nil { - return x.HttpResp - } - return nil -} - -func (x *TestCase) GetDeps() []*Dependency { - if x != nil { - return x.Deps - } - return nil -} - -func (x *TestCase) GetAllKeys() map[string]*StrArr { - if x != nil { - return x.AllKeys - } - return nil -} - -func (x *TestCase) GetAnchors() map[string]*StrArr { - if x != nil { - return x.Anchors - } - return nil -} - -func (x *TestCase) GetNoise() []string { - if x != nil { - return x.Noise - } - return nil -} - -func (x *TestCase) GetMocks() []*Mock { - if x != nil { - return x.Mocks - } - return nil -} - -func (x *TestCase) GetGrpcReq() *GrpcReq { - if x != nil { - return x.GrpcReq - } - return nil -} - -func (x *TestCase) GetGrpcResp() *GrpcResp { - if x != nil { - return x.GrpcResp - } - return nil -} - -func (x *TestCase) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -type Method struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Method string `protobuf:"bytes,1,opt,name=Method,proto3" json:"Method,omitempty"` -} - -func (x *Method) Reset() { - *x = Method{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Method) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Method) ProtoMessage() {} - -func (x *Method) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Method.ProtoReflect.Descriptor instead. -func (*Method) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{5} -} - -func (x *Method) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -type HttpReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Method string `protobuf:"bytes,1,opt,name=Method,proto3" json:"Method,omitempty"` - ProtoMajor int64 `protobuf:"varint,2,opt,name=ProtoMajor,proto3" json:"ProtoMajor,omitempty"` - ProtoMinor int64 `protobuf:"varint,3,opt,name=ProtoMinor,proto3" json:"ProtoMinor,omitempty"` - URL string `protobuf:"bytes,4,opt,name=URL,proto3" json:"URL,omitempty"` - URLParams map[string]string `protobuf:"bytes,5,rep,name=URLParams,proto3" json:"URLParams,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Header map[string]*StrArr `protobuf:"bytes,6,rep,name=Header,proto3" json:"Header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Deprecated: Do not use. - Body string `protobuf:"bytes,7,opt,name=Body,proto3" json:"Body,omitempty"` - BodyData []byte `protobuf:"bytes,10,opt,name=BodyData,proto3" json:"BodyData,omitempty"` - Binary string `protobuf:"bytes,8,opt,name=Binary,proto3" json:"Binary,omitempty"` - Form []*FormData `protobuf:"bytes,9,rep,name=Form,proto3" json:"Form,omitempty"` -} - -func (x *HttpReq) Reset() { - *x = HttpReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HttpReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HttpReq) ProtoMessage() {} - -func (x *HttpReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HttpReq.ProtoReflect.Descriptor instead. -func (*HttpReq) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{6} -} - -func (x *HttpReq) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -func (x *HttpReq) GetProtoMajor() int64 { - if x != nil { - return x.ProtoMajor - } - return 0 -} - -func (x *HttpReq) GetProtoMinor() int64 { - if x != nil { - return x.ProtoMinor - } - return 0 -} - -func (x *HttpReq) GetURL() string { - if x != nil { - return x.URL - } - return "" -} - -func (x *HttpReq) GetURLParams() map[string]string { - if x != nil { - return x.URLParams - } - return nil -} - -func (x *HttpReq) GetHeader() map[string]*StrArr { - if x != nil { - return x.Header - } - return nil -} - -// Deprecated: Do not use. -func (x *HttpReq) GetBody() string { - if x != nil { - return x.Body - } - return "" -} - -func (x *HttpReq) GetBodyData() []byte { - if x != nil { - return x.BodyData - } - return nil -} - -func (x *HttpReq) GetBinary() string { - if x != nil { - return x.Binary - } - return "" -} - -func (x *HttpReq) GetForm() []*FormData { - if x != nil { - return x.Form - } - return nil -} - -//for multipart request -type FormData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=Key,proto3" json:"Key,omitempty"` //partName - Values []string `protobuf:"bytes,2,rep,name=Values,proto3" json:"Values,omitempty"` - Paths []string `protobuf:"bytes,3,rep,name=Paths,proto3" json:"Paths,omitempty"` -} - -func (x *FormData) Reset() { - *x = FormData{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FormData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FormData) ProtoMessage() {} - -func (x *FormData) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FormData.ProtoReflect.Descriptor instead. -func (*FormData) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{7} -} - -func (x *FormData) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *FormData) GetValues() []string { - if x != nil { - return x.Values - } - return nil -} - -func (x *FormData) GetPaths() []string { - if x != nil { - return x.Paths - } - return nil -} - -type StrArr struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value []string `protobuf:"bytes,1,rep,name=Value,proto3" json:"Value,omitempty"` -} - -func (x *StrArr) Reset() { - *x = StrArr{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StrArr) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StrArr) ProtoMessage() {} - -func (x *StrArr) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StrArr.ProtoReflect.Descriptor instead. -func (*StrArr) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{8} -} - -func (x *StrArr) GetValue() []string { - if x != nil { - return x.Value - } - return nil -} - -type HttpResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StatusCode int64 `protobuf:"varint,1,opt,name=StatusCode,proto3" json:"StatusCode,omitempty"` - Header map[string]*StrArr `protobuf:"bytes,2,rep,name=Header,proto3" json:"Header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Deprecated: Do not use. - Body string `protobuf:"bytes,3,opt,name=Body,proto3" json:"Body,omitempty"` - BodyData []byte `protobuf:"bytes,8,opt,name=BodyData,proto3" json:"BodyData,omitempty"` - StatusMessage string `protobuf:"bytes,4,opt,name=StatusMessage,proto3" json:"StatusMessage,omitempty"` - ProtoMajor int64 `protobuf:"varint,5,opt,name=ProtoMajor,proto3" json:"ProtoMajor,omitempty"` - ProtoMinor int64 `protobuf:"varint,6,opt,name=ProtoMinor,proto3" json:"ProtoMinor,omitempty"` - Binary string `protobuf:"bytes,7,opt,name=Binary,proto3" json:"Binary,omitempty"` -} - -func (x *HttpResp) Reset() { - *x = HttpResp{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HttpResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HttpResp) ProtoMessage() {} - -func (x *HttpResp) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HttpResp.ProtoReflect.Descriptor instead. -func (*HttpResp) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{9} -} - -func (x *HttpResp) GetStatusCode() int64 { - if x != nil { - return x.StatusCode - } - return 0 -} - -func (x *HttpResp) GetHeader() map[string]*StrArr { - if x != nil { - return x.Header - } - return nil -} - -// Deprecated: Do not use. -func (x *HttpResp) GetBody() string { - if x != nil { - return x.Body - } - return "" -} - -func (x *HttpResp) GetBodyData() []byte { - if x != nil { - return x.BodyData - } - return nil -} - -func (x *HttpResp) GetStatusMessage() string { - if x != nil { - return x.StatusMessage - } - return "" -} - -func (x *HttpResp) GetProtoMajor() int64 { - if x != nil { - return x.ProtoMajor - } - return 0 -} - -func (x *HttpResp) GetProtoMinor() int64 { - if x != nil { - return x.ProtoMinor - } - return 0 -} - -func (x *HttpResp) GetBinary() string { - if x != nil { - return x.Binary - } - return "" -} - -type EndRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *EndRequest) Reset() { - *x = EndRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EndRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EndRequest) ProtoMessage() {} - -func (x *EndRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EndRequest.ProtoReflect.Descriptor instead. -func (*EndRequest) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{10} -} - -func (x *EndRequest) GetStatus() string { - if x != nil { - return x.Status - } - return "" -} - -func (x *EndRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type EndResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *EndResponse) Reset() { - *x = EndResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EndResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EndResponse) ProtoMessage() {} - -func (x *EndResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EndResponse.ProtoReflect.Descriptor instead. -func (*EndResponse) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{11} -} - -func (x *EndResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type StartRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Total string `protobuf:"bytes,1,opt,name=total,proto3" json:"total,omitempty"` - App string `protobuf:"bytes,2,opt,name=app,proto3" json:"app,omitempty"` - TestCasePath string `protobuf:"bytes,3,opt,name=TestCasePath,proto3" json:"TestCasePath,omitempty"` - MockPath string `protobuf:"bytes,4,opt,name=MockPath,proto3" json:"MockPath,omitempty"` - AppPath string `protobuf:"bytes,5,opt,name=AppPath,proto3" json:"AppPath,omitempty"` -} - -func (x *StartRequest) Reset() { - *x = StartRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartRequest) ProtoMessage() {} - -func (x *StartRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartRequest.ProtoReflect.Descriptor instead. -func (*StartRequest) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{12} -} - -func (x *StartRequest) GetTotal() string { - if x != nil { - return x.Total - } - return "" -} - -func (x *StartRequest) GetApp() string { - if x != nil { - return x.App - } - return "" -} - -func (x *StartRequest) GetTestCasePath() string { - if x != nil { - return x.TestCasePath - } - return "" -} - -func (x *StartRequest) GetMockPath() string { - if x != nil { - return x.MockPath - } - return "" -} - -func (x *StartRequest) GetAppPath() string { - if x != nil { - return x.AppPath - } - return "" -} - -type StartResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *StartResponse) Reset() { - *x = StartResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartResponse) ProtoMessage() {} - -func (x *StartResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartResponse.ProtoReflect.Descriptor instead. -func (*StartResponse) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{13} -} - -func (x *StartResponse) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GetTCRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - App string `protobuf:"bytes,2,opt,name=app,proto3" json:"app,omitempty"` -} - -func (x *GetTCRequest) Reset() { - *x = GetTCRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetTCRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTCRequest) ProtoMessage() {} - -func (x *GetTCRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTCRequest.ProtoReflect.Descriptor instead. -func (*GetTCRequest) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{14} -} - -func (x *GetTCRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GetTCRequest) GetApp() string { - if x != nil { - return x.App - } - return "" -} - -type GetTCSRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - App string `protobuf:"bytes,1,opt,name=app,proto3" json:"app,omitempty"` - Offset string `protobuf:"bytes,2,opt,name=offset,proto3" json:"offset,omitempty"` - Limit string `protobuf:"bytes,3,opt,name=limit,proto3" json:"limit,omitempty"` - TestCasePath string `protobuf:"bytes,4,opt,name=TestCasePath,proto3" json:"TestCasePath,omitempty"` - MockPath string `protobuf:"bytes,5,opt,name=MockPath,proto3" json:"MockPath,omitempty"` -} - -func (x *GetTCSRequest) Reset() { - *x = GetTCSRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetTCSRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTCSRequest) ProtoMessage() {} - -func (x *GetTCSRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTCSRequest.ProtoReflect.Descriptor instead. -func (*GetTCSRequest) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{15} -} - -func (x *GetTCSRequest) GetApp() string { - if x != nil { - return x.App - } - return "" -} - -func (x *GetTCSRequest) GetOffset() string { - if x != nil { - return x.Offset - } - return "" -} - -func (x *GetTCSRequest) GetLimit() string { - if x != nil { - return x.Limit - } - return "" -} - -func (x *GetTCSRequest) GetTestCasePath() string { - if x != nil { - return x.TestCasePath - } - return "" -} - -func (x *GetTCSRequest) GetMockPath() string { - if x != nil { - return x.MockPath - } - return "" -} - -type GetTCSResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Tcs []*TestCase `protobuf:"bytes,1,rep,name=tcs,proto3" json:"tcs,omitempty"` - Eof bool `protobuf:"varint,2,opt,name=eof,proto3" json:"eof,omitempty"` -} - -func (x *GetTCSResponse) Reset() { - *x = GetTCSResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetTCSResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTCSResponse) ProtoMessage() {} - -func (x *GetTCSResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTCSResponse.ProtoReflect.Descriptor instead. -func (*GetTCSResponse) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{16} -} - -func (x *GetTCSResponse) GetTcs() []*TestCase { - if x != nil { - return x.Tcs - } - return nil -} - -func (x *GetTCSResponse) GetEof() bool { - if x != nil { - return x.Eof - } - return false -} - -type PostTCResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TcsId map[string]string `protobuf:"bytes,1,rep,name=tcsId,proto3" json:"tcsId,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *PostTCResponse) Reset() { - *x = PostTCResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PostTCResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PostTCResponse) ProtoMessage() {} - -func (x *PostTCResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PostTCResponse.ProtoReflect.Descriptor instead. -func (*PostTCResponse) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{17} -} - -func (x *PostTCResponse) GetTcsId() map[string]string { - if x != nil { - return x.TcsId - } - return nil -} - -type DeNoiseResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *DeNoiseResponse) Reset() { - *x = DeNoiseResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeNoiseResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeNoiseResponse) ProtoMessage() {} - -func (x *DeNoiseResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeNoiseResponse.ProtoReflect.Descriptor instead. -func (*DeNoiseResponse) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{18} -} - -func (x *DeNoiseResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type TestResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pass map[string]bool `protobuf:"bytes,1,rep,name=pass,proto3" json:"pass,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` -} - -func (x *TestResponse) Reset() { - *x = TestResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TestResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TestResponse) ProtoMessage() {} - -func (x *TestResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TestResponse.ProtoReflect.Descriptor instead. -func (*TestResponse) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{19} -} - -func (x *TestResponse) GetPass() map[string]bool { - if x != nil { - return x.Pass - } - return nil -} - -type GrpcReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Body string `protobuf:"bytes,1,opt,name=Body,proto3" json:"Body,omitempty"` - Method string `protobuf:"bytes,2,opt,name=Method,proto3" json:"Method,omitempty"` -} - -func (x *GrpcReq) Reset() { - *x = GrpcReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GrpcReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GrpcReq) ProtoMessage() {} - -func (x *GrpcReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GrpcReq.ProtoReflect.Descriptor instead. -func (*GrpcReq) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{20} -} - -func (x *GrpcReq) GetBody() string { - if x != nil { - return x.Body - } - return "" -} - -func (x *GrpcReq) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -type GrpcResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Body string `protobuf:"bytes,1,opt,name=Body,proto3" json:"Body,omitempty"` - Err string `protobuf:"bytes,2,opt,name=Err,proto3" json:"Err,omitempty"` -} - -func (x *GrpcResp) Reset() { - *x = GrpcResp{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GrpcResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GrpcResp) ProtoMessage() {} - -func (x *GrpcResp) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GrpcResp.ProtoReflect.Descriptor instead. -func (*GrpcResp) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{21} -} - -func (x *GrpcResp) GetBody() string { - if x != nil { - return x.Body - } - return "" -} - -func (x *GrpcResp) GetErr() string { - if x != nil { - return x.Err - } - return "" -} - -type Mock struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Version string `protobuf:"bytes,1,opt,name=Version,proto3" json:"Version,omitempty"` - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=Kind,proto3" json:"Kind,omitempty"` - Spec *Mock_SpecSchema `protobuf:"bytes,4,opt,name=Spec,proto3" json:"Spec,omitempty"` -} - -func (x *Mock) Reset() { - *x = Mock{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Mock) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Mock) ProtoMessage() {} - -func (x *Mock) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Mock.ProtoReflect.Descriptor instead. -func (*Mock) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{22} -} - -func (x *Mock) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *Mock) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Mock) GetKind() string { - if x != nil { - return x.Kind - } - return "" -} - -func (x *Mock) GetSpec() *Mock_SpecSchema { - if x != nil { - return x.Spec - } - return nil -} - -type Table struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Cols []*SqlCol `protobuf:"bytes,1,rep,name=Cols,proto3" json:"Cols,omitempty"` - Rows []string `protobuf:"bytes,2,rep,name=Rows,proto3" json:"Rows,omitempty"` -} - -func (x *Table) Reset() { - *x = Table{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Table) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Table) ProtoMessage() {} - -func (x *Table) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Table.ProtoReflect.Descriptor instead. -func (*Table) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{23} -} - -func (x *Table) GetCols() []*SqlCol { - if x != nil { - return x.Cols - } - return nil -} - -func (x *Table) GetRows() []string { - if x != nil { - return x.Rows - } - return nil -} - -type SqlCol struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"` - Type string `protobuf:"bytes,2,opt,name=Type,proto3" json:"Type,omitempty"` - //optional fields - Precision int64 `protobuf:"varint,3,opt,name=Precision,proto3" json:"Precision,omitempty"` - Scale int64 `protobuf:"varint,4,opt,name=Scale,proto3" json:"Scale,omitempty"` -} - -func (x *SqlCol) Reset() { - *x = SqlCol{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SqlCol) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SqlCol) ProtoMessage() {} - -func (x *SqlCol) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SqlCol.ProtoReflect.Descriptor instead. -func (*SqlCol) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{24} -} - -func (x *SqlCol) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SqlCol) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *SqlCol) GetPrecision() int64 { - if x != nil { - return x.Precision - } - return 0 -} - -func (x *SqlCol) GetScale() int64 { - if x != nil { - return x.Scale - } - return 0 -} - -type PutMockReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mock *Mock `protobuf:"bytes,1,opt,name=Mock,proto3" json:"Mock,omitempty"` - Path string `protobuf:"bytes,2,opt,name=Path,proto3" json:"Path,omitempty"` - Remove []string `protobuf:"bytes,3,rep,name=Remove,proto3" json:"Remove,omitempty"` - Replace map[string]string `protobuf:"bytes,4,rep,name=Replace,proto3" json:"Replace,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *PutMockReq) Reset() { - *x = PutMockReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutMockReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutMockReq) ProtoMessage() {} - -func (x *PutMockReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PutMockReq.ProtoReflect.Descriptor instead. -func (*PutMockReq) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{25} -} - -func (x *PutMockReq) GetMock() *Mock { - if x != nil { - return x.Mock - } - return nil -} - -func (x *PutMockReq) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *PutMockReq) GetRemove() []string { - if x != nil { - return x.Remove - } - return nil -} - -func (x *PutMockReq) GetReplace() map[string]string { - if x != nil { - return x.Replace - } - return nil -} - -type PutMockResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Inserted int64 `protobuf:"varint,1,opt,name=Inserted,proto3" json:"Inserted,omitempty"` -} - -func (x *PutMockResp) Reset() { - *x = PutMockResp{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PutMockResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PutMockResp) ProtoMessage() {} - -func (x *PutMockResp) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PutMockResp.ProtoReflect.Descriptor instead. -func (*PutMockResp) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{26} -} - -func (x *PutMockResp) GetInserted() int64 { - if x != nil { - return x.Inserted - } - return 0 -} - -type GetMockReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=Path,proto3" json:"Path,omitempty"` - Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` -} - -func (x *GetMockReq) Reset() { - *x = GetMockReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetMockReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetMockReq) ProtoMessage() {} - -func (x *GetMockReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetMockReq.ProtoReflect.Descriptor instead. -func (*GetMockReq) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{27} -} - -func (x *GetMockReq) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *GetMockReq) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type GetMockResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mocks []*Mock `protobuf:"bytes,1,rep,name=Mocks,proto3" json:"Mocks,omitempty"` -} - -func (x *GetMockResp) Reset() { - *x = GetMockResp{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetMockResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetMockResp) ProtoMessage() {} - -func (x *GetMockResp) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetMockResp.ProtoReflect.Descriptor instead. -func (*GetMockResp) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{28} -} - -func (x *GetMockResp) GetMocks() []*Mock { - if x != nil { - return x.Mocks - } - return nil -} - -type StartMockReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Path string `protobuf:"bytes,1,opt,name=Path,proto3" json:"Path,omitempty"` - Mode string `protobuf:"bytes,2,opt,name=Mode,proto3" json:"Mode,omitempty"` - OverWrite bool `protobuf:"varint,3,opt,name=OverWrite,proto3" json:"OverWrite,omitempty"` - Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"Name,omitempty"` -} - -func (x *StartMockReq) Reset() { - *x = StartMockReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartMockReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartMockReq) ProtoMessage() {} - -func (x *StartMockReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartMockReq.ProtoReflect.Descriptor instead. -func (*StartMockReq) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{29} -} - -func (x *StartMockReq) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *StartMockReq) GetMode() string { - if x != nil { - return x.Mode - } - return "" -} - -func (x *StartMockReq) GetOverWrite() bool { - if x != nil { - return x.OverWrite - } - return false -} - -func (x *StartMockReq) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type StartMockResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Exists bool `protobuf:"varint,1,opt,name=Exists,proto3" json:"Exists,omitempty"` -} - -func (x *StartMockResp) Reset() { - *x = StartMockResp{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartMockResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartMockResp) ProtoMessage() {} - -func (x *StartMockResp) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartMockResp.ProtoReflect.Descriptor instead. -func (*StartMockResp) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{30} -} - -func (x *StartMockResp) GetExists() bool { - if x != nil { - return x.Exists - } - return false -} - -type Mock_Request struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Method string `protobuf:"bytes,1,opt,name=Method,proto3" json:"Method,omitempty"` - ProtoMajor int64 `protobuf:"varint,2,opt,name=ProtoMajor,proto3" json:"ProtoMajor,omitempty"` - ProtoMinor int64 `protobuf:"varint,3,opt,name=ProtoMinor,proto3" json:"ProtoMinor,omitempty"` - URL string `protobuf:"bytes,4,opt,name=URL,proto3" json:"URL,omitempty"` - Header map[string]*StrArr `protobuf:"bytes,5,rep,name=Header,proto3" json:"Header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Body string `protobuf:"bytes,6,opt,name=Body,proto3" json:"Body,omitempty"` -} - -func (x *Mock_Request) Reset() { - *x = Mock_Request{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Mock_Request) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Mock_Request) ProtoMessage() {} - -func (x *Mock_Request) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Mock_Request.ProtoReflect.Descriptor instead. -func (*Mock_Request) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{22, 0} -} - -func (x *Mock_Request) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -func (x *Mock_Request) GetProtoMajor() int64 { - if x != nil { - return x.ProtoMajor - } - return 0 -} - -func (x *Mock_Request) GetProtoMinor() int64 { - if x != nil { - return x.ProtoMinor - } - return 0 -} - -func (x *Mock_Request) GetURL() string { - if x != nil { - return x.URL - } - return "" -} - -func (x *Mock_Request) GetHeader() map[string]*StrArr { - if x != nil { - return x.Header - } - return nil -} - -func (x *Mock_Request) GetBody() string { - if x != nil { - return x.Body - } - return "" -} - -type Mock_Object struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=Type,proto3" json:"Type,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=Data,proto3" json:"Data,omitempty"` -} - -func (x *Mock_Object) Reset() { - *x = Mock_Object{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Mock_Object) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Mock_Object) ProtoMessage() {} - -func (x *Mock_Object) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Mock_Object.ProtoReflect.Descriptor instead. -func (*Mock_Object) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{22, 1} -} - -func (x *Mock_Object) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *Mock_Object) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -type Mock_SpecSchema struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Metadata map[string]string `protobuf:"bytes,1,rep,name=Metadata,proto3" json:"Metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Objects []*Mock_Object `protobuf:"bytes,2,rep,name=Objects,proto3" json:"Objects,omitempty"` - Req *HttpReq `protobuf:"bytes,3,opt,name=Req,proto3" json:"Req,omitempty"` - Res *HttpResp `protobuf:"bytes,4,opt,name=Res,proto3" json:"Res,omitempty"` - Mocks []string `protobuf:"bytes,5,rep,name=Mocks,proto3" json:"Mocks,omitempty"` - Assertions map[string]*StrArr `protobuf:"bytes,6,rep,name=Assertions,proto3" json:"Assertions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Created int64 `protobuf:"varint,7,opt,name=Created,proto3" json:"Created,omitempty"` - // for sql - Type string `protobuf:"bytes,8,opt,name=Type,proto3" json:"Type,omitempty"` - Table *Table `protobuf:"bytes,9,opt,name=Table,proto3,oneof" json:"Table,omitempty"` - Int int64 `protobuf:"varint,10,opt,name=Int,proto3" json:"Int,omitempty"` // change it to rows commited - Err []string `protobuf:"bytes,11,rep,name=Err,proto3" json:"Err,omitempty"` - GrpcRequest *GrpcReq `protobuf:"bytes,12,opt,name=GrpcRequest,proto3" json:"GrpcRequest,omitempty"` - GrpcResp *GrpcResp `protobuf:"bytes,13,opt,name=GrpcResp,proto3" json:"GrpcResp,omitempty"` -} - -func (x *Mock_SpecSchema) Reset() { - *x = Mock_SpecSchema{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_regression_services_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Mock_SpecSchema) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Mock_SpecSchema) ProtoMessage() {} - -func (x *Mock_SpecSchema) ProtoReflect() protoreflect.Message { - mi := &file_grpc_regression_services_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Mock_SpecSchema.ProtoReflect.Descriptor instead. -func (*Mock_SpecSchema) Descriptor() ([]byte, []int) { - return file_grpc_regression_services_proto_rawDescGZIP(), []int{22, 2} -} - -func (x *Mock_SpecSchema) GetMetadata() map[string]string { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *Mock_SpecSchema) GetObjects() []*Mock_Object { - if x != nil { - return x.Objects - } - return nil -} - -func (x *Mock_SpecSchema) GetReq() *HttpReq { - if x != nil { - return x.Req - } - return nil -} - -func (x *Mock_SpecSchema) GetRes() *HttpResp { - if x != nil { - return x.Res - } - return nil -} - -func (x *Mock_SpecSchema) GetMocks() []string { - if x != nil { - return x.Mocks - } - return nil -} - -func (x *Mock_SpecSchema) GetAssertions() map[string]*StrArr { - if x != nil { - return x.Assertions - } - return nil -} - -func (x *Mock_SpecSchema) GetCreated() int64 { - if x != nil { - return x.Created - } - return 0 -} - -func (x *Mock_SpecSchema) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *Mock_SpecSchema) GetTable() *Table { - if x != nil { - return x.Table - } - return nil -} - -func (x *Mock_SpecSchema) GetInt() int64 { - if x != nil { - return x.Int - } - return 0 -} - -func (x *Mock_SpecSchema) GetErr() []string { - if x != nil { - return x.Err - } - return nil -} - -func (x *Mock_SpecSchema) GetGrpcRequest() *GrpcReq { - if x != nil { - return x.GrpcRequest - } - return nil -} - -func (x *Mock_SpecSchema) GetGrpcResp() *GrpcResp { - if x != nil { - return x.GrpcResp - } - return nil -} - -var File_grpc_regression_services_proto protoreflect.FileDescriptor - -var file_grpc_regression_services_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x0a, 0x44, - 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x32, 0x0a, 0x04, 0x4d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x04, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x37, - 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1d, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x42, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x03, 0x42, 0x69, 0x6e, 0x22, 0xe7, 0x04, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x43, - 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, - 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x52, 0x49, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x49, 0x12, 0x2b, 0x0a, 0x07, 0x48, 0x74, - 0x74, 0x70, 0x52, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x52, 0x07, - 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x08, 0x48, 0x74, 0x74, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x52, 0x08, 0x48, - 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, - 0x79, 0x52, 0x0a, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x22, 0x0a, - 0x0c, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x12, 0x24, 0x0a, - 0x05, 0x4d, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x4d, 0x6f, - 0x63, 0x6b, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, - 0x07, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, - 0x71, 0x52, 0x07, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x08, 0x47, 0x72, - 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x52, 0x08, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x70, - 0x70, 0x50, 0x61, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x70, 0x70, - 0x50, 0x61, 0x74, 0x68, 0x1a, 0x3a, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xf1, 0x01, 0x0a, 0x07, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, - 0x41, 0x70, 0x70, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x41, 0x70, 0x70, - 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x52, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x52, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x04, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x52, 0x04, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x52, 0x08, 0x47, 0x72, 0x70, 0x63, - 0x52, 0x65, 0x73, 0x70, 0x22, 0xea, 0x05, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, - 0x64, 0x12, 0x10, 0x0a, 0x03, 0x43, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x43, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x52, 0x49, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x49, 0x12, 0x2b, 0x0a, 0x07, 0x48, - 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x52, - 0x07, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x08, 0x48, 0x74, 0x74, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x52, 0x08, - 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x65, 0x70, 0x73, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x04, 0x44, 0x65, - 0x70, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x18, 0x0b, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x2e, 0x41, 0x6c, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x39, 0x0a, - 0x07, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x2e, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x07, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x69, 0x73, - 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x69, 0x73, 0x65, 0x12, 0x24, - 0x0a, 0x05, 0x4d, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x4d, - 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x52, 0x07, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, - 0x71, 0x12, 0x2e, 0x0a, 0x08, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, - 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x52, 0x08, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x4c, 0x0a, 0x0c, 0x41, 0x6c, 0x6c, 0x4b, 0x65, 0x79, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x53, 0x74, 0x72, 0x41, 0x72, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x4c, 0x0a, 0x0c, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x53, 0x74, 0x72, 0x41, 0x72, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x20, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x22, 0xe9, 0x03, 0x0a, 0x07, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x12, - 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x52, 0x4c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x4c, 0x12, 0x3e, 0x0a, 0x09, 0x55, 0x52, 0x4c, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x2e, - 0x55, 0x52, 0x4c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, - 0x55, 0x52, 0x4c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x71, 0x2e, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x16, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x6f, 0x64, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x42, 0x6f, 0x64, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x26, 0x0a, 0x04, - 0x46, 0x6f, 0x72, 0x6d, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, - 0x46, 0x6f, 0x72, 0x6d, 0x1a, 0x3c, 0x0a, 0x0e, 0x55, 0x52, 0x4c, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x74, - 0x72, 0x41, 0x72, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x4a, 0x0a, 0x08, 0x46, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x4b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, - 0x06, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0x1e, 0x0a, 0x06, 0x53, - 0x74, 0x72, 0x41, 0x72, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe1, 0x02, 0x0a, 0x08, - 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x16, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x42, 0x6f, 0x64, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x42, 0x6f, 0x64, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x42, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x42, 0x69, 0x6e, 0x61, - 0x72, 0x79, 0x1a, 0x4b, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x74, - 0x72, 0x41, 0x72, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x34, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x27, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x90, - 0x01, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x43, - 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x4d, - 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, - 0x6f, 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x70, 0x70, 0x50, 0x61, - 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x70, 0x70, 0x50, 0x61, 0x74, - 0x68, 0x22, 0x1f, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x30, 0x0a, 0x0c, 0x67, 0x65, 0x74, 0x54, 0x43, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x61, 0x70, 0x70, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x67, 0x65, 0x74, 0x54, 0x43, 0x53, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, - 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x6f, - 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x6f, - 0x63, 0x6b, 0x50, 0x61, 0x74, 0x68, 0x22, 0x48, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x54, 0x43, 0x53, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x03, 0x74, 0x63, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x03, 0x74, 0x63, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x65, 0x6f, 0x66, - 0x22, 0x85, 0x01, 0x0a, 0x0e, 0x70, 0x6f, 0x73, 0x74, 0x54, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x74, 0x63, 0x73, 0x49, 0x64, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x6f, - 0x73, 0x74, 0x54, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x63, 0x73, - 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x74, 0x63, 0x73, 0x49, 0x64, 0x1a, 0x38, - 0x0a, 0x0a, 0x54, 0x63, 0x73, 0x49, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b, 0x0a, 0x0f, 0x64, 0x65, 0x4e, 0x6f, - 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x7d, 0x0a, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x61, 0x73, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x70, 0x61, 0x73, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x50, - 0x61, 0x73, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x07, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x12, - 0x12, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x42, - 0x6f, 0x64, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x22, 0x30, 0x0a, 0x08, 0x47, - 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x45, - 0x72, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x45, 0x72, 0x72, 0x22, 0xe8, 0x08, - 0x0a, 0x04, 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x53, 0x70, 0x65, 0x63, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x52, 0x04, 0x53, 0x70, 0x65, 0x63, 0x1a, 0x90, 0x02, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x4d, 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x55, - 0x52, 0x4c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x4c, 0x12, 0x3a, 0x0a, - 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x42, 0x6f, 0x64, - 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x42, 0x6f, 0x64, 0x79, 0x1a, 0x4b, 0x0a, - 0x0b, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x41, 0x72, 0x72, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x30, 0x0a, 0x06, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x1a, 0xa9, 0x05, 0x0a, - 0x0a, 0x53, 0x70, 0x65, 0x63, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x43, 0x0a, 0x08, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x2e, 0x53, 0x70, - 0x65, 0x63, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x2f, 0x0a, 0x07, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x63, - 0x6b, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x12, 0x23, 0x0a, 0x03, 0x52, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x65, - 0x71, 0x52, 0x03, 0x52, 0x65, 0x71, 0x12, 0x24, 0x0a, 0x03, 0x52, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x48, - 0x74, 0x74, 0x70, 0x52, 0x65, 0x73, 0x70, 0x52, 0x03, 0x52, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x4d, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x4d, 0x6f, 0x63, - 0x6b, 0x73, 0x12, 0x49, 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x05, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x6e, 0x74, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x49, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x45, 0x72, 0x72, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x45, 0x72, 0x72, 0x12, 0x33, 0x0a, 0x0b, 0x47, - 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x72, 0x70, 0x63, - 0x52, 0x65, 0x71, 0x52, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2e, 0x0a, 0x08, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x72, - 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, 0x52, 0x08, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x73, 0x70, - 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4f, 0x0a, - 0x0f, 0x41, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x72, - 0x41, 0x72, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x08, - 0x0a, 0x06, 0x5f, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x41, 0x0a, 0x05, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x24, 0x0a, 0x04, 0x43, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x71, 0x6c, 0x43, 0x6f, - 0x6c, 0x52, 0x04, 0x43, 0x6f, 0x6c, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x52, 0x6f, 0x77, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x52, 0x6f, 0x77, 0x73, 0x22, 0x64, 0x0a, 0x06, 0x53, - 0x71, 0x6c, 0x43, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x50, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x53, - 0x63, 0x61, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x53, 0x63, 0x61, 0x6c, - 0x65, 0x22, 0xd5, 0x01, 0x0a, 0x0a, 0x50, 0x75, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x12, 0x22, 0x0a, 0x04, 0x4d, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x04, - 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x12, 0x3b, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x75, 0x74, - 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x1a, 0x3a, 0x0a, - 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x29, 0x0a, 0x0b, 0x50, 0x75, 0x74, - 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x49, 0x6e, 0x73, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x49, 0x6e, 0x73, 0x65, - 0x72, 0x74, 0x65, 0x64, 0x22, 0x34, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x33, 0x0a, 0x0b, 0x67, 0x65, - 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x24, 0x0a, 0x05, 0x4d, 0x6f, 0x63, - 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x4d, 0x6f, 0x63, 0x6b, 0x73, 0x22, - 0x68, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x12, - 0x12, 0x0a, 0x04, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x50, - 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x4f, 0x76, 0x65, 0x72, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x4f, 0x76, 0x65, 0x72, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x0d, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x45, 0x78, - 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x45, 0x78, 0x69, 0x73, - 0x74, 0x73, 0x32, 0xcc, 0x04, 0x0a, 0x11, 0x52, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x03, 0x45, 0x6e, 0x64, 0x12, - 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x65, 0x6e, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x05, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x54, 0x43, 0x12, - 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x43, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x47, - 0x65, 0x74, 0x54, 0x43, 0x53, 0x12, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x2e, 0x67, 0x65, 0x74, 0x54, 0x43, 0x53, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x67, 0x65, 0x74, 0x54, 0x43, 0x53, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x50, 0x6f, 0x73, 0x74, - 0x54, 0x43, 0x12, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x54, 0x65, - 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x6f, 0x73, 0x74, 0x54, 0x43, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x44, 0x65, 0x4e, 0x6f, 0x69, 0x73, 0x65, 0x12, 0x11, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x1a, 0x19, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x4e, - 0x6f, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, - 0x54, 0x65, 0x73, 0x74, 0x12, 0x11, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, - 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x36, 0x0a, 0x07, 0x50, 0x75, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x75, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, - 0x1a, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x75, 0x74, 0x4d, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x4d, 0x6f, - 0x63, 0x6b, 0x73, 0x12, 0x14, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x2e, 0x67, 0x65, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x3f, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x69, 0x6e, 0x67, - 0x12, 0x16, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x4d, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x42, 0x3b, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x6b, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x73, 0x74, 0x75, 0x62, 0x73, 0x5a, 0x23, 0x67, 0x6f, 0x2e, 0x6b, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x2e, 0x69, 0x6f, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x67, - 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_regression_services_proto_rawDescOnce sync.Once - file_grpc_regression_services_proto_rawDescData = file_grpc_regression_services_proto_rawDesc -) - -func file_grpc_regression_services_proto_rawDescGZIP() []byte { - file_grpc_regression_services_proto_rawDescOnce.Do(func() { - file_grpc_regression_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_regression_services_proto_rawDescData) - }) - return file_grpc_regression_services_proto_rawDescData -} - -var file_grpc_regression_services_proto_msgTypes = make([]protoimpl.MessageInfo, 47) -var file_grpc_regression_services_proto_goTypes = []interface{}{ - (*Dependency)(nil), // 0: services.Dependency - (*DataBytes)(nil), // 1: services.DataBytes - (*TestCaseReq)(nil), // 2: services.TestCaseReq - (*TestReq)(nil), // 3: services.TestReq - (*TestCase)(nil), // 4: services.TestCase - (*Method)(nil), // 5: services.Method - (*HttpReq)(nil), // 6: services.HttpReq - (*FormData)(nil), // 7: services.FormData - (*StrArr)(nil), // 8: services.StrArr - (*HttpResp)(nil), // 9: services.HttpResp - (*EndRequest)(nil), // 10: services.endRequest - (*EndResponse)(nil), // 11: services.endResponse - (*StartRequest)(nil), // 12: services.startRequest - (*StartResponse)(nil), // 13: services.startResponse - (*GetTCRequest)(nil), // 14: services.getTCRequest - (*GetTCSRequest)(nil), // 15: services.getTCSRequest - (*GetTCSResponse)(nil), // 16: services.getTCSResponse - (*PostTCResponse)(nil), // 17: services.postTCResponse - (*DeNoiseResponse)(nil), // 18: services.deNoiseResponse - (*TestResponse)(nil), // 19: services.testResponse - (*GrpcReq)(nil), // 20: services.GrpcReq - (*GrpcResp)(nil), // 21: services.GrpcResp - (*Mock)(nil), // 22: services.Mock - (*Table)(nil), // 23: services.Table - (*SqlCol)(nil), // 24: services.SqlCol - (*PutMockReq)(nil), // 25: services.PutMockReq - (*PutMockResp)(nil), // 26: services.PutMockResp - (*GetMockReq)(nil), // 27: services.GetMockReq - (*GetMockResp)(nil), // 28: services.getMockResp - (*StartMockReq)(nil), // 29: services.StartMockReq - (*StartMockResp)(nil), // 30: services.StartMockResp - nil, // 31: services.Dependency.MetaEntry - nil, // 32: services.TestCaseReq.ReplaceEntry - nil, // 33: services.TestCase.AllKeysEntry - nil, // 34: services.TestCase.AnchorsEntry - nil, // 35: services.HttpReq.URLParamsEntry - nil, // 36: services.HttpReq.HeaderEntry - nil, // 37: services.HttpResp.HeaderEntry - nil, // 38: services.postTCResponse.TcsIdEntry - nil, // 39: services.testResponse.PassEntry - (*Mock_Request)(nil), // 40: services.Mock.Request - (*Mock_Object)(nil), // 41: services.Mock.Object - (*Mock_SpecSchema)(nil), // 42: services.Mock.SpecSchema - nil, // 43: services.Mock.Request.HeaderEntry - nil, // 44: services.Mock.SpecSchema.MetadataEntry - nil, // 45: services.Mock.SpecSchema.AssertionsEntry - nil, // 46: services.PutMockReq.ReplaceEntry -} -var file_grpc_regression_services_proto_depIdxs = []int32{ - 31, // 0: services.Dependency.Meta:type_name -> services.Dependency.MetaEntry - 1, // 1: services.Dependency.Data:type_name -> services.DataBytes - 6, // 2: services.TestCaseReq.HttpReq:type_name -> services.HttpReq - 9, // 3: services.TestCaseReq.HttpResp:type_name -> services.HttpResp - 0, // 4: services.TestCaseReq.Dependency:type_name -> services.Dependency - 22, // 5: services.TestCaseReq.Mocks:type_name -> services.Mock - 32, // 6: services.TestCaseReq.Replace:type_name -> services.TestCaseReq.ReplaceEntry - 20, // 7: services.TestCaseReq.GrpcReq:type_name -> services.GrpcReq - 21, // 8: services.TestCaseReq.GrpcResp:type_name -> services.GrpcResp - 9, // 9: services.TestReq.Resp:type_name -> services.HttpResp - 21, // 10: services.TestReq.GrpcResp:type_name -> services.GrpcResp - 6, // 11: services.TestCase.HttpReq:type_name -> services.HttpReq - 9, // 12: services.TestCase.HttpResp:type_name -> services.HttpResp - 0, // 13: services.TestCase.Deps:type_name -> services.Dependency - 33, // 14: services.TestCase.allKeys:type_name -> services.TestCase.AllKeysEntry - 34, // 15: services.TestCase.anchors:type_name -> services.TestCase.AnchorsEntry - 22, // 16: services.TestCase.Mocks:type_name -> services.Mock - 20, // 17: services.TestCase.GrpcReq:type_name -> services.GrpcReq - 21, // 18: services.TestCase.GrpcResp:type_name -> services.GrpcResp - 35, // 19: services.HttpReq.URLParams:type_name -> services.HttpReq.URLParamsEntry - 36, // 20: services.HttpReq.Header:type_name -> services.HttpReq.HeaderEntry - 7, // 21: services.HttpReq.Form:type_name -> services.FormData - 37, // 22: services.HttpResp.Header:type_name -> services.HttpResp.HeaderEntry - 4, // 23: services.getTCSResponse.tcs:type_name -> services.TestCase - 38, // 24: services.postTCResponse.tcsId:type_name -> services.postTCResponse.TcsIdEntry - 39, // 25: services.testResponse.pass:type_name -> services.testResponse.PassEntry - 42, // 26: services.Mock.Spec:type_name -> services.Mock.SpecSchema - 24, // 27: services.Table.Cols:type_name -> services.SqlCol - 22, // 28: services.PutMockReq.Mock:type_name -> services.Mock - 46, // 29: services.PutMockReq.Replace:type_name -> services.PutMockReq.ReplaceEntry - 22, // 30: services.getMockResp.Mocks:type_name -> services.Mock - 8, // 31: services.TestCase.AllKeysEntry.value:type_name -> services.StrArr - 8, // 32: services.TestCase.AnchorsEntry.value:type_name -> services.StrArr - 8, // 33: services.HttpReq.HeaderEntry.value:type_name -> services.StrArr - 8, // 34: services.HttpResp.HeaderEntry.value:type_name -> services.StrArr - 43, // 35: services.Mock.Request.Header:type_name -> services.Mock.Request.HeaderEntry - 44, // 36: services.Mock.SpecSchema.Metadata:type_name -> services.Mock.SpecSchema.MetadataEntry - 41, // 37: services.Mock.SpecSchema.Objects:type_name -> services.Mock.Object - 6, // 38: services.Mock.SpecSchema.Req:type_name -> services.HttpReq - 9, // 39: services.Mock.SpecSchema.Res:type_name -> services.HttpResp - 45, // 40: services.Mock.SpecSchema.Assertions:type_name -> services.Mock.SpecSchema.AssertionsEntry - 23, // 41: services.Mock.SpecSchema.Table:type_name -> services.Table - 20, // 42: services.Mock.SpecSchema.GrpcRequest:type_name -> services.GrpcReq - 21, // 43: services.Mock.SpecSchema.GrpcResp:type_name -> services.GrpcResp - 8, // 44: services.Mock.Request.HeaderEntry.value:type_name -> services.StrArr - 8, // 45: services.Mock.SpecSchema.AssertionsEntry.value:type_name -> services.StrArr - 10, // 46: services.RegressionService.End:input_type -> services.endRequest - 12, // 47: services.RegressionService.Start:input_type -> services.startRequest - 14, // 48: services.RegressionService.GetTC:input_type -> services.getTCRequest - 15, // 49: services.RegressionService.GetTCS:input_type -> services.getTCSRequest - 2, // 50: services.RegressionService.PostTC:input_type -> services.TestCaseReq - 3, // 51: services.RegressionService.DeNoise:input_type -> services.TestReq - 3, // 52: services.RegressionService.Test:input_type -> services.TestReq - 25, // 53: services.RegressionService.PutMock:input_type -> services.PutMockReq - 27, // 54: services.RegressionService.GetMocks:input_type -> services.GetMockReq - 29, // 55: services.RegressionService.StartMocking:input_type -> services.StartMockReq - 11, // 56: services.RegressionService.End:output_type -> services.endResponse - 13, // 57: services.RegressionService.Start:output_type -> services.startResponse - 4, // 58: services.RegressionService.GetTC:output_type -> services.TestCase - 16, // 59: services.RegressionService.GetTCS:output_type -> services.getTCSResponse - 17, // 60: services.RegressionService.PostTC:output_type -> services.postTCResponse - 18, // 61: services.RegressionService.DeNoise:output_type -> services.deNoiseResponse - 19, // 62: services.RegressionService.Test:output_type -> services.testResponse - 26, // 63: services.RegressionService.PutMock:output_type -> services.PutMockResp - 28, // 64: services.RegressionService.GetMocks:output_type -> services.getMockResp - 30, // 65: services.RegressionService.StartMocking:output_type -> services.StartMockResp - 56, // [56:66] is the sub-list for method output_type - 46, // [46:56] is the sub-list for method input_type - 46, // [46:46] is the sub-list for extension type_name - 46, // [46:46] is the sub-list for extension extendee - 0, // [0:46] is the sub-list for field type_name -} - -func init() { file_grpc_regression_services_proto_init() } -func file_grpc_regression_services_proto_init() { - if File_grpc_regression_services_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_regression_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Dependency); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataBytes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestCaseReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestCase); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Method); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HttpReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FormData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StrArr); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HttpResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EndRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EndResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTCRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTCSRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTCSResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PostTCResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeNoiseResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TestResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Mock); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Table); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SqlCol); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutMockReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutMockResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMockReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetMockResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartMockReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartMockResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Mock_Request); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Mock_Object); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_regression_services_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Mock_SpecSchema); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_regression_services_proto_msgTypes[42].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_regression_services_proto_rawDesc, - NumEnums: 0, - NumMessages: 47, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_regression_services_proto_goTypes, - DependencyIndexes: file_grpc_regression_services_proto_depIdxs, - MessageInfos: file_grpc_regression_services_proto_msgTypes, - }.Build() - File_grpc_regression_services_proto = out.File - file_grpc_regression_services_proto_rawDesc = nil - file_grpc_regression_services_proto_goTypes = nil - file_grpc_regression_services_proto_depIdxs = nil -} diff --git a/grpc/regression/services.proto b/grpc/regression/services.proto deleted file mode 100644 index fbb33364c..000000000 --- a/grpc/regression/services.proto +++ /dev/null @@ -1,251 +0,0 @@ -syntax = "proto3"; -option java_package = "io.keploy.grpc.stubs"; -option go_package = "go.keploy.io/server/grpc/regression"; -package services; - -message Dependency { - string Name = 1; - string Type = 2; - map Meta = 3; - repeated DataBytes Data = 4; -} - -message DataBytes { - bytes Bin = 1; -} - -message TestCaseReq { - int64 Captured = 1; - string AppID = 2; - string URI = 3; - HttpReq HttpReq = 4; - HttpResp HttpResp = 5; - repeated Dependency Dependency = 6; - string TestCasePath = 7; - string MockPath = 8; - repeated Mock Mocks = 9; - repeated string Remove = 10; - map Replace = 11; - string Type = 12; - GrpcReq GrpcReq = 13; - GrpcResp GrpcResp = 14; - string AppPath = 15; -} - - -message TestReq { - string ID = 1; - string AppID = 2; - string RunID = 3; - HttpResp Resp = 4; - string TestCasePath = 5; - string MockPath = 6; - string Type = 7; - GrpcResp GrpcResp = 8; -} - -message TestCase { - string id = 1; - int64 created = 2; - int64 updated = 3; - int64 captured = 4; - string CID = 5; - string appID = 6; - string URI = 7; - HttpReq HttpReq = 8; - HttpResp HttpResp = 9; - repeated Dependency Deps = 10; - map allKeys = 11; - map anchors = 12; - repeated string noise = 13; - repeated Mock Mocks = 14; - GrpcReq GrpcReq = 15; - GrpcResp GrpcResp = 16; - string Type = 17; -} - -message Method { - string Method = 1; -} -message HttpReq { - string Method = 1; - int64 ProtoMajor = 2; - int64 ProtoMinor = 3; - string URL = 4; - map URLParams = 5; - map Header = 6; - string Body = 7 [deprecated = true]; - bytes BodyData = 10; - string Binary = 8; - repeated FormData Form = 9; -} - -//for multipart request -message FormData { - string Key = 1; //partName - repeated string Values = 2; - repeated string Paths = 3; -} - -message StrArr { - repeated string Value = 1; -} - -message HttpResp { - int64 StatusCode = 1; - map Header = 2; - string Body = 3 [deprecated = true]; - bytes BodyData = 8; - string StatusMessage = 4; - int64 ProtoMajor = 5; - int64 ProtoMinor = 6; - string Binary = 7; -} - -message endRequest { - string status = 1; - string id = 2; -} - -message endResponse { - string message = 1; -} - -message startRequest { - string total = 1; - string app = 2; - string TestCasePath = 3; - string MockPath = 4; - string AppPath = 5; -} - -message startResponse { - string id = 1; -} - -message getTCRequest { - string id = 1; - string app = 2; -} -message getTCSRequest{ - string app = 1; - string offset = 2; - string limit = 3; - string TestCasePath = 4; - string MockPath = 5; -} -message getTCSResponse{ - repeated TestCase tcs = 1; - bool eof = 2; -} -message postTCResponse{ - map tcsId = 1; -} -message deNoiseResponse { - string message = 1; -} -message testResponse{ - map pass = 1; -} -message GrpcReq { - string Body = 1; - string Method = 2; -} -message GrpcResp { - string Body = 1; - string Err = 2; -} - -message Mock { - message Request { - string Method = 1; - int64 ProtoMajor = 2; - int64 ProtoMinor = 3; - string URL = 4; - map Header = 5; - string Body = 6; - } - message Object { - string Type = 1; - bytes Data = 2; - } - - string Version = 1; - string Name = 2; - string Kind = 3; - message SpecSchema { - map Metadata = 1; - repeated Object Objects = 2; - HttpReq Req = 3; - HttpResp Res = 4; - repeated string Mocks = 5; - map Assertions = 6; - int64 Created = 7; - // for sql - string Type = 8; - optional Table Table = 9; - int64 Int = 10; // change it to rows commited - repeated string Err = 11; - GrpcReq GrpcRequest = 12; - GrpcResp GrpcResp = 13; - } - SpecSchema Spec = 4; -} - -message Table{ - repeated SqlCol Cols = 1; - repeated string Rows = 2; -} - -message SqlCol { - string Name = 1; - string Type = 2; - //optional fields - int64 Precision = 3; - int64 Scale = 4; -} - -message PutMockReq { - Mock Mock = 1; - string Path = 2; - repeated string Remove = 3; - map Replace = 4; -} - -message PutMockResp { - int64 Inserted = 1; -} - -message GetMockReq { - string Path = 1; - string Name = 2; -} - -message getMockResp { - repeated Mock Mocks = 1; -} - -message StartMockReq { - string Path = 1; - string Mode = 2; - bool OverWrite = 3; - string Name = 4; -} - -message StartMockResp { - bool Exists = 1; -} - -service RegressionService{ - rpc End (endRequest) returns (endResponse); - rpc Start (startRequest) returns (startResponse); - rpc GetTC (getTCRequest) returns (TestCase); - rpc GetTCS (getTCSRequest) returns (getTCSResponse); - rpc PostTC (TestCaseReq) returns (postTCResponse); - rpc DeNoise (TestReq) returns(deNoiseResponse); - rpc Test (TestReq) returns (testResponse); - rpc PutMock (PutMockReq) returns (PutMockResp); - rpc GetMocks (GetMockReq) returns (getMockResp); - rpc StartMocking (StartMockReq) returns (StartMockResp); - // rpc DeDuplication (TestReq) returns (DedupResponse); -} \ No newline at end of file diff --git a/grpc/regression/services_grpc.pb.go b/grpc/regression/services_grpc.pb.go deleted file mode 100644 index dbce9fd3c..000000000 --- a/grpc/regression/services_grpc.pb.go +++ /dev/null @@ -1,429 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.21.12 -// source: grpc/regression/services.proto - -package regression - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -// RegressionServiceClient is the client API for RegressionService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type RegressionServiceClient interface { - End(ctx context.Context, in *EndRequest, opts ...grpc.CallOption) (*EndResponse, error) - Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*StartResponse, error) - GetTC(ctx context.Context, in *GetTCRequest, opts ...grpc.CallOption) (*TestCase, error) - GetTCS(ctx context.Context, in *GetTCSRequest, opts ...grpc.CallOption) (*GetTCSResponse, error) - PostTC(ctx context.Context, in *TestCaseReq, opts ...grpc.CallOption) (*PostTCResponse, error) - DeNoise(ctx context.Context, in *TestReq, opts ...grpc.CallOption) (*DeNoiseResponse, error) - Test(ctx context.Context, in *TestReq, opts ...grpc.CallOption) (*TestResponse, error) - PutMock(ctx context.Context, in *PutMockReq, opts ...grpc.CallOption) (*PutMockResp, error) - GetMocks(ctx context.Context, in *GetMockReq, opts ...grpc.CallOption) (*GetMockResp, error) - StartMocking(ctx context.Context, in *StartMockReq, opts ...grpc.CallOption) (*StartMockResp, error) -} - -type regressionServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewRegressionServiceClient(cc grpc.ClientConnInterface) RegressionServiceClient { - return ®ressionServiceClient{cc} -} - -func (c *regressionServiceClient) End(ctx context.Context, in *EndRequest, opts ...grpc.CallOption) (*EndResponse, error) { - out := new(EndResponse) - err := c.cc.Invoke(ctx, "/services.RegressionService/End", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) Start(ctx context.Context, in *StartRequest, opts ...grpc.CallOption) (*StartResponse, error) { - out := new(StartResponse) - err := c.cc.Invoke(ctx, "/services.RegressionService/Start", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) GetTC(ctx context.Context, in *GetTCRequest, opts ...grpc.CallOption) (*TestCase, error) { - out := new(TestCase) - err := c.cc.Invoke(ctx, "/services.RegressionService/GetTC", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) GetTCS(ctx context.Context, in *GetTCSRequest, opts ...grpc.CallOption) (*GetTCSResponse, error) { - out := new(GetTCSResponse) - err := c.cc.Invoke(ctx, "/services.RegressionService/GetTCS", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) PostTC(ctx context.Context, in *TestCaseReq, opts ...grpc.CallOption) (*PostTCResponse, error) { - out := new(PostTCResponse) - err := c.cc.Invoke(ctx, "/services.RegressionService/PostTC", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) DeNoise(ctx context.Context, in *TestReq, opts ...grpc.CallOption) (*DeNoiseResponse, error) { - out := new(DeNoiseResponse) - err := c.cc.Invoke(ctx, "/services.RegressionService/DeNoise", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) Test(ctx context.Context, in *TestReq, opts ...grpc.CallOption) (*TestResponse, error) { - out := new(TestResponse) - err := c.cc.Invoke(ctx, "/services.RegressionService/Test", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) PutMock(ctx context.Context, in *PutMockReq, opts ...grpc.CallOption) (*PutMockResp, error) { - out := new(PutMockResp) - err := c.cc.Invoke(ctx, "/services.RegressionService/PutMock", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) GetMocks(ctx context.Context, in *GetMockReq, opts ...grpc.CallOption) (*GetMockResp, error) { - out := new(GetMockResp) - err := c.cc.Invoke(ctx, "/services.RegressionService/GetMocks", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *regressionServiceClient) StartMocking(ctx context.Context, in *StartMockReq, opts ...grpc.CallOption) (*StartMockResp, error) { - out := new(StartMockResp) - err := c.cc.Invoke(ctx, "/services.RegressionService/StartMocking", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RegressionServiceServer is the server API for RegressionService service. -// All implementations must embed UnimplementedRegressionServiceServer -// for forward compatibility -type RegressionServiceServer interface { - End(context.Context, *EndRequest) (*EndResponse, error) - Start(context.Context, *StartRequest) (*StartResponse, error) - GetTC(context.Context, *GetTCRequest) (*TestCase, error) - GetTCS(context.Context, *GetTCSRequest) (*GetTCSResponse, error) - PostTC(context.Context, *TestCaseReq) (*PostTCResponse, error) - DeNoise(context.Context, *TestReq) (*DeNoiseResponse, error) - Test(context.Context, *TestReq) (*TestResponse, error) - PutMock(context.Context, *PutMockReq) (*PutMockResp, error) - GetMocks(context.Context, *GetMockReq) (*GetMockResp, error) - StartMocking(context.Context, *StartMockReq) (*StartMockResp, error) - mustEmbedUnimplementedRegressionServiceServer() -} - -// UnimplementedRegressionServiceServer must be embedded to have forward compatible implementations. -type UnimplementedRegressionServiceServer struct { -} - -func (UnimplementedRegressionServiceServer) End(context.Context, *EndRequest) (*EndResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method End not implemented") -} -func (UnimplementedRegressionServiceServer) Start(context.Context, *StartRequest) (*StartResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Start not implemented") -} -func (UnimplementedRegressionServiceServer) GetTC(context.Context, *GetTCRequest) (*TestCase, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTC not implemented") -} -func (UnimplementedRegressionServiceServer) GetTCS(context.Context, *GetTCSRequest) (*GetTCSResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTCS not implemented") -} -func (UnimplementedRegressionServiceServer) PostTC(context.Context, *TestCaseReq) (*PostTCResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PostTC not implemented") -} -func (UnimplementedRegressionServiceServer) DeNoise(context.Context, *TestReq) (*DeNoiseResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeNoise not implemented") -} -func (UnimplementedRegressionServiceServer) Test(context.Context, *TestReq) (*TestResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Test not implemented") -} -func (UnimplementedRegressionServiceServer) PutMock(context.Context, *PutMockReq) (*PutMockResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method PutMock not implemented") -} -func (UnimplementedRegressionServiceServer) GetMocks(context.Context, *GetMockReq) (*GetMockResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetMocks not implemented") -} -func (UnimplementedRegressionServiceServer) StartMocking(context.Context, *StartMockReq) (*StartMockResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method StartMocking not implemented") -} -func (UnimplementedRegressionServiceServer) mustEmbedUnimplementedRegressionServiceServer() {} - -// UnsafeRegressionServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to RegressionServiceServer will -// result in compilation errors. -type UnsafeRegressionServiceServer interface { - mustEmbedUnimplementedRegressionServiceServer() -} - -func RegisterRegressionServiceServer(s grpc.ServiceRegistrar, srv RegressionServiceServer) { - s.RegisterService(&RegressionService_ServiceDesc, srv) -} - -func _RegressionService_End_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(EndRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).End(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/End", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).End(ctx, req.(*EndRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_Start_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StartRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).Start(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/Start", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).Start(ctx, req.(*StartRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_GetTC_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetTCRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).GetTC(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/GetTC", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).GetTC(ctx, req.(*GetTCRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_GetTCS_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetTCSRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).GetTCS(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/GetTCS", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).GetTCS(ctx, req.(*GetTCSRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_PostTC_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TestCaseReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).PostTC(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/PostTC", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).PostTC(ctx, req.(*TestCaseReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_DeNoise_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TestReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).DeNoise(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/DeNoise", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).DeNoise(ctx, req.(*TestReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_Test_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TestReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).Test(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/Test", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).Test(ctx, req.(*TestReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_PutMock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PutMockReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).PutMock(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/PutMock", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).PutMock(ctx, req.(*PutMockReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_GetMocks_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetMockReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).GetMocks(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/GetMocks", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).GetMocks(ctx, req.(*GetMockReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _RegressionService_StartMocking_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StartMockReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegressionServiceServer).StartMocking(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/services.RegressionService/StartMocking", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegressionServiceServer).StartMocking(ctx, req.(*StartMockReq)) - } - return interceptor(ctx, in, info, handler) -} - -// RegressionService_ServiceDesc is the grpc.ServiceDesc for RegressionService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var RegressionService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "services.RegressionService", - HandlerType: (*RegressionServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "End", - Handler: _RegressionService_End_Handler, - }, - { - MethodName: "Start", - Handler: _RegressionService_Start_Handler, - }, - { - MethodName: "GetTC", - Handler: _RegressionService_GetTC_Handler, - }, - { - MethodName: "GetTCS", - Handler: _RegressionService_GetTCS_Handler, - }, - { - MethodName: "PostTC", - Handler: _RegressionService_PostTC_Handler, - }, - { - MethodName: "DeNoise", - Handler: _RegressionService_DeNoise_Handler, - }, - { - MethodName: "Test", - Handler: _RegressionService_Test_Handler, - }, - { - MethodName: "PutMock", - Handler: _RegressionService_PutMock_Handler, - }, - { - MethodName: "GetMocks", - Handler: _RegressionService_GetMocks_Handler, - }, - { - MethodName: "StartMocking", - Handler: _RegressionService_StartMocking_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "grpc/regression/services.proto", -} diff --git a/grpc/utils/utils.go b/grpc/utils/utils.go deleted file mode 100644 index 139c62d1d..000000000 --- a/grpc/utils/utils.go +++ /dev/null @@ -1,38 +0,0 @@ -package utils - -import ( - proto "go.keploy.io/server/grpc/regression" -) - -func GetHttpHeader(m map[string]*proto.StrArr) map[string][]string { - res := map[string][]string{} - for k, v := range m { - res[k] = v.Value - } - return res -} - -func GetProtoMap(m map[string][]string) map[string]*proto.StrArr { - res := map[string]*proto.StrArr{} - for k, v := range m { - arr := &proto.StrArr{} - arr.Value = append(arr.Value, v...) - res[k] = arr - } - return res -} - -// map[string]*StrArr --> map[string][]string -func GetStringMap(m map[string]*proto.StrArr) map[string][]string { - res := map[string][]string{} - for k, v := range m { - res[k] = v.Value - } - return res -} - -func ToStrArr(arr []string) *proto.StrArr { - return &proto.StrArr{ - Value: arr, - } -} diff --git a/http/browserMock/browser-mock.go b/http/browserMock/browser-mock.go deleted file mode 100644 index 9b4425b75..000000000 --- a/http/browserMock/browser-mock.go +++ /dev/null @@ -1,58 +0,0 @@ -package browserMock - -import ( - "net/http" - - "github.com/go-chi/chi" - "github.com/go-chi/render" - "go.keploy.io/server/http/regression" - "go.keploy.io/server/pkg/models" - mock2 "go.keploy.io/server/pkg/service/browserMock" - "go.uber.org/zap" -) - -func New(r chi.Router, logger *zap.Logger, svc mock2.Service) { - s := &mock{ - logger: logger, - svc: svc, - } - - r.Route("/deps", func(r chi.Router) { - r.Get("/", s.Get) - r.Post("/", s.Post) - }) -} - -type mock struct { - logger *zap.Logger - svc mock2.Service -} - -func (m *mock) Get(w http.ResponseWriter, r *http.Request) { - app := r.URL.Query().Get("appid") - testName := r.URL.Query().Get("testName") - res, err := m.svc.Get(r.Context(), app, testName) - if err != nil { - render.Render(w, r, regression.ErrInvalidRequest(err)) - return - } - render.Status(r, http.StatusOK) - render.JSON(w, r, res) -} - -func (m *mock) Post(w http.ResponseWriter, r *http.Request) { - data := &BrowserMockReq{} - if err := render.Bind(r, data); err != nil { - m.logger.Error("error parsing request", zap.Error(err)) - render.Render(w, r, regression.ErrInvalidRequest(err)) - return - } - - err := m.svc.Put(r.Context(), models.BrowserMock(*data)) - if err != nil { - render.Render(w, r, regression.ErrInvalidRequest(err)) - } - return - // render.Status(r, http.StatusOK) - // render.JSON(w, r, "Inserted succesfully") -} diff --git a/http/browserMock/request.go b/http/browserMock/request.go deleted file mode 100644 index ddbf3408a..000000000 --- a/http/browserMock/request.go +++ /dev/null @@ -1,31 +0,0 @@ -package browserMock - -import ( - "net/http" - "time" - - "github.com/google/uuid" - "go.keploy.io/server/pkg/models" -) - -type BrowserMockReq struct { - ID string `json:"id" bson:"_id"` - Created int64 `json:"created" bson:"created"` - Updated int64 `json:"updated" bson:"updated"` - AppID string `json:"app_id" bson:"app_id,omitempty"` - TestName string `json:"test_name" bson:"test_name,omitempty"` - Deps []map[string]models.FetchResponse `json:"deps" bson:"deps,omitempty"` -} - -func (req *BrowserMockReq) Bind(r *http.Request) error { - if req.ID == "" { - req.ID = uuid.New().String() - } - if req.Created == 0 { - req.Created = time.Now().Unix() - } - if req.Updated == 0 { - req.Updated = time.Now().Unix() - } - return nil -} diff --git a/http/regression/helpers.go b/http/regression/helpers.go deleted file mode 100644 index a870e9f63..000000000 --- a/http/regression/helpers.go +++ /dev/null @@ -1,30 +0,0 @@ -package regression - -import ( - "net/http" - - "github.com/go-chi/render" -) - -func ErrInvalidRequest(err error) render.Renderer { - return &ErrResponse{ - Err: err, - HTTPStatusCode: 400, - StatusText: "Invalid request.", - ErrorText: err.Error(), - } -} - -type ErrResponse struct { - Err error `json:"-"` // low-level runtime error - HTTPStatusCode int `json:"-"` // http response status code - - StatusText string `json:"status"` // ddb-level status message - AppCode int64 `json:"code,omitempty"` // application-specific error code - ErrorText string `json:"error,omitempty"` // application-level error message, for debugging -} - -func (e *ErrResponse) Render(w http.ResponseWriter, r *http.Request) error { - render.Status(r, e.HTTPStatusCode) - return nil -} diff --git a/http/regression/regression.go b/http/regression/regression.go deleted file mode 100644 index 5676ac74a..000000000 --- a/http/regression/regression.go +++ /dev/null @@ -1,301 +0,0 @@ -package regression - -import ( - "context" - "errors" - "fmt" - "net/http" - "strconv" - "time" - - "github.com/go-chi/chi" - "github.com/go-chi/render" - "github.com/google/uuid" - - "go.keploy.io/server/graph" - "go.keploy.io/server/pkg/models" - regression2 "go.keploy.io/server/pkg/service/regression" - - // "go.keploy.io/server/pkg/service/run" - tcSvc "go.keploy.io/server/pkg/service/testCase" - "go.uber.org/zap" -) - -func New(r chi.Router, logger *zap.Logger, svc regression2.Service, tc tcSvc.Service, testExport bool, testReportPath string) { - s := ®ression{ - logger: logger, - svc: svc, - testExport: testExport, - testReportPath: testReportPath, - tcSvc: tc, - } - - r.Route("/regression", func(r chi.Router) { - r.Route("/testcase", func(r chi.Router) { - r.Get("/{id}", s.GetTC) - r.Get("/", s.GetTCS) - r.Post("/", s.PostTC) - }) - r.Post("/test", s.Test) - r.Post("/denoise", s.DeNoise) - r.Get("/start", s.Start) - r.Get("/end", s.End) - - //r.Get("/search", searchArticles) // GET /articles/search - }) -} - -type regression struct { - testExport bool - testReportPath string - logger *zap.Logger - svc regression2.Service - tcSvc tcSvc.Service -} - -func (rg *regression) End(w http.ResponseWriter, r *http.Request) { - id := r.URL.Query().Get("id") - status := models.TestRunStatus(r.URL.Query().Get("status")) - stat := models.TestRunStatusFailed - if status == "true" { - stat = models.TestRunStatusPassed - } - - var ( - err error - now = time.Now().Unix() - ) - - err = rg.svc.PutTest(r.Context(), models.TestRun{ - ID: id, - Updated: now, - Status: stat, - }, rg.testExport, id, "", "", rg.testReportPath, 0) - if err != nil { - render.Render(w, r, ErrInvalidRequest(err)) - return - } - render.Status(r, http.StatusOK) -} - -func (rg *regression) Start(w http.ResponseWriter, r *http.Request) { - t := r.URL.Query().Get("total") - testCasePath := r.URL.Query().Get("testCasePath") - mockPath := r.URL.Query().Get("mockPath") - total, err := strconv.Atoi(t) - if err != nil { - render.Render(w, r, ErrInvalidRequest(err)) - return - } - app := rg.getMeta(w, r, true) - if app == "" { - return - } - id := uuid.New().String() - now := time.Now().Unix() - - err = rg.svc.PutTest(r.Context(), models.TestRun{ - ID: id, - Created: now, - Updated: now, - Status: models.TestRunStatusRunning, - CID: graph.DEFAULT_COMPANY, - App: app, - User: graph.DEFAULT_USER, - Total: total, - }, rg.testExport, id, testCasePath, mockPath, rg.testReportPath, total) - if err != nil { - render.Render(w, r, ErrInvalidRequest(err)) - return - } - render.Status(r, http.StatusOK) - render.JSON(w, r, map[string]string{ - "id": id, - }) - -} - -func (rg *regression) GetTC(w http.ResponseWriter, r *http.Request) { - id := chi.URLParam(r, "id") - app := rg.getMeta(w, r, false) - tcs, err := rg.tcSvc.Get(r.Context(), graph.DEFAULT_COMPANY, app, id) - if err != nil { - render.Render(w, r, ErrInvalidRequest(err)) - return - } - render.Status(r, http.StatusOK) - render.JSON(w, r, tcs) - -} - -func (rg *regression) getMeta(w http.ResponseWriter, r *http.Request, appRequired bool) string { - app := r.URL.Query().Get("app") - if app == "" && appRequired { - rg.logger.Error("request for fetching testcases should include app id") - render.Render(w, r, ErrInvalidRequest(errors.New("missing app id"))) - return "" - } - return app -} - -func (rg *regression) GetTCS(w http.ResponseWriter, r *http.Request) { - app := rg.getMeta(w, r, true) - if app == "" { - return - } - testCasePath := r.URL.Query().Get("testCasePath") - mockPath := r.URL.Query().Get("mockPath") - offsetStr := r.URL.Query().Get("offset") - limitStr := r.URL.Query().Get("limit") - tcsType := r.URL.Query().Get("reqType") - - var ( - offset int - limit int - err error - tcs []models.TestCase - eof bool = rg.testExport - ) - if offsetStr != "" { - offset, err = strconv.Atoi(offsetStr) - if err != nil { - rg.logger.Error("request for fetching testcases in converting offset to integer") - } - } - if limitStr != "" { - limit, err = strconv.Atoi(limitStr) - if err != nil { - rg.logger.Error("request for fetching testcases in converting limit to integer") - } - } - - // fetch all types of testcase - tcs, err = rg.tcSvc.GetAll(r.Context(), graph.DEFAULT_COMPANY, app, &offset, &limit, testCasePath, mockPath, tcsType) - - if err != nil { - render.Render(w, r, ErrInvalidRequest(err)) - return - } - render.Status(r, http.StatusOK) - // In test-export, eof is true to stop the infinite for loop in sdk - w.Header().Set("EOF", fmt.Sprintf("%v", eof)) - render.JSON(w, r, tcs) - -} - -func (rg *regression) PostTC(w http.ResponseWriter, r *http.Request) { - data := &models.TestCaseReq{} - var ( - inserted []string - err error - ) - if err := render.Bind(r, data); err != nil { - rg.logger.Error("failed to unmarshal testcase in PostTC", zap.Error(err)) - render.Render(w, r, ErrInvalidRequest(err)) - return - } - now := time.Now().UTC().Unix() - inserted, err = rg.tcSvc.Insert(r.Context(), []models.TestCase{{ - ID: uuid.New().String(), - Created: now, - Updated: now, - Captured: data.Captured, - URI: data.URI, - AppID: data.AppID, - HttpReq: data.HttpReq, - HttpResp: data.HttpResp, - GrpcReq: data.GrpcReq, - GrpcResp: data.GrpcResp, - Mocks: data.Mocks, - Deps: data.Deps, - Type: string(data.Type), - }}, data.TestCasePath, data.MockPath, graph.DEFAULT_COMPANY, data.Remove, data.Replace) - if err != nil { - rg.logger.Error("error putting testcase", zap.Error(err)) - render.Render(w, r, ErrInvalidRequest(err)) - return - } - - if len(inserted) == 0 { - rg.logger.Error("unknown failure while inserting testcase") - render.Render(w, r, ErrInvalidRequest(err)) - return - } - - render.Status(r, http.StatusOK) - render.JSON(w, r, map[string]string{"id": inserted[0]}) - -} - -func (rg *regression) DeNoise(w http.ResponseWriter, r *http.Request) { - // key := r.Header.Get("key") - // if key == "" { - // rg.logger.Error("missing api key") - // render.Render(w, r, ErrInvalidRequest(errors.New("missing api key"))) - // return - // } - - data := &models.TestReq{} - var ( - err error - body string - tcsType string = string(models.HTTP) - ) - if err = render.Bind(r, data); err != nil { - rg.logger.Error("error parsing request", zap.Error(err)) - render.Render(w, r, ErrInvalidRequest(err)) - return - } - switch data.Type { - case models.GRPC_EXPORT: - body = data.GrpcResp.Body - tcsType = string(models.GRPC_EXPORT) - default: - // default tcsType is Http. - body = data.Resp.Body - tcsType = string(models.HTTP) - } - - err = rg.svc.DeNoise(r.Context(), graph.DEFAULT_COMPANY, data.ID, data.AppID, body, data.Resp.Header, data.TestCasePath, tcsType) - if err != nil { - rg.logger.Error("error putting testcase", zap.Error(err)) - render.Render(w, r, ErrInvalidRequest(err)) - return - } - - render.Status(r, http.StatusOK) - -} - -func (rg *regression) Test(w http.ResponseWriter, r *http.Request) { - - data := &models.TestReq{} - var ( - pass bool - err error - ctx context.Context - ) - if err = render.Bind(r, data); err != nil { - rg.logger.Error("error parsing request", zap.Error(err)) - render.Render(w, r, ErrInvalidRequest(err)) - return - } - ctx = r.Context() - switch data.Type { - case models.GRPC_EXPORT: - pass, err = rg.svc.TestGrpc(ctx, data.GrpcResp, graph.DEFAULT_COMPANY, data.AppID, data.RunID, data.ID, data.TestCasePath, data.MockPath) - default: - // default tcsType is Http. - pass, err = rg.svc.Test(ctx, graph.DEFAULT_COMPANY, data.AppID, data.RunID, data.ID, data.TestCasePath, data.MockPath, data.Resp) - } - - if err != nil { - rg.logger.Error("error putting testcase", zap.Error(err)) - render.Render(w, r, ErrInvalidRequest(err)) - return - } - - render.Status(r, http.StatusOK) - render.JSON(w, r, map[string]bool{"pass": pass}) - -} diff --git a/http/regression/request.go b/http/regression/request.go deleted file mode 100644 index f76b02bf1..000000000 --- a/http/regression/request.go +++ /dev/null @@ -1,19 +0,0 @@ -package regression - -import ( - "go.keploy.io/server/pkg/models" -) - -// TestCaseReq is a struct for Http API request JSON body. -// -// Deprecated: TestCaseReq is shifted to "pkg/models" pkg. This struct is not -// removed from "http/regression" package because of backward compatibilty. -// Since, earlier versions before v0.8.3 of go-sdk depends on regression package. -type TestCaseReq = models.TestCaseReq - -// TestReq is a struct for Http API request JSON body. -// -// Deprecated: TestReq is shifted to "pkg/models" pkg. This struct is not removed from -// "http/regression" package because of backward compatibilty. Since, earlier versions -// before v0.8.3 of go-sdk depends on regression package -type TestReq = models.TestReq diff --git a/keploy.sh b/keploy.sh new file mode 100644 index 000000000..c3b6d2646 --- /dev/null +++ b/keploy.sh @@ -0,0 +1,219 @@ +#!/bin/bash + +installKeploy (){ + IS_CI=false + for arg in "$@" + do + case $arg in + -isCI) + IS_CI=true + shift + ;; + *) + ;; + esac + done + + install_keploy_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/keploybin + + set_alias 'sudo -E env PATH="$PATH" keploybin' + + check_docker_status_for_linux + dockerStatus=$? + if [ "$dockerStatus" -eq 0 ]; then + return + fi + add_network + } + + check_sudo(){ + if groups | grep -q '\bdocker\b'; then + return 1 + else + return 0 + fi + } + + install_keploy_amd() { + 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/keploybin + + set_alias 'sudo -E env PATH="$PATH" keploybin' + + check_docker_status_for_linux + dockerStatus=$? + if [ "$dockerStatus" -eq 0 ]; then + return + fi + add_network + } + + append_to_rc() { + last_byte=$(tail -c 1 $2) + if [[ "$last_byte" != "" ]]; then + echo -e "\n$1" >> $2 + else + echo "$1" >> $2 + fi + source $2 + } + + # Get the alias to set and set it + set_alias() { + # Check if the command is for docker or not + if [[ "$1" == *"docker"* ]]; then + # Check if the user is a member of the docker group + check_sudo + sudoCheck=$? + if [ "$sudoCheck" -eq 0 ] && [ $OS_NAME = "Linux" ]; then + # Add sudo to the alias. + ALIAS_CMD="alias keploy='sudo $1'" + else + ALIAS_CMD="alias keploy='$1'" + fi + else + ALIAS_CMD="alias keploy='$1'" + fi + current_shell="$(basename "$SHELL")" + if [[ "$current_shell" = "zsh" || "$current_shell" = "-zsh" ]]; then + if [ -f ~/.zshrc ]; then + if grep -q "alias keploy=" ~/.zshrc; then + if [ "$OS_NAME" = "Darwin" ]; then + sed -i '' '/alias keploy/d' ~/.zshrc + else + sed -i '/alias keploy/d' ~/.zshrc + fi + fi + append_to_rc "$ALIAS_CMD" ~/.zshrc + else + alias keploy="$1" + fi + elif [[ "$current_shell" = "bash" || "$current_shell" = "-bash" ]]; then + if [ -f ~/.bashrc ]; then + if grep -q "alias keploy=" ~/.bashrc; then + if [ "$OS_NAME" = "Darwin" ]; then + sed -i '' '/alias keploy/d' ~/.bashrc + else + sed -i '/alias keploy/d' ~/.bashrc + fi + fi + append_to_rc "$ALIAS_CMD" ~/.bashrc + else + alias keploy="$1" + fi + else + alias keploy="$1" + fi + } + + check_docker_status_for_linux() { + check_sudo + sudoCheck=$? + network_alias="" + if [ "$sudoCheck" -eq 0 ]; then + # Add sudo to docker + network_alias="sudo" + fi + if ! $network_alias which docker &> /dev/null; then + echo -n "Docker not found on device, please install docker and reinstall keploy if you have applications running on docker" + return 0 + fi + if ! $network_alias docker info &> /dev/null; then + echo "Please start Docker and reinstall keploy if you have applications running on docker" + return 0 + fi + return 1 + } + + check_docker_status_for_Darwin() { + check_sudo + sudoCheck=$? + network_alias="" + if [ "$sudoCheck" -eq 0 ]; then + # Add sudo to docker + network_alias="sudo" + fi + if ! $network_alias which docker &> /dev/null; then + echo -n "Docker not found on device, please install docker to use Keploy" + return 0 + fi + # Check if docker is running + if ! $network_alias docker info &> /dev/null; then + echo "Keploy only supports intercepting and replaying docker containers on macOS, and requires Docker to be installed and running. Please start Docker and try again." + return 0 + fi + return 1 + } + + add_network() { + if ! $network_alias docker network ls | grep -q 'keploy-network'; then + $network_alias docker network create keploy-network + fi + } + + install_docker() { + if [ "$OS_NAME" = "Darwin" ]; then + check_docker_status_for_Darwin + dockerStatus=$? + if [ "$dockerStatus" -eq 0 ]; then + return + fi + add_network + if ! docker volume inspect debugfs &>/dev/null; then + docker volume create --driver local --opt type=debugfs --opt device=debugfs debugfs + fi + set_alias '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 debugfs:/sys/kernel/debug:rw -v /sys/fs/bpf:/sys/fs/bpf -v /var/run/docker.sock:/var/run/docker.sock -v '"$HOME"'/.keploy:/root/.keploy --rm ghcr.io/keploy/keploy' + else + set_alias '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 -v '"$HOME"'/.keploy:/root/.keploy --rm ghcr.io/keploy/keploy' + fi +} + + + ARCH=$(uname -m) + + if [ "$IS_CI" = false ]; then + OS_NAME="$(uname -s)" + if [ "$OS_NAME" = "Darwin" ]; then + install_docker + return + elif [ "$OS_NAME" = "Linux" ]; then + if ! sudo mountpoint -q /sys/kernel/debug; then + sudo mount -t debugfs debugfs /sys/kernel/debug + fi + if [ "$ARCH" = "x86_64" ]; then + install_keploy_amd + elif [ "$ARCH" = "aarch64" ]; then + install_keploy_arm + else + echo "Unsupported architecture: $ARCH" + return + fi + elif [[ "$OS_NAME" == MINGW32_NT* ]]; then + echo "\e]8;; https://pureinfotech.com/install-windows-subsystem-linux-2-windows-10\aWindows not supported please run on WSL2\e]8;;\a" + elif [[ "$OS_NAME" == MINGW64_NT* ]]; then + echo "\e]8;; https://pureinfotech.com/install-windows-subsystem-linux-2-windows-10\aWindows not supported please run on WSL2\e]8;;\a" + else + echo "Unknown OS, install Linux to run Keploy" + fi + else + if [ "$ARCH" = "x86_64" ]; then + install_keploy_amd + elif [ "$ARCH" = "aarch64" ]; then + install_keploy_arm + else + echo "Unsupported architecture: $ARCH" + return + fi + fi +} + +installKeploy + +if command -v keploy &> /dev/null; then + keploy example + rm keploy.sh +fi \ No newline at end of file diff --git a/main.go b/main.go new file mode 100755 index 000000000..257fb4591 --- /dev/null +++ b/main.go @@ -0,0 +1,72 @@ +// Package main is the entry point for the keploy application. +package main + +import ( + "context" + "fmt" + "os" + + "go.keploy.io/server/v2/cli" + "go.keploy.io/server/v2/cli/provider" + "go.keploy.io/server/v2/config" + "go.keploy.io/server/v2/pkg/platform/yaml/configdb" + "go.keploy.io/server/v2/utils" + "go.keploy.io/server/v2/utils/log" +) + +// version is the version of the server and will be injected during build by ldflags, same with dsn +// see https://goreleaser.com/customization/build/ + +var version string +var dsn string + +const logo string = ` + β–“β–ˆβ–ˆβ–“β–„ + β–“β–“β–“β–“β–ˆβ–ˆβ–“β–ˆβ–“β–„ + β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“β–’ + β–€β–“β–“β–ˆβ–ˆβ–ˆβ–„ β–„β–„ β–„ β–Œ + β–„β–Œβ–Œβ–“β–“β–ˆβ–ˆβ–ˆβ–ˆβ–„ β–ˆβ–ˆ β–“β–ˆβ–€ β–„β–Œβ–€β–„ β–“β–“β–Œβ–„ β–“β–ˆ β–„β–Œβ–“β–“β–Œβ–„ β–Œβ–Œ β–“ + β–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œβ–“β–“ β–ˆβ–ˆβ–“β–ˆβ–„ β–“β–ˆβ–„β–“β–“ β–β–ˆβ–Œ β–ˆβ–ˆ β–“β–ˆ β–ˆβ–Œ β–ˆβ–ˆ β–ˆβ–Œ β–ˆβ–“ + β–“β–“β–“β–“β–€β–€β–€β–€β–“β–“β–“β–“β–“β–“β–Œ β–ˆβ–ˆ β–ˆβ–“ β–“β–Œβ–„β–„ β–β–ˆβ–“β–„β–“β–ˆβ–€ β–ˆβ–“β–ˆ β–€β–ˆβ–„β–„β–ˆβ–€ β–ˆβ–“β–ˆ + β–“β–Œ β–β–ˆβ–Œ β–ˆβ–Œ + β–“ +` + +func main() { + printLogo() + ctx := utils.NewCtx() + start(ctx) +} + +func printLogo() { + if version == "" { + version = "2-dev" + } + utils.Version = version + if binaryToDocker := os.Getenv("BINARY_TO_DOCKER"); binaryToDocker != "true" { + fmt.Println(logo, " ") + fmt.Printf("version: %v\n\n", version) + } +} + +func start(ctx context.Context) { + logger, err := log.New() + if err != nil { + fmt.Println("Failed to start the logger for the CLI", err) + return + } + defer utils.DeleteLogs(logger) + defer utils.Recover(logger) + configDb := configdb.NewConfigDb(logger) + if dsn != "" { + utils.SentryInit(logger, dsn) + //logger = utils.ModifyToSentryLogger(ctx, logger, sentry.CurrentHub().Client(), configDb) + } + conf := config.New() + svcProvider := provider.NewServiceProvider(logger, configDb, conf) + cmdConfigurator := provider.NewCmdConfigurator(logger, conf) + rootCmd := cli.Root(ctx, logger, svcProvider, cmdConfigurator) + if err := rootCmd.Execute(); err != nil { + os.Exit(1) + } +} diff --git a/pkg/README.md b/pkg/README.md new file mode 100755 index 000000000..7d0c1a553 --- /dev/null +++ b/pkg/README.md @@ -0,0 +1,6 @@ +# PKG Documentation + +This package comprises interface methods and Go structs, +which can be utilized by external applications. It's +employed to execute logic and store data for the CLI +commands. \ No newline at end of file diff --git a/pkg/core/app/app.go b/pkg/core/app/app.go new file mode 100644 index 000000000..924398c61 --- /dev/null +++ b/pkg/core/app/app.go @@ -0,0 +1,529 @@ +// Package app provides functionality for managing applications. +package app + +import ( + "context" + "errors" + "fmt" + "os" + "os/exec" + "syscall" + "time" + + "golang.org/x/sync/errgroup" + + "go.keploy.io/server/v2/pkg/models" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" + "go.keploy.io/server/v2/pkg/core/app/docker" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func NewApp(logger *zap.Logger, id uint64, cmd string, opts Options) *App { + app := &App{ + logger: logger, + id: id, + cmd: cmd, + kind: utils.FindDockerCmd(cmd), + keployContainer: "keploy-v2", + container: opts.Container, + containerDelay: opts.DockerDelay, + containerNetwork: opts.DockerNetwork, + } + return app +} + +type App struct { + logger *zap.Logger + docker docker.Client + id uint64 + cmd string + kind utils.CmdType + containerDelay time.Duration + container string + containerNetwork string + containerIPv4 string + keployNetwork string + keployContainer string + keployIPv4 string + inodeChan chan uint64 +} + +type Options struct { + // canExit disables any error returned if the app exits by itself. + //CanExit bool + Container string + DockerDelay time.Duration + DockerNetwork string +} + +func (a *App) Setup(_ context.Context) error { + d, err := docker.New(a.logger) + if err != nil { + return err + } + a.docker = d + switch a.kind { + case utils.Docker: + err := a.SetupDocker() + if err != nil { + return err + } + case utils.DockerCompose: + err = a.SetupCompose() + if err != nil { + return err + } + default: + // setup native binary + } + return nil +} + +func (a *App) KeployIPv4Addr() string { + return a.keployIPv4 +} + +func (a *App) ContainerIPv4Addr() string { + return a.containerIPv4 +} + +func (a *App) SetupDocker() error { + var err error + cont, net, err := parseDockerCmd(a.cmd) + if err != nil { + utils.LogError(a.logger, err, "failed to parse container name from given docker command", zap.String("cmd", a.cmd)) + return err + } + if a.container == "" { + a.container = cont + } else if a.container != cont { + a.logger.Warn(fmt.Sprintf("given app container:(%v) is different from parsed app container:(%v)", a.container, cont)) + } + + if a.containerNetwork == "" { + a.containerNetwork = net + } else if a.containerNetwork != net { + a.logger.Warn(fmt.Sprintf("given docker network:(%v) is different from parsed docker network:(%v)", a.containerNetwork, net)) + } + + //injecting appNetwork to keploy. + err = a.injectNetwork(a.containerNetwork) + if err != nil { + utils.LogError(a.logger, err, fmt.Sprintf("failed to inject network:%v to the keploy container", a.containerNetwork)) + return err + } + return nil +} + +func (a *App) SetupCompose() error { + if a.container == "" { + utils.LogError(a.logger, nil, "container name not found", zap.String("AppCmd", a.cmd)) + return errors.New("container name not found") + } + a.logger.Info("keploy requires docker compose containers to be run with external network") + //finding the user docker-compose file in the current directory. + // TODO currently we just return the first default docker-compose file found in the current directory + // we should add support for multiple docker-compose files by either parsing cmd for path + // or by asking the user to provide the path + path := findComposeFile() + if path == "" { + return errors.New("can't find the docker compose file of user. Are you in the right directory? ") + } + // kdocker-compose.yaml file will be run instead of the user docker-compose.yaml file acc to below cases + newPath := "docker-compose-tmp.yaml" + + compose, err := a.docker.ReadComposeFile(path) + if err != nil { + utils.LogError(a.logger, err, "failed to read the compose file") + return err + } + composeChanged := false + + // Check if docker compose file uses relative file names for bind mounts + ok := a.docker.HasRelativePath(compose) + if ok { + err = a.docker.ForceAbsolutePath(compose, path) + if err != nil { + utils.LogError(a.logger, nil, "failed to convert relative paths to absolute paths in volume mounts in docker compose file") + return err + } + composeChanged = true + } + + // Checking info about the network and whether its external:true + info := a.docker.GetNetworkInfo(compose) + + if info == nil { + info, err = a.docker.SetKeployNetwork(compose) + if err != nil { + utils.LogError(a.logger, nil, "failed to set default network in the compose file", zap.String("network", a.keployNetwork)) + return err + } + composeChanged = true + } + + if !info.External { + err = a.docker.MakeNetworkExternal(compose) + if err != nil { + utils.LogError(a.logger, nil, "failed to make the network external in the compose file", zap.String("network", info.Name)) + return fmt.Errorf("error while updating network to external: %v", err) + } + composeChanged = true + } + + a.keployNetwork = info.Name + + ok, err = a.docker.NetworkExists(a.keployNetwork) + if err != nil { + utils.LogError(a.logger, nil, "failed to find default network", zap.String("network", a.keployNetwork)) + return err + } + + //if keploy-network doesn't exist locally then create it + if !ok { + err = a.docker.CreateNetwork(a.keployNetwork) + if err != nil { + utils.LogError(a.logger, nil, "failed to create default network", zap.String("network", a.keployNetwork)) + return err + } + } + + if composeChanged { + err = a.docker.WriteComposeFile(compose, newPath) + if err != nil { + utils.LogError(a.logger, nil, "failed to write the compose file", zap.String("path", newPath)) + } + a.logger.Info("Created new docker-compose for keploy internal use", zap.String("path", newPath)) + //Now replace the running command to run the kdocker-compose.yaml file instead of user docker compose file. + a.cmd = modifyDockerComposeCommand(a.cmd, newPath) + } + + if a.containerNetwork == "" { + a.containerNetwork = a.keployNetwork + } + err = a.injectNetwork(a.containerNetwork) + if err != nil { + utils.LogError(a.logger, err, fmt.Sprintf("failed to inject network:%v to the keploy container", a.containerNetwork)) + return err + } + return nil +} + +func (a *App) Kind(_ context.Context) utils.CmdType { + return a.kind +} + +// injectNetwork attaches the given network to the keploy container +// and also sends the keploy container ip of the new network interface to the kernel space +func (a *App) injectNetwork(network string) error { + // inject the network to the keploy container + a.logger.Info(fmt.Sprintf("trying to inject network:%v to the keploy container", network)) + err := a.docker.AttachNetwork(a.keployContainer, []string{network}) + if err != nil { + utils.LogError(a.logger, nil, "failed to inject network to the keploy container") + return err + } + + a.keployNetwork = network + + //sending new proxy ip to kernel, since dynamically injected new network has different ip for keploy. + inspect, err := a.docker.ContainerInspect(context.Background(), a.keployContainer) + if err != nil { + utils.LogError(a.logger, nil, fmt.Sprintf("failed to get inspect keploy container:%v", inspect)) + return err + } + + keployNetworks := inspect.NetworkSettings.Networks + //Here we considering that the application would use only one custom network. + //TODO: handle for application having multiple custom networks + //TODO: check the logic for correctness + for n, settings := range keployNetworks { + if n == network { + a.keployIPv4 = settings.IPAddress + a.logger.Info("Successfully injected network to the keploy container", zap.Any("Keploy container", a.keployContainer), zap.Any("appNetwork", network)) + return nil + } + //if networkName != "bridge" { + // network = networkName + // newProxyIpString = networkSettings.IPAddress + // a.logger.Debug(fmt.Sprintf("Network Name: %s, New Proxy IP: %s\n", networkName, networkSettings.IPAddress)) + //} + } + return fmt.Errorf("failed to find the network:%v in the keploy container", network) +} + +func (a *App) handleDockerEvents(ctx context.Context, e events.Message) (bool, error) { + var inode uint64 + var iPAddress string + switch e.Action { + case "start": + // Fetch container details by inspecting using container ID to check if container is created + info, err := a.docker.ContainerInspect(ctx, e.ID) + if err != nil { + a.logger.Debug("failed to inspect container by container Id", zap.Error(err)) + return false, err + } + + // Check if the container's name matches the desired name + if info.Name != "/"+a.container { + a.logger.Debug("ignoring container creation for unrelated container", zap.String("containerName", info.Name)) + return false, nil + } + + // Set Docker Container ID + a.docker.SetContainerID(e.ID) + a.logger.Debug("checking for container pid", zap.Any("containerDetails.State.Pid", info.State.Pid)) + if info.State.Pid == 0 { + return false, errors.New("failed to get the pid of the container") + } + a.logger.Debug("", zap.Any("containerDetails.State.Pid", info.State.Pid), zap.String("containerName", a.container)) + inode, err = getInode(info.State.Pid) + if err != nil { + return false, err + } + + a.inodeChan <- inode + a.logger.Debug("container started and successfully extracted inode", zap.Any("inode", inode)) + if info.NetworkSettings == nil || info.NetworkSettings.Networks == nil { + a.logger.Debug("container network settings not available", zap.Any("containerDetails.NetworkSettings", info.NetworkSettings)) + return false, nil + } + + n, ok := info.NetworkSettings.Networks[a.containerNetwork] + if !ok || n == nil { + a.logger.Debug("container network not found", zap.Any("containerDetails.NetworkSettings.Networks", info.NetworkSettings.Networks)) + return false, fmt.Errorf("container network not found: %s", fmt.Sprintf("%+v", info.NetworkSettings.Networks)) + } + a.containerIPv4 = n.IPAddress + iPAddress = n.IPAddress + } + return inode != 0 && iPAddress != "", nil +} + +func (a *App) getDockerMeta(ctx context.Context) <-chan error { + // listen for the docker daemon events + defer a.logger.Debug("exiting from goroutine of docker daemon event listener") + + errCh := make(chan error, 1) + timer := time.NewTimer(a.containerDelay) + logTicker := time.NewTicker(1 * time.Second) + defer logTicker.Stop() + + eventFilter := filters.NewArgs( + filters.KeyValuePair{Key: "type", Value: "container"}, + filters.KeyValuePair{Key: "type", Value: "network"}, + filters.KeyValuePair{Key: "action", Value: "create"}, + filters.KeyValuePair{Key: "action", Value: "connect"}, + filters.KeyValuePair{Key: "action", Value: "start"}, + ) + + messages, errCh2 := a.docker.Events(ctx, types.EventsOptions{ + Filters: eventFilter, + }) + + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + errCh <- errors.New("failed to get the error group from the context") + return errCh + } + g.Go(func() error { + defer utils.Recover(a.logger) + defer close(errCh) + for { + select { + case <-timer.C: + errCh <- errors.New("timeout waiting for the container to start") + return nil + case <-ctx.Done(): + a.logger.Debug("context cancelled, stopping the listener for container creation event.") + errCh <- ctx.Err() + return nil + case e := <-messages: + eventCaptured, err := a.handleDockerEvents(ctx, e) + if err != nil { + errCh <- err + return nil + } else if eventCaptured { + return nil + } + // for debugging purposes + case <-logTicker.C: + a.logger.Debug("still waiting for the container to start.", zap.String("containerName", a.container)) + return nil + case err := <-errCh2: + errCh <- err + return nil + } + } + }) + return errCh +} + +func (a *App) runDocker(ctx context.Context) models.AppError { + // if a.cmd is empty, it means the user wants to run the application manually, + // so we don't need to run the application in a goroutine + if a.cmd == "" { + return models.AppError{} + } + + g, ctx := errgroup.WithContext(ctx) + ctx = context.WithValue(ctx, models.ErrGroupKey, g) + + defer func() { + err := g.Wait() + if err != nil { + utils.LogError(a.logger, err, "failed to run dockerized app") + } + }() + + errCh := make(chan error) + // listen for the "create container" event in order to send the inode of the container to the kernel + errCh2 := a.getDockerMeta(ctx) + + g.Go(func() error { + defer utils.Recover(a.logger) + defer close(errCh) + err := a.run(ctx) + if err.Err != nil { + utils.LogError(a.logger, err.Err, "Application stopped with the error") + errCh <- err.Err + } + return nil + }) + + select { + case err := <-errCh: + if err != nil && errors.Is(err, context.Canceled) { + return models.AppError{AppErrorType: models.ErrCtxCanceled, Err: nil} + } + return models.AppError{AppErrorType: models.ErrInternal, Err: err} + case err := <-errCh2: + if err != nil && errors.Is(err, context.Canceled) { + return models.AppError{AppErrorType: models.ErrCtxCanceled, Err: nil} + } + return models.AppError{AppErrorType: models.ErrInternal, Err: err} + case <-ctx.Done(): + return models.AppError{AppErrorType: models.ErrCtxCanceled, Err: nil} + } +} + +func (a *App) Run(ctx context.Context, inodeChan chan uint64) models.AppError { + a.inodeChan = inodeChan + + if a.kind == utils.DockerCompose || a.kind == utils.Docker { + return a.runDocker(ctx) + } + return a.run(ctx) +} + +func (a *App) run(ctx context.Context) models.AppError { + // Run the app as the user who invoked sudo + userCmd := a.cmd + username := os.Getenv("SUDO_USER") + + if utils.FindDockerCmd(a.cmd) == utils.Docker { + userCmd = utils.EnsureRmBeforeName(userCmd) + } + + cmd := exec.CommandContext(ctx, "sh", "-c", userCmd) + if username != "" { + // print all environment variables + a.logger.Debug("env inherited from the cmd", zap.Any("env", os.Environ())) + // Run the command as the user who invoked sudo to preserve the user environment variables and PATH + cmd = exec.CommandContext(ctx, "sudo", "-E", "-u", os.Getenv("SUDO_USER"), "env", "PATH="+os.Getenv("PATH"), "sh", "-c", userCmd) + } + + // Set the cancel function for the command + cmd.Cancel = func() error { + + return utils.InterruptProcessTree(cmd, a.logger, cmd.Process.Pid, syscall.SIGINT) + } + // wait after sending the interrupt signal, before sending the kill signal + cmd.WaitDelay = 10 * time.Second + + cmd.SysProcAttr = &syscall.SysProcAttr{ + Setpgid: true, + } + + // Set the output of the command + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + a.logger.Debug("", zap.Any("executing cli", cmd.String())) + + err := cmd.Start() + if err != nil { + return models.AppError{AppErrorType: models.ErrCommandError, Err: err} + } + + err = cmd.Wait() + select { + case <-ctx.Done(): + a.logger.Debug("context cancelled, error while waiting for the app to exit", zap.Error(ctx.Err())) + return models.AppError{AppErrorType: models.ErrCtxCanceled, Err: nil} + default: + if err != nil { + return models.AppError{AppErrorType: models.ErrUnExpected, Err: err} + } + return models.AppError{AppErrorType: models.ErrAppStopped, Err: nil} + } +} + +//if a.docker.GetContainerID() == "" { +// a.logger.Debug("still waiting for the container to start.", zap.String("containerName", a.container)) +// continue +//} +////Inspecting the application container again since the ip and pid takes some time to be linked to the container. +//info, err := a.docker.ContainerInspect(ctx, a.container) +//if err != nil { +// return err +//} +// +//a.logger.Debug("checking for container pid", zap.Any("containerDetails.State.Pid", info.State.Pid)) +//if info.State.Pid == 0 { +// a.logger.Debug("container not yet started", zap.Any("containerDetails.State.Pid", info.State.Pid)) +// continue +//} +//a.logger.Debug("", zap.Any("containerDetails.State.Pid", info.State.Pid), zap.String("containerName", a.container)) +//a.inode,err = getInode(info.State.Pid) +//if err != nil { +// return err +//} +//if info.NetworkSettings == nil || info.NetworkSettings.Networks == nil { +// a.logger.Debug("container network settings not available", zap.Any("containerDetails.NetworkSettings", info.NetworkSettings)) +// continue +//} +// +//n, ok := info.NetworkSettings.Networks[a.containerNetwork] +//if !ok || n == nil { +// return errors.New("container network not found") +//} +//a.keployIPv4 = n.IPAddress +//a.logger.Info("container started successfully", zap.Any("", info.NetworkSettings.Networks)) +//return + +//case e := <-messages: +// if e.Type != events.ContainerEventType || e.Action != "start" { +// continue +// } +// +// // Fetch container details by inspecting using container ID to check if container is created +// c, err := a.docker.ContainerInspect(ctx, e.ID) +// if err != nil { +// a.logger.Debug("failed to inspect container by container Id", zap.Error(err)) +// return err +// } +// +// // Check if the container's name matches the desired name +// if c.Name != "/"+a.container { +// a.logger.Debug("ignoring container creation for unrelated container", zap.String("containerName", c.Name)) +// continue +// } +// // Set Docker Container ID +// a.docker.SetContainerID(e.ID) +// +// a.logger.Debug("container created for desired app", zap.Any("ID", e.ID)) diff --git a/pkg/core/app/docker/docker.go b/pkg/core/app/docker/docker.go new file mode 100755 index 000000000..b86ebcba4 --- /dev/null +++ b/pkg/core/app/docker/docker.go @@ -0,0 +1,520 @@ +// Package docker provides functionality for working with Docker containers. +package docker + +import ( + "context" + "fmt" + "os" + "path/filepath" + "time" + + nativeDockerClient "github.com/docker/docker/client" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "gopkg.in/yaml.v3" + + "github.com/docker/docker/api/types/network" + + "github.com/docker/docker/api/types" + dockerContainerPkg "github.com/docker/docker/api/types/container" +) + +const ( + defaultTimeoutForDockerQuery = 1 * time.Minute +) + +type Impl struct { + nativeDockerClient.APIClient + timeoutForDockerQuery time.Duration + logger *zap.Logger + containerID string +} + +func New(logger *zap.Logger) (Client, error) { + dockerClient, err := nativeDockerClient.NewClientWithOpts(nativeDockerClient.FromEnv, + nativeDockerClient.WithAPIVersionNegotiation()) + if err != nil { + return nil, err + } + return &Impl{ + APIClient: dockerClient, + timeoutForDockerQuery: defaultTimeoutForDockerQuery, + logger: logger, + }, nil +} + +// GetContainerID is a Getter function for containerID +func (idc *Impl) GetContainerID() string { + return idc.containerID +} + +// SetContainerID is a Setter function for containerID +func (idc *Impl) SetContainerID(containerID string) { + idc.containerID = containerID +} + +// ExtractNetworksForContainer returns the list of all the networks that the container is a part of. +// Note that if a user did not explicitly attach the container to a network, the Docker daemon attaches it +// to a network called "bridge". +func (idc *Impl) ExtractNetworksForContainer(containerName string) (map[string]*network.EndpointSettings, error) { + ctx, cancel := context.WithTimeout(context.Background(), idc.timeoutForDockerQuery) + defer cancel() + + containerJSON, err := idc.ContainerInspect(ctx, containerName) + if err != nil { + utils.LogError(idc.logger, err, "couldn't inspect container via the Docker API", zap.String("containerName", containerName)) + return nil, err + } + + if settings := containerJSON.NetworkSettings; settings != nil { + return settings.Networks, nil + } + // Docker attaches the container to "bridge" network by default. + // If the network list is empty, the docker daemon is possibly misbehaving, + // or the container is in a bad state. + utils.LogError(idc.logger, nil, "The network list for the given container is empty. This is unexpected.", zap.String("containerName", containerName)) + return nil, fmt.Errorf("the container is not attached to any network") +} + +func (idc *Impl) ConnectContainerToNetworks(containerName string, settings map[string]*network.EndpointSettings) error { + if settings == nil { + return fmt.Errorf("provided network settings is empty") + } + + existingNetworks, err := idc.ExtractNetworksForContainer(containerName) + if err != nil { + return fmt.Errorf("could not get existing networks for container %s", containerName) + } + + ctx, cancel := context.WithTimeout(context.Background(), idc.timeoutForDockerQuery) + defer cancel() + + for networkName, setting := range settings { + // If the container is already part of this network, skip it. + _, ok := existingNetworks[networkName] + if ok { + continue + } + + err := idc.NetworkConnect(ctx, networkName, containerName, setting) + if err != nil { + return err + } + } + + return nil +} + +func (idc *Impl) AttachNetwork(containerName string, networkNames []string) error { + if len(networkNames) == 0 { + return fmt.Errorf("provided network names list is empty") + } + + existingNetworks, err := idc.ExtractNetworksForContainer(containerName) + if err != nil { + return fmt.Errorf("could not get existing networks for container %s", containerName) + } + + ctx, cancel := context.WithTimeout(context.Background(), idc.timeoutForDockerQuery) + defer cancel() + + for _, networkName := range networkNames { + // If the container is already part of this network, skip it. + _, ok := existingNetworks[networkName] + if ok { + continue + } + + // As there are no specific settings, use nil for the settings parameter. + err := idc.NetworkConnect(ctx, networkName, containerName, nil) + if err != nil { + return err + } + } + + return nil +} + +// StopAndRemoveDockerContainer will Stop and Remove the docker container +func (idc *Impl) StopAndRemoveDockerContainer() error { + dockerClient := idc + containerID := idc.containerID + + container, err := dockerClient.ContainerInspect(context.Background(), containerID) + if err != nil { + return fmt.Errorf("failed to inspect the docker container: %w", err) + } + + if container.State.Status == "running" { + err = dockerClient.ContainerStop(context.Background(), containerID, dockerContainerPkg.StopOptions{}) + if err != nil { + return fmt.Errorf("failed to stop the docker container: %w", err) + } + } + + removeOptions := types.ContainerRemoveOptions{ + RemoveVolumes: true, + Force: true, + } + + err = dockerClient.ContainerRemove(context.Background(), containerID, removeOptions) + if err != nil { + return fmt.Errorf("failed to remove the docker container: %w", err) + } + + idc.logger.Debug("Docker Container stopped and removed successfully.") + + return nil +} + +// NetworkExists checks if the given network exists locally or not +func (idc *Impl) NetworkExists(networkName string) (bool, error) { + ctx, cancel := context.WithTimeout(context.Background(), idc.timeoutForDockerQuery) + defer cancel() + + // Retrieve all networks. + networks, err := idc.NetworkList(ctx, types.NetworkListOptions{}) + if err != nil { + return false, fmt.Errorf("error retrieving networks: %v", err) + } + + // Check if the specified network is in the list. + for _, network := range networks { + if network.Name == networkName { + return true, nil + } + } + + return false, nil +} + +// CreateNetwork creates a custom docker network of type bridge. +func (idc *Impl) CreateNetwork(networkName string) error { + ctx, cancel := context.WithTimeout(context.Background(), idc.timeoutForDockerQuery) + defer cancel() + + _, err := idc.NetworkCreate(ctx, networkName, types.NetworkCreate{ + Driver: "bridge", + }) + + return err +} + +// Compose structure to represent all the fields of a Docker Compose file +type Compose struct { + Version string `yaml:"version,omitempty"` + Services yaml.Node `yaml:"services,omitempty"` + Networks yaml.Node `yaml:"networks,omitempty"` + Volumes yaml.Node `yaml:"volumes,omitempty"` + Configs yaml.Node `yaml:"configs,omitempty"` + Secrets yaml.Node `yaml:"secrets,omitempty"` +} + +func (idc *Impl) ReadComposeFile(filePath string) (*Compose, error) { + data, err := os.ReadFile(filePath) + if err != nil { + return nil, err + } + + var compose Compose + err = yaml.Unmarshal(data, &compose) + if err != nil { + return nil, err + } + + return &compose, nil +} + +func (idc *Impl) WriteComposeFile(compose *Compose, path string) error { + data, err := yaml.Marshal(compose) + if err != nil { + return err + } + + // write data to file + + err = os.WriteFile(path, data, 0644) + if err != nil { + return err + } + return nil +} + +// HasRelativePath returns information about whether bind mounts if they are being used contain relative file names or not +func (idc *Impl) HasRelativePath(compose *Compose) bool { + if compose.Services.Content == nil { + return false + } + + for _, service := range compose.Services.Content { + for i, item := range service.Content { + + if i+1 >= len(service.Content) { + break + } + + if item.Value == "volumes" { + // volumeKeyNode := service.Content[i] or item + volumeValueNode := service.Content[i+1] + + // Loop over all the volume mounts + for _, volumeMount := range volumeValueNode.Content { + // If volume mount starts with ./ or ../ then it as a relative path so return true + if volumeMount.Kind == yaml.ScalarNode && (volumeMount.Value[:2] == "./" || volumeMount.Value[:3] == "../") { + return true + } + } + } + } + } + + return false + +} + +// GetNetworkInfo CheckNetworkInfo returns information about network name and also about whether the network is external or not in a docker-compose file. +func (idc *Impl) GetNetworkInfo(compose *Compose) *NetworkInfo { + if compose.Networks.Content == nil { + return nil + } + + var defaultNetwork string + + for i := 0; i < len(compose.Networks.Content); i += 2 { + if i+1 >= len(compose.Networks.Content) { + break + } + networkKeyNode := compose.Networks.Content[i] + networkValueNode := compose.Networks.Content[i+1] + + if defaultNetwork == "" { + defaultNetwork = networkKeyNode.Value + } + + isExternal := false + var externalName string + + for j := 0; j < len(networkValueNode.Content); j += 2 { + if j+1 >= len(networkValueNode.Content) { + break + } + propertyNode := networkValueNode.Content[j] + valueNode := networkValueNode.Content[j+1] + if propertyNode.Value == "external" { + if valueNode.Kind == yaml.ScalarNode && valueNode.Value == "true" { + isExternal = true + break + } else if valueNode.Kind == yaml.MappingNode { + for k := 0; k < len(valueNode.Content); k += 2 { + if k+1 >= len(valueNode.Content) { + break + } + subPropertyNode := valueNode.Content[k] + subValueNode := valueNode.Content[k+1] + if subPropertyNode.Value == "name" { + isExternal = true + externalName = subValueNode.Value + break + } + } + } + break + } + } + + if isExternal { + n := &NetworkInfo{External: true, Name: networkKeyNode.Value} + if externalName != "" { + n.Name = externalName + } + return n + } + } + + if defaultNetwork != "" { + return &NetworkInfo{External: false, Name: defaultNetwork} + } + + return nil +} + +// GetHostWorkingDirectory Inspects Keploy docker container to get bind mount for current directory +func (idc *Impl) GetHostWorkingDirectory() (string, error) { + ctx, cancel := context.WithTimeout(context.Background(), idc.timeoutForDockerQuery) + defer cancel() + + curDir, err := os.Getwd() + if err != nil { + utils.LogError(idc.logger, err, "failed to get current working directory") + return "", err + } + + container, err := idc.ContainerInspect(ctx, "keploy-v2") + if err != nil { + utils.LogError(idc.logger, err, "error inspecting keploy-v2 container") + return "", err + } + containerMounts := container.Mounts + // Loop through container mounts and find the mount for current directory in the container + for _, mount := range containerMounts { + if mount.Destination == curDir { + idc.logger.Debug(fmt.Sprintf("found mount for %s in keploy-v2 container", curDir), zap.Any("mount", mount)) + return mount.Source, nil + } + } + return "", fmt.Errorf(fmt.Sprintf("could not find mount for %s in keploy-v2 container", curDir)) +} + +// ForceAbsolutePath replaces relative paths in bind mounts with absolute paths +func (idc *Impl) ForceAbsolutePath(c *Compose, basePath string) error { + hostWorkingDirectory, err := idc.GetHostWorkingDirectory() + if err != nil { + return err + } + + dockerComposeContext, err := filepath.Abs(filepath.Join(hostWorkingDirectory, basePath)) + if err != nil { + utils.LogError(idc.logger, err, "error getting absolute path for docker compose file") + return err + } + dockerComposeContext = filepath.Dir(dockerComposeContext) + idc.logger.Debug("docker compose file location in host filesystem", zap.Any("dockerComposeContext", dockerComposeContext)) + + // Loop through all services in compose file + for _, service := range c.Services.Content { + + for i, item := range service.Content { + + if i+1 >= len(service.Content) { + break + } + + if item.Value == "volumes" { + // volumeKeyNode := service.Content[i] or item + volumeValueNode := service.Content[i+1] + + // Loop over all the volume mounts + for _, volumeMount := range volumeValueNode.Content { + // If volume mount starts with ./ or ../ then it is a relative path + if volumeMount.Kind == yaml.ScalarNode && (volumeMount.Value[:2] == "./" || volumeMount.Value[:3] == "../") { + + // Replace the relative path with absolute path + absPath, err := filepath.Abs(filepath.Join(dockerComposeContext, volumeMount.Value)) + if err != nil { + return err + } + volumeMount.Value = absPath + } + } + } + } + } + return nil +} + +// MakeNetworkExternal makes the existing network of the user docker compose file external and save it to a new file +func (idc *Impl) MakeNetworkExternal(c *Compose) error { + // Iterate over all networks and check the 'external' flag. + if c.Networks.Content != nil { + for i := 0; i < len(c.Networks.Content); i += 2 { + if i+1 >= len(c.Networks.Content) { + break + } + // networkKeyNode := compose.Networks.Content[i] + networkValueNode := c.Networks.Content[i+1] + + // If it's a shorthand notation or null value, initialize it as an empty mapping node + if (networkValueNode.Kind == yaml.ScalarNode && networkValueNode.Value == "") || networkValueNode.Tag == "!!null" { + networkValueNode.Kind = yaml.MappingNode + networkValueNode.Tag = "" + networkValueNode.Content = make([]*yaml.Node, 0) + } + + externalFound := false + for index, propertyNode := range networkValueNode.Content { + if index+1 >= len(networkValueNode.Content) { + break + } + if propertyNode.Value == "external" { + externalFound = true + valueNode := networkValueNode.Content[index+1] + if valueNode.Kind == yaml.ScalarNode && (valueNode.Value == "false" || valueNode.Value == "") { + valueNode.Value = "true" + } + break + } + } + + if !externalFound { + networkValueNode.Content = append(networkValueNode.Content, + &yaml.Node{Kind: yaml.ScalarNode, Value: "external"}, + &yaml.Node{Kind: yaml.ScalarNode, Value: "true"}, + ) + } + } + } + return nil +} + +// SetKeployNetwork adds the keploy-network network to the new docker compose file and copy rest of the contents from +// existing user docker compose file +func (idc *Impl) SetKeployNetwork(c *Compose) (*NetworkInfo, error) { + // Ensure that the top-level networks mapping exists. + if c.Networks.Content == nil { + c.Networks.Kind = yaml.MappingNode + c.Networks.Content = make([]*yaml.Node, 0) + } + networkInfo := &NetworkInfo{ + Name: "keploy-network", + External: true, + } + // Check if "keploy-network" already exists + exists := false + for i := 0; i < len(c.Networks.Content); i += 2 { + if c.Networks.Content[i].Value == "keploy-network" { + exists = true + break + } + } + + if !exists { + // Add the keploy-network with external: true + c.Networks.Content = append(c.Networks.Content, + &yaml.Node{Kind: yaml.ScalarNode, Value: "keploy-network"}, + &yaml.Node{Kind: yaml.MappingNode, Content: []*yaml.Node{ + {Kind: yaml.ScalarNode, Value: "external"}, + {Kind: yaml.ScalarNode, Value: "true"}, + }}, + ) + } + + // Add or modify network for each service + for _, service := range c.Services.Content { + networksFound := false + for _, item := range service.Content { + if item.Value == "networks" { + networksFound = true + break + } + } + + if !networksFound { + service.Content = append(service.Content, + &yaml.Node{Kind: yaml.ScalarNode, Value: "networks"}, + &yaml.Node{ + Kind: yaml.SequenceNode, + Content: []*yaml.Node{ + {Kind: yaml.ScalarNode, Value: "keploy-network"}, + }, + }, + ) + } else { + for _, item := range service.Content { + if item.Value == "networks" { + item.Content = append(item.Content, &yaml.Node{Kind: yaml.ScalarNode, Value: "keploy-network"}) + } + } + } + } + return networkInfo, nil +} diff --git a/pkg/core/app/docker/service.go b/pkg/core/app/docker/service.go new file mode 100644 index 000000000..c61dc1b31 --- /dev/null +++ b/pkg/core/app/docker/service.go @@ -0,0 +1,33 @@ +package docker + +import ( + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/client" +) + +type Client interface { + client.APIClient + ExtractNetworksForContainer(containerName string) (map[string]*network.EndpointSettings, error) + ConnectContainerToNetworks(containerName string, settings map[string]*network.EndpointSettings) error + AttachNetwork(containerName string, networkName []string) error + StopAndRemoveDockerContainer() error + GetContainerID() string + SetContainerID(containerID string) + NetworkExists(network string) (bool, error) + + HasRelativePath(c *Compose) bool + ForceAbsolutePath(c *Compose, basePath string) error + + GetNetworkInfo(compose *Compose) *NetworkInfo + + CreateNetwork(network string) error + MakeNetworkExternal(c *Compose) error + SetKeployNetwork(c *Compose) (*NetworkInfo, error) + ReadComposeFile(filePath string) (*Compose, error) + WriteComposeFile(compose *Compose, path string) error +} + +type NetworkInfo struct { + External bool + Name string +} diff --git a/pkg/core/app/util.go b/pkg/core/app/util.go new file mode 100644 index 000000000..4b568fc1d --- /dev/null +++ b/pkg/core/app/util.go @@ -0,0 +1,87 @@ +package app + +import ( + "fmt" + "os" + "path/filepath" + "regexp" + "strconv" + "strings" + "syscall" +) + +func findComposeFile() string { + filenames := []string{"docker-compose.yml", "docker-compose.yaml", "compose.yml", "compose.yaml"} + + for _, filename := range filenames { + if _, err := os.Stat(filename); !os.IsNotExist(err) { + return filename + } + } + + return "" +} + +func modifyDockerComposeCommand(appCmd, newComposeFile string) string { + // Ensure newComposeFile starts with ./ + if !strings.HasPrefix(newComposeFile, "./") { + newComposeFile = "./" + newComposeFile + } + + // Define a regular expression pattern to match "-f " + pattern := `(-f\s+("[^"]+"|'[^']+'|\S+))` + re := regexp.MustCompile(pattern) + + // Check if the "-f " pattern exists in the appCmd + if re.MatchString(appCmd) { + // Replace it with the new Compose file + return re.ReplaceAllString(appCmd, fmt.Sprintf("-f %s", newComposeFile)) + } + + // If the pattern doesn't exist, inject the new Compose file right after "docker-compose" or "docker compose" + upIdx := strings.Index(appCmd, " up") + if upIdx != -1 { + return fmt.Sprintf("%s -f %s%s", appCmd[:upIdx], newComposeFile, appCmd[upIdx:]) + } + + return fmt.Sprintf("%s -f %s", appCmd, newComposeFile) +} + +func parseDockerCmd(cmd string) (string, string, error) { + // Regular expression patterns + containerNamePattern := `--name\s+([^\s]+)` + networkNamePattern := `(--network|--net)\s+([^\s]+)` + + // Extract container name + containerNameRegex := regexp.MustCompile(containerNamePattern) + containerNameMatches := containerNameRegex.FindStringSubmatch(cmd) + if len(containerNameMatches) < 2 { + return "", "", fmt.Errorf("failed to parse container name") + } + containerName := containerNameMatches[1] + + // Extract network name + networkNameRegex := regexp.MustCompile(networkNamePattern) + networkNameMatches := networkNameRegex.FindStringSubmatch(cmd) + if len(networkNameMatches) < 3 { + return containerName, "", fmt.Errorf("failed to parse network name") + } + networkName := networkNameMatches[2] + + return containerName, networkName, nil +} + +func getInode(pid int) (uint64, error) { + path := filepath.Join("/proc", strconv.Itoa(pid), "ns", "pid") + + f, err := os.Stat(path) + if err != nil { + return 0, err + } + // Dev := (f.Sys().(*syscall.Stat_t)).Dev + i := (f.Sys().(*syscall.Stat_t)).Ino + if i == 0 { + return 0, fmt.Errorf("failed to get the inode of the process") + } + return i, nil +} diff --git a/pkg/core/core.go b/pkg/core/core.go new file mode 100644 index 000000000..6294cbf87 --- /dev/null +++ b/pkg/core/core.go @@ -0,0 +1,317 @@ +// Package core provides functionality for managing core functionalities in Keploy. +package core + +import ( + "context" + "errors" + "fmt" + "os" + "strings" + "sync" + + "golang.org/x/sync/errgroup" + + "go.keploy.io/server/v2/pkg/core/app" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +type Core struct { + Proxy // embedding the Proxy interface to transfer the proxy methods to the core object + Hooks // embedding the Hooks interface to transfer the hooks methods to the core object + logger *zap.Logger + id utils.AutoInc + apps sync.Map + proxyStarted bool + hostConfigStr string // hosts string in the nsswitch.conf of linux system. To restore the system hosts configuration after completion of test +} + +func New(logger *zap.Logger, hook Hooks, proxy Proxy) *Core { + return &Core{ + logger: logger, + Hooks: hook, + Proxy: proxy, + } +} + +func (c *Core) Setup(ctx context.Context, cmd string, opts models.SetupOptions) (uint64, error) { + // create a new app and store it in the map + id := uint64(c.id.Next()) + a := app.NewApp(c.logger, id, cmd, app.Options{ + DockerNetwork: opts.DockerNetwork, + Container: opts.Container, + DockerDelay: opts.DockerDelay, + }) + c.apps.Store(id, a) + + err := a.Setup(ctx) + if err != nil { + utils.LogError(c.logger, err, "failed to setup app") + return 0, err + } + return id, nil +} + +func (c *Core) getApp(id uint64) (*app.App, error) { + a, ok := c.apps.Load(id) + if !ok { + return nil, fmt.Errorf("app with id:%v not found", id) + } + + // type assertion on the app + h, ok := a.(*app.App) + if !ok { + return nil, fmt.Errorf("failed to type assert app with id:%v", id) + } + + return h, nil +} + +func (c *Core) Hook(ctx context.Context, id uint64, opts models.HookOptions) error { + hookErr := errors.New("failed to hook into the app") + + a, err := c.getApp(id) + if err != nil { + utils.LogError(c.logger, err, "failed to get app") + return hookErr + } + + isDocker := false + appKind := a.Kind(ctx) + //check if the app is docker/docker-compose or native + if appKind == utils.Docker || appKind == utils.DockerCompose { + isDocker = true + } + + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + + // create a new error group for the hooks + hookErrGrp, _ := errgroup.WithContext(ctx) + hookCtx := context.WithoutCancel(ctx) //so that main context doesn't cancel the hookCtx to control the lifecycle of the hooks + hookCtx, hookCtxCancel := context.WithCancel(hookCtx) + hookCtx = context.WithValue(hookCtx, models.ErrGroupKey, hookErrGrp) + + // create a new error group for the proxy + proxyErrGrp, _ := errgroup.WithContext(ctx) + proxyCtx := context.WithoutCancel(ctx) //so that main context doesn't cancel the proxyCtx to control the lifecycle of the proxy + proxyCtx, proxyCtxCancel := context.WithCancel(proxyCtx) + proxyCtx = context.WithValue(proxyCtx, models.ErrGroupKey, proxyErrGrp) + + g.Go(func() error { + <-ctx.Done() + + proxyCtxCancel() + err = proxyErrGrp.Wait() + if err != nil { + utils.LogError(c.logger, err, "failed to stop the proxy") + } + + hookCtxCancel() + err := hookErrGrp.Wait() + if err != nil { + utils.LogError(c.logger, err, "failed to unload the hooks") + } + + // reset the hosts config in nsswitch.conf of the system (in test mode) + if opts.Mode == models.MODE_TEST && c.hostConfigStr != "" { + err := c.resetNsSwitchConfig() + if err != nil { + utils.LogError(c.logger, err, "") + } + } + return nil + }) + + //load hooks + err = c.Hooks.Load(hookCtx, id, HookCfg{ + AppID: id, + Pid: 0, + IsDocker: isDocker, + KeployIPV4: a.KeployIPv4Addr(), + }) + if err != nil { + utils.LogError(c.logger, err, "failed to load hooks") + return hookErr + } + + if c.proxyStarted { + c.logger.Debug("Proxy already started") + return nil + } + + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + // TODO: Hooks can be loaded multiple times but proxy should be started only once + // if there is another containerized app, then we need to pass new (ip:port) of proxy to the eBPF + // as the network namespace is different for each container and so is the keploy/proxy IP to communicate with the app. + // start proxy + err = c.Proxy.StartProxy(proxyCtx, ProxyOptions{ + DNSIPv4Addr: a.KeployIPv4Addr(), + //DnsIPv6Addr: "" + }) + if err != nil { + utils.LogError(c.logger, err, "failed to start proxy") + return hookErr + } + + c.proxyStarted = true + + if opts.Mode == models.MODE_TEST { + // setting up the dns routing in test mode (helpful in fedora distro) + err = c.setupNsswitchConfig() + if err != nil { + return err + } + } + + return nil +} + +func (c *Core) Run(ctx context.Context, id uint64, _ models.RunOptions) models.AppError { + a, err := c.getApp(id) + if err != nil { + utils.LogError(c.logger, err, "failed to get app") + return models.AppError{AppErrorType: models.ErrInternal, Err: err} + } + + runAppErrGrp, runAppCtx := errgroup.WithContext(ctx) + + inodeErrCh := make(chan error, 1) + appErrCh := make(chan models.AppError, 1) + inodeChan := make(chan uint64, 1) //send inode to the hook + + defer func() { + err := runAppErrGrp.Wait() + defer close(inodeErrCh) + defer close(inodeChan) + if err != nil { + utils.LogError(c.logger, err, "failed to stop the app") + } + }() + + runAppErrGrp.Go(func() error { + defer utils.Recover(c.logger) + if a.Kind(ctx) == utils.Native { + return nil + } + select { + case inode := <-inodeChan: + err := c.Hooks.SendInode(ctx, id, inode) + if err != nil { + utils.LogError(c.logger, err, "") + + inodeErrCh <- errors.New("failed to send inode to the kernel") + } + case <-ctx.Done(): + return nil + } + return nil + }) + + runAppErrGrp.Go(func() error { + defer utils.Recover(c.logger) + defer close(appErrCh) + appErr := a.Run(runAppCtx, inodeChan) + if appErr.Err != nil { + utils.LogError(c.logger, appErr, "error while running the app") + appErrCh <- appErr + } + return nil + }) + + select { + case <-runAppCtx.Done(): + return models.AppError{AppErrorType: models.ErrCtxCanceled, Err: nil} + case appErr := <-appErrCh: + return appErr + case inodeErr := <-inodeErrCh: + return models.AppError{AppErrorType: models.ErrInternal, Err: inodeErr} + } +} + +func (c *Core) GetAppIP(_ context.Context, id uint64) (string, error) { + + a, err := c.getApp(id) + if err != nil { + utils.LogError(c.logger, err, "failed to get app") + return "", err + } + + return a.ContainerIPv4Addr(), nil +} + +// setting up the dns routing for the linux system +func (c *Core) setupNsswitchConfig() error { + nsSwitchConfig := "/etc/nsswitch.conf" + + // Check if the nsswitch.conf present for the system + if _, err := os.Stat(nsSwitchConfig); err == nil { + // Read the current nsswitch.conf + data, err := os.ReadFile(nsSwitchConfig) + if err != nil { + utils.LogError(c.logger, err, "failed to read the nsswitch.conf file from system") + return errors.New("failed to setup the nsswitch.conf file to redirect the DNS queries to proxy") + } + + // Replace the hosts field value if it exists + lines := strings.Split(string(data), "\n") + for i, line := range lines { + if strings.HasPrefix(line, "hosts:") { + c.hostConfigStr = lines[i] + lines[i] = "hosts: files dns" + } + } + + // Write the modified nsswitch.conf back to the file + err = os.WriteFile("/etc/nsswitch.conf", []byte(strings.Join(lines, "\n")), 0644) + if err != nil { + utils.LogError(c.logger, err, "failed to write the configuration to the nsswitch.conf file to redirect the DNS queries to proxy") + return errors.New("failed to setup the nsswitch.conf file to redirect the DNS queries to proxy") + } + + c.logger.Debug("Successfully written to nsswitch config of linux") + } + return nil +} + +// resetNsSwitchConfig resets the hosts config of nsswitch of the system +func (c *Core) resetNsSwitchConfig() error { + nsSwitchConfig := "/etc/nsswitch.conf" + data, err := os.ReadFile(nsSwitchConfig) + if err != nil { + c.logger.Error("failed to read the nsswitch.conf file from system", zap.Error(err)) + return errors.New("failed to reset the nsswitch.conf back to the original state") + } + + // Replace the hosts field value if it exists with the actual system hosts value + lines := strings.Split(string(data), "\n") + for i, line := range lines { + if strings.HasPrefix(line, "hosts:") { + lines[i] = c.hostConfigStr + } + } + + // Write the modified nsswitch.conf back to the file + err = os.WriteFile(nsSwitchConfig, []byte(strings.Join(lines, "\n")), 0644) + if err != nil { + c.logger.Error("failed to write the configuration to the nsswitch.conf file to redirect the DNS queries to proxy", zap.Error(err)) + return errors.New("failed to reset the nsswitch.conf back to the original state") + } + + c.logger.Debug("Successfully reset the nsswitch config of linux") + return nil +} diff --git a/pkg/core/hooks/README.md b/pkg/core/hooks/README.md new file mode 100755 index 000000000..24c20752b --- /dev/null +++ b/pkg/core/hooks/README.md @@ -0,0 +1,6 @@ +# Hooks Package Documentation + +The `hooks` package contains the user-space Go code responsible for +loading eBPF hooks and eBPF maps, which are used to instrument the user +API. This package is utilized by the CLI commands. Additionally, it +launches proxy on a defined port to capture egress calls. \ No newline at end of file diff --git a/pkg/core/hooks/bpf_bpfel_arm64.go b/pkg/core/hooks/bpf_bpfel_arm64.go new file mode 100755 index 000000000..4cf988c24 --- /dev/null +++ b/pkg/core/hooks/bpf_bpfel_arm64.go @@ -0,0 +1,276 @@ +// Code generated by bpf2go; DO NOT EDIT. +//go:build arm64 +// +build arm64 + +package hooks + +import ( + "bytes" + _ "embed" + "fmt" + "io" + + "github.com/cilium/ebpf" +) + +// loadBpf returns the embedded CollectionSpec for bpf. +func loadBpf() (*ebpf.CollectionSpec, error) { + reader := bytes.NewReader(_BpfBytes) + spec, err := ebpf.LoadCollectionSpecFromReader(reader) + if err != nil { + return nil, fmt.Errorf("can't load bpf: %w", err) + } + + return spec, err +} + +// loadBpfObjects loads bpf and converts it into a struct. +// +// The following types are suitable as obj argument: +// +// *bpfObjects +// *bpfPrograms +// *bpfMaps +// +// See ebpf.CollectionSpec.LoadAndAssign documentation for details. +func loadBpfObjects(obj interface{}, opts *ebpf.CollectionOptions) error { + spec, err := loadBpf() + if err != nil { + return err + } + + return spec.LoadAndAssign(obj, opts) +} + +// bpfSpecs contains maps and programs before they are loaded into the kernel. +// +// It can be passed ebpf.CollectionSpec.Assign. +type bpfSpecs struct { + bpfProgramSpecs + bpfMapSpecs +} + +// bpfSpecs contains programs before they are loaded into the kernel. +// +// It can be passed ebpf.CollectionSpec.Assign. +type bpfProgramSpecs struct { + K_connect4 *ebpf.ProgramSpec `ebpf:"k_connect4"` + K_connect6 *ebpf.ProgramSpec `ebpf:"k_connect6"` + K_getpeername4 *ebpf.ProgramSpec `ebpf:"k_getpeername4"` + K_getpeername6 *ebpf.ProgramSpec `ebpf:"k_getpeername6"` + SyscallProbeEntryAccept *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_accept"` + SyscallProbeEntryAccept4 *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_accept4"` + SyscallProbeEntryBind *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_bind"` + SyscallProbeEntryClose *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_close"` + SyscallProbeEntryRead *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_read"` + SyscallProbeEntryRecvfrom *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_recvfrom"` + SyscallProbeEntrySendto *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_sendto"` + SyscallProbeEntryTcpV4Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v4_connect"` + SyscallProbeEntryTcpV4PreConnect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v4_pre_connect"` + SyscallProbeEntryTcpV6Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v6_connect"` + SyscallProbeEntryTcpV6PreConnect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v6_pre_connect"` + SyscallProbeEntryUdpPreConnect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_udp_pre_connect"` + SyscallProbeEntryWrite *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_write"` + SyscallProbeEntryWritev *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_writev"` + SyscallProbeRetAccept *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_accept"` + SyscallProbeRetAccept4 *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_accept4"` + SyscallProbeRetClose *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_close"` + SyscallProbeRetRead *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_read"` + SyscallProbeRetRecvfrom *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_recvfrom"` + SyscallProbeRetSendto *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_sendto"` + SyscallProbeRetTcpV4Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_tcp_v4_connect"` + SyscallProbeRetTcpV6Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_tcp_v6_connect"` + SyscallProbeRetWrite *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_write"` + SyscallProbeRetWritev *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_writev"` + SyscallProbeEntrySocket *ebpf.ProgramSpec `ebpf:"syscall_probe_entry_socket"` +} + +// bpfMapSpecs contains maps before they are loaded into the kernel. +// +// It can be passed ebpf.CollectionSpec.Assign. +type bpfMapSpecs struct { + ActiveAcceptArgsMap *ebpf.MapSpec `ebpf:"active_accept_args_map"` + ActiveCloseArgsMap *ebpf.MapSpec `ebpf:"active_close_args_map"` + ActiveReadArgsMap *ebpf.MapSpec `ebpf:"active_read_args_map"` + ActiveWriteArgsMap *ebpf.MapSpec `ebpf:"active_write_args_map"` + AppKernelPidMap *ebpf.MapSpec `ebpf:"app_kernel_pid_map"` + AppNsPidMap *ebpf.MapSpec `ebpf:"app_ns_pid_map"` + ConnInfoMap *ebpf.MapSpec `ebpf:"conn_info_map"` + CurrentSockMap *ebpf.MapSpec `ebpf:"current_sock_map"` + DestInfoMap *ebpf.MapSpec `ebpf:"dest_info_map"` + DnsPortMap *ebpf.MapSpec `ebpf:"dns_port_map"` + DockerCmdMap *ebpf.MapSpec `ebpf:"docker_cmd_map"` + GlobalNsPidInfoMap *ebpf.MapSpec `ebpf:"global_nsPid_info_map"` + InodeMap *ebpf.MapSpec `ebpf:"inode_map"` + KeployKernelPidMap *ebpf.MapSpec `ebpf:"keploy_kernel_pid_map"` + KeployModeMap *ebpf.MapSpec `ebpf:"keploy_mode_map"` + KeployNamespacePidMap *ebpf.MapSpec `ebpf:"keploy_namespace_pid_map"` + KeployServerPort *ebpf.MapSpec `ebpf:"keploy_server_port"` + PassThroughPorts *ebpf.MapSpec `ebpf:"pass_through_ports"` + ProxyInfoMap *ebpf.MapSpec `ebpf:"proxy_info_map"` + RedirectProxyMap *ebpf.MapSpec `ebpf:"redirect_proxy_map"` + SocketCloseEvents *ebpf.MapSpec `ebpf:"socket_close_events"` + SocketDataEventBufferHeap *ebpf.MapSpec `ebpf:"socket_data_event_buffer_heap"` + SocketDataEvents *ebpf.MapSpec `ebpf:"socket_data_events"` + SocketOpenEvents *ebpf.MapSpec `ebpf:"socket_open_events"` + TaskStructMap *ebpf.MapSpec `ebpf:"task_struct_map"` +} + +// bpfObjects contains all objects after they have been loaded into the kernel. +// +// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. +type bpfObjects struct { + bpfPrograms + bpfMaps +} + +func (o *bpfObjects) Close() error { + return _BpfClose( + &o.bpfPrograms, + &o.bpfMaps, + ) +} + +// bpfMaps contains all maps after they have been loaded into the kernel. +// +// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. +type bpfMaps struct { + ActiveAcceptArgsMap *ebpf.Map `ebpf:"active_accept_args_map"` + ActiveCloseArgsMap *ebpf.Map `ebpf:"active_close_args_map"` + ActiveReadArgsMap *ebpf.Map `ebpf:"active_read_args_map"` + ActiveWriteArgsMap *ebpf.Map `ebpf:"active_write_args_map"` + AppKernelPidMap *ebpf.Map `ebpf:"app_kernel_pid_map"` + AppNsPidMap *ebpf.Map `ebpf:"app_ns_pid_map"` + ConnInfoMap *ebpf.Map `ebpf:"conn_info_map"` + CurrentSockMap *ebpf.Map `ebpf:"current_sock_map"` + DestInfoMap *ebpf.Map `ebpf:"dest_info_map"` + DnsPortMap *ebpf.Map `ebpf:"dns_port_map"` + DockerCmdMap *ebpf.Map `ebpf:"docker_cmd_map"` + GlobalNsPidInfoMap *ebpf.Map `ebpf:"global_nsPid_info_map"` + InodeMap *ebpf.Map `ebpf:"inode_map"` + KeployKernelPidMap *ebpf.Map `ebpf:"keploy_kernel_pid_map"` + KeployModeMap *ebpf.Map `ebpf:"keploy_mode_map"` + KeployNamespacePidMap *ebpf.Map `ebpf:"keploy_namespace_pid_map"` + KeployServerPort *ebpf.Map `ebpf:"keploy_server_port"` + PassThroughPorts *ebpf.Map `ebpf:"pass_through_ports"` + ProxyInfoMap *ebpf.Map `ebpf:"proxy_info_map"` + RedirectProxyMap *ebpf.Map `ebpf:"redirect_proxy_map"` + SocketCloseEvents *ebpf.Map `ebpf:"socket_close_events"` + SocketDataEventBufferHeap *ebpf.Map `ebpf:"socket_data_event_buffer_heap"` + SocketDataEvents *ebpf.Map `ebpf:"socket_data_events"` + SocketOpenEvents *ebpf.Map `ebpf:"socket_open_events"` + TaskStructMap *ebpf.Map `ebpf:"task_struct_map"` +} + +func (m *bpfMaps) Close() error { + return _BpfClose( + m.ActiveAcceptArgsMap, + m.ActiveCloseArgsMap, + m.ActiveReadArgsMap, + m.ActiveWriteArgsMap, + m.AppKernelPidMap, + m.AppNsPidMap, + m.ConnInfoMap, + m.CurrentSockMap, + m.DestInfoMap, + m.DnsPortMap, + m.DockerCmdMap, + m.GlobalNsPidInfoMap, + m.InodeMap, + m.KeployKernelPidMap, + m.KeployModeMap, + m.KeployNamespacePidMap, + m.KeployServerPort, + m.PassThroughPorts, + m.ProxyInfoMap, + m.RedirectProxyMap, + m.SocketCloseEvents, + m.SocketDataEventBufferHeap, + m.SocketDataEvents, + m.SocketOpenEvents, + m.TaskStructMap, + ) +} + +// bpfPrograms contains all programs after they have been loaded into the kernel. +// +// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. +type bpfPrograms struct { + K_connect4 *ebpf.Program `ebpf:"k_connect4"` + K_connect6 *ebpf.Program `ebpf:"k_connect6"` + K_getpeername4 *ebpf.Program `ebpf:"k_getpeername4"` + K_getpeername6 *ebpf.Program `ebpf:"k_getpeername6"` + SyscallProbeEntryAccept *ebpf.Program `ebpf:"syscall__probe_entry_accept"` + SyscallProbeEntryAccept4 *ebpf.Program `ebpf:"syscall__probe_entry_accept4"` + SyscallProbeEntryBind *ebpf.Program `ebpf:"syscall__probe_entry_bind"` + SyscallProbeEntryClose *ebpf.Program `ebpf:"syscall__probe_entry_close"` + SyscallProbeEntryRead *ebpf.Program `ebpf:"syscall__probe_entry_read"` + SyscallProbeEntryRecvfrom *ebpf.Program `ebpf:"syscall__probe_entry_recvfrom"` + SyscallProbeEntrySendto *ebpf.Program `ebpf:"syscall__probe_entry_sendto"` + SyscallProbeEntryTcpV4Connect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v4_connect"` + SyscallProbeEntryTcpV4PreConnect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v4_pre_connect"` + SyscallProbeEntryTcpV6Connect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v6_connect"` + SyscallProbeEntryTcpV6PreConnect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v6_pre_connect"` + SyscallProbeEntryUdpPreConnect *ebpf.Program `ebpf:"syscall__probe_entry_udp_pre_connect"` + SyscallProbeEntryWrite *ebpf.Program `ebpf:"syscall__probe_entry_write"` + SyscallProbeEntryWritev *ebpf.Program `ebpf:"syscall__probe_entry_writev"` + SyscallProbeRetAccept *ebpf.Program `ebpf:"syscall__probe_ret_accept"` + SyscallProbeRetAccept4 *ebpf.Program `ebpf:"syscall__probe_ret_accept4"` + SyscallProbeRetClose *ebpf.Program `ebpf:"syscall__probe_ret_close"` + SyscallProbeRetRead *ebpf.Program `ebpf:"syscall__probe_ret_read"` + SyscallProbeRetRecvfrom *ebpf.Program `ebpf:"syscall__probe_ret_recvfrom"` + SyscallProbeRetSendto *ebpf.Program `ebpf:"syscall__probe_ret_sendto"` + SyscallProbeRetTcpV4Connect *ebpf.Program `ebpf:"syscall__probe_ret_tcp_v4_connect"` + SyscallProbeRetTcpV6Connect *ebpf.Program `ebpf:"syscall__probe_ret_tcp_v6_connect"` + SyscallProbeRetWrite *ebpf.Program `ebpf:"syscall__probe_ret_write"` + SyscallProbeRetWritev *ebpf.Program `ebpf:"syscall__probe_ret_writev"` + SyscallProbeEntrySocket *ebpf.Program `ebpf:"syscall_probe_entry_socket"` +} + +func (p *bpfPrograms) Close() error { + return _BpfClose( + p.K_connect4, + p.K_connect6, + p.K_getpeername4, + p.K_getpeername6, + p.SyscallProbeEntryAccept, + p.SyscallProbeEntryAccept4, + p.SyscallProbeEntryBind, + p.SyscallProbeEntryClose, + p.SyscallProbeEntryRead, + p.SyscallProbeEntryRecvfrom, + p.SyscallProbeEntrySendto, + p.SyscallProbeEntryTcpV4Connect, + p.SyscallProbeEntryTcpV4PreConnect, + p.SyscallProbeEntryTcpV6Connect, + p.SyscallProbeEntryTcpV6PreConnect, + p.SyscallProbeEntryUdpPreConnect, + p.SyscallProbeEntryWrite, + p.SyscallProbeEntryWritev, + p.SyscallProbeRetAccept, + p.SyscallProbeRetAccept4, + p.SyscallProbeRetClose, + p.SyscallProbeRetRead, + p.SyscallProbeRetRecvfrom, + p.SyscallProbeRetSendto, + p.SyscallProbeRetTcpV4Connect, + p.SyscallProbeRetTcpV6Connect, + p.SyscallProbeRetWrite, + p.SyscallProbeRetWritev, + p.SyscallProbeEntrySocket, + ) +} + +func _BpfClose(closers ...io.Closer) error { + for _, closer := range closers { + if err := closer.Close(); err != nil { + return err + } + } + return nil +} + +// Do not access this directly. +// +//go:embed bpf_bpfel_arm64.o +var _BpfBytes []byte diff --git a/pkg/core/hooks/bpf_bpfel_arm64.o b/pkg/core/hooks/bpf_bpfel_arm64.o new file mode 100644 index 000000000..b70db0071 Binary files /dev/null and b/pkg/core/hooks/bpf_bpfel_arm64.o differ diff --git a/pkg/core/hooks/bpf_bpfel_x86.go b/pkg/core/hooks/bpf_bpfel_x86.go new file mode 100644 index 000000000..1282d27d4 --- /dev/null +++ b/pkg/core/hooks/bpf_bpfel_x86.go @@ -0,0 +1,276 @@ +// Code generated by bpf2go; DO NOT EDIT. +//go:build 386 || amd64 +// +build 386 amd64 + +package hooks + +import ( + "bytes" + _ "embed" + "fmt" + "io" + + "github.com/cilium/ebpf" +) + +// loadBpf returns the embedded CollectionSpec for bpf. +func loadBpf() (*ebpf.CollectionSpec, error) { + reader := bytes.NewReader(_BpfBytes) + spec, err := ebpf.LoadCollectionSpecFromReader(reader) + if err != nil { + return nil, fmt.Errorf("can't load bpf: %w", err) + } + + return spec, err +} + +// loadBpfObjects loads bpf and converts it into a struct. +// +// The following types are suitable as obj argument: +// +// *bpfObjects +// *bpfPrograms +// *bpfMaps +// +// See ebpf.CollectionSpec.LoadAndAssign documentation for details. +func loadBpfObjects(obj interface{}, opts *ebpf.CollectionOptions) error { + spec, err := loadBpf() + if err != nil { + return err + } + + return spec.LoadAndAssign(obj, opts) +} + +// bpfSpecs contains maps and programs before they are loaded into the kernel. +// +// It can be passed ebpf.CollectionSpec.Assign. +type bpfSpecs struct { + bpfProgramSpecs + bpfMapSpecs +} + +// bpfSpecs contains programs before they are loaded into the kernel. +// +// It can be passed ebpf.CollectionSpec.Assign. +type bpfProgramSpecs struct { + K_connect4 *ebpf.ProgramSpec `ebpf:"k_connect4"` + K_connect6 *ebpf.ProgramSpec `ebpf:"k_connect6"` + K_getpeername4 *ebpf.ProgramSpec `ebpf:"k_getpeername4"` + K_getpeername6 *ebpf.ProgramSpec `ebpf:"k_getpeername6"` + SyscallProbeEntryAccept *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_accept"` + SyscallProbeEntryAccept4 *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_accept4"` + SyscallProbeEntryBind *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_bind"` + SyscallProbeEntryClose *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_close"` + SyscallProbeEntryRead *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_read"` + SyscallProbeEntryRecvfrom *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_recvfrom"` + SyscallProbeEntrySendto *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_sendto"` + SyscallProbeEntryTcpV4Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v4_connect"` + SyscallProbeEntryTcpV4PreConnect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v4_pre_connect"` + SyscallProbeEntryTcpV6Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v6_connect"` + SyscallProbeEntryTcpV6PreConnect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_tcp_v6_pre_connect"` + SyscallProbeEntryUdpPreConnect *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_udp_pre_connect"` + SyscallProbeEntryWrite *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_write"` + SyscallProbeEntryWritev *ebpf.ProgramSpec `ebpf:"syscall__probe_entry_writev"` + SyscallProbeRetAccept *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_accept"` + SyscallProbeRetAccept4 *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_accept4"` + SyscallProbeRetClose *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_close"` + SyscallProbeRetRead *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_read"` + SyscallProbeRetRecvfrom *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_recvfrom"` + SyscallProbeRetSendto *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_sendto"` + SyscallProbeRetTcpV4Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_tcp_v4_connect"` + SyscallProbeRetTcpV6Connect *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_tcp_v6_connect"` + SyscallProbeRetWrite *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_write"` + SyscallProbeRetWritev *ebpf.ProgramSpec `ebpf:"syscall__probe_ret_writev"` + SyscallProbeEntrySocket *ebpf.ProgramSpec `ebpf:"syscall_probe_entry_socket"` +} + +// bpfMapSpecs contains maps before they are loaded into the kernel. +// +// It can be passed ebpf.CollectionSpec.Assign. +type bpfMapSpecs struct { + ActiveAcceptArgsMap *ebpf.MapSpec `ebpf:"active_accept_args_map"` + ActiveCloseArgsMap *ebpf.MapSpec `ebpf:"active_close_args_map"` + ActiveReadArgsMap *ebpf.MapSpec `ebpf:"active_read_args_map"` + ActiveWriteArgsMap *ebpf.MapSpec `ebpf:"active_write_args_map"` + AppKernelPidMap *ebpf.MapSpec `ebpf:"app_kernel_pid_map"` + AppNsPidMap *ebpf.MapSpec `ebpf:"app_ns_pid_map"` + ConnInfoMap *ebpf.MapSpec `ebpf:"conn_info_map"` + CurrentSockMap *ebpf.MapSpec `ebpf:"current_sock_map"` + DestInfoMap *ebpf.MapSpec `ebpf:"dest_info_map"` + DnsPortMap *ebpf.MapSpec `ebpf:"dns_port_map"` + DockerCmdMap *ebpf.MapSpec `ebpf:"docker_cmd_map"` + GlobalNsPidInfoMap *ebpf.MapSpec `ebpf:"global_nsPid_info_map"` + InodeMap *ebpf.MapSpec `ebpf:"inode_map"` + KeployKernelPidMap *ebpf.MapSpec `ebpf:"keploy_kernel_pid_map"` + KeployModeMap *ebpf.MapSpec `ebpf:"keploy_mode_map"` + KeployNamespacePidMap *ebpf.MapSpec `ebpf:"keploy_namespace_pid_map"` + KeployServerPort *ebpf.MapSpec `ebpf:"keploy_server_port"` + PassThroughPorts *ebpf.MapSpec `ebpf:"pass_through_ports"` + ProxyInfoMap *ebpf.MapSpec `ebpf:"proxy_info_map"` + RedirectProxyMap *ebpf.MapSpec `ebpf:"redirect_proxy_map"` + SocketCloseEvents *ebpf.MapSpec `ebpf:"socket_close_events"` + SocketDataEventBufferHeap *ebpf.MapSpec `ebpf:"socket_data_event_buffer_heap"` + SocketDataEvents *ebpf.MapSpec `ebpf:"socket_data_events"` + SocketOpenEvents *ebpf.MapSpec `ebpf:"socket_open_events"` + TaskStructMap *ebpf.MapSpec `ebpf:"task_struct_map"` +} + +// bpfObjects contains all objects after they have been loaded into the kernel. +// +// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. +type bpfObjects struct { + bpfPrograms + bpfMaps +} + +func (o *bpfObjects) Close() error { + return _BpfClose( + &o.bpfPrograms, + &o.bpfMaps, + ) +} + +// bpfMaps contains all maps after they have been loaded into the kernel. +// +// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. +type bpfMaps struct { + ActiveAcceptArgsMap *ebpf.Map `ebpf:"active_accept_args_map"` + ActiveCloseArgsMap *ebpf.Map `ebpf:"active_close_args_map"` + ActiveReadArgsMap *ebpf.Map `ebpf:"active_read_args_map"` + ActiveWriteArgsMap *ebpf.Map `ebpf:"active_write_args_map"` + AppKernelPidMap *ebpf.Map `ebpf:"app_kernel_pid_map"` + AppNsPidMap *ebpf.Map `ebpf:"app_ns_pid_map"` + ConnInfoMap *ebpf.Map `ebpf:"conn_info_map"` + CurrentSockMap *ebpf.Map `ebpf:"current_sock_map"` + DestInfoMap *ebpf.Map `ebpf:"dest_info_map"` + DnsPortMap *ebpf.Map `ebpf:"dns_port_map"` + DockerCmdMap *ebpf.Map `ebpf:"docker_cmd_map"` + GlobalNsPidInfoMap *ebpf.Map `ebpf:"global_nsPid_info_map"` + InodeMap *ebpf.Map `ebpf:"inode_map"` + KeployKernelPidMap *ebpf.Map `ebpf:"keploy_kernel_pid_map"` + KeployModeMap *ebpf.Map `ebpf:"keploy_mode_map"` + KeployNamespacePidMap *ebpf.Map `ebpf:"keploy_namespace_pid_map"` + KeployServerPort *ebpf.Map `ebpf:"keploy_server_port"` + PassThroughPorts *ebpf.Map `ebpf:"pass_through_ports"` + ProxyInfoMap *ebpf.Map `ebpf:"proxy_info_map"` + RedirectProxyMap *ebpf.Map `ebpf:"redirect_proxy_map"` + SocketCloseEvents *ebpf.Map `ebpf:"socket_close_events"` + SocketDataEventBufferHeap *ebpf.Map `ebpf:"socket_data_event_buffer_heap"` + SocketDataEvents *ebpf.Map `ebpf:"socket_data_events"` + SocketOpenEvents *ebpf.Map `ebpf:"socket_open_events"` + TaskStructMap *ebpf.Map `ebpf:"task_struct_map"` +} + +func (m *bpfMaps) Close() error { + return _BpfClose( + m.ActiveAcceptArgsMap, + m.ActiveCloseArgsMap, + m.ActiveReadArgsMap, + m.ActiveWriteArgsMap, + m.AppKernelPidMap, + m.AppNsPidMap, + m.ConnInfoMap, + m.CurrentSockMap, + m.DestInfoMap, + m.DnsPortMap, + m.DockerCmdMap, + m.GlobalNsPidInfoMap, + m.InodeMap, + m.KeployKernelPidMap, + m.KeployModeMap, + m.KeployNamespacePidMap, + m.KeployServerPort, + m.PassThroughPorts, + m.ProxyInfoMap, + m.RedirectProxyMap, + m.SocketCloseEvents, + m.SocketDataEventBufferHeap, + m.SocketDataEvents, + m.SocketOpenEvents, + m.TaskStructMap, + ) +} + +// bpfPrograms contains all programs after they have been loaded into the kernel. +// +// It can be passed to loadBpfObjects or ebpf.CollectionSpec.LoadAndAssign. +type bpfPrograms struct { + K_connect4 *ebpf.Program `ebpf:"k_connect4"` + K_connect6 *ebpf.Program `ebpf:"k_connect6"` + K_getpeername4 *ebpf.Program `ebpf:"k_getpeername4"` + K_getpeername6 *ebpf.Program `ebpf:"k_getpeername6"` + SyscallProbeEntryAccept *ebpf.Program `ebpf:"syscall__probe_entry_accept"` + SyscallProbeEntryAccept4 *ebpf.Program `ebpf:"syscall__probe_entry_accept4"` + SyscallProbeEntryBind *ebpf.Program `ebpf:"syscall__probe_entry_bind"` + SyscallProbeEntryClose *ebpf.Program `ebpf:"syscall__probe_entry_close"` + SyscallProbeEntryRead *ebpf.Program `ebpf:"syscall__probe_entry_read"` + SyscallProbeEntryRecvfrom *ebpf.Program `ebpf:"syscall__probe_entry_recvfrom"` + SyscallProbeEntrySendto *ebpf.Program `ebpf:"syscall__probe_entry_sendto"` + SyscallProbeEntryTcpV4Connect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v4_connect"` + SyscallProbeEntryTcpV4PreConnect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v4_pre_connect"` + SyscallProbeEntryTcpV6Connect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v6_connect"` + SyscallProbeEntryTcpV6PreConnect *ebpf.Program `ebpf:"syscall__probe_entry_tcp_v6_pre_connect"` + SyscallProbeEntryUdpPreConnect *ebpf.Program `ebpf:"syscall__probe_entry_udp_pre_connect"` + SyscallProbeEntryWrite *ebpf.Program `ebpf:"syscall__probe_entry_write"` + SyscallProbeEntryWritev *ebpf.Program `ebpf:"syscall__probe_entry_writev"` + SyscallProbeRetAccept *ebpf.Program `ebpf:"syscall__probe_ret_accept"` + SyscallProbeRetAccept4 *ebpf.Program `ebpf:"syscall__probe_ret_accept4"` + SyscallProbeRetClose *ebpf.Program `ebpf:"syscall__probe_ret_close"` + SyscallProbeRetRead *ebpf.Program `ebpf:"syscall__probe_ret_read"` + SyscallProbeRetRecvfrom *ebpf.Program `ebpf:"syscall__probe_ret_recvfrom"` + SyscallProbeRetSendto *ebpf.Program `ebpf:"syscall__probe_ret_sendto"` + SyscallProbeRetTcpV4Connect *ebpf.Program `ebpf:"syscall__probe_ret_tcp_v4_connect"` + SyscallProbeRetTcpV6Connect *ebpf.Program `ebpf:"syscall__probe_ret_tcp_v6_connect"` + SyscallProbeRetWrite *ebpf.Program `ebpf:"syscall__probe_ret_write"` + SyscallProbeRetWritev *ebpf.Program `ebpf:"syscall__probe_ret_writev"` + SyscallProbeEntrySocket *ebpf.Program `ebpf:"syscall_probe_entry_socket"` +} + +func (p *bpfPrograms) Close() error { + return _BpfClose( + p.K_connect4, + p.K_connect6, + p.K_getpeername4, + p.K_getpeername6, + p.SyscallProbeEntryAccept, + p.SyscallProbeEntryAccept4, + p.SyscallProbeEntryBind, + p.SyscallProbeEntryClose, + p.SyscallProbeEntryRead, + p.SyscallProbeEntryRecvfrom, + p.SyscallProbeEntrySendto, + p.SyscallProbeEntryTcpV4Connect, + p.SyscallProbeEntryTcpV4PreConnect, + p.SyscallProbeEntryTcpV6Connect, + p.SyscallProbeEntryTcpV6PreConnect, + p.SyscallProbeEntryUdpPreConnect, + p.SyscallProbeEntryWrite, + p.SyscallProbeEntryWritev, + p.SyscallProbeRetAccept, + p.SyscallProbeRetAccept4, + p.SyscallProbeRetClose, + p.SyscallProbeRetRead, + p.SyscallProbeRetRecvfrom, + p.SyscallProbeRetSendto, + p.SyscallProbeRetTcpV4Connect, + p.SyscallProbeRetTcpV6Connect, + p.SyscallProbeRetWrite, + p.SyscallProbeRetWritev, + p.SyscallProbeEntrySocket, + ) +} + +func _BpfClose(closers ...io.Closer) error { + for _, closer := range closers { + if err := closer.Close(); err != nil { + return err + } + } + return nil +} + +// Do not access this directly. +// +//go:embed bpf_bpfel_x86.o +var _BpfBytes []byte diff --git a/pkg/core/hooks/bpf_bpfel_x86.o b/pkg/core/hooks/bpf_bpfel_x86.o new file mode 100644 index 000000000..3736213a0 Binary files /dev/null and b/pkg/core/hooks/bpf_bpfel_x86.o differ diff --git a/pkg/core/hooks/conn/README.md b/pkg/core/hooks/conn/README.md new file mode 100755 index 000000000..4f9efdb01 --- /dev/null +++ b/pkg/core/hooks/conn/README.md @@ -0,0 +1,5 @@ +# Connection Package Documentation + +This package contains the events that are triggered during the +ingress call, capturing both the input and output of the user API +call. \ No newline at end of file diff --git a/pkg/core/hooks/conn/conn.go b/pkg/core/hooks/conn/conn.go new file mode 100644 index 000000000..048a1024a --- /dev/null +++ b/pkg/core/hooks/conn/conn.go @@ -0,0 +1,121 @@ +// Package conn provides functionality for handling connections. +package conn + +// constant for the maximum size of the event body +const ( + EventBodyMaxSize = 16384 // 16 KB +) + +// ID is a conversion of the following C-Struct into GO. +// +// struct conn_id_t { +// uint32_t tgid; +// int32_t fd; +// uint64_t tsid; +// }; +type ID struct { + TGID uint32 + FD int32 + TsID uint64 +} + +// SocketDataEvent is a conversion of the following C-Struct into GO. +// struct socket_data_event_t +// +// { +// u64 entry_timestamp_ns; +// u64 timestamp_ns; +// struct conn_id_t conn_id; +// enum traffic_direction_t direction; +// u32 msg_size; +// u64 pos; +// char msg[MAX_MSG_SIZE]; +// s64 validate_rd_bytes +// s64 validate_wr_bytes +// }; +type SocketDataEvent struct { + EntryTimestampNano uint64 + TimestampNano uint64 + ConnID ID + Direction TrafficDirectionEnum + MsgSize uint32 + Pos uint64 + Msg [EventBodyMaxSize]byte + ValidateReadBytes int64 + ValidateWrittenBytes int64 +} + +// SocketOpenEvent is a conversion of the following C-Struct into GO. +// +// struct socket_open_event_t { +// uint64_t timestamp_ns; +// struct conn_id_t conn_id; +// struct sockaddr_in* addr; +// };. +type SocketOpenEvent struct { + TimestampNano uint64 + ConnID ID + Addr SockAddrIn +} + +// SocketCloseEvent is a conversion of the following C-Struct into GO. +// +// struct socket_close_event_t { +// uint64_t timestamp_ns; +// struct conn_id_t conn_id; +// int64_t wr_bytes; +// int64_t rd_bytes; +// };. +type SocketCloseEvent struct { + TimestampNano uint64 + ConnID ID + WrittenBytes int64 + ReadBytes int64 +} + +// TrafficDirectionEnum is a GO-equivalent for the following enum. +// +// enum traffic_direction_t { +// kEgress, +// kIngress, +// };. +type TrafficDirectionEnum int32 + +// constants for the TrafficDirectionEnum +const ( + EgressTraffic TrafficDirectionEnum = 0 + IngressTraffic TrafficDirectionEnum = 1 +) + +func (t TrafficDirectionEnum) String() string { + names := [...]string{ + "EgressTraffic", + "IngressTraffic", + } + + switch t { + case EgressTraffic: + return names[0] + case IngressTraffic: + return names[1] + default: + return "Invalid TrafficDirectionEnum value" + } +} + +// SockAddrIn is a conversion of the following C-Struct into GO. +// +// struct sockaddr_in { +// unsigned short int sin_family; +// uint16_t sin_port; +// struct in_addr sin_addr; +// +// /* _to size of `struct sockaddr'. */ +// unsigned char sin_zero[8]; +// };. +type SockAddrIn struct { + SinFamily uint16 + SinPort uint16 + SinAddr uint32 + SinZero [8]byte +} diff --git a/pkg/core/hooks/conn/factory.go b/pkg/core/hooks/conn/factory.go new file mode 100755 index 000000000..7f372821f --- /dev/null +++ b/pkg/core/hooks/conn/factory.go @@ -0,0 +1,145 @@ +package conn + +import ( + "context" + "fmt" + "io" + "net/http" + "sync" + "time" + + "go.uber.org/zap" + + "go.keploy.io/server/v2/pkg" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" +) + +var Emoji = "\U0001F430" + " Keploy:" + +// Factory is a routine-safe container that holds a trackers with unique ID, and able to create new tracker. +type Factory struct { + connections map[ID]*Tracker + inactivityThreshold time.Duration + mutex *sync.RWMutex + logger *zap.Logger +} + +// NewFactory creates a new instance of the factory. +func NewFactory(inactivityThreshold time.Duration, logger *zap.Logger) *Factory { + return &Factory{ + connections: make(map[ID]*Tracker), + mutex: &sync.RWMutex{}, + inactivityThreshold: inactivityThreshold, + logger: logger, + } +} + +// ProcessActiveTrackers iterates over all conn the trackers and checks if they are complete. If so, it captures the ingress call and +// deletes the tracker. If the tracker is inactive for a long time, it deletes it. +func (factory *Factory) ProcessActiveTrackers(ctx context.Context, t chan *models.TestCase) { + factory.mutex.Lock() + defer factory.mutex.Unlock() + var trackersToDelete []ID + for connID, tracker := range factory.connections { + select { + case <-ctx.Done(): + return + default: + ok, requestBuf, responseBuf, reqTimestampTest, resTimestampTest := tracker.IsComplete() + if ok { + + if len(requestBuf) == 0 || len(responseBuf) == 0 { + factory.logger.Warn("failed processing a request due to invalid request or response", zap.Any("Request Size", len(requestBuf)), zap.Any("Response Size", len(responseBuf))) + continue + } + + parsedHTTPReq, err := pkg.ParseHTTPRequest(requestBuf) + if err != nil { + utils.LogError(factory.logger, err, "failed to parse the http request from byte array", zap.Any("requestBuf", requestBuf)) + continue + } + parsedHTTPRes, err := pkg.ParseHTTPResponse(responseBuf, parsedHTTPReq) + if err != nil { + utils.LogError(factory.logger, err, "failed to parse the http response from byte array", zap.Any("responseBuf", responseBuf)) + continue + } + capture(ctx, factory.logger, t, parsedHTTPReq, parsedHTTPRes, reqTimestampTest, resTimestampTest) + + } else if tracker.IsInactive(factory.inactivityThreshold) { + trackersToDelete = append(trackersToDelete, connID) + } + } + } + + // Delete all the processed trackers. + for _, key := range trackersToDelete { + delete(factory.connections, key) + } +} + +// GetOrCreate returns a tracker that related to the given conn and transaction ids. If there is no such tracker +// we create a new one. +func (factory *Factory) GetOrCreate(connectionID ID) *Tracker { + factory.mutex.Lock() + defer factory.mutex.Unlock() + tracker, ok := factory.connections[connectionID] + if !ok { + factory.connections[connectionID] = NewTracker(connectionID, factory.logger) + return factory.connections[connectionID] + } + return tracker +} + +func capture(_ context.Context, logger *zap.Logger, t chan *models.TestCase, req *http.Request, resp *http.Response, reqTimeTest time.Time, resTimeTest time.Time) { + reqBody, err := io.ReadAll(req.Body) + if err != nil { + utils.LogError(logger, err, "failed to read the http request body") + return + } + + defer func() { + err := resp.Body.Close() + if err != nil { + utils.LogError(logger, err, "failed to close the http response body") + } + }() + + respBody, err := io.ReadAll(resp.Body) + if err != nil { + utils.LogError(logger, err, "failed to read the http response body") + return + } + t <- &models.TestCase{ + Version: models.GetVersion(), + Name: pkg.ToYamlHTTPHeader(req.Header)["Keploy-Test-Name"], + Kind: models.HTTP, + Created: time.Now().Unix(), + HTTPReq: models.HTTPReq{ + Method: models.Method(req.Method), + ProtoMajor: req.ProtoMajor, + ProtoMinor: req.ProtoMinor, + // URL: req.URL.String(), + // URL: fmt.Sprintf("%s://%s%s?%s", req.URL.Scheme, req.Host, req.URL.Path, req.URL.RawQuery), + URL: fmt.Sprintf("http://%s%s", req.Host, req.URL.RequestURI()), + // URL: string(b), + Header: pkg.ToYamlHTTPHeader(req.Header), + Body: string(reqBody), + URLParams: pkg.URLParams(req), + Timestamp: reqTimeTest, + }, + HTTPResp: models.HTTPResp{ + StatusCode: resp.StatusCode, + Header: pkg.ToYamlHTTPHeader(resp.Header), + Body: string(respBody), + Timestamp: resTimeTest, + StatusMessage: http.StatusText(resp.StatusCode), + }, + Noise: map[string][]string{}, + // Mocks: mocks, + } + if err != nil { + utils.LogError(logger, err, "failed to record the ingress requests") + return + } +} diff --git a/pkg/core/hooks/conn/socket.go b/pkg/core/hooks/conn/socket.go new file mode 100644 index 000000000..afde7d6bc --- /dev/null +++ b/pkg/core/hooks/conn/socket.go @@ -0,0 +1,241 @@ +package conn + +import ( + "bytes" + "context" + "encoding/binary" + "errors" + "fmt" + "os" + "time" + "unsafe" + + "golang.org/x/sync/errgroup" + + "github.com/cilium/ebpf" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + + "github.com/cilium/ebpf/perf" + "github.com/cilium/ebpf/ringbuf" + "go.uber.org/zap" +) + +var eventAttributesSize = int(unsafe.Sizeof(SocketDataEvent{})) + +// ListenSocket starts the socket event listeners +func ListenSocket(ctx context.Context, l *zap.Logger, openMap, dataMap, closeMap *ebpf.Map) (<-chan *models.TestCase, error) { + t := make(chan *models.TestCase, 500) + err := initRealTimeOffset() + if err != nil { + utils.LogError(l, err, "failed to initialize real time offset") + return nil, errors.New("failed to start socket listeners") + } + c := NewFactory(time.Minute, l) + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return nil, errors.New("failed to get the error group from the context") + } + g.Go(func() error { + defer utils.Recover(l) + go func() { + defer utils.Recover(l) + for { + select { + case <-ctx.Done(): + return + default: + // TODO refactor this to directly consume the events from the maps + c.ProcessActiveTrackers(ctx, t) + time.Sleep(100 * time.Millisecond) + } + } + }() + <-ctx.Done() + close(t) + return nil + }) + + err = open(ctx, c, l, openMap) + if err != nil { + utils.LogError(l, err, "failed to start open socket listener") + return nil, errors.New("failed to start socket listeners") + } + err = data(ctx, c, l, dataMap) + if err != nil { + utils.LogError(l, err, "failed to start data socket listener") + return nil, errors.New("failed to start socket listeners") + } + err = exit(ctx, c, l, closeMap) + if err != nil { + utils.LogError(l, err, "failed to start close socket listener") + return nil, errors.New("failed to start socket listeners") + } + return t, err +} + +func open(ctx context.Context, c *Factory, l *zap.Logger, m *ebpf.Map) error { + + r, err := perf.NewReader(m, os.Getpagesize()) + if err != nil { + utils.LogError(l, nil, "failed to create perf event reader of socketOpenEvent") + return err + } + + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + g.Go(func() error { + defer utils.Recover(l) + go func() { + defer utils.Recover(l) + for { + rec, err := r.Read() + if err != nil { + if errors.Is(err, perf.ErrClosed) { + return + } + utils.LogError(l, err, "failed to read from perf socketOpenEvent reader") + continue + } + + if rec.LostSamples != 0 { + l.Debug("Unable to add samples to the socketOpenEvent array due to its full capacity", zap.Any("samples", rec.LostSamples)) + continue + } + data := rec.RawSample + var event SocketOpenEvent + + if err := binary.Read(bytes.NewReader(data), binary.LittleEndian, &event); err != nil { + utils.LogError(l, err, "failed to decode the received data from perf socketOpenEvent reader") + continue + } + + event.TimestampNano += getRealTimeOffset() + c.GetOrCreate(event.ConnID).AddOpenEvent(event) + } + }() + <-ctx.Done() // Check for context cancellation + err := r.Close() + if err != nil { + utils.LogError(l, err, "failed to close perf socketOpenEvent reader") + } + return nil + }) + return nil +} + +func data(ctx context.Context, c *Factory, l *zap.Logger, m *ebpf.Map) error { + r, err := ringbuf.NewReader(m) + if err != nil { + utils.LogError(l, nil, "failed to create ring buffer of socketDataEvent") + return err + } + + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + g.Go(func() error { + defer utils.Recover(l) + go func() { + defer utils.Recover(l) + for { + record, err := r.Read() + if err != nil { + if !errors.Is(err, ringbuf.ErrClosed) { + utils.LogError(l, err, "failed to receive signal from ringbuf socketDataEvent reader") + return + } + continue + } + + bin := record.RawSample + if len(bin) < eventAttributesSize { + l.Debug(fmt.Sprintf("Buffer's for SocketDataEvent is smaller (%d) than the minimum required (%d)", len(bin), eventAttributesSize)) + continue + } else if len(bin) > EventBodyMaxSize+eventAttributesSize { + l.Debug(fmt.Sprintf("Buffer's for SocketDataEvent is bigger (%d) than the maximum for the struct (%d)", len(bin), EventBodyMaxSize+eventAttributesSize)) + continue + } + + var event SocketDataEvent + + if err := binary.Read(bytes.NewReader(bin), binary.LittleEndian, &event); err != nil { + utils.LogError(l, err, "failed to decode the received data from ringbuf socketDataEvent reader") + continue + } + + event.TimestampNano += getRealTimeOffset() + + if event.Direction == IngressTraffic { + event.EntryTimestampNano += getRealTimeOffset() + l.Debug(fmt.Sprintf("Request EntryTimestamp :%v\n", convertUnixNanoToTime(event.EntryTimestampNano))) + } + + c.GetOrCreate(event.ConnID).AddDataEvent(event) + } + }() + <-ctx.Done() // Check for context cancellation + err := r.Close() + if err != nil { + utils.LogError(l, err, "failed to close ringbuf socketDataEvent reader") + } + return nil + }) + return nil +} + +func exit(ctx context.Context, c *Factory, l *zap.Logger, m *ebpf.Map) error { + + r, err := perf.NewReader(m, os.Getpagesize()) + if err != nil { + utils.LogError(l, nil, "failed to create perf event reader of socketCloseEvent") + return err + } + + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + g.Go(func() error { + defer utils.Recover(l) + go func() { + defer utils.Recover(l) + for { + rec, err := r.Read() + if err != nil { + if errors.Is(err, perf.ErrClosed) { + return + } + utils.LogError(l, err, "failed to read from perf socketCloseEvent reader") + continue + } + if rec.LostSamples != 0 { + l.Debug(fmt.Sprintf("perf socketCloseEvent array full, dropped %d samples", rec.LostSamples)) + continue + } + data := rec.RawSample + + var event SocketCloseEvent + if err := binary.Read(bytes.NewReader(data), binary.LittleEndian, &event); err != nil { + l.Debug(fmt.Sprintf("Failed to decode received data: %+v", err)) + continue + } + + event.TimestampNano += getRealTimeOffset() + c.GetOrCreate(event.ConnID).AddCloseEvent(event) + } + }() + + <-ctx.Done() // Check for context cancellation + err := r.Close() + if err != nil { + utils.LogError(l, err, "failed to close perf socketCloseEvent reader") + return err + } + return nil + }) + return nil +} diff --git a/pkg/core/hooks/conn/tracker.go b/pkg/core/hooks/conn/tracker.go new file mode 100755 index 000000000..af3c565f0 --- /dev/null +++ b/pkg/core/hooks/conn/tracker.go @@ -0,0 +1,405 @@ +package conn + +import ( + "fmt" + "strings" + "sync" + "sync/atomic" + "time" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + // "log" +) + +// Tracker is a routine-safe container that holds a conn with unique ID, and able to create new conn. +type Tracker struct { + connID ID + addr SockAddrIn + openTimestamp uint64 + closeTimestamp uint64 + + // Indicates the tracker stopped tracking due to closing the session. + lastActivityTimestamp uint64 + + // Queues to handle multiple ingress traffic on the same conn (keep-alive) + + // kernelRespSizes is a slice of the total number of Response bytes received in the kernel side + kernelRespSizes []uint64 + + // kernelReqSizes is a slice of the total number of Request bytes received in the kernel side + kernelReqSizes []uint64 + + // userRespSizes is a slice of the total number of Response bytes received in the user side + userRespSizes []uint64 + + // userReqSizes is a slice of the total number of Request bytes received in the user side + userReqSizes []uint64 + // userRespBufs is a slice of the Response data received in the user side on this conn + userResps [][]byte + // userReqBufs is a slice of the Request data received in the user side on this conn + userReqs [][]byte + + // req and resp are the buffers to store the request and response data for the current request + // reset after 2 seconds of inactivity + respSize uint64 + reqSize uint64 + resp []byte + req []byte + + // Additional fields to know when to capture request or response info + // reset after 2 seconds of inactivity + lastChunkWasResp bool + lastChunkWasReq bool + recTestCounter int32 //atomic counter + // firstRequest is used to indicate if the current request is the first request on the conn + // reset after 2 seconds of inactivity + // Note: This is used to handle multiple requests on the same conn (keep-alive) + // Its different from isNewRequest which is used to indicate if the current request chunk is the first chunk of the request + firstRequest bool + + mutex sync.RWMutex + logger *zap.Logger + + reqTimestamps []time.Time + isNewRequest bool +} + +func NewTracker(connID ID, logger *zap.Logger) *Tracker { + return &Tracker{ + connID: connID, + req: []byte{}, + resp: []byte{}, + kernelRespSizes: []uint64{}, + kernelReqSizes: []uint64{}, + userRespSizes: []uint64{}, + userReqSizes: []uint64{}, + userResps: [][]byte{}, + userReqs: [][]byte{}, + mutex: sync.RWMutex{}, + logger: logger, + firstRequest: true, + isNewRequest: true, + } +} + +func (conn *Tracker) ToBytes() ([]byte, []byte) { + conn.mutex.RLock() + defer conn.mutex.RUnlock() + return conn.req, conn.resp +} + +func (conn *Tracker) IsInactive(duration time.Duration) bool { + conn.mutex.RLock() + defer conn.mutex.RUnlock() + return uint64(time.Now().UnixNano())-conn.lastActivityTimestamp > uint64(duration.Nanoseconds()) +} + +func (conn *Tracker) incRecordTestCount() { + atomic.AddInt32(&conn.recTestCounter, 1) +} + +func (conn *Tracker) decRecordTestCount() { + atomic.AddInt32(&conn.recTestCounter, -1) +} + +// IsComplete checks if the current conn has valid request & response info to capture and also returns the request and response data buffer. +func (conn *Tracker) IsComplete() (bool, []byte, []byte, time.Time, time.Time) { + conn.mutex.Lock() + defer conn.mutex.Unlock() + + // Get the current timestamp in nanoseconds. + currentTimestamp := uint64(time.Now().UnixNano()) + + // Calculate the time elapsed since the last activity in nanoseconds. + elapsedTime := currentTimestamp - conn.lastActivityTimestamp + + //Caveat: Added a timeout of 4 seconds, after this duration we assume that the last response data event would have come. + // This will ensure that we capture the requests responses where Connection:keep-alive is enabled. + + recordTraffic := false + + requestBuf, responseBuf := []byte{}, []byte{} + + var reqTimestamps, respTimestamp time.Time + + //if recTestCounter > 0, it means that we have num(recTestCounter) of request and response present in the queues to record. + if conn.recTestCounter > 0 { + if (len(conn.userReqSizes) > 0 && len(conn.kernelReqSizes) > 0) && + (len(conn.userRespSizes) > 0 && len(conn.kernelRespSizes) > 0) { + validReq, validRes := false, false + + expectedRecvBytes := conn.userReqSizes[0] + actualRecvBytes := conn.kernelReqSizes[0] + + if expectedRecvBytes == 0 || actualRecvBytes == 0 { + conn.logger.Warn("Malformed request", zap.Any("ExpectedRecvBytes", expectedRecvBytes), zap.Any("ActualRecvBytes", actualRecvBytes)) + } + + //popping out the current request info + conn.userReqSizes = conn.userReqSizes[1:] + conn.kernelReqSizes = conn.kernelReqSizes[1:] + + if conn.verifyRequestData(expectedRecvBytes, actualRecvBytes) { + validReq = true + } else { + conn.logger.Debug("Malformed request", zap.Any("ExpectedRecvBytes", expectedRecvBytes), zap.Any("ActualRecvBytes", actualRecvBytes)) + } + + expectedSentBytes := conn.userRespSizes[0] + actualSentBytes := conn.kernelRespSizes[0] + + //popping out the current response info + conn.userRespSizes = conn.userRespSizes[1:] + conn.kernelRespSizes = conn.kernelRespSizes[1:] + + if conn.verifyResponseData(expectedSentBytes, actualSentBytes) { + validRes = true + respTimestamp = time.Now() + } else { + conn.logger.Debug("Malformed response", zap.Any("ExpectedSentBytes", expectedSentBytes), zap.Any("ActualSentBytes", actualSentBytes)) + } + + if len(conn.userReqs) > 0 && len(conn.userResps) > 0 { //validated request, response + requestBuf = conn.userReqs[0] + responseBuf = conn.userResps[0] + + //popping out the current request & response data + conn.userReqs = conn.userReqs[1:] + conn.userResps = conn.userResps[1:] + } else { + conn.logger.Debug("no data buffer for request or response", zap.Any("Length of RecvBufQueue", len(conn.userReqs)), zap.Any("Length of SentBufQueue", len(conn.userResps))) + } + + recordTraffic = validReq && validRes + } else { + utils.LogError(conn.logger, nil, "malformed request or response") + recordTraffic = false + } + + conn.logger.Debug(fmt.Sprintf("recording traffic after verifying the request and reponse data:%v", recordTraffic)) + + // // decrease the recTestCounter + conn.decRecordTestCount() + conn.logger.Debug("verified recording", zap.Any("recordTraffic", recordTraffic)) + } else if conn.lastChunkWasResp && elapsedTime >= uint64(time.Second*2) { // Check if 2 seconds has passed since the last activity. + conn.logger.Debug("might be last request on the conn") + + if len(conn.userReqSizes) > 0 && len(conn.kernelReqSizes) > 0 { + + expectedRecvBytes := conn.userReqSizes[0] + actualRecvBytes := conn.kernelReqSizes[0] + + //popping out the current request info + conn.userReqSizes = conn.userReqSizes[1:] + conn.kernelReqSizes = conn.kernelReqSizes[1:] + + if expectedRecvBytes == 0 || actualRecvBytes == 0 { + conn.logger.Warn("Malformed request", zap.Any("ExpectedRecvBytes", expectedRecvBytes), zap.Any("ActualRecvBytes", actualRecvBytes)) + } + + if conn.verifyRequestData(expectedRecvBytes, actualRecvBytes) { + recordTraffic = true + } else { + conn.logger.Debug("Malformed request", zap.Any("ExpectedRecvBytes", expectedRecvBytes), zap.Any("ActualRecvBytes", actualRecvBytes)) + recordTraffic = false + } + + if len(conn.userReqs) > 0 { //validated request, invalided response + requestBuf = conn.userReqs[0] + //popping out the current request data + conn.userReqs = conn.userReqs[1:] + + responseBuf = conn.resp + respTimestamp = time.Now() + } else { + conn.logger.Debug("no data buffer for request", zap.Any("Length of RecvBufQueue", len(conn.userReqs))) + recordTraffic = false + } + + } else { + utils.LogError(conn.logger, nil, "malformed request") + recordTraffic = false + } + + conn.logger.Debug(fmt.Sprintf("recording traffic after verifying the request data (but not response data):%v", recordTraffic)) + //treat immediate next request as first request (2 seconds after last activity) + // this can be to avoid potential corruption in the conn + conn.reset() + + conn.logger.Debug("unverified recording", zap.Any("recordTraffic", recordTraffic)) + } + + // Checking if record traffic is recorded and request & response timestamp is captured or not. + if recordTraffic { + if len(conn.reqTimestamps) > 0 { + // Get the timestamp of current request + reqTimestamps = conn.reqTimestamps[0] + // Pop the timestamp of current request + conn.reqTimestamps = conn.reqTimestamps[1:] + } else { + conn.logger.Debug("no request timestamp found") + if len(requestBuf) > 0 { + reqLine := strings.Split(string(requestBuf), "\n") + if models.GetMode() == models.MODE_RECORD && len(reqLine) > 0 && reqLine[0] != "" { + conn.logger.Warn(fmt.Sprintf("failed to capture request timestamp for a request. Please record it again if important:%v", reqLine[0])) + } + } + recordTraffic = false + } + + conn.logger.Debug(fmt.Sprintf("TestRequestTimestamp:%v || TestResponseTimestamp:%v", reqTimestamps, respTimestamp)) + } + + return recordTraffic, requestBuf, responseBuf, reqTimestamps, respTimestamp +} + +// reset resets the conn's request and response data buffers. +func (conn *Tracker) reset() { + conn.firstRequest = true + conn.lastChunkWasResp = false + conn.lastChunkWasReq = false + conn.reqSize = 0 + conn.respSize = 0 + conn.resp = []byte{} + conn.req = []byte{} +} + +func (conn *Tracker) verifyRequestData(expectedRecvBytes, actualRecvBytes uint64) bool { + return (expectedRecvBytes == actualRecvBytes) +} + +func (conn *Tracker) verifyResponseData(expectedSentBytes, actualSentBytes uint64) bool { + return (expectedSentBytes == actualSentBytes) +} + +// func (conn *Tracker) Malformed() bool { +// conn.mutex.RLock() +// defer conn.mutex.RUnlock() +// // conn.log.Debug("data loss of ingress request message", zap.Any("bytes read in ebpf", conn.totalReadBytes), zap.Any("bytes received in userspace", conn.reqSize)) +// // conn.log.Debug("data loss of ingress response message", zap.Any("bytes written in ebpf", conn.totalWrittenBytes), zap.Any("bytes sent to user", conn.respSize)) +// // conn.log.Debug("", zap.Any("Request buffer", string(conn.req))) +// // conn.log.Debug("", zap.Any("Response buffer", string(conn.resp))) +// return conn.closeTimestamp != 0 && +// conn.totalReadBytes != conn.reqSize && +// conn.totalWrittenBytes != conn.respSize +// } + +func (conn *Tracker) AddDataEvent(event SocketDataEvent) { + conn.mutex.Lock() + defer conn.mutex.Unlock() + conn.UpdateTimestamps() + + conn.logger.Debug(fmt.Sprintf("Got a data event from eBPF, Direction:%v || current Event Size:%v || ConnectionID:%v\n", event.Direction, event.MsgSize, event.ConnID)) + + switch event.Direction { + case EgressTraffic: + // Capturing the timestamp of response as the response just started to come. + // This is to ensure that we capture the response timestamp for the first chunk of the response. + if !conn.isNewRequest { + conn.isNewRequest = true + } + + // Assign the size of the message to the variable msgLengt + msgLength := event.MsgSize + // If the size of the message exceeds the maximum allowed size, + // set msgLength to the maximum allowed size instead + if event.MsgSize > EventBodyMaxSize { + msgLength = EventBodyMaxSize + } + // Append the message (up to msgLength) to the conn's sent buffer + conn.resp = append(conn.resp, event.Msg[:msgLength]...) + conn.respSize += uint64(event.MsgSize) + + //Handling multiple request on same conn to support conn:keep-alive + if conn.firstRequest || conn.lastChunkWasReq { + conn.userReqSizes = append(conn.userReqSizes, conn.reqSize) + conn.reqSize = 0 + + conn.userReqs = append(conn.userReqs, conn.req) + conn.req = []byte{} + + conn.lastChunkWasReq = false + conn.lastChunkWasResp = true + + conn.kernelReqSizes = append(conn.kernelReqSizes, uint64(event.ValidateReadBytes)) + conn.firstRequest = false + } + + case IngressTraffic: + // Capturing the timestamp of request as the request just started to come. + if conn.isNewRequest { + conn.reqTimestamps = append(conn.reqTimestamps, ConvertUnixNanoToTime(event.EntryTimestampNano)) + conn.isNewRequest = false + } + + // Assign the size of the message to the variable msgLength + msgLength := event.MsgSize + // If the size of the message exceeds the maximum allowed size, + // set msgLength to the maximum allowed size instead + if event.MsgSize > EventBodyMaxSize { + msgLength = EventBodyMaxSize + } + // Append the message (up to msgLength) to the conn's receive buffer + conn.req = append(conn.req, event.Msg[:msgLength]...) + conn.reqSize += uint64(event.MsgSize) + + //Handling multiple request on same conn to support conn:keep-alive + if conn.lastChunkWasResp { + // conn.userRespSizes is the total numner of bytes received in the user side + // consumer for the last response. + conn.userRespSizes = append(conn.userRespSizes, conn.respSize) + conn.respSize = 0 + + conn.userResps = append(conn.userResps, conn.resp) + conn.resp = []byte{} + + conn.lastChunkWasReq = true + conn.lastChunkWasResp = false + + conn.kernelRespSizes = append(conn.kernelRespSizes, uint64(event.ValidateWrittenBytes)) + + //Record a test case for the current request/ + conn.incRecordTestCount() + } + + default: + } +} + +func (conn *Tracker) AddOpenEvent(event SocketOpenEvent) { + conn.mutex.Lock() + defer conn.mutex.Unlock() + conn.UpdateTimestamps() + conn.addr = event.Addr + if conn.openTimestamp != 0 && conn.openTimestamp != event.TimestampNano { + conn.logger.Debug("Changed open info timestamp due to new request", zap.Any("from", conn.openTimestamp), zap.Any("to", event.TimestampNano)) + } + // conn.log.Debug("Got an open event from eBPF", zap.Any("File Descriptor", event.ConnID.FD)) + conn.openTimestamp = event.TimestampNano +} + +func (conn *Tracker) AddCloseEvent(event SocketCloseEvent) { + conn.mutex.Lock() + defer conn.mutex.Unlock() + conn.UpdateTimestamps() + if conn.closeTimestamp != 0 && conn.closeTimestamp != event.TimestampNano { + conn.logger.Debug("Changed close info timestamp due to new request", zap.Any("from", conn.closeTimestamp), zap.Any("to", event.TimestampNano)) + } + conn.closeTimestamp = event.TimestampNano + conn.logger.Debug(fmt.Sprintf("Got a close event from eBPF on connectionId:%v\n", event.ConnID)) +} + +func (conn *Tracker) UpdateTimestamps() { + conn.lastActivityTimestamp = uint64(time.Now().UnixNano()) +} + +// ConvertUnixNanoToTime takes a Unix timestamp in nanoseconds as a uint64 and returns the corresponding time.Time +func ConvertUnixNanoToTime(unixNano uint64) time.Time { + // Unix time is the number of seconds since January 1, 1970 UTC, + // so convert nanoseconds to seconds for time.Unix function + seconds := int64(unixNano / uint64(time.Second)) + nanoRemainder := int64(unixNano % uint64(time.Second)) + return time.Unix(seconds, nanoRemainder) +} diff --git a/pkg/core/hooks/conn/util.go b/pkg/core/hooks/conn/util.go new file mode 100755 index 000000000..985b90825 --- /dev/null +++ b/pkg/core/hooks/conn/util.go @@ -0,0 +1,66 @@ +package conn + +import ( + "fmt" + "time" + + "golang.org/x/sys/unix" +) + +var ( + realTimeOffset uint64 +) + +// InitRealTimeOffset calculates the offset between the real clock and the monotonic clock used in the BPF. +func initRealTimeOffset() error { + var monotonicTime, realTime unix.Timespec + if err := unix.ClockGettime(unix.CLOCK_MONOTONIC, &monotonicTime); err != nil { + return fmt.Errorf("failed getting monotonic clock due to: %v", err) + } + if err := unix.ClockGettime(unix.CLOCK_REALTIME, &realTime); err != nil { + return fmt.Errorf("failed getting real clock time due to: %v", err) + } + realTimeOffset = uint64(time.Second)*(uint64(realTime.Sec)-uint64(monotonicTime.Sec)) + uint64(realTime.Nsec) - uint64(monotonicTime.Nsec) + // realTimeCopy := time.Unix(int64(realTimeOffset/1e9), int64(realTimeOffset%1e9)) + // log.Debug(fmt.Sprintf("%s real time offset is: %v", Emoji, realTimeCopy)) + return nil +} + +// GetRealTimeOffset is a getter for the real-time-offset. +func getRealTimeOffset() uint64 { + return realTimeOffset +} + +// convertUnixNanoToTime takes a Unix timestamp in nanoseconds as a uint64 and returns the corresponding time.Time +func convertUnixNanoToTime(unixNano uint64) time.Time { + // Unix time is the number of seconds since January 1, 1970 UTC, + // so convert nanoseconds to seconds for time.Unix function + seconds := int64(unixNano / uint64(time.Second)) + nanoRemainder := int64(unixNano % uint64(time.Second)) + return time.Unix(seconds, nanoRemainder) +} + +//// LogAny appends input of any type to a logs.txt file in the current directory +//func LogAny(value string) error { +// +// logMessage := value +// +// // Add a timestamp to the log message +// timestamp := time.Now().Format("2006-01-02 15:04:05") +// logLine := fmt.Sprintf("%s - %s\n", timestamp, logMessage) +// +// // Open logs.txt in append mode, create it if it doesn't exist +// file, err := os.OpenFile("logs.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) +// if err != nil { +// return err +// } +// defer file.Close() +// +// // Write the log line to the file +// _, err = file.WriteString(logLine) +// if err != nil { +// return err +// } +// +// return nil +//} diff --git a/pkg/core/hooks/hooks.go b/pkg/core/hooks/hooks.go new file mode 100644 index 000000000..b1cd5e752 --- /dev/null +++ b/pkg/core/hooks/hooks.go @@ -0,0 +1,595 @@ +// Package hooks provides functionality for managing hooks. +package hooks + +import ( + "context" + "errors" + "fmt" + "os" + "sync" + + "golang.org/x/sync/errgroup" + + "go.keploy.io/server/v2/config" + "go.keploy.io/server/v2/utils" + + "github.com/cilium/ebpf" + "github.com/cilium/ebpf/link" + "github.com/cilium/ebpf/rlimit" + + "go.keploy.io/server/v2/pkg/core" + "go.keploy.io/server/v2/pkg/core/hooks/conn" + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +func NewHooks(logger *zap.Logger, cfg config.Config) *Hooks { + return &Hooks{ + logger: logger, + sess: core.NewSessions(), + m: sync.Mutex{}, + proxyIP: "127.0.0.1", + proxyPort: cfg.ProxyPort, + dnsPort: cfg.DNSPort, + } +} + +type Hooks struct { + logger *zap.Logger + sess *core.Sessions + proxyIP string + proxyPort uint32 + dnsPort uint32 + + m sync.Mutex + // eBPF C shared maps + proxyInfoMap *ebpf.Map + inodeMap *ebpf.Map + redirectProxyMap *ebpf.Map + keployModeMap *ebpf.Map + keployPid *ebpf.Map + appPidMap *ebpf.Map + keployServerPort *ebpf.Map + passthroughPorts *ebpf.Map + DockerCmdMap *ebpf.Map + DNSPort *ebpf.Map + + // eBPF C shared objectsobjects + // ebpf objects and events + socket link.Link + connect4 link.Link + bind link.Link + gp4 link.Link + udpp4 link.Link + tcppv4 link.Link + tcpv4 link.Link + tcpv4Ret link.Link + connect6 link.Link + gp6 link.Link + tcppv6 link.Link + tcpv6 link.Link + tcpv6Ret link.Link + + accept link.Link + acceptRet link.Link + accept4 link.Link + accept4Ret link.Link + read link.Link + readRet link.Link + write link.Link + writeRet link.Link + close link.Link + closeRet link.Link + sendto link.Link + sendtoRet link.Link + recvfrom link.Link + recvfromRet link.Link + objects bpfObjects + writev link.Link + writevRet link.Link +} + +func (h *Hooks) Load(ctx context.Context, id uint64, opts core.HookCfg) error { + + h.sess.Set(id, &core.Session{ + ID: id, + }) + + err := h.load(ctx, opts) + if err != nil { + return err + } + + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + + g.Go(func() error { + defer utils.Recover(h.logger) + <-ctx.Done() + h.unLoad(ctx) + return nil + }) + + if opts.IsDocker { + h.proxyIP = opts.KeployIPV4 + } + + proxyIP, err := IPv4ToUint32(h.proxyIP) + if err != nil { + return fmt.Errorf("failed to convert ip string:[%v] to 32-bit integer", opts.KeployIPV4) + } + + err = h.SendProxyInfo(proxyIP, h.proxyPort, [4]uint32{0000, 0000, 0000, 0001}) + if err != nil { + utils.LogError(h.logger, err, "failed to send proxy info to kernel", zap.Any("NewProxyIp", proxyIP)) + return err + } + + err = h.SendDNSPort(h.dnsPort) + if err != nil { + utils.LogError(h.logger, err, "failed to send dns port to kernel", zap.Any("DnsPort", h.dnsPort)) + return err + } + + err = h.SendCmdType(opts.IsDocker) + if err != nil { + utils.LogError(h.logger, err, "failed to send the cmd type to kernel", zap.Bool("isDocker", opts.IsDocker)) + return err + } + + return nil +} + +func (h *Hooks) load(_ context.Context, opts core.HookCfg) error { + // Allow the current process to lock memory for eBPF resources. + if err := rlimit.RemoveMemlock(); err != nil { + utils.LogError(h.logger, err, "failed to lock memory for eBPF resources") + return err + } + + // Load pre-compiled programs and maps into the kernel. + objs := bpfObjects{} + if err := loadBpfObjects(&objs, nil); err != nil { + utils.LogError(h.logger, err, "failed to load eBPF objects") + return err + } + + //getting all the ebpf maps + h.proxyInfoMap = objs.ProxyInfoMap + h.inodeMap = objs.InodeMap + h.redirectProxyMap = objs.RedirectProxyMap + h.keployModeMap = objs.KeployModeMap + h.keployPid = objs.KeployNamespacePidMap + h.appPidMap = objs.AppNsPidMap + h.keployServerPort = objs.KeployServerPort + h.passthroughPorts = objs.PassThroughPorts + h.DNSPort = objs.DnsPortMap + h.DockerCmdMap = objs.DockerCmdMap + h.objects = objs + + // ----- used in case of wsl ----- + socket, err := link.Kprobe("sys_socket", objs.SyscallProbeEntrySocket, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_socket") + return err + } + h.socket = socket + + // ------------ For Egress ------------- + + bind, err := link.Kprobe("sys_bind", objs.SyscallProbeEntryBind, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_bind") + return err + } + h.bind = bind + + udppC4, err := link.Kprobe("udp_pre_connect", objs.SyscallProbeEntryUdpPreConnect, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on udp_pre_connect") + return err + } + h.udpp4 = udppC4 + + // FOR IPV4 + tcppC4, err := link.Kprobe("tcp_v4_pre_connect", objs.SyscallProbeEntryTcpV4PreConnect, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on tcp_v4_pre_connect") + return err + } + h.tcppv4 = tcppC4 + + tcpC4, err := link.Kprobe("tcp_v4_connect", objs.SyscallProbeEntryTcpV4Connect, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on tcp_v4_connect") + return err + } + h.tcpv4 = tcpC4 + + tcpRC4, err := link.Kretprobe("tcp_v4_connect", objs.SyscallProbeRetTcpV4Connect, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on tcp_v4_connect") + return err + } + h.tcpv4Ret = tcpRC4 + + // Get the first-mounted cgroupv2 path. + cGroupPath, err := detectCgroupPath(h.logger) + if err != nil { + utils.LogError(h.logger, err, "failed to detect the cgroup path") + return err + } + + c4, err := link.AttachCgroup(link.CgroupOptions{ + Path: cGroupPath, + Attach: ebpf.AttachCGroupInet4Connect, + Program: objs.K_connect4, + }) + + if err != nil { + utils.LogError(h.logger, err, "failed to attach the connect4 cgroup hook") + return err + } + h.connect4 = c4 + + gp4, err := link.AttachCgroup(link.CgroupOptions{ + Path: cGroupPath, + Attach: ebpf.AttachCgroupInet4GetPeername, + Program: objs.K_getpeername4, + }) + + if err != nil { + utils.LogError(h.logger, err, "failed to attach the GetPeername4 cgroup hook") + return err + } + h.gp4 = gp4 + + // FOR IPV6 + + tcpPreC6, err := link.Kprobe("tcp_v6_pre_connect", objs.SyscallProbeEntryTcpV6PreConnect, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on tcp_v6_pre_connect") + return err + } + h.tcppv6 = tcpPreC6 + + tcpC6, err := link.Kprobe("tcp_v6_connect", objs.SyscallProbeEntryTcpV6Connect, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on tcp_v6_connect") + return err + } + h.tcpv6 = tcpC6 + + tcpRC6, err := link.Kretprobe("tcp_v6_connect", objs.SyscallProbeRetTcpV6Connect, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on tcp_v6_connect") + return err + } + h.tcpv6Ret = tcpRC6 + + c6, err := link.AttachCgroup(link.CgroupOptions{ + Path: cGroupPath, + Attach: ebpf.AttachCGroupInet6Connect, + Program: objs.K_connect6, + }) + + if err != nil { + utils.LogError(h.logger, err, "failed to attach the connect6 cgroup hook") + return err + } + h.connect6 = c6 + + gp6, err := link.AttachCgroup(link.CgroupOptions{ + Path: cGroupPath, + Attach: ebpf.AttachCgroupInet6GetPeername, + Program: objs.K_getpeername6, + }) + + if err != nil { + utils.LogError(h.logger, err, "failed to attach the GetPeername6 cgroup hook") + return err + } + h.gp6 = gp6 + + //Open a kprobe at the entry of sendto syscall + snd, err := link.Kprobe("sys_sendto", objs.SyscallProbeEntrySendto, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_sendto") + return err + } + h.sendto = snd + + //Opening a kretprobe at the exit of sendto syscall + sndr, err := link.Kretprobe("sys_sendto", objs.SyscallProbeRetSendto, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_sendto") + return err + } + h.sendtoRet = sndr + + // ------------ For Ingress using Kprobes -------------- + + // Open a Kprobe at the entry point of the kernel function and attach the + // pre-compiled program. + ac, err := link.Kprobe("sys_accept", objs.SyscallProbeEntryAccept, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_accept") + return err + } + h.accept = ac + + // Open a Kprobe at the exit point of the kernel function and attach the + // pre-compiled program. + acRet, err := link.Kretprobe("sys_accept", objs.SyscallProbeRetAccept, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_accept") + return err + } + h.acceptRet = acRet + + // Open a Kprobe at the entry point of the kernel function and attach the + // pre-compiled program. + ac4, err := link.Kprobe("sys_accept4", objs.SyscallProbeEntryAccept4, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_accept4") + return err + } + h.accept4 = ac4 + + // Open a Kprobe at the exit point of the kernel function and attach the + // pre-compiled program. + ac4Ret, err := link.Kretprobe("sys_accept4", objs.SyscallProbeRetAccept4, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_accept4") + return err + } + h.accept4Ret = ac4Ret + + // Open a Kprobe at the entry point of the kernel function and attach the + // pre-compiled program. + rd, err := link.Kprobe("sys_read", objs.SyscallProbeEntryRead, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_read") + return err + } + h.read = rd + + // Open a Kprobe at the exit point of the kernel function and attach the + // pre-compiled program. + rdRet, err := link.Kretprobe("sys_read", objs.SyscallProbeRetRead, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_read") + return err + } + h.readRet = rdRet + + // Open a Kprobe at the entry point of the kernel function and attach the + // pre-compiled program. + wt, err := link.Kprobe("sys_write", objs.SyscallProbeEntryWrite, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_write") + return err + } + h.write = wt + + // Open a Kprobe at the exit point of the kernel function and attach the + // pre-compiled program. + wtRet, err := link.Kretprobe("sys_write", objs.SyscallProbeRetWrite, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_write") + return err + } + h.writeRet = wtRet + + // Open a Kprobe at the entry point of the kernel function and attach the + // pre-compiled program for writev. + wtv, err := link.Kprobe("sys_writev", objs.SyscallProbeEntryWritev, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_writev") + return err + } + h.writev = wtv + + // Open a Kprobe at the exit point of the kernel function and attach the + // pre-compiled program for writev. + wtvRet, err := link.Kretprobe("sys_writev", objs.SyscallProbeRetWritev, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_writev") + return err + } + h.writevRet = wtvRet + + // Open a Kprobe at the entry point of the kernel function and attach the + // pre-compiled program. + cl, err := link.Kprobe("sys_close", objs.SyscallProbeEntryClose, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_close") + return err + } + h.close = cl + + //Attaching a kprobe at the entry of recvfrom syscall + rcv, err := link.Kprobe("sys_recvfrom", objs.SyscallProbeEntryRecvfrom, nil) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kprobe hook on sys_recvfrom") + return err + } + h.recvfrom = rcv + + //Attaching a kretprobe at the exit of recvfrom syscall + rcvr, err := link.Kretprobe("sys_recvfrom", objs.SyscallProbeRetRecvfrom, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_recvfrom") + return err + } + h.recvfromRet = rcvr + + // Open a Kprobe at the exit point of the kernel function and attach the + // pre-compiled program. + clRet, err := link.Kretprobe("sys_close", objs.SyscallProbeRetClose, &link.KprobeOptions{RetprobeMaxActive: 1024}) + if err != nil { + utils.LogError(h.logger, err, "failed to attach the kretprobe hook on sys_close") + return err + } + h.closeRet = clRet + + h.logger.Info("keploy initialized and probes added to the kernel.") + + switch models.GetMode() { + case models.MODE_RECORD: + err := h.SetKeployModeInKernel(1) + if err != nil { + utils.LogError(h.logger, nil, "failed to send the keploy mode to the ebpf program") + return err + } + case models.MODE_TEST: + err := h.SetKeployModeInKernel(2) + if err != nil { + utils.LogError(h.logger, nil, "failed to send the keploy mode to the ebpf program") + return err + } + } + + //sending keploy pid to kernel to get filtered + inode, err := getSelfInodeNumber() + if err != nil { + utils.LogError(h.logger, err, "failed to get inode of the keploy process") + return err + } + h.logger.Debug("", zap.Any("Keploy Inode number", inode)) + err = h.SendNameSpaceID(1, inode) + if err != nil { + utils.LogError(h.logger, err, "failed to send the namespace id to the epbf program") + return err + } + err = h.SendKeployPid(uint32(os.Getpid())) + if err != nil { + utils.LogError(h.logger, err, "failed to send the keploy pid to the ebpf program") + return err + } + h.logger.Debug("Keploy Pid sent successfully...") + + //send app pid to kernel to get filtered in case of mock record/test feature of unit test file + // app pid here is the pid of the unit test file process or application pid + if opts.Pid != 0 { + err = h.SendAppPid(opts.Pid) + if err != nil { + utils.LogError(h.logger, err, "failed to send the app pid to the ebpf program") + return err + } + } + + return nil +} + +func (h *Hooks) Record(ctx context.Context, _ uint64) (<-chan *models.TestCase, error) { + // TODO use the session to get the app id + // and then use the app id to get the test cases chan + // and pass that to eBPF consumers/listeners + return conn.ListenSocket(ctx, h.logger, h.objects.SocketOpenEvents, h.objects.SocketDataEvents, h.objects.SocketCloseEvents) +} + +func (h *Hooks) unLoad(_ context.Context) { + // closing all events + //other + if err := h.socket.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the socket") + } + + if err := h.bind.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the bind") + } + if err := h.udpp4.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the udpp4") + } + + if err := h.connect4.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the connect4") + } + + if err := h.gp4.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the gp4") + } + + if err := h.tcppv4.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the tcppv4") + } + + if err := h.tcpv4.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the tcpv4") + } + + if err := h.tcpv4Ret.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the tcpv4Ret") + } + + if err := h.connect6.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the connect6") + } + if err := h.gp6.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the gp6") + } + if err := h.tcppv6.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the tcppv6") + } + if err := h.tcpv6.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the tcpv6") + } + if err := h.tcpv6Ret.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the tcpv6Ret") + } + if err := h.accept.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the accept") + } + if err := h.acceptRet.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the acceptRet") + } + if err := h.accept4.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the accept4") + } + if err := h.accept4Ret.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the accept4Ret") + } + if err := h.read.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the read") + } + if err := h.readRet.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the readRet") + } + if err := h.write.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the write") + } + if err := h.writeRet.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the writeRet") + } + if err := h.writev.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the writev") + } + if err := h.writevRet.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the writevRet") + } + if err := h.close.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the close") + } + if err := h.closeRet.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the closeRet") + } + if err := h.sendto.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the sendto") + } + if err := h.sendtoRet.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the sendtoRet") + } + if err := h.recvfrom.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the recvfrom") + } + if err := h.recvfromRet.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the recvfromRet") + } + if err := h.objects.Close(); err != nil { + utils.LogError(h.logger, err, "failed to close the objects") + } + h.logger.Info("eBPF resources released successfully...") +} diff --git a/pkg/core/hooks/kernelComm.go b/pkg/core/hooks/kernelComm.go new file mode 100644 index 000000000..dc929e63b --- /dev/null +++ b/pkg/core/hooks/kernelComm.go @@ -0,0 +1,176 @@ +package hooks + +import ( + "context" + "fmt" + + "github.com/cilium/ebpf" + "go.keploy.io/server/v2/pkg/core" + "go.keploy.io/server/v2/pkg/core/hooks/structs" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +//TODO: rename this file. + +// Get Used by proxy +func (h *Hooks) Get(_ context.Context, srcPort uint16) (*core.NetworkAddress, error) { + d, err := h.GetDestinationInfo(srcPort) + if err != nil { + return nil, err + } + // TODO : need to implement eBPF code to differentiate between different apps + s, ok := h.sess.Get(0) + if !ok { + return nil, fmt.Errorf("session not found") + } + + return &core.NetworkAddress{ + AppID: s.ID, + Version: d.IPVersion, + IPv4Addr: d.DestIP4, + IPv6Addr: d.DestIP6, + Port: d.DestPort, + }, nil +} + +// GetDestinationInfo retrieves destination information associated with a source port. +func (h *Hooks) GetDestinationInfo(srcPort uint16) (*structs.DestInfo, error) { + h.m.Lock() + defer h.m.Unlock() + destInfo := structs.DestInfo{} + if err := h.redirectProxyMap.Lookup(srcPort, &destInfo); err != nil { + return nil, err + } + return &destInfo, nil +} + +func (h *Hooks) Delete(_ context.Context, srcPort uint16) error { + return h.CleanProxyEntry(srcPort) +} + +func (h *Hooks) CleanProxyEntry(srcPort uint16) error { + h.m.Lock() + defer h.m.Unlock() + err := h.redirectProxyMap.Delete(srcPort) + if err != nil { + utils.LogError(h.logger, err, "failed to remove entry from redirect proxy map") + return err + } + h.logger.Debug("successfully removed entry from redirect proxy map", zap.Any("(Key)/SourcePort", srcPort)) + return nil +} + +func (h *Hooks) SendKeployPid(pid uint32) error { + h.logger.Debug("Sending keploy pid to kernel", zap.Any("pid", pid)) + err := h.keployPid.Update(uint32(0), &pid, ebpf.UpdateAny) + if err != nil { + utils.LogError(h.logger, err, "failed to send the keploy pid to the ebpf program") + return err + } + return nil +} + +// SendAppPid sends the application's process ID (PID) to the kernel. +// This function is used when running Keploy tests along with unit tests of the application. +func (h *Hooks) SendAppPid(pid uint32) error { + h.logger.Debug("Sending app pid to kernel", zap.Any("app Pid", pid)) + err := h.appPidMap.Update(uint32(0), &pid, ebpf.UpdateAny) + if err != nil { + utils.LogError(h.logger, err, "failed to send the app pid to the ebpf program") + return err + } + return nil +} + +func (h *Hooks) SetKeployModeInKernel(mode uint32) error { + key := 0 + err := h.keployModeMap.Update(uint32(key), &mode, ebpf.UpdateAny) + if err != nil { + utils.LogError(h.logger, err, "failed to set keploy mode in the epbf program") + return err + } + return nil +} + +// SendProxyInfo sends the IP and Port of the running proxy in the eBPF program. +func (h *Hooks) SendProxyInfo(ip4, port uint32, ip6 [4]uint32) error { + key := 0 + err := h.proxyInfoMap.Update(uint32(key), structs.ProxyInfo{IP4: ip4, IP6: ip6, Port: port}, ebpf.UpdateAny) + if err != nil { + utils.LogError(h.logger, err, "failed to send the proxy IP & Port to the epbf program") + return err + } + return nil +} + +// SendInode sends the inode of the container to ebpf hooks to filter the network traffic +func (h *Hooks) SendInode(_ context.Context, _ uint64, inode uint64) error { + return h.SendNameSpaceID(0, inode) +} + +// SendNameSpaceID function is helpful when user application in running inside a docker container. +func (h *Hooks) SendNameSpaceID(key uint32, inode uint64) error { + err := h.inodeMap.Update(key, &inode, ebpf.UpdateAny) + if err != nil { + utils.LogError(h.logger, err, "failed to send the namespace id to the epbf program", zap.Any("key", key), zap.Any("Inode", inode)) + return err + } + return nil +} + +func (h *Hooks) SendCmdType(isDocker bool) error { + // to notify the kernel hooks that the user application command is running in native linux or docker/docker-compose. + key := 0 + err := h.DockerCmdMap.Update(uint32(key), &isDocker, ebpf.UpdateAny) + if err != nil { + return err + } + return nil +} + +func (h *Hooks) SendDNSPort(port uint32) error { + h.logger.Debug("sending dns server port", zap.Any("port", port)) + key := 0 + err := h.DNSPort.Update(uint32(key), &port, ebpf.UpdateAny) + if err != nil { + utils.LogError(h.logger, err, "failed to send dns server port to the epbf program", zap.Any("dns server port", port)) + return err + } + return nil +} + +func (h *Hooks) PassThroughPortsInKernel(_ context.Context, _ uint64, ports []uint) error { + return h.SendPassThroughPorts(ports) +} + +// SendPassThroughPorts sends the destination ports of the server which should not be intercepted by keploy proxy. +func (h *Hooks) SendPassThroughPorts(filterPorts []uint) error { + portsSize := len(filterPorts) + if portsSize > 10 { + utils.LogError(h.logger, nil, "can not send more than 10 ports to be filtered to the ebpf program") + return fmt.Errorf("passthrough ports limit exceeded") + } + + var ports [10]int32 + + for i := 0; i < 10; i++ { + if i < portsSize { + // Convert uint to int32 + ports[i] = int32(filterPorts[i]) + } else { + // Fill the remaining elements with -1 + ports[i] = -1 + } + } + + for i, v := range ports { + h.logger.Debug(fmt.Sprintf("PassthroughPort(%v):[%v]", i, v)) + err := h.passthroughPorts.Update(uint32(i), &v, ebpf.UpdateAny) + if err != nil { + utils.LogError(h.logger, err, "failed to send the passthrough ports to the ebpf program") + return err + } + } + return nil +} diff --git a/pkg/core/hooks/structs/structs.go b/pkg/core/hooks/structs/structs.go new file mode 100755 index 000000000..86b095094 --- /dev/null +++ b/pkg/core/hooks/structs/structs.go @@ -0,0 +1,34 @@ +// Package structs provides data structures for hooks. +package structs + +type BpfSpinLock struct{ Val uint32 } + +// struct dest_info_t +// { +// u32 ip_version; +// u32 dest_ip4; +// u32 dest_ip6[4]; +// u32 dest_port; +// u32 kernelPid; +// }; + +type DestInfo struct { + IPVersion uint32 + DestIP4 uint32 + DestIP6 [4]uint32 + DestPort uint32 + KernelPid uint32 +} + +// struct proxy_info +// { +// u32 ip4; +// u32 ip6[4]; +// u32 port; +// }; + +type ProxyInfo struct { + IP4 uint32 + IP6 [4]uint32 + Port uint32 +} diff --git a/pkg/core/hooks/util.go b/pkg/core/hooks/util.go new file mode 100644 index 000000000..a42c932f0 --- /dev/null +++ b/pkg/core/hooks/util.go @@ -0,0 +1,69 @@ +package hooks + +import ( + "bufio" + "encoding/binary" + "errors" + "net" + "os" + "path/filepath" + "strings" + "syscall" + + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +// IPv4ToUint32 converts a string representation of an IPv4 address to a 32-bit integer. +func IPv4ToUint32(ipStr string) (uint32, error) { + ipAddr := net.ParseIP(ipStr) + if ipAddr != nil { + ipAddr = ipAddr.To4() + if ipAddr != nil { + return binary.BigEndian.Uint32(ipAddr), nil + } + return 0, errors.New("not a valid IPv4 address") + } + return 0, errors.New("failed to parse IP address") +} + +// detectCgroupPath returns the first-found mount point of type cgroup2 +// and stores it in the cgroupPath global variable. +func detectCgroupPath(logger *zap.Logger) (string, error) { + f, err := os.Open("/proc/mounts") + if err != nil { + return "", err + } + defer func() { + err := f.Close() + if err != nil { + utils.LogError(logger, err, "failed to close /proc/mounts file") + } + }() + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + // example fields: cgroup2 /sys/fs/cgroup/unified cgroup2 rw,nosuid,nodev,noexec,relatime 0 0 + fields := strings.Split(scanner.Text(), " ") + if len(fields) >= 3 && fields[2] == "cgroup2" { + return fields[1], nil + } + } + + return "", errors.New("cgroup2 not mounted") +} + +func getSelfInodeNumber() (uint64, error) { + p := filepath.Join("/proc", "self", "ns", "pid") + + f, err := os.Stat(p) + if err != nil { + return 0, errors.New("failed to get inode of the keploy process") + } + // Dev := (f.Sys().(*syscall.Stat_t)).Dev + Ino := (f.Sys().(*syscall.Stat_t)).Ino + if Ino != 0 { + return Ino, nil + } + return 0, nil +} diff --git a/pkg/core/proxy/README.md b/pkg/core/proxy/README.md new file mode 100755 index 000000000..ef79802bb --- /dev/null +++ b/pkg/core/proxy/README.md @@ -0,0 +1,5 @@ +# Proxy Package Documentation + +This package includes modules that the `hooks` package utilizes to +redirect the outgoing calls of the user API. This redirection is +done with the aim to record or stub the outputs of dependency calls. \ No newline at end of file diff --git a/pkg/core/proxy/asset/ca.crt b/pkg/core/proxy/asset/ca.crt new file mode 100755 index 000000000..f42e24033 --- /dev/null +++ b/pkg/core/proxy/asset/ca.crt @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBczCCARigAwIBAgIUe1yXSfGefdyA09reeQpit2S7TXMwCgYIKoZIzj0EAwIw +FzEVMBMGA1UEAxMMTXkgQ3VzdG9tIENBMB4XDTIzMDQyMDExMDYwMFoXDTMzMDQx +NzExMDYwMFowFzEVMBMGA1UEAxMMTXkgQ3VzdG9tIENBMFkwEwYHKoZIzj0CAQYI +KoZIzj0DAQcDQgAE+QJh3KtWSGRe9NtzZGcJQBcn0ipsjzpo7YlLvbaSFeI62H1b +5EPUjnbDInG4K0nO1Dq/gPtnsVXZcJx06oHj9qNCMEAwDgYDVR0PAQH/BAQDAgEG +MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFDejUAabmE7NFoKSOo5uHAHMumal +MAoGCCqGSM49BAMCA0kAMEYCIQDkGU6Oku9vLo7fLLquHWXR1rB/1YgWIBghnQXJ +fF5GawIhAK/0BaJCVm6rkRuYCdtahkN1N5DtTPr8AQoDV+MT0UmL +-----END CERTIFICATE----- diff --git a/pkg/core/proxy/asset/ca.key b/pkg/core/proxy/asset/ca.key new file mode 100755 index 000000000..de51e1ab8 --- /dev/null +++ b/pkg/core/proxy/asset/ca.key @@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIHtVJjlhxefhiK/LyFlFUHgaA51mbtTLYJPdGWBZHeDSoAoGCCqGSM49 +AwEHoUQDQgAE+QJh3KtWSGRe9NtzZGcJQBcn0ipsjzpo7YlLvbaSFeI62H1b5EPU +jnbDInG4K0nO1Dq/gPtnsVXZcJx06oHj9g== +-----END EC PRIVATE KEY----- diff --git a/pkg/core/proxy/asset/setup_ca.sh b/pkg/core/proxy/asset/setup_ca.sh new file mode 100755 index 000000000..76042a472 --- /dev/null +++ b/pkg/core/proxy/asset/setup_ca.sh @@ -0,0 +1,108 @@ +#!/bin/bash + +# Path to the CA certificate +caCertPath="./ca.crt" + +# Paths to check for CA store +caStorePaths=( + "/usr/local/share/ca-certificates/" + "/etc/pki/ca-trust/source/anchors/" + "/etc/ca-certificates/trust-source/anchors/" + "/etc/pki/trust/anchors/" + "/usr/local/share/certs/" + "/etc/ssl/certs/" +) +# Commands to tools the CA store +caStoreUpdateCmds=( + "update-ca-certificates" + "update-ca-trust" + "trust extract-compat" + "update-ca-trust extract" + "certctl rehash" +) + +# Java related variables +storePass="changeit" +alias="keployCA" + +# Check if directory exists +directory_exists() { + [[ -d $1 ]] +} + +# Check if command exists +command_exists() { + command -v $1 &> /dev/null +} + +# Check if Java is installed +is_java_installed() { + command_exists "java" +} + +# Update the CA store +update_ca_store() { + for cmd in "${caStoreUpdateCmds[@]}"; do + if command_exists "$cmd"; then + $cmd + fi + done +} + +# Install Java CA +install_java_ca() { + caPath=$1 + + if is_java_installed; then + javaHome=$(java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home' | awk -F'=' '{print $2}' | xargs) + cacertsPath="${javaHome}/lib/security/cacerts" + + keytool -list -keystore $cacertsPath -storepass $storePass -alias $alias &> /dev/null + if [ $? -eq 0 ]; then + echo "Java detected and CA already exists, cacertsPath:$cacertsPath" + return + fi + + keytool -import -trustcacerts -keystore $cacertsPath -storepass $storePass -noprompt -alias $alias -file $caPath + if [ $? -eq 0 ]; then + echo "Java detected and successfully imported CA, path:$cacertsPath" + else + echo "Java detected but failed to import CA" + fi + else + echo "Java is not installed on the system" + fi +} + +# Handle TLS setup +handle_tls_setup() { + for path in "${caStorePaths[@]}"; do + if directory_exists "$path"; then + caPath="${path}ca.crt" + cp $caCertPath $caPath + install_java_ca $caPath + fi + done + update_ca_store + +# Set the NODE_EXTRA_CA_CERTS environment variable + export NODE_EXTRA_CA_CERTS="/tmp/ca.crt" + cat $caCertPath > $NODE_EXTRA_CA_CERTS + +# Change the file permissions to allow read and write access for all users + chmod 0666 $NODE_EXTRA_CA_CERTS + +# Log the NODE_EXTRA_CA_CERTS environment variable + echo "NODE_EXTRA_CA_CERTS is set to: $NODE_EXTRA_CA_CERTS" + + # Set the REQUESTS_CA_BUNDLE to the same value as NODE_EXTRA_CA_CERTS for python + export REQUESTS_CA_BUNDLE=$NODE_EXTRA_CA_CERTS + + # Log the REQUESTS_CA_BUNDLE environment variable + echo "REQUESTS_CA_BUNDLE is set to: $REQUESTS_CA_BUNDLE" + + echo "Setup successful" +} + +# Execute the main function +handle_tls_setup \ No newline at end of file diff --git a/pkg/core/proxy/ca.go b/pkg/core/proxy/ca.go new file mode 100644 index 000000000..125d21617 --- /dev/null +++ b/pkg/core/proxy/ca.go @@ -0,0 +1,299 @@ +// Package proxy provides functionality for handling proxies. +package proxy + +import ( + "context" + "crypto" + "crypto/tls" + "crypto/x509" + "embed" + "fmt" + "os" + "os/exec" + "path/filepath" + + "github.com/cloudflare/cfssl/csr" + cfsslLog "github.com/cloudflare/cfssl/log" + "github.com/cloudflare/cfssl/signer" + "github.com/cloudflare/cfssl/signer/local" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +//go:embed asset/ca.crt +var caCrt []byte //certificate + +//go:embed asset/ca.key +var caPKey []byte //private key + +//go:embed asset +var _ embed.FS + +var caStorePath = []string{ + "/usr/local/share/ca-certificates/", + "/etc/pki/ca-trust/source/anchors/", + "/etc/ca-certificates/trust-source/anchors/", + "/etc/pki/trust/anchors/", + "/etc/pki/ca-trust/source/anchors/", + "/usr/local/share/certs/", + "/etc/ssl/certs/", +} + +var caStoreUpdateCmd = []string{ + "update-ca-certificates", + "update-ca-trust", + "trust extract-compat", + "tools-ca-trust extract", + "certctl rehash", +} + +func commandExists(cmd string) bool { + _, err := exec.LookPath(cmd) + return err == nil +} + +func updateCaStore(ctx context.Context) error { + commandRun := false + for _, cmd := range caStoreUpdateCmd { + if commandExists(cmd) { + commandRun = true + c := exec.CommandContext(ctx, cmd) + _, err := c.CombinedOutput() + if err != nil { + select { + case <-ctx.Done(): + return ctx.Err() + default: + return err + } + } + } + } + if !commandRun { + return fmt.Errorf("no valid CA store tools command found") + } + return nil +} + +func getCaPaths() ([]string, error) { + var caPaths []string + for _, dir := range caStorePath { + if util.IsDirectoryExist(dir) { + caPaths = append(caPaths, dir) + } + } + if len(caPaths) == 0 { + return nil, fmt.Errorf("no valid CA store path found") + } + return caPaths, nil +} + +// to extract ca certificate to temp +func extractCertToTemp() (string, error) { + tempFile, err := os.CreateTemp("", "ca.crt") + + if err != nil { + return "", err + } + defer func(tempFile *os.File) { + err := tempFile.Close() + if err != nil { + return + } + }(tempFile) + + // Change the file permissions to allow read access for all users + err = os.Chmod(tempFile.Name(), 0666) + if err != nil { + return "", err + } + + // Write to the file + _, err = tempFile.Write(caCrt) + if err != nil { + return "", err + } + + // Close the file + err = tempFile.Close() + if err != nil { + return "", err + } + return tempFile.Name(), nil +} + +// isJavaCAExist checks if the CA is already installed in the specified Java keystore +func isJavaCAExist(ctx context.Context, alias, storepass, cacertsPath string) bool { + cmd := exec.CommandContext(ctx, "keytool", "-list", "-keystore", cacertsPath, "-storepass", storepass, "-alias", alias) + + err := cmd.Run() + select { + case <-ctx.Done(): + return false + default: + } + return err == nil +} + +// installJavaCA installs the CA in the Java keystore +func installJavaCA(ctx context.Context, logger *zap.Logger, caPath string) error { + // check if java is installed + if util.IsJavaInstalled() { + logger.Debug("checking java path from default java home") + javaHome, err := util.GetJavaHome(ctx) + + if err != nil { + utils.LogError(logger, err, "Java detected but failed to find JAVA_HOME") + return err + } + + // Assuming modern Java structure (without /jre/) + cacertsPath := fmt.Sprintf("%s/lib/security/cacerts", javaHome) + // You can modify these as per your requirements + storePass := "changeit" + alias := "keployCA" + + logger.Debug("", zap.Any("java_home", javaHome), zap.Any("caCertsPath", cacertsPath), zap.Any("caPath", caPath)) + + if isJavaCAExist(ctx, alias, storePass, cacertsPath) { + logger.Info("Java detected and CA already exists", zap.String("path", cacertsPath)) + return nil + } + + cmd := exec.CommandContext(ctx, "keytool", "-import", "-trustcacerts", "-keystore", cacertsPath, "-storepass", storePass, "-noprompt", "-alias", alias, "-file", caPath) + cmdOutput, err := cmd.CombinedOutput() + + if err != nil { + select { + case <-ctx.Done(): + return ctx.Err() + default: + utils.LogError(logger, err, "Java detected but failed to import CA", zap.String("output", string(cmdOutput))) + return err + } + } + + logger.Info("Java detected and successfully imported CA", zap.String("path", cacertsPath), zap.String("output", string(cmdOutput))) + logger.Info("Successfully imported CA", zap.Any("", cmdOutput)) + } else { + logger.Debug("Java is not installed on the system") + } + return nil +} + +// TODO: This function should be used even before starting the proxy server. It should be called just after the keploy is started. +// because the custom ca in case of NODE is set via env variable NODE_EXTRA_CA_CERTS and env variables can be set only on startup. +// As in case of unit test integration, we are starting the proxy via api. + +// SetupCA setups custom certificate authority to handle TLS connections +func SetupCA(ctx context.Context, logger *zap.Logger) error { + caPaths, err := getCaPaths() + if err != nil { + utils.LogError(logger, err, "Failed to find the CA store path") + return err + } + + for _, path := range caPaths { + caPath := filepath.Join(path, "ca.crt") + + fs, err := os.Create(caPath) + if err != nil { + utils.LogError(logger, err, "Failed to create path for ca certificate", zap.Any("root store path", path)) + return err + } + + _, err = fs.Write(caCrt) + if err != nil { + utils.LogError(logger, err, "Failed to write custom ca certificate", zap.Any("root store path", path)) + return err + } + + // install CA in the java keystore if java is installed + err = installJavaCA(ctx, logger, caPath) + if err != nil { + utils.LogError(logger, err, "Failed to install CA in the java keystore") + return err + } + } + + // Update the trusted CAs store + err = updateCaStore(ctx) + if err != nil { + utils.LogError(logger, err, "Failed to update the CA store") + return err + } + + tempCertPath, err := extractCertToTemp() + if err != nil { + utils.LogError(logger, err, "Failed to extract certificate to tmp folder") + return err + } + + // for node + err = os.Setenv("NODE_EXTRA_CA_CERTS", tempCertPath) + if err != nil { + utils.LogError(logger, err, "Failed to set environment variable NODE_EXTRA_CA_CERTS") + return err + } + + // for python + err = os.Setenv("REQUESTS_CA_BUNDLE", tempCertPath) + if err != nil { + utils.LogError(logger, err, "Failed to set environment variable REQUESTS_CA_BUNDLE") + return err + } + return nil +} + +var ( + caPrivKey interface{} + caCertParsed *x509.Certificate + dstURL string +) + +func certForClient(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) { + // Generate a new server certificate and private key for the given hostname + dstURL = clientHello.ServerName + + cfsslLog.Level = cfsslLog.LevelError + + serverReq := &csr.CertificateRequest{ + //Make the name accordng to the ip of the request + CN: clientHello.ServerName, + Hosts: []string{ + clientHello.ServerName, + }, + KeyRequest: csr.NewKeyRequest(), + } + + serverCsr, serverKey, err := csr.ParseRequest(serverReq) + if err != nil { + return nil, fmt.Errorf("failed to create server CSR: %v", err) + } + cryptoSigner, ok := caPrivKey.(crypto.Signer) + if !ok { + return nil, fmt.Errorf("failed to typecast the caPrivKey") + } + signerd, err := local.NewSigner(cryptoSigner, caCertParsed, signer.DefaultSigAlgo(cryptoSigner), nil) + if err != nil { + return nil, fmt.Errorf("failed to create signer: %v", err) + } + + serverCert, err := signerd.Sign(signer.SignRequest{ + Hosts: serverReq.Hosts, + Request: string(serverCsr), + Profile: "web", + }) + if err != nil { + return nil, fmt.Errorf("failed to sign server certificate: %v", err) + } + + // Load the server certificate and private key + serverTLSCert, err := tls.X509KeyPair(serverCert, serverKey) + if err != nil { + return nil, fmt.Errorf("failed to load server certificate and key: %v", err) + } + + return &serverTLSCert, nil +} diff --git a/pkg/core/proxy/conn.go b/pkg/core/proxy/conn.go new file mode 100644 index 000000000..353116ef6 --- /dev/null +++ b/pkg/core/proxy/conn.go @@ -0,0 +1,24 @@ +package proxy + +import ( + "go.uber.org/zap" + "io" + "net" + "sync" +) + +type Conn struct { + net.Conn + r io.Reader + logger *zap.Logger + mu sync.Mutex +} + +func (c *Conn) Read(p []byte) (int, error) { + c.mu.Lock() + defer c.mu.Unlock() + if len(p) == 0 { + c.logger.Debug("the length is 0 for the reading from customConn") + } + return c.r.Read(p) +} diff --git a/pkg/core/proxy/dns.go b/pkg/core/proxy/dns.go new file mode 100644 index 000000000..81b1b433b --- /dev/null +++ b/pkg/core/proxy/dns.go @@ -0,0 +1,206 @@ +package proxy + +import ( + "context" + "fmt" + "net" + "strings" + "sync" + + "github.com/miekg/dns" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func (p *Proxy) startTCPDNSServer(_ context.Context) error { + addr := fmt.Sprintf(":%v", p.DNSPort) + + handler := p + server := &dns.Server{ + Addr: addr, + Net: "tcp", + Handler: handler, + ReusePort: true, + } + + p.TCPDNSServer = server + + p.logger.Info(fmt.Sprintf("starting TCP DNS server at addr %v", server.Addr)) + err := server.ListenAndServe() + if err != nil { + utils.LogError(p.logger, err, "failed to start tcp dns server", zap.Any("addr", server.Addr)) + } + return nil +} + +func (p *Proxy) startUDPDNSServer(_ context.Context) error { + + addr := fmt.Sprintf(":%v", p.DNSPort) + + handler := p + server := &dns.Server{ + Addr: addr, + Net: "udp", + Handler: handler, + ReusePort: true, + // DisableBackground: true, + } + + p.UDPDNSServer = server + + p.logger.Info(fmt.Sprintf("starting UDP DNS server at addr %v", server.Addr)) + err := server.ListenAndServe() + if err != nil { + utils.LogError(p.logger, err, "failed to start udp dns server", zap.Any("addr", server.Addr)) + return err + } + return nil +} + +// For DNS caching +var cache = struct { + sync.RWMutex + m map[string][]dns.RR +}{m: make(map[string][]dns.RR)} + +func generateCacheKey(name string, qtype uint16) string { + return fmt.Sprintf("%s-%s", name, dns.TypeToString[qtype]) +} + +func (p *Proxy) ServeDNS(w dns.ResponseWriter, r *dns.Msg) { + + p.logger.Debug("", zap.Any("Source socket info", w.RemoteAddr().String())) + msg := new(dns.Msg) + msg.SetReply(r) + msg.Authoritative = true + p.logger.Debug("Got some Dns queries") + for _, question := range r.Question { + p.logger.Debug("", zap.Any("Record Type", question.Qtype), zap.Any("Received Query", question.Name)) + + key := generateCacheKey(question.Name, question.Qtype) + + // Check if the answer is cached + cache.RLock() + answers, found := cache.m[key] + cache.RUnlock() + + if !found { + // If not found in cache, resolve the DNS query only in case of record mode + //TODO: Add support for passThrough here using the src<->dst mapping + if models.GetMode() == models.MODE_RECORD { + answers = resolveDNSQuery(p.logger, question.Name) + } + + if len(answers) == 0 { + // If the resolution failed, return a default A record with Proxy IP + if question.Qtype == dns.TypeA { + answers = []dns.RR{&dns.A{ + Hdr: dns.RR_Header{Name: question.Name, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 3600}, + A: net.ParseIP(p.IP4), + }} + p.logger.Debug("failed to resolve dns query hence sending proxy ip4", zap.Any("proxy Ip", p.IP4)) + } else if question.Qtype == dns.TypeAAAA { + answers = []dns.RR{&dns.AAAA{ + Hdr: dns.RR_Header{Name: question.Name, Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 3600}, + AAAA: net.ParseIP(p.IP6), + }} + p.logger.Debug("failed to resolve dns query hence sending proxy ip6", zap.Any("proxy Ip", p.IP6)) + + } + + p.logger.Debug(fmt.Sprintf("Answers[when resolution failed for query:%v]:\n%v\n", question.Qtype, answers)) + } + + // Cache the answer + cache.Lock() + cache.m[key] = answers + cache.Unlock() + p.logger.Debug(fmt.Sprintf("Answers[after caching it]:\n%v\n", answers)) + } + + p.logger.Debug(fmt.Sprintf("Answers[before appending to msg]:\n%v\n", answers)) + msg.Answer = append(msg.Answer, answers...) + p.logger.Debug(fmt.Sprintf("Answers[After appending to msg]:\n%v\n", msg.Answer)) + } + + p.logger.Debug(fmt.Sprintf("dns msg sending back:\n%v\n", msg)) + p.logger.Debug(fmt.Sprintf("dns msg RCODE sending back:\n%v\n", msg.Rcode)) + p.logger.Debug("Writing dns info back to the client...") + err := w.WriteMsg(msg) + if err != nil { + utils.LogError(p.logger, err, "failed to write dns info back to the client") + } +} + +// TODO: passThrough the dns queries rather than resolving them. +func resolveDNSQuery(logger *zap.Logger, domain string) []dns.RR { + // Remove the last dot from the domain name if it exists + domain = strings.TrimSuffix(domain, ".") + + // Use the default system resolver + resolver := net.DefaultResolver + + // Perform the lookup with the context + ips, err := resolver.LookupIPAddr(context.Background(), domain) + if err != nil { + logger.Debug(fmt.Sprintf("failed to resolve the dns query for:%v", domain), zap.Error(err)) + return nil + } + + // Convert the resolved IPs to dns.RR + var answers []dns.RR + for _, ip := range ips { + if ipv4 := ip.IP.To4(); ipv4 != nil { + answers = append(answers, &dns.A{ + Hdr: dns.RR_Header{Name: dns.Fqdn(domain), Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 3600}, + A: ipv4, + }) + } else { + answers = append(answers, &dns.AAAA{ + Hdr: dns.RR_Header{Name: dns.Fqdn(domain), Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 3600}, + AAAA: ip.IP, + }) + } + } + + if len(answers) > 0 { + logger.Debug("net.LookupIP resolved the ip address...") + } + + return answers +} + +func (p *Proxy) stopDNSServers(_ context.Context) error { + // stop tcp dns server + if err := p.stopTCPDNSServer(); err != nil { + return err + } + // stop udp dns server + err := p.stopUDPDNSServer() + return err +} + +func (p *Proxy) stopTCPDNSServer() error { + if p.TCPDNSServer != nil { + err := p.TCPDNSServer.Shutdown() + if err != nil { + utils.LogError(p.logger, err, "failed to stop tcp dns server") + return err + } + p.logger.Info("Tcp Dns server stopped successfully") + } + return nil +} + +func (p *Proxy) stopUDPDNSServer() error { + if p.UDPDNSServer != nil { + err := p.UDPDNSServer.Shutdown() + if err != nil { + utils.LogError(p.logger, err, "failed to stop udp dns server") + return err + } + p.logger.Info("Udp Dns server stopped successfully") + } + return nil +} diff --git a/pkg/core/proxy/integrations/README.md b/pkg/core/proxy/integrations/README.md new file mode 100755 index 000000000..b5c3e3921 --- /dev/null +++ b/pkg/core/proxy/integrations/README.md @@ -0,0 +1,3 @@ +# Integrations Package Documentation + +This package includes modules that are used for parsing different protocols. \ No newline at end of file diff --git a/pkg/core/proxy/integrations/generic/README.md b/pkg/core/proxy/integrations/generic/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/core/proxy/integrations/generic/decode.go b/pkg/core/proxy/integrations/generic/decode.go new file mode 100644 index 000000000..1ffe8020e --- /dev/null +++ b/pkg/core/proxy/integrations/generic/decode.go @@ -0,0 +1,120 @@ +// Package generic provides functionality for decoding generic dependencies. +package generic + +import ( + "context" + "io" + "net" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + pUtil "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func decodeGeneric(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, _ models.OutgoingOptions) error { + genericRequests := [][]byte{reqBuf} + logger.Debug("Into the generic parser in test mode") + errCh := make(chan error, 1) + go func(errCh chan error, genericRequests [][]byte) { + defer utils.Recover(logger) + defer close(errCh) + for { + // Since protocol packets have to be parsed for checking stream end, + // clientConnection have deadline for read to determine the end of stream. + err := clientConn.SetReadDeadline(time.Now().Add(10 * time.Millisecond)) + if err != nil { + utils.LogError(logger, err, "failed to set the read deadline for the client conn") + return + } + + // To read the stream of request packets from the client + for { + buffer, err := pUtil.ReadBytes(ctx, logger, clientConn) + if netErr, ok := err.(net.Error); !(ok && netErr.Timeout()) && err != nil && err.Error() != "EOF" { + utils.LogError(logger, err, "failed to read the request message in proxy for generic dependency") + return + } + if netErr, ok := err.(net.Error); (ok && netErr.Timeout()) || (err != nil && err.Error() == "EOF") { + logger.Debug("the timeout for the client read in generic or EOF") + break + } + genericRequests = append(genericRequests, buffer) + } + + if len(genericRequests) == 0 { + logger.Debug("the generic request buffer is empty") + continue + } + + // bestMatchedIndx := 0 + // fuzzy match gives the index for the best matched generic mock + matched, genericResponses, err := fuzzyMatch(ctx, genericRequests, mockDb) + if err != nil { + utils.LogError(logger, err, "error while matching generic mocks") + } + + if !matched { + err := clientConn.SetReadDeadline(time.Time{}) + if err != nil { + utils.LogError(logger, err, "failed to set the read deadline for the client conn") + return + } + + logger.Debug("the genericRequests before pass through are", zap.Any("length", len(genericRequests))) + for _, genReq := range genericRequests { + logger.Debug("the genericRequests are:", zap.Any("h", string(genReq))) + } + + reqBuffer, err := pUtil.PassThrough(ctx, logger, clientConn, dstCfg, genericRequests) + if err != nil { + utils.LogError(logger, err, "failed to passthrough the generic request") + return + } + + genericRequests = [][]byte{} + logger.Debug("the request buffer after pass through in generic", zap.Any("buffer", string(reqBuffer))) + if len(reqBuffer) > 0 { + genericRequests = [][]byte{reqBuffer} + } + logger.Debug("the length of genericRequests after passThrough ", zap.Any("length", len(genericRequests))) + continue + } + for _, genericResponse := range genericResponses { + encoded := []byte(genericResponse.Message[0].Data) + if genericResponse.Message[0].Type != models.String { + encoded, err = util.DecodeBase64(genericResponse.Message[0].Data) + if err != nil { + utils.LogError(logger, err, "failed to decode the base64 response") + return + } + } + _, err := clientConn.Write(encoded) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "failed to write the response message to the client application") + return + } + } + + // Clear the genericRequests buffer for the next dependency call + genericRequests = [][]byte{} + logger.Debug("the genericRequests after the iteration", zap.Any("length", len(genericRequests))) + } + }(errCh, genericRequests) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err == io.EOF { + return nil + } + return err + } +} diff --git a/pkg/core/proxy/integrations/generic/encode.go b/pkg/core/proxy/integrations/generic/encode.go new file mode 100644 index 000000000..92ed27201 --- /dev/null +++ b/pkg/core/proxy/integrations/generic/encode.go @@ -0,0 +1,207 @@ +package generic + +import ( + "context" + "encoding/base64" + "errors" + "io" + "net" + "strconv" + "time" + + "golang.org/x/sync/errgroup" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + pUtil "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func encodeGeneric(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn, destConn net.Conn, mocks chan<- *models.Mock, _ models.OutgoingOptions) error { + + var genericRequests []models.GenericPayload + + bufStr := string(reqBuf) + dataType := models.String + if !util.IsASCIIPrintable(string(reqBuf)) { + bufStr = util.EncodeBase64(reqBuf) + dataType = "binary" + } + + if bufStr != "" { + genericRequests = append(genericRequests, models.GenericPayload{ + Origin: models.FromClient, + Message: []models.OutputBinary{ + { + Type: dataType, + Data: bufStr, + }, + }, + }) + } + _, err := destConn.Write(reqBuf) + if err != nil { + utils.LogError(logger, err, "failed to write request message to the destination server") + return err + } + var genericResponses []models.GenericPayload + + clientBuffChan := make(chan []byte) + destBuffChan := make(chan []byte) + errChan := make(chan error) + //TODO: where to close the error channel since it is used in both the go routines + //close(errChan) + + //get the error group from the context + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + + // read requests from client + g.Go(func() error { + defer utils.Recover(logger) + defer close(clientBuffChan) + pUtil.ReadBuffConn(ctx, logger, clientConn, clientBuffChan, errChan) + return nil + }) + // read responses from destination + g.Go(func() error { + defer utils.Recover(logger) + defer close(destBuffChan) + pUtil.ReadBuffConn(ctx, logger, destConn, destBuffChan, errChan) + return nil + }) + + prevChunkWasReq := false + var reqTimestampMock = time.Now() + var resTimestampMock time.Time + + // ticker := time.NewTicker(1 * time.Second) + logger.Debug("the iteration for the generic request starts", zap.Any("genericReqs", len(genericRequests)), zap.Any("genericResps", len(genericResponses))) + for { + select { + case <-ctx.Done(): + if !prevChunkWasReq && len(genericRequests) > 0 && len(genericResponses) > 0 { + genericRequestsCopy := make([]models.GenericPayload, len(genericRequests)) + genericResponsesCopy := make([]models.GenericPayload, len(genericResponses)) + copy(genericResponsesCopy, genericResponses) + copy(genericRequestsCopy, genericRequests) + + metadata := make(map[string]string) + metadata["type"] = "config" + // Save the mock + mocks <- &models.Mock{ + Version: models.GetVersion(), + Name: "mocks", + Kind: models.GENERIC, + Spec: models.MockSpec{ + GenericRequests: genericRequestsCopy, + GenericResponses: genericResponsesCopy, + ReqTimestampMock: reqTimestampMock, + ResTimestampMock: resTimestampMock, + Metadata: metadata, + }, + } + return ctx.Err() + } + case buffer := <-clientBuffChan: + // Write the request message to the destination + _, err := destConn.Write(buffer) + if err != nil { + utils.LogError(logger, err, "failed to write request message to the destination server") + return err + } + + logger.Debug("the iteration for the generic request ends with no of genericReqs:" + strconv.Itoa(len(genericRequests)) + " and genericResps: " + strconv.Itoa(len(genericResponses))) + if !prevChunkWasReq && len(genericRequests) > 0 && len(genericResponses) > 0 { + genericRequestsCopy := make([]models.GenericPayload, len(genericRequests)) + genericResponseCopy := make([]models.GenericPayload, len(genericResponses)) + copy(genericResponseCopy, genericResponses) + copy(genericRequestsCopy, genericRequests) + go func(reqs []models.GenericPayload, resps []models.GenericPayload) { + metadata := make(map[string]string) + metadata["type"] = "config" + // Save the mock + mocks <- &models.Mock{ + Version: models.GetVersion(), + Name: "mocks", + Kind: models.GENERIC, + Spec: models.MockSpec{ + GenericRequests: reqs, + GenericResponses: resps, + ReqTimestampMock: reqTimestampMock, + ResTimestampMock: resTimestampMock, + Metadata: metadata, + }, + } + + }(genericRequestsCopy, genericResponseCopy) + genericRequests = []models.GenericPayload{} + genericResponses = []models.GenericPayload{} + } + + bufStr := string(buffer) + buffDataType := models.String + if !util.IsASCIIPrintable(string(buffer)) { + bufStr = util.EncodeBase64(buffer) + buffDataType = "binary" + } + + if bufStr != "" { + genericRequests = append(genericRequests, models.GenericPayload{ + Origin: models.FromClient, + Message: []models.OutputBinary{ + { + Type: buffDataType, + Data: bufStr, + }, + }, + }) + } + + prevChunkWasReq = true + case buffer := <-destBuffChan: + if prevChunkWasReq { + // store the request timestamp + reqTimestampMock = time.Now() + } + // Write the response message to the client + _, err := clientConn.Write(buffer) + if err != nil { + utils.LogError(logger, err, "failed to write response message to the client") + return err + } + + bufStr := string(buffer) + buffDataType := models.String + if !util.IsASCIIPrintable(string(buffer)) { + bufStr = base64.StdEncoding.EncodeToString(buffer) + buffDataType = "binary" + } + + if bufStr != "" { + genericResponses = append(genericResponses, models.GenericPayload{ + Origin: models.FromServer, + Message: []models.OutputBinary{ + { + Type: buffDataType, + Data: bufStr, + }, + }, + }) + } + + resTimestampMock = time.Now() + + logger.Debug("the iteration for the generic response ends with no of genericReqs:" + strconv.Itoa(len(genericRequests)) + " and genericResps: " + strconv.Itoa(len(genericResponses))) + prevChunkWasReq = false + case err := <-errChan: + if err == io.EOF { + return nil + } + return err + } + } +} diff --git a/pkg/core/proxy/integrations/generic/generic.go b/pkg/core/proxy/integrations/generic/generic.go new file mode 100755 index 000000000..13a9b74d5 --- /dev/null +++ b/pkg/core/proxy/integrations/generic/generic.go @@ -0,0 +1,65 @@ +package generic + +import ( + "context" + "net" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func init() { + integrations.Register("generic", NewGeneric) +} + +type Generic struct { + logger *zap.Logger +} + +func NewGeneric(logger *zap.Logger) integrations.Integrations { + return &Generic{ + logger: logger, + } +} + +func (g *Generic) MatchType(_ context.Context, _ []byte) bool { + // generic is checked explicitly in the proxy + return false +} + +func (g *Generic) RecordOutgoing(ctx context.Context, src net.Conn, dst net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + logger := g.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", ctx.Value(models.ClientConnectionIDKey).(string)), zap.Any("Destination ConnectionID", ctx.Value(models.DestConnectionIDKey).(string))) + + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial generic message") + return err + } + + err = encodeGeneric(ctx, logger, reqBuf, src, dst, mocks, opts) + if err != nil { + utils.LogError(logger, err, "failed to encode the generic message into the yaml") + return err + } + return nil +} + +func (g *Generic) MockOutgoing(ctx context.Context, src net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + logger := g.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", util.GetNextID()), zap.Any("Destination ConnectionID", util.GetNextID())) + + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial generic message") + return err + } + + err = decodeGeneric(ctx, logger, reqBuf, src, dstCfg, mockDb, opts) + if err != nil { + utils.LogError(logger, err, "failed to decode the generic message") + return err + } + return nil +} diff --git a/pkg/core/proxy/integrations/generic/match.go b/pkg/core/proxy/integrations/generic/match.go new file mode 100755 index 000000000..642738dff --- /dev/null +++ b/pkg/core/proxy/integrations/generic/match.go @@ -0,0 +1,141 @@ +package generic + +import ( + "context" + "encoding/base64" + "fmt" + "math" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + "go.keploy.io/server/v2/pkg/models" +) + +func fuzzyMatch(ctx context.Context, reqBuff [][]byte, mockDb integrations.MockMemDb) (bool, []models.GenericPayload, error) { + for { + select { + case <-ctx.Done(): + return false, nil, ctx.Err() + default: + mocks, err := mockDb.GetUnFilteredMocks() + if err != nil { + return false, nil, fmt.Errorf("error while getting unfiltered mocks %v", err) + } + + var filteredMocks []*models.Mock + var unfilteredMocks []*models.Mock + + for _, mock := range mocks { + if mock.TestModeInfo.IsFiltered { + filteredMocks = append(filteredMocks, mock) + } else { + unfilteredMocks = append(unfilteredMocks, mock) + } + } + + index := findExactMatch(filteredMocks, reqBuff) + + if index == -1 { + index = findBinaryMatch(filteredMocks, reqBuff, 0.9) + } + + if index != -1 { + responseMock := make([]models.GenericPayload, len(filteredMocks[index].Spec.GenericResponses)) + copy(responseMock, filteredMocks[index].Spec.GenericResponses) + originalFilteredMock := *filteredMocks[index] + filteredMocks[index].TestModeInfo.IsFiltered = false + filteredMocks[index].TestModeInfo.SortOrder = math.MaxInt64 + isUpdated := mockDb.UpdateUnFilteredMock(&originalFilteredMock, filteredMocks[index]) + if isUpdated { + continue + } + return true, responseMock, nil + } + + index = findExactMatch(unfilteredMocks, reqBuff) + + if index != -1 { + responseMock := make([]models.GenericPayload, len(unfilteredMocks[index].Spec.GenericResponses)) + copy(responseMock, unfilteredMocks[index].Spec.GenericResponses) + return true, responseMock, nil + } + + totalMocks := append(filteredMocks, unfilteredMocks...) + index = findBinaryMatch(totalMocks, reqBuff, 0.5) + + if index != -1 { + responseMock := make([]models.GenericPayload, len(totalMocks[index].Spec.GenericResponses)) + copy(responseMock, totalMocks[index].Spec.GenericResponses) + originalFilteredMock := *totalMocks[index] + if totalMocks[index].TestModeInfo.IsFiltered { + totalMocks[index].TestModeInfo.IsFiltered = false + totalMocks[index].TestModeInfo.SortOrder = math.MaxInt64 + isUpdated := mockDb.UpdateUnFilteredMock(&originalFilteredMock, totalMocks[index]) + if isUpdated { + continue + } + } + return true, responseMock, nil + } + return false, nil, nil + } + } +} + +// TODO: need to generalize this function for different types of integrations. +func findBinaryMatch(tcsMocks []*models.Mock, reqBuffs [][]byte, mxSim float64) int { + // TODO: need find a proper similarity index to set a benchmark for matching or need to find another way to do approximate matching + mxIdx := -1 + for idx, mock := range tcsMocks { + if len(mock.Spec.GenericRequests) == len(reqBuffs) { + for requestIndex, reqBuff := range reqBuffs { + _ = base64.StdEncoding.EncodeToString(reqBuff) + encoded, _ := util.DecodeBase64(mock.Spec.GenericRequests[requestIndex].Message[0].Data) + + similarity := fuzzyCheck(encoded, reqBuff) + + if mxSim < similarity { + mxSim = similarity + mxIdx = idx + } + } + } + } + return mxIdx +} + +func fuzzyCheck(encoded, reqBuf []byte) float64 { + k := util.AdaptiveK(len(reqBuf), 3, 8, 5) + shingles1 := util.CreateShingles(encoded, k) + shingles2 := util.CreateShingles(reqBuf, k) + similarity := util.JaccardSimilarity(shingles1, shingles2) + return similarity +} + +func findExactMatch(tcsMocks []*models.Mock, reqBuffs [][]byte) int { + for idx, mock := range tcsMocks { + if len(mock.Spec.GenericRequests) == len(reqBuffs) { + matched := true // Flag to track if all requests match + + for requestIndex, reqBuff := range reqBuffs { + + bufStr := string(reqBuff) + if !util.IsASCIIPrintable(string(reqBuff)) { + bufStr = util.EncodeBase64(reqBuff) + } + + // Compare the encoded data + if mock.Spec.GenericRequests[requestIndex].Message[0].Data != bufStr { + matched = false + break // Exit the loop if any request doesn't match + } + } + + if matched { + return idx + } + } + } + return -1 +} diff --git a/pkg/core/proxy/integrations/grpc/decode.go b/pkg/core/proxy/integrations/grpc/decode.go new file mode 100644 index 000000000..498e973e3 --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/decode.go @@ -0,0 +1,25 @@ +// Package grpc provides functionality for integrating with gRPC outgoing calls. +package grpc + +import ( + "context" + "net" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "golang.org/x/net/http2" +) + +func decodeGrpc(ctx context.Context, logger *zap.Logger, _ []byte, clientConn net.Conn, _ *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, _ models.OutgoingOptions) error { + framer := http2.NewFramer(clientConn, clientConn) + srv := NewTranscoder(logger, framer, mockDb) + // fake server in the test mode + err := srv.ListenAndServe(ctx) + if err != nil { + utils.LogError(logger, nil, "could not serve grpc request") + return err + } + return nil +} diff --git a/pkg/core/proxy/integrations/grpc/encode.go b/pkg/core/proxy/integrations/grpc/encode.go new file mode 100644 index 000000000..b85a3254f --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/encode.go @@ -0,0 +1,82 @@ +package grpc + +import ( + "context" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" + "io" + "net" +) + +func encodeGrpc(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn, destConn net.Conn, mocks chan<- *models.Mock, _ models.OutgoingOptions) error { + + // Send the client preface to the server. This should be the first thing sent from the client. + _, err := destConn.Write(reqBuf) + if err != nil { + utils.LogError(logger, err, "Could not write preface onto the destination server") + return err + } + + if ctx.Err() != nil { + return ctx.Err() + } + + streamInfoCollection := NewStreamInfoCollection() + reqFromClient := true + + serverSideDecoder := NewDecoder() + + // get the error group from the context + g := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + errCh := make(chan error, 2) + defer close(errCh) + + // Route requests from the client to the server. + g.Go(func() error { + defer utils.Recover(logger) + err := transferFrame(ctx, destConn, clientConn, streamInfoCollection, reqFromClient, serverSideDecoder, mocks) + if err != nil { + // check for EOF error + if err == io.EOF { + logger.Debug("EOF error received from client. Closing conn") + return nil + } + utils.LogError(logger, err, "failed to transfer frame from client to server") + if ctx.Err() != nil { //to avoid sending error to the closed channel if the context is cancelled + return ctx.Err() + } + errCh <- err + } + return nil + }) + + // Route response from the server to the client. + clientSideDecoder := NewDecoder() + g.Go(func() error { + defer utils.Recover(logger) + err := transferFrame(ctx, clientConn, destConn, streamInfoCollection, !reqFromClient, clientSideDecoder, mocks) + if err != nil { + utils.LogError(logger, err, "failed to transfer frame from server to client") + if ctx.Err() != nil { //to avoid sending error to the closed channel if the context is cancelled + return ctx.Err() + } + errCh <- err + } + return nil + }) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err == io.EOF { + return nil + } + return err + } + // This would practically be an infinite loop, unless the client closes the grpc conn + // during the runtime of the application. + // A grpc server/client terminating after some time maybe intentional. +} diff --git a/pkg/core/proxy/integrations/grpc/frame.go b/pkg/core/proxy/integrations/grpc/frame.go new file mode 100644 index 000000000..4168c208b --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/frame.go @@ -0,0 +1,186 @@ +package grpc + +import ( + "context" + "fmt" + "go.keploy.io/server/v2/pkg/models" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "io" + "net" + "time" +) + +// transferFrame reads one frame from rhs and writes it to lhs. +func transferFrame(ctx context.Context, lhs net.Conn, rhs net.Conn, sic *StreamInfoCollection, reqFromClient bool, decoder *hpack.Decoder, mocks chan<- *models.Mock) error { + respFromServer := !reqFromClient + framer := http2.NewFramer(lhs, rhs) + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + frame, err := framer.ReadFrame() + if err != nil { + if err == io.EOF { + return err + } + return fmt.Errorf("error reading frame %v", err) + } + + switch frame := frame.(type) { + case *http2.SettingsFrame: + settingsFrame := frame + if settingsFrame.IsAck() { + // Transfer Ack. + if err := framer.WriteSettingsAck(); err != nil { + return fmt.Errorf("could not write ack for settings frame: %v", err) + } + } else { + var settingsCollection []http2.Setting + err = settingsFrame.ForeachSetting(func(setting http2.Setting) error { + settingsCollection = append(settingsCollection, setting) + return nil + }) + if err != nil { + return fmt.Errorf("could not read settings from settings frame: %v", err) + } + + if err := framer.WriteSettings(settingsCollection...); err != nil { + return fmt.Errorf("could not write settings fraame: %v", err) + } + } + case *http2.HeadersFrame: + headersFrame := frame + streamID := headersFrame.StreamID + err := framer.WriteHeaders(http2.HeadersFrameParam{ + StreamID: streamID, + BlockFragment: headersFrame.HeaderBlockFragment(), + EndStream: headersFrame.StreamEnded(), + EndHeaders: headersFrame.HeadersEnded(), + PadLength: 0, + Priority: headersFrame.Priority, + }) + if err != nil { + return fmt.Errorf("could not write headers frame: %v", err) + } + pseudoHeaders, ordinaryHeaders, err := extractHeaders(headersFrame, decoder) + if err != nil { + return fmt.Errorf("could not extract headers from frame: %v", err) + } + + if reqFromClient { + sic.AddHeadersForRequest(streamID, pseudoHeaders, true) + sic.AddHeadersForRequest(streamID, ordinaryHeaders, false) + } else if respFromServer { + // If this is the last fragment of a stream from the server, it has to be a trailer. + isTrailer := false + if headersFrame.StreamEnded() { + isTrailer = true + } + sic.AddHeadersForResponse(streamID, pseudoHeaders, true, isTrailer) + sic.AddHeadersForResponse(streamID, ordinaryHeaders, false, isTrailer) + } + + // The trailers frame has been received. The stream has been closed by the server. + // Capture the mock and clear the map, as the stream ID can be reused by client. + if respFromServer && headersFrame.StreamEnded() { + sic.PersistMockForStream(ctx, streamID, mocks) + sic.ResetStream(streamID) + } + + case *http2.DataFrame: + dataFrame := frame + err := framer.WriteData(dataFrame.StreamID, dataFrame.StreamEnded(), dataFrame.Data()) + if err != nil { + return fmt.Errorf("could not write data frame: %v", err) + } + if reqFromClient { + // Capturing the request timestamp + sic.ReqTimestampMock = time.Now() + + sic.AddPayloadForRequest(dataFrame.StreamID, dataFrame.Data()) + } else if respFromServer { + // Capturing the response timestamp + sic.ResTimestampMock = time.Now() + + sic.AddPayloadForResponse(dataFrame.StreamID, dataFrame.Data()) + } + case *http2.PingFrame: + pingFrame := frame + err := framer.WritePing(pingFrame.IsAck(), pingFrame.Data) + if err != nil { + return fmt.Errorf("could not write ACK for ping: %v", err) + } + case *http2.WindowUpdateFrame: + windowUpdateFrame := frame + err := framer.WriteWindowUpdate(windowUpdateFrame.StreamID, windowUpdateFrame.Increment) + if err != nil { + return fmt.Errorf("could not write window tools frame: %v", err) + } + case *http2.ContinuationFrame: + continuationFrame := frame + err := framer.WriteContinuation(continuationFrame.StreamID, continuationFrame.HeadersEnded(), + continuationFrame.HeaderBlockFragment()) + if err != nil { + return fmt.Errorf("could not write continuation frame: %v", err) + } + case *http2.PriorityFrame: + priorityFrame := frame + err := framer.WritePriority(priorityFrame.StreamID, priorityFrame.PriorityParam) + if err != nil { + return fmt.Errorf("could not write priority frame: %v", err) + } + case *http2.RSTStreamFrame: + rstStreamFrame := frame + err := framer.WriteRSTStream(rstStreamFrame.StreamID, rstStreamFrame.ErrCode) + if err != nil { + return fmt.Errorf("could not write reset stream frame: %v", err) + } + case *http2.GoAwayFrame: + goAwayFrame := frame + err := framer.WriteGoAway(goAwayFrame.StreamID, goAwayFrame.ErrCode, goAwayFrame.DebugData()) + if err != nil { + return fmt.Errorf("could not write GoAway frame: %v", err) + } + case *http2.PushPromiseFrame: + pushPromiseFrame := frame + err := framer.WritePushPromise(http2.PushPromiseParam{ + StreamID: pushPromiseFrame.StreamID, + PromiseID: pushPromiseFrame.PromiseID, + BlockFragment: pushPromiseFrame.HeaderBlockFragment(), + EndHeaders: pushPromiseFrame.HeadersEnded(), + PadLength: 0, + }) + if err != nil { + return fmt.Errorf("could not write PushPromise frame: %v", err) + } + } + } + } +} + +// constants for dynamic table size +const ( + KmaxDynamicTableSize = 2048 +) + +func extractHeaders(frame *http2.HeadersFrame, decoder *hpack.Decoder) (pseudoHeaders, ordinaryHeaders map[string]string, err error) { + hf, err := decoder.DecodeFull(frame.HeaderBlockFragment()) + if err != nil { + return nil, nil, fmt.Errorf("could not decode headers: %v", err) + } + + pseudoHeaders = make(map[string]string) + ordinaryHeaders = make(map[string]string) + + for _, header := range hf { + if header.IsPseudo() { + pseudoHeaders[header.Name] = header.Value + } else { + ordinaryHeaders[header.Name] = header.Value + } + } + + return pseudoHeaders, ordinaryHeaders, nil +} diff --git a/pkg/core/proxy/integrations/grpc/grpc.go b/pkg/core/proxy/integrations/grpc/grpc.go new file mode 100644 index 000000000..af16eb867 --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/grpc.go @@ -0,0 +1,68 @@ +package grpc + +import ( + "bytes" + "context" + "net" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func init() { + // Register the parser with the proxy. + integrations.Register("grpc", NewGrpc) +} + +type Grpc struct { + logger *zap.Logger +} + +func NewGrpc(logger *zap.Logger) integrations.Integrations { + return &Grpc{ + logger: logger, + } +} + +// MatchType function determines if the outgoing network call is gRPC by comparing the +// message format with that of an gRPC text message. +func (g *Grpc) MatchType(_ context.Context, reqBuf []byte) bool { + return bytes.HasPrefix(reqBuf[:], []byte("PRI * HTTP/2")) +} + +func (g *Grpc) RecordOutgoing(ctx context.Context, src net.Conn, dst net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + logger := g.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", ctx.Value(models.ClientConnectionIDKey).(string)), zap.Any("Destination ConnectionID", ctx.Value(models.DestConnectionIDKey).(string))) + + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial grpc message") + return err + } + + err = encodeGrpc(ctx, logger, reqBuf, src, dst, mocks, opts) + if err != nil { + utils.LogError(logger, err, "failed to encode the grpc message into the yaml") + return err + } + return nil +} + +func (g *Grpc) MockOutgoing(ctx context.Context, src net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + logger := g.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", util.GetNextID()), zap.Any("Destination ConnectionID", util.GetNextID())) + + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial grpc message") + return err + } + + err = decodeGrpc(ctx, logger, reqBuf, src, dstCfg, mockDb, opts) + if err != nil { + utils.LogError(logger, err, "failed to decode the grpc message from the yaml") + return err + } + return nil +} diff --git a/pkg/core/proxy/integrations/grpc/match.go b/pkg/core/proxy/integrations/grpc/match.go new file mode 100644 index 000000000..f1743e65e --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/match.go @@ -0,0 +1,97 @@ +package grpc + +import ( + "context" + "fmt" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.uber.org/zap" + + "go.keploy.io/server/v2/pkg/models" +) + +// constants for the pseudo headers. +const ( + KLabelForAuthority = ":authority" + KLabelForMethod = ":method" + KLabelForPath = ":path" + KLabelForScheme = ":http" + + KLabelForContentType = "content-type" +) + +func FilterMocksRelatedToGrpc(mocks []*models.Mock) []*models.Mock { + var res []*models.Mock + for _, mock := range mocks { + if mock != nil && mock.Kind == models.GRPC_EXPORT && mock.Spec.GRPCReq != nil && mock.Spec.GRPCResp != nil { + res = append(res, mock) + } + } + return res +} + +func FilterMocksBasedOnGrpcRequest(ctx context.Context, _ *zap.Logger, grpcReq models.GrpcReq, mockDb integrations.MockMemDb) (*models.Mock, error) { + for { + select { + case <-ctx.Done(): + return nil, ctx.Err() + default: + mocks, err := mockDb.GetFilteredMocks() + if err != nil { + return nil, fmt.Errorf("error while getting tsc mocks %v", err) + } + + var matchedMock *models.Mock + var isMatched bool + + grpcMocks := FilterMocksRelatedToGrpc(mocks) + for _, mock := range grpcMocks { + if ctx.Err() != nil { + return nil, ctx.Err() + } + have := mock.Spec.GRPCReq + // Investigate pseudo headers. + if have.Headers.PseudoHeaders[KLabelForAuthority] != grpcReq.Headers.PseudoHeaders[KLabelForAuthority] { + continue + } + if have.Headers.PseudoHeaders[KLabelForMethod] != grpcReq.Headers.PseudoHeaders[KLabelForMethod] { + continue + } + if have.Headers.PseudoHeaders[KLabelForPath] != grpcReq.Headers.PseudoHeaders[KLabelForPath] { + continue + } + if have.Headers.PseudoHeaders[KLabelForScheme] != grpcReq.Headers.PseudoHeaders[KLabelForScheme] { + continue + } + + // Investigate ordinary headers. + if have.Headers.OrdinaryHeaders[KLabelForContentType] != grpcReq.Headers.OrdinaryHeaders[KLabelForContentType] { + continue + } + + // Investigate the compression flag. + if have.Body.CompressionFlag != grpcReq.Body.CompressionFlag { + continue + } + + // Investigate the body. + if have.Body.DecodedData != grpcReq.Body.DecodedData { + continue + } + + matchedMock = mock + isMatched = true + break + } + + if isMatched { + isDeleted := mockDb.DeleteFilteredMock(matchedMock) + if !isDeleted { + continue + } + return matchedMock, nil + } + return nil, nil + } + } +} diff --git a/pkg/core/proxy/integrations/grpc/stream.go b/pkg/core/proxy/integrations/grpc/stream.go new file mode 100644 index 000000000..1f3cc90d7 --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/stream.go @@ -0,0 +1,179 @@ +package grpc + +import ( + "context" + "encoding/binary" + "fmt" + "github.com/protocolbuffers/protoscope" + "sync" + "time" + + "go.keploy.io/server/v2/pkg/models" +) + +// StreamInfoCollection is a thread-safe data structure to store all communications +// that happen in a stream for grpc. This includes the headers and data frame for the +// request and response. +type StreamInfoCollection struct { + mutex sync.Mutex + StreamInfo map[uint32]models.GrpcStream + ReqTimestampMock time.Time + ResTimestampMock time.Time +} + +func NewStreamInfoCollection() *StreamInfoCollection { + return &StreamInfoCollection{ + StreamInfo: make(map[uint32]models.GrpcStream), + } +} + +func (sic *StreamInfoCollection) InitialiseStream(streamID uint32) { + sic.mutex.Lock() + defer sic.mutex.Unlock() + + _, ok := sic.StreamInfo[streamID] + if !ok { + sic.StreamInfo[streamID] = models.NewGrpcStream(streamID) + } +} + +func (sic *StreamInfoCollection) AddHeadersForRequest(streamID uint32, headers map[string]string, isPseudo bool) { + // Initialise the stream before acquiring the lock for yourself. + sic.InitialiseStream(streamID) + sic.mutex.Lock() + defer sic.mutex.Unlock() + + for key, value := range headers { + if isPseudo { + sic.StreamInfo[streamID].GrpcReq.Headers.PseudoHeaders[key] = value + } else { + sic.StreamInfo[streamID].GrpcReq.Headers.OrdinaryHeaders[key] = value + } + } +} + +func (sic *StreamInfoCollection) AddHeadersForResponse(streamID uint32, headers map[string]string, isPseudo, isTrailer bool) { + // Initialise the stream before acquiring the lock for yourself. + sic.InitialiseStream(streamID) + sic.mutex.Lock() + defer sic.mutex.Unlock() + + for key, value := range headers { + if isTrailer { + if isPseudo { + sic.StreamInfo[streamID].GrpcResp.Trailers.PseudoHeaders[key] = value + } else { + sic.StreamInfo[streamID].GrpcResp.Trailers.OrdinaryHeaders[key] = value + } + } else { + if isPseudo { + sic.StreamInfo[streamID].GrpcResp.Headers.PseudoHeaders[key] = value + } else { + sic.StreamInfo[streamID].GrpcResp.Headers.OrdinaryHeaders[key] = value + } + } + } +} + +// AddPayloadForRequest adds the DATA frame to the stream. +// A data frame always appears after at least one header frame. Hence, we implicitly +// assume that the stream has been initialised. +func (sic *StreamInfoCollection) AddPayloadForRequest(streamID uint32, payload []byte) { + sic.mutex.Lock() + defer sic.mutex.Unlock() + + // We cannot modify non pointer values in nested entries in map. + // Create a copy and overwrite it. + info := sic.StreamInfo[streamID] + info.GrpcReq.Body = createLengthPrefixedMessageFromPayload(payload) + sic.StreamInfo[streamID] = info +} + +// AddPayloadForResponse adds the DATA frame to the stream. +// A data frame always appears after at least one header frame. Hence, we implicitly +// assume that the stream has been initialised. +func (sic *StreamInfoCollection) AddPayloadForResponse(streamID uint32, payload []byte) { + sic.mutex.Lock() + defer sic.mutex.Unlock() + + // We cannot modify non pointer values in nested entries in map. + // Create a copy and overwrite it. + info := sic.StreamInfo[streamID] + info.GrpcResp.Body = createLengthPrefixedMessageFromPayload(payload) + sic.StreamInfo[streamID] = info +} + +func (sic *StreamInfoCollection) PersistMockForStream(_ context.Context, streamID uint32, mocks chan<- *models.Mock) { + sic.mutex.Lock() + defer sic.mutex.Unlock() + grpcReq := sic.StreamInfo[streamID].GrpcReq + grpcResp := sic.StreamInfo[streamID].GrpcResp + // save the mock + mocks <- &models.Mock{ + Version: models.GetVersion(), + Name: "mocks", + Kind: models.GRPC_EXPORT, + Spec: models.MockSpec{ + GRPCReq: &grpcReq, + GRPCResp: &grpcResp, + ReqTimestampMock: sic.ReqTimestampMock, + ResTimestampMock: sic.ResTimestampMock, + }, + } +} + +func (sic *StreamInfoCollection) FetchRequestForStream(streamID uint32) models.GrpcReq { + sic.mutex.Lock() + defer sic.mutex.Unlock() + + return sic.StreamInfo[streamID].GrpcReq +} + +func (sic *StreamInfoCollection) ResetStream(streamID uint32) { + sic.mutex.Lock() + defer sic.mutex.Unlock() + + delete(sic.StreamInfo, streamID) +} + +func createLengthPrefixedMessageFromPayload(data []byte) models.GrpcLengthPrefixedMessage { + msg := models.GrpcLengthPrefixedMessage{} + + // If the body is not length prefixed, we return the default value. + if len(data) < 5 { + return msg + } + + // The first byte is the compression flag. + msg.CompressionFlag = uint(data[0]) + + // The next 4 bytes are message length. + msg.MessageLength = binary.BigEndian.Uint32(data[1:5]) + + // The payload could be empty. We only parse it if it is present. + if len(data) >= 5 { + // Use protoscope to decode the message. + msg.DecodedData = protoscope.Write(data[5:], protoscope.WriterOptions{}) + } + + return msg +} + +func createPayloadFromLengthPrefixedMessage(msg models.GrpcLengthPrefixedMessage) ([]byte, error) { + scanner := protoscope.NewScanner(msg.DecodedData) + encodedData, err := scanner.Exec() + if err != nil { + return nil, fmt.Errorf("could not encode grpc msg using protoscope: %v", err) + } + + // Note that the encoded length is present in the msg, but it is also equal to the len of encodedData. + // We should give the preference to the length of encodedData, since the mocks might have been altered. + + // Reserve 1 byte for compression flag, 4 bytes for length capture. + payload := make([]byte, 1+4) + payload[0] = uint8(msg.CompressionFlag) + binary.BigEndian.PutUint32(payload[1:5], uint32(len(encodedData))) + payload = append(payload, encodedData...) + + return payload, nil +} diff --git a/pkg/core/proxy/integrations/grpc/transcoder.go b/pkg/core/proxy/integrations/grpc/transcoder.go new file mode 100644 index 000000000..c7901cdc8 --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/transcoder.go @@ -0,0 +1,311 @@ +package grpc + +import ( + "bytes" + "context" + "fmt" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/utils" + + "go.uber.org/zap" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" +) + +type Transcoder struct { + sic *StreamInfoCollection + mockDb integrations.MockMemDb + logger *zap.Logger + framer *http2.Framer + decoder *hpack.Decoder +} + +func NewTranscoder(logger *zap.Logger, framer *http2.Framer, mockDb integrations.MockMemDb) *Transcoder { + return &Transcoder{ + logger: logger, + framer: framer, + mockDb: mockDb, + sic: NewStreamInfoCollection(), + decoder: NewDecoder(), + } +} + +func (srv *Transcoder) WriteInitialSettingsFrame() error { + var settings []http2.Setting + // TODO : Get Settings from config file. + settings = append(settings, http2.Setting{ + ID: http2.SettingMaxFrameSize, + Val: 16384, + }) + return srv.framer.WriteSettings(settings...) +} + +func (srv *Transcoder) ProcessPingFrame(pingFrame *http2.PingFrame) error { + if pingFrame.IsAck() { + // An endpoint MUST NOT respond to PING frames containing this flag. + return nil + } + + if pingFrame.StreamID != 0 { + // "PING frames are not associated with any individual + // stream. If a PING frame is received with a stream + // identifier field value other than 0x0, the recipient MUST + // respond with a conn error (Section 5.4.1) of type + // PROTOCOL_ERROR." + utils.LogError(srv.logger, nil, "As per HTTP/2 spec, stream ID for PING frame should be zero.", zap.Any("stream_id", pingFrame.StreamID)) + return http2.ConnectionError(http2.ErrCodeProtocol) + } + + // Write the ACK for the PING request. + return srv.framer.WritePing(true, pingFrame.Data) + +} + +func (srv *Transcoder) ProcessDataFrame(ctx context.Context, dataFrame *http2.DataFrame) error { + id := dataFrame.Header().StreamID + // DATA frame must be associated with a stream + if id == 0 { + utils.LogError(srv.logger, nil, "As per HTTP/2 spec, DATA frame must be associated with a stream.", zap.Any("stream_id", id)) + return http2.ConnectionError(http2.ErrCodeProtocol) + } + srv.sic.AddPayloadForRequest(id, dataFrame.Data()) + + if dataFrame.StreamEnded() { + defer srv.sic.ResetStream(dataFrame.StreamID) + } + + grpcReq := srv.sic.FetchRequestForStream(id) + + // Fetch all the mocks. We can't assume that the grpc calls are made in a certain order. + mock, err := FilterMocksBasedOnGrpcRequest(ctx, srv.logger, grpcReq, srv.mockDb) + if err != nil { + return fmt.Errorf("failed match mocks: %v", err) + } + if mock == nil { + return fmt.Errorf("failed to mock the output for unrecorded outgoing grpc call") + } + + grpcMockResp := mock.Spec.GRPCResp + + // First, send the headers frame. + buf := new(bytes.Buffer) + encoder := hpack.NewEncoder(buf) + + // The pseudo headers should be written before ordinary ones. + for key, value := range grpcMockResp.Headers.PseudoHeaders { + err := encoder.WriteField(hpack.HeaderField{ + Name: key, + Value: value, + }) + if err != nil { + utils.LogError(srv.logger, err, "could not encode pseudo header", zap.Any("key", key), zap.Any("value", value)) + return err + } + } + for key, value := range grpcMockResp.Headers.OrdinaryHeaders { + err := encoder.WriteField(hpack.HeaderField{ + Name: key, + Value: value, + }) + if err != nil { + utils.LogError(srv.logger, err, "could not encode ordinary header", zap.Any("key", key), zap.Any("value", value)) + return err + } + } + + // The headers are prepared. Write the frame. + srv.logger.Info("Writing the first set of headers in a new HEADER frame.") + err = srv.framer.WriteHeaders(http2.HeadersFrameParam{ + StreamID: id, + BlockFragment: buf.Bytes(), + EndStream: false, + EndHeaders: true, + }) + if err != nil { + utils.LogError(srv.logger, err, "could not write the first set of headers onto client") + return err + } + + payload, err := createPayloadFromLengthPrefixedMessage(grpcMockResp.Body) + if err != nil { + utils.LogError(srv.logger, err, "could not create grpc payload from mocks") + return err + } + + // Write the DATA frame with the payload. + err = srv.framer.WriteData(id, false, payload) + if err != nil { + utils.LogError(srv.logger, err, "could not write the data frame onto the client") + return err + } + + // Reset the buffer and start with a new encoding. + buf = new(bytes.Buffer) + encoder = hpack.NewEncoder(buf) + + //Prepare the trailers. + //The pseudo headers should be written before ordinary ones. + for key, value := range grpcMockResp.Trailers.PseudoHeaders { + err := encoder.WriteField(hpack.HeaderField{ + Name: key, + Value: value, + }) + if err != nil { + utils.LogError(srv.logger, err, "could not encode pseudo header", zap.Any("key", key), zap.Any("value", value)) + return err + } + } + for key, value := range grpcMockResp.Trailers.OrdinaryHeaders { + err := encoder.WriteField(hpack.HeaderField{ + Name: key, + Value: value, + }) + if err != nil { + utils.LogError(srv.logger, err, "could not encode ordinary header", zap.Any("key", key), zap.Any("value", value)) + return err + } + } + + // The trailer is prepared. Write the frame. + srv.logger.Info("Writing the trailers in a different HEADER frame") + err = srv.framer.WriteHeaders(http2.HeadersFrameParam{ + StreamID: id, + BlockFragment: buf.Bytes(), + EndStream: true, + EndHeaders: true, + }) + if err != nil { + utils.LogError(srv.logger, err, "could not write the trailers onto client") + return err + } + + return nil +} + +func (srv *Transcoder) ProcessWindowUpdateFrame(_ *http2.WindowUpdateFrame) error { + // Silently ignore Window tools frames, as we already know the mock payloads that we would send. + srv.logger.Info("Received Window Update Frame. Skipping it...") + return nil +} + +func (srv *Transcoder) ProcessResetStreamFrame(resetStreamFrame *http2.RSTStreamFrame) error { + srv.sic.ResetStream(resetStreamFrame.StreamID) + return nil +} + +func (srv *Transcoder) ProcessSettingsFrame(settingsFrame *http2.SettingsFrame) error { + // ACK the settings and silently skip the processing. + // There is no actual server to tune the settings on. We already know the default settings from record mode. + // TODO : Add support for dynamically updating the settings. + if !settingsFrame.IsAck() { + return srv.framer.WriteSettingsAck() + } + return nil +} + +func (srv *Transcoder) ProcessGoAwayFrame(_ *http2.GoAwayFrame) error { + // We do not support a client that requests a server to shut down during test mode. Warn the user. + // TODO : Add support for dynamically shutting down mock server using a channel to send close request. + srv.logger.Warn("Received GoAway Frame. Ideally, clients should not close server during test mode.") + return nil +} + +func (srv *Transcoder) ProcessPriorityFrame(_ *http2.PriorityFrame) error { + // We do not support reordering of frames based on priority, because we flush after each response. + // Silently skip it. + srv.logger.Info("Received PRIORITY frame, Skipping it...") + return nil +} + +func (srv *Transcoder) ProcessHeadersFrame(headersFrame *http2.HeadersFrame) error { + id := headersFrame.StreamID + // Streams initiated by a client MUST use odd-numbered stream identifiers + if id%2 != 1 { + utils.LogError(srv.logger, nil, "As per HTTP/2 spec, stream_id must be odd for a client if conn init by client.", zap.Any("stream_id", id)) + return http2.ConnectionError(http2.ErrCodeProtocol) + } + + pseudoHeaders, ordinaryHeaders, err := extractHeaders(headersFrame, srv.decoder) + if err != nil { + utils.LogError(srv.logger, err, "could not extract headers from frame") + } + + srv.sic.AddHeadersForRequest(id, pseudoHeaders, true) + srv.sic.AddHeadersForRequest(id, ordinaryHeaders, false) + return nil +} + +func (srv *Transcoder) ProcessPushPromise(_ *http2.PushPromiseFrame) error { + // A client cannot push. Thus, servers MUST treat the receipt of a PUSH_PROMISE + // frame as a conn error (Section 5.4.1) of type PROTOCOL_ERROR. + utils.LogError(srv.logger, nil, "As per HTTP/2 spec, client cannot send PUSH_PROMISE.") + return http2.ConnectionError(http2.ErrCodeProtocol) +} + +func (srv *Transcoder) ProcessContinuationFrame(_ *http2.ContinuationFrame) error { + // Continuation frame support is overkill currently because the headers won't exceed the frame size + // used by our mock server. + // However, if we really need this feature, we can implement it later. + utils.LogError(srv.logger, nil, "Continuation Frame received. This is unsupported currently") + return fmt.Errorf("continuation frame is unsupported in the current implementation") +} + +func (srv *Transcoder) ProcessGenericFrame(ctx context.Context, frame http2.Frame) error { + var err error + switch frame := frame.(type) { + case *http2.PingFrame: + err = srv.ProcessPingFrame(frame) + case *http2.DataFrame: + err = srv.ProcessDataFrame(ctx, frame) + case *http2.WindowUpdateFrame: + err = srv.ProcessWindowUpdateFrame(frame) + case *http2.RSTStreamFrame: + err = srv.ProcessResetStreamFrame(frame) + case *http2.SettingsFrame: + err = srv.ProcessSettingsFrame(frame) + case *http2.GoAwayFrame: + err = srv.ProcessGoAwayFrame(frame) + case *http2.PriorityFrame: + err = srv.ProcessPriorityFrame(frame) + case *http2.HeadersFrame: + err = srv.ProcessHeadersFrame(frame) + case *http2.PushPromiseFrame: + err = srv.ProcessPushPromise(frame) + case *http2.ContinuationFrame: + err = srv.ProcessContinuationFrame(frame) + default: + err = fmt.Errorf("unknown frame received from the client") + } + + return err +} + +// ListenAndServe is a forever blocking call that reads one frame at a time, and responds to them. +func (srv *Transcoder) ListenAndServe(ctx context.Context) error { + err := srv.WriteInitialSettingsFrame() + if err != nil { + utils.LogError(srv.logger, err, "could not write initial settings frame") + return err + } + + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + frame, err := srv.framer.ReadFrame() + if err != nil { + utils.LogError(srv.logger, err, "Failed to read frame") + return err + } + if ctx.Err() != nil { + return ctx.Err() + } + err = srv.ProcessGenericFrame(ctx, frame) + if err != nil { + return err + } + } + } +} diff --git a/pkg/core/proxy/integrations/grpc/util.go b/pkg/core/proxy/integrations/grpc/util.go new file mode 100644 index 000000000..6558e2ab2 --- /dev/null +++ b/pkg/core/proxy/integrations/grpc/util.go @@ -0,0 +1,8 @@ +package grpc + +import "golang.org/x/net/http2/hpack" + +// NewDecoder returns a header decoder. +func NewDecoder() *hpack.Decoder { + return hpack.NewDecoder(KmaxDynamicTableSize, nil) +} diff --git a/pkg/core/proxy/integrations/http/README.md b/pkg/core/proxy/integrations/http/README.md new file mode 100755 index 000000000..dab715736 --- /dev/null +++ b/pkg/core/proxy/integrations/http/README.md @@ -0,0 +1,6 @@ +# Http Package Documentation + +The `http` package encompasses the parser and mapping logic required +to read HTTP text messages and capture or stub the outputs. Utilized +by the `hooks` package, it aids in redirecting outgoing calls for the +purpose of recording or stubbing the outputs. \ No newline at end of file diff --git a/pkg/core/proxy/integrations/http/decode.go b/pkg/core/proxy/integrations/http/decode.go new file mode 100644 index 000000000..bfa05de20 --- /dev/null +++ b/pkg/core/proxy/integrations/http/decode.go @@ -0,0 +1,190 @@ +// Package http provides functionality for handling HTTP outgoing calls. +package http + +import ( + "bufio" + "bytes" + "compress/gzip" + "context" + "fmt" + "io" + "net" + "net/http" + "strconv" + + "go.keploy.io/server/v2/pkg" + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +type matchParams struct { + req *http.Request + reqBodyIsJSON bool + reqBuf []byte +} + +// Decodes the mocks in test mode so that they can be sent to the user application. +func decodeHTTP(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + errCh := make(chan error, 1) + + go func(errCh chan error, reqBuf []byte, opts models.OutgoingOptions) { + defer close(errCh) + for { + //Check if the expected header is present + if bytes.Contains(reqBuf, []byte("Expect: 100-continue")) { + logger.Debug("The expect header is present in the request buffer and writing the 100 continue response to the client") + //Send the 100 continue response + _, err := clientConn.Write([]byte("HTTP/1.1 100 Continue\r\n\r\n")) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "failed to write the 100 continue response to the user application") + errCh <- err + return + } + logger.Debug("The 100 continue response has been sent to the user application") + //Read the request buffer again + newRequest, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read the request buffer from the user application") + errCh <- err + return + } + //Append the new request buffer to the old request buffer + reqBuf = append(reqBuf, newRequest...) + } + + logger.Debug("handling the chunked requests to read the complete request") + err := handleChunkedRequests(ctx, logger, &reqBuf, clientConn, nil) + if err != nil { + utils.LogError(logger, err, "failed to handle chunked requests") + errCh <- err + return + } + + logger.Debug(fmt.Sprintf("This is the complete request:\n%v", string(reqBuf))) + + //Parse the request buffer + request, err := http.ReadRequest(bufio.NewReader(bytes.NewReader(reqBuf))) + if err != nil { + utils.LogError(logger, err, "failed to parse the http request message") + errCh <- err + return + } + + reqBody, err := io.ReadAll(request.Body) + if err != nil { + utils.LogError(logger, err, "failed to read from request body", zap.Any("metadata", getReqMeta(request))) + errCh <- err + return + } + + //check if reqBuf body is a json + + param := &matchParams{ + req: request, + reqBodyIsJSON: isJSON(reqBody), + reqBuf: reqBuf, + } + match, stub, err := match(ctx, logger, param, mockDb) + if err != nil { + utils.LogError(logger, err, "error while matching http mocks", zap.Any("metadata", getReqMeta(request))) + errCh <- err + return + } + logger.Debug("after matching the http request", zap.Any("isMatched", match), zap.Any("stub", stub), zap.Error(err)) + + if !match { + if !isPassThrough(logger, request, dstCfg.Port, opts) { + utils.LogError(logger, nil, "Didn't match any preExisting http mock", zap.Any("metadata", getReqMeta(request))) + } + + _, err = util.PassThrough(ctx, logger, clientConn, dstCfg, [][]byte{reqBuf}) + if err != nil { + utils.LogError(logger, err, "failed to passThrough http request", zap.Any("metadata", getReqMeta(request))) + errCh <- err + return + } + } + + statusLine := fmt.Sprintf("HTTP/%d.%d %d %s\r\n", stub.Spec.HTTPReq.ProtoMajor, stub.Spec.HTTPReq.ProtoMinor, stub.Spec.HTTPResp.StatusCode, http.StatusText(stub.Spec.HTTPResp.StatusCode)) + + body := stub.Spec.HTTPResp.Body + var respBody string + var responseString string + + // Fetching the response headers + header := pkg.ToHTTPHeader(stub.Spec.HTTPResp.Header) + + //Check if the gzip encoding is present in the header + if header["Content-Encoding"] != nil && header["Content-Encoding"][0] == "gzip" { + var compressedBuffer bytes.Buffer + gw := gzip.NewWriter(&compressedBuffer) + _, err := gw.Write([]byte(body)) + if err != nil { + utils.LogError(logger, err, "failed to compress the response body", zap.Any("metadata", getReqMeta(request))) + errCh <- err + return + } + err = gw.Close() + if err != nil { + utils.LogError(logger, err, "failed to close the gzip writer", zap.Any("metadata", getReqMeta(request))) + errCh <- err + return + } + logger.Debug("the length of the response body: " + strconv.Itoa(len(compressedBuffer.String()))) + respBody = compressedBuffer.String() + // responseString = statusLine + headers + "\r\n" + compressedBuffer.String() + } else { + respBody = body + // responseString = statusLine + headers + "\r\n" + body + } + + var headers string + for key, values := range header { + if key == "Content-Length" { + values = []string{strconv.Itoa(len(respBody))} + } + for _, value := range values { + headerLine := fmt.Sprintf("%s: %s\r\n", key, value) + headers += headerLine + } + } + responseString = statusLine + headers + "\r\n" + "" + respBody + + logger.Debug(fmt.Sprintf("Mock Response sending back to client:\n%v", responseString)) + + _, err = clientConn.Write([]byte(responseString)) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "failed to write the mock output to the user application", zap.Any("metadata", getReqMeta(request))) + errCh <- err + return + } + + reqBuf, err = util.ReadBytes(ctx, logger, clientConn) + if err != nil { + logger.Debug("failed to read the request buffer from the client", zap.Error(err)) + logger.Debug("This was the last response from the server:\n" + string(responseString)) + errCh <- nil + return + } + } + }(errCh, reqBuf, opts) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err == io.EOF { + return nil + } + return err + } +} diff --git a/pkg/core/proxy/integrations/http/encode.go b/pkg/core/proxy/integrations/http/encode.go new file mode 100644 index 000000000..ab15eada8 --- /dev/null +++ b/pkg/core/proxy/integrations/http/encode.go @@ -0,0 +1,256 @@ +package http + +import ( + "context" + "errors" + "fmt" + "golang.org/x/sync/errgroup" + "io" + "net" + "strings" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +// encodeHTTP function parses the HTTP request and response text messages to capture outgoing network calls as mocks. +func encodeHTTP(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn, destConn net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + + remoteAddr := destConn.RemoteAddr().(*net.TCPAddr) + destPort := uint(remoteAddr.Port) + + //Writing the request to the server. + _, err := destConn.Write(reqBuf) + if err != nil { + utils.LogError(logger, err, "failed to write request message to the destination server") + return err + } + + if ctx.Err() != nil { + return ctx.Err() + } + + logger.Debug("This is the initial request: " + string(reqBuf)) + var finalReq []byte + errCh := make(chan error, 1) + + finalReq = append(finalReq, reqBuf...) + + //get the error group from the context + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + + //for keeping conn alive + g.Go(func() error { + defer utils.Recover(logger) + defer close(errCh) + for { + //check if expect : 100-continue header is present + lines := strings.Split(string(finalReq), "\n") + var expectHeader string + for _, line := range lines { + if strings.HasPrefix(line, "Expect:") { + expectHeader = strings.TrimSpace(strings.TrimPrefix(line, "Expect:")) + break + } + } + if expectHeader == "100-continue" { + //Read if the response from the server is 100-continue + resp, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read the response message from the server after 100-continue request") + errCh <- err + return nil + } + + // write the response message to the client + _, err = clientConn.Write(resp) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write response message to the user client") + errCh <- err + return nil + } + + logger.Debug("This is the response from the server after the expect header" + string(resp)) + + if string(resp) != "HTTP/1.1 100 Continue\r\n\r\n" { + utils.LogError(logger, nil, "failed to get the 100 continue response from the user client") + errCh <- err + return nil + } + //Reading the request buffer again + reqBuf, err = util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read the request buffer from the user client") + errCh <- err + return nil + } + // write the request message to the actual destination server + _, err = destConn.Write(reqBuf) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write request message to the destination server") + errCh <- err + return nil + } + finalReq = append(finalReq, reqBuf...) + } + + // Capture the request timestamp + reqTimestampMock := time.Now() + + err := handleChunkedRequests(ctx, logger, &finalReq, clientConn, destConn) + if err != nil { + utils.LogError(logger, err, "failed to handle chunked requests") + errCh <- err + return nil + } + + logger.Debug(fmt.Sprintf("This is the complete request:\n%v", string(finalReq))) + // read the response from the actual server + resp, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + if err == io.EOF { + logger.Debug("Response complete, exiting the loop.") + // if there is any buffer left before EOF, we must send it to the client and save this as mock + if len(resp) != 0 { + + // Capturing the response timestamp + resTimestampMock := time.Now() + // write the response message to the user client + _, err = clientConn.Write(resp) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write response message to the user client") + errCh <- err + return nil + } + + // saving last request/response on this conn. + m := &finalHTTP{ + req: finalReq, + resp: resp, + reqTimestampMock: reqTimestampMock, + resTimestampMock: resTimestampMock, + } + err := ParseFinalHTTP(ctx, logger, m, destPort, mocks, opts) + if err != nil { + utils.LogError(logger, err, "failed to parse the final http request and response") + errCh <- err + return nil + } + } + break + } + utils.LogError(logger, err, "failed to read the response message from the destination server") + errCh <- err + return nil + } + + // Capturing the response timestamp + resTimestampMock := time.Now() + + // write the response message to the user client + _, err = clientConn.Write(resp) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write response message to the user client") + errCh <- err + return nil + } + var finalResp []byte + finalResp = append(finalResp, resp...) + logger.Debug("This is the initial response: " + string(resp)) + + err = handleChunkedResponses(ctx, logger, &finalResp, clientConn, destConn, resp) + if err != nil { + if err == io.EOF { + logger.Debug("conn closed by the server", zap.Error(err)) + //check if before EOF complete response came, and try to parse it. + m := &finalHTTP{ + req: finalReq, + resp: finalResp, + reqTimestampMock: reqTimestampMock, + resTimestampMock: resTimestampMock, + } + parseErr := ParseFinalHTTP(ctx, logger, m, destPort, mocks, opts) + if parseErr != nil { + utils.LogError(logger, parseErr, "failed to parse the final http request and response") + errCh <- parseErr + } + errCh <- nil + return nil + } + utils.LogError(logger, err, "failed to handle chunk response") + errCh <- err + return nil + } + + logger.Debug("This is the final response: " + string(finalResp)) + + m := &finalHTTP{ + req: finalReq, + resp: finalResp, + reqTimestampMock: reqTimestampMock, + resTimestampMock: resTimestampMock, + } + + err = ParseFinalHTTP(ctx, logger, m, destPort, mocks, opts) + if err != nil { + utils.LogError(logger, err, "failed to parse the final http request and response") + errCh <- err + return nil + } + + //resetting for the new request and response. + finalReq = []byte("") + finalResp = []byte("") + + finalReq, err = util.ReadBytes(ctx, logger, clientConn) + if err != nil { + if err != io.EOF { + logger.Debug("failed to read the request message from the user client", zap.Error(err)) + logger.Debug("This was the last response from the server: " + string(resp)) + errCh <- nil + } + errCh <- err + return nil + } + // write the request message to the actual destination server + _, err = destConn.Write(finalReq) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write request message to the destination server") + errCh <- err + return nil + } + } + return nil + }) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err == io.EOF { + return nil + } + return err + } +} diff --git a/pkg/core/proxy/integrations/http/http.go b/pkg/core/proxy/integrations/http/http.go new file mode 100755 index 000000000..e7801efe6 --- /dev/null +++ b/pkg/core/proxy/integrations/http/http.go @@ -0,0 +1,193 @@ +package http + +import ( + "bufio" + "bytes" + "compress/gzip" + "context" + "fmt" + "io" + "net" + "net/http" + "strconv" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/utils" + + "go.keploy.io/server/v2/pkg" + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +func init() { + integrations.Register("http", NewHTTP) +} + +type HTTP struct { + logger *zap.Logger + //opts globalOptions //other global options set by the proxy +} + +func NewHTTP(logger *zap.Logger) integrations.Integrations { + return &HTTP{ + logger: logger, + } +} + +type finalHTTP struct { + req []byte + resp []byte + reqTimestampMock time.Time + resTimestampMock time.Time +} + +// MatchType function determines if the outgoing network call is HTTP by comparing the +// message format with that of an HTTP text message. +func (h *HTTP) MatchType(_ context.Context, buf []byte) bool { + isHTTP := bytes.HasPrefix(buf[:], []byte("HTTP/")) || + bytes.HasPrefix(buf[:], []byte("GET ")) || + bytes.HasPrefix(buf[:], []byte("POST ")) || + bytes.HasPrefix(buf[:], []byte("PUT ")) || + bytes.HasPrefix(buf[:], []byte("PATCH ")) || + bytes.HasPrefix(buf[:], []byte("DELETE ")) || + bytes.HasPrefix(buf[:], []byte("OPTIONS ")) || + bytes.HasPrefix(buf[:], []byte("HEAD ")) + h.logger.Debug(fmt.Sprintf("is Http Protocol?: %v ", isHTTP)) + return isHTTP +} + +func (h *HTTP) RecordOutgoing(ctx context.Context, src net.Conn, dst net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + logger := h.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", ctx.Value(models.ClientConnectionIDKey).(string)), zap.Any("Destination ConnectionID", ctx.Value(models.DestConnectionIDKey).(string))) + + h.logger.Debug("Recording the outgoing http call in record mode") + + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial http message") + return err + } + err = encodeHTTP(ctx, logger, reqBuf, src, dst, mocks, opts) + if err != nil { + utils.LogError(logger, err, "failed to encode the http message into the yaml") + return err + } + return nil +} + +func (h *HTTP) MockOutgoing(ctx context.Context, src net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + logger := h.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", util.GetNextID()), zap.Any("Destination ConnectionID", util.GetNextID())) + + h.logger.Debug("Mocking the outgoing http call in test mode") + + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial http message") + return err + } + + err = decodeHTTP(ctx, logger, reqBuf, src, dstCfg, mockDb, opts) + if err != nil { + utils.LogError(logger, err, "failed to decode the http message from the yaml") + return err + } + return nil +} + +// ParseFinalHTTP is used to parse the final http request and response and save it in a yaml file +func ParseFinalHTTP(_ context.Context, logger *zap.Logger, mock *finalHTTP, destPort uint, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + var req *http.Request + // converts the request message buffer to http request + req, err := http.ReadRequest(bufio.NewReader(bytes.NewReader(mock.req))) + if err != nil { + utils.LogError(logger, err, "failed to parse the http request message") + return err + } + + var reqBody []byte + if req.Body != nil { // Read + var err error + reqBody, err = io.ReadAll(req.Body) + if err != nil { + // TODO right way to log errors + utils.LogError(logger, err, "failed to read the http request body", zap.Any("metadata", getReqMeta(req))) + return err + } + } + + // converts the response message buffer to http response + respParsed, err := http.ReadResponse(bufio.NewReader(bytes.NewReader(mock.resp)), req) + if err != nil { + utils.LogError(logger, err, "failed to parse the http response message", zap.Any("metadata", getReqMeta(req))) + return err + } + + //Add the content length to the headers. + var respBody []byte + //Checking if the body of the response is empty or does not exist. + if respParsed.Body != nil { // Read + if respParsed.Header.Get("Content-Encoding") == "gzip" { + check := respParsed.Body + ok, reader := isGZipped(check, logger) + logger.Debug("The body is gzip? " + strconv.FormatBool(ok)) + logger.Debug("", zap.Any("isGzipped", ok)) + if ok { + gzipReader, err := gzip.NewReader(reader) + if err != nil { + utils.LogError(logger, err, "failed to create a gzip reader", zap.Any("metadata", getReqMeta(req))) + return err + } + respParsed.Body = gzipReader + } + } + respBody, err = io.ReadAll(respParsed.Body) + if err != nil { + utils.LogError(logger, err, "failed to read the the http response body", zap.Any("metadata", getReqMeta(req))) + return err + } + logger.Debug("This is the response body: " + string(respBody)) + //Set the content length to the headers. + respParsed.Header.Set("Content-Length", strconv.Itoa(len(respBody))) + } + + // store the request and responses as mocks + meta := map[string]string{ + "name": "Http", + "type": models.HTTPClient, + "operation": req.Method, + } + + // Check if the request is a passThrough request + if isPassThrough(logger, req, destPort, opts) { + logger.Debug("The request is a passThrough request", zap.Any("metadata", getReqMeta(req))) + return nil + } + + mocks <- &models.Mock{ + Version: models.GetVersion(), + Name: "mocks", + Kind: models.HTTP, + Spec: models.MockSpec{ + Metadata: meta, + HTTPReq: &models.HTTPReq{ + Method: models.Method(req.Method), + ProtoMajor: req.ProtoMajor, + ProtoMinor: req.ProtoMinor, + URL: req.URL.String(), + Header: pkg.ToYamlHTTPHeader(req.Header), + Body: string(reqBody), + URLParams: pkg.URLParams(req), + }, + HTTPResp: &models.HTTPResp{ + StatusCode: respParsed.StatusCode, + Header: pkg.ToYamlHTTPHeader(respParsed.Header), + Body: string(respBody), + }, + Created: time.Now().Unix(), + ReqTimestampMock: mock.resTimestampMock, + ResTimestampMock: mock.resTimestampMock, + }, + } + return nil +} diff --git a/pkg/core/proxy/integrations/http/match.go b/pkg/core/proxy/integrations/http/match.go new file mode 100644 index 000000000..1624d4e8d --- /dev/null +++ b/pkg/core/proxy/integrations/http/match.go @@ -0,0 +1,193 @@ +package http + +import ( + "context" + "errors" + "net/url" + + "github.com/agnivade/levenshtein" + "github.com/cloudflare/cfssl/log" + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func match(ctx context.Context, logger *zap.Logger, matchParams *matchParams, mockDb integrations.MockMemDb) (bool, *models.Mock, error) { + for { + select { + case <-ctx.Done(): + return false, nil, ctx.Err() + default: + tcsMocks, err := mockDb.GetFilteredMocks() + + if err != nil { + utils.LogError(logger, err, "failed to get tcs mocks") + return false, nil, errors.New("error while matching the request with the mocks") + } + var eligibleMocks []*models.Mock + + for _, mock := range tcsMocks { + if ctx.Err() != nil { + return false, nil, ctx.Err() + } + if mock.Kind == models.HTTP { + isMockBodyJSON := isJSON([]byte(mock.Spec.HTTPReq.Body)) + + //the body of mock and request aren't of same type + if isMockBodyJSON != matchParams.reqBodyIsJSON { + continue + } + + //parse request body url + parsedURL, err := url.Parse(mock.Spec.HTTPReq.URL) + if err != nil { + utils.LogError(logger, err, "failed to parse mock url") + continue + } + + //Check if the path matches + if parsedURL.Path != matchParams.req.URL.Path { + //If it is not the same, continue + continue + } + + //Check if the method matches + if mock.Spec.HTTPReq.Method != models.Method(matchParams.req.Method) { + //If it is not the same, continue + continue + } + + // Check if the header keys match + if !mapsHaveSameKeys(mock.Spec.HTTPReq.Header, matchParams.req.Header) { + // Different headers, so not a match + continue + } + + if !mapsHaveSameKeys(mock.Spec.HTTPReq.URLParams, matchParams.req.URL.Query()) { + // Different query params, so not a match + continue + } + eligibleMocks = append(eligibleMocks, mock) + } + } + + if len(eligibleMocks) == 0 { + return false, nil, nil + } + + isMatched, bestMatch := fuzzyMatch(eligibleMocks, matchParams.reqBuf) + if isMatched { + isDeleted := mockDb.DeleteFilteredMock(bestMatch) + if !isDeleted { + continue + } + } + return isMatched, bestMatch, nil + } + } + +} + +func mapsHaveSameKeys(map1 map[string]string, map2 map[string][]string) bool { + if len(map1) != len(map2) { + return false + } + + for key := range map1 { + if _, exists := map2[key]; !exists { + return false + } + } + + for key := range map2 { + if _, exists := map1[key]; !exists { + return false + } + } + + return true +} + +func findStringMatch(_ string, mockString []string) int { + minDist := int(^uint(0) >> 1) // Initialize with max int value + bestMatch := -1 + for idx, req := range mockString { + if !util.IsASCIIPrintable(mockString[idx]) { + continue + } + + dist := levenshtein.ComputeDistance(req, mockString[idx]) + if dist == 0 { + return 0 + } + + if dist < minDist { + minDist = dist + bestMatch = idx + } + } + return bestMatch +} + +// TODO: generalize the function to work with any type of integration +func findBinaryMatch(mocks []*models.Mock, reqBuff []byte) int { + + mxSim := -1.0 + mxIdx := -1 + // find the fuzzy hash of the mocks + for idx, mock := range mocks { + encoded, _ := decode(mock.Spec.HTTPReq.Body) + k := util.AdaptiveK(len(reqBuff), 3, 8, 5) + shingles1 := util.CreateShingles(encoded, k) + shingles2 := util.CreateShingles(reqBuff, k) + similarity := util.JaccardSimilarity(shingles1, shingles2) + + log.Debugf("Jaccard Similarity:%f\n", similarity) + + if mxSim < similarity { + mxSim = similarity + mxIdx = idx + } + } + return mxIdx +} + +func encode(buffer []byte) string { + //Encode the buffer to string + encoded := string(buffer) + return encoded +} +func decode(encoded string) ([]byte, error) { + // decode the string to a buffer. + data := []byte(encoded) + return data, nil +} + +func fuzzyMatch(tcsMocks []*models.Mock, reqBuff []byte) (bool, *models.Mock) { + com := encode(reqBuff) + for _, mock := range tcsMocks { + encoded, _ := decode(mock.Spec.HTTPReq.Body) + if string(encoded) == string(reqBuff) || mock.Spec.HTTPReq.Body == com { + return true, mock + } + } + // convert all the configmocks to string array + mockString := make([]string, len(tcsMocks)) + for i := 0; i < len(tcsMocks); i++ { + mockString[i] = tcsMocks[i].Spec.HTTPReq.Body + } + // find the closest match + if util.IsASCIIPrintable(string(reqBuff)) { + idx := findStringMatch(string(reqBuff), mockString) + if idx != -1 { + return true, tcsMocks[idx] + } + } + idx := findBinaryMatch(tcsMocks, reqBuff) + if idx != -1 { + return true, tcsMocks[idx] + } + return false, &models.Mock{} +} diff --git a/pkg/core/proxy/integrations/http/util.go b/pkg/core/proxy/integrations/http/util.go new file mode 100644 index 000000000..7806cf6dc --- /dev/null +++ b/pkg/core/proxy/integrations/http/util.go @@ -0,0 +1,440 @@ +package http + +import ( + "bufio" + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "net" + "net/http" + "regexp" + "strconv" + "strings" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func handleChunkedRequests(ctx context.Context, logger *zap.Logger, finalReq *[]byte, clientConn, destConn net.Conn) error { + + if hasCompleteHeaders(*finalReq) { + logger.Debug("this request has complete headers in the first chunk itself.") + } + + for !hasCompleteHeaders(*finalReq) { + logger.Debug("couldn't get complete headers in first chunk so reading more chunks") + reqHeader, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, nil, "failed to read the request message from the client") + return err + } + // destConn is nil in case of test mode + if destConn != nil { + _, err = destConn.Write(reqHeader) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, nil, "failed to write request message to the destination server") + return err + } + } + + *finalReq = append(*finalReq, reqHeader...) + } + + lines := strings.Split(string(*finalReq), "\n") + var contentLengthHeader string + var transferEncodingHeader string + for _, line := range lines { + if strings.HasPrefix(line, "Content-Length:") { + contentLengthHeader = strings.TrimSpace(strings.TrimPrefix(line, "Content-Length:")) + break + } else if strings.HasPrefix(line, "Transfer-Encoding:") { + transferEncodingHeader = strings.TrimSpace(strings.TrimPrefix(line, "Transfer-Encoding:")) + break + } + } + + //Handle chunked requests + if contentLengthHeader != "" { + contentLength, err := strconv.Atoi(contentLengthHeader) + if err != nil { + utils.LogError(logger, err, "failed to get the content-length header") + return fmt.Errorf("failed to handle chunked request") + } + //Get the length of the body in the request. + bodyLength := len(*finalReq) - strings.Index(string(*finalReq), "\r\n\r\n") - 4 + contentLength -= bodyLength + if contentLength > 0 { + err := contentLengthRequest(ctx, logger, finalReq, clientConn, destConn, contentLength) + if err != nil { + return err + } + } + } else if transferEncodingHeader != "" { + // check if the initial request is the complete request. + if strings.HasSuffix(string(*finalReq), "0\r\n\r\n") { + return nil + } + if transferEncodingHeader == "chunked" { + err := chunkedRequest(ctx, logger, finalReq, clientConn, destConn, transferEncodingHeader) + if err != nil { + return err + } + } + } + return nil +} + +func handleChunkedResponses(ctx context.Context, logger *zap.Logger, finalResp *[]byte, clientConn, destConn net.Conn, resp []byte) error { + + if hasCompleteHeaders(*finalResp) { + logger.Debug("this response has complete headers in the first chunk itself.") + } + + for !hasCompleteHeaders(resp) { + logger.Debug("couldn't get complete headers in first chunk so reading more chunks") + respHeader, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + if err == io.EOF { + logger.Debug("received EOF from the server") + // if there is any buffer left before EOF, we must send it to the client and save this as mock + if len(respHeader) != 0 { + // write the response message to the user client + _, err = clientConn.Write(resp) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, nil, "failed to write response message to the user client") + return err + } + *finalResp = append(*finalResp, respHeader...) + } + return err + } + utils.LogError(logger, nil, "failed to read the response message from the destination server") + return err + } + // write the response message to the user client + _, err = clientConn.Write(respHeader) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, nil, "failed to write response message to the user client") + return err + } + + *finalResp = append(*finalResp, respHeader...) + resp = append(resp, respHeader...) + } + + //Getting the content-length or the transfer-encoding header + var contentLengthHeader, transferEncodingHeader string + lines := strings.Split(string(resp), "\n") + for _, line := range lines { + if strings.HasPrefix(line, "Content-Length:") { + contentLengthHeader = strings.TrimSpace(strings.TrimPrefix(line, "Content-Length:")) + break + } else if strings.HasPrefix(line, "Transfer-Encoding:") { + transferEncodingHeader = strings.TrimSpace(strings.TrimPrefix(line, "Transfer-Encoding:")) + break + } + } + //Handle chunked responses + if contentLengthHeader != "" { + contentLength, err := strconv.Atoi(contentLengthHeader) + if err != nil { + utils.LogError(logger, err, "failed to get the content-length header") + return fmt.Errorf("failed to handle chunked response") + } + bodyLength := len(resp) - strings.Index(string(resp), "\r\n\r\n") - 4 + contentLength -= bodyLength + if contentLength > 0 { + err := contentLengthResponse(ctx, logger, finalResp, clientConn, destConn, contentLength) + if err != nil { + return err + } + } + } else if transferEncodingHeader != "" { + //check if the initial response is the complete response. + if strings.HasSuffix(string(*finalResp), "0\r\n\r\n") { + return nil + } + if transferEncodingHeader == "chunked" { + err := chunkedResponse(ctx, logger, finalResp, clientConn, destConn) + if err != nil { + return err + } + } + } + return nil +} + +// Handled chunked requests when content-length is given. +func contentLengthRequest(ctx context.Context, logger *zap.Logger, finalReq *[]byte, clientConn, destConn net.Conn, contentLength int) error { + for contentLength > 0 { + err := clientConn.SetReadDeadline(time.Now().Add(5 * time.Second)) + if err != nil { + utils.LogError(logger, err, "failed to set the read deadline for the client conn") + return err + } + requestChunked, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + if err == io.EOF { + utils.LogError(logger, nil, "conn closed by the user client") + return err + } else if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + logger.Info("Stopped getting data from the conn", zap.Error(err)) + break + } + utils.LogError(logger, nil, "failed to read the response message from the destination server") + return err + } + logger.Debug("This is a chunk of request[content-length]: " + string(requestChunked)) + *finalReq = append(*finalReq, requestChunked...) + contentLength -= len(requestChunked) + + // destConn is nil in case of test mode. + if destConn != nil { + _, err = destConn.Write(requestChunked) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, nil, "failed to write request message to the destination server") + return err + } + } + } + return nil +} + +// Handled chunked requests when transfer-encoding is given. +func chunkedRequest(ctx context.Context, logger *zap.Logger, finalReq *[]byte, clientConn, destConn net.Conn, _ string) error { + + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + //TODO: we have to implement a way to read the buffer chunk wise according to the chunk size (chunk size comes in hexadecimal) + // because it can happen that some chunks come after 5 seconds. + err := clientConn.SetReadDeadline(time.Now().Add(5 * time.Second)) + if err != nil { + utils.LogError(logger, err, "failed to set the read deadline for the client conn") + return err + } + requestChunked, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + break + } + utils.LogError(logger, nil, "failed to read the response message from the destination server") + return err + } + + *finalReq = append(*finalReq, requestChunked...) + // destConn is nil in case of test mode. + if destConn != nil { + _, err = destConn.Write(requestChunked) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, nil, "failed to write request message to the destination server") + return err + } + } + + //check if the initial request is completed + if strings.HasSuffix(string(requestChunked), "0\r\n\r\n") { + return nil + } + } + } +} + +// Handled chunked responses when content-length is given. +func contentLengthResponse(ctx context.Context, logger *zap.Logger, finalResp *[]byte, clientConn, destConn net.Conn, contentLength int) error { + isEOF := false + for contentLength > 0 { + //Set deadline of 5 seconds + err := destConn.SetReadDeadline(time.Now().Add(5 * time.Second)) + if err != nil { + utils.LogError(logger, err, "failed to set the read deadline for the destination conn") + return err + } + resp, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + if err == io.EOF { + isEOF = true + logger.Debug("received EOF, conn closed by the destination server") + if len(resp) == 0 { + break + } + } else if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + logger.Info("Stopped getting data from the conn", zap.Error(err)) + break + } else { + utils.LogError(logger, nil, "failed to read the response message from the destination server") + return err + } + } + + logger.Debug("This is a chunk of response[content-length]: " + string(resp)) + *finalResp = append(*finalResp, resp...) + contentLength -= len(resp) + + // write the response message to the user client + _, err = clientConn.Write(resp) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, nil, "failed to write response message to the user client") + return err + } + + if isEOF { + break + } + } + return nil +} + +// Handled chunked responses when transfer-encoding is given. +func chunkedResponse(ctx context.Context, logger *zap.Logger, finalResp *[]byte, clientConn, destConn net.Conn) error { + isEOF := false + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + resp, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + if err != io.EOF { + utils.LogError(logger, err, "failed to read the response message from the destination server") + return err + } + isEOF = true + logger.Debug("received EOF", zap.Error(err)) + if len(resp) == 0 { + logger.Debug("exiting loop as response is complete") + break + } + } + + *finalResp = append(*finalResp, resp...) + // write the response message to the user client + _, err = clientConn.Write(resp) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, nil, "failed to write response message to the user client") + return err + } + + //In some cases need to write the response to the client + // where there is some response before getting the true EOF + if isEOF { + break + } + + if string(resp) == "0\r\n\r\n" { + return nil + } + } + } +} + +// Checks if the response is gzipped +func isGZipped(check io.ReadCloser, l *zap.Logger) (bool, *bufio.Reader) { + bufReader := bufio.NewReader(check) + peekedBytes, err := bufReader.Peek(2) + if err != nil && err != io.EOF { + l.Debug("failed to peek the response", zap.Error(err)) + return false, nil + } + if len(peekedBytes) < 2 { + return false, nil + } + if peekedBytes[0] == 0x1f && peekedBytes[1] == 0x8b { + return true, bufReader + } + return false, nil +} + +// hasCompleteHeaders checks if the given byte slice contains the complete HTTP headers +func hasCompleteHeaders(httpChunk []byte) bool { + // Define the sequence for header end: "\r\n\r\n" + headerEndSequence := []byte{'\r', '\n', '\r', '\n'} + + // Check if the byte slice contains the header end sequence + return bytes.Contains(httpChunk, headerEndSequence) +} + +// extract the request metadata from the request +func getReqMeta(req *http.Request) map[string]string { + reqMeta := map[string]string{} + if req != nil { + // get request metadata + reqMeta = map[string]string{ + "method": req.Method, + "url": req.URL.String(), + "host": req.Host, + } + } + return reqMeta +} + +func isJSON(body []byte) bool { + var js interface{} + return json.Unmarshal(body, &js) == nil +} + +func isPassThrough(logger *zap.Logger, req *http.Request, destPort uint, opts models.OutgoingOptions) bool { + passThrough := false + + for _, bypass := range opts.Rules { + if bypass.Host != "" { + regex, err := regexp.Compile(bypass.Host) + if err != nil { + utils.LogError(logger, err, "failed to compile the host regex", zap.Any("metadata", getReqMeta(req))) + continue + } + passThrough = regex.MatchString(req.Host) + if !passThrough { + continue + } + } + if bypass.Path != "" { + regex, err := regexp.Compile(bypass.Path) + if err != nil { + utils.LogError(logger, err, "failed to compile the path regex", zap.Any("metadata", getReqMeta(req))) + continue + } + passThrough = regex.MatchString(req.URL.String()) + if !passThrough { + continue + } + } + + if passThrough { + if bypass.Port == 0 || bypass.Port == destPort { + return true + } + passThrough = false + } + } + + return passThrough +} diff --git a/pkg/core/proxy/integrations/integrations.go b/pkg/core/proxy/integrations/integrations.go new file mode 100644 index 000000000..feb5146b0 --- /dev/null +++ b/pkg/core/proxy/integrations/integrations.go @@ -0,0 +1,54 @@ +// Package integrations provides functionality for integrating different types of services. +package integrations + +import ( + "context" + "crypto/tls" + "net" + + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +type Initializer func(logger *zap.Logger) Integrations + +type integrationType string + +// constants for different types of integrations +const ( + HTTP integrationType = "http" + GRPC integrationType = "grpc" + GENERIC integrationType = "generic" + MYSQL integrationType = "mysql" + POSTGRES_V1 integrationType = "postgres_v1" + POSTGRES_V2 integrationType = "postgres_v2" + MONGO integrationType = "mongo" +) + +var Registered = make(map[string]Initializer) + +type ConditionalDstCfg struct { + Addr string // Destination Addr (ip:port) + Port uint + TLSCfg *tls.Config +} + +type Integrations interface { + MatchType(ctx context.Context, reqBuf []byte) bool + RecordOutgoing(ctx context.Context, src net.Conn, dst net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error + MockOutgoing(ctx context.Context, src net.Conn, dstCfg *ConditionalDstCfg, mockDb MockMemDb, opts models.OutgoingOptions) error +} + +func Register(name string, i Initializer) { + Registered[name] = i +} + +type MockMemDb interface { + GetFilteredMocks() ([]*models.Mock, error) + GetUnFilteredMocks() ([]*models.Mock, error) + UpdateUnFilteredMock(old *models.Mock, new *models.Mock) bool + DeleteFilteredMock(mock *models.Mock) bool + DeleteUnFilteredMock(mock *models.Mock) bool + // Flag the mock as used which matches the external request from application in test mode + FlagMockAsUsed(mock *models.Mock) error +} diff --git a/pkg/core/proxy/integrations/mongo/README.md b/pkg/core/proxy/integrations/mongo/README.md new file mode 100644 index 000000000..c9ea2e5ec --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/README.md @@ -0,0 +1,6 @@ +# Mongo Package Documentation + +The `mongo` package encompasses the parser and mapping logic required +to read MongoDB wire messages and capture or stub the outputs. +Utilized by the `hooks` package, it assists in redirecting outgoing +calls for the purpose of recording or stubbing the outputs. \ No newline at end of file diff --git a/pkg/core/proxy/integrations/mongo/command.go b/pkg/core/proxy/integrations/mongo/command.go new file mode 100644 index 000000000..284a080e1 --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/command.go @@ -0,0 +1,94 @@ +// Package mongo provides functionality for working with MongoDB outgoing calls. +package mongo + +import ( + "go.mongodb.org/mongo-driver/x/bsonx/bsoncore" +) + +type Command string + +// constants for all the commands that can be proxied +const ( + Unknown Command = "unknown" + AbortTransaction Command = "abortTransaction" + Aggregate Command = "aggregate" + CommitTransaction Command = "commandTransaction" + Count Command = "count" + CreateIndexes Command = "createIndexes" + Delete Command = "delete" + Distinct Command = "distinct" + Drop Command = "drop" + DropDatabase Command = "dropDatabase" + DropIndexes Command = "dropIndexes" + EndSessions Command = "endSessions" + Find Command = "find" + FindAndModify Command = "findAndModify" + GetMore Command = "getMore" + Insert Command = "insert" + IsMaster Command = "isMaster" + Ismaster Command = "ismaster" + ListCollections Command = "listCollections" + ListIndexes Command = "listIndexes" + ListDatabases Command = "listDatabases" + MapReduce Command = "mapReduce" + Update Command = "tools" +) + +var collectionCommands = []Command{Aggregate, Count, CreateIndexes, Delete, Distinct, Drop, DropIndexes, Find, FindAndModify, Insert, ListIndexes, MapReduce, Update} +var int32Commands = []Command{AbortTransaction, Aggregate, CommitTransaction, DropDatabase, IsMaster, Ismaster, ListCollections, ListDatabases} +var int64Commands = []Command{GetMore} +var arrayCommands = []Command{EndSessions} + +func IsWrite(command Command) bool { + switch command { + case CommitTransaction, CreateIndexes, Delete, Drop, DropIndexes, DropDatabase, FindAndModify, Insert, Update: + return true + } + return false +} + +func CommandAndCollection(msg bsoncore.Document) (Command, string) { + for _, s := range collectionCommands { + if coll, ok := msg.Lookup(string(s)).StringValueOK(); ok { + return s, coll + } + } + for _, s := range int32Commands { + value := msg.Lookup(string(s)) + if value.Data != nil { + return s, "" + } + } + for _, s := range int64Commands { + value := msg.Lookup(string(s)) + if value.Data != nil { + if coll, ok := msg.Lookup("collection").StringValueOK(); ok { + return s, coll + } + return s, "" + } + } + for _, s := range arrayCommands { + value := msg.Lookup(string(s)) + if value.Data != nil { + return s, "" + } + } + return Unknown, "" +} + +func IsIsMasterDoc(doc bsoncore.Document) bool { + isMaster := doc.Lookup(string(IsMaster)) + ismaster := doc.Lookup(string(Ismaster)) + return IsIsMasterValueTruthy(isMaster) || IsIsMasterValueTruthy(ismaster) +} + +func IsIsMasterValueTruthy(val bsoncore.Value) bool { + if intValue, isInt := val.Int32OK(); intValue > 0 { + return true + } else if !isInt { + boolValue, isBool := val.BooleanOK() + return boolValue && isBool + } + return false +} diff --git a/pkg/core/proxy/integrations/mongo/decode.go b/pkg/core/proxy/integrations/mongo/decode.go new file mode 100644 index 000000000..d644af909 --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/decode.go @@ -0,0 +1,306 @@ +package mongo + +import ( + "context" + "errors" + "fmt" + "io" + "net" + "strconv" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage" + "go.uber.org/zap" +) + +func decodeMongo(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + startedDecoding := time.Now() + requestBuffers := [][]byte{reqBuf} + + errCh := make(chan error, 1) + + go func(errCh chan error, reqBuf []byte, startedDecoding time.Time, requestBuffers [][]byte) { + defer utils.Recover(logger) + defer close(errCh) + var readRequestDelay time.Duration + for { + configMocks, err := mockDb.GetUnFilteredMocks() + if err != nil { + utils.LogError(logger, err, "error while getting config mock") + } + logger.Debug(fmt.Sprintf("the config mocks are: %v", configMocks)) + + var ( + mongoRequests []models.MongoRequest + ) + if string(reqBuf) == "read form client conn" { + started := time.Now() + reqBuf, err = util.ReadBytes(ctx, logger, clientConn) + if err != nil { + if err == io.EOF { + logger.Debug("recieved request buffer is empty in test mode for mongo calls") + errCh <- err + return + } + utils.LogError(logger, err, "failed to read request from the mongo client") + errCh <- err + return + } + requestBuffers = append(requestBuffers, reqBuf) + logger.Debug("the request from the mongo client", zap.Any("buffer", reqBuf)) + readRequestDelay = time.Since(started) + } + if len(reqBuf) == 0 { + errCh <- errors.New("the request buffer is empty") + return + } + logger.Debug(fmt.Sprintf("the loop starts with the time delay: %v", time.Since(startedDecoding))) + opReq, requestHeader, mongoRequest, err := Decode(reqBuf, logger) + if err != nil { + utils.LogError(logger, err, "failed to decode the mongo wire message from the client") + errCh <- err + return + } + mongoRequests = append(mongoRequests, models.MongoRequest{ + Header: &requestHeader, + Message: mongoRequest, + ReadDelay: int64(readRequestDelay), + }) + if val, ok := mongoRequest.(*models.MongoOpMessage); ok && hasSecondSetBit(val.FlagBits) { + for { + started := time.Now() + logger.Debug("into the for loop for request stream") + requestBuffer1, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + if err == io.EOF { + logger.Debug("recieved request buffer is empty for streaming mongo request call") + errCh <- err + return + } + utils.LogError(logger, err, "failed to read request from the mongo client", zap.String("mongo server address", dstCfg.Addr)) + errCh <- err + return + } + requestBuffers = append(requestBuffers, reqBuf) + readRequestDelay = time.Since(started) + + if len(requestBuffer1) == 0 { + logger.Debug("the response from the server is complete") + break + } + _, reqHeader, mongoReq, err := Decode(requestBuffer1, logger) + if err != nil { + utils.LogError(logger, err, "failed to decode the mongo wire message from the mongo client") + errCh <- err + return + } + if mongoReqVal, ok := mongoReq.(models.MongoOpMessage); ok && !hasSecondSetBit(mongoReqVal.FlagBits) { + logger.Debug("the request from the client is complete since the more_to_come flagbit is 0") + break + } + mongoRequests = append(mongoRequests, models.MongoRequest{ + Header: &reqHeader, + Message: mongoReq, + ReadDelay: int64(readRequestDelay), + }) + } + } + if isHeartBeat(logger, opReq, *mongoRequests[0].Header, mongoRequests[0].Message) { + logger.Debug("recieved a heartbeat request for mongo", zap.Any("config mocks", len(configMocks))) + maxMatchScore := 0.0 + bestMatchIndex := -1 + for configIndex, configMock := range configMocks { + logger.Debug("the config mock is: ", zap.Any("config mock", configMock), zap.Any("actual request", mongoRequests)) + if len(configMock.Spec.MongoRequests) == len(mongoRequests) { + for i, req := range configMock.Spec.MongoRequests { + if len(configMock.Spec.MongoRequests) != len(mongoRequests) || req.Header.Opcode != mongoRequests[i].Header.Opcode { + continue + } + switch req.Header.Opcode { + case wiremessage.OpQuery: + expectedQuery := req.Message.(*models.MongoOpQuery) + actualQuery := mongoRequests[i].Message.(*models.MongoOpQuery) + if actualQuery.FullCollectionName != expectedQuery.FullCollectionName || + actualQuery.ReturnFieldsSelector != expectedQuery.ReturnFieldsSelector || + actualQuery.Flags != expectedQuery.Flags || + actualQuery.NumberToReturn != expectedQuery.NumberToReturn || + actualQuery.NumberToSkip != expectedQuery.NumberToSkip { + continue + } + + expected := map[string]interface{}{} + actual := map[string]interface{}{} + err = bson.UnmarshalExtJSON([]byte(expectedQuery.Query), true, &expected) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the section of recorded request to bson document") + continue + } + err = bson.UnmarshalExtJSON([]byte(actualQuery.Query), true, &actual) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the section of incoming request to bson document") + continue + } + score := calculateMatchingScore(expected, actual) + logger.Debug("the expected and actual msg in the heartbeat OpQuery query.", zap.Any("expected", expected), zap.Any("actual", actual), zap.Any("score", score)) + if score > maxMatchScore { + maxMatchScore = score + bestMatchIndex = configIndex + } + + case wiremessage.OpMsg: + if req.Message.(*models.MongoOpMessage).FlagBits != mongoRequests[i].Message.(*models.MongoOpMessage).FlagBits { + continue + } + scoreSum := 0.0 + if len(req.Message.(*models.MongoOpMessage).Sections) != len(mongoRequests[i].Message.(*models.MongoOpMessage).Sections) { + continue + } + for sectionIndx, section := range req.Message.(*models.MongoOpMessage).Sections { + if len(req.Message.(*models.MongoOpMessage).Sections) == len(mongoRequests[i].Message.(*models.MongoOpMessage).Sections) { + score := compareOpMsgSection(logger, section, mongoRequests[i].Message.(*models.MongoOpMessage).Sections[sectionIndx]) + scoreSum += score + } + } + currentScore := scoreSum / float64(len(mongoRequests)) + logger.Debug("the expected and actual msg in the heartbeat OpMsg single section.", zap.Any("expected", req.Message.(*models.MongoOpMessage).Sections), zap.Any("actual", mongoRequests[i].Message.(*models.MongoOpMessage).Sections), zap.Any("score", currentScore)) + if currentScore > maxMatchScore { + maxMatchScore = currentScore + bestMatchIndex = configIndex + } + default: + utils.LogError(logger, err, "the OpCode of the mongo wiremessage is invalid.") + } + } + } + } + responseTo := mongoRequests[0].Header.RequestID + if bestMatchIndex == -1 || maxMatchScore == 0.0 { + logger.Debug("the mongo request do not matches with any config mocks", zap.Any("request", mongoRequests)) + continue + } + // set the config as used in the mockManager + err = mockDb.FlagMockAsUsed(configMocks[bestMatchIndex]) + if err != nil { + utils.LogError(logger, err, "failed to flag mock as used in mongo parser", zap.Any("for mock", configMocks[bestMatchIndex].Name)) + errCh <- err + return + } + for _, mongoResponse := range configMocks[bestMatchIndex].Spec.MongoResponses { + switch mongoResponse.Header.Opcode { + case wiremessage.OpReply: + replySpec := mongoResponse.Message.(*models.MongoOpReply) + replyMessage, err := encodeOpReply(replySpec, logger) + if err != nil { + utils.LogError(logger, err, "failed to encode the recorded OpReply yaml", zap.Any("for request with id", responseTo)) + errCh <- err + return + } + requestID := wiremessage.NextRequestID() + heathCheckReplyBuffer := replyMessage.Encode(responseTo, requestID) + responseTo = requestID + logger.Debug(fmt.Sprintf("the bufffer response is: %v", string(heathCheckReplyBuffer))) + _, err = clientConn.Write(heathCheckReplyBuffer) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "failed to write the health check reply to mongo client") + errCh <- err + return + } + case wiremessage.OpMsg: + respMessage := mongoResponse.Message.(*models.MongoOpMessage) + + var expectedRequestSections []string + if len(configMocks[bestMatchIndex].Spec.MongoRequests) > 0 { + expectedRequestSections = configMocks[bestMatchIndex].Spec.MongoRequests[0].Message.(*models.MongoOpMessage).Sections + } + message, err := encodeOpMsg(respMessage, mongoRequest.(*models.MongoOpMessage).Sections, expectedRequestSections, opts.MongoPassword, logger) + if err != nil { + utils.LogError(logger, err, "failed to encode the recorded OpMsg response", zap.Any("for request with id", responseTo)) + errCh <- err + return + } + _, err = clientConn.Write(message.Encode(responseTo, wiremessage.NextRequestID())) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "failed to write the health check opmsg to mongo client") + errCh <- err + return + } + } + } + } else { + matched, matchedMock, err := match(ctx, logger, mongoRequests, mockDb) + if err != nil { + errCh <- err + utils.LogError(logger, err, "error while matching mongo mocks") + return + } + if !matched { + logger.Debug("mongo request not matched with any tcsMocks", zap.Any("request", mongoRequests)) + reqBuf, err = util.PassThrough(ctx, logger, clientConn, dstCfg, requestBuffers) + if err != nil { + utils.LogError(logger, err, "failed to passthrough the mongo request to the actual database server") + errCh <- err + return + } + continue + } + + responseTo := mongoRequests[0].Header.RequestID + logger.Debug("the mock matched with the current request", zap.Any("mock", matchedMock), zap.Any("responseTo", responseTo)) + + for _, resp := range matchedMock.Spec.MongoResponses { + respMessage := resp.Message.(*models.MongoOpMessage) + var expectedRequestSections []string + if len(matchedMock.Spec.MongoRequests) > 0 { + expectedRequestSections = matchedMock.Spec.MongoRequests[0].Message.(*models.MongoOpMessage).Sections + } + message, err := encodeOpMsg(respMessage, mongoRequest.(*models.MongoOpMessage).Sections, expectedRequestSections, opts.MongoPassword, logger) + if err != nil { + utils.LogError(logger, err, "failed to encode the recorded OpMsg response", zap.Any("for request with id", responseTo)) + errCh <- err + return + } + requestID := wiremessage.NextRequestID() + _, err = clientConn.Write(message.Encode(responseTo, requestID)) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "failed to write the health check opmsg to mongo client", zap.Any("for request with id", responseTo)) + errCh <- err + return + } + responseTo = requestID + } + } + logger.Debug("the length of the requestBuffer after matching: " + strconv.Itoa(len(reqBuf)) + strconv.Itoa(len(requestBuffers[0]))) + if len(requestBuffers) > 0 && len(reqBuf) == len(requestBuffers[0]) { + reqBuf = []byte("read form client conn") + } + + // Clear the buffer for the next dependency call + requestBuffers = [][]byte{} + } + }(errCh, reqBuf, startedDecoding, requestBuffers) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err == io.EOF { + logger.Debug("connection lost from client") + return nil + } + return err + } +} diff --git a/pkg/core/proxy/integrations/mongo/encode.go b/pkg/core/proxy/integrations/mongo/encode.go new file mode 100644 index 000000000..0cb7e02c0 --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/encode.go @@ -0,0 +1,278 @@ +package mongo + +import ( + "context" + "errors" + "fmt" + "io" + "net" + "time" + + "golang.org/x/sync/errgroup" + + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func encodeMongo(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn, destConn net.Conn, mocks chan<- *models.Mock, _ models.OutgoingOptions) error { + + errCh := make(chan error, 1) + + //get the error group from the context + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + + g.Go(func() error { + defer utils.Recover(logger) + defer close(errCh) + for { + var err error + var readRequestDelay time.Duration + // var logStr string = fmt.Sprintln("the conn id: ", clientConnId, " the destination conn id: ", destConnId) + + // logStr += fmt.Sprintln("started reading from the client: ", started) + if string(reqBuf) == "read form client conn" { + // lstr := "" + started := time.Now() + reqBuf, err = util.ReadBytes(ctx, logger, clientConn) + logger.Debug("reading from the mongo conn", zap.Any("", string(reqBuf))) + if err != nil { + if err == io.EOF { + logger.Debug("recieved request buffer is empty in record mode for mongo call") + errCh <- err + return nil + } + utils.LogError(logger, err, "failed to read request from the mongo client", zap.String("mongo client address", clientConn.RemoteAddr().String())) + errCh <- err + return nil + } + readRequestDelay = time.Since(started) + // logStr += lstr + logger.Debug(fmt.Sprintf("the request in the mongo parser before passing to dest: %v", len(reqBuf))) + } + + var ( + mongoRequests []models.MongoRequest + mongoResponses []models.MongoResponse + ) + opReq, requestHeader, mongoRequest, err := Decode(reqBuf, logger) + if err != nil { + utils.LogError(logger, err, "failed to decode the mongo wire message from the client") + errCh <- err + return nil + } + + mongoRequests = append(mongoRequests, models.MongoRequest{ + Header: &requestHeader, + Message: mongoRequest, + ReadDelay: int64(readRequestDelay), + }) + _, err = destConn.Write(reqBuf) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write the request buffer to mongo server", zap.String("mongo server address", destConn.RemoteAddr().String())) + errCh <- err + return nil + } + logger.Debug(fmt.Sprintf("the request in the mongo parser after passing to dest: %v", len(reqBuf))) + + // logStr += fmt.Sprintln("after writing the request to the destination: ", time.Since(started)) + if val, ok := mongoRequest.(*models.MongoOpMessage); ok && hasSecondSetBit(val.FlagBits) { + for { + requestBuffer1, err := util.ReadBytes(ctx, logger, clientConn) + + // logStr += tmpStr + if err != nil { + if err == io.EOF { + logger.Debug("recieved request buffer is empty in record mode for mongo request") + errCh <- err + return nil + } + utils.LogError(logger, err, "failed to read request from the mongo client", zap.String("mongo client address", clientConn.RemoteAddr().String())) + errCh <- err + return nil + } + + // write the reply to mongo client + _, err = destConn.Write(requestBuffer1) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write the reply message to mongo client") + errCh <- err + return nil + } + + // logStr += fmt.Sprintln("after writting response to the client: ", time.Since(started), "current time is: ", time.Now()) + + if len(requestBuffer1) == 0 { + logger.Debug("the response from the server is complete") + break + } + _, reqHeader, mongoReq, err := Decode(requestBuffer1, logger) + if err != nil { + utils.LogError(logger, err, "failed to decode the mongo wire message from the destination server") + errCh <- err + return nil + } + if mongoReqVal, ok := mongoReq.(models.MongoOpMessage); ok && !hasSecondSetBit(mongoReqVal.FlagBits) { + logger.Debug("the request from the client is complete since the more_to_come flagbit is 0") + break + } + mongoRequests = append(mongoRequests, models.MongoRequest{ + Header: &reqHeader, + Message: mongoReq, + ReadDelay: int64(readRequestDelay), + }) + } + } + + // read reply message from the mongo server + // tmpStr := "" + reqTimestampMock := time.Now() + started := time.Now() + responsePckLengthBuffer, err := util.ReadRequiredBytes(ctx, logger, destConn, 4) + if err != nil { + if err == io.EOF { + logger.Debug("recieved response buffer is empty in record mode for mongo call") + errCh <- err + return nil + } + utils.LogError(logger, err, "failed to read reply from the mongo server", zap.String("mongo server address", destConn.RemoteAddr().String())) + errCh <- err + return nil + } + + logger.Debug("recieved these pck length packets", zap.Any("packets", responsePckLengthBuffer)) + + pckLength := getPacketLength(responsePckLengthBuffer) + logger.Debug("received pck length ", zap.Any("packet length", pckLength)) + + responsePckDataBuffer, err := util.ReadRequiredBytes(ctx, logger, destConn, int(pckLength)-4) + + logger.Debug("recieved these packets", zap.Any("packets", responsePckDataBuffer)) + + responseBuffer := append(responsePckLengthBuffer, responsePckDataBuffer...) + logger.Debug("reading from the destination mongo server", zap.Any("", string(responseBuffer))) + // logStr += tmpStr + if err != nil { + if err == io.EOF { + logger.Debug("recieved response buffer is empty in record mode for mongo call") + errCh <- err + return nil + } + utils.LogError(logger, err, "failed to read reply from the mongo server", zap.String("mongo server address", destConn.RemoteAddr().String())) + errCh <- err + return nil + } + readResponseDelay := time.Since(started) + + // write the reply to mongo client + _, err = clientConn.Write(responseBuffer) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write the reply message to mongo client") + errCh <- err + return nil + } + + // logStr += fmt.Sprintln("after writting response to the client: ", time.Since(started), "current time is: ", time.Now()) + + _, responseHeader, mongoResponse, err := Decode(responseBuffer, logger) + if err != nil { + utils.LogError(logger, err, "failed to decode the mongo wire message from the destination server") + errCh <- err + return nil + } + mongoResponses = append(mongoResponses, models.MongoResponse{ + Header: &responseHeader, + Message: mongoResponse, + ReadDelay: int64(readResponseDelay), + }) + if val, ok := mongoResponse.(*models.MongoOpMessage); ok && hasSecondSetBit(val.FlagBits) { + for i := 0; ; i++ { + if i == 0 && isHeartBeat(logger, opReq, *mongoRequests[0].Header, mongoRequests[0].Message) { + recordMessage(ctx, logger, mongoRequests, mongoResponses, opReq, reqTimestampMock, mocks) + } + started = time.Now() + responseBuffer, err = util.ReadBytes(ctx, logger, destConn) + // logStr += tmpStr + if err != nil { + if err == io.EOF { + logger.Debug("recieved response buffer is empty in record mode for mongo call") + errCh <- err + return nil + } + utils.LogError(logger, err, "failed to read reply from the mongo server", zap.String("mongo server address", destConn.RemoteAddr().String())) + errCh <- err + return nil + } + logger.Debug(fmt.Sprintf("the response in the mongo parser before passing to client: %v", len(responseBuffer))) + + readResponseDelay := time.Since(started) + + // write the reply to mongo client + _, err = clientConn.Write(responseBuffer) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write the reply message to mongo client") + errCh <- err + return nil + } + logger.Debug(fmt.Sprintf("the response in the mongo parser after passing to client: %v", len(responseBuffer))) + + // logStr += fmt.Sprintln("after writting response to the client: ", time.Since(started), "current time is: ", time.Now()) + + if len(responseBuffer) == 0 { + logger.Debug("the response from the server is complete") + break + } + _, respHeader, mongoResp, err := Decode(responseBuffer, logger) + if err != nil { + utils.LogError(logger, err, "failed to decode the mongo wire message from the destination server") + errCh <- err + return nil + } + if mongoRespVal, ok := mongoResp.(models.MongoOpMessage); ok && !hasSecondSetBit(mongoRespVal.FlagBits) { + logger.Debug("the response from the server is complete since the more_to_come flagbit is 0") + break + } + mongoResponses = append(mongoResponses, models.MongoResponse{ + Header: &respHeader, + Message: mongoResp, + ReadDelay: int64(readResponseDelay), + }) + } + } + + recordMessage(ctx, logger, mongoRequests, mongoResponses, opReq, reqTimestampMock, mocks) + reqBuf = []byte("read form client conn") + } + }) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err == io.EOF { + return nil + } + return err + } +} + +func getPacketLength(src []byte) (length int32) { + length = int32(src[0]) | int32(src[1])<<8 | int32(src[2])<<16 | int32(src[3])<<24 + return length +} diff --git a/pkg/core/proxy/integrations/mongo/match.go b/pkg/core/proxy/integrations/mongo/match.go new file mode 100644 index 000000000..a5d761a43 --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/match.go @@ -0,0 +1,228 @@ +package mongo + +import ( + "context" + "fmt" + "reflect" + "strings" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/utils" + "go.mongodb.org/mongo-driver/bson" + + "go.keploy.io/server/v2/pkg/models" + "go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage" + "go.uber.org/zap" +) + +func match(ctx context.Context, logger *zap.Logger, mongoRequests []models.MongoRequest, mockDb integrations.MockMemDb) (bool, *models.Mock, error) { + for { + select { + case <-ctx.Done(): + return false, nil, ctx.Err() + default: + tcsMocks, err := mockDb.GetFilteredMocks() + if err != nil { + return false, nil, fmt.Errorf("error while getting tcs mock: %v", err) + } + maxMatchScore := 0.0 + bestMatchIndex := -1 + for tcsIndx, tcsMock := range tcsMocks { + if ctx.Err() != nil { + return false, nil, ctx.Err() + } + if len(tcsMock.Spec.MongoRequests) == len(mongoRequests) { + for i, req := range tcsMock.Spec.MongoRequests { + if ctx.Err() != nil { + return false, nil, ctx.Err() + } + if len(tcsMock.Spec.MongoRequests) != len(mongoRequests) || req.Header.Opcode != mongoRequests[i].Header.Opcode { + logger.Debug("the recieved request is not of same type with the tcmocks", zap.Any("at index", tcsIndx)) + continue + } + switch req.Header.Opcode { + case wiremessage.OpMsg: + if req.Message.(*models.MongoOpMessage).FlagBits != mongoRequests[i].Message.(*models.MongoOpMessage).FlagBits { + logger.Debug("the recieved request is not of same flagbit with the tcmocks", zap.Any("at index", tcsIndx)) + continue + } + scoreSum := 0.0 + for sectionIndx, section := range req.Message.(*models.MongoOpMessage).Sections { + if len(req.Message.(*models.MongoOpMessage).Sections) == len(mongoRequests[i].Message.(*models.MongoOpMessage).Sections) { + score := compareOpMsgSection(logger, section, mongoRequests[i].Message.(*models.MongoOpMessage).Sections[sectionIndx]) + scoreSum += score + } + } + currentScore := scoreSum / float64(len(mongoRequests)) + if currentScore > maxMatchScore { + maxMatchScore = currentScore + bestMatchIndex = tcsIndx + } + default: + utils.LogError(logger, nil, "the OpCode of the mongo wiremessage is invalid.") + } + } + } + } + if bestMatchIndex == -1 { + return false, nil, nil + } + mock := tcsMocks[bestMatchIndex] + isDeleted := mockDb.DeleteFilteredMock(mock) + if !isDeleted { + continue + } + return true, mock, nil + } + } +} + +func compareOpMsgSection(logger *zap.Logger, expectedSection, actualSection string) float64 { + // check that the sections are of same type. SectionSingle (section[16] is "m") or SectionSequence (section[16] is "i"). + if (len(expectedSection) < 16 || len(actualSection) < 16) && expectedSection[16] != actualSection[16] { + return 0 + } + logger.Debug(fmt.Sprintf("the sections are. Expected: %v\n and actual: %v", expectedSection, actualSection)) + switch { + case strings.HasPrefix(expectedSection, "{ SectionSingle identifier:"): + var expectedIdentifier string + var expectedMsgsStr string + // // Define the regular expression pattern + // // Compile the regular expression + // // Find submatches using the regular expression + + expectedIdentifier, expectedMsgsStr, err := decodeOpMsgSectionSequence(expectedSection) + if err != nil { + logger.Debug(fmt.Sprintf("the section in mongo OpMsg wiremessage: %v", expectedSection)) + utils.LogError(logger, err, "failed to fetch the identifier/msgs from the section single of recorded OpMsg", zap.Any("identifier", expectedIdentifier)) + return 0 + } + + var actualIdentifier string + var actualMsgsStr string + // _, err = fmt.Sscanf(actualSection, "{ SectionSingle identifier: %s , msgs: [ %s ] }", &actualIdentifier, &actualMsgsStr) + actualIdentifier, actualMsgsStr, err = decodeOpMsgSectionSequence(actualSection) + if err != nil { + utils.LogError(logger, err, "failed to fetch the identifier/msgs from the section single of incoming OpMsg", zap.Any("identifier", actualIdentifier)) + return 0 + } + + // // Compile the regular expression + // // Find submatches using the regular expression + + logger.Debug("the expected section", zap.Any("identifier", expectedIdentifier), zap.Any("docs", expectedMsgsStr)) + logger.Debug("the actual section", zap.Any("identifier", actualIdentifier), zap.Any("docs", actualMsgsStr)) + + expectedMsgs := strings.Split(expectedMsgsStr, ", ") + actualMsgs := strings.Split(actualMsgsStr, ", ") + if len(expectedMsgs) != len(actualMsgs) || expectedIdentifier != actualIdentifier { + return 0 + } + score := 0.0 + for i := range expectedMsgs { + expected := map[string]interface{}{} + actual := map[string]interface{}{} + err := bson.UnmarshalExtJSON([]byte(expectedMsgs[i]), true, &expected) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the section of recorded request to bson document") + return 0 + } + err = bson.UnmarshalExtJSON([]byte(actualMsgs[i]), true, &actual) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the section of incoming request to bson document") + return 0 + } + score += calculateMatchingScore(expected, actual) + } + logger.Debug("the matching score for sectionSequence", zap.Any("", score)) + return score + case strings.HasPrefix(expectedSection, "{ SectionSingle msg:"): + var expectedMsgsStr string + expectedMsgsStr, err := extractSectionSingle(expectedSection) + if err != nil { + utils.LogError(logger, err, "failed to fetch the msgs from the single section of recorded OpMsg") + return 0 + } + // // Define the regular expression pattern + // // Compile the regular expression + // // Find submatches using the regular expression + + var actualMsgsStr string + actualMsgsStr, err = extractSectionSingle(actualSection) + if err != nil { + utils.LogError(logger, err, "failed to fetch the msgs from the single section of incoming OpMsg") + return 0 + } + // // Compile the regular expression + // // Find submatches using the regular expression + + expected := map[string]interface{}{} + actual := map[string]interface{}{} + + err = bson.UnmarshalExtJSON([]byte(expectedMsgsStr), true, &expected) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the section of recorded request to bson document") + return 0 + } + err = bson.UnmarshalExtJSON([]byte(actualMsgsStr), true, &actual) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the section of incoming request to bson document") + return 0 + } + logger.Debug("the expected and actual msg in the single section.", zap.Any("expected", expected), zap.Any("actual", actual), zap.Any("score", calculateMatchingScore(expected, actual))) + return calculateMatchingScore(expected, actual) + + default: + utils.LogError(logger, nil, "failed to detect the OpMsg section into mongo request wiremessage due to invalid format") + return 0 + } +} + +func calculateMatchingScore(obj1, obj2 map[string]interface{}) float64 { + totalFields := len(obj2) + matchingFields := 0.0 + + for key, value := range obj2 { + if obj1Value, ok := obj1[key]; ok { + if reflect.DeepEqual(value, obj1Value) { + matchingFields++ + } else if reflect.TypeOf(value) == reflect.TypeOf(obj1Value) { + if isNestedMap(value) { + if isNestedMap(obj1Value) { + matchingFields += calculateMatchingScore(obj1Value.(map[string]interface{}), value.(map[string]interface{})) + } + } else if isSlice(value) { + if isSlice(obj1Value) { + matchingFields += calculateMatchingScoreForSlices(obj1Value.([]interface{}), value.([]interface{})) + } + } + } + } + } + + return float64(matchingFields) / float64(totalFields) +} + +func calculateMatchingScoreForSlices(slice1, slice2 []interface{}) float64 { + matchingCount := 0 + + if len(slice1) == len(slice2) { + for indx2, item2 := range slice2 { + if len(slice1) > indx2 && reflect.DeepEqual(item2, slice1[indx2]) { + matchingCount++ + } + } + } + + return float64(matchingCount) / float64(len(slice2)) +} + +func isNestedMap(value interface{}) bool { + _, ok := value.(map[string]interface{}) + return ok +} + +func isSlice(value interface{}) bool { + _, ok := value.([]interface{}) + return ok +} diff --git a/pkg/core/proxy/integrations/mongo/mongo.go b/pkg/core/proxy/integrations/mongo/mongo.go new file mode 100644 index 000000000..5301234a2 --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/mongo.go @@ -0,0 +1,133 @@ +package mongo + +import ( + "context" + "encoding/binary" + "net" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/utils" + + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage" + "go.uber.org/zap" +) + +func init() { + integrations.Register("mongo", NewMongo) +} + +// TODO: Remove these global variables, and find a better way to handle this +var configRequests = []string{""} + +type Mongo struct { + logger *zap.Logger +} + +func NewMongo(logger *zap.Logger) integrations.Integrations { + return &Mongo{ + logger: logger, + } +} + +// MatchType determines if the outgoing network call is Mongo by comparing the +// message format with that of a mongo wire message. +func (m *Mongo) MatchType(_ context.Context, buffer []byte) bool { + if len(buffer) < 4 { + return false + } + messageLength := binary.LittleEndian.Uint32(buffer[0:4]) + return int(messageLength) == len(buffer) +} + +func (m *Mongo) RecordOutgoing(ctx context.Context, src net.Conn, dst net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + logger := m.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", ctx.Value(models.ClientConnectionIDKey).(string)), zap.Any("Destination ConnectionID", ctx.Value(models.DestConnectionIDKey).(string))) + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial mongo message") + return err + } + + err = encodeMongo(ctx, logger, reqBuf, src, dst, mocks, opts) + if err != nil { + utils.LogError(logger, err, "failed to encode the mongo message into the yaml") + return err + } + return nil +} + +func (m *Mongo) MockOutgoing(ctx context.Context, src net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + logger := m.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", util.GetNextID()), zap.Any("Destination ConnectionID", util.GetNextID())) + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial mongo message") + return err + } + + err = decodeMongo(ctx, logger, reqBuf, src, dstCfg, mockDb, opts) + if err != nil { + utils.LogError(logger, err, "failed to decode the mongo message") + return err + } + return nil +} + +func recordMessage(_ context.Context, logger *zap.Logger, mongoRequests []models.MongoRequest, mongoResponses []models.MongoResponse, opReq Operation, reqTimestampMock time.Time, mocks chan<- *models.Mock) { + // capture if the wiremessage is a mongo operation call + + shouldRecordCalls := true + name := "mocks" + meta1 := map[string]string{ + "operation": opReq.String(), + } + + // Skip heartbeat from capturing in the global set of mocks. Since, the heartbeat packet always contain the "hello" boolean. + // See: https://github.com/mongodb/mongo-go-driver/blob/8489898c64a2d8c2e2160006eb851a11a9db9e9d/x/mongo/driver/operation/hello.go#L503 + if isHeartBeat(logger, opReq, *mongoRequests[0].Header, mongoRequests[0].Message) { + meta1["type"] = "config" + for _, v := range configRequests { + for _, req := range mongoRequests { + + switch req.Header.Opcode { + case wiremessage.OpQuery: + if req.Message.(*models.MongoOpQuery).Query == v { + shouldRecordCalls = false + break + } + configRequests = append(configRequests, req.Message.(*models.MongoOpQuery).Query) + case wiremessage.OpMsg: + if len(req.Message.(*models.MongoOpMessage).Sections) > 0 && req.Message.(*models.MongoOpMessage).Sections[0] == v { + shouldRecordCalls = false + break + } + configRequests = append(configRequests, req.Message.(*models.MongoOpMessage).Sections[0]) + default: + if opReq.String() == v { + shouldRecordCalls = false + break + } + configRequests = append(configRequests, opReq.String()) + } + } + } + } + if shouldRecordCalls { + mongoMock := &models.Mock{ + Version: models.GetVersion(), + Kind: models.Mongo, + Name: name, + Spec: models.MockSpec{ + Metadata: meta1, + MongoRequests: mongoRequests, + MongoResponses: mongoResponses, + Created: time.Now().Unix(), + ReqTimestampMock: reqTimestampMock, + ResTimestampMock: time.Now(), + }, + } + // Save the mock + mocks <- mongoMock + } +} diff --git a/pkg/core/proxy/integrations/mongo/operation.go b/pkg/core/proxy/integrations/mongo/operation.go new file mode 100644 index 000000000..2516e5615 --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/operation.go @@ -0,0 +1,1307 @@ +package mongo + +import ( + "encoding/json" + "errors" + "fmt" + "regexp" + "strconv" + "strings" + "time" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/x/bsonx/bsoncore" + "go.mongodb.org/mongo-driver/x/mongo/driver" + "go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage" + "go.uber.org/zap" +) + +type Message struct { + Wm []byte + Op Operation +} + +type TransactionDetails struct { + LsID []byte + TxnNumber int64 + IsStartTransaction bool +} + +type Operation interface { + fmt.Stringer + OpCode() wiremessage.OpCode + Encode(responseTo, requestID int32) []byte + IsIsMaster() bool + IsIsAdminDB() bool + CursorID() (cursorID int64, ok bool) + RequestID() int32 + Error() error + Unacknowledged() bool + CommandAndCollection() (Command, string) + TransactionDetails() *TransactionDetails +} + +// var lOgger *zap.Logger + +// see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation.go#L1361-L1426 + +// Decode (wm []byte) (Operation, int32, int32, int32, int32, error) { +func Decode(wm []byte, logger *zap.Logger) (Operation, models.MongoHeader, interface{}, error) { + wmLength := len(wm) + length, reqID, responseTo, opCode, wmBody, ok := wiremessage.ReadHeader(wm) + messageHeader := models.MongoHeader{ + Length: length, + RequestID: reqID, + ResponseTo: responseTo, + Opcode: wiremessage.OpCode(opCode), + } + logger.Debug(fmt.Sprintf("the mongo msg header: %v", messageHeader)) + if !ok || int(length) > wmLength { + return nil, messageHeader, &models.MongoOpMessage{}, errors.New("malformed wire message: insufficient bytes") + } + + var ( + op Operation + err error + mongoMsg interface{} + ) + // var err error + switch opCode { + case wiremessage.OpQuery: + op, err = decodeQuery(reqID, wmBody) + if err != nil { + return nil, messageHeader, mongoMsg, err + } + jsonBytes, err := bson.MarshalExtJSON(op.(*opQuery).query, true, false) + if err != nil { + return nil, messageHeader, &models.MongoOpMessage{}, fmt.Errorf("malformed bson document: %v", err.Error()) + } + jsonString := string(jsonBytes) + + mongoMsg = &models.MongoOpQuery{ + Flags: int32(op.(*opQuery).flags), + FullCollectionName: op.(*opQuery).fullCollectionName, + NumberToSkip: op.(*opQuery).numberToSkip, + NumberToReturn: op.(*opQuery).numberToReturn, + Query: jsonString, + ReturnFieldsSelector: op.(*opQuery).returnFieldsSelector.String(), + } + case wiremessage.OpMsg: + + op, err = decodeMsg(reqID, wmBody, logger) + if err != nil { + return nil, messageHeader, mongoMsg, err + } + var sections []string + for _, section := range op.(*opMsg).sections { + sections = append(sections, section.String()) + } + mongoMsg = &models.MongoOpMessage{ + FlagBits: int(op.(*opMsg).flags), + Sections: sections, + Checksum: int(op.(*opMsg).checksum), + } + case wiremessage.OpReply: + op, err = decodeReply(reqID, wmBody) + if err != nil { + return nil, messageHeader, mongoMsg, err + } + var replyDocs []string + for _, v := range op.(*opReply).documents { + jsonBytes, err := bson.MarshalExtJSON(v, true, false) + if err != nil { + return nil, messageHeader, &models.MongoOpMessage{}, fmt.Errorf("malformed bson document: %v", err.Error()) + } + jsonString := string(jsonBytes) + replyDocs = append(replyDocs, jsonString) + } + mongoMsg = &models.MongoOpReply{ + ResponseFlags: int32(op.(*opReply).flags), + CursorID: op.(*opReply).cursorID, + StartingFrom: op.(*opReply).startingFrom, + NumberReturned: op.(*opReply).numReturned, + Documents: replyDocs, + } + default: + op = &opUnknown{ + opCode: opCode, + reqID: reqID, + wm: wm, + } + } + if err != nil { + return nil, messageHeader, mongoMsg, err + } + logger.Debug(fmt.Sprintf("the decoded string for the wiremessage: %v", op.String())) + return op, messageHeader, mongoMsg, nil +} + +type opUnknown struct { + opCode wiremessage.OpCode + reqID int32 + wm []byte +} + +func (o *opUnknown) IsIsAdminDB() bool { + return false +} + +func (o *opUnknown) TransactionDetails() *TransactionDetails { + return nil +} + +func (o *opUnknown) OpCode() wiremessage.OpCode { + return o.opCode +} + +func (o *opUnknown) Encode(_, _ int32) []byte { + return o.wm +} + +func (o *opUnknown) IsIsMaster() bool { + return false +} + +func (o *opUnknown) CursorID() (cursorID int64, ok bool) { + return 0, false +} + +func (o *opUnknown) RequestID() int32 { + return o.reqID +} + +func (o *opUnknown) Error() error { + return nil +} + +func (o *opUnknown) Unacknowledged() bool { + return false +} + +func (o *opUnknown) CommandAndCollection() (Command, string) { + return Unknown, "" +} + +func (o *opUnknown) String() string { + return fmt.Sprintf("{ OpUnknown opCode: %d, wm: %s }", o.opCode, o.wm) +} + +// https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#wire-op-query +type opQuery struct { + reqID int32 + flags wiremessage.QueryFlag + fullCollectionName string + numberToSkip int32 + numberToReturn int32 + query bsoncore.Document + returnFieldsSelector bsoncore.Document +} + +func (opQuery) IsIsAdminDB() bool { + return false +} + +func (q *opQuery) TransactionDetails() *TransactionDetails { + return nil +} + +// see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/topology/server_test.go#L968-L1003 +func decodeQuery(reqID int32, wm []byte) (*opQuery, error) { + var ok bool + q := opQuery{ + reqID: reqID, + } + + q.flags, wm, ok = wiremessage.ReadQueryFlags(wm) + if !ok { + return nil, errors.New("malformed query message: missing OP_QUERY flags") + } + + q.fullCollectionName, wm, ok = wiremessage.ReadQueryFullCollectionName(wm) + if !ok { + return nil, errors.New("malformed query message: full collection name") + } + + q.numberToSkip, wm, ok = wiremessage.ReadQueryNumberToSkip(wm) + if !ok { + return nil, errors.New("malformed query message: number to skip") + } + + q.numberToReturn, wm, ok = wiremessage.ReadQueryNumberToReturn(wm) + if !ok { + return nil, errors.New("malformed query message: number to return") + } + + q.query, wm, ok = wiremessage.ReadQueryQuery(wm) + if !ok { + return nil, errors.New("malformed query message: query document") + } + + if len(wm) > 0 { + q.returnFieldsSelector, _, ok = wiremessage.ReadQueryReturnFieldsSelector(wm) + if !ok { + return nil, errors.New("malformed query message: return fields selector") + } + } + + return &q, nil +} + +func (q *opQuery) OpCode() wiremessage.OpCode { + return wiremessage.OpQuery +} + +// see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation_legacy.go#L179-L189 +func (q *opQuery) Encode(responseTo, _ int32) []byte { + var buffer []byte + idx, buffer := wiremessage.AppendHeaderStart(buffer, 0, responseTo, wiremessage.OpQuery) + buffer = wiremessage.AppendQueryFlags(buffer, q.flags) + buffer = wiremessage.AppendQueryFullCollectionName(buffer, q.fullCollectionName) + buffer = wiremessage.AppendQueryNumberToSkip(buffer, q.numberToSkip) + buffer = wiremessage.AppendQueryNumberToReturn(buffer, q.numberToReturn) + buffer = append(buffer, q.query...) + if len(q.returnFieldsSelector) != 0 { + // returnFieldsSelector is optional + buffer = append(buffer, q.returnFieldsSelector...) + } + buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) + return buffer +} + +func (q *opQuery) CursorID() (cursorID int64, ok bool) { + return q.query.Lookup("getMore").Int64OK() +} + +func (q *opQuery) RequestID() int32 { + return q.reqID +} + +func (q *opQuery) IsIsMaster() bool { + if q.fullCollectionName != "admin.$cmd" { + return false + } + return IsIsMasterDoc(q.query) +} + +func (q *opQuery) Error() error { + return nil +} + +func (q *opQuery) Unacknowledged() bool { + return false +} + +func (q *opQuery) CommandAndCollection() (Command, string) { + return Find, q.fullCollectionName +} + +func (q *opQuery) String() string { + return fmt.Sprintf("{ OpQuery flags: %s, fullCollectionName: %s, numberToSkip: %d, numberToReturn: %d, query: %s, returnFieldsSelector: %s }", q.flags.String(), q.fullCollectionName, q.numberToSkip, q.numberToReturn, q.query.String(), q.returnFieldsSelector.String()) +} + +// https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#op-msg +type opMsg struct { + reqID int32 + flags wiremessage.MsgFlag + sections []opMsgSection + checksum uint32 + logger *zap.Logger +} + +type opMsgSection interface { + fmt.Stringer + cursorID() (cursorID int64, ok bool) + isIsMaster() bool + isDbAdmin() bool + append(buffer []byte) []byte + commandAndCollection() (Command, string) +} + +type opMsgSectionSingle struct { + msg bsoncore.Document +} + +func (o *opMsgSectionSingle) cursorID() (cursorID int64, ok bool) { + if getMore, ok := o.msg.Lookup("getMore").Int64OK(); ok { + return getMore, ok + } + return o.msg.Lookup("cursor", "id").Int64OK() +} + +func (o *opMsgSectionSingle) isIsMaster() bool { + if db, ok := o.msg.Lookup("$db").StringValueOK(); ok && db == "admin" { + return IsIsMasterDoc(o.msg) + } + return false +} + +func (o *opMsgSectionSingle) isDbAdmin() bool { + if db, ok := o.msg.Lookup("$db").StringValueOK(); ok && db == "admin" { + return true + } + return false +} + +func (o *opMsgSectionSingle) append(buffer []byte) []byte { + buffer = wiremessage.AppendMsgSectionType(buffer, wiremessage.SingleDocument) + return append(buffer, o.msg...) +} + +func (o *opMsgSectionSingle) commandAndCollection() (Command, string) { + return CommandAndCollection(o.msg) +} + +func (o *opMsgSectionSingle) String() string { + jsonBytes, err := bson.MarshalExtJSON(o.msg, true, false) + if err != nil { + return "" + } + jsonString := string(jsonBytes) + + return fmt.Sprintf("{ SectionSingle msg: %s }", jsonString) +} + +type opMsgSectionSequence struct { + identifier string + msgs []bsoncore.Document +} + +func (o *opMsgSectionSequence) cursorID() (cursorID int64, ok bool) { + // assume no cursor IDs are returned in OP_MSG document sequences + return 0, false +} + +func (o *opMsgSectionSequence) isIsMaster() bool { + return false +} +func (o *opMsgSectionSequence) isDbAdmin() bool { + res := true + for _, v := range o.msgs { + if db, ok := v.Lookup("$db").StringValueOK(); !ok || db != "admin" { + res = false + break + } + } + return res +} + +func (o *opMsgSectionSequence) append(buffer []byte) []byte { + buffer = wiremessage.AppendMsgSectionType(buffer, wiremessage.DocumentSequence) + + length := int32(len(o.identifier) + 5) + for _, msg := range o.msgs { + length += int32(len(msg)) + } + + buffer = appendi32(buffer, length) + buffer = appendCString(buffer, o.identifier) + for _, msg := range o.msgs { + buffer = append(buffer, msg...) + } + + return buffer +} + +func (o *opMsgSectionSequence) commandAndCollection() (Command, string) { + return Unknown, "" +} + +func (o *opMsgSectionSequence) String() string { + var msgs []string + for _, msg := range o.msgs { + jsonBytes, err := bson.MarshalExtJSON(msg, true, false) + if err != nil { + return "" + } + jsonString := string(jsonBytes) + msgs = append(msgs, jsonString) + } + return fmt.Sprintf("{ SectionSingle identifier: %s , msgs: [ %s ] }", o.identifier, strings.Join(msgs, ", ")) +} + +func decodeOpMsgSectionSequence(section string) (string, string, error) { + var identifier, message = "", "" + + // Define the regular expression pattern + pattern := `\{ SectionSingle identifier: (.+?) , msgs: \[ (.+?) \] \}` + + // Compile the regular expression + regex := regexp.MustCompile(pattern) + + // Find submatches using the regular expression + submatches := regex.FindStringSubmatch(section) + if submatches == nil || len(submatches) != 3 { + return identifier, message, errors.New("invalid format of message section sequence") + } + identifier = submatches[1] + message = submatches[2] + return identifier, message, nil + +} + +func extractSectionSingle(data string) (string, error) { + // Look for the prefix before the actual content + prefix := "{ SectionSingle msg: " + startIndex := strings.Index(data, prefix) + if startIndex == -1 { + return "", fmt.Errorf("start not found") + } + + // Adjust the start index to skip the prefix + startIndex += len(prefix) + + // We'll assume the content ends with " }" that closes the sectionSingle + endIndex := strings.LastIndex(data[startIndex:], " }") + if endIndex == -1 { + return "", fmt.Errorf("end not found") + } + + // Adjust the end index relative to the entire string + endIndex += startIndex + + // Extract the content between the start and end indexes + content := data[startIndex:endIndex] + + // Clean up the extracted content + content = strings.Trim(content, " ") + + return content, nil +} + +func encodeOpMsg(responseOpMsg *models.MongoOpMessage, actualRequestMsgSections []string, expectedRequestMsgSections []string, mongoPassword string, logger *zap.Logger) (*opMsg, error) { + message := &opMsg{ + flags: wiremessage.MsgFlag(responseOpMsg.FlagBits), + checksum: uint32(responseOpMsg.Checksum), + sections: []opMsgSection{}, + logger: logger, + } + for messageIndex, messageValue := range responseOpMsg.Sections { + switch { + case strings.HasPrefix(messageValue, "{ SectionSingle identifier:"): + identifier, msgsStr, err := decodeOpMsgSectionSequence(responseOpMsg.Sections[messageIndex]) + if err != nil { + utils.LogError(logger, err, "failed to extract the msg section from recorded message") + return nil, err + } + msgs := strings.Split(msgsStr, ", ") + docs := []bsoncore.Document{} + for _, msg := range msgs { + var unmarshaledDoc bsoncore.Document + err = bson.UnmarshalExtJSON([]byte(msg), true, &unmarshaledDoc) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the recorded document string of OpMsg") + return nil, err + } + docs = append(docs, unmarshaledDoc) + } + message.sections = append(message.sections, &opMsgSectionSequence{ + identifier: identifier, + msgs: docs, + }) + case strings.HasPrefix(messageValue, "{ SectionSingle msg:"): + sectionStr, err := extractSectionSingle(responseOpMsg.Sections[messageIndex]) + if err != nil { + utils.LogError(logger, err, "failed to extract the msg section from recorded message single section") + return nil, err + } + + resultStr, ok, err := handleScramAuth(actualRequestMsgSections, expectedRequestMsgSections, sectionStr, mongoPassword, logger) + if err != nil { + return nil, err + } + if ok { + logger.Debug("new responses have been generated for the scram authentication", zap.Any("response", resultStr)) + sectionStr = resultStr + } + + var unmarshaledDoc bsoncore.Document + + err = bson.UnmarshalExtJSON([]byte(sectionStr), true, &unmarshaledDoc) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the recorded document string of OpMsg") + return nil, err + } + message.sections = append(message.sections, &opMsgSectionSingle{ + msg: unmarshaledDoc, + }) + default: + utils.LogError(logger, nil, "failed to encode the OpMsg section into mongo wiremessage because of invalid format", zap.Any("section", messageValue)) + } + } + return message, nil +} + +// see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation.go#L1387-L1423 +func decodeMsg(reqID int32, wm []byte, logger *zap.Logger) (*opMsg, error) { + var ok bool + m := opMsg{ + reqID: reqID, + logger: logger, + } + + m.flags, wm, ok = wiremessage.ReadMsgFlags(wm) + if !ok { + return nil, errors.New("malformed wire message: missing OP_MSG flags") + } + + checksumPresent := m.flags&wiremessage.ChecksumPresent == wiremessage.ChecksumPresent + for len(wm) > 0 { + // If the checksumPresent flag is set, the last four bytes of the message contain the checksum. + if checksumPresent && len(wm) == 4 { + m.checksum, wm, ok = wiremessage.ReadMsgChecksum(wm) + if !ok { + return nil, errors.New("malformed wire message: insufficient bytes to read checksum") + } + continue + } + + var stype wiremessage.SectionType + stype, wm, ok = wiremessage.ReadMsgSectionType(wm) + if !ok { + return nil, errors.New("malformed wire message: insufficient bytes to read section type") + } + + switch stype { + case wiremessage.SingleDocument: + s := opMsgSectionSingle{} + s.msg, wm, ok = wiremessage.ReadMsgSectionSingleDocument(wm) + if !ok { + return nil, errors.New("malformed wire message: insufficient bytes to read single document") + } + m.sections = append(m.sections, &s) + case wiremessage.DocumentSequence: + s := opMsgSectionSequence{} + s.identifier, s.msgs, wm, ok = wiremessage.ReadMsgSectionDocumentSequence(wm) + if !ok { + return nil, errors.New("malformed wire message: insufficient bytes to read document sequence") + } + m.sections = append(m.sections, &s) + default: + return nil, fmt.Errorf("malformed wire message: unknown section type %v", stype) + } + } + + return &m, nil +} + +func (m *opMsg) OpCode() wiremessage.OpCode { + return wiremessage.OpMsg +} + +// see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation.go#L898-L904 +func (m *opMsg) Encode(responseTo, requestID int32) []byte { + var buffer []byte + m.logger.Debug(fmt.Sprintf("the responseTo for the OpMsg: %v, for requestId: %v", responseTo, wiremessage.NextRequestID())) + + idx, buffer := wiremessage.AppendHeaderStart(buffer, requestID, responseTo, wiremessage.OpMsg) + buffer = wiremessage.AppendMsgFlags(buffer, m.flags) + for _, section := range m.sections { + buffer = section.append(buffer) + } + if m.flags&wiremessage.ChecksumPresent == wiremessage.ChecksumPresent { + // The checksum is a uint32, but we can use appendi32 to encode it. Overflow/underflow when casting to int32 is + // not a concern here because the bytes in the number do not change after casting. + buffer = appendi32(buffer, int32(m.checksum)) + } + buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) + m.logger.Debug(fmt.Sprintf("opmsg string: %v", m.String())) + return buffer +} + +func (m *opMsg) IsIsMaster() bool { + for _, section := range m.sections { + if section.isIsMaster() { + return true + } + } + return false +} + +func (m *opMsg) IsIsAdminDB() bool { + for _, section := range m.sections { + if section.isDbAdmin() { + return true + } + } + return false +} + +func (m *opMsg) CursorID() (cursorID int64, ok bool) { + for _, section := range m.sections { + if cursorID, ok := section.cursorID(); ok { + return cursorID, ok + } + } + return 0, false +} + +func (m *opMsg) RequestID() int32 { + return m.reqID +} + +func (m *opMsg) Error() error { + if len(m.sections) == 0 { + return nil + } + single, ok := m.sections[0].(*opMsgSectionSingle) + if !ok { + return nil + } + return driver.ExtractErrorFromServerResponse(single.msg) +} + +func (m *opMsg) Unacknowledged() bool { + return m.flags&wiremessage.MoreToCome == wiremessage.MoreToCome +} + +func (m *opMsg) CommandAndCollection() (Command, string) { + for _, section := range m.sections { + command, collection := section.commandAndCollection() + if command != Unknown { + return command, collection + } + } + return Unknown, "" +} + +// TransactionDetails See https://github.com/mongodb/specifications/blob/master/source/transactions/transactions.rst +// Version 4.0 of the server introduces multi-statement transactions. +// opMsg is available from wire protocol 3.6 +// deprecated operations such OP_UPDATE OP_INSERT are not supposed to support transaction statements. +// When constructing any other command within a transaction, drivers MUST add the lsid, txnNumber, and autocommit fields. +func (m *opMsg) TransactionDetails() *TransactionDetails { + + for _, section := range m.sections { + + if single, ok := section.(*opMsgSectionSingle); ok { + _, lsID, ok := single.msg.Lookup("lsid", "id").BinaryOK() + if !ok { + continue + } + + txnNumber, ok := single.msg.Lookup("txnNumber").Int64OK() + if !ok { + continue + } + + _, ok = single.msg.Lookup("autocommit").BooleanOK() + if !ok { + continue + } + + startTransaction, ok := single.msg.Lookup("startTransaction").BooleanOK() + return &TransactionDetails{ + LsID: lsID, + TxnNumber: txnNumber, + IsStartTransaction: ok && startTransaction, + } + } + } + + return nil +} + +func (m *opMsg) GetFlagBits() int32 { + return int32(m.flags) +} + +func (m *opMsg) String() string { + var sections []string + for _, section := range m.sections { + sections = append(sections, section.String()) + } + return fmt.Sprintf("{ OpMsg flags: %d, sections: [%s], checksum: %d }", m.flags, strings.Join(sections, ", "), m.checksum) +} + +// https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#op-reply +type opReply struct { + reqID int32 + flags wiremessage.ReplyFlag + cursorID int64 + startingFrom int32 + numReturned int32 + documents []bsoncore.Document +} + +func (r *opReply) TransactionDetails() *TransactionDetails { + return nil +} + +func encodeOpReply(reply *models.MongoOpReply, logger *zap.Logger) (*opReply, error) { + replyDocs := []bsoncore.Document{} + for _, v := range reply.Documents { + var unmarshaledDoc bsoncore.Document + logger.Debug(fmt.Sprintf("the document string is: %v", string(v))) + var result map[string]interface{} + + err := json.Unmarshal([]byte(v), &result) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal string document of OpReply") + return nil, err + } + // set the fields for handshake calls at test mode + result["localTime"].(map[string]interface{})["$date"].(map[string]interface{})["$numberLong"] = strconv.FormatInt(time.Now().Unix(), 10) + + v, err := json.Marshal(result) + if err != nil { + utils.LogError(logger, err, "failed to marshal the updated string document of OpReply") + return nil, err + } + logger.Debug(fmt.Sprintf("the updated document string is: %v", result["localTime"].(map[string]interface{})["$date"].(map[string]interface{})["$numberLong"])) + + err = bson.UnmarshalExtJSON([]byte(v), false, &unmarshaledDoc) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal the updated document string of OpReply") + return nil, err + } + elements, _ := unmarshaledDoc.Elements() + logger.Debug(fmt.Sprintf("the elements of the reply docs: %v", elements)) + replyDocs = append(replyDocs, unmarshaledDoc) + + } + return &opReply{ + flags: wiremessage.ReplyFlag(reply.ResponseFlags), + cursorID: reply.CursorID, + startingFrom: reply.StartingFrom, + numReturned: reply.NumberReturned, + documents: replyDocs, + }, nil +} + +// see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation.go#L1297-L1358 +func decodeReply(reqID int32, wm []byte) (*opReply, error) { + var ok bool + r := opReply{ + reqID: reqID, + } + + r.flags, wm, ok = wiremessage.ReadReplyFlags(wm) + if !ok { + return nil, errors.New("malformed reply message: missing OP_REPLY flags") + } + + r.cursorID, wm, ok = wiremessage.ReadReplyCursorID(wm) + if !ok { + return nil, errors.New("malformed reply message: cursor id") + } + + r.startingFrom, wm, ok = wiremessage.ReadReplyStartingFrom(wm) + if !ok { + return nil, errors.New("malformed reply message: starting from") + } + + r.numReturned, wm, ok = wiremessage.ReadReplyNumberReturned(wm) + if !ok { + return nil, errors.New("malformed reply message: number returned") + } + + r.documents, _, ok = wiremessage.ReadReplyDocuments(wm) + if !ok { + return nil, errors.New("malformed reply message: could not read documents from reply") + } + + return &r, nil +} + +func (r *opReply) OpCode() wiremessage.OpCode { + return wiremessage.OpReply +} + +// see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/drivertest/channel_conn.go#L73-L82 +func (r *opReply) Encode(responseTo, requestID int32) []byte { + var buffer []byte + idx, buffer := wiremessage.AppendHeaderStart(buffer, requestID, responseTo, wiremessage.OpReply) + buffer = wiremessage.AppendReplyFlags(buffer, r.flags) + buffer = wiremessage.AppendReplyCursorID(buffer, r.cursorID) + buffer = wiremessage.AppendReplyStartingFrom(buffer, r.startingFrom) + buffer = wiremessage.AppendReplyNumberReturned(buffer, r.numReturned) + for _, doc := range r.documents { + buffer = append(buffer, doc...) + } + buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) + return buffer +} + +func (r *opReply) IsIsMaster() bool { + return false +} + +func (r *opReply) IsIsAdminDB() bool { + return false +} + +func (r *opReply) CursorID() (cursorID int64, ok bool) { + return r.cursorID, true +} + +func (r *opReply) RequestID() int32 { + return r.reqID +} + +func (r *opReply) Error() error { + if len(r.documents) == 0 { + return nil + } + return driver.ExtractErrorFromServerResponse(r.documents[0]) +} + +func (r *opReply) Unacknowledged() bool { + return false +} + +func (r *opReply) CommandAndCollection() (Command, string) { + return Find, "" +} + +func (r *opReply) String() string { + var documents []string + for _, document := range r.documents { + documents = append(documents, document.String()) + } + return fmt.Sprintf("{ OpReply flags: %d, cursorID: %d, startingFrom: %d, numReturned: %d, documents: [%s] }", r.flags, r.cursorID, r.startingFrom, r.numReturned, strings.Join(documents, ", ")) +} + +// https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#op-get-more +// type opGetMore struct { +// reqID int32 +// fullCollectionName string +// numberToReturn int32 +// cursorID int64 +// } + +// func (g *opGetMore) TransactionDetails() *TransactionDetails { +// return nil +// } + +// // see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation.go#L1297-L1358 +// func decodeGetMore(reqID int32, wm []byte) (*opGetMore, error) { +// var ok bool +// g := opGetMore{ +// reqID: reqID, +// } + +// // the driver doesn't support any ReadGetMore* methods, so reuse methods from other operations + +// _, wm, ok = wiremessage.ReadKillCursorsZero(wm) +// if !ok { +// return nil, errors.New("malformed get_more message: missing zero") +// } + +// g.fullCollectionName, wm, ok = wiremessage.ReadQueryFullCollectionName(wm) +// if !ok { +// return nil, errors.New("malformed get_more message: missing full collection name") +// } + +// g.numberToReturn, wm, ok = wiremessage.ReadQueryNumberToReturn(wm) +// if !ok { +// return nil, errors.New("malformed get_more message: missing number to return") +// } + +// g.cursorID, _, ok = wiremessage.ReadReplyCursorID(wm) +// if !ok { +// return nil, errors.New("malformed get_more message: missing cursorID") +// } + +// return &g, nil +// } + +// func (g *opGetMore) OpCode() wiremessage.OpCode { +// return wiremessage.OpGetMore +// } + +// // see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation_legacy.go#L284-L291 +// func (g *opGetMore) Encode(responseTo, requestId int32) []byte { +// var buffer []byte +// idx, buffer := wiremessage.AppendHeaderStart(buffer, 0, responseTo, wiremessage.OpGetMore) +// buffer = wiremessage.AppendGetMoreZero(buffer) +// buffer = wiremessage.AppendGetMoreFullCollectionName(buffer, g.fullCollectionName) +// buffer = wiremessage.AppendGetMoreNumberToReturn(buffer, g.numberToReturn) +// buffer = wiremessage.AppendGetMoreCursorID(buffer, g.cursorID) +// buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) +// return buffer +// } + +// func (g *opGetMore) IsIsMaster() bool { +// return false +// } + +// func (g *opGetMore) CursorID() (cursorID int64, ok bool) { +// return g.cursorID, true +// } + +// func (g *opGetMore) RequestID() int32 { +// return g.reqID +// } + +// func (g *opGetMore) Error() error { +// return nil +// } + +// func (g *opGetMore) Unacknowledged() bool { +// return false +// } + +// func (g *opGetMore) CommandAndCollection() (Command, string) { +// return GetMore, g.fullCollectionName +// } + +// func (g *opGetMore) String() string { +// return fmt.Sprintf("{ OpGetMore fullCollectionName: %s, numberToReturn: %d, cursorID: %d }", g.fullCollectionName, g.numberToReturn, g.cursorID) +// } + +// // https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#op_update +// type opUpdate struct { +// reqID int32 +// fullCollectionName string +// flags int32 +// selector bsoncore.Document +// tools bsoncore.Document +// } + +// func (u *opUpdate) TransactionDetails() *TransactionDetails { +// return nil +// } + +// func decodeUpdate(reqID int32, wm []byte) (*opUpdate, error) { +// var ok bool +// u := opUpdate{ +// reqID: reqID, +// } + +// u.fullCollectionName, wm, ok = readCString(wm) +// if !ok { +// return nil, errors.New("malformed tools message: full collection name") +// } + +// u.flags, wm, ok = readi32(wm) +// if !ok { +// return nil, errors.New("malformed tools message: missing OP_UPDATE flags") +// } + +// u.selector, wm, ok = bsoncore.ReadDocument(wm) +// if !ok { +// return nil, errors.New("malformed tools message: selector document") +// } + +// u.tools, _, ok = bsoncore.ReadDocument(wm) +// if !ok { +// return nil, errors.New("malformed tools message: tools document") +// } + +// return &u, nil +// } + +// func (u *opUpdate) OpCode() wiremessage.OpCode { +// return wiremessage.OpUpdate +// } + +// func (u *opUpdate) Encode(responseTo, requestId int32) []byte { +// var buffer []byte +// idx, buffer := wiremessage.AppendHeaderStart(buffer, 0, responseTo, wiremessage.OpUpdate) +// buffer = appendCString(buffer, u.fullCollectionName) +// buffer = appendi32(buffer, u.flags) +// buffer = append(buffer, u.selector...) +// buffer = append(buffer, u.tools...) +// buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) +// return buffer +// } + +// func (u *opUpdate) IsIsMaster() bool { +// return false +// } + +// func (u *opUpdate) CursorID() (cursorID int64, ok bool) { +// return 0, false +// } + +// func (u *opUpdate) RequestID() int32 { +// return u.reqID +// } + +// func (u *opUpdate) Error() error { +// return nil +// } + +// func (u *opUpdate) Unacknowledged() bool { +// return false +// } + +// func (u *opUpdate) CommandAndCollection() (Command, string) { +// return Update, u.fullCollectionName +// } + +// func (u *opUpdate) String() string { +// return fmt.Sprintf("{ OpQuery fullCollectionName: %s, flags: %d, selector: %s, tools: %s }", u.fullCollectionName, u.flags, u.selector.String(), u.tools.String()) +// } + +// // https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#op_insert +// type opInsert struct { +// reqID int32 +// flags int32 +// fullCollectionName string +// documents []bsoncore.Document +// } + +// func (i *opInsert) TransactionDetails() *TransactionDetails { +// return nil +// } + +// func decodeInsert(reqID int32, wm []byte) (*opInsert, error) { +// var ok bool +// i := opInsert{ +// reqID: reqID, +// } + +// i.flags, wm, ok = readi32(wm) +// if !ok { +// return nil, errors.New("malformed insert message: missing OP_INSERT flags") +// } + +// i.fullCollectionName, wm, ok = readCString(wm) +// if !ok { +// return nil, errors.New("malformed insert message: full collection name") +// } + +// i.documents, _, ok = wiremessage.ReadReplyDocuments(wm) +// if !ok { +// return nil, errors.New("malformed insert message: could not read documents") +// } + +// return &i, nil +// } + +// func (i *opInsert) OpCode() wiremessage.OpCode { +// return wiremessage.OpInsert +// } + +// func (i *opInsert) Encode(responseTo, requestId int32) []byte { +// var buffer []byte +// idx, buffer := wiremessage.AppendHeaderStart(buffer, 0, responseTo, wiremessage.OpInsert) +// buffer = appendi32(buffer, i.flags) +// buffer = appendCString(buffer, i.fullCollectionName) +// for _, doc := range i.documents { +// buffer = append(buffer, doc...) +// } +// buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) +// return buffer +// } + +// func (i *opInsert) IsIsMaster() bool { +// return false +// } + +// func (i *opInsert) CursorID() (cursorID int64, ok bool) { +// return 0, false +// } + +// func (i *opInsert) RequestID() int32 { +// return i.reqID +// } + +// func (i *opInsert) Error() error { +// return nil +// } + +// func (i *opInsert) Unacknowledged() bool { +// return false +// } + +// func (i *opInsert) CommandAndCollection() (Command, string) { +// return Insert, i.fullCollectionName +// } + +// func (i *opInsert) String() string { +// var documents []string +// for _, document := range i.documents { +// documents = append(documents, document.String()) +// } +// return fmt.Sprintf("{ OpInsert flags: %d, fullCollectionName: %s, documents: %s }", i.flags, i.fullCollectionName, strings.Join(documents, ", ")) +// } + +// // https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#op_insert +// type opDelete struct { +// reqID int32 +// fullCollectionName string +// flags int32 +// selector bsoncore.Document +// } + +// func (d *opDelete) TransactionDetails() *TransactionDetails { +// return nil +// } + +// func decodeDelete(reqID int32, wm []byte) (*opDelete, error) { +// var ok bool +// d := opDelete{ +// reqID: reqID, +// } + +// _, wm, ok = readi32(wm) +// if !ok { +// return nil, errors.New("malformed delete message: missing zero") +// } + +// d.fullCollectionName, wm, ok = readCString(wm) +// if !ok { +// return nil, errors.New("malformed delete message: full collection name") +// } + +// d.flags, wm, ok = readi32(wm) +// if !ok { +// return nil, errors.New("malformed delete message: missing OP_DELETE flags") +// } + +// d.selector, _, ok = bsoncore.ReadDocument(wm) +// if !ok { +// return nil, errors.New("malformed delete message: selector document") +// } + +// return &d, nil +// } + +// func (d *opDelete) OpCode() wiremessage.OpCode { +// return wiremessage.OpDelete +// } + +// func (d *opDelete) Encode(responseTo, requestId int32) []byte { +// var buffer []byte +// idx, buffer := wiremessage.AppendHeaderStart(buffer, 0, responseTo, wiremessage.OpDelete) +// buffer = appendCString(buffer, d.fullCollectionName) +// buffer = appendi32(buffer, d.flags) +// buffer = append(buffer, d.selector...) +// buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) +// return buffer +// } + +// func (d *opDelete) IsIsMaster() bool { +// return false +// } + +// func (d *opDelete) CursorID() (cursorID int64, ok bool) { +// return 0, false +// } + +// func (d *opDelete) RequestID() int32 { +// return d.reqID +// } + +// func (d *opDelete) Error() error { +// return nil +// } + +// func (d *opDelete) Unacknowledged() bool { +// return false +// } + +// func (d *opDelete) CommandAndCollection() (Command, string) { +// return Delete, d.fullCollectionName +// } + +// func (d *opDelete) String() string { +// return fmt.Sprintf("{ OpDelete fullCollectionName: %s, flags: %d, selector: %s }", d.fullCollectionName, d.flags, d.selector.String()) +// } + +// // https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#op_kill_cursors +// type opKillCursors struct { +// reqID int32 +// cursorIDs []int64 +// } + +// func (k *opKillCursors) TransactionDetails() *TransactionDetails { +// return nil +// } + +// func decodeKillCursors(reqID int32, wm []byte) (*opKillCursors, error) { +// var ok bool +// k := opKillCursors{ +// reqID: reqID, +// } + +// _, wm, ok = wiremessage.ReadKillCursorsZero(wm) +// if !ok { +// return nil, errors.New("malformed kill_cursors message: missing zero") +// } + +// var numIDs int32 +// numIDs, wm, ok = wiremessage.ReadKillCursorsNumberIDs(wm) +// if !ok { +// return nil, errors.New("malformed kill_cursors message: missing number of cursor IDs") +// } + +// k.cursorIDs, _, ok = wiremessage.ReadKillCursorsCursorIDs(wm, numIDs) +// if !ok { +// return nil, errors.New("malformed kill_cursors message: missing cursor IDs") +// } + +// return &k, nil +// } + +// func (k *opKillCursors) OpCode() wiremessage.OpCode { +// return wiremessage.OpKillCursors +// } + +// // see https://github.com/mongodb/mongo-go-driver/blob/v1.7.2/x/mongo/driver/operation_legacy.go#L378-L384 +// func (k *opKillCursors) Encode(responseTo, requestId int32) []byte { +// var buffer []byte +// idx, buffer := wiremessage.AppendHeaderStart(buffer, 0, responseTo, wiremessage.OpKillCursors) +// buffer = wiremessage.AppendKillCursorsZero(buffer) +// buffer = wiremessage.AppendKillCursorsNumberIDs(buffer, int32(len(k.cursorIDs))) +// buffer = wiremessage.AppendKillCursorsCursorIDs(buffer, k.cursorIDs) +// buffer = bsoncore.UpdateLength(buffer, idx, int32(len(buffer[idx:]))) +// return buffer +// } + +// func (k *opKillCursors) IsIsMaster() bool { +// return false +// } + +// func (k *opKillCursors) CursorID() (cursorID int64, ok bool) { +// return 0, false +// } + +// func (k *opKillCursors) RequestID() int32 { +// return k.reqID +// } + +// func (k *opKillCursors) Error() error { +// return nil +// } + +// func (k *opKillCursors) Unacknowledged() bool { +// return false +// } + +// func (k *opKillCursors) CommandAndCollection() (Command, string) { +// return Unknown, "" +// } + +// func (k *opKillCursors) String() string { +// return fmt.Sprintf("{ OpKillCursors cursorIDs: %v }", k.cursorIDs) +// } + +func appendi32(dst []byte, i32 int32) []byte { + return append(dst, byte(i32), byte(i32>>8), byte(i32>>16), byte(i32>>24)) +} + +func appendCString(b []byte, str string) []byte { + b = append(b, str...) + return append(b, 0x00) +} + +// func readi32(src []byte) (int32, []byte, bool) { +// if len(src) < 4 { +// return 0, src, false +// } + +// return int32(src[0]) | int32(src[1])<<8 | int32(src[2])<<16 | int32(src[3])<<24, src[4:], true +// } + +// func readCString(src []byte) (string, []byte, bool) { +// idx := bytes.IndexByte(src, 0x00) +// if idx < 0 { +// return "", src, false +// } +// return string(src[:idx]), src[idx+1:], true +// } diff --git a/pkg/core/proxy/integrations/mongo/scramAuth.go b/pkg/core/proxy/integrations/mongo/scramAuth.go new file mode 100644 index 000000000..8b2c82e1d --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/scramAuth.go @@ -0,0 +1,452 @@ +package mongo + +import ( + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "strconv" + "strings" + "sync" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations/scram" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func isScramAuthRequest(actualRequestSections []string, logger *zap.Logger) bool { + // Iterate over each section in the actual request sections + for _, v := range actualRequestSections { + // Extract the message from the section + actualMsg, err := extractMsgFromSection(v) + if err != nil { + utils.LogError(logger, err, "failed to extract the section of the recieved mongo request message", zap.Any("the section", v)) + return false + } + + conversationID, _ := extractConversationID(actualMsg) + // Check if the message is for starting the SASL (authentication) process + if _, exists := actualMsg["saslStart"]; exists { + logger.Debug("the recieved request is saslStart", + zap.Any("OpMsg", actualMsg), + zap.Any("conversationId", conversationID)) + return true + // Check if the message is for final request of the SASL (authentication) process + } else if _, exists := actualMsg["saslContinue"]; exists { + logger.Debug("the recieved request is saslContinue", + zap.Any("OpMsg", actualMsg), + zap.Any("conversationId", conversationID), + ) + return true + } + + } + return false +} + +// authMessageMap stores the auth message from the saslStart request for the converstionIds. So, that +// it can be used in the saslContinue request to generate the new server proof +var authMessageMap = sync.Map{} + +// handleScramAuth handles the SCRAM authentication requests by generating the +// appropriate response string. +// +// Parameters: +// - actualRequestSections: The sections from the recieved request received. +// - expectedRequestSections: The sections that are recorded in the auth request. +// - responseSection: The section to be used for the response. +// - log: The logging instance for recording activities and errors. +// +// Returns: +// - The generated response string. +// - A boolean indicating if the processing was successful. +// - An error, if any, that occurred during processing. +func handleScramAuth(actualRequestSections, expectedRequestSections []string, responseSection, mongoPassword string, logger *zap.Logger) (string, bool, error) { + // Iterate over each section in the actual request sections + for i, v := range actualRequestSections { + // single document do not uses section sequence for SCRAM auth + if !strings.HasPrefix(v, "{ SectionSingle msg:") { + continue + } + + // Extract the message from the section + actualMsg, err := extractMsgFromSection(v) + if err != nil { + utils.LogError(logger, err, "failed to extract the section of the recieved mongo request message") + return "", false, err + } + + // Check if the message is for starting the SASL (authentication) process + if _, exists := actualMsg["saslStart"]; exists { + mechanism, exists := actualMsg["mechanism"] + // Check the authentication mechanism used and ensure it contains "SCRAM" + if mechanism, ok := mechanism.(string); exists && ok && strings.Contains(mechanism, "SCRAM") { + if _, exists := actualMsg["payload"]; exists { + return handleSaslStart(i, actualMsg, expectedRequestSections, responseSection, logger) + } + } + // Check if the message is for final request of the SASL (authentication) process + } else if _, exists := actualMsg["saslContinue"]; exists { + if _, exists := actualMsg["payload"]; exists { + return handleSaslContinue(actualMsg, responseSection, mongoPassword, logger) + } + } + } + return "", false, nil +} + +// extractAuthPayload extracts the base64 authentication payload from a given data structure. +// +// Parameters: +// - data: The interface{} that should represent a nested map with expected keys. +// +// Returns: +// - The extracted base64 string from the nested map structure. +// - An error if the data doesn't have the expected nested structure or if the expected keys are missing. +func extractAuthPayload(data interface{}) (string, error) { + // Top-level map + topMap, ok := data.(map[string]interface{}) + if !ok { + return "", errors.New("expected top-level data to be a map") + } + + // Payload map + payload, ok := topMap["payload"].(map[string]interface{}) + if !ok { + return "", errors.New("expected 'payload' to be a map") + } + + // $binary map + binaryMap, ok := payload["$binary"].(map[string]interface{}) + if !ok { + return "", errors.New("expected '$binary' to be a map") + } + + // Base64 string + base64Str, ok := binaryMap["base64"].(string) + if !ok { + return "", errors.New("expected 'base64' to be a string") + } + + return base64Str, nil +} + +// extractConversationID extracts the 'conversationId' from a given data structure. Example: {"conversationId":{"$numberInt":"113"}} +// +// Parameters: +// - data: The interface{} that should represent a map containing the key 'conversationId'. +// +// Returns: +// - The extracted conversationId as a string. +// - An error if the expected 'conversationId' structure isn't present or if other expected keys are missing. +func extractConversationID(data interface{}) (string, error) { + // Top-level map + topMap, ok := data.(map[string]interface{}) + if !ok { + return "", errors.New("expected top-level data to be a map") + } + + conversationID, exists := topMap["conversationId"] + if !exists { + return "", errors.New("'conversationId' not found") + } + + // conversationId map + conversationIDMap, ok := conversationID.(map[string]interface{}) + if !ok { + return "", errors.New("expected 'conversationId' to be a map") + } + + // Check presence of "$numberInt" + num, exists := conversationIDMap["$numberInt"] + if !exists { + return "", errors.New("'$numberInt' not found") + } + numberIntStr, present := num.(string) + if !present { + return "", errors.New("expected '$numberInt' to be a string") + } + + return numberIntStr, nil +} + +// updateConversationID updates the 'conversationId' in a given data structure. Example: {"conversationId":{"$numberInt":"113"}} +func updateConversationID(actualMsg map[string]interface{}, newConversationID int) (map[string]interface{}, error) { + // Check if conversationID exists and is a map + conversationID, exists := actualMsg["conversationId"] + if !exists { + return actualMsg, errors.New("'conversationId' not found") + } + + conversationIDMap, ok := conversationID.(map[string]interface{}) + if !ok { + return actualMsg, errors.New("expected 'conversationId' to be a map") + } + + // Update the "$numberInt" field with the new value + conversationIDMap["$numberInt"] = fmt.Sprintf("%d", newConversationID) + actualMsg["conversationId"] = conversationIDMap + return actualMsg, nil +} + +// decodeBase64Str is a function variable that wraps the standard Base64 decoding method, +// taking a Base64 encoded string and returning its decoded byte array and any error. +var decodeBase64Str = base64.StdEncoding.DecodeString + +// extractMsgFromSection decodes an OP_MSG section string, and then +// unmarshals the resulting string into a map. +// +// Parameters: +// - section: The OP_MSG section string to decode and unmarshal. +// +// Returns: +// - A map containing the key-value pairs from the unmarshaled section. +// - An error if there's an issue during decoding or unmarshaling. +func extractMsgFromSection(section string) (map[string]interface{}, error) { + var err error + var sectionStr string + var result map[string]interface{} + + if strings.HasPrefix(section, "{ SectionSingle msg:") { + sectionStr, err = extractSectionSingle(section) + if err != nil { + return nil, err + } + err = json.Unmarshal([]byte(sectionStr), &result) + if err != nil { + return nil, err + } + } + + return result, nil +} + +func handleSaslStart(i int, actualMsg map[string]interface{}, expectedRequestSections []string, responseSection string, logger *zap.Logger) (string, bool, error) { + actualReqPayload, err := extractAuthPayload(actualMsg) + if err != nil { + utils.LogError(logger, err, "failed to fetch the payload from the recieved mongo request") + return "", false, err + } + logger.Debug(fmt.Sprint("the payload of the recieved request: ", actualReqPayload)) + + // Decode the base64 encoded payload of the recieved mongo request + decodedActualReqPayload, err := decodeBase64Str(actualReqPayload) + if err != nil { + utils.LogError(logger, err, "Error decoding the recieved payload base64 string") + return "", false, err + } + logger.Debug(fmt.Sprint("the decoded payload of the actual for the saslstart: ", (string)(decodedActualReqPayload))) + + // check to ensure that the matched recorded mongo request contains the auth payload for SCRAM + if len(expectedRequestSections) < i+1 { + err = errors.New("unrecorded message sections for the recieved auth request") + utils.LogError(logger, err, "failed to match the message section payload") + return "", false, err + } + + expectedMsg, err := extractMsgFromSection(expectedRequestSections[i]) + if err != nil { + utils.LogError(logger, err, "failed to extract the section of the recorded mongo request message") + return "", false, err + } + + expectedReqPayload, err := extractAuthPayload(expectedMsg) + if err != nil { + utils.LogError(logger, err, "failed to fetch the payload from the recorded mongo request") + return "", false, err + } + logger.Debug(fmt.Sprint("the payload of the recorded request: ", expectedReqPayload)) + + // Decode the base64 encoded payload of the recorded mongo request + decodedExpectedReqPayload, err := decodeBase64Str(expectedReqPayload) + if err != nil { + utils.LogError(logger, err, "Error decoding the recorded request payload base64 string") + return "", false, err + } + logger.Debug(fmt.Sprint("the decoded payload of the expected for the saslstart: ", (string)(decodedExpectedReqPayload))) + + // the payload of the recorded first response of SCRAM authentication + var responseMsg map[string]interface{} + + err = json.Unmarshal([]byte(responseSection), &responseMsg) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal string document of OpReply") + return "", false, err + } + responsePayload, err := extractAuthPayload(responseMsg) + if err != nil { + utils.LogError(logger, err, "failed to fetch the payload from the recorded mongo response") + return "", false, err + } + logger.Debug(fmt.Sprint("the payload of the recorded response: ", responsePayload)) + + // Decode the base64 encoded payload of the recorded mongo response + decodedResponsePayload, err := decodeBase64Str(responsePayload) + if err != nil { + utils.LogError(logger, err, "Error decoding the recorded response payload base64 string") + return "", false, err + } + logger.Debug(fmt.Sprint("the decoded payload of the repsonse for the saslstart: ", (string)(decodedResponsePayload))) + + // Generate the first response for the saslStart request by + // replacing the old client nonce with new client nonce + newFirstAuthResponse, err := scram.GenerateServerFirstMessage(decodedExpectedReqPayload, decodedActualReqPayload, decodedResponsePayload, logger) + if err != nil { + return "", false, err + } + logger.Debug("after replacing the new client nonce in auth response", zap.String("first response", newFirstAuthResponse)) + // replace the payload with new first response auth + responseMsg["payload"].(map[string]interface{})["$binary"].(map[string]interface{})["base64"] = base64.StdEncoding.EncodeToString([]byte(newFirstAuthResponse)) + responseMsg, err = updateConversationID(responseMsg, int(util.GetNextID())) + if err != nil { + utils.LogError(logger, err, "failed to update the conversationId in the sasl start auth message") + return "", false, err + } + + // fetch the conversation id + conversationID, err := extractConversationID(responseMsg) + if err != nil { + utils.LogError(logger, err, "failed to fetch the conversationId for the SCRAM auth from the recorded first response") + return "", false, err + } + logger.Debug("fetch the conversationId for the SCRAM authentication", zap.String("cid", conversationID)) + // generate the auth message from the recieved first request and recorded first response + authMessage := scram.GenerateAuthMessage(string(decodedActualReqPayload), newFirstAuthResponse, logger) + // store the auth message in the global map for the conversationId + authMessageMap.Store(conversationID, authMessage) + + logger.Debug("genrate the new auth message for the recieved auth request", zap.String("msg", authMessage)) + + // marshal the new first response for the SCRAM authentication + newAuthResponse, err := json.Marshal(responseMsg) + if err != nil { + utils.LogError(logger, err, "failed to marshal the first auth response for SCRAM") + return "", false, err + } + return string(newAuthResponse), true, nil +} + +// handleSaslContinue processes a SASL continuation message, updates the payload with +// the new verifier, which is prepared by the new auth message. +// +// Parameters: +// - actualMsg: The actual message map from the client. +// - responseSection: The section string to be used for the response. +// - log: The logging instance for recording activities and errors. +// +// Returns: +// - The updated response section string. +// - A boolean indicating if the processing was successful. +// - An error, if any, that occurred during processing. +func handleSaslContinue(actualMsg map[string]interface{}, responseSection, mongoPassword string, logger *zap.Logger) (string, bool, error) { + var responseMsg map[string]interface{} + + err := json.Unmarshal([]byte(responseSection), &responseMsg) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal string document of OpReply") + return "", false, err + } + logger.Debug(fmt.Sprintf("the recorded OpMsg section: %v", responseMsg)) + + responsePayload, err := extractAuthPayload(responseMsg) + if err != nil { + utils.LogError(logger, err, "failed to fetch the payload from the recorded mongo response") + return "", false, err + } + logger.Debug(fmt.Sprint("the payload of the recorded second response of SCRAM: ", responsePayload)) + + decodedResponsePayload, err := decodeBase64Str(responsePayload) + if err != nil { + utils.LogError(logger, err, "Error decoding the recorded saslContinue response payload base64 string") + return "", false, err + } + logger.Debug(fmt.Sprint("the decoded payload of the repsonse for the saslContinue: ", (string)(decodedResponsePayload))) + + fields := strings.Split(string(decodedResponsePayload), ",") + verifier, err := parseFieldBase64(fields[0], "v") + if err != nil { + utils.LogError(logger, err, "failed to parse the verifier of final response message") + return "", false, err + } + logger.Debug("the recorded verifier of the auth request", zap.Any("verifier/server-signature", string(verifier))) + + // fetch the conversation id + conversationID, err := extractConversationID(actualMsg) + if err != nil { + utils.LogError(logger, err, "failed to fetch the conversationId for the SCRAM auth from the recieved final response") + return "", false, err + } + logger.Debug("fetched conversationId for the SCRAM authentication", zap.String("cid", conversationID)) + + salt := "" + itr := 0 + // get the authMessage from the saslStart conversation. Since, saslContinue have the same conversationId + // authMsg := authMessageMap[conversationID] + authMessage, ok := authMessageMap.Load(conversationID) + authMessageStr := "" + if ok { + authMessageStr = authMessage.(string) + } + + // get the salt and iteration from the authMessage to generate salted password + fields = strings.Split(authMessageStr, ",") + for _, part := range fields { + if strings.HasPrefix(part, "s=") { + // Split based on "=" and get the value of "s" + saltByt, err := decodeBase64Str(strings.TrimPrefix(part, "s=")) + if err != nil { + utils.LogError(logger, err, "failed to decode the base64 string of salt") + return "", false, err + } + salt = string(saltByt) + } + if strings.HasPrefix(part, "i=") { + // Split based on "=" and get the value of "i" + itr, err = strconv.Atoi(strings.Split(part, "=")[1]) + if err != nil { + utils.LogError(logger, err, "failed to convert the string into integer") + return "", false, err + } + } + } + // Since, the server proof is the signature generated by the authMessage and salted password. + // So, need to return the new server proof according to the new authMessage which is different from the recorded. + newVerifier, err := scram.GenerateServerFinalMessage(authMessageStr, "SCRAM-SHA-1", mongoPassword, salt, itr, logger) + if err != nil { + utils.LogError(logger, err, "failed to get the new server proof") + return "", false, err + } + + // tools the payload of the mongo response for the authentication + responseMsg["payload"].(map[string]interface{})["$binary"].(map[string]interface{})["base64"] = base64.StdEncoding.EncodeToString([]byte("v=" + newVerifier)) + byt, err := json.Marshal(responseMsg) + if err != nil { + utils.LogError(logger, err, "failed to marshal the updated string document of OpReply") + return "", false, err + } + responseSection = string(byt) + return responseSection, true, nil +} + +func parseField(s, k string) (string, error) { + t := strings.TrimPrefix(s, k+"=") + if t == s { + return "", fmt.Errorf("error parsing '%s' for field '%s'", s, k) + } + return t, nil +} + +func parseFieldBase64(s, k string) ([]byte, error) { + raw, err := parseField(s, k) + if err != nil { + return nil, err + } + + dec, err := decodeBase64Str(raw) + if err != nil { + return nil, err + } + + return dec, nil +} diff --git a/pkg/core/proxy/integrations/mongo/util.go b/pkg/core/proxy/integrations/mongo/util.go new file mode 100644 index 000000000..6c9e2a2ab --- /dev/null +++ b/pkg/core/proxy/integrations/mongo/util.go @@ -0,0 +1,37 @@ +package mongo + +import ( + "strings" + + "go.keploy.io/server/v2/pkg/models" + "go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage" + "go.uber.org/zap" +) + +func hasSecondSetBit(num int) bool { + // Shift the number right by 1 bit and check if the least significant bit is set + return (num>>1)&1 == 1 +} + +// Skip heartbeat from capturing in the global set of mocks. Since, the heartbeat packet always contain the "hello" boolean. +// See: https://github.com/mongodb/mongo-go-driver/blob/8489898c64a2d8c2e2160006eb851a11a9db9e9d/x/mongo/driver/operation/hello.go#L503 +func isHeartBeat(logger *zap.Logger, opReq Operation, requestHeader models.MongoHeader, mongoRequest interface{}) bool { + + switch requestHeader.Opcode { + case wiremessage.OpQuery: + val, ok := mongoRequest.(*models.MongoOpQuery) + if ok { + return val.FullCollectionName == "admin.$cmd" && opReq.IsIsMaster() && strings.Contains(opReq.String(), "helloOk") + } + case wiremessage.OpMsg: + _, ok := mongoRequest.(*models.MongoOpMessage) + if ok { + return (opReq.IsIsAdminDB() && strings.Contains(opReq.String(), "hello")) || + opReq.IsIsMaster() || + isScramAuthRequest(mongoRequest.(*models.MongoOpMessage).Sections, logger) + } + default: + return false + } + return false +} diff --git a/pkg/core/proxy/integrations/mysql/README.md b/pkg/core/proxy/integrations/mysql/README.md new file mode 100644 index 000000000..5cecaeb86 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/README.md @@ -0,0 +1,53 @@ +# MySQL Package Documentation + +The `mysqlparser` package encompasses the parser and mapping logic required +to read MySql binary messages and capture and test the outputs. +Utilized by the `hooks` package, it assists in redirecting outgoing +calls for the purpose of recording or testing the outputs. + +## SSL Support + +Please note that SSL is currently not supported in the MySQL package. To use the package without SSL, you can include the following parameters in your database URL like the following example: + +``` jdbc:mysql://localhost:3306/db_name?useSSL=false&allowPublicKeyRetrieval=true ``` + +## The following MySQL packet types are handled in the parser: + +**COM_PING**: A ping command sent to the server to check if it's alive and responsive. + +**COM_STMT_EXECUTE**: Executes a prepared statement that was prepared using the COM_STMT_PREPARE command. + +**COM_STMT_FETCH**: Fetches rows from a statement which produced a result set. Used with cursors in server-side prepared statements. + +**COM_STMT_PREPARE**: Prepares a SQL statement for execution. + +**COM_STMT_CLOSE**: Closes a prepared statement, freeing up server resources associated with it. + +**COM_CHANGE_USER**: Changes the user of the current connection and resets the connection state. + +**MySQLOK**: A packet indicating a successful operation. It is usually received after commands like INSERT, UPDATE, DELETE, etc. + +**MySQLErr**: An error packet sent from the server to the client, indicating an error occurred with the last command sent. + +**RESULT_SET_PACKET**: Contains the actual result set data returned by a query. It's a series of packets containing rows and columns of data. + +**MySQLHandshakeV10**: The initial handshake packet sent from the server to the client when a connection is established, containing authentication and connection details. + +**HANDSHAKE_RESPONSE**: The response packet sent by the client in reply to MySQLHandshakeV10, containing client authentication data. + +**MySQLQuery**: Contains a SQL query that is to be executed on the server. + +**AUTH_SWITCH_REQUEST**: Sent by the server to request an authentication method switch during the connection process. + +**AUTH_SWITCH_RESPONSE**: Sent by the client to respond to the AUTH_SWITCH_REQUEST, containing authentication data. + +**MySQLEOF**: An EOF (End Of File) packet that marks the end of a result set or the end of the fields list. + +**AUTH_MORE_DATA**: Sent by the server if it needs more data for authentication (used in plugins). + +**COM_STMT_SEND_LONG_DATA**: Sends data for a column in a row to be inserted/updated in a table using a prepared statement. + +**COM_STMT_RESET**: Resets the data of a prepared statement which was accumulated with COM_STMT_SEND_LONG_DATA commands. + +**COM_QUIT**: Sent by the client to close the connection to the server gracefully. + diff --git a/pkg/core/proxy/integrations/mysql/authMoreData.go b/pkg/core/proxy/integrations/mysql/authMoreData.go new file mode 100644 index 000000000..f5c301a61 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/authMoreData.go @@ -0,0 +1,19 @@ +// Package mysql provides integration with MySQL outgoing. +package mysql + +import ( + "errors" +) + +type NextAuthPacket struct { + PluginData byte `json:"plugin_data,omitempty" yaml:"plugin_data,omitempty"` +} + +func decodeAuthMoreData(data []byte) (*NextAuthPacket, error) { + if data[0] != 0x02 { + return nil, errors.New("invalid packet type for NextAuthPacket") + } + return &NextAuthPacket{ + PluginData: data[0], + }, nil +} diff --git a/pkg/core/proxy/integrations/mysql/authSwitchRequestPacket.go b/pkg/core/proxy/integrations/mysql/authSwitchRequestPacket.go new file mode 100644 index 000000000..1cd7aa92e --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/authSwitchRequestPacket.go @@ -0,0 +1,52 @@ +package mysql + +import ( + "bytes" + "fmt" + + "go.keploy.io/server/v2/pkg/models" +) + +type AuthSwitchRequestPacket struct { + StatusTag byte `json:"status_tag,omitempty" yaml:"status_tag,omitempty"` + PluginName string `json:"plugin_name,omitempty" yaml:"plugin_name,omitempty"` + PluginAuthData string `json:"plugin_authdata,omitempty" yaml:"plugin_authdata,omitempty"` +} + +func decodeAuthSwitchRequest(data []byte) (*AuthSwitchRequestPacket, error) { + if len(data) < 1 || data[0] != 0xFE { + return nil, fmt.Errorf("invalid AuthSwitchRequest packet") + } + + packet := &AuthSwitchRequestPacket{ + StatusTag: data[0], + } + + // Splitting data by null byte to get plugin name and auth data + parts := bytes.SplitN(data[1:], []byte{0x00}, 2) + packet.PluginName = string(parts[0]) + if len(parts) > 1 { + packet.PluginAuthData = string(parts[1]) + } + + return packet, nil +} +func encodeAuthSwitchRequest(packet *models.AuthSwitchRequestPacket) ([]byte, error) { + if packet.StatusTag != 0xFE { + return nil, fmt.Errorf("invalid AuthSwitchRequest packet") + } + + buf := new(bytes.Buffer) + + // Write the status tag + buf.WriteByte(packet.StatusTag) + + // Write the plugin name + buf.WriteString(packet.PluginName) + buf.WriteByte(0x00) // Null byte separator + + // Write the plugin auth data + buf.WriteString(packet.PluginAuthData) + + return buf.Bytes(), nil +} diff --git a/pkg/core/proxy/integrations/mysql/authSwitchResponsePacket.go b/pkg/core/proxy/integrations/mysql/authSwitchResponsePacket.go new file mode 100644 index 000000000..b4f8a8d3f --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/authSwitchResponsePacket.go @@ -0,0 +1,18 @@ +package mysql + +import ( + "go.keploy.io/server/v2/pkg/models" +) + +type AuthSwitchResponsePacket struct { + AuthResponseData string `json:"auth_response_data,omitempty" yaml:"auth_response_data,omitempty"` +} + +func decodeAuthSwitchResponse(data []byte) (*AuthSwitchResponsePacket, error) { + return &AuthSwitchResponsePacket{ + AuthResponseData: string(data), + }, nil +} +func encodeAuthSwitchResponse(packet *models.AuthSwitchResponsePacket) ([]byte, error) { + return []byte(packet.AuthResponseData), nil +} diff --git a/pkg/core/proxy/integrations/mysql/comChangeUserPacket.go b/pkg/core/proxy/integrations/mysql/comChangeUserPacket.go new file mode 100644 index 000000000..2ce182727 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comChangeUserPacket.go @@ -0,0 +1,41 @@ +package mysql + +import ( + "encoding/base64" + "errors" + "strings" +) + +type ComChangeUserPacket struct { + User string `json:"user,omitempty" yaml:"user,omitempty,flow"` + Auth string `json:"auth,omitempty" yaml:"auth,omitempty,flow"` + Db string `json:"db,omitempty" yaml:"db,omitempty,flow"` + CharacterSet uint8 `json:"character_set,omitempty" yaml:"character_set,omitempty,flow"` + AuthPlugin string `json:"auth_plugin,omitempty" yaml:"auth_plugin,omitempty,flow"` +} + +func decodeComChangeUser(data []byte) (ComChangeUserPacket, error) { + if len(data) < 2 { + return ComChangeUserPacket{}, errors.New("Data too short for COM_CHANGE_USER") + } + + nullTerminatedStrings := strings.Split(string(data[1:]), "\x00") + if len(nullTerminatedStrings) < 5 { + return ComChangeUserPacket{}, errors.New("Data malformed for COM_CHANGE_USER") + } + + user := nullTerminatedStrings[0] + authLength := data[len(user)+2] + auth := data[len(user)+3 : len(user)+3+int(authLength)] + db := nullTerminatedStrings[2] + characterSet := data[len(user)+4+int(authLength)] + authPlugin := nullTerminatedStrings[3] + + return ComChangeUserPacket{ + User: user, + Auth: base64.StdEncoding.EncodeToString(auth), + Db: db, + CharacterSet: characterSet, + AuthPlugin: authPlugin, + }, nil +} diff --git a/pkg/core/proxy/integrations/mysql/comFetchPacket.go b/pkg/core/proxy/integrations/mysql/comFetchPacket.go new file mode 100644 index 000000000..e1aa04b2d --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comFetchPacket.go @@ -0,0 +1,31 @@ +package mysql + +import ( + "encoding/binary" + "errors" +) + +type ComStmtFetchPacket struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty"` + RowCount uint32 `json:"row_count,omitempty" yaml:"row_count,omitempty"` + Info string `json:"info,omitempty" yaml:"info,omitempty"` +} + +func decodeComStmtFetch(data []byte) (ComStmtFetchPacket, error) { + if len(data) < 9 { + return ComStmtFetchPacket{}, errors.New("Data too short for COM_STMT_FETCH") + } + + statementID := binary.LittleEndian.Uint32(data[1:5]) + rowCount := binary.LittleEndian.Uint32(data[5:9]) + + // Assuming the info starts at the 10th byte + infoData := data[9:] + info := string(infoData) + + return ComStmtFetchPacket{ + StatementID: statementID, + RowCount: rowCount, + Info: info, + }, nil +} diff --git a/pkg/core/proxy/integrations/mysql/comInitDb.go b/pkg/core/proxy/integrations/mysql/comInitDb.go new file mode 100644 index 000000000..773faf1ed --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comInitDb.go @@ -0,0 +1,6 @@ +package mysql + +type ComInitDbPacket struct { + Status byte `json:"status,omitempty" yaml:"status,omitempty"` + DbName string `json:"db_name,omitempty" yaml:"db_name,omitempty"` +} diff --git a/pkg/core/proxy/integrations/mysql/comPingPacket.go b/pkg/core/proxy/integrations/mysql/comPingPacket.go new file mode 100644 index 000000000..048bf182c --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comPingPacket.go @@ -0,0 +1,14 @@ +package mysql + +import "errors" + +type ComPingPacket struct { +} + +func decodeComPing(data []byte) (ComPingPacket, error) { + if len(data) < 1 || data[0] != 0x0e { + return ComPingPacket{}, errors.New("Data malformed for COM_PING") + } + + return ComPingPacket{}, nil +} diff --git a/pkg/core/proxy/integrations/mysql/comStmtCloseMoreData.go b/pkg/core/proxy/integrations/mysql/comStmtCloseMoreData.go new file mode 100644 index 000000000..20be29491 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comStmtCloseMoreData.go @@ -0,0 +1,45 @@ +package mysql + +import ( + "encoding/binary" + "errors" + "strings" +) + +type ComStmtPreparePacket1 struct { + Header []byte `json:"header,omitempty" yaml:"header,omitempty"` + Query string `json:"query,omitempty" yaml:"query,omitempty"` +} + +type ComStmtCloseAndPrepare struct { + StmtClose ComStmtClosePacket `json:"stmt_close,omitempty" yaml:"stmt_close,omitempty"` + StmtPrepare ComStmtPreparePacket1 `json:"stmt_prepare,omitempty" yaml:"stmt_prepare,omitempty"` +} + +func decodeComStmtCloseMoreData(data []byte) (*ComStmtCloseAndPrepare, error) { + if len(data) < 10 { + return nil, errors.New("data too short for COM_STMT_CLOSE and COM_STMT_PREPARE with header") + } + status := data[0] + + // Decode statement ID for COM_STMT_CLOSE + statementID := binary.LittleEndian.Uint32(data[1:]) + + // Extract the header for COM_STMT_PREPARE + prepareHeader := data[5:9] + + // Get the query string after the header + query := string(data[10:]) + query = strings.ReplaceAll(query, "\t", "") + + return &ComStmtCloseAndPrepare{ + StmtClose: ComStmtClosePacket{ + Status: status, + StatementID: statementID, + }, + StmtPrepare: ComStmtPreparePacket1{ + Header: prepareHeader, + Query: query, + }, + }, nil +} diff --git a/pkg/core/proxy/integrations/mysql/comStmtClosePacket.go b/pkg/core/proxy/integrations/mysql/comStmtClosePacket.go new file mode 100644 index 000000000..7d9d36723 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comStmtClosePacket.go @@ -0,0 +1,25 @@ +package mysql + +import ( + "encoding/binary" + "errors" +) + +type ComStmtClosePacket struct { + Status byte `json:"status,omitempty" yaml:"status,omitempty"` + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty"` +} + +func decodeComStmtClose(data []byte) (*ComStmtClosePacket, error) { + if len(data) < 5 { + return nil, errors.New("data too short for COM_STMT_CLOSE") + } + status := data[0] + + // Statement ID is 4-byte, little-endian integer after command byte + statementID := binary.LittleEndian.Uint32(data[1:]) + return &ComStmtClosePacket{ + Status: status, + StatementID: statementID, + }, nil +} diff --git a/pkg/core/proxy/integrations/mysql/comStmtPrepareOk.go b/pkg/core/proxy/integrations/mysql/comStmtPrepareOk.go new file mode 100644 index 000000000..81799eb29 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comStmtPrepareOk.go @@ -0,0 +1,240 @@ +package mysql + +import ( + "bytes" + "encoding/binary" + "errors" + + "go.keploy.io/server/v2/pkg/models" +) + +type StmtPrepareOk struct { + Status byte `json:"status,omitempty" yaml:"status,omitempty,flow"` + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow"` + NumColumns uint16 `json:"num_columns,omitempty" yaml:"num_columns,omitempty,flow"` + NumParams uint16 `json:"num_params,omitempty" yaml:"num_params,omitempty,flow"` + WarningCount uint16 `json:"warning_count,omitempty" yaml:"warning_count,omitempty,flow"` + ColumnDefs []ColumnDefinition `json:"column_definitions,omitempty" yaml:"column_definitions,omitempty,flow"` + ParamDefs []ColumnDefinition `json:"param_definitions,omitempty" yaml:"param_definitions,omitempty,flow"` +} + +func decodeComStmtPrepareOk(data []byte) (*StmtPrepareOk, error) { + if len(data) < 12 { + return nil, errors.New("data length is not enough for COM_STMT_PREPARE_OK") + } + + response := &StmtPrepareOk{ + Status: data[0], + StatementID: binary.LittleEndian.Uint32(data[1:5]), + NumColumns: binary.LittleEndian.Uint16(data[5:7]), + NumParams: binary.LittleEndian.Uint16(data[7:9]), + WarningCount: binary.LittleEndian.Uint16(data[10:12]), + } + + offset := 12 + + if response.NumParams > 0 { + for i := uint16(0); i < response.NumParams; i++ { + columnDef := ColumnDefinition{} + columnHeader := PacketHeader{ + PacketLength: data[offset], + PacketSequenceID: data[offset+3], + } + columnDef.PacketHeader = columnHeader + offset += 4 //Header of packet + var err error + columnDef.Catalog, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.Schema, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.Table, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.OrgTable, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.Name, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.OrgName, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + offset++ //filler + columnDef.CharacterSet = binary.LittleEndian.Uint16(data[offset : offset+2]) + columnDef.ColumnLength = binary.LittleEndian.Uint32(data[offset+2 : offset+6]) + columnDef.ColumnType = data[offset+6] + columnDef.Flags = binary.LittleEndian.Uint16(data[offset+7 : offset+9]) + columnDef.Decimals = data[offset+9] + offset += 10 + offset += 2 // filler + response.ParamDefs = append(response.ParamDefs, columnDef) + } + offset += 9 //skip EOF packet for Parameter Definition + } + + if response.NumColumns > 0 { + for i := uint16(0); i < response.NumColumns; i++ { + columnDef := ColumnDefinition{} + columnHeader := PacketHeader{ + PacketLength: data[offset], + PacketSequenceID: data[offset+3], + } + columnDef.PacketHeader = columnHeader + offset += 4 + var err error + columnDef.Catalog, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.Schema, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.Table, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.OrgTable, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.Name, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + columnDef.OrgName, err = readLengthEncodedString(data, &offset) + if err != nil { + return nil, err + } + offset++ //filler + columnDef.CharacterSet = binary.LittleEndian.Uint16(data[offset : offset+2]) + columnDef.ColumnLength = binary.LittleEndian.Uint32(data[offset+2 : offset+6]) + columnDef.ColumnType = data[offset+6] + columnDef.Flags = binary.LittleEndian.Uint16(data[offset+7 : offset+9]) + columnDef.Decimals = data[offset+9] + offset += 10 + offset += 2 // filler + response.ColumnDefs = append(response.ColumnDefs, columnDef) + } + offset += 9 //skip EOF packet for Column Definitions + } + + return response, nil +} + +func encodeStmtPrepareOk(packet *models.MySQLStmtPrepareOk) ([]byte, error) { + buf := &bytes.Buffer{} + buf.Write([]byte{0x0C, 0x00, 0x00, 0x01}) + // Encode the Status field + if err := binary.Write(buf, binary.LittleEndian, uint8(packet.Status)); err != nil { + return nil, err + } + + // Encode the StatementID field + if err := binary.Write(buf, binary.LittleEndian, packet.StatementID); err != nil { + return nil, err + } + + // Encode the NumColumns field + if err := binary.Write(buf, binary.LittleEndian, uint16(packet.NumColumns)); err != nil { + return nil, err + } + + // Encode the NumParams field + if err := binary.Write(buf, binary.LittleEndian, uint16(packet.NumParams)); err != nil { + return nil, err + } + + // Encode the WarningCount field + if err := binary.Write(buf, binary.LittleEndian, uint16(packet.WarningCount)); err != nil { + return nil, err + } + + buf.WriteByte(0x00) // Reserved byte + + seqNum := byte(2) + for i := uint16(0); i < packet.NumParams; i++ { + param := packet.ParamDefs[i] + if err := encodeColumnDefinition(buf, ¶m, &seqNum); err != nil { + return nil, err + } + } + if packet.NumParams > 0 { + // Write EOF marker for parameter definitions + buf.Write([]byte{5, 0, 0, seqNum, 0xFE, 0x00, 0x00, 0x02, 0x00}) + seqNum++ + } + + // Encode column definitions + for _, col := range packet.ColumnDefs { + if err := encodeColumnDefinition(buf, &col, &seqNum); err != nil { + return nil, err + } + } + + if packet.NumColumns > 0 { + // Write EOF marker for column definitions + buf.Write([]byte{5, 0, 0, seqNum, 0xFE, 0x00, 0x00, 0x02, 0x00}) + seqNum++ + } + + return buf.Bytes(), nil +} + +func encodeColumnDefinition(buf *bytes.Buffer, column *models.ColumnDefinition, seqNum *byte) error { + tmpBuf := &bytes.Buffer{} + if err := writeLengthEncodedString(tmpBuf, column.Catalog); err != nil { + return err + } + if err := writeLengthEncodedString(tmpBuf, column.Schema); err != nil { + return err + } + if err := writeLengthEncodedString(tmpBuf, column.Table); err != nil { + return err + } + if err := writeLengthEncodedString(tmpBuf, column.OrgTable); err != nil { + return err + } + if err := writeLengthEncodedString(tmpBuf, column.Name); err != nil { + return err + } + if err := writeLengthEncodedString(tmpBuf, column.OrgName); err != nil { + return err + } + tmpBuf.WriteByte(0x0C) + if err := binary.Write(tmpBuf, binary.LittleEndian, column.CharacterSet); err != nil { + return err + } + if err := binary.Write(tmpBuf, binary.LittleEndian, column.ColumnLength); err != nil { + return err + } + tmpBuf.WriteByte(column.ColumnType) + if err := binary.Write(tmpBuf, binary.LittleEndian, column.Flags); err != nil { + return err + } + tmpBuf.WriteByte(column.Decimals) + tmpBuf.Write([]byte{0x00, 0x00}) + + colData := tmpBuf.Bytes() + length := len(colData) + + // Write packet header with length and sequence number + buf.WriteByte(byte(length)) + buf.WriteByte(byte(length >> 8)) + buf.WriteByte(byte(length >> 16)) + buf.WriteByte(*seqNum) + *seqNum++ + + // Write column definition data + buf.Write(colData) + + return nil +} diff --git a/pkg/core/proxy/integrations/mysql/comStmtPreparePacket.go b/pkg/core/proxy/integrations/mysql/comStmtPreparePacket.go new file mode 100644 index 000000000..4ac73c52b --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comStmtPreparePacket.go @@ -0,0 +1,20 @@ +package mysql + +import ( + "errors" + "strings" +) + +type ComStmtPreparePacket struct { + Query string `json:"query,omitempty" yaml:"query,omitempty,flow"` +} + +func decodeComStmtPrepare(data []byte) (*ComStmtPreparePacket, error) { + if len(data) < 1 { + return nil, errors.New("data too short for COM_STMT_PREPARE") + } + // data[1:] will skip the command byte and leave the query string + query := string(data[1:]) + query = strings.ReplaceAll(query, "\t", "") + return &ComStmtPreparePacket{Query: query}, nil +} diff --git a/pkg/core/proxy/integrations/mysql/comStmtResetPacket.go b/pkg/core/proxy/integrations/mysql/comStmtResetPacket.go new file mode 100644 index 000000000..1541ff20d --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comStmtResetPacket.go @@ -0,0 +1,19 @@ +package mysql + +import ( + "encoding/binary" + "fmt" +) + +type COM_STMT_RESET struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow"` +} + +func decodeComStmtReset(packet []byte) (*COM_STMT_RESET, error) { + if len(packet) != 5 || packet[0] != 0x1a { + return nil, fmt.Errorf("invalid COM_STMT_RESET packet") + } + stmtID := binary.LittleEndian.Uint32(packet[1:5]) + return &COM_STMT_RESET{ + StatementID: stmtID}, nil +} diff --git a/pkg/core/proxy/integrations/mysql/comStmtSendLongDataPacket.go b/pkg/core/proxy/integrations/mysql/comStmtSendLongDataPacket.go new file mode 100644 index 000000000..494e477a4 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/comStmtSendLongDataPacket.go @@ -0,0 +1,27 @@ +package mysql + +import ( + "encoding/base64" + "encoding/binary" + "fmt" +) + +type COM_STMT_SEND_LONG_DATA struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow"` + ParameterID uint16 `json:"parameter_id,omitempty" yaml:"parameter_id,omitempty,flow"` + Data string `json:"data,omitempty" yaml:"data,omitempty,flow"` +} + +func decodeComStmtSendLongData(packet []byte) (COM_STMT_SEND_LONG_DATA, error) { + if len(packet) < 7 || packet[0] != 0x18 { + return COM_STMT_SEND_LONG_DATA{}, fmt.Errorf("invalid COM_STMT_SEND_LONG_DATA packet") + } + stmtID := binary.LittleEndian.Uint32(packet[1:5]) + paramID := binary.LittleEndian.Uint16(packet[5:7]) + data := packet[7:] + return COM_STMT_SEND_LONG_DATA{ + StatementID: stmtID, + ParameterID: paramID, + Data: base64.StdEncoding.EncodeToString(data), + }, nil +} diff --git a/pkg/core/proxy/integrations/mysql/decode.go b/pkg/core/proxy/integrations/mysql/decode.go new file mode 100644 index 000000000..821510113 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/decode.go @@ -0,0 +1,238 @@ +package mysql + +import ( + "context" + "net" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func decodeMySQL(ctx context.Context, logger *zap.Logger, clientConn net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + firstLoop := true + doHandshakeAgain := true + prevRequest := "" + var requestBuffers [][]byte + + configMocks, err := mockDb.GetUnFilteredMocks() + if err != nil { + utils.LogError(logger, err, "Failed to get unfiltered mocks") + return err + } + + tcsMocks, err := mockDb.GetFilteredMocks() + if err != nil { + utils.LogError(logger, err, "Failed to get filtered mocks") + return err + } + + errCh := make(chan error, 1) + + go func(errCh chan error, configMocks []*models.Mock, tcsMocks []*models.Mock, prevRequest string, requestBuffers [][]byte) { + defer utils.Recover(logger) + defer close(errCh) + for { + //log.Debug("Config and TCS Mocks", zap.Any("configMocks", configMocks), zap.Any("tcsMocks", tcsMocks)) + if firstLoop || doHandshakeAgain { + if len(configMocks) == 0 { + logger.Debug("No more config mocks available") + errCh <- err + return + } + sqlMock, found := getFirstSQLMock(configMocks) + if !found { + logger.Debug("No SQL mock found") + errCh <- err + return + } + header := sqlMock.Spec.MySQLResponses[0].Header + packet := sqlMock.Spec.MySQLResponses[0].Message + opr := sqlMock.Spec.MySQLResponses[0].Header.PacketType + + binaryPacket, err := encodeToBinary(&packet, header, opr, 0) + if err != nil { + utils.LogError(logger, err, "Failed to encode to binary") + errCh <- err + return + } + + _, err = clientConn.Write(binaryPacket) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "Failed to write binary packet") + errCh <- err + return + } + matchedIndex := 0 + matchedReqIndex := 0 + configMocks[matchedIndex].Spec.MySQLResponses = append(configMocks[matchedIndex].Spec.MySQLResponses[:matchedReqIndex], configMocks[matchedIndex].Spec.MySQLResponses[matchedReqIndex+1:]...) + if len(configMocks[matchedIndex].Spec.MySQLResponses) == 0 { + configMocks = append(configMocks[:matchedIndex], configMocks[matchedIndex+1:]...) + err = mockDb.FlagMockAsUsed(configMocks[matchedIndex]) + if err != nil { + utils.LogError(logger, err, "Failed to flag mock as used") + errCh <- err + return + } + } + //h.SetConfigMocks(configMocks) + firstLoop = false + doHandshakeAgain = false + logger.Debug("BINARY PACKET SENT HANDSHAKE", zap.ByteString("binaryPacketKey", binaryPacket)) + prevRequest = "MYSQLHANDSHAKE" + } else { + + // fmt.Println(time.Duration(delay) * time.Second) + timeoutDuration := 2 * time.Duration(opts.SQLDelay) * time.Second // 2-second timeout + err := clientConn.SetReadDeadline(time.Now().Add(timeoutDuration)) + if err != nil { + utils.LogError(logger, err, "Failed to set read deadline") + errCh <- err + return + } + + // Attempt to read from the client + requestBuffer, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + // Timeout occurred, no data received from client + // Re-initiate handshake without logging an error + doHandshakeAgain = true + continue + } + // Handle other errors + // log.Error("Failed to read bytes from clientConn", zap.Error(err)) + errCh <- err + return + } + + // Reset the read deadline + err = clientConn.SetReadDeadline(time.Time{}) + if err != nil { + utils.LogError(logger, err, "Failed to reset read deadline") + errCh <- err + return + } + + requestBuffers = append(requestBuffers, requestBuffer) + + if len(requestBuffer) == 0 { + logger.Debug("Request buffer is empty") + errCh <- err + return + } + if prevRequest == "MYSQLHANDSHAKE" { + expectingHandshakeResponseTest = true + } + + oprRequest, requestHeader, decodedRequest, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(requestBuffer)) + if err != nil { + utils.LogError(logger, err, "Failed to decode MySQL packet") + errCh <- err + return + } + if oprRequest == "COM_QUIT" { + logger.Debug("COM_QUIT received") + errCh <- err + return + } + if expectingHandshakeResponseTest { + // configMocks = configMocks[1:] + // h.SetConfigMocks(configMocks) + expectingHandshakeResponseTest = false + } + + prevRequest = "" + logger.Debug("Logging request buffer and operation request", + zap.ByteString("requestBuffer", requestBuffer), + zap.String("oprRequest", oprRequest)) + + mysqlRequest := models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeader.PayloadLength, + PacketNumber: requestHeader.SequenceID, + PacketType: oprRequest, + }, + Message: decodedRequest, + } + if oprRequest == "COM_STMT_CLOSE" { + logger.Debug("COM_STMT_CLOSE received") + errCh <- err + return + } + //TODO: both in case of no match or some other error, we are receiving the error. + // Due to this, there will be no passthrough in case of no match. + matchedResponse, matchedIndex, _, err := matchRequestWithMock(ctx, mysqlRequest, configMocks, tcsMocks, mockDb) + if err != nil { + utils.LogError(logger, err, "Failed to match request with mock") + errCh <- err + return + } + + if matchedIndex == -1 { + logger.Debug("No matching mock found") + + responseBuffer, err := util.PassThrough(ctx, logger, clientConn, dstCfg, requestBuffers) + if err != nil { + utils.LogError(logger, err, "Failed to passthrough the mysql request to the actual database server") + errCh <- err + return + } + _, err = clientConn.Write(responseBuffer) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "Failed to write response to clientConn") + errCh <- err + return + } + continue + } + + responseBinary, err := encodeToBinary(&matchedResponse.Message, matchedResponse.Header, matchedResponse.Header.PacketType, 1) + logger.Debug("Response binary", + zap.ByteString("responseBinary", responseBinary), + zap.String("packetType", matchedResponse.Header.PacketType)) + + if err != nil { + utils.LogError(logger, err, "Failed to encode response to binary") + errCh <- err + return + } + + _, err = clientConn.Write(responseBinary) + if err != nil { + if ctx.Err() != nil { + return + } + utils.LogError(logger, err, "Failed to write response to clientConn") + errCh <- err + return + } + } + } + }(errCh, configMocks, tcsMocks, prevRequest, requestBuffers) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + return err + } +} + +func getFirstSQLMock(configMocks []*models.Mock) (*models.Mock, bool) { + for _, mock := range configMocks { + if len(mock.Spec.MySQLResponses) > 0 && mock.Kind == "SQL" && mock.Spec.MySQLResponses[0].Header.PacketType == "MySQLHandshakeV10" { + return mock, true + } + } + return nil, false +} diff --git a/pkg/core/proxy/integrations/mysql/encode.go b/pkg/core/proxy/integrations/mysql/encode.go new file mode 100644 index 000000000..968536d0f --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/encode.go @@ -0,0 +1,612 @@ +package mysql + +import ( + "context" + "errors" + "golang.org/x/sync/errgroup" + "net" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func encodeMySQL(ctx context.Context, logger *zap.Logger, clientConn, destConn net.Conn, mocks chan<- *models.Mock, _ models.OutgoingOptions) error { + + var ( + mysqlRequests []models.MySQLRequest + mysqlResponses []models.MySQLResponse + ) + + errCh := make(chan error, 1) + + //get the error group from the context + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + + //for keeping conn alive + g.Go(func() error { + defer utils.Recover(logger) + defer close(errCh) + for { + lastCommand = 0x00 //resetting last command for new loop + data, source, err := readFirstBuffer(ctx, logger, clientConn, destConn) + if len(data) == 0 { + break + } + if err != nil { + utils.LogError(logger, err, "failed to read initial data") + errCh <- err + return nil + } + if source == "destination" { + handshakeResponseBuffer := data + _, err = clientConn.Write(handshakeResponseBuffer) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write handshake response to client") + errCh <- err + return nil + } + handshakeResponseFromClient, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read handshake response from client") + errCh <- err + return nil + } + _, err = destConn.Write(handshakeResponseFromClient) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write handshake response to server") + errCh <- err + return nil + } + //TODO: why is this sleep here? + time.Sleep(100 * time.Millisecond) + okPacket1, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read packet from server after handshake") + errCh <- err + return nil + } + _, err = clientConn.Write(okPacket1) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write packet to client after handshake") + errCh <- err + return nil + } + expectingHandshakeResponse = true + oprRequest, requestHeader, mysqlRequest, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(handshakeResponseFromClient)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from client") + errCh <- err + return nil + } + mysqlRequests = append(mysqlRequests, models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeader.PayloadLength, + PacketNumber: requestHeader.SequenceID, + PacketType: oprRequest, + }, + Message: mysqlRequest, + }) + expectingHandshakeResponse = false + oprResponse1, responseHeader1, mysqlResp1, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(handshakeResponseBuffer)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from destination") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: responseHeader1.PayloadLength, + PacketNumber: responseHeader1.SequenceID, + PacketType: oprResponse1, + }, + Message: mysqlResp1, + }) + oprResponse2, responseHeader2, mysqlResp2, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(okPacket1)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from destination") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: responseHeader2.PayloadLength, + PacketNumber: responseHeader2.SequenceID, + PacketType: oprResponse2, + }, + Message: mysqlResp2, + }) + if oprResponse2 == "AUTH_SWITCH_REQUEST" { + + authSwitchResponse, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read AuthSwitchResponse from client") + errCh <- err + return nil + } + _, err = destConn.Write(authSwitchResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write AuthSwitchResponse to server") + errCh <- err + return nil + } + serverResponse, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read response from server") + errCh <- err + return nil + } + _, err = clientConn.Write(serverResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write response to client") + errCh <- err + return nil + } + expectingAuthSwitchResponse = true + + oprRequestFinal, requestHeaderFinal, mysqlRequestFinal, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(authSwitchResponse)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from client after full authentication") + errCh <- err + return nil + } + mysqlRequests = append(mysqlRequests, models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeaderFinal.PayloadLength, + PacketNumber: requestHeaderFinal.SequenceID, + PacketType: oprRequestFinal, + }, + Message: mysqlRequestFinal, + }) + expectingAuthSwitchResponse = false + + isPluginData = true + oprResponse, responseHeader, mysqlResp, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(serverResponse)) + isPluginData = false + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from destination after full authentication") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: responseHeader.PayloadLength, + PacketNumber: responseHeader.SequenceID, + PacketType: oprResponse, + }, + Message: mysqlResp, + }) + var pluginType string + + if handshakeResp, ok := mysqlResp.(*HandshakeResponseOk); ok { + pluginType = handshakeResp.PluginDetails.Type + } + if pluginType == "cachingSha2PasswordPerformFullAuthentication" { + + clientResponse, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read response from client") + errCh <- err + return nil + } + _, err = destConn.Write(clientResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write client's response to server") + errCh <- err + return nil + } + finalServerResponse, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read final response from server") + errCh <- err + return nil + } + _, err = clientConn.Write(finalServerResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write final response to client") + errCh <- err + return nil + } + oprRequestFinal, requestHeaderFinal, mysqlRequestFinal, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(clientResponse)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from client after full authentication") + errCh <- err + return nil + } + mysqlRequests = append(mysqlRequests, models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeaderFinal.PayloadLength, + PacketNumber: requestHeaderFinal.SequenceID, + PacketType: oprRequestFinal, + }, + Message: mysqlRequestFinal, + }) + isPluginData = true + oprResponseFinal, responseHeaderFinal, mysqlRespFinal, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(finalServerResponse)) + isPluginData = false + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from destination after full authentication") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: responseHeaderFinal.PayloadLength, + PacketNumber: responseHeaderFinal.SequenceID, + PacketType: oprResponseFinal, + }, + Message: mysqlRespFinal, + }) + clientResponse1, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read response from client") + errCh <- err + return nil + } + _, err = destConn.Write(clientResponse1) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write client's response to server") + errCh <- err + return nil + } + finalServerResponse1, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read final response from server") + errCh <- err + return nil + } + _, err = clientConn.Write(finalServerResponse1) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write final response to client") + errCh <- err + return nil + } + finalServerResponsetype1, finalServerResponseHeader1, mysqlRespfinalServerResponse, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(finalServerResponse1)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from final server response") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: finalServerResponseHeader1.PayloadLength, + PacketNumber: finalServerResponseHeader1.SequenceID, + PacketType: finalServerResponsetype1, + }, + Message: mysqlRespfinalServerResponse, + }) + oprRequestFinal1, requestHeaderFinal1, err := decodeEncryptPassword(clientResponse1) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from client after full authentication") + errCh <- err + return nil + } + type DataMessage struct { + Data []byte + } + mysqlRequests = append(mysqlRequests, models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeaderFinal1.PayloadLength, + PacketNumber: requestHeaderFinal1.SequenceID, + PacketType: oprRequestFinal1, + }, + Message: DataMessage{ + Data: requestHeaderFinal1.Payload, + }, + }) + } else { + // time.Sleep(10 * time.Millisecond) + finalServerResponse, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read final response from server") + errCh <- err + return nil + } + _, err = clientConn.Write(finalServerResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write final response to client") + errCh <- err + return nil + } + oprResponseFinal, responseHeaderFinal, mysqlRespFinal, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(finalServerResponse)) + isPluginData = false + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from destination after full authentication") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: responseHeaderFinal.PayloadLength, + PacketNumber: responseHeaderFinal.SequenceID, + PacketType: oprResponseFinal, + }, + Message: mysqlRespFinal, + }) + } + + } + + var pluginType string + + if handshakeResp, ok := mysqlResp2.(*HandshakeResponseOk); ok { + pluginType = handshakeResp.PluginDetails.Type + } + if pluginType == "cachingSha2PasswordPerformFullAuthentication" { + + clientResponse, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read response from client") + errCh <- err + return nil + } + _, err = destConn.Write(clientResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write client's response to server") + errCh <- err + return nil + } + finalServerResponse, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read final response from server") + errCh <- err + return nil + } + _, err = clientConn.Write(finalServerResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write final response to client") + errCh <- err + return nil + } + oprRequestFinal, requestHeaderFinal, mysqlRequestFinal, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(clientResponse)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from client after full authentication") + errCh <- err + return nil + } + mysqlRequests = append(mysqlRequests, models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeaderFinal.PayloadLength, + PacketNumber: requestHeaderFinal.SequenceID, + PacketType: oprRequestFinal, + }, + Message: mysqlRequestFinal, + }) + isPluginData = true + oprResponseFinal, responseHeaderFinal, mysqlRespFinal, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(finalServerResponse)) + isPluginData = false + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from destination after full authentication") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: responseHeaderFinal.PayloadLength, + PacketNumber: responseHeaderFinal.SequenceID, + PacketType: oprResponseFinal, + }, + Message: mysqlRespFinal, + }) + clientResponse1, err := util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read response from client") + errCh <- err + return nil + } + _, err = destConn.Write(clientResponse1) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write client's response to server") + errCh <- err + return nil + } + finalServerResponse1, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read final response from server") + errCh <- err + return nil + } + _, err = clientConn.Write(finalServerResponse1) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write final response to client") + errCh <- err + return nil + } + finalServerResponsetype1, finalServerResponseHeader1, mysqlRespfinalServerResponse, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(finalServerResponse1)) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from final server response") + errCh <- err + return nil + } + mysqlResponses = append(mysqlResponses, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: finalServerResponseHeader1.PayloadLength, + PacketNumber: finalServerResponseHeader1.SequenceID, + PacketType: finalServerResponsetype1, + }, + Message: mysqlRespfinalServerResponse, + }) + oprRequestFinal1, requestHeaderFinal1, err := decodeEncryptPassword(clientResponse1) + if err != nil { + utils.LogError(logger, err, "failed to decode MySQL packet from client after full authentication") + errCh <- err + return nil + } + type DataMessage struct { + Data []byte + } + mysqlRequests = append(mysqlRequests, models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeaderFinal1.PayloadLength, + PacketNumber: requestHeaderFinal1.SequenceID, + PacketType: oprRequestFinal1, + }, + Message: DataMessage{ + Data: requestHeaderFinal1.Payload, + }, + }) + } + + recordMySQLMessage(ctx, mysqlRequests, mysqlResponses, "config", oprRequest, oprResponse2, mocks) + mysqlRequests = []models.MySQLRequest{} + mysqlResponses = []models.MySQLResponse{} + err = handleClientQueries(ctx, logger, nil, clientConn, destConn, mocks) + if err != nil { + utils.LogError(logger, err, "failed to handle client queries") + errCh <- err + return nil + } + } else if source == "client" { + err := handleClientQueries(ctx, logger, nil, clientConn, destConn, mocks) + if err != nil { + utils.LogError(logger, err, "failed to handle client queries") + errCh <- err + return nil + } + } + } + return nil + }) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + return err + } + +} + +func handleClientQueries(ctx context.Context, logger *zap.Logger, initialBuffer []byte, clientConn, destConn net.Conn, mocks chan<- *models.Mock) error { + firstIteration := true + var ( + mysqlRequests []models.MySQLRequest + mysqlResponses []models.MySQLResponse + ) + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + var queryBuffer []byte + var err error + if firstIteration && initialBuffer != nil { + queryBuffer = initialBuffer + firstIteration = false + } else { + queryBuffer, err = util.ReadBytes(ctx, logger, clientConn) + if err != nil { + utils.LogError(logger, err, "failed to read query from the mysql client") + return err + } + } + if len(queryBuffer) == 0 { + break + } + operation, requestHeader, mysqlRequest, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(queryBuffer)) + if err != nil { + utils.LogError(logger, err, "failed to decode the MySQL packet from the client") + return err + } + mysqlRequests = append([]models.MySQLRequest{}, models.MySQLRequest{ + Header: &models.MySQLPacketHeader{ + PacketLength: requestHeader.PayloadLength, + PacketNumber: requestHeader.SequenceID, + PacketType: operation, + }, + Message: mysqlRequest, + }) + res, err := destConn.Write(queryBuffer) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write query to mysql server") + return err + } + if res == 9 { + return nil + } + queryResponse, err := util.ReadBytes(ctx, logger, destConn) + if err != nil { + utils.LogError(logger, err, "failed to read query response from mysql server") + return err + } + _, err = clientConn.Write(queryResponse) + if err != nil { + if ctx.Err() != nil { + return ctx.Err() + } + utils.LogError(logger, err, "failed to write query response to mysql client") + return err + } + if len(queryResponse) == 0 { + break + } + responseOperation, responseHeader, mysqlResp, err := DecodeMySQLPacket(logger, bytesToMySQLPacket(queryResponse)) + if err != nil { + utils.LogError(logger, err, "failed to decode the MySQL packet from the destination server") + continue + } + if len(queryResponse) == 0 || responseOperation == "COM_STMT_CLOSE" { + break + } + mysqlResponses = append([]models.MySQLResponse{}, models.MySQLResponse{ + Header: &models.MySQLPacketHeader{ + PacketLength: responseHeader.PayloadLength, + PacketNumber: responseHeader.SequenceID, + PacketType: responseOperation, + }, + Message: mysqlResp, + }) + recordMySQLMessage(ctx, mysqlRequests, mysqlResponses, "mocks", operation, responseOperation, mocks) + } + } +} diff --git a/pkg/core/proxy/integrations/mysql/encryptPassword.go b/pkg/core/proxy/integrations/mysql/encryptPassword.go new file mode 100644 index 000000000..613885c29 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/encryptPassword.go @@ -0,0 +1,31 @@ +package mysql + +import ( + "errors" +) + +type PasswordData struct { + PayloadLength uint32 `json:"payload_length,omitempty" yaml:"payload_length,omitempty,flow"` + SequenceID byte `json:"sequence_id,omitempty" yaml:"sequence_id,omitempty,flow"` + Payload []byte `json:"payload,omitempty" yaml:"payload,omitempty,flow"` +} + +func decodeEncryptPassword(data []byte) (string, *PasswordData, error) { + var packetType = "ENCRYPT_PASSWORD" + + if len(data) < 4 { + return packetType, nil, errors.New("data too short for MySQL packet") + } + + payloadLength := Uint24(data[:3]) + sequenceID := data[3] + + if len(data) < 4+int(payloadLength) { + return packetType, nil, errors.New("payload length mismatch") + } + return packetType, &PasswordData{ + PayloadLength: payloadLength, + SequenceID: sequenceID, + Payload: data[4:], + }, nil +} diff --git a/pkg/core/proxy/integrations/mysql/eofPacket.go b/pkg/core/proxy/integrations/mysql/eofPacket.go new file mode 100644 index 000000000..6f2cebc08 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/eofPacket.go @@ -0,0 +1,32 @@ +package mysql + +import ( + "encoding/binary" + "fmt" +) + +type EOFPacket struct { + Header byte `json:"header,omitempty" yaml:"header,omitempty,flow"` + Warnings uint16 `json:"warnings,omitempty" yaml:"warnings,omitempty,flow"` + StatusFlags uint16 `json:"status_flags,omitempty" yaml:"status_flags,omitempty,flow"` +} + +func decodeMYSQLEOF(data []byte) (*EOFPacket, error) { + if len(data) < 1 { + return nil, fmt.Errorf("EOF packet too short") + } + + if data[0] != 0xfe { + return nil, fmt.Errorf("invalid EOF packet header") + } + + packet := &EOFPacket{} + packet.Header = data[0] + + if len(data) >= 5 { + packet.Warnings = binary.LittleEndian.Uint16(data[1:3]) + packet.StatusFlags = binary.LittleEndian.Uint16(data[3:5]) + } + + return packet, nil +} diff --git a/pkg/core/proxy/integrations/mysql/errPacket.go b/pkg/core/proxy/integrations/mysql/errPacket.go new file mode 100644 index 000000000..0322b4b6f --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/errPacket.go @@ -0,0 +1,33 @@ +package mysql + +import ( + "encoding/binary" + "fmt" +) + +type ERRPacket struct { + Header byte `json:"header,omitempty" yaml:"header,omitempty,flow"` + ErrorCode uint16 `json:"error_code,omitempty" yaml:"error_code,omitempty,flow"` + SQLStateMarker string `json:"sql_state_marker,omitempty" yaml:"sql_state_marker,omitempty,flow"` + SQLState string `json:"sql_state,omitempty" yaml:"sql_state,omitempty,flow"` + ErrorMessage string `json:"error_message,omitempty" yaml:"error_message,omitempty,flow"` +} + +func decodeMySQLErr(data []byte) (*ERRPacket, error) { + if len(data) < 9 { + return nil, fmt.Errorf("ERR packet too short") + } + if data[0] != 0xff { + return nil, fmt.Errorf("invalid ERR packet header: %x", data[0]) + } + + packet := &ERRPacket{} + packet.ErrorCode = binary.LittleEndian.Uint16(data[1:3]) + + if data[3] != '#' { + return nil, fmt.Errorf("invalid SQL state marker: %c", data[3]) + } + packet.SQLState = string(data[4:9]) + packet.ErrorMessage = string(data[9:]) + return packet, nil +} diff --git a/pkg/core/proxy/integrations/mysql/executePacket.go b/pkg/core/proxy/integrations/mysql/executePacket.go new file mode 100644 index 000000000..c8bdddf0b --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/executePacket.go @@ -0,0 +1,61 @@ +package mysql + +import ( + "encoding/base64" + "encoding/binary" + "fmt" +) + +type ComStmtExecute struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow"` + Flags byte `json:"flags,omitempty" yaml:"flags,omitempty,flow"` + IterationCount uint32 `json:"iteration_count,omitempty" yaml:"iteration_count,omitempty,flow"` + NullBitmap string `json:"null_bitmap,omitempty" yaml:"null_bitmap,omitempty,flow"` + ParamCount uint16 `json:"param_count,omitempty" yaml:"param_count,omitempty,flow"` + Parameters []BoundParameter `json:"parameters,omitempty" yaml:"parameters,omitempty,flow"` +} + +type BoundParameter struct { + Type byte `json:"type,omitempty" yaml:"type,omitempty,flow"` + Unsigned byte `json:"unsigned,omitempty" yaml:"unsigned,omitempty,flow"` + Value []byte `json:"value,omitempty" yaml:"value,omitempty,flow"` +} + +func decodeComStmtExecute(packet []byte) (ComStmtExecute, error) { + // removed the print statement for cleanliness + if len(packet) < 14 { // the minimal size of the packet without parameters should be 14, not 13 + return ComStmtExecute{}, fmt.Errorf("packet length less than 14 bytes") + } + var NullBitmapValue []byte + + stmtExecute := ComStmtExecute{} + stmtExecute.StatementID = binary.LittleEndian.Uint32(packet[1:5]) + stmtExecute.Flags = packet[5] + stmtExecute.IterationCount = binary.LittleEndian.Uint32(packet[6:10]) + + // the next bytes are reserved for the Null-Bitmap, Parameter Bound Flag and Bound Parameters if they exist + // if the length of the packet is greater than 14, then there are parameters + if len(packet) > 14 { + nullBitmapLength := int((stmtExecute.ParamCount + 7) / 8) + + NullBitmapValue = packet[10 : 10+nullBitmapLength] + stmtExecute.NullBitmap = base64.StdEncoding.EncodeToString(NullBitmapValue) + stmtExecute.ParamCount = binary.LittleEndian.Uint16(packet[10+nullBitmapLength:]) + + // in case new parameters are bound, the new types and values are sent + if packet[10+nullBitmapLength] == 1 { + // read the types and values of the new parameters + stmtExecute.Parameters = make([]BoundParameter, stmtExecute.ParamCount) + for i := 0; i < int(stmtExecute.ParamCount); i++ { + index := 10 + nullBitmapLength + 1 + 2*i + if index+1 >= len(packet) { + return ComStmtExecute{}, fmt.Errorf("packet length less than expected while reading parameters") + } + stmtExecute.Parameters[i].Type = packet[index] + stmtExecute.Parameters[i].Unsigned = packet[index+1] + } + } + } + + return stmtExecute, nil +} diff --git a/pkg/core/proxy/integrations/mysql/handshakeResponseOkPacket.go b/pkg/core/proxy/integrations/mysql/handshakeResponseOkPacket.go new file mode 100644 index 000000000..0537aee3b --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/handshakeResponseOkPacket.go @@ -0,0 +1,142 @@ +package mysql + +import ( + "bytes" + "encoding/base64" + "fmt" + + "go.keploy.io/server/v2/pkg/models" +) + +type HandshakeResponseOk struct { + PacketIndicator string `json:"packet_indicator,omitempty" yaml:"packet_indicator,omitempty,flow"` + PluginDetails PluginDetails `json:"plugin_details,omitempty" yaml:"plugin_details,omitempty,flow"` + RemainingBytes string `json:"remaining_bytes,omitempty" yaml:"remaining_bytes,omitempty,flow"` +} + +func decodeHandshakeResponseOk(data []byte) (*HandshakeResponseOk, error) { + var ( + packetIndicator string + authType string + message string + remainingBytes []byte + ) + if isPluginData { + publicKeyData := string(data[1:]) + authType = "PublicKeyAuthentication" + message = "Public key for authentication" + remainingBytes = []byte(publicKeyData) + } + + switch data[0] { + case models.OK: + packetIndicator = "OK" + case models.AuthMoreData: + packetIndicator = "AuthMoreData" + case models.EOF: + packetIndicator = "EOF" + default: + packetIndicator = "Unknown" + } + + if data[0] == models.AuthMoreData { + count := int(data[0]) + var authData = data[1 : count+1] + switch handshakePluginName { + case "caching_sha2_password": + switch len(authData) { + case 1: + switch authData[0] { + case models.CachingSha2PasswordFastAuthSuccess: + authType = "cachingSha2PasswordFastAuthSuccess" + message = "Ok" + remainingBytes = data[count+1:] + case models.CachingSha2PasswordPerformFullAuthentication: + authType = "cachingSha2PasswordPerformFullAuthentication" + message = "" + remainingBytes = data[count+1:] + } + } + } + } + + return &HandshakeResponseOk{ + PacketIndicator: packetIndicator, + PluginDetails: PluginDetails{ + Type: authType, + Message: message, + }, + RemainingBytes: base64.StdEncoding.EncodeToString(remainingBytes), + }, nil +} + +func encodeHandshakeResponseOk(packet *models.MySQLHandshakeResponseOk) ([]byte, error) { + var buf bytes.Buffer + var payload []byte + RemainingBytesValue, _ := base64.StdEncoding.DecodeString(packet.RemainingBytes) + if packet.PluginDetails.Type == "PublicKeyAuthentication" { + publicKeydata := []byte(RemainingBytesValue) + + // Calculate the payload length + payloadLength := len(publicKeydata) + 1 // +1 for the MySQL protocol version byte + + // Construct the MySQL packet header + header := make([]byte, 4) + header[0] = byte(payloadLength & 0xFF) // Least significant byte + header[1] = byte((payloadLength >> 8) & 0xFF) // Middle byte + header[2] = byte((payloadLength >> 16) & 0xFF) // Most significant byte + header[3] = 4 // Sequence ID + + // Append the MySQL protocol version byte and the public key data to the header + finalData := append(header, 0x01) // MySQL protocol version + finalData = append(finalData, publicKeydata...) + + buf.Write(finalData) + payload = buf.Bytes() + } else { + + var packetIndicator byte + switch packet.PacketIndicator { + case "OK": + packetIndicator = models.OK + case "AuthMoreData": + packetIndicator = models.AuthMoreData + case "EOF": + packetIndicator = models.EOF + default: + return nil, fmt.Errorf("unknown packet indicator") + } + + buf.WriteByte(packetIndicator) + + if packet.PacketIndicator == "AuthMoreData" { + var authData byte + switch packet.PluginDetails.Type { + case "cachingSha2PasswordFastAuthSuccess": + authData = models.CachingSha2PasswordFastAuthSuccess + case "cachingSha2PasswordPerformFullAuthentication": + authData = models.CachingSha2PasswordPerformFullAuthentication + default: + return nil, fmt.Errorf("unknown auth type") + } + + // Write auth data + buf.WriteByte(authData) + } + + // Write remaining bytes if available + if len(RemainingBytesValue) > 0 { + buf.Write(RemainingBytesValue) + } + + // Create header + header := make([]byte, 4) + header[0] = 2 // sequence number + header[1] = 0 + header[2] = 0 + header[3] = 2 + // Prepend header to the payload + payload = append(header, buf.Bytes()...) + } + return payload, nil +} diff --git a/pkg/core/proxy/integrations/mysql/handshakeResponsePacket.go b/pkg/core/proxy/integrations/mysql/handshakeResponsePacket.go new file mode 100644 index 000000000..2dd419426 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/handshakeResponsePacket.go @@ -0,0 +1,168 @@ +package mysql + +import ( + "bytes" + "encoding/base64" + "encoding/binary" + "errors" +) + +// constants for capability flags +const ( + CLIENT_PLUGIN_AUTH = 0x00080000 + CLIENT_CONNECT_WITH_DB = 0x00000008 + CLIENT_CONNECT_ATTRS = 0x00100000 + CLIENT_ZSTD_COMPRESSION_ALGORITHM = 0x00010000 +) + +type HandshakeResponse struct { + CapabilityFlags uint32 `json:"capability_flags,omitempty" yaml:"capability_flags,omitempty,flow"` + MaxPacketSize uint32 `json:"max_packet_size,omitempty" yaml:"max_packet_size,omitempty,flow"` + CharacterSet uint8 `json:"character_set,omitempty" yaml:"character_set,omitempty,flow"` + Reserved int `json:"reserved,omitempty" yaml:"reserved,omitempty,flow"` + Username string `json:"username,omitempty" yaml:"username,omitempty,flow"` + AuthData string `json:"auth_data,omitempty" yaml:"auth_data,omitempty,flow"` + Database string `json:"database,omitempty" yaml:"database,omitempty,flow"` + AuthPluginName string `json:"auth_plugin_name,omitempty" yaml:"auth_plugin_name,omitempty,flow"` + ConnectAttributes map[string]string `json:"connect_attributes,omitempty" yaml:"connect_attributes,omitempty,flow"` + ZstdCompressionLevel byte `json:"zstdcompressionlevel,omitempty" yaml:"zstdcompressionlevel,omitempty,flow"` +} + +func decodeHandshakeResponse(data []byte) (*HandshakeResponse, error) { + if len(data) < 32 { + return nil, errors.New("handshake response packet too short") + } + packet := &HandshakeResponse{} + var authDataByte []byte + var reservedBytes [23]byte + packet.CapabilityFlags = binary.LittleEndian.Uint32(data[:4]) + data = data[4:] + + packet.MaxPacketSize = binary.LittleEndian.Uint32(data[:4]) + data = data[4:] + + packet.CharacterSet = data[0] + data = data[1:] + + copy(reservedBytes[:], data[:23]) + data = data[23:] + + idx := bytes.IndexByte(data, 0x00) + if idx == -1 { + return nil, errors.New("malformed handshake response packet: missing null terminator for Username") + } + packet.Username = string(data[:idx]) + data = data[idx+1:] + + if packet.CapabilityFlags&CLIENT_PLUGIN_AUTH != 0 { + length := int(data[0]) + data = data[1:] + + if length > 0 { + if len(data) < length { + return nil, errors.New("handshake response packet too short for auth data") + } + authDataByte = data[:length] + data = data[length:] + } + } else { + idx = bytes.IndexByte(data, 0x00) + if idx != -1 { + authDataByte = data[:idx] + data = data[idx+1:] + } + } + + if packet.CapabilityFlags&CLIENT_CONNECT_WITH_DB != 0 { + idx = bytes.IndexByte(data, 0x00) + if idx != -1 { + packet.Database = string(data[:idx]) + data = data[idx+1:] + } + } + + if packet.CapabilityFlags&CLIENT_PLUGIN_AUTH != 0 { + idx = bytes.IndexByte(data, 0x00) + if idx == -1 { + return nil, errors.New("malformed handshake response packet: missing null terminator for AuthPluginName") + } + packet.AuthPluginName = string(data[:idx]) + data = data[idx+1:] + } + + if packet.CapabilityFlags&CLIENT_CONNECT_ATTRS != 0 { + if len(data) < 4 { + return nil, errors.New("handshake response packet too short for conn attributes") + } + + totalLength, isNull, n := decodeLengthEncodedInteger(data) + if isNull || n == 0 { + return nil, errors.New("error decoding total length of conn attributes") + } + data = data[n:] + + attributesData := data[:totalLength] + data = data[totalLength:] + + packet.ConnectAttributes = make(map[string]string) + for len(attributesData) > 0 { + keyLength, isNull, n := decodeLengthEncodedInteger(attributesData) + if isNull { + return nil, errors.New("malformed handshake response packet: null length encoded integer for conn attribute key") + } + attributesData = attributesData[n:] + + key := string(attributesData[:keyLength]) + attributesData = attributesData[keyLength:] + + valueLength, isNull, n := decodeLengthEncodedInteger(attributesData) + if isNull { + return nil, errors.New("malformed handshake response packet: null length encoded integer for conn attribute value") + } + attributesData = attributesData[n:] + + value := string(attributesData[:valueLength]) + attributesData = attributesData[valueLength:] + + packet.ConnectAttributes[key] = value + } + } + if len(data) > 0 { + if packet.CapabilityFlags&CLIENT_ZSTD_COMPRESSION_ALGORITHM != 0 { + if len(data) < 1 { + return nil, errors.New("handshake response packet too short for ZSTD compression level") + } + packet.ZstdCompressionLevel = data[0] + } + } + packet.AuthData = base64.StdEncoding.EncodeToString(authDataByte) + packet.Reserved = len(reservedBytes) + return packet, nil +} +func decodeLengthEncodedInteger(b []byte) (length int, isNull bool, bytesRead int) { + if len(b) == 0 { + return 0, true, 0 + } + + switch b[0] { + case 0xfb: + return 0, true, 1 + case 0xfc: + if len(b) < 3 { + return 0, false, 0 + } + return int(binary.LittleEndian.Uint16(b[1:3])), false, 3 + case 0xfd: + if len(b) < 4 { + return 0, false, 0 + } + return int(b[1]) | int(b[2])<<8 | int(b[3])<<16, false, 4 + case 0xfe: + if len(b) < 9 { + return 0, false, 0 + } + return int(binary.LittleEndian.Uint64(b[1:9])), false, 9 + default: + return int(b[0]), false, 1 + } +} diff --git a/pkg/core/proxy/integrations/mysql/handshakeV10Packet.go b/pkg/core/proxy/integrations/mysql/handshakeV10Packet.go new file mode 100644 index 000000000..d4c8d8413 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/handshakeV10Packet.go @@ -0,0 +1,166 @@ +package mysql + +import ( + "bytes" + "encoding/base64" + "encoding/binary" + "errors" + "fmt" + + "go.keploy.io/server/v2/pkg/models" +) + +type HandshakeV10Packet struct { + ProtocolVersion uint8 `json:"protocol_version,omitempty" yaml:"protocol_version,omitempty,flow"` + ServerVersion string `json:"server_version,omitempty" yaml:"server_version,omitempty,flow"` + ConnectionID uint32 `json:"connection_id,omitempty" yaml:"connection_id,omitempty,flow"` + AuthPluginData string `json:"auth_plugin_data,omitempty" yaml:"auth_plugin_data,omitempty,flow"` + CapabilityFlags uint32 `json:"capability_flags,omitempty" yaml:"capability_flags,omitempty,flow"` + CharacterSet uint8 `json:"character_set,omitempty" yaml:"character_set,omitempty,flow"` + StatusFlags uint16 `json:"status_flags,omitempty" yaml:"status_flags,omitempty,flow"` + AuthPluginName string `json:"auth_plugin_name,omitempty" yaml:"auth_plugin_name,omitempty,flow"` +} + +func decodeMySQLHandshakeV10(data []byte) (*HandshakeV10Packet, error) { + if len(data) < 4 { + return nil, fmt.Errorf("handshake packet too short") + } + var authPluginDataBytes []byte + packet := &HandshakeV10Packet{} + packet.ProtocolVersion = data[0] + + idx := bytes.IndexByte(data[1:], 0x00) + if idx == -1 { + return nil, fmt.Errorf("malformed handshake packet: missing null terminator for ServerVersion") + } + packet.ServerVersion = string(data[1 : 1+idx]) + data = data[1+idx+1:] + + if len(data) < 4 { + return nil, fmt.Errorf("handshake packet too short for ConnectionID") + } + packet.ConnectionID = binary.LittleEndian.Uint32(data[:4]) + data = data[4:] + + if len(data) < 9 { // 8 bytes of AuthPluginData + 1 byte filler + return nil, fmt.Errorf("handshake packet too short for AuthPluginData") + } + authPluginDataBytes = append([]byte{}, data[:8]...) + data = data[9:] // Skip 8 bytes of AuthPluginData and 1 byte filler + + if len(data) < 5 { // Capability flags (2 bytes), character set (1 byte), status flags (2 bytes) + return nil, fmt.Errorf("handshake packet too short for flags") + } + capabilityFlagsLower := binary.LittleEndian.Uint16(data[:2]) + data = data[2:] + + packet.CharacterSet = data[0] + data = data[1:] + + packet.StatusFlags = binary.LittleEndian.Uint16(data[:2]) + data = data[2:] + + capabilityFlagsUpper := binary.LittleEndian.Uint16(data[:2]) + data = data[2:] + + packet.CapabilityFlags = uint32(capabilityFlagsLower) | uint32(capabilityFlagsUpper)<<16 + + if packet.CapabilityFlags&0x800000 != 0 { + if len(data) < 11 { // AuthPluginDataLen (1 byte) + Reserved (10 bytes) + return nil, fmt.Errorf("handshake packet too short for AuthPluginDataLen") + } + authPluginDataLen := int(data[0]) + data = data[11:] // Skip 1 byte AuthPluginDataLen and 10 bytes reserved + + if authPluginDataLen > 8 { + lenToRead := min(authPluginDataLen-8, len(data)) + authPluginDataBytes = append(authPluginDataBytes, data[:lenToRead]...) + data = data[lenToRead:] + } + } else { + data = data[10:] // Skip reserved 10 bytes if CLIENT_PLUGIN_AUTH is not set + } + + if len(data) == 0 { + return nil, fmt.Errorf("handshake packet too short for AuthPluginName") + } + + idx = bytes.IndexByte(data, 0x00) + if idx == -1 { + return nil, fmt.Errorf("malformed handshake packet: missing null terminator for AuthPluginName") + } + packet.AuthPluginName = string(data[:idx]) + packet.AuthPluginData = base64.StdEncoding.EncodeToString(authPluginDataBytes) + return packet, nil +} + +// Helper function to calculate minimum of two integers +func min(a, b int) int { + if a < b { + return a + } + return b +} +func encodeHandshakePacket(packet *models.MySQLHandshakeV10Packet) ([]byte, error) { + buf := new(bytes.Buffer) + AuthPluginDataValue, _ := base64.StdEncoding.DecodeString(string(packet.AuthPluginData)) + // Protocol version + buf.WriteByte(packet.ProtocolVersion) + + // Server version + buf.WriteString(packet.ServerVersion) + buf.WriteByte(0x00) // Null terminator + + // Connection ID + if err := binary.Write(buf, binary.LittleEndian, packet.ConnectionID); err != nil { + return nil, err + } + + // Auth-plugin-data-part-1 (first 8 bytes) + if len(AuthPluginDataValue) < 8 { + return nil, errors.New("auth plugin data too short") + } + buf.Write(AuthPluginDataValue[:8]) + + // Filler + buf.WriteByte(0x00) + + // Capability flags + if err := binary.Write(buf, binary.LittleEndian, uint16(packet.CapabilityFlags)); err != nil { + return nil, err + } + // binary.Write(buf, binary.LittleEndian, uint16(packet.CapabilityFlags)) + + // Character set + buf.WriteByte(packet.CharacterSet) + + // Status flags + if err := binary.Write(buf, binary.LittleEndian, packet.StatusFlags); err != nil { + return nil, err + } + if err := binary.Write(buf, binary.LittleEndian, uint16(packet.CapabilityFlags>>16)); err != nil { + return nil, err + } + + // Length of auth-plugin-data + if packet.CapabilityFlags&0x800000 != 0 && len(AuthPluginDataValue) >= 21 { + buf.WriteByte(byte(len(AuthPluginDataValue))) // Length of entire auth plugin data + } else { + buf.WriteByte(0x00) + } + // Reserved (10 zero bytes) + buf.Write(make([]byte, 10)) + + // Auth-plugin-data-part-2 (remaining auth data) + if packet.CapabilityFlags&0x800000 != 0 && len(AuthPluginDataValue) >= 21 { + + buf.Write(AuthPluginDataValue[8:]) // Write all remaining bytes of auth plugin data + } + // Auth-plugin name + if packet.CapabilityFlags&0x800000 != 0 { + buf.WriteString(packet.AuthPluginName) + buf.WriteByte(0x00) // Null terminator + } + + return buf.Bytes(), nil +} diff --git a/pkg/core/proxy/integrations/mysql/match.go b/pkg/core/proxy/integrations/mysql/match.go new file mode 100644 index 000000000..5db69c736 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/match.go @@ -0,0 +1,117 @@ +package mysql + +import ( + "context" + "fmt" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/models" +) + +func matchRequestWithMock(ctx context.Context, mysqlRequest models.MySQLRequest, configMocks, tcsMocks []*models.Mock, mockDb integrations.MockMemDb) (*models.MySQLResponse, int, string, error) { + //TODO: any reason to write the similar code twice? + allMocks := append([]*models.Mock(nil), configMocks...) + allMocks = append(allMocks, tcsMocks...) + var bestMatch *models.MySQLResponse + var matchedIndex int + var matchedReqIndex int + var mockType string + maxMatchCount := 0 + + for i, mock := range allMocks { + if ctx.Err() != nil { + return nil, -1, "", ctx.Err() + } + for j, mockReq := range mock.Spec.MySQLRequests { + if ctx.Err() != nil { + return nil, -1, "", ctx.Err() + } + matchCount := compareMySQLRequests(mysqlRequest, mockReq) + if matchCount > maxMatchCount { + maxMatchCount = matchCount + matchedIndex = i + matchedReqIndex = j + mockType = mock.Spec.Metadata["type"] + if len(mock.Spec.MySQLResponses) > j { + if mockType == "config" { + responseCopy := mock.Spec.MySQLResponses[j] + bestMatch = &responseCopy + } else { + bestMatch = &mock.Spec.MySQLResponses[j] + } + } + } + } + } + + if bestMatch == nil { + return nil, -1, "", fmt.Errorf("no matching mock found") + } + + if mockType == "config" { + if matchedIndex >= len(configMocks) { + return nil, -1, "", fmt.Errorf("index out of range in configMocks") + } + configMocks[matchedIndex].Spec.MySQLRequests = append(configMocks[matchedIndex].Spec.MySQLRequests[:matchedReqIndex], configMocks[matchedIndex].Spec.MySQLRequests[matchedReqIndex+1:]...) + configMocks[matchedIndex].Spec.MySQLResponses = append(configMocks[matchedIndex].Spec.MySQLResponses[:matchedReqIndex], configMocks[matchedIndex].Spec.MySQLResponses[matchedReqIndex+1:]...) + if len(configMocks[matchedIndex].Spec.MySQLResponses) == 0 { + configMocks = append(configMocks[:matchedIndex], configMocks[matchedIndex+1:]...) + err := mockDb.FlagMockAsUsed(configMocks[matchedIndex]) + if err != nil { + return nil, -1, "", fmt.Errorf("failed to flag mock as used: %v", err.Error()) + } + // deleteConfigMock + } + //h.SetConfigMocks(configMocks) + } else { + realIndex := matchedIndex - len(configMocks) + if realIndex < 0 || realIndex >= len(tcsMocks) { + return nil, -1, "", fmt.Errorf("index out of range in tcsMocks") + } + tcsMocks[realIndex].Spec.MySQLRequests = append(tcsMocks[realIndex].Spec.MySQLRequests[:matchedReqIndex], tcsMocks[realIndex].Spec.MySQLRequests[matchedReqIndex+1:]...) + tcsMocks[realIndex].Spec.MySQLResponses = append(tcsMocks[realIndex].Spec.MySQLResponses[:matchedReqIndex], tcsMocks[realIndex].Spec.MySQLResponses[matchedReqIndex+1:]...) + if len(tcsMocks[realIndex].Spec.MySQLResponses) == 0 { + tcsMocks = append(tcsMocks[:realIndex], tcsMocks[realIndex+1:]...) + err := mockDb.FlagMockAsUsed(tcsMocks[realIndex]) + if err != nil { + return nil, -1, "", fmt.Errorf("failed to flag mock as used: %v", err.Error()) + } + // deleteTcsMock + } + //h.SetTcsMocks(tcsMocks) + } + + return bestMatch, matchedIndex, mockType, nil +} + +func compareMySQLRequests(req1, req2 models.MySQLRequest) int { + matchCount := 0 + + // Compare Header fields + if req1.Header.PacketType == "MySQLQuery" && req2.Header.PacketType == "MySQLQuery" { + packet1 := req1.Message + packet, ok := packet1.(*QueryPacket) + if !ok { + return 0 + } + packet2 := req2.Message + + packet3, ok := packet2.(*models.MySQLQueryPacket) + if !ok { + return 0 + } + if packet.Query == packet3.Query { + matchCount += 5 + } + } + if req1.Header.PacketLength == req2.Header.PacketLength { + matchCount++ + } + if req1.Header.PacketNumber == req2.Header.PacketNumber { + matchCount++ + } + if req1.Header.PacketType == req2.Header.PacketType { + matchCount++ + } + return matchCount +} diff --git a/pkg/core/proxy/integrations/mysql/mysql.go b/pkg/core/proxy/integrations/mysql/mysql.go new file mode 100644 index 000000000..4e014c9ce --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/mysql.go @@ -0,0 +1,79 @@ +package mysql + +import ( + "context" + "net" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/utils" + + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +func init() { + integrations.Register("mysql", NewMySQL) +} + +//TODO: seggregate the packet types and the operations into meaningful packages. +//TODO: follow the same pattern for naming the functions and the variables & structs. + +type MySQL struct { + logger *zap.Logger +} + +func NewMySQL(logger *zap.Logger) integrations.Integrations { + return &MySQL{ + logger: logger, + } +} + +func (m *MySQL) MatchType(_ context.Context, _ []byte) bool { + //Returning false here because sql parser is using the ports to check if the packet is mysql or not. + return false +} + +func (m *MySQL) RecordOutgoing(ctx context.Context, src net.Conn, dst net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + logger := m.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", ctx.Value(models.ClientConnectionIDKey).(string)), zap.Any("Destination ConnectionID", ctx.Value(models.DestConnectionIDKey).(string))) + + err := encodeMySQL(ctx, logger, src, dst, mocks, opts) + if err != nil { + utils.LogError(logger, err, "failed to encode the mysql message into the yaml") + return err + } + return nil +} + +func (m *MySQL) MockOutgoing(ctx context.Context, src net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + logger := m.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", util.GetNextID()), zap.Any("Destination ConnectionID", util.GetNextID())) + + err := decodeMySQL(ctx, logger, src, dstCfg, mockDb, opts) + if err != nil { + utils.LogError(logger, err, "failed to decode the mysql message from the yaml") + return err + } + return nil +} + +func recordMySQLMessage(_ context.Context, mysqlRequests []models.MySQLRequest, mysqlResponses []models.MySQLResponse, name, operation, responseOperation string, mocks chan<- *models.Mock) { + + meta := map[string]string{ + "type": name, + "operation": operation, + "responseOperation": responseOperation, + } + mysqlMock := &models.Mock{ + Version: models.GetVersion(), + Kind: models.SQL, + Name: "mocks", + Spec: models.MockSpec{ + Metadata: meta, + MySQLRequests: mysqlRequests, + MySQLResponses: mysqlResponses, + Created: time.Now().Unix(), + }, + } + mocks <- mysqlMock +} diff --git a/pkg/core/proxy/integrations/mysql/okPacket.go b/pkg/core/proxy/integrations/mysql/okPacket.go new file mode 100644 index 000000000..38203ee9e --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/okPacket.go @@ -0,0 +1,92 @@ +package mysql + +import ( + "bytes" + "encoding/binary" + "fmt" + + "go.keploy.io/server/v2/pkg/models" +) + +type OKPacket struct { + AffectedRows uint64 `json:"affected_rows,omitempty" yaml:"affected_rows,omitempty,flow"` + LastInsertID uint64 `json:"last_insert_id,omitempty" yaml:"last_insert_id,omitempty,flow"` + StatusFlags uint16 `json:"status_flags,omitempty" yaml:"status_flags,omitempty,flow"` + Warnings uint16 `json:"warnings,omitempty" yaml:"warnings,omitempty,flow"` + Info string `json:"info,omitempty" yaml:"info,omitempty,flow"` +} + +func decodeMySQLOK(data []byte) (*OKPacket, error) { + if len(data) < 7 { + return nil, fmt.Errorf("OK packet too short") + } + + packet := &OKPacket{} + var err error + //identifier of ok packet + var offset = 1 + // Decode affected rows + packet.AffectedRows, err = readLengthEncodedIntegerOff(data, &offset) + if err != nil { + return nil, fmt.Errorf("failed to decode info: %w", err) + } + // Decode last insert ID + packet.LastInsertID, err = readLengthEncodedIntegerOff(data, &offset) + if err != nil { + return nil, fmt.Errorf("failed to decode info: %w", err) + } + + if len(data) < offset+4 { + return nil, fmt.Errorf("OK packet too short") + } + + packet.StatusFlags = binary.LittleEndian.Uint16(data[offset:]) + offset += 2 + + packet.Warnings = binary.LittleEndian.Uint16(data[offset:]) + offset += 2 + + if offset < len(data) { + packet.Info = string(data[offset:]) + } + + return packet, nil +} + +func encodeMySQLOK(packet *models.MySQLOKPacket, header *models.MySQLPacketHeader) ([]byte, error) { + buf := new(bytes.Buffer) + // payload (without the header) + payload := new(bytes.Buffer) + // header (0x00) + payload.WriteByte(0x00) + // affected rows + payload.Write(encodeLengthEncodedInteger(packet.AffectedRows)) + //last insert ID + payload.Write(encodeLengthEncodedInteger(packet.LastInsertID)) + // status flags + if err := binary.Write(payload, binary.LittleEndian, packet.StatusFlags); err != nil { + return nil, err + } + // warnings + if err := binary.Write(payload, binary.LittleEndian, packet.Warnings); err != nil { + return nil, err + } + // info + if len(packet.Info) > 0 { + payload.WriteString(packet.Info) + } + + // header bytes + // packet length (3 bytes) + packetLength := uint32(payload.Len()) + buf.WriteByte(byte(packetLength)) + buf.WriteByte(byte(packetLength >> 8)) + buf.WriteByte(byte(packetLength >> 16)) + // Write packet sequence number (1 byte) + buf.WriteByte(header.PacketNumber) + + // Write payload + buf.Write(payload.Bytes()) + + return buf.Bytes(), nil +} diff --git a/pkg/core/proxy/integrations/mysql/operation.go b/pkg/core/proxy/integrations/mysql/operation.go new file mode 100644 index 000000000..4a1045f2e --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/operation.go @@ -0,0 +1,522 @@ +package mysql + +import ( + "bytes" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +type PacketHeader struct { + PacketLength uint8 `yaml:"packet_length"` + PacketSequenceID uint8 `yaml:"packet_sequence_id"` +} + +type CustomPacketHeader struct { + PayloadLength uint32 `yaml:"payload_length"` // MySQL packet payload length + SequenceID uint8 `yaml:"sequence_id"` // MySQL packet sequence ID +} + +type CustomPacket struct { + Header CustomPacketHeader `yaml:"header"` + Payload []byte `yaml:"payload"` +} + +type ColumnDefinition struct { + PacketHeader PacketHeader `yaml:"packet_header"` + Catalog string `yaml:"catalog"` + Schema string `yaml:"schema"` + Table string `yaml:"table"` + OrgTable string `yaml:"org_table"` + Name string `yaml:"name"` + OrgName string `yaml:"org_name"` + NextLength uint64 `yaml:"next_length"` + CharacterSet uint16 `yaml:"character_set"` + ColumnLength uint32 `yaml:"column_length"` + ColumnType byte `yaml:"column_type"` + Flags uint16 `yaml:"flags"` + Decimals byte `yaml:"decimals"` + DefaultValue string `yaml:"string"` +} + +type RowDataPacket struct { + Data []byte `yaml:"data"` +} + +type PluginDetails struct { + Type string `yaml:"type"` + Message string `yaml:"message"` +} + +type CapabilityFlags uint32 + +var handshakePluginName string + +func encodeToBinary(packet interface{}, header *models.MySQLPacketHeader, operation string, sequence int) ([]byte, error) { + var data []byte + var err error + var bypassHeader = false + innerPacket, ok := packet.(*interface{}) + if ok { + packet = *innerPacket + } + switch operation { + case "MySQLHandshakeV10": + p, ok := packet.(*models.MySQLHandshakeV10Packet) + if !ok { + return nil, fmt.Errorf("invalid packet type for HandshakeV10Packet: expected *HandshakeV10Packet, got %T", packet) + } + data, err = encodeHandshakePacket(p) + case "HANDSHAKE_RESPONSE_OK": + bypassHeader = true + p, ok := packet.(*models.MySQLHandshakeResponseOk) + if !ok { + return nil, fmt.Errorf("invalid packet type for HandshakeResponse: expected *HandshakeResponse, got %T", packet) + } + data, err = encodeHandshakeResponseOk(p) + case "AUTH_SWITCH_REQUEST": + p, ok := packet.(*models.AuthSwitchRequestPacket) + if !ok { + return nil, fmt.Errorf("invalid packet type for HandshakeV10Packet: expected *HandshakeV10Packet, got %T", packet) + } + data, err = encodeAuthSwitchRequest(p) + case "AUTH_SWITCH_RESPONSE": + p, ok := packet.(*models.AuthSwitchResponsePacket) + if !ok { + return nil, fmt.Errorf("invalid packet type for HandshakeV10Packet: expected *HandshakeV10Packet, got %T", packet) + } + data, err = encodeAuthSwitchResponse(p) + + case "MySQLOK": + p, ok := packet.(*models.MySQLOKPacket) + if !ok { + return nil, fmt.Errorf("invalid packet type for HandshakeResponse: expected *HandshakeResponse, got %T", packet) + } + data, err = encodeMySQLOK(p, header) + bypassHeader = true + case "COM_STMT_PREPARE_OK": + p, ok := packet.(*models.MySQLStmtPrepareOk) + if !ok { + return nil, fmt.Errorf("invalid packet type for HandshakeResponse: expected *HandshakeResponse, got %T", packet) + } + data, err = encodeStmtPrepareOk(p) + bypassHeader = true + case "RESULT_SET_PACKET": + p, ok := packet.(*models.MySQLResultSet) + if !ok { + return nil, fmt.Errorf("invalid packet for result set") + } + data, err = encodeMySQLResultSet(p) + bypassHeader = true + default: + return nil, errors.New("unknown operation type") + } + + if err != nil { + return nil, err + } + if !bypassHeader { + header := make([]byte, 4) + binary.LittleEndian.PutUint32(header, uint32(len(data))) + header[3] = byte(sequence) + return append(header, data...), nil + } + return data, nil +} + +func DecodeMySQLPacket(logger *zap.Logger, packet CustomPacket) (string, CustomPacketHeader, interface{}, error) { + data := packet.Payload + header := packet.Header + var packetData interface{} + var packetType string + var err error + + if len(data) < 1 { + return "", CustomPacketHeader{}, nil, fmt.Errorf("Invalid packet: Payload is empty") + } + + switch { + case lastCommand == 0x03: + switch { + case data[0] == 0x00: // OK Packet + packetType = "MySQLOK" + packetData, err = decodeMySQLOK(data) + lastCommand = 0x00 // Reset the last command + + case data[0] == 0xFF: // Error Packet + packetType = "MySQLErr" + packetData, err = decodeMySQLErr(data) + lastCommand = 0x00 // Reset the last command + + case isLengthEncodedInteger(data[0]): // ResultSet Packet + packetType = "RESULT_SET_PACKET" + packetData, err = parseResultSet(data) + lastCommand = 0x00 // Reset the last command + + default: + packetType = "Unknown" + packetData = data + logger.Debug("unknown packet type after COM_QUERY", zap.Int("unknownPacketTypeInt", int(data[0]))) + } + case data[0] == 0x0e: // COM_PING + packetType = "COM_PING" + packetData, err = decodeComPing(data) + lastCommand = 0x0e + case data[0] == 0x17: // COM_STMT_EXECUTE + packetType = "COM_STMT_EXECUTE" + packetData, err = decodeComStmtExecute(data) + lastCommand = 0x17 + case data[0] == 0x1c: // COM_STMT_FETCH + packetType = "COM_STMT_FETCH" + packetData, err = decodeComStmtFetch(data) + lastCommand = 0x1c + case data[0] == 0x16: // COM_STMT_PREPARE + packetType = "COM_STMT_PREPARE" + packetData, err = decodeComStmtPrepare(data) + lastCommand = 0x16 + case data[0] == 0x19: // COM_STMT_CLOSE + if len(data) > 11 { + + packetType = "COM_STMT_CLOSE_WITH_PREPARE" + packetData, err = decodeComStmtCloseMoreData(data) + lastCommand = 0x16 + } else { + packetType = "COM_STMT_CLOSE" + packetData, err = decodeComStmtClose(data) + lastCommand = 0x19 + } + case data[0] == 0x11: // COM_CHANGE_USER + packetType = "COM_CHANGE_USER" + packetData, err = decodeComChangeUser(data) + lastCommand = 0x11 + + case data[0] == 0x04: // Result Set Packet + packetType = "RESULT_SET_PACKET" + packetData, err = parseResultSet(data) + lastCommand = 0x04 + case data[0] == 0x0A: // MySQLHandshakeV10 + packetType = "MySQLHandshakeV10" + packetData, err = decodeMySQLHandshakeV10(data) + handshakePacket, _ := packetData.(*HandshakeV10Packet) + handshakePluginName = handshakePacket.AuthPluginName + lastCommand = 0x0A + case data[0] == 0x03: // MySQLQuery + packetType = "MySQLQuery" + packetData, err = decodeMySQLQuery(data) + lastCommand = 0x03 + case data[0] == 0x00: // MySQLOK or COM_STMT_PREPARE_OK + if lastCommand == 0x16 { + packetType = "COM_STMT_PREPARE_OK" + packetData, err = decodeComStmtPrepareOk(data) + } else { + packetType = "MySQLOK" + packetData, err = decodeMySQLOK(data) + } + lastCommand = 0x00 + case data[0] == 0xFF: // MySQLErr + packetType = "MySQLErr" + packetData, err = decodeMySQLErr(data) + lastCommand = 0xFF + case data[0] == 0xFE && len(data) > 1: // Auth Switch Packet + packetType = "AUTH_SWITCH_REQUEST" + packetData, err = decodeAuthSwitchRequest(data) + lastCommand = 0xFE + case data[0] == 0xFE || expectingAuthSwitchResponse: + packetType = "AUTH_SWITCH_RESPONSE" + packetData, err = decodeAuthSwitchResponse(data) + expectingAuthSwitchResponse = false + case data[0] == 0xFE: // EOF packet + packetType = "MySQLEOF" + packetData, err = decodeMYSQLEOF(data) + lastCommand = 0xFE + case data[0] == 0x02: // New packet type + packetType = "AUTH_MORE_DATA" + packetData, err = decodeAuthMoreData(data) + lastCommand = 0x02 + case data[0] == 0x18: // SEND_LONG_DATA Packet + packetType = "COM_STMT_SEND_LONG_DATA" + packetData, err = decodeComStmtSendLongData(data) + lastCommand = 0x18 + case data[0] == 0x1a: // STMT_RESET Packet + packetType = "COM_STMT_RESET" + packetData, err = decodeComStmtReset(data) + lastCommand = 0x1a + case data[0] == 0x8d || expectingHandshakeResponse || expectingHandshakeResponseTest: // Handshake Response packet + packetType = "HANDSHAKE_RESPONSE" + packetData, err = decodeHandshakeResponse(data) + lastCommand = 0x8d // This value may differ depending on the handshake response protocol version + case data[0] == 0x01: // Handshake Response packet + if len(data) == 1 { + packetType = "COM_QUIT" + packetData = nil + } else { + packetType = "HANDSHAKE_RESPONSE_OK" + packetData, err = decodeHandshakeResponseOk(data) + } + default: + packetType = "Unknown" + packetData = data + logger.Debug("unknown packet type", zap.Int("unknownPacketTypeInt", int(data[0]))) + } + + if err != nil { + return "", CustomPacketHeader{}, nil, err + } + if models.GetMode() != "test" { + logger.Debug("Packet Info", + zap.String("PacketType", packetType), + zap.ByteString("Data", data)) + } + if (models.GetMode()) == "test" { + lastCommand = 0x00 + } + return packetType, header, packetData, nil +} +func isLengthEncodedInteger(b byte) bool { + // This is a simplified check. You may need a more robust check based on MySQL protocol. + return b != 0x00 && b != 0xFF +} + +func (p *CustomPacket) Encode() ([]byte, error) { + packet := make([]byte, 4) + + binary.LittleEndian.PutUint32(packet[:3], p.Header.PayloadLength) + packet[3] = p.Header.SequenceID + + // Simplistic interpretation of MySQL's COM_QUERY + if p.Payload[0] == 0x03 { + query := string(p.Payload[1:]) + queryObj := map[string]interface{}{ + "command": "COM_QUERY", + "query": query, + } + queryJSON, _ := json.Marshal(queryObj) + packet = append(packet, queryJSON...) + } + + return packet, nil +} + +var lastCommand byte // This is global and will remember the last command + +func encodeLengthEncodedInteger(n uint64) []byte { + var buf []byte + + if n <= 250 { + buf = append(buf, byte(n)) + } else if n <= 0xffff { + buf = append(buf, 0xfc, byte(n), byte(n>>8)) + } else if n <= 0xffffff { + buf = append(buf, 0xfd, byte(n), byte(n>>8), byte(n>>16)) + } else { + buf = append(buf, 0xfe, byte(n), byte(n>>8), byte(n>>16), byte(n>>24), byte(n>>32), byte(n>>40), byte(n>>48), byte(n>>56)) + } + + return buf +} + +func writeLengthEncodedString(buf *bytes.Buffer, s string) error { + length := len(s) + switch { + case length <= 250: + buf.WriteByte(byte(length)) + case length <= 0xFFFF: + buf.WriteByte(0xFC) + if err := binary.Write(buf, binary.LittleEndian, uint16(length)); err != nil { + return err + } + case length <= 0xFFFFFF: + buf.WriteByte(0xFD) + if err := binary.Write(buf, binary.LittleEndian, uint32(length)&0xFFFFFF); err != nil { + return err + } + default: + buf.WriteByte(0xFE) + if err := binary.Write(buf, binary.LittleEndian, uint64(length)); err != nil { + return err + } + } + buf.WriteString(s) + return nil +} + +func writeLengthEncodedInteger(buf *bytes.Buffer, val *uint64) error { + if val == nil { + // Write 0xFB to represent NULL + buf.WriteByte(0xFB) + return nil + } + + switch { + case *val <= 250: + buf.WriteByte(byte(*val)) + case *val <= 0xFFFF: + buf.WriteByte(0xFC) + if err := binary.Write(buf, binary.LittleEndian, uint16(*val)); err != nil { + return err + } + case *val <= 0xFFFFFF: + buf.WriteByte(0xFD) + if err := binary.Write(buf, binary.LittleEndian, uint32(*val)&0xFFFFFF); err != nil { + return err + } + default: + buf.WriteByte(0xFE) + if err := binary.Write(buf, binary.LittleEndian, *val); err != nil { + return err + } + } + return nil +} + +func readLengthEncodedString(data []byte, offset *int) (string, error) { + if *offset >= len(data) { + return "", errors.New("data length is not enough") + } + var length int + firstByte := data[*offset] + switch { + case firstByte < 0xfb: + length = int(firstByte) + *offset++ + case firstByte == 0xfb: + *offset++ + return "", nil + case firstByte == 0xfc: + if *offset+3 > len(data) { + return "", errors.New("data length is not enough 1") + } + length = int(binary.LittleEndian.Uint16(data[*offset+1 : *offset+3])) + *offset += 3 + case firstByte == 0xfd: + if *offset+4 > len(data) { + return "", errors.New("data length is not enough 2") + } + length = int(data[*offset+1]) | int(data[*offset+2])<<8 | int(data[*offset+3])<<16 + *offset += 4 + case firstByte == 0xfe: + if *offset+9 > len(data) { + return "", errors.New("data length is not enough 3") + } + length = int(binary.LittleEndian.Uint64(data[*offset+1 : *offset+9])) + *offset += 9 + } + result := string(data[*offset : *offset+length]) + *offset += length + return result, nil +} + +func ReadLengthEncodedIntegers(data []byte, offset int) (uint64, int) { + if data[offset] < 0xfb { + return uint64(data[offset]), offset + 1 + } else if data[offset] == 0xfc { + return uint64(binary.LittleEndian.Uint16(data[offset+1 : offset+3])), offset + 3 + } else if data[offset] == 0xfd { + return uint64(data[offset+1]) | uint64(data[offset+2])<<8 | uint64(data[offset+3])<<16, offset + 4 + } + return binary.LittleEndian.Uint64(data[offset+1 : offset+9]), offset + 9 +} + +func readLengthEncodedInteger(b []byte) (uint64, bool, int) { + if len(b) == 0 { + return 0, true, 1 + } + switch b[0] { + case 0xfb: + return 0, true, 1 + case 0xfc: + return uint64(b[1]) | uint64(b[2])<<8, false, 3 + case 0xfd: + return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16, false, 4 + case 0xfe: + return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 | + uint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 | + uint64(b[7])<<48 | uint64(b[8])<<56, + false, 9 + default: + return uint64(b[0]), false, 1 + } +} + +func readUint24(b []byte) uint32 { + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 +} + +func readLengthEncodedIntegers(b []byte) (uint64, int) { + // Check the first byte + switch b[0] { + case 0xfb: + // 0xfb represents NULL + return 0, 1 + case 0xfc: + // 0xfc means the next 2 bytes are the integer + return uint64(binary.LittleEndian.Uint16(b[1:])), 3 + case 0xfd: + // 0xfd means the next 3 bytes are the integer + return uint64(binary.LittleEndian.Uint32(append(b[1:4], 0))), 4 + case 0xfe: + // 0xfe means the next 8 bytes are the integer + return binary.LittleEndian.Uint64(b[1:]), 9 + default: + // If the first byte is less than 0xfb, it is the integer itself + return uint64(b[0]), 1 + } +} + +func readLengthEncodedStrings(b []byte) (string, int) { + length, n := readLengthEncodedIntegers(b) + return string(b[n : n+int(length)]), n + int(length) +} + +func (packet *HandshakeV10Packet) ShouldUseSSL() bool { + return (packet.CapabilityFlags & models.CLIENT_SSL) != 0 +} + +func (packet *HandshakeV10Packet) GetAuthMethod() string { + // It will return the auth method + return packet.AuthPluginName +} + +func Uint24(data []byte) uint32 { + return uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16 +} + +func readLengthEncodedIntegerOff(data []byte, offset *int) (uint64, error) { + if *offset >= len(data) { + return 0, errors.New("data length is not enough") + } + var length int + firstByte := data[*offset] + switch { + case firstByte < 0xfb: + length = int(firstByte) + *offset++ + case firstByte == 0xfb: + *offset++ + return 0, nil + case firstByte == 0xfc: + if *offset+3 > len(data) { + return 0, errors.New("data length is not enough 1") + } + length = int(binary.LittleEndian.Uint16(data[*offset+1 : *offset+3])) + *offset += 3 + case firstByte == 0xfd: + if *offset+4 > len(data) { + return 0, errors.New("data length is not enough 2") + } + length = int(data[*offset+1]) | int(data[*offset+2])<<8 | int(data[*offset+3])<<16 + *offset += 4 + case firstByte == 0xfe: + if *offset+9 > len(data) { + return 0, errors.New("data length is not enough 3") + } + length = int(binary.LittleEndian.Uint64(data[*offset+1 : *offset+9])) + *offset += 9 + } + result := uint64(length) + return result, nil +} diff --git a/pkg/core/proxy/integrations/mysql/queryPacket.go b/pkg/core/proxy/integrations/mysql/queryPacket.go new file mode 100644 index 000000000..b190cbae0 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/queryPacket.go @@ -0,0 +1,20 @@ +package mysql + +import "fmt" + +type QueryPacket struct { + Command byte `json:"command,omitempty" yaml:"command,omitempty,flow"` + Query string `json:"query,omitempty" yaml:"query,omitempty,flow"` +} + +func decodeMySQLQuery(data []byte) (*QueryPacket, error) { + if len(data) < 1 { + return nil, fmt.Errorf("query packet too short") + } + + packet := &QueryPacket{} + packet.Command = data[0] + packet.Query = string(data[1:]) + + return packet, nil +} diff --git a/pkg/core/proxy/integrations/mysql/resultsetPacket.go b/pkg/core/proxy/integrations/mysql/resultsetPacket.go new file mode 100644 index 000000000..d8e0aa1cf --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/resultsetPacket.go @@ -0,0 +1,416 @@ +package mysql + +import ( + "bytes" + "encoding/base64" + "encoding/binary" + "errors" + "fmt" + "time" + + "go.keploy.io/server/v2/pkg/models" +) + +type ResultSet struct { + Columns []*ColumnDefinition `json:"columns,omitempty" yaml:"columns,omitempty,flow"` + Rows []*Row `json:"rows,omitempty" yaml:"rows,omitempty,flow"` + EOFPresent bool `json:"eofPresent,omitempty" yaml:"eofPresent,omitempty,flow"` + PaddingPresent bool `json:"paddingPresent,omitempty" yaml:"paddingPresent,omitempty,flow"` + EOFPresentFinal bool `json:"eofPresentFinal,omitempty" yaml:"eofPresentFinal,omitempty,flow"` + PaddingPresentFinal bool `json:"paddingPresentFinal,omitempty" yaml:"paddingPresentFinal,omitempty,flow"` + OptionalPadding bool `json:"optionalPadding,omitempty" yaml:"optionalPadding,omitempty,flow"` + OptionalEOFBytes string `json:"optionalEOFBytes,omitempty" yaml:"optionalEOFBytes,omitempty,flow"` + EOFAfterColumns string `json:"eofAfterColumns,omitempty" yaml:"eofAfterColumns,omitempty,flow"` +} + +type Row struct { + Header RowHeader `json:"header,omitempty" yaml:"header,omitempty,flow"` + Columns []RowColumnDefinition `json:"columns,omitempty" yaml:"row_column_definition,omitempty,flow"` +} + +type RowColumnDefinition struct { + Type models.FieldType `json:"type,omitempty" yaml:"type,omitempty,flow"` + Name string `json:"name,omitempty" yaml:"name,omitempty,flow"` + Value interface{} `json:"value,omitempty" yaml:"value,omitempty,flow"` +} + +type RowHeader struct { + PacketLength int `json:"packet_length,omitempty" yaml:"packet_length,omitempty,flow"` + SequenceID uint8 `json:"sequence_id,omitempty" yaml:"sequence_id,omitempty,flow"` +} + +func parseResultSet(b []byte) (*ResultSet, error) { + columns := make([]*ColumnDefinition, 0) + rows := make([]*Row, 0) + var err error + var eofPresent, paddingPresent, eofFinal, paddingFinal, optionalPadding bool + var optionalEOFBytes []byte + var eofAfterColumns []byte + // Parse the column count packet + columnCount, _, n := readLengthEncodedInteger(b) + b = b[n:] + + // Parse the columns + for i := uint64(0); i < columnCount; i++ { + var columnPacket *ColumnDefinition + columnPacket, b, err = parseColumnDefinitionPacket(b) + if err != nil { + return nil, err + } + columns = append(columns, columnPacket) + } + + // Check for EOF packet after columns + if len(b) > 4 && bytes.Contains(b[4:9], []byte{0xfe, 0x00, 0x00}) { + eofPresent = true + eofAfterColumns = b[:9] + b = b[9:] // Skip the EOF packet + if len(b) >= 2 && b[0] == 0x00 && b[1] == 0x00 { + paddingPresent = true + b = b[2:] // Skip padding + } + } + + // Parse the rows + // fmt.Println(!bytes.Equal(b[:4], []byte{0xfe, 0x00, 0x00, 0x02, 0x00})) + for len(b) > 5 { + // fmt.Println(b) + var row *Row + row, b, eofFinal, paddingFinal, optionalPadding, optionalEOFBytes, err = parseRow(b, columns) + if err != nil { + return nil, err + } + if row != nil { + rows = append(rows, row) + } + } + + // Remove EOF packet of the rows + // b = b[9:] + + resultSet := &ResultSet{ + Columns: columns, + Rows: rows, + EOFPresent: eofPresent, + PaddingPresent: paddingPresent, + EOFPresentFinal: eofFinal, + PaddingPresentFinal: paddingFinal, + OptionalPadding: optionalPadding, + OptionalEOFBytes: base64.StdEncoding.EncodeToString(optionalEOFBytes), + EOFAfterColumns: base64.StdEncoding.EncodeToString(eofAfterColumns), + } + + return resultSet, err +} + +func parseColumnDefinitionPacket(b []byte) (*ColumnDefinition, []byte, error) { + packet := &ColumnDefinition{} + var n int + var m int + + // Read packet header + packet.PacketHeader.PacketLength = uint8(readUint24(b[:3])) + packet.PacketHeader.PacketSequenceID = uint8(b[3]) + b = b[4:] + + packet.Catalog, n = readLengthEncodedStrings(b) + b = b[n:] + packet.Schema, n = readLengthEncodedStrings(b) + b = b[n:] + packet.Table, n = readLengthEncodedStrings(b) + b = b[n:] + packet.OrgTable, n = readLengthEncodedStrings(b) + b = b[n:] + packet.Name, n = readLengthEncodedStrings(b) + b = b[n:] + packet.OrgName, n = readLengthEncodedStrings(b) + b = b[n:] + b = b[1:] // Skip the next byte (length of the fixed-length fields) + packet.CharacterSet = binary.LittleEndian.Uint16(b) + b = b[2:] + packet.ColumnLength = binary.LittleEndian.Uint32(b) + b = b[4:] + packet.ColumnType = b[0] + b = b[1:] + packet.Flags = binary.LittleEndian.Uint16(b) + b = b[2:] + packet.Decimals = b[0] + b = b[2:] // Skip filler + if len(b) > 0 { + packet.DefaultValue, m = readLengthEncodedStrings(b) + b = b[m:] + } + + return packet, b, nil +} + +var optionalPadding bool + +func parseRow(b []byte, columnDefinitions []*ColumnDefinition) (*Row, []byte, bool, bool, bool, []byte, error) { + var eofFinal, paddingFinal bool + var optionalEOFBytes []byte + + row := &Row{} + if b[4] == 0xfe { + eofFinal = true + optionalEOFBytes = b[:9] + b = b[9:] + if len(b) >= 2 && b[0] == 0x00 && b[1] == 0x00 { + paddingFinal = true + b = b[2:] // Skip padding + } + if len(b) < 14 { + return nil, nil, eofFinal, paddingFinal, optionalPadding, optionalEOFBytes, nil + + } + } + packetLength := int(b[0]) + sequenceID := b[3] + rowHeader := RowHeader{ + PacketLength: packetLength, + SequenceID: sequenceID, + } + b = b[4:] + if len(b) >= 2 && b[0] == 0x00 && b[1] == 0x00 { + optionalPadding = true + b = b[2:] // Skip padding + } + // b = b[2:] + for _, columnDef := range columnDefinitions { + var colValue RowColumnDefinition + var length int + // if b[0] == 0x00 { + // b = b[1:] + // } + dataLength := int(b[0]) + + // Check the column type + switch models.FieldType(columnDef.ColumnType) { + case models.FieldTypeTimestamp: + b = b[1:] // Advance the buffer to the start of the encoded timestamp data + + if dataLength < 4 || len(b) < dataLength { + return nil, nil, eofFinal, paddingFinal, optionalPadding, optionalEOFBytes, fmt.Errorf("invalid timestamp data length") + } + + // Decode the year, month, day, hour, minute, second + year := binary.LittleEndian.Uint16(b[:2]) + month := uint8(b[2]) + day := uint8(b[3]) + hour := uint8(b[4]) + minute := uint8(b[5]) + second := uint8(b[6]) + + colValue.Type = models.FieldTypeTimestamp + colValue.Value = fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second) + length = dataLength // Including the initial byte for dataLength + + // case models.FieldTypeInt24, models.FieldTypeLong: + // colValue.Type = models.FieldType(columnDef.ColumnType) + // colValue.Value = int32(binary.LittleEndian.Uint32(b[:4])) + // length = 4 + // case models.FieldTypeLongLong: + // colValue.Type = models.FieldTypeLongLong + // var longLongBytes []byte = b[1 : dataLength+1] + // colValue.Value = longLongBytes + // length = dataLength + // b = b[1:] + // case models.FieldTypeFloat: + // colValue.Type = models.FieldTypeFloat + // colValue.Value = math.Float32frombits(binary.LittleEndian.Uint32(b[:4])) + // length = 4 + // case models.FieldTypeDouble: + // colValue.Type = models.FieldTypeDouble + // colValue.Value = math.Float64frombits(binary.LittleEndian.Uint64(b[:8])) + // length = 8 + default: + // Read a length-encoded integer + stringLength, _, n := readLengthEncodedInteger(b) + length = int(stringLength) + n + + // Extract the string + str := string(b[n : n+int(stringLength)]) + + // Remove non-printable characters + // re := regexp.MustCompile(`[^[:print:]\t\r\n]`) + // cleanedStr := re.ReplaceAllString(str, "") + + colValue.Type = models.FieldType(columnDef.ColumnType) + colValue.Value = str + } + + colValue.Name = columnDef.Name + row.Columns = append(row.Columns, colValue) + b = b[length:] + } + row.Header = rowHeader + return row, b, eofFinal, paddingFinal, optionalPadding, optionalEOFBytes, nil +} + +func encodeMySQLResultSet(resultSet *models.MySQLResultSet) ([]byte, error) { + buf := new(bytes.Buffer) + sequenceID := byte(1) + buf.Write([]byte{0x01, 0x00, 0x00, 0x01}) + // Write column count + lengthColumns := uint64(len(resultSet.Columns)) + if err := writeLengthEncodedInteger(buf, &lengthColumns); err != nil { + return nil, err + } + + if len(resultSet.Columns) > 0 { + for _, column := range resultSet.Columns { + sequenceID++ + buf.WriteByte(byte(column.PacketHeader.PacketLength)) + buf.WriteByte(byte(column.PacketHeader.PacketLength >> 8)) + buf.WriteByte(byte(column.PacketHeader.PacketLength >> 16)) + buf.WriteByte(sequenceID) + + var err error + err = writeLengthEncodedString(buf, column.Catalog) + if err != nil { + return nil, err + } + err = writeLengthEncodedString(buf, column.Schema) + if err != nil { + return nil, err + } + err = writeLengthEncodedString(buf, column.Table) + if err != nil { + return nil, err + } + err = writeLengthEncodedString(buf, column.OrgTable) + if err != nil { + return nil, err + } + err = writeLengthEncodedString(buf, column.Name) + if err != nil { + return nil, err + } + err = writeLengthEncodedString(buf, column.OrgName) + if err != nil { + return nil, err + } + buf.WriteByte(0x0c) // Length of the fixed-length fields (12 bytes) + if err := binary.Write(buf, binary.LittleEndian, column.CharacterSet); err != nil { + return nil, err + } + if err := binary.Write(buf, binary.LittleEndian, column.ColumnLength); err != nil { + return nil, err + } + buf.WriteByte(column.ColumnType) + if err := binary.Write(buf, binary.LittleEndian, column.Flags); err != nil { + return nil, err + } + buf.WriteByte(column.Decimals) + buf.Write([]byte{0x00, 0x00}) // Filler + } + } + + // Write EOF packet header + if resultSet.EOFPresent { + sequenceID++ + EOFAfterColumnsValue, _ := base64.StdEncoding.DecodeString(resultSet.EOFAfterColumns) + buf.Write(EOFAfterColumnsValue) + if resultSet.PaddingPresent { + buf.Write([]byte{0x00, 0x00}) // Add padding bytes + } + } + + // Write rows + for _, row := range resultSet.Rows { + sequenceID++ + //buf.WriteByte(byte(row.Header.PacketLength)) + buf.WriteByte(row.Header.PacketLength) + buf.Write([]byte{0x00, 0x00}) // two extra bytes after header + buf.WriteByte(sequenceID) + if resultSet.OptionalPadding { + buf.Write([]byte{0x00, 0x00}) // Add padding bytes + } + bytes, _ := encodeRow(row, row.Columns) + buf.Write(bytes) + } + // Write EOF packet header again + // buf.Write([]byte{5, 0, 0, sequenceID}) + OptionalEOFBytesValue, _ := base64.StdEncoding.DecodeString(resultSet.OptionalEOFBytes) + buf.Write(OptionalEOFBytesValue) + if resultSet.PaddingPresentFinal { + buf.Write([]byte{0x00, 0x00}) // Add padding bytes + } + return buf.Bytes(), nil +} + +func encodeRow(_ *models.Row, columnValues []models.RowColumnDefinition) ([]byte, error) { + var buf bytes.Buffer + + // Write the header + //binary.Write(&buf, binary.LittleEndian, uint32(row.Header.PacketLength)) + //buf.WriteByte(row.Header.PacketSequenceId) + + for _, column := range columnValues { + value := column.Value + switch models.FieldType(column.Type) { + case models.FieldTypeTimestamp: + timestamp, ok := value.(string) + if !ok { + return nil, errors.New("could not convert value to string") + } + t, err := time.Parse("2006-01-02 15:04:05", timestamp) + if err != nil { + return nil, errors.New("could not parse timestamp value") + } + + buf.WriteByte(7) // Length of the following encoded data + yearBytes := make([]byte, 2) + binary.LittleEndian.PutUint16(yearBytes, uint16(t.Year())) + buf.Write(yearBytes) // Year + buf.WriteByte(byte(t.Month())) // Month + buf.WriteByte(byte(t.Day())) // Day + buf.WriteByte(byte(t.Hour())) // Hour + buf.WriteByte(byte(t.Minute())) // Minute + buf.WriteByte(byte(t.Second())) // Second + // case models.FieldTypeLongLong: + // longLongSlice, ok := column.Value.([]interface{}) + // numElements := len(longLongSlice) + // buf.WriteByte(byte(numElements)) + // if !ok { + // return nil, errors.New("invalid type for FieldTypeLongLong, expected []interface{}") + // } + + // for _, v := range longLongSlice { + // intVal, ok := v.(int) + // if !ok { + // return nil, errors.New("invalid int value for FieldTypeLongLong in slice") + // } + + // // Check that the int value is within the range of a single byte + // if intVal < 0 || intVal > 255 { + // return nil, errors.New("int value for FieldTypeLongLong out of byte range") + // } + + // // Convert int to a single byte + // buf.WriteByte(byte(intVal)) + // } + default: + strValue, ok := value.(string) + if !ok { + return nil, errors.New("could not convert value to string") + } + + if strValue == "" { + // Write 0xFB to represent NULL + buf.WriteByte(0xFB) + } else { + length := uint64(len(strValue)) + // Now pass a pointer to length + if err := writeLengthEncodedInteger(&buf, &length); err != nil { + return nil, err + } + // Write the string value + buf.WriteString(strValue) + } + } + + } + + return buf.Bytes(), nil +} diff --git a/pkg/core/proxy/integrations/mysql/type2Packet.go b/pkg/core/proxy/integrations/mysql/type2Packet.go new file mode 100644 index 000000000..87a399990 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/type2Packet.go @@ -0,0 +1,7 @@ +package mysql + +type PacketType2 struct { + Field1 byte `json:"field1,omitempty" yaml:"field1,omitempty,flow"` + Field2 byte `json:"field2,omitempty" yaml:"field2,omitempty,flow"` + Field3 byte `json:"field3,omitempty" yaml:"field3,omitempty,flow"` +} diff --git a/pkg/core/proxy/integrations/mysql/util.go b/pkg/core/proxy/integrations/mysql/util.go new file mode 100644 index 000000000..f32d9c5f0 --- /dev/null +++ b/pkg/core/proxy/integrations/mysql/util.go @@ -0,0 +1,59 @@ +package mysql + +import ( + "context" + "encoding/binary" + "go.uber.org/zap" + "log" + "net" + + "go.keploy.io/server/v2/pkg/core/proxy/util" +) + +// TODO:Remove these global variables, and find a better way to handle this if possible +var ( + isPluginData = false + expectingAuthSwitchResponse = false + expectingHandshakeResponse = false + expectingHandshakeResponseTest = false +) + +func bytesToMySQLPacket(buffer []byte) CustomPacket { + if buffer == nil || len(buffer) < 4 { + log.Fatalf("Error: buffer is nil or too short to be a valid MySQL packet") + return CustomPacket{} + } + tempBuffer := make([]byte, 4) + copy(tempBuffer, buffer[:3]) + length := binary.LittleEndian.Uint32(tempBuffer) + sequenceID := buffer[3] + payload := buffer[4:] + return CustomPacket{ + Header: CustomPacketHeader{ + PayloadLength: length, + SequenceID: sequenceID, + }, + Payload: payload, + } +} + +func readFirstBuffer(ctx context.Context, logger *zap.Logger, clientConn, destConn net.Conn) ([]byte, string, error) { + // Attempt to read from destConn first + buf, err := util.ReadBytes(ctx, logger, destConn) + // If there is data from destConn, return it + if err == nil { + return buf, "destination", nil + } + // If the error is a timeout, try to read from clientConn + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + buf, err = util.ReadBytes(ctx, logger, clientConn) + // If there is data from clientConn, return it + if err == nil { + return buf, "client", nil + } + // Return any error from reading clientConn + return nil, "", err + } + // Return any other error from reading destConn + return nil, "", err +} diff --git a/pkg/core/proxy/integrations/postgres/v1/decode.go b/pkg/core/proxy/integrations/postgres/v1/decode.go new file mode 100644 index 000000000..dee43a347 --- /dev/null +++ b/pkg/core/proxy/integrations/postgres/v1/decode.go @@ -0,0 +1,146 @@ +// Package v1 provides functionality for decoding Postgres requests and responses. +package v1 + +import ( + "context" + "fmt" + "io" + "net" + "strings" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + pUtil "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func decodePostgres(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, _ models.OutgoingOptions) error { + pgRequests := [][]byte{reqBuf} + errCh := make(chan error, 1) + + go func(errCh chan error, pgRequests [][]byte) { + // close should be called from the producer of the channel + defer close(errCh) + for { + // Since protocol packets have to be parsed for checking stream end, + // clientConnection have deadline for read to determine the end of stream. + err := clientConn.SetReadDeadline(time.Now().Add(10 * time.Millisecond)) + if err != nil { + utils.LogError(logger, err, "failed to set the read deadline for the pg client conn") + errCh <- err + } + + // To read the stream of request packets from the client + for { + buffer, err := pUtil.ReadBytes(ctx, logger, clientConn) + if err != nil { + if netErr, ok := err.(net.Error); !(ok && netErr.Timeout()) { + if err == io.EOF { + logger.Debug("EOF error received from client. Closing conn in postgres !!") + errCh <- err + } + logger.Debug("failed to read the request message in proxy for postgres dependency") + errCh <- err + } + } + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + logger.Debug("the timeout for the client read in pg") + break + } + pgRequests = append(pgRequests, buffer) + } + + if len(pgRequests) == 0 { + logger.Debug("the postgres request buffer is empty") + continue + } + matched, pgResponses, err := matchingReadablePG(ctx, logger, pgRequests, mockDb) + if err != nil { + errCh <- fmt.Errorf("error while matching tcs mocks %v", err) + return + } + + if !matched { + _, err = pUtil.PassThrough(ctx, logger, clientConn, dstCfg, pgRequests) + if err != nil { + utils.LogError(logger, err, "failed to pass the request", zap.Any("request packets", len(pgRequests))) + errCh <- err + } + continue + } + for _, pgResponse := range pgResponses { + encoded, err := util.DecodeBase64(pgResponse.Payload) + if len(pgResponse.PacketTypes) > 0 && len(pgResponse.Payload) == 0 { + encoded, err = postgresDecoderFrontend(pgResponse) + } + if err != nil { + utils.LogError(logger, err, "failed to decode the response message in proxy for postgres dependency") + errCh <- err + } + _, err = clientConn.Write(encoded) + if err != nil { + utils.LogError(logger, err, "failed to write the response message to the client application") + errCh <- err + } + } + // Clear the buffer for the next dependency call + pgRequests = [][]byte{} + } + }(errCh, pgRequests) + + select { + case <-ctx.Done(): + return ctx.Err() + case err := <-errCh: + if err == io.EOF { + return nil + } + return err + } +} + +type QueryData struct { + PrepIdentifier string `json:"PrepIdentifier" yaml:"PrepIdentifier"` + Query string `json:"Query" yaml:"Query"` +} + +type PrepMap map[string][]QueryData + +type TestPrepMap map[string][]QueryData + +func getRecordPrepStatement(allMocks []*models.Mock) PrepMap { + preparedstatement := make(PrepMap) + for _, v := range allMocks { + if v.Kind != "Postgres" { + continue + } + for _, req := range v.Spec.PostgresRequests { + var querydata []QueryData + psMap := make(map[string]string) + if len(req.PacketTypes) > 0 && req.PacketTypes[0] != "p" && req.Identfier != "StartupRequest" { + p := 0 + for _, header := range req.PacketTypes { + if header == "P" { + if strings.Contains(req.Parses[p].Name, "S_") { + psMap[req.Parses[p].Query] = req.Parses[p].Name + querydata = append(querydata, QueryData{PrepIdentifier: req.Parses[p].Name, + Query: req.Parses[p].Query, + }) + + } + p++ + } + } + } + // also append the query data for the prepared statement + if len(querydata) > 0 { + preparedstatement[v.ConnectionID] = append(preparedstatement[v.ConnectionID], querydata...) + } + } + + } + return preparedstatement +} diff --git a/pkg/core/proxy/integrations/postgres/v1/encode.go b/pkg/core/proxy/integrations/postgres/v1/encode.go new file mode 100755 index 000000000..fe663c98c --- /dev/null +++ b/pkg/core/proxy/integrations/postgres/v1/encode.go @@ -0,0 +1,397 @@ +package v1 + +import ( + "context" + "encoding/binary" + "io" + "net" + "strconv" + "time" + + "github.com/jackc/pgproto3/v2" + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + pUtil "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" +) + +func encodePostgres(ctx context.Context, logger *zap.Logger, reqBuf []byte, clientConn, destConn net.Conn, mocks chan<- *models.Mock, _ models.OutgoingOptions) error { + + logger.Debug("Inside the encodePostgresOutgoing function") + var pgRequests []models.Backend + + bufStr := util.EncodeBase64(reqBuf) + logger.Debug("bufStr is ", zap.String("bufStr", bufStr)) + + pg := NewBackend() + _, err := pg.decodeStartupMessage(reqBuf) + if err != nil { + utils.LogError(logger, err, "failed to decode startup message server") + } + + if bufStr != "" { + pgRequests = append(pgRequests, models.Backend{ + PacketTypes: pg.BackendWrapper.PacketTypes, + Identfier: "StartupRequest", + Length: uint32(len(reqBuf)), + Payload: bufStr, + Bind: pg.BackendWrapper.Bind, + PasswordMessage: pg.BackendWrapper.PasswordMessage, + CancelRequest: pg.BackendWrapper.CancelRequest, + Close: pg.BackendWrapper.Close, + CopyData: pg.BackendWrapper.CopyData, + CopyDone: pg.BackendWrapper.CopyDone, + CopyFail: pg.BackendWrapper.CopyFail, + Describe: pg.BackendWrapper.Describe, + Execute: pg.BackendWrapper.Execute, + Flush: pg.BackendWrapper.Flush, + FunctionCall: pg.BackendWrapper.FunctionCall, + GssEncRequest: pg.BackendWrapper.GssEncRequest, + Parse: pg.BackendWrapper.Parse, + Query: pg.BackendWrapper.Query, + SSlRequest: pg.BackendWrapper.SSlRequest, + StartupMessage: pg.BackendWrapper.StartupMessage, + SASLInitialResponse: pg.BackendWrapper.SASLInitialResponse, + SASLResponse: pg.BackendWrapper.SASLResponse, + Sync: pg.BackendWrapper.Sync, + Terminate: pg.BackendWrapper.Terminate, + MsgType: pg.BackendWrapper.MsgType, + AuthType: pg.BackendWrapper.AuthType, + }) + + logger.Debug("Before for loop pg request starts", zap.Any("pgReqs", len(pgRequests))) + } + + _, err = destConn.Write(reqBuf) + if err != nil { + utils.LogError(logger, err, "failed to write request message to the destination server") + return err + } + var pgResponses []models.Frontend + + clientBuffChan := make(chan []byte) + destBuffChan := make(chan []byte) + errChan := make(chan error, 1) + + //get the error group from the context + g := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + + // read requests from client + g.Go(func() error { + defer utils.Recover(logger) + defer close(clientBuffChan) + pUtil.ReadBuffConn(ctx, logger, clientConn, clientBuffChan, errChan) + return nil + }) + + // read responses from destination + g.Go(func() error { + defer utils.Recover(logger) + defer close(destBuffChan) + pUtil.ReadBuffConn(ctx, logger, destConn, destBuffChan, errChan) + return nil + }) + + go func() { + err := g.Wait() + if err != nil { + logger.Info("error group is returning an error", zap.Error(err)) + } + close(errChan) + }() + + prevChunkWasReq := false + logger.Debug("the iteration for the pg request starts", zap.Any("pgReqs", len(pgRequests)), zap.Any("pgResps", len(pgResponses))) + + reqTimestampMock := time.Now() + var resTimestampMock time.Time + + for { + select { + case <-ctx.Done(): + if !prevChunkWasReq && len(pgRequests) > 0 && len(pgResponses) > 0 { + metadata := make(map[string]string) + metadata["type"] = "config" + // Save the mock + mocks <- &models.Mock{ + Version: models.GetVersion(), + Name: "mocks", + Kind: models.Postgres, + Spec: models.MockSpec{ + PostgresRequests: pgRequests, + PostgresResponses: pgResponses, + ReqTimestampMock: reqTimestampMock, + ResTimestampMock: resTimestampMock, + Metadata: metadata, + }, + ConnectionID: ctx.Value(models.ClientConnectionIDKey).(string), + } + return ctx.Err() + } + case buffer := <-clientBuffChan: + + // Write the request message to the destination + _, err := destConn.Write(buffer) + if err != nil { + utils.LogError(logger, err, "failed to write request message to the destination server") + return err + } + + logger.Debug("the iteration for the pg request ends with no of pgReqs:" + strconv.Itoa(len(pgRequests)) + " and pgResps: " + strconv.Itoa(len(pgResponses))) + if !prevChunkWasReq && len(pgRequests) > 0 && len(pgResponses) > 0 { + metadata := make(map[string]string) + metadata["type"] = "config" + // Save the mock + mocks <- &models.Mock{ + Version: models.GetVersion(), + Name: "mocks", + Kind: models.Postgres, + Spec: models.MockSpec{ + PostgresRequests: pgRequests, + PostgresResponses: pgResponses, + ReqTimestampMock: reqTimestampMock, + ResTimestampMock: resTimestampMock, + Metadata: metadata, + }, + ConnectionID: ctx.Value(models.ClientConnectionIDKey).(string), + } + pgRequests = []models.Backend{} + pgResponses = []models.Frontend{} + } + + bufStr := util.EncodeBase64(buffer) + if bufStr != "" { + pg := NewBackend() + var msg pgproto3.FrontendMessage + + if !isStartupPacket(buffer) && len(buffer) > 5 { + bufferCopy := buffer + for i := 0; i < len(bufferCopy)-5; { + logger.Debug("Inside the if condition") + pg.BackendWrapper.MsgType = buffer[i] + pg.BackendWrapper.BodyLen = int(binary.BigEndian.Uint32(buffer[i+1:])) - 4 + if len(buffer) < (i + pg.BackendWrapper.BodyLen + 5) { + utils.LogError(logger, nil, "failed to translate the postgres request message due to shorter network packet buffer") + break + } + msg, err = pg.translateToReadableBackend(buffer[i:(i + pg.BackendWrapper.BodyLen + 5)]) + if err != nil && buffer[i] != 112 { + utils.LogError(logger, err, "failed to translate the request message to readable") + } + if pg.BackendWrapper.MsgType == 'p' { + pg.BackendWrapper.PasswordMessage = *msg.(*pgproto3.PasswordMessage) + } + + if pg.BackendWrapper.MsgType == 'P' { + pg.BackendWrapper.Parse = *msg.(*pgproto3.Parse) + pg.BackendWrapper.Parses = append(pg.BackendWrapper.Parses, pg.BackendWrapper.Parse) + } + + if pg.BackendWrapper.MsgType == 'B' { + pg.BackendWrapper.Bind = *msg.(*pgproto3.Bind) + pg.BackendWrapper.Binds = append(pg.BackendWrapper.Binds, pg.BackendWrapper.Bind) + } + + if pg.BackendWrapper.MsgType == 'E' { + pg.BackendWrapper.Execute = *msg.(*pgproto3.Execute) + pg.BackendWrapper.Executes = append(pg.BackendWrapper.Executes, pg.BackendWrapper.Execute) + } + + pg.BackendWrapper.PacketTypes = append(pg.BackendWrapper.PacketTypes, string(pg.BackendWrapper.MsgType)) + + i += 5 + pg.BackendWrapper.BodyLen + } + + pgMock := &models.Backend{ + PacketTypes: pg.BackendWrapper.PacketTypes, + Identfier: "ClientRequest", + Length: uint32(len(reqBuf)), + // Payload: bufStr, + Bind: pg.BackendWrapper.Bind, + Binds: pg.BackendWrapper.Binds, + PasswordMessage: pg.BackendWrapper.PasswordMessage, + CancelRequest: pg.BackendWrapper.CancelRequest, + Close: pg.BackendWrapper.Close, + CopyData: pg.BackendWrapper.CopyData, + CopyDone: pg.BackendWrapper.CopyDone, + CopyFail: pg.BackendWrapper.CopyFail, + Describe: pg.BackendWrapper.Describe, + Execute: pg.BackendWrapper.Execute, + Executes: pg.BackendWrapper.Executes, + Flush: pg.BackendWrapper.Flush, + FunctionCall: pg.BackendWrapper.FunctionCall, + GssEncRequest: pg.BackendWrapper.GssEncRequest, + Parse: pg.BackendWrapper.Parse, + Parses: pg.BackendWrapper.Parses, + Query: pg.BackendWrapper.Query, + SSlRequest: pg.BackendWrapper.SSlRequest, + StartupMessage: pg.BackendWrapper.StartupMessage, + SASLInitialResponse: pg.BackendWrapper.SASLInitialResponse, + SASLResponse: pg.BackendWrapper.SASLResponse, + Sync: pg.BackendWrapper.Sync, + Terminate: pg.BackendWrapper.Terminate, + MsgType: pg.BackendWrapper.MsgType, + AuthType: pg.BackendWrapper.AuthType, + } + afterEncoded, err := postgresDecoderBackend(*pgMock) + if err != nil { + logger.Debug("failed to decode the response message in proxy for postgres dependency", zap.Error(err)) + } + + if len(afterEncoded) != len(buffer) && pgMock.PacketTypes[0] != "p" { + logger.Debug("the length of the encoded buffer is not equal to the length of the original buffer", zap.Any("after_encoded", len(afterEncoded)), zap.Any("buffer", len(buffer))) + pgMock.Payload = bufStr + } + pgRequests = append(pgRequests, *pgMock) + + } + + if isStartupPacket(buffer) { + pgMock := &models.Backend{ + Identfier: "StartupRequest", + Payload: bufStr, + } + pgRequests = append(pgRequests, *pgMock) + } + } + prevChunkWasReq = true + case buffer := <-destBuffChan: + if prevChunkWasReq { + // store the request timestamp + reqTimestampMock = time.Now() + } + + // Write the response message to the client + _, err := clientConn.Write(buffer) + if err != nil { + utils.LogError(logger, err, "failed to write response message to the client") + return err + } + + bufStr := util.EncodeBase64(buffer) + + if bufStr != "" { + pg := NewFrontend() + if !isStartupPacket(buffer) && len(buffer) > 5 && bufStr != "Tg==" { + bufferCopy := buffer + + //Saving list of packets in case of multiple packets in a single buffer steam + ps := make([]pgproto3.ParameterStatus, 0) + var dataRows []pgproto3.DataRow + + for i := 0; i < len(bufferCopy)-5; { + pg.FrontendWrapper.MsgType = buffer[i] + pg.FrontendWrapper.BodyLen = int(binary.BigEndian.Uint32(buffer[i+1:])) - 4 + msg, err := pg.translateToReadableResponse(logger, buffer[i:(i+pg.FrontendWrapper.BodyLen+5)]) + if err != nil { + utils.LogError(logger, err, "failed to translate the response message to readable") + break + } + + pg.FrontendWrapper.PacketTypes = append(pg.FrontendWrapper.PacketTypes, string(pg.FrontendWrapper.MsgType)) + i += 5 + pg.FrontendWrapper.BodyLen + + if pg.FrontendWrapper.ParameterStatus.Name != "" { + ps = append(ps, pg.FrontendWrapper.ParameterStatus) + } + if pg.FrontendWrapper.MsgType == 'C' { + pg.FrontendWrapper.CommandComplete = *msg.(*pgproto3.CommandComplete) + // empty the command tag + pg.FrontendWrapper.CommandComplete.CommandTag = []byte{} + pg.FrontendWrapper.CommandCompletes = append(pg.FrontendWrapper.CommandCompletes, pg.FrontendWrapper.CommandComplete) + } + if pg.FrontendWrapper.MsgType == 'D' && pg.FrontendWrapper.DataRow.RowValues != nil { + // Create a new slice for each DataRow + valuesCopy := make([]string, len(pg.FrontendWrapper.DataRow.RowValues)) + copy(valuesCopy, pg.FrontendWrapper.DataRow.RowValues) + + row := pgproto3.DataRow{ + RowValues: valuesCopy, // Use the copy of the values + Values: pg.FrontendWrapper.DataRow.Values, + } + dataRows = append(dataRows, row) + } + } + + if len(ps) > 0 { + pg.FrontendWrapper.ParameterStatusCombined = ps + } + if len(dataRows) > 0 { + pg.FrontendWrapper.DataRows = dataRows + } + + // from here take the msg and append its readable form to the pgResponses + pgMock := &models.Frontend{ + PacketTypes: pg.FrontendWrapper.PacketTypes, + Identfier: "ServerResponse", + Length: uint32(len(reqBuf)), + // Payload: bufStr, + AuthenticationOk: pg.FrontendWrapper.AuthenticationOk, + AuthenticationCleartextPassword: pg.FrontendWrapper.AuthenticationCleartextPassword, + AuthenticationMD5Password: pg.FrontendWrapper.AuthenticationMD5Password, + AuthenticationGSS: pg.FrontendWrapper.AuthenticationGSS, + AuthenticationGSSContinue: pg.FrontendWrapper.AuthenticationGSSContinue, + AuthenticationSASL: pg.FrontendWrapper.AuthenticationSASL, + AuthenticationSASLContinue: pg.FrontendWrapper.AuthenticationSASLContinue, + AuthenticationSASLFinal: pg.FrontendWrapper.AuthenticationSASLFinal, + BackendKeyData: pg.FrontendWrapper.BackendKeyData, + BindComplete: pg.FrontendWrapper.BindComplete, + CloseComplete: pg.FrontendWrapper.CloseComplete, + CommandComplete: pg.FrontendWrapper.CommandComplete, + CommandCompletes: pg.FrontendWrapper.CommandCompletes, + CopyData: pg.FrontendWrapper.CopyData, + CopyDone: pg.FrontendWrapper.CopyDone, + CopyInResponse: pg.FrontendWrapper.CopyInResponse, + CopyOutResponse: pg.FrontendWrapper.CopyOutResponse, + DataRow: pg.FrontendWrapper.DataRow, + DataRows: pg.FrontendWrapper.DataRows, + EmptyQueryResponse: pg.FrontendWrapper.EmptyQueryResponse, + ErrorResponse: pg.FrontendWrapper.ErrorResponse, + FunctionCallResponse: pg.FrontendWrapper.FunctionCallResponse, + NoData: pg.FrontendWrapper.NoData, + NoticeResponse: pg.FrontendWrapper.NoticeResponse, + NotificationResponse: pg.FrontendWrapper.NotificationResponse, + ParameterDescription: pg.FrontendWrapper.ParameterDescription, + ParameterStatusCombined: pg.FrontendWrapper.ParameterStatusCombined, + ParseComplete: pg.FrontendWrapper.ParseComplete, + PortalSuspended: pg.FrontendWrapper.PortalSuspended, + ReadyForQuery: pg.FrontendWrapper.ReadyForQuery, + RowDescription: pg.FrontendWrapper.RowDescription, + MsgType: pg.FrontendWrapper.MsgType, + AuthType: pg.FrontendWrapper.AuthType, + } + + afterEncoded, err := postgresDecoderFrontend(*pgMock) + if err != nil { + logger.Debug("failed to decode the response message in proxy for postgres dependency", zap.Error(err)) + } + if len(afterEncoded) != len(buffer) && pgMock.PacketTypes[0] != "R" { + logger.Debug("the length of the encoded buffer is not equal to the length of the original buffer", zap.Any("after_encoded", len(afterEncoded)), zap.Any("buffer", len(buffer))) + pgMock.Payload = bufStr + } + pgResponses = append(pgResponses, *pgMock) + } + + if bufStr == "Tg==" || len(buffer) <= 5 { + + pgMock := &models.Frontend{ + Payload: bufStr, + } + pgResponses = append(pgResponses, *pgMock) + } + } + + resTimestampMock = time.Now() + + logger.Debug("the iteration for the postgres response ends with no of postgresReqs:" + strconv.Itoa(len(pgRequests)) + " and pgResps: " + strconv.Itoa(len(pgResponses))) + prevChunkWasReq = false + case err := <-errChan: + if err == io.EOF { + return nil + } + return err + } + } +} diff --git a/pkg/core/proxy/integrations/postgres/v1/match.go b/pkg/core/proxy/integrations/postgres/v1/match.go new file mode 100644 index 000000000..2da4280c3 --- /dev/null +++ b/pkg/core/proxy/integrations/postgres/v1/match.go @@ -0,0 +1,759 @@ +package v1 + +import ( + "context" + "encoding/base64" + "fmt" + "math" + "reflect" + "strings" + + "github.com/jackc/pgproto3/v2" + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +var testmap TestPrepMap + +func getTestPS(reqBuff [][]byte, logger *zap.Logger, ConnectionID string) { + // maintain a map of current prepared statements and their corresponding connection id + // if it's the prepared statement match the query with the recorded prepared statement and return the response of that matched prepared statement at that connection + // so if parse is coming save to a same map + actualPgReq := decodePgRequest(reqBuff[0], logger) + if actualPgReq == nil { + return + } + testmap2 := make(TestPrepMap) + if testmap != nil { + testmap2 = testmap + } + querydata := make([]QueryData, 0) + if len(actualPgReq.PacketTypes) > 0 && actualPgReq.PacketTypes[0] != "p" && actualPgReq.Identfier != "StartupRequest" { + p := 0 + for _, header := range actualPgReq.PacketTypes { + if header == "P" { + if strings.Contains(actualPgReq.Parses[p].Name, "S_") && !IsValuePresent(ConnectionID, actualPgReq.Parses[p].Name) { + querydata = append(querydata, QueryData{PrepIdentifier: actualPgReq.Parses[p].Name, Query: actualPgReq.Parses[p].Query}) + } + p++ + } + } + } + + // also append the query data for the prepared statement + if len(querydata) > 0 { + testmap2[ConnectionID] = append(testmap2[ConnectionID], querydata...) + // fmt.Println("Test Prepared statement Map", testmap2) + testmap = testmap2 + } + +} + +func IsValuePresent(connectionid string, value string) bool { + if testmap != nil { + for _, v := range testmap[connectionid] { + if v.PrepIdentifier == value { + return true + } + } + } + return false +} + +func matchingReadablePG(ctx context.Context, logger *zap.Logger, requestBuffers [][]byte, mockDb integrations.MockMemDb) (bool, []models.Frontend, error) { + for { + select { + case <-ctx.Done(): + return false, nil, ctx.Err() + default: + + tcsMocks, err := mockDb.GetUnFilteredMocks() + if err != nil { + return false, nil, fmt.Errorf("error while getting tcs mocks %v", err) + } + + ConnectionID := ctx.Value(models.ClientConnectionIDKey).(string) + + recordedPrep := getRecordPrepStatement(tcsMocks) + reqGoingOn := decodePgRequest(requestBuffers[0], logger) + if reqGoingOn != nil { + logger.Debug("PacketTypes", zap.Any("PacketTypes", reqGoingOn.PacketTypes)) + // fmt.Println("REQUEST GOING ON - ", reqGoingOn) + logger.Debug("ConnectionId-", zap.String("ConnectionId", ConnectionID)) + logger.Debug("TestMap*****", zap.Any("TestMap", testmap)) + } + // if recordedPrep != nil { + // fmt.Println("PREPARED STATEMENT", recordedPrep) + // } + + var sortFlag = true + var sortedTcsMocks []*models.Mock + var matchedMock *models.Mock + + for _, mock := range tcsMocks { + if ctx.Err() != nil { + return false, nil, ctx.Err() + } + if mock == nil { + continue + } + + if sortFlag { + if !mock.TestModeInfo.IsFiltered { + sortFlag = false + } else { + sortedTcsMocks = append(sortedTcsMocks, mock) + } + } + + initMock := *mock + if len(mock.Spec.PostgresRequests) == len(requestBuffers) { + for requestIndex, reqBuff := range requestBuffers { + bufStr := base64.StdEncoding.EncodeToString(reqBuff) + encodedMock, err := postgresDecoderBackend(mock.Spec.PostgresRequests[requestIndex]) + if err != nil { + logger.Debug("Error while decoding postgres request", zap.Error(err)) + } + + switch { + case bufStr == "AAAACATSFi8=": + ssl := models.Frontend{ + Payload: "Tg==", + } + return true, []models.Frontend{ssl}, nil + case mock.Spec.PostgresRequests[requestIndex].Identfier == "StartupRequest" && isStartupPacket(reqBuff) && mock.Spec.PostgresRequests[requestIndex].Payload != "AAAACATSFi8=" && mock.Spec.PostgresResponses[requestIndex].AuthType == 10: + logger.Debug("CHANGING TO MD5 for Response", zap.String("mock", mock.Name), zap.String("Req", bufStr)) + initMock.Spec.PostgresResponses[requestIndex].AuthType = 5 + err := mockDb.FlagMockAsUsed(&initMock) + if err != nil { + logger.Error("failed to flag mock as used", zap.Error(err)) + } + return true, initMock.Spec.PostgresResponses, nil + case len(encodedMock) > 0 && encodedMock[0] == 'p' && mock.Spec.PostgresRequests[requestIndex].PacketTypes[0] == "p" && reqBuff[0] == 'p': + logger.Debug("CHANGING TO MD5 for Request and Response", zap.String("mock", mock.Name), zap.String("Req", bufStr)) + + initMock.Spec.PostgresRequests[requestIndex].PasswordMessage.Password = "md5fe4f2f657f01fa1dd9d111d5391e7c07" + + initMock.Spec.PostgresResponses[requestIndex].PacketTypes = []string{"R", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "K", "Z"} + initMock.Spec.PostgresResponses[requestIndex].AuthType = 0 + initMock.Spec.PostgresResponses[requestIndex].BackendKeyData = pgproto3.BackendKeyData{ + ProcessID: 2613, + SecretKey: 824670820, + } + initMock.Spec.PostgresResponses[requestIndex].ReadyForQuery.TxStatus = 73 + initMock.Spec.PostgresResponses[requestIndex].ParameterStatusCombined = []pgproto3.ParameterStatus{ + { + Name: "application_name", + Value: "", + }, + { + Name: "client_encoding", + Value: "UTF8", + }, + { + Name: "DateStyle", + Value: "ISO, MDY", + }, + { + Name: "integer_datetimes", + Value: "on", + }, + { + Name: "IntervalStyle", + Value: "postgres", + }, + { + Name: "is_superuser", + Value: "UTF8", + }, + { + Name: "server_version", + Value: "13.12 (Debian 13.12-1.pgdg120+1)", + }, + { + Name: "session_authorization", + Value: "keploy-user", + }, + { + Name: "standard_conforming_strings", + Value: "on", + }, + { + Name: "TimeZone", + Value: "Etc/UTC", + }, + { + Name: "TimeZone", + Value: "Etc/UTC", + }, + } + err := mockDb.FlagMockAsUsed(&initMock) + if err != nil { + logger.Error("failed to flag mock as used", zap.Error(err)) + } + return true, initMock.Spec.PostgresResponses, nil + } + + } + } + // maintain test prepare statement map for each connection id + getTestPS(requestBuffers, logger, ConnectionID) + } + + logger.Debug("Sorted Mocks: ", zap.Any("Len of sortedTcsMocks", len(sortedTcsMocks))) + + var matched, sorted bool + var idx int + //use findBinaryMatch twice one for sorted and another for unsorted + // give more priority to sorted like if you find more than 0.5 in sorted then return that + if len(sortedTcsMocks) > 0 { + sorted = true + idx1, newMock := findPGStreamMatch(sortedTcsMocks, requestBuffers, logger, sorted, ConnectionID, recordedPrep) + if idx1 != -1 { + matched = true + matchedMock = tcsMocks[idx1] + if newMock != nil { + matchedMock = newMock + } + // fmt.Println("Matched In Absolute Custom Matching for sorted!!!", matchedMock.Name) + } + idx = findBinaryStreamMatch(logger, sortedTcsMocks, requestBuffers, sorted) + if idx != -1 && !matched { + matched = true + matchedMock = tcsMocks[idx] + // fmt.Println("Matched In Binary Matching for Sorted", matchedMock.Name) + } + } + + if !matched { + sorted = false + idx1, newMock := findPGStreamMatch(tcsMocks, requestBuffers, logger, sorted, ConnectionID, recordedPrep) + if idx1 != -1 { + matched = true + matchedMock = tcsMocks[idx1] + if newMock != nil { + matchedMock = newMock + } + // fmt.Println("Matched In Absolute Custom Matching for Unsorted", matchedMock.Name) + } + idx = findBinaryStreamMatch(logger, tcsMocks, requestBuffers, sorted) + // check if the validate the query with the matched mock + // if the query is same then return the response of that mock + var isValid = true + if idx != -1 && len(sortedTcsMocks) != 0 { + isValid, newMock = validateMock(tcsMocks, idx, requestBuffers, logger) + logger.Debug("Is Valid", zap.Bool("Is Valid", isValid)) + } + if idx != -1 && !matched { + matched = true + matchedMock = tcsMocks[idx] + if newMock != nil && !isValid { + matchedMock = newMock + } + // fmt.Println("Matched In Binary Matching for Unsorted", matchedMock.Name) + } + } + + if matched { + logger.Debug("Matched mock", zap.String("mock", matchedMock.Name)) + if matchedMock.TestModeInfo.IsFiltered { + originalMatchedMock := *matchedMock + matchedMock.TestModeInfo.IsFiltered = false + matchedMock.TestModeInfo.SortOrder = math.MaxInt + updated := mockDb.UpdateUnFilteredMock(&originalMatchedMock, matchedMock) + if !updated { + continue + } + } else { + err := mockDb.FlagMockAsUsed(matchedMock) + if err != nil { + logger.Error("failed to flag mock as used", zap.Error(err)) + } + } + if err != nil { + logger.Error("failed to flag mock as used", zap.Error(err)) + } + return true, matchedMock.Spec.PostgresResponses, nil + } + + return false, nil, nil + } + } +} + +func findBinaryStreamMatch(logger *zap.Logger, tcsMocks []*models.Mock, requestBuffers [][]byte, sorted bool) int { + + mxSim := -1.0 + mxIdx := -1 + + for idx, mock := range tcsMocks { + + if len(mock.Spec.PostgresRequests) == len(requestBuffers) { + for requestIndex, reqBuf := range requestBuffers { + + expectedPgReq := mock.Spec.PostgresRequests[requestIndex] + encoded, err := postgresDecoderBackend(expectedPgReq) + if err != nil { + logger.Debug("Error while decoding postgres request", zap.Error(err)) + } + var encoded64 []byte + if expectedPgReq.Payload != "" { + encoded64, err = util.DecodeBase64(mock.Spec.PostgresRequests[requestIndex].Payload) + if err != nil { + logger.Debug("Error while decoding postgres request", zap.Error(err)) + return -1 + } + } + var similarity1, similarity2 float64 + if len(encoded) > 0 { + similarity1 = fuzzyCheck(encoded, reqBuf) + } + if len(encoded64) > 0 { + similarity2 = fuzzyCheck(encoded64, reqBuf) + } + + // calculate the jaccard similarity between the two buffers one with base64 encoding and another via that + //find the max similarity between the two + similarity := math.Max(similarity1, similarity2) + if mxSim < similarity { + mxSim = similarity + mxIdx = idx + continue + } + } + } + } + + if sorted { + if mxIdx != -1 && mxSim >= 0.78 { + logger.Debug("Matched with Sorted Stream", zap.Float64("similarity", mxSim)) + } else { + mxIdx = -1 + } + } else { + if mxIdx != -1 { + logger.Debug("Matched with Unsorted Stream", zap.Float64("similarity", mxSim)) + } + } + return mxIdx +} + +func fuzzyCheck(encoded, reqBuf []byte) float64 { + k := util.AdaptiveK(len(reqBuf), 3, 8, 5) + shingles1 := util.CreateShingles(encoded, k) + shingles2 := util.CreateShingles(reqBuf, k) + similarity := util.JaccardSimilarity(shingles1, shingles2) + return similarity +} + +func findPGStreamMatch(tcsMocks []*models.Mock, requestBuffers [][]byte, logger *zap.Logger, isSorted bool, connectionID string, recordedPrep PrepMap) (int, *models.Mock) { + + mxIdx := -1 + + match := false + // loop for the exact match of the request + for idx, mock := range tcsMocks { + if len(mock.Spec.PostgresRequests) == len(requestBuffers) { + for _, reqBuff := range requestBuffers { + actualPgReq := decodePgRequest(reqBuff, logger) + if actualPgReq == nil { + return -1, nil + } + + // here handle cases of prepared statement very carefully + match, err := compareExactMatch(mock, actualPgReq, logger) + if err != nil { + logger.Error("Error while matching exact match", zap.Error(err)) + continue + } + if match { + return idx, nil + } + } + } + } + if !isSorted { + return mxIdx, nil + } + // loop for the ps match of the request + if !match { + for idx, mock := range tcsMocks { + if len(mock.Spec.PostgresRequests) == len(requestBuffers) { + for _, reqBuff := range requestBuffers { + actualPgReq := decodePgRequest(reqBuff, logger) + if actualPgReq == nil { + return -1, nil + } + // just matching the corresponding PS in this case there is no need to edit the mock + match, newBindPs, err := PreparedStatementMatch(mock, actualPgReq, logger, connectionID, recordedPrep) + if err != nil { + logger.Error("Error while matching prepared statements", zap.Error(err)) + } + + if match { + logger.Debug("New Bind Prepared Statement", zap.Any("New Bind Prepared Statement", newBindPs), zap.String("ConnectionId", connectionID), zap.String("Mock Name", mock.Name)) + return idx, nil + } + // just check the query + if reflect.DeepEqual(actualPgReq.PacketTypes, []string{"P", "B", "D", "E"}) && reflect.DeepEqual(mock.Spec.PostgresRequests[0].PacketTypes, []string{"P", "B", "D", "E"}) { + if mock.Spec.PostgresRequests[0].Parses[0].Query == actualPgReq.Parses[0].Query { + return idx, nil + } + } + } + } + } + } + + if !match { + for idx, mock := range tcsMocks { + if len(mock.Spec.PostgresRequests) == len(requestBuffers) { + for _, reqBuff := range requestBuffers { + actualPgReq := decodePgRequest(reqBuff, logger) + if actualPgReq == nil { + return -1, nil + } + + // have to ignore first parse message of begin read only + // should compare only query in the parse message + if len(actualPgReq.PacketTypes) != len(mock.Spec.PostgresRequests[0].PacketTypes) { + //check for begin read only + if len(actualPgReq.PacketTypes) > 0 && len(mock.Spec.PostgresRequests[0].PacketTypes) > 0 { + + ischanged, newMock := changeResToPS(mock, actualPgReq, logger, connectionID) + + if ischanged { + return idx, newMock + } + continue + + } + + } + } + } + } + } + + return mxIdx, nil +} + +// check what are the queries for the given ps of actualPgReq +// check if the execute query is present for that or not +// mark that mock true and return the response by changing the res format like +// postgres data types acc to result set format +func changeResToPS(mock *models.Mock, actualPgReq *models.Backend, logger *zap.Logger, connectionID string) (bool, *models.Mock) { + actualpackets := actualPgReq.PacketTypes + mockPackets := mock.Spec.PostgresRequests[0].PacketTypes + + // [P, B, E, P, B, D, E] => [B, E, B, E] + // write code that of packet is ["B", "E"] and mockPackets ["P", "B", "D", "E"] handle it in case1 + // and if packet is [B, E, B, E] and mockPackets [P, B, E, P, B, D, E] handle it in case2 + + ischanged := false + var newMock *models.Mock + // [B E P D B E] + // [P, B, E, P, B, D, E] -> [B, E, P, B, D, E] + if (reflect.DeepEqual(actualpackets, []string{"B", "E", "P", "D", "B", "E"}) || reflect.DeepEqual(actualpackets, []string{"B", "E", "P", "B", "D", "E"})) && reflect.DeepEqual(mockPackets, []string{"P", "B", "E", "P", "B", "D", "E"}) { + // fmt.Println("Handling Case 1 for mock", mock.Name) + // handleCase1(packets, mockPackets) + // also check if the second query is same or not + // fmt.Println("ActualPgReq", actualPgReq.Parses[0].Query, "MOCK REQ 1", mock.Spec.PostgresRequests[0].Parses[0].Query, "MOCK REQ 2", mock.Spec.PostgresRequests[0].Parses[1].Query) + if actualPgReq.Parses[0].Query != mock.Spec.PostgresRequests[0].Parses[1].Query { + return false, nil + } + newMock = sliceCommandTag(mock, logger, testmap[connectionID], actualPgReq, 1) + return true, newMock + } + + // case 2 + var ps string + if reflect.DeepEqual(actualpackets, []string{"B", "E"}) && reflect.DeepEqual(mockPackets, []string{"P", "B", "D", "E"}) { + // fmt.Println("Handling Case 2 for mock", mock.Name) + ps = actualPgReq.Binds[0].PreparedStatement + for _, v := range testmap[connectionID] { + if v.Query == mock.Spec.PostgresRequests[0].Parses[0].Query && v.PrepIdentifier == ps { + ischanged = true + break + } + } + } + + if ischanged { + // if strings.Contains(ps, "S_") { + // fmt.Println("Inside Prepared Statement") + newMock = sliceCommandTag(mock, logger, testmap[connectionID], actualPgReq, 2) + // } + return true, newMock + } + + // packets = []string{"B", "E", "B", "E"} + // mockPackets = []string{"P", "B", "E", "P", "B", "D", "E"} + + // Case 3 + if reflect.DeepEqual(actualpackets, []string{"B", "E", "B", "E"}) && reflect.DeepEqual(mockPackets, []string{"P", "B", "E", "P", "B", "D", "E"}) { + // fmt.Println("Handling Case 3 for mock", mock.Name) + ischanged1 := false + ps1 := actualPgReq.Binds[0].PreparedStatement + for _, v := range testmap[connectionID] { + if v.Query == mock.Spec.PostgresRequests[0].Parses[0].Query && v.PrepIdentifier == ps1 { + ischanged1 = true + break + } + } + //Matched In Binary Matching for Unsorted mock-222 + ischanged2 := false + ps2 := actualPgReq.Binds[1].PreparedStatement + for _, v := range testmap[connectionID] { + if v.Query == mock.Spec.PostgresRequests[0].Parses[1].Query && v.PrepIdentifier == ps2 { + ischanged2 = true + break + } + } + if ischanged1 && ischanged2 { + newMock = sliceCommandTag(mock, logger, testmap[connectionID], actualPgReq, 2) + return true, newMock + } + } + + // Case 4 + if reflect.DeepEqual(actualpackets, []string{"B", "E", "B", "E"}) && reflect.DeepEqual(mockPackets, []string{"B", "E", "P", "B", "D", "E"}) { + // fmt.Println("Handling Case 4 for mock", mock.Name) + // get the query for the prepared statement of test mode + ischanged := false + ps := actualPgReq.Binds[1].PreparedStatement + for _, v := range testmap[connectionID] { + if v.Query == mock.Spec.PostgresRequests[0].Parses[0].Query && v.PrepIdentifier == ps { + ischanged = true + break + } + } + if ischanged { + newMock = sliceCommandTag(mock, logger, testmap[connectionID], actualPgReq, 2) + return true, newMock + } + + } + + return false, nil + +} + +func PreparedStatementMatch(mock *models.Mock, actualPgReq *models.Backend, logger *zap.Logger, ConnectionID string, recordedPrep PrepMap) (bool, []string, error) { + // fmt.Println("Inside PreparedStatementMatch") + // check the current Query associated with the connection id and Identifier + ifps := checkIfps(actualPgReq.PacketTypes) + if !ifps { + return false, nil, nil + } + // check if given mock is a prepared statement + ifpsMock := checkIfps(mock.Spec.PostgresRequests[0].PacketTypes) + if !ifpsMock { + return false, nil, nil + } + + if len(mock.Spec.PostgresRequests[0].PacketTypes) != len(actualPgReq.PacketTypes) { + return false, nil, nil + } + + // get all the binds from the actualPgReq + binds := actualPgReq.Binds + newBinPreparedStatement := make([]string, 0) + mockBinds := mock.Spec.PostgresRequests[0].Binds + mockConn := mock.ConnectionID + var foo = false + for idx, bind := range binds { + currentPs := bind.PreparedStatement + currentQuerydata := testmap[ConnectionID] + currentQuery := "" + // check in the map that what's the current query for this preparedstatement + // then will check what is the recorded prepared statement for this query + for _, v := range currentQuerydata { + if v.PrepIdentifier == currentPs { + // fmt.Println("Current query for this identifier is ", v.Query) + currentQuery = v.Query + break + } + } + logger.Debug("Current Query for this prepared statement", zap.String("Query", currentQuery), zap.String("Identifier", currentPs)) + foo = false + + // for _, mb := range mockBinds { + // check if the query for mock ps (v.PreparedStatement) is same as the current query + for _, querydata := range recordedPrep[mockConn] { + if querydata.Query == currentQuery && mockBinds[idx].PreparedStatement == querydata.PrepIdentifier { + logger.Debug("Matched with the recorded prepared statement with Identifier and connectionID is", zap.String("Identifier", querydata.PrepIdentifier), zap.String("ConnectionId", mockConn), zap.String("Current Identifier", currentPs), zap.String("Query", currentQuery)) + foo = true + break + } + // } + } + } + if foo { + return true, newBinPreparedStatement, nil + } + + return false, nil, nil +} + +func compareExactMatch(mock *models.Mock, actualPgReq *models.Backend, logger *zap.Logger) (bool, error) { + logger.Debug("Inside CompareExactMatch") + // have to ignore first parse message of begin read only + // should compare only query in the parse message + if len(actualPgReq.PacketTypes) != len(mock.Spec.PostgresRequests[0].PacketTypes) { + return false, nil + } + + // call a separate function for matching prepared statements + for idx, v := range actualPgReq.PacketTypes { + if v != mock.Spec.PostgresRequests[0].PacketTypes[idx] { + return false, nil + } + } + // IsPreparedStatement(mock, actualPgReq, logger, ConnectionId) + + // this will give me the + var ( + p, b, e int = 0, 0, 0 + ) + for i := 0; i < len(actualPgReq.PacketTypes); i++ { + switch actualPgReq.PacketTypes[i] { + case "P": + // fmt.Println("Inside P") + p++ + if actualPgReq.Parses[p-1].Query != mock.Spec.PostgresRequests[0].Parses[p-1].Query { + return false, nil + } + + if actualPgReq.Parses[p-1].Name != mock.Spec.PostgresRequests[0].Parses[p-1].Name { + return false, nil + } + + if len(actualPgReq.Parses[p-1].ParameterOIDs) != len(mock.Spec.PostgresRequests[0].Parses[p-1].ParameterOIDs) { + return false, nil + } + for j := 0; j < len(actualPgReq.Parses[p-1].ParameterOIDs); j++ { + if actualPgReq.Parses[p-1].ParameterOIDs[j] != mock.Spec.PostgresRequests[0].Parses[p-1].ParameterOIDs[j] { + return false, nil + } + } + + case "B": + // fmt.Println("Inside B") + b++ + if actualPgReq.Binds[b-1].DestinationPortal != mock.Spec.PostgresRequests[0].Binds[b-1].DestinationPortal { + return false, nil + } + + if actualPgReq.Binds[b-1].PreparedStatement != mock.Spec.PostgresRequests[0].Binds[b-1].PreparedStatement { + return false, nil + } + + if len(actualPgReq.Binds[b-1].ParameterFormatCodes) != len(mock.Spec.PostgresRequests[0].Binds[b-1].ParameterFormatCodes) { + return false, nil + } + for j := 0; j < len(actualPgReq.Binds[b-1].ParameterFormatCodes); j++ { + if actualPgReq.Binds[b-1].ParameterFormatCodes[j] != mock.Spec.PostgresRequests[0].Binds[b-1].ParameterFormatCodes[j] { + return false, nil + } + } + if len(actualPgReq.Binds[b-1].Parameters) != len(mock.Spec.PostgresRequests[0].Binds[b-1].Parameters) { + return false, nil + } + for j := 0; j < len(actualPgReq.Binds[b-1].Parameters); j++ { + for _, v := range actualPgReq.Binds[b-1].Parameters[j] { + if v != mock.Spec.PostgresRequests[0].Binds[b-1].Parameters[j][0] { + return false, nil + } + } + } + if len(actualPgReq.Binds[b-1].ResultFormatCodes) != len(mock.Spec.PostgresRequests[0].Binds[b-1].ResultFormatCodes) { + return false, nil + } + for j := 0; j < len(actualPgReq.Binds[b-1].ResultFormatCodes); j++ { + if actualPgReq.Binds[b-1].ResultFormatCodes[j] != mock.Spec.PostgresRequests[0].Binds[b-1].ResultFormatCodes[j] { + return false, nil + } + } + + case "E": + // fmt.Println("Inside E") + e++ + if actualPgReq.Executes[e-1].Portal != mock.Spec.PostgresRequests[0].Executes[e-1].Portal { + return false, nil + } + if actualPgReq.Executes[e-1].MaxRows != mock.Spec.PostgresRequests[0].Executes[e-1].MaxRows { + return false, nil + } + + case "c": + if actualPgReq.CopyDone != mock.Spec.PostgresRequests[0].CopyDone { + return false, nil + } + case "H": + if actualPgReq.CopyFail.Message != mock.Spec.PostgresRequests[0].CopyFail.Message { + return false, nil + } + case "Q": + if actualPgReq.Query != mock.Spec.PostgresRequests[0].Query { + return false, nil + } + default: + return false, nil + } + } + return true, nil +} + +// make this in such a way if it returns -1 then we will continue with the original mock +func validateMock(tcsMocks []*models.Mock, idx int, requestBuffers [][]byte, logger *zap.Logger) (bool, *models.Mock) { + + actualPgReq := decodePgRequest(requestBuffers[0], logger) + if actualPgReq == nil { + return true, nil + } + mock := tcsMocks[idx].Spec.PostgresRequests[0] + if len(mock.PacketTypes) == len(actualPgReq.PacketTypes) { + if reflect.DeepEqual(tcsMocks[idx].Spec.PostgresRequests[0].PacketTypes, []string{"B", "E", "P", "B", "D", "E"}) { + if mock.Parses[0].Query == actualPgReq.Parses[0].Query { + return true, nil + } + } + if reflect.DeepEqual(mock.PacketTypes, []string{"B", "E", "B", "E"}) { + // fmt.Println("Inside Validate Mock for B, E, B, E") + return true, nil + } + if reflect.DeepEqual(mock.PacketTypes, []string{"B", "E"}) { + // fmt.Println("Inside Validate Mock for B, E") + copyMock := *tcsMocks[idx] + copyMock.Spec.PostgresResponses[0].PacketTypes = []string{"2", "C", "Z"} + copyMock.Spec.PostgresResponses[0].Payload = "" + return false, ©Mock + } + if reflect.DeepEqual(mock.PacketTypes, []string{"P", "B", "D", "E"}) { + // fmt.Println("Inside Validate Mock for P, B, D, E") + copyMock := *tcsMocks[idx] + copyMock.Spec.PostgresResponses[0].PacketTypes = []string{"1", "2", "T", "C", "Z"} + copyMock.Spec.PostgresResponses[0].Payload = "" + return false, ©Mock + } + } else { + // [B, E, P, B, D, E] => [ P, B, D, E] + if reflect.DeepEqual(mock.PacketTypes, []string{"B", "E", "P", "B", "D", "E"}) && reflect.DeepEqual(actualPgReq.PacketTypes, []string{"P", "B", "D", "E"}) { + // fmt.Println("Inside Validate Mock for B, E, B, E") + if mock.Parses[0].Query == actualPgReq.Parses[0].Query { + // no need to do anything + // fmt.Println("Matched with the query AHHAHAHAHAH", mock.Parses[0].Query) + copyMock := *tcsMocks[idx] + copyMock.Spec.PostgresResponses[0].PacketTypes = []string{"1", "2", "T", "C", "Z"} + copyMock.Spec.PostgresResponses[0].Payload = "" + copyMock.Spec.PostgresResponses[0].CommandCompletes = copyMock.Spec.PostgresResponses[0].CommandCompletes[1:] + // fmt.Println("Matched with the query AHHAHAHAHAH", copyMock) + return false, ©Mock + } + } + } + return true, nil +} diff --git a/pkg/core/proxy/integrations/postgres/v1/postgres.go b/pkg/core/proxy/integrations/postgres/v1/postgres.go new file mode 100755 index 000000000..76e2c8bd9 --- /dev/null +++ b/pkg/core/proxy/integrations/postgres/v1/postgres.go @@ -0,0 +1,82 @@ +package v1 + +import ( + "context" + "encoding/binary" + "net" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/utils" + + "go.keploy.io/server/v2/pkg/models" + + "go.uber.org/zap" +) + +func init() { + integrations.Register("postgres_v1", NewPostgresV1) +} + +type PostgresV1 struct { + logger *zap.Logger +} + +func NewPostgresV1(logger *zap.Logger) integrations.Integrations { + return &PostgresV1{ + logger: logger, + } +} + +// MatchType determines if the outgoing network call is Postgres by comparing the +// message format with that of a Postgres text message. +func (p *PostgresV1) MatchType(_ context.Context, reqBuf []byte) bool { + const ProtocolVersion = 0x00030000 // Protocol version 3.0 + + if len(reqBuf) < 8 { + // Not enough data for a complete header + return false + } + + // The first four bytes are the message length, but we don't need to check those + // The next four bytes are the protocol version + version := binary.BigEndian.Uint32(reqBuf[4:8]) + if version == 80877103 { + return true + } + return version == ProtocolVersion +} + +func (p *PostgresV1) RecordOutgoing(ctx context.Context, src net.Conn, dst net.Conn, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + logger := p.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", ctx.Value(models.ClientConnectionIDKey).(string)), zap.Any("Destination ConnectionID", ctx.Value(models.DestConnectionIDKey).(string))) + + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial postgres message") + return err + } + err = encodePostgres(ctx, logger, reqBuf, src, dst, mocks, opts) + if err != nil { + // TODO: why debug log? + logger.Debug("failed to encode the postgres message into the yaml") + return err + } + return nil + +} + +func (p *PostgresV1) MockOutgoing(ctx context.Context, src net.Conn, dstCfg *integrations.ConditionalDstCfg, mockDb integrations.MockMemDb, opts models.OutgoingOptions) error { + logger := p.logger.With(zap.Any("Client IP Address", src.RemoteAddr().String()), zap.Any("Client ConnectionID", util.GetNextID()), zap.Any("Destination ConnectionID", util.GetNextID())) + reqBuf, err := util.ReadInitialBuf(ctx, logger, src) + if err != nil { + utils.LogError(logger, err, "failed to read the initial postgres message") + return err + } + + err = decodePostgres(ctx, logger, reqBuf, src, dstCfg, mockDb, opts) + if err != nil { + logger.Debug("failed to decode the postgres message from the yaml") + return err + } + return nil +} diff --git a/pkg/core/proxy/integrations/postgres/v1/transcoder.go b/pkg/core/proxy/integrations/postgres/v1/transcoder.go new file mode 100644 index 000000000..9e1ce08c9 --- /dev/null +++ b/pkg/core/proxy/integrations/postgres/v1/transcoder.go @@ -0,0 +1,313 @@ +package v1 + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + + "github.com/jackc/pgproto3/v2" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +type BackendWrapper struct { + BackendWrapper models.Backend +} + +type FrontendWrapper struct { + FrontendWrapper models.Frontend +} + +func NewBackend() *BackendWrapper { + return &BackendWrapper{} +} + +func NewFrontend() *FrontendWrapper { + return &FrontendWrapper{} +} + +// PG Response Packet Transcoder +func (b *BackendWrapper) translateToReadableBackend(msgBody []byte) (pgproto3.FrontendMessage, error) { + // fmt.Println("msgType", b.BackendWrapper.MsgType) + var msg pgproto3.FrontendMessage + switch b.BackendWrapper.MsgType { + case 'B': + msg = &b.BackendWrapper.Bind + case 'C': + msg = &b.BackendWrapper.Close + case 'D': + msg = &b.BackendWrapper.Describe + case 'E': + msg = &b.BackendWrapper.Execute + case 'F': + msg = &b.BackendWrapper.FunctionCall + case 'f': + msg = &b.BackendWrapper.CopyFail + case 'd': + msg = &b.BackendWrapper.CopyData + case 'c': + msg = &b.BackendWrapper.CopyDone + case 'H': + msg = &b.BackendWrapper.Flush + case 'P': + msg = &b.BackendWrapper.Parse + case 'p': + switch b.BackendWrapper.AuthType { + case pgproto3.AuthTypeSASL: + msg = &pgproto3.SASLInitialResponse{} + case pgproto3.AuthTypeSASLContinue: + msg = &pgproto3.SASLResponse{} + case pgproto3.AuthTypeSASLFinal: + msg = &pgproto3.SASLResponse{} + case pgproto3.AuthTypeGSS, pgproto3.AuthTypeGSSCont: + msg = &pgproto3.GSSResponse{} + case pgproto3.AuthTypeCleartextPassword, pgproto3.AuthTypeMD5Password: + fallthrough + default: + // to maintain backwards compatability + msg = &pgproto3.PasswordMessage{} + } + case 'Q': + msg = &b.BackendWrapper.Query + case 'S': + msg = &b.BackendWrapper.Sync + case 'X': + msg = &b.BackendWrapper.Terminate + default: + return nil, fmt.Errorf("unknown message type: %c", b.BackendWrapper.MsgType) + } + err := msg.Decode(msgBody[5:]) + if b.BackendWrapper.MsgType == 'P' { + *msg.(*pgproto3.Parse) = b.BackendWrapper.Parse + } + + return msg, err +} + +func (f *FrontendWrapper) translateToReadableResponse(logger *zap.Logger, msgBody []byte) (pgproto3.BackendMessage, error) { + f.FrontendWrapper.BodyLen = int(binary.BigEndian.Uint32(msgBody[1:])) - 4 + f.FrontendWrapper.MsgType = msgBody[0] + var msg pgproto3.BackendMessage + switch f.FrontendWrapper.MsgType { + case '1': + msg = &f.FrontendWrapper.ParseComplete + case '2': + msg = &f.FrontendWrapper.BindComplete + case '3': + msg = &f.FrontendWrapper.CloseComplete + case 'A': + msg = &f.FrontendWrapper.NotificationResponse + case 'c': + msg = &f.FrontendWrapper.CopyDone + case 'C': + msg = &f.FrontendWrapper.CommandComplete + case 'd': + msg = &f.FrontendWrapper.CopyData + case 'D': + msg = &f.FrontendWrapper.DataRow + logger.Debug("Data Row", zap.String("data", string(msgBody))) + case 'E': + msg = &f.FrontendWrapper.ErrorResponse + case 'G': + msg = &f.FrontendWrapper.CopyInResponse + case 'H': + msg = &f.FrontendWrapper.CopyOutResponse + case 'I': + msg = &f.FrontendWrapper.EmptyQueryResponse + case 'K': + msg = &f.FrontendWrapper.BackendKeyData + case 'n': + msg = &f.FrontendWrapper.NoData + case 'N': + msg = &f.FrontendWrapper.NoticeResponse + case 'R': + var err error + msg, err = f.findAuthMsgType(msgBody) + if err != nil { + return nil, err + } + case 's': + msg = &f.FrontendWrapper.PortalSuspended + case 'S': + msg = &f.FrontendWrapper.ParameterStatus + case 't': + msg = &f.FrontendWrapper.ParameterDescription + case 'T': + msg = &f.FrontendWrapper.RowDescription + case 'V': + msg = &f.FrontendWrapper.FunctionCallResponse + case 'W': + msg = &f.FrontendWrapper.CopyBothResponse + case 'Z': + msg = &f.FrontendWrapper.ReadyForQuery + default: + return nil, fmt.Errorf("unknown message type: %c", f.FrontendWrapper.MsgType) + } + + logger.Debug("msgFrontend", zap.String("msgFrontend", string(msgBody))) + + err := msg.Decode(msgBody[5:]) + if err != nil { + utils.LogError(logger, err, "Error from decoding request message") + } + + bits := msg.Encode([]byte{}) + // println("Length of bits", len(bits), "Length of msgBody", len(msgBody)) + if len(bits) != len(msgBody) { + logger.Debug("Encoded Data doesn't match the original data ..") + } + + return msg, err +} + +const ( + minStartupPacketLen = 4 // minStartupPacketLen is a single 32-bit int version or code. + maxStartupPacketLen = 10000 // maxStartupPacketLen is MAX_STARTUP_PACKET_LENGTH from PG source. + sslRequestNumber = 80877103 + cancelRequestCode = 80877102 + gssEncReqNumber = 80877104 +) + +// ProtocolVersionNumber Replace with actual version number if different +const ProtocolVersionNumber uint32 = 196608 + +func (b *BackendWrapper) decodeStartupMessage(buf []byte) (pgproto3.FrontendMessage, error) { + + reader := pgproto3.NewByteReader(buf) + buf, err := reader.Next(4) + + if err != nil { + return nil, err + } + msgSize := int(binary.BigEndian.Uint32(buf) - 4) + + if msgSize < minStartupPacketLen || msgSize > maxStartupPacketLen { + return nil, fmt.Errorf("invalid length of startup packet: %d", msgSize) + } + + buf, err = reader.Next(msgSize) + if err != nil { + return nil, fmt.Errorf("invalid length of startup packet: %d", msgSize) + } + + code := binary.BigEndian.Uint32(buf) + + switch code { + case ProtocolVersionNumber: + err := b.BackendWrapper.StartupMessage.Decode(buf) + if err != nil { + return nil, err + } + return &b.BackendWrapper.StartupMessage, nil + case sslRequestNumber: + err := b.BackendWrapper.SSlRequest.Decode(buf) + if err != nil { + return nil, err + } + return &b.BackendWrapper.SSlRequest, nil + case cancelRequestCode: + err := b.BackendWrapper.CancelRequest.Decode(buf) + if err != nil { + return nil, err + } + return &b.BackendWrapper.CancelRequest, nil + case gssEncReqNumber: + err := b.BackendWrapper.GssEncRequest.Decode(buf) + if err != nil { + return nil, err + } + return &b.BackendWrapper.GssEncRequest, nil + default: + return nil, fmt.Errorf("unknown startup message code: %d", code) + } +} + +// constants for the authentication message types +const ( + AuthTypeOk = 0 + AuthTypeCleartextPassword = 3 + AuthTypeMD5Password = 5 + AuthTypeSCMCreds = 6 + AuthTypeGSS = 7 + AuthTypeGSSCont = 8 + AuthTypeSSPI = 9 + AuthTypeSASL = 10 + AuthTypeSASLContinue = 11 + AuthTypeSASLFinal = 12 +) + +func (f *FrontendWrapper) findAuthMsgType(src []byte) (pgproto3.BackendMessage, error) { + if len(src) < 4 { + return nil, errors.New("authentication message too short") + } + + authType, err := parseAuthType(src) + if err != nil { + return nil, err + + } + + f.FrontendWrapper.AuthType = authType + switch f.FrontendWrapper.AuthType { + case pgproto3.AuthTypeOk: + return &f.FrontendWrapper.AuthenticationOk, nil + case pgproto3.AuthTypeCleartextPassword: + return &f.FrontendWrapper.AuthenticationCleartextPassword, nil + case pgproto3.AuthTypeMD5Password: + return &f.FrontendWrapper.AuthenticationMD5Password, nil + case pgproto3.AuthTypeSCMCreds: + return nil, errors.New("AuthTypeSCMCreds is unimplemented") + case pgproto3.AuthTypeGSS: + return &f.FrontendWrapper.AuthenticationGSS, nil + case pgproto3.AuthTypeGSSCont: + return &f.FrontendWrapper.AuthenticationGSSContinue, nil + case pgproto3.AuthTypeSSPI: + return nil, errors.New("AuthTypeSSPI is unimplemented") + case pgproto3.AuthTypeSASL: + return &f.FrontendWrapper.AuthenticationSASL, nil + case pgproto3.AuthTypeSASLContinue: + return &f.FrontendWrapper.AuthenticationSASLContinue, nil + case pgproto3.AuthTypeSASLFinal: + return &f.FrontendWrapper.AuthenticationSASLFinal, nil + default: + return nil, fmt.Errorf("unknown authentication type: %d", f.FrontendWrapper.AuthType) + } + +} + +// GetAuthType returns the authType used in the current state of the frontend. +// See SetAuthType for more information. +func parseAuthType(buffer []byte) (int32, error) { + // Create a bytes reader from the buffer + reader := bytes.NewReader(buffer) + + // Skip the message type (1 byte) as you know it's 'R' + _, err := reader.Seek(1, 0) + if err != nil { + return 0, err + } + + // Read the length of the message (4 bytes) + var length int32 + err = binary.Read(reader, binary.BigEndian, &length) + if err != nil { + return 0, err + } + + // Read the auth type code (4 bytes) + var authType int32 + err = binary.Read(reader, binary.BigEndian, &authType) + if err != nil { + return 0, err + } + + return authType, nil +} + +func isStartupPacket(packet []byte) bool { + protocolVersion := binary.BigEndian.Uint32(packet[4:8]) + // printStartupPacketDetails(packet) + return protocolVersion == 196608 // 3.0 in PostgreSQL +} diff --git a/pkg/core/proxy/integrations/postgres/v1/util.go b/pkg/core/proxy/integrations/postgres/v1/util.go new file mode 100755 index 000000000..54a299ccf --- /dev/null +++ b/pkg/core/proxy/integrations/postgres/v1/util.go @@ -0,0 +1,457 @@ +package v1 + +import ( + "encoding/binary" + "errors" + "fmt" + "strconv" + "time" + + "github.com/jackc/pgproto3/v2" + "go.keploy.io/server/v2/pkg/core/proxy/integrations/util" + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +func postgresDecoderFrontend(response models.Frontend) ([]byte, error) { + // println("Inside PostgresDecoderFrontend") + var resbuffer []byte + // list of packets available in the buffer + packets := response.PacketTypes + var cc, dtr, ps int = 0, 0, 0 + for _, packet := range packets { + var msg pgproto3.BackendMessage + + switch packet { + case string('1'): + msg = &pgproto3.ParseComplete{} + case string('2'): + msg = &pgproto3.BindComplete{} + case string('3'): + msg = &pgproto3.CloseComplete{} + case string('A'): + msg = &pgproto3.NotificationResponse{ + PID: response.NotificationResponse.PID, + Channel: response.NotificationResponse.Channel, + Payload: response.NotificationResponse.Payload, + } + case string('c'): + msg = &pgproto3.CopyDone{} + case string('C'): + msg = &pgproto3.CommandComplete{ + CommandTag: response.CommandCompletes[cc].CommandTag, + CommandTagType: response.CommandCompletes[cc].CommandTagType, + } + cc++ + case string('d'): + msg = &pgproto3.CopyData{ + Data: response.CopyData.Data, + } + case string('D'): + msg = &pgproto3.DataRow{ + RowValues: response.DataRows[dtr].RowValues, + Values: response.DataRows[dtr].Values, + } + dtr++ + case string('E'): + msg = &pgproto3.ErrorResponse{ + Severity: response.ErrorResponse.Severity, + Code: response.ErrorResponse.Code, + Message: response.ErrorResponse.Message, + Detail: response.ErrorResponse.Detail, + Hint: response.ErrorResponse.Hint, + Position: response.ErrorResponse.Position, + InternalPosition: response.ErrorResponse.InternalPosition, + InternalQuery: response.ErrorResponse.InternalQuery, + Where: response.ErrorResponse.Where, + SchemaName: response.ErrorResponse.SchemaName, + TableName: response.ErrorResponse.TableName, + ColumnName: response.ErrorResponse.ColumnName, + DataTypeName: response.ErrorResponse.DataTypeName, + ConstraintName: response.ErrorResponse.ConstraintName, + File: response.ErrorResponse.File, + Line: response.ErrorResponse.Line, + Routine: response.ErrorResponse.Routine, + } + case string('G'): + msg = &pgproto3.CopyInResponse{ + OverallFormat: response.CopyInResponse.OverallFormat, + ColumnFormatCodes: response.CopyInResponse.ColumnFormatCodes, + } + case string('H'): + msg = &pgproto3.CopyOutResponse{ + OverallFormat: response.CopyOutResponse.OverallFormat, + ColumnFormatCodes: response.CopyOutResponse.ColumnFormatCodes, + } + case string('I'): + msg = &pgproto3.EmptyQueryResponse{} + case string('K'): + msg = &pgproto3.BackendKeyData{ + ProcessID: response.BackendKeyData.ProcessID, + SecretKey: response.BackendKeyData.SecretKey, + } + case string('n'): + msg = &pgproto3.NoData{} + case string('N'): + msg = &pgproto3.NoticeResponse{ + Severity: response.NoticeResponse.Severity, + Code: response.NoticeResponse.Code, + Message: response.NoticeResponse.Message, + Detail: response.NoticeResponse.Detail, + Hint: response.NoticeResponse.Hint, + Position: response.NoticeResponse.Position, + InternalPosition: response.NoticeResponse.InternalPosition, + InternalQuery: response.NoticeResponse.InternalQuery, + Where: response.NoticeResponse.Where, + SchemaName: response.NoticeResponse.SchemaName, + TableName: response.NoticeResponse.TableName, + ColumnName: response.NoticeResponse.ColumnName, + DataTypeName: response.NoticeResponse.DataTypeName, + ConstraintName: response.NoticeResponse.ConstraintName, + File: response.NoticeResponse.File, + Line: response.NoticeResponse.Line, + Routine: response.NoticeResponse.Routine, + } + + case string('R'): + switch response.AuthType { + case AuthTypeOk: + msg = &pgproto3.AuthenticationOk{} + case AuthTypeCleartextPassword: + msg = &pgproto3.AuthenticationCleartextPassword{} + case AuthTypeMD5Password: + msg = &pgproto3.AuthenticationMD5Password{} + case AuthTypeSCMCreds: + return nil, errors.New("AuthTypeSCMCreds is unimplemented") + case AuthTypeGSS: + return nil, errors.New("AuthTypeGSS is unimplemented") + case AuthTypeGSSCont: + msg = &pgproto3.AuthenticationGSSContinue{} + case AuthTypeSSPI: + return nil, errors.New("AuthTypeSSPI is unimplemented") + case AuthTypeSASL: + msg = &pgproto3.AuthenticationSASL{} + case AuthTypeSASLContinue: + msg = &pgproto3.AuthenticationSASLContinue{} + case AuthTypeSASLFinal: + msg = &pgproto3.AuthenticationSASLFinal{} + default: + return nil, fmt.Errorf("unknown authentication type: %d", response.AuthType) + } + + case string('s'): + msg = &pgproto3.PortalSuspended{} + case string('S'): + msg = &pgproto3.ParameterStatus{ + Name: response.ParameterStatusCombined[ps].Name, + Value: response.ParameterStatusCombined[ps].Value, + } + ps++ + + case string('t'): + msg = &pgproto3.ParameterDescription{ + ParameterOIDs: response.ParameterDescription.ParameterOIDs, + } + case string('T'): + msg = &pgproto3.RowDescription{ + Fields: response.RowDescription.Fields, + } + case string('V'): + msg = &pgproto3.FunctionCallResponse{ + Result: response.FunctionCallResponse.Result, + } + case string('W'): + msg = &pgproto3.CopyBothResponse{ + OverallFormat: response.CopyBothResponse.OverallFormat, + ColumnFormatCodes: response.CopyBothResponse.ColumnFormatCodes, + } + case string('Z'): + msg = &pgproto3.ReadyForQuery{ + TxStatus: response.ReadyForQuery.TxStatus, + } + default: + return nil, fmt.Errorf("unknown message type: %q", packet) + } + + encoded := msg.Encode([]byte{}) + resbuffer = append(resbuffer, encoded...) + } + return resbuffer, nil +} + +func postgresDecoderBackend(request models.Backend) ([]byte, error) { + // take each object , try to make it frontend or backend message so that it can call it's corresponding encode function + // and then append it to the buffer, for a particular mock .. + + var reqbuffer []byte + // list of packets available in the buffer + var b, e, p = 0, 0, 0 + packets := request.PacketTypes + for _, packet := range packets { + var msg pgproto3.FrontendMessage + switch packet { + case string('B'): + msg = &pgproto3.Bind{ + DestinationPortal: request.Binds[b].DestinationPortal, + PreparedStatement: request.Binds[b].PreparedStatement, + ParameterFormatCodes: request.Binds[b].ParameterFormatCodes, + Parameters: request.Binds[b].Parameters, + ResultFormatCodes: request.Binds[b].ResultFormatCodes, + } + b++ + case string('C'): + msg = &pgproto3.Close{ + Object_Type: request.Close.Object_Type, + Name: request.Close.Name, + } + case string('D'): + msg = &pgproto3.Describe{ + ObjectType: request.Describe.ObjectType, + Name: request.Describe.Name, + } + case string('E'): + msg = &pgproto3.Execute{ + Portal: request.Executes[e].Portal, + MaxRows: request.Executes[e].MaxRows, + } + e++ + case string('F'): + // *msg.(*pgproto3.Flush) = request.Flush + msg = &pgproto3.Flush{} + case string('f'): + // *msg.(*pgproto3.FunctionCall) = request.FunctionCall + msg = &pgproto3.FunctionCall{ + Function: request.FunctionCall.Function, + Arguments: request.FunctionCall.Arguments, + ArgFormatCodes: request.FunctionCall.ArgFormatCodes, + ResultFormatCode: request.FunctionCall.ResultFormatCode, + } + case string('d'): + msg = &pgproto3.CopyData{ + Data: request.CopyData.Data, + } + case string('c'): + msg = &pgproto3.CopyDone{} + case string('H'): + msg = &pgproto3.CopyFail{ + Message: request.CopyFail.Message, + } + case string('P'): + msg = &pgproto3.Parse{ + Name: request.Parses[p].Name, + Query: request.Parses[p].Query, + ParameterOIDs: request.Parses[p].ParameterOIDs, + } + p++ + case string('p'): + switch request.AuthType { + case pgproto3.AuthTypeSASL: + msg = &pgproto3.SASLInitialResponse{ + AuthMechanism: request.SASLInitialResponse.AuthMechanism, + Data: request.SASLInitialResponse.Data, + } + case pgproto3.AuthTypeSASLContinue: + msg = &pgproto3.SASLResponse{ + Data: request.SASLResponse.Data, + } + case pgproto3.AuthTypeSASLFinal: + msg = &pgproto3.SASLResponse{ + Data: request.SASLResponse.Data, + } + case pgproto3.AuthTypeGSS, pgproto3.AuthTypeGSSCont: + msg = &pgproto3.GSSResponse{ + Data: []byte{}, // TODO: implement + } + case pgproto3.AuthTypeCleartextPassword, pgproto3.AuthTypeMD5Password: + fallthrough + default: + // to maintain backwards compatability + // println("Here is decoded PASSWORD", request.PasswordMessage.Password) + msg = &pgproto3.PasswordMessage{Password: request.PasswordMessage.Password} + } + case string('Q'): + msg = &pgproto3.Query{ + String: request.Query.String, + } + case string('S'): + msg = &pgproto3.Sync{} + case string('X'): + // *msg.(*pgproto3.Terminate) = request.Terminate + msg = &pgproto3.Terminate{} + default: + return nil, fmt.Errorf("unknown message type: %q", packet) + } + if msg == nil { + return nil, errors.New("msg is nil") + } + encoded := msg.Encode([]byte{}) + + reqbuffer = append(reqbuffer, encoded...) + } + return reqbuffer, nil +} + +func checkIfps(array []string) bool { + n := len(array) + if n%2 != 0 { + // If the array length is odd, it cannot match the pattern + return false + } + + for i := 0; i < n; i += 2 { + // Check if consecutive elements are "B" and "E" + if array[i] != "B" || array[i+1] != "E" { + return false + } + } + + return true +} + +func sliceCommandTag(mock *models.Mock, logger *zap.Logger, prep []QueryData, actualPgReq *models.Backend, psCase int) *models.Mock { + + logger.Debug("Inside Slice Command Tag for ", zap.Int("psCase", psCase)) + logger.Debug("Prep Query Data", zap.Any("prep", prep)) + switch psCase { + case 1: + + copyMock := *mock + // fmt.Println("Inside Slice Command Tag for ", psCase) + mockPackets := copyMock.Spec.PostgresResponses[0].PacketTypes + for idx, v := range mockPackets { + if v == "1" { + mockPackets = append(mockPackets[:idx], mockPackets[idx+1:]...) + } + } + copyMock.Spec.PostgresResponses[0].Payload = "" + copyMock.Spec.PostgresResponses[0].PacketTypes = mockPackets + + return ©Mock + case 2: + // ["2", D, C, Z] + copyMock := *mock + // fmt.Println("Inside Slice Command Tag for ", psCase) + mockPackets := copyMock.Spec.PostgresResponses[0].PacketTypes + for idx, v := range mockPackets { + if v == "1" || v == "T" { + mockPackets = append(mockPackets[:idx], mockPackets[idx+1:]...) + } + } + copyMock.Spec.PostgresResponses[0].Payload = "" + copyMock.Spec.PostgresResponses[0].PacketTypes = mockPackets + rsFormat := actualPgReq.Bind.ResultFormatCodes + + for idx, datarow := range copyMock.Spec.PostgresResponses[0].DataRows { + for column, rowVal := range datarow.RowValues { + // fmt.Println("datarow.RowValues", len(datarow.RowValues)) + if rsFormat[column] == 1 { + // datarows := make([]byte, 4) + newRow, _ := getChandedDataRow(rowVal) + // logger.Info("New Row Value", zap.String("newRow", newRow)) + copyMock.Spec.PostgresResponses[0].DataRows[idx].RowValues[column] = newRow + } + } + } + return ©Mock + default: + } + return nil +} + +func getChandedDataRow(input string) (string, error) { + // Convert input1 (integer input as string) to integer + buffer := make([]byte, 4) + if intValue, err := strconv.Atoi(input); err == nil { + + binary.BigEndian.PutUint32(buffer, uint32(intValue)) + return ("b64:" + util.EncodeBase64(buffer)), nil + } else if dateValue, err := time.Parse("2006-01-02", input); err == nil { + // Perform additional operations on the date + epoch := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) + difference := dateValue.Sub(epoch).Hours() / 24 + // fmt.Printf("Difference in days from epoch: %.2f days\n", difference) + binary.BigEndian.PutUint32(buffer, uint32(difference)) + return ("b64:" + util.EncodeBase64(buffer)), nil + } + return "b64:AAAAAA==", errors.New("Invalid input") + +} + +func decodePgRequest(buffer []byte, logger *zap.Logger) *models.Backend { + + pg := NewBackend() + + if !isStartupPacket(buffer) && len(buffer) > 5 { + bufferCopy := buffer + for i := 0; i < len(bufferCopy)-5; { + logger.Debug("Inside the if condition") + pg.BackendWrapper.MsgType = buffer[i] + pg.BackendWrapper.BodyLen = int(binary.BigEndian.Uint32(buffer[i+1:])) - 4 + if len(buffer) < (i + pg.BackendWrapper.BodyLen + 5) { + logger.Debug("failed to translate the postgres request message due to shorter network packet buffer") + break + } + msg, err := pg.translateToReadableBackend(buffer[i:(i + pg.BackendWrapper.BodyLen + 5)]) + if err != nil && buffer[i] != 112 { + logger.Debug("failed to translate the request message to readable", zap.Error(err)) + } + if pg.BackendWrapper.MsgType == 'p' { + pg.BackendWrapper.PasswordMessage = *msg.(*pgproto3.PasswordMessage) + } + + if pg.BackendWrapper.MsgType == 'P' { + pg.BackendWrapper.Parse = *msg.(*pgproto3.Parse) + pg.BackendWrapper.Parses = append(pg.BackendWrapper.Parses, pg.BackendWrapper.Parse) + } + + if pg.BackendWrapper.MsgType == 'B' { + pg.BackendWrapper.Bind = *msg.(*pgproto3.Bind) + pg.BackendWrapper.Binds = append(pg.BackendWrapper.Binds, pg.BackendWrapper.Bind) + } + + if pg.BackendWrapper.MsgType == 'E' { + pg.BackendWrapper.Execute = *msg.(*pgproto3.Execute) + pg.BackendWrapper.Executes = append(pg.BackendWrapper.Executes, pg.BackendWrapper.Execute) + } + + pg.BackendWrapper.PacketTypes = append(pg.BackendWrapper.PacketTypes, string(pg.BackendWrapper.MsgType)) + + i += (5 + pg.BackendWrapper.BodyLen) + } + + pgMock := &models.Backend{ + PacketTypes: pg.BackendWrapper.PacketTypes, + Identfier: "ClientRequest", + Length: uint32(len(buffer)), + // Payload: bufStr, + Bind: pg.BackendWrapper.Bind, + Binds: pg.BackendWrapper.Binds, + PasswordMessage: pg.BackendWrapper.PasswordMessage, + CancelRequest: pg.BackendWrapper.CancelRequest, + Close: pg.BackendWrapper.Close, + CopyData: pg.BackendWrapper.CopyData, + CopyDone: pg.BackendWrapper.CopyDone, + CopyFail: pg.BackendWrapper.CopyFail, + Describe: pg.BackendWrapper.Describe, + Execute: pg.BackendWrapper.Execute, + Executes: pg.BackendWrapper.Executes, + Flush: pg.BackendWrapper.Flush, + FunctionCall: pg.BackendWrapper.FunctionCall, + GssEncRequest: pg.BackendWrapper.GssEncRequest, + Parse: pg.BackendWrapper.Parse, + Parses: pg.BackendWrapper.Parses, + Query: pg.BackendWrapper.Query, + SSlRequest: pg.BackendWrapper.SSlRequest, + StartupMessage: pg.BackendWrapper.StartupMessage, + SASLInitialResponse: pg.BackendWrapper.SASLInitialResponse, + SASLResponse: pg.BackendWrapper.SASLResponse, + Sync: pg.BackendWrapper.Sync, + Terminate: pg.BackendWrapper.Terminate, + MsgType: pg.BackendWrapper.MsgType, + AuthType: pg.BackendWrapper.AuthType, + } + return pgMock + } + + return nil +} diff --git a/pkg/core/proxy/integrations/scram/scram.go b/pkg/core/proxy/integrations/scram/scram.go new file mode 100644 index 000000000..28551fba9 --- /dev/null +++ b/pkg/core/proxy/integrations/scram/scram.go @@ -0,0 +1,130 @@ +// Package scram provides functionality for SCRAM authentication. +package scram + +import ( + "encoding/base64" + "errors" + "fmt" + "strings" + + "github.com/xdg-go/pbkdf2" + "github.com/xdg-go/scram" + "github.com/xdg-go/stringprep" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +// GenerateServerFinalMessage generates the server's final message (i.e., the server proof) +// for SCRAM authentication, using a default password and given authentication message, mechanism, salt, iteration count. +func GenerateServerFinalMessage(authMessage, mechanism, password, salt string, itr int, logger *zap.Logger) (string, error) { + var ( + // Declare a variable to hold the hash generation function based on the chosen mechanism. + hashGen scram.HashGeneratorFcn + // normalised password is used in the salted password + passwordDigest string + ) + + username, err := extractUsername(authMessage) + if err != nil { + return "", err + } + + // Switch based on the provided mechanism to determine the hash function to be used. + switch mechanism { + case "SCRAM-SHA-1": + hashGen = scram.SHA1 + passwordDigest = mongoPasswordDigest(username, password) + case "SCRAM-SHA-256": + hashGen = scram.SHA256 + passwordDigest, err = stringprep.SASLprep.Prepare(password) + if err != nil { + return "", fmt.Errorf("error SASLprepping password for SCRAM-SHA-256 with password: %s. error: %v", password, err.Error()) + } + default: + // If the mechanism isn't supported, return an error. + return "", errors.New("unsupported authentication mechanism by keploy") + } + + // Get the hash function instance based on the determined generator. + h := hashGen() + + // Compute the salted password using the PBKDF2 function with the provided salt and iteration count. + // It uses the given password. This is the key derivation step. + logger.Debug("the input for generating the salted password", zap.Any("normalised password", passwordDigest), zap.Any("salt", salt), zap.Any("iteration", itr), zap.Any("hash size", h.Size()), zap.Any("mechanism", mechanism)) + saltedPassword := pbkdf2.Key([]byte(passwordDigest), []byte(salt), itr, h.Size(), hashGen) + logger.Debug("after generating the salted password", zap.Any("salted password", saltedPassword)) + + // Compute the server key using HMAC with the derived salted password and the string "Server Key". + serverKey := computeHMAC(hashGen, saltedPassword, []byte("Server Key")) + logger.Debug("generating the server using the salted password", zap.Any("server key", serverKey)) + + // Compute the server signature (server proof) using HMAC with the server key and the provided authMessage. + serverSignature := computeHMAC(hashGen, serverKey, []byte(authMessage)) + logger.Debug("the new server proof for the second auth request", zap.Any("server signature", base64.StdEncoding.EncodeToString(serverSignature)), zap.Any("derived from auth message", authMessage)) + + return base64.StdEncoding.EncodeToString(serverSignature), nil +} + +// GenerateServerFirstMessage generates the server's first response message for SCRAM authentication. +// It replaces the expected nonce from the recorded request with the actual nonce from the received request. +// +// Parameters: +// - recordedRequestMsg: The byte slice containing the recorded client's first message. +// - recievedRequestMsg: The byte slice containing the received client's first message. +// - firstResponseMsg: The byte slice containing the server's initial response message. +// - log: An instance of a log from the zap package. +// +// Returns: +// - A modified server's first response message with the nonce replaced. +// - An error if nonce extraction or replacement fails. +func GenerateServerFirstMessage(recordedRequestMsg, recievedRequestMsg, firstResponseMsg []byte, logger *zap.Logger) (string, error) { + expectedNonce, err := extractClientNonce(string(recordedRequestMsg)) + if err != nil { + utils.LogError(logger, err, "failed to extract the client nonce from the recorded first message") + return "", err + } + actualNonce, err := extractClientNonce(string(recievedRequestMsg)) + if err != nil { + utils.LogError(logger, err, "failed to extract the client nonce from the recieved first message") + return "", err + } + // Since, the nonce are randomlly generated string. so, each session have unique nonce. + // Thus, the mocked server response should be updated according to the current nonce + return strings.Replace(string(firstResponseMsg), expectedNonce, actualNonce, -1), nil +} + +// GenerateAuthMessage creates an authentication message based on the initial +// client request and the server's first response. The function extracts the GS2 +// header and the client's nonce from the provided strings and then concatenates +// them to form the complete authentication message. +// +// Parameters: +// - firstRequest: The initial request string from the client. +// - firstResponse: The server's first response string. +// - log: An instance of a log for logging errors and activities. +// +// Returns: +// - A string representing the complete authentication message. If there's an +// error during extraction or message creation, the function logs the error +// and returns an empty string. +func GenerateAuthMessage(firstRequest, firstResponse string, logger *zap.Logger) string { + gs2, err := extractAuthID(firstRequest) + if err != nil { + utils.LogError(logger, err, "failed to extract the client gs2 header from the recieved first message") + return "" + } + authMsg := firstRequest[len(gs2):] + "," + firstResponse + "," + nonce, err := extractClientNonce(firstResponse) + if err != nil { + utils.LogError(logger, err, "failed to extract the client nonce from the recorded first message") + return "" + } + + authMsg += fmt.Sprintf( + "c=%s,r=%s", + base64.StdEncoding.EncodeToString([]byte(gs2)), + nonce, + ) + + return authMsg +} diff --git a/pkg/core/proxy/integrations/scram/util.go b/pkg/core/proxy/integrations/scram/util.go new file mode 100644 index 000000000..e10496fb6 --- /dev/null +++ b/pkg/core/proxy/integrations/scram/util.go @@ -0,0 +1,88 @@ +package scram + +import ( + "crypto/hmac" + "crypto/md5" + "errors" + "fmt" + "io" + "regexp" + "strings" + + "github.com/xdg-go/scram" +) + +// extractClientNonce extracts the nonce value from a SCRAM authentication first message. +// +// Parameters: +// - firstMsg: The SCRAM authentication message string, which should contain key-value pairs +// separated by commas, e.g., "n,,n=username,r=nonce". +// +// Returns: +// - The extracted nonce value as a string. +// - An error if the nonce ("r=") cannot be found in the provided message. +func extractClientNonce(firstMsg string) (string, error) { + // Split the string based on "," + parts := strings.Split(firstMsg, ",") + + // Iterate over the parts to find the one starting with "r=" + for _, part := range parts { + if strings.HasPrefix(part, "r=") { + // Split based on "=" and get the value of "r" + // value := strings.Split(part, "=")[1] + value := strings.TrimPrefix(part, "r=") + if value == part { + return "", fmt.Errorf("error parsing '%s' for fetching client nonce", part) + } + return value, nil + } + } + return "", errors.New("nonce not found") +} + +// computeHMAC computes the HMAC (Hash-based Message Authentication Code) of the provided data +// using the specified hash generation function and key. +// +// Parameters: +// - hg: A function to generate the desired hash (like SHA-1 or SHA-256). +// - key: The secret key to use for the HMAC computation. +// - data: The input data for which the HMAC is to be computed. +// +// Returns: +// - A byte slice representing the computed HMAC value. +func computeHMAC(hg scram.HashGeneratorFcn, key, data []byte) []byte { + mac := hmac.New(hg, key) + mac.Write(data) + return mac.Sum(nil) +} + +func mongoPasswordDigest(username, password string) string { + // Ignore gosec warning "Use of weak cryptographic primitive". We need to use MD5 here to + // implement the SCRAM specification. + /* #nosec G401 */ + h := md5.New() + _, _ = io.WriteString(h, username) + _, _ = io.WriteString(h, ":mongo:") + _, _ = io.WriteString(h, password) + return fmt.Sprintf("%x", h.Sum(nil)) +} + +func extractUsername(authMessage string) (string, error) { + parts := strings.Split(authMessage, ",") + for _, part := range parts { + if strings.HasPrefix(part, "n=") { + nValue := strings.TrimPrefix(part, "n=") + return nValue, nil + } + } + return "", fmt.Errorf("no username found in the auth message") +} + +func extractAuthID(input string) (string, error) { + re := regexp.MustCompile(`n,([^,]*),`) // Regular expression to match "n,," or "n,SOMETHING," + matches := re.FindStringSubmatch(input) + if len(matches) >= 2 { + return "n," + matches[1] + ",", nil + } + return "", fmt.Errorf("no match found") +} diff --git a/pkg/core/proxy/integrations/util/util.go b/pkg/core/proxy/integrations/util/util.go new file mode 100644 index 000000000..a0424c6ae --- /dev/null +++ b/pkg/core/proxy/integrations/util/util.go @@ -0,0 +1,68 @@ +// Package util provides utility functions for the integration package. +package util + +import ( + "encoding/base64" + "unicode" +) + +func IsASCIIPrintable(s string) bool { + for _, r := range s { + if r > unicode.MaxASCII || !unicode.IsPrint(r) { + return false + } + } + return true +} + +func DecodeBase64(encoded string) ([]byte, error) { + // Decode the base64 encoded string to buffer + data, err := base64.StdEncoding.DecodeString(encoded) + if err != nil { + return nil, err + } + return data, nil +} + +func EncodeBase64(decoded []byte) string { + // Encode the []byte string to encoded string + return base64.StdEncoding.EncodeToString(decoded) +} + +// Functions related to fuzzy matching + +func AdaptiveK(length, min, max, N int) int { + k := length / N + if k < min { + return min + } else if k > max { + return max + } + return k +} + +func CreateShingles(data []byte, k int) map[string]struct{} { + shingles := make(map[string]struct{}) + for i := 0; i < len(data)-k+1; i++ { + shingle := string(data[i : i+k]) + shingles[shingle] = struct{}{} + } + return shingles +} + +// JaccardSimilarity computes the Jaccard similarity between two sets of shingles. +func JaccardSimilarity(setA, setB map[string]struct{}) float64 { + intersectionSize := 0 + for k := range setA { + if _, exists := setB[k]; exists { + intersectionSize++ + } + } + + unionSize := len(setA) + len(setB) - intersectionSize + + if unionSize == 0 { + return 0.0 + } + return float64(intersectionSize) / float64(unionSize) +} diff --git a/pkg/core/proxy/mockmanager.go b/pkg/core/proxy/mockmanager.go new file mode 100644 index 000000000..e48382211 --- /dev/null +++ b/pkg/core/proxy/mockmanager.go @@ -0,0 +1,134 @@ +package proxy + +import ( + "fmt" + "sort" + "strconv" + "strings" + "sync" + + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +type MockManager struct { + filtered *TreeDb + unfiltered *TreeDb + logger *zap.Logger + consumedMocks sync.Map +} + +func NewMockManager(filtered, unfiltered *TreeDb, logger *zap.Logger) *MockManager { + return &MockManager{ + filtered: filtered, + unfiltered: unfiltered, + logger: logger, + consumedMocks: sync.Map{}, + } +} + +func (m *MockManager) SetFilteredMocks(mocks []*models.Mock) { + m.filtered.deleteAll() + for index, mock := range mocks { + mock.TestModeInfo.SortOrder = index + mock.TestModeInfo.ID = index + m.filtered.insert(mock.TestModeInfo, mock) + } +} + +func (m *MockManager) SetUnFilteredMocks(mocks []*models.Mock) { + m.unfiltered.deleteAll() + for index, mock := range mocks { + mock.TestModeInfo.SortOrder = index + mock.TestModeInfo.ID = index + m.unfiltered.insert(mock.TestModeInfo, mock) + } +} + +func (m *MockManager) GetFilteredMocks() ([]*models.Mock, error) { + var tcsMocks []*models.Mock + mocks := m.filtered.getAll() + for _, m := range mocks { + if mock, ok := m.(*models.Mock); ok { + tcsMocks = append(tcsMocks, mock) + } else { + return nil, fmt.Errorf("expected mock instance, got %v", m) + } + } + return tcsMocks, nil +} + +func (m *MockManager) GetUnFilteredMocks() ([]*models.Mock, error) { + var configMocks []*models.Mock + mocks := m.unfiltered.getAll() + for _, m := range mocks { + if mock, ok := m.(*models.Mock); ok { + configMocks = append(configMocks, mock) + } else { + return nil, fmt.Errorf("expected mock instance, got %v", m) + } + } + return configMocks, nil +} + +func (m *MockManager) UpdateUnFilteredMock(old *models.Mock, new *models.Mock) bool { + updated := m.unfiltered.update(old.TestModeInfo, new.TestModeInfo, new) + if updated { + // mark the unfiltered mock as used for the current simulated test-case + go func() { + if err := m.FlagMockAsUsed(old); err != nil { + m.logger.Error("failed to flag mock as used", zap.Error(err)) + } + }() + } + return updated +} + +func (m *MockManager) FlagMockAsUsed(mock *models.Mock) error { + if mock == nil { + return fmt.Errorf("mock is empty") + } + m.consumedMocks.Store(mock.Name, true) + return nil +} + +func (m *MockManager) DeleteFilteredMock(mock *models.Mock) bool { + isDeleted := m.filtered.delete(mock.TestModeInfo) + if isDeleted { + go func() { + if err := m.FlagMockAsUsed(mock); err != nil { + m.logger.Error("failed to flag mock as used", zap.Error(err)) + } + }() + } + return isDeleted +} + +func (m *MockManager) DeleteUnFilteredMock(mock *models.Mock) bool { + isDeleted := m.unfiltered.delete(mock.TestModeInfo) + if isDeleted { + go func() { + if err := m.FlagMockAsUsed(mock); err != nil { + m.logger.Error("failed to flag mock as used", zap.Error(err)) + } + }() + } + return isDeleted +} + +func (m *MockManager) GetConsumedMocks() []string { + var keys []string + m.consumedMocks.Range(func(key, _ interface{}) bool { + if _, ok := key.(string); ok { + keys = append(keys, key.(string)) + } + return true + }) + sort.Slice(keys, func(i, j int) bool { + numI, _ := strconv.Atoi(strings.Split(keys[i], "-")[1]) + numJ, _ := strconv.Atoi(strings.Split(keys[j], "-")[1]) + return numI < numJ + }) + m.consumedMocks = sync.Map{} + return keys +} diff --git a/pkg/core/proxy/options.go b/pkg/core/proxy/options.go new file mode 100755 index 000000000..89b37884a --- /dev/null +++ b/pkg/core/proxy/options.go @@ -0,0 +1,8 @@ +package proxy + +// Option provides a means to initiate the proxy based on user input. +type Option struct { + Port uint32 + DNSPort uint32 + MongoPassword string +} diff --git a/pkg/core/proxy/parsers.go b/pkg/core/proxy/parsers.go new file mode 100644 index 000000000..682af7342 --- /dev/null +++ b/pkg/core/proxy/parsers.go @@ -0,0 +1,11 @@ +package proxy + +import ( + // import all the integrations + _ "go.keploy.io/server/v2/pkg/core/proxy/integrations/generic" + _ "go.keploy.io/server/v2/pkg/core/proxy/integrations/grpc" + _ "go.keploy.io/server/v2/pkg/core/proxy/integrations/http" + _ "go.keploy.io/server/v2/pkg/core/proxy/integrations/mongo" + _ "go.keploy.io/server/v2/pkg/core/proxy/integrations/mysql" + _ "go.keploy.io/server/v2/pkg/core/proxy/integrations/postgres/v1" +) diff --git a/pkg/core/proxy/proxy.go b/pkg/core/proxy/proxy.go new file mode 100755 index 000000000..49f936347 --- /dev/null +++ b/pkg/core/proxy/proxy.go @@ -0,0 +1,585 @@ +package proxy + +import ( + "bufio" + "bytes" + "context" + "crypto/tls" + "errors" + "fmt" + "io" + "net" + "strings" + "sync" + "time" + + "golang.org/x/sync/errgroup" + + "github.com/miekg/dns" + "go.keploy.io/server/v2/config" + "go.keploy.io/server/v2/pkg/core" + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + + "go.keploy.io/server/v2/pkg/core/proxy/util" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +type Proxy struct { + logger *zap.Logger + + IP4 string + IP6 string + Port uint32 + DNSPort uint32 + + DestInfo core.DestInfo + Integrations map[string]integrations.Integrations + + MockManagers sync.Map + + sessions *core.Sessions + + connMutex *sync.Mutex + ipMutex *sync.Mutex + + clientConnections []net.Conn + + Listener net.Listener + + UDPDNSServer *dns.Server + TCPDNSServer *dns.Server +} + +func New(logger *zap.Logger, info core.DestInfo, opts config.Config) *Proxy { + return &Proxy{ + logger: logger, + Port: opts.ProxyPort, // default: 16789 + DNSPort: opts.DNSPort, // default: 26789 + IP4: "127.0.0.1", // default: "127.0.0.1" <-> (2130706433) + IP6: "::1", //default: "::1" <-> ([4]uint32{0000, 0000, 0000, 0001}) + ipMutex: &sync.Mutex{}, + connMutex: &sync.Mutex{}, + DestInfo: info, + sessions: core.NewSessions(), + MockManagers: sync.Map{}, + Integrations: make(map[string]integrations.Integrations), + } +} + +func (p *Proxy) InitIntegrations(_ context.Context) error { + // initialize the integrations + for parserType, parser := range integrations.Registered { + prs := parser(p.logger) + p.Integrations[parserType] = prs + } + return nil +} + +func (p *Proxy) StartProxy(ctx context.Context, opts core.ProxyOptions) error { + + //first initialize the integrations + err := p.InitIntegrations(ctx) + if err != nil { + utils.LogError(p.logger, err, "failed to initialize the integrations") + return err + } + + // set up the CA for tls connections + err = SetupCA(ctx, p.logger) + if err != nil { + utils.LogError(p.logger, err, "failed to setup CA") + return err + } + g, ok := ctx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + return errors.New("failed to get the error group from the context") + } + + // start the proxy server + g.Go(func() error { + utils.Recover(p.logger) + err := p.start(ctx) + if err != nil { + utils.LogError(p.logger, err, "error while running the proxy server") + return err + } + return nil + }) + + //change the ip4 and ip6 if provided in the opts in case of docker environment + if len(opts.DNSIPv4Addr) != 0 { + p.IP4 = opts.DNSIPv4Addr + } + + if len(opts.DNSIPv6Addr) != 0 { + p.IP6 = opts.DNSIPv6Addr + } + + // start the TCP DNS server + p.logger.Debug("Starting Tcp Dns Server for handling Dns queries over TCP") + g.Go(func() error { + utils.Recover(p.logger) + errCh := make(chan error, 1) + go func(errCh chan error) { + err := p.startTCPDNSServer(ctx) + if err != nil { + errCh <- err + } + }(errCh) + + select { + case <-ctx.Done(): + err := p.TCPDNSServer.Shutdown() + if err != nil { + utils.LogError(p.logger, err, "failed to shutdown tcp dns server") + return err + } + return nil + case err := <-errCh: + return err + } + }) + + // start the UDP DNS server + p.logger.Debug("Starting Udp Dns Server for handling Dns queries over UDP") + g.Go(func() error { + utils.Recover(p.logger) + errCh := make(chan error, 1) + go func(errCh chan error) { + err := p.startUDPDNSServer(ctx) + if err != nil { + errCh <- err + } + }(errCh) + + select { + case <-ctx.Done(): + err := p.UDPDNSServer.Shutdown() + if err != nil { + utils.LogError(p.logger, err, "failed to shutdown tcp dns server") + return err + } + return nil + case err := <-errCh: + return err + } + }) + p.logger.Info("Keploy has taken control of the DNS resolution mechanism, your application may misbehave if you have provided wrong domain name in your application code.") + + p.logger.Info(fmt.Sprintf("Proxy started at port:%v", p.Port)) + return nil +} + +// start function starts the proxy server on the idle local port +func (p *Proxy) start(ctx context.Context) error { + + // It will listen on all the interfaces + listener, err := net.Listen("tcp", fmt.Sprintf(":%v", p.Port)) + if err != nil { + utils.LogError(p.logger, err, fmt.Sprintf("failed to start proxy on port:%v", p.Port)) + return err + } + p.Listener = listener + p.logger.Debug(fmt.Sprintf("Proxy server is listening on %s", fmt.Sprintf(":%v", listener.Addr()))) + + defer func(listener net.Listener) { + err := listener.Close() + + if err != nil { + p.logger.Error("failed to close the listener", zap.Error(err)) + } + p.logger.Info("proxy stopped...") + }(listener) + + clientConnCtx, clientConnCancel := context.WithCancel(ctx) + clientConnErrGrp, _ := errgroup.WithContext(clientConnCtx) + defer func() { + clientConnCancel() + err := clientConnErrGrp.Wait() + if err != nil { + p.logger.Debug("failed to handle the client connection", zap.Error(err)) + } + //closing all the mock channels (if any in record mode) + for _, mc := range p.sessions.GetAllMC() { + if mc != nil { + close(mc) + } + } + }() + + for { + clientConnCh := make(chan net.Conn, 1) + errCh := make(chan error, 1) + go func() { + conn, err := listener.Accept() + if err != nil { + if strings.Contains(err.Error(), "use of closed network connection") { + errCh <- nil + return + } + utils.LogError(p.logger, err, "failed to accept connection to the proxy") + errCh <- nil + return + } + clientConnCh <- conn + }() + select { + case <-ctx.Done(): + return nil + case <-errCh: + return err + // handle the client connection + case clientConn := <-clientConnCh: + clientConnErrGrp.Go(func() error { + defer utils.Recover(p.logger) + err := p.handleConnection(clientConnCtx, clientConn) + if err != nil && err != io.EOF { + utils.LogError(p.logger, err, "failed to handle the client connection") + } + return nil + }) + } + } +} + +// handleConnection function executes the actual outgoing network call and captures/forwards the request and response messages. +func (p *Proxy) handleConnection(ctx context.Context, srcConn net.Conn) error { + //checking how much time proxy takes to execute the flow. + start := time.Now() + + defer func(start time.Time) { + duration := time.Since(start) + p.logger.Debug("time taken by proxy to execute the flow", zap.Any("Duration(ms)", duration.Milliseconds())) + }(start) + + // making a new client connection id for each client connection + clientConnID := util.GetNextID() + // dstConn stores conn with actual destination for the outgoing network call + var dstConn net.Conn + + //Dialing for tls conn + destConnID := util.GetNextID() + + remoteAddr := srcConn.RemoteAddr().(*net.TCPAddr) + sourcePort := remoteAddr.Port + + p.logger.Debug("Inside handleConnection of proxyServer", zap.Any("source port", sourcePort), zap.Any("Time", time.Now().Unix())) + + destInfo, err := p.DestInfo.Get(ctx, uint16(sourcePort)) + if err != nil { + utils.LogError(p.logger, err, "failed to fetch the destination info", zap.Any("Source port", sourcePort)) + return err + } + + // releases the occupied source port when done fetching the destination info + err = p.DestInfo.Delete(ctx, uint16(sourcePort)) + if err != nil { + utils.LogError(p.logger, err, "failed to delete the destination info", zap.Any("Source port", sourcePort)) + return err + } + + //get the session rule + rule, ok := p.sessions.Get(destInfo.AppID) + if !ok { + utils.LogError(p.logger, nil, "failed to fetch the session rule", zap.Any("AppID", destInfo.AppID)) + return err + } + + var dstAddr string + + if destInfo.Version == 4 { + dstAddr = fmt.Sprintf("%v:%v", util.ToIP4AddressStr(destInfo.IPv4Addr), destInfo.Port) + p.logger.Debug("", zap.Any("DestIp4", destInfo.IPv4Addr), zap.Any("DestPort", destInfo.Port)) + } else if destInfo.Version == 6 { + dstAddr = fmt.Sprintf("[%v]:%v", util.ToIPv6AddressStr(destInfo.IPv6Addr), destInfo.Port) + p.logger.Debug("", zap.Any("DestIp6", destInfo.IPv6Addr), zap.Any("DestPort", destInfo.Port)) + } + + // This is used to handle the parser errors + parserErrGrp, parserCtx := errgroup.WithContext(ctx) + parserCtx = context.WithValue(parserCtx, models.ErrGroupKey, parserErrGrp) + parserCtx = context.WithValue(parserCtx, models.ClientConnectionIDKey, fmt.Sprint(clientConnID)) + parserCtx = context.WithValue(parserCtx, models.DestConnectionIDKey, fmt.Sprint(destConnID)) + parserCtx, parserCtxCancel := context.WithCancel(parserCtx) + defer func() { + parserCtxCancel() + + err := srcConn.Close() + if err != nil { + utils.LogError(p.logger, err, "failed to close the source connection") + return + } + + if dstConn != nil { + err = dstConn.Close() + if err != nil { + // Use string matching as a last resort to check for the specific error + if !strings.Contains(err.Error(), "use of closed network connection") { + // Log other errors + utils.LogError(p.logger, err, "failed to close the destination connection") + } + return + } + } + + err = parserErrGrp.Wait() + if err != nil { + utils.LogError(p.logger, err, "failed to handle the parser cleanUp") + } + }() + + //checking for the destination port of "mysql" + if destInfo.Port == 3306 { + var dstConn net.Conn + if rule.Mode != models.MODE_TEST { + dstConn, err = net.Dial("tcp", dstAddr) + if err != nil { + utils.LogError(p.logger, err, "failed to dial the conn to destination server", zap.Any("proxy port", p.Port), zap.Any("server address", dstAddr)) + return err + } + // Record the outgoing message into a mock + err := p.Integrations["mysql"].RecordOutgoing(parserCtx, srcConn, dstConn, rule.MC, rule.OutgoingOptions) + if err != nil { + utils.LogError(p.logger, err, "failed to record the outgoing message") + return err + } + return nil + } + + m, ok := p.MockManagers.Load(destInfo.AppID) + if !ok { + utils.LogError(p.logger, nil, "failed to fetch the mock manager", zap.Any("AppID", destInfo.AppID)) + return err + } + + //mock the outgoing message + err := p.Integrations["mysql"].MockOutgoing(parserCtx, srcConn, &integrations.ConditionalDstCfg{Addr: dstAddr}, m.(*MockManager), rule.OutgoingOptions) + if err != nil { + utils.LogError(p.logger, err, "failed to mock the outgoing message") + return err + } + return nil + } + + reader := bufio.NewReader(srcConn) + initialData := make([]byte, 5) + // reading the initial data from the client connection to determine if the connection is a TLS handshake + testBuffer, err := reader.Peek(len(initialData)) + if err != nil { + if err == io.EOF && len(testBuffer) == 0 { + p.logger.Debug("received EOF, closing conn", zap.Any("connectionID", clientConnID), zap.Error(err)) + return nil + } + utils.LogError(p.logger, err, "failed to peek the request message in proxy", zap.Any("proxy port", p.Port)) + return err + } + + multiReader := io.MultiReader(reader, srcConn) + srcConn = &Conn{ + Conn: srcConn, + r: multiReader, + logger: p.logger, + } + + isTLS := isTLSHandshake(testBuffer) + if isTLS { + srcConn, err = p.handleTLSConnection(srcConn) + if err != nil { + utils.LogError(p.logger, err, "failed to handle TLS conn") + return err + } + } + + // attempt to read conn until buffer is either filled or conn is closed + initialBuf, err := util.ReadInitialBuf(parserCtx, p.logger, srcConn) + if err != nil { + utils.LogError(p.logger, err, "failed to read the initial buffer") + return err + } + + //update the src connection to have the initial buffer + srcConn = &Conn{ + Conn: srcConn, + r: io.MultiReader(bytes.NewReader(initialBuf), srcConn), + logger: p.logger, + } + + logger := p.logger.With(zap.Any("Client IP Address", srcConn.RemoteAddr().String()), zap.Any("Client ConnectionID", clientConnID), zap.Any("Destination IP Address", dstAddr), zap.Any("Destination ConnectionID", destConnID)) + + dstCfg := &integrations.ConditionalDstCfg{ + Port: uint(destInfo.Port), + } + + //make new connection to the destination server + if isTLS { + logger.Debug("the external call is tls-encrypted", zap.Any("isTLS", isTLS)) + cfg := &tls.Config{ + InsecureSkipVerify: true, + ServerName: dstURL, + } + + addr := fmt.Sprintf("%v:%v", dstURL, destInfo.Port) + if rule.Mode != models.MODE_TEST { + dialer := &net.Dialer{ + Timeout: 4 * time.Second, + } + dstConn, err = tls.DialWithDialer(dialer, "tcp", addr, cfg) + if err != nil { + utils.LogError(logger, err, "failed to dial the conn to destination server", zap.Any("proxy port", p.Port), zap.Any("server address", dstAddr)) + return err + } + } + + dstCfg.TLSCfg = cfg + dstCfg.Addr = addr + + } else { + if rule.Mode != models.MODE_TEST { + dstConn, err = net.Dial("tcp", dstAddr) + if err != nil { + utils.LogError(logger, err, "failed to dial the conn to destination server", zap.Any("proxy port", p.Port), zap.Any("server address", dstAddr)) + return err + } + } + dstCfg.Addr = dstAddr + } + + // get the mock manager for the current app + m, ok := p.MockManagers.Load(destInfo.AppID) + if !ok { + utils.LogError(logger, err, "failed to fetch the mock manager", zap.Any("AppID", destInfo.AppID)) + return err + } + + generic := true + + //Checking for all the parsers. + for _, parser := range p.Integrations { + if parser.MatchType(parserCtx, initialBuf) { + if rule.Mode == models.MODE_RECORD { + err := parser.RecordOutgoing(parserCtx, srcConn, dstConn, rule.MC, rule.OutgoingOptions) + if err != nil { + utils.LogError(logger, err, "failed to record the outgoing message") + return err + } + } else { + err := parser.MockOutgoing(parserCtx, srcConn, dstCfg, m.(*MockManager), rule.OutgoingOptions) + if err != nil && err != io.EOF { + utils.LogError(logger, err, "failed to mock the outgoing message") + return err + } + } + generic = false + } + } + + if generic { + logger.Debug("The external dependency is not supported. Hence using generic parser") + if rule.Mode == models.MODE_RECORD { + err := p.Integrations["generic"].RecordOutgoing(parserCtx, srcConn, dstConn, rule.MC, rule.OutgoingOptions) + if err != nil { + utils.LogError(logger, err, "failed to record the outgoing message") + return err + } + } else { + err := p.Integrations["generic"].MockOutgoing(parserCtx, srcConn, dstCfg, m.(*MockManager), rule.OutgoingOptions) + if err != nil { + utils.LogError(logger, err, "failed to mock the outgoing message") + return err + } + } + } + return nil +} + +func (p *Proxy) StopProxyServer(ctx context.Context) { + <-ctx.Done() + + p.logger.Info("stopping proxy server...") + + p.connMutex.Lock() + for _, clientConn := range p.clientConnections { + err := clientConn.Close() + if err != nil { + return + } + } + p.connMutex.Unlock() + + if p.Listener != nil { + err := p.Listener.Close() + if err != nil { + utils.LogError(p.logger, err, "failed to stop proxy server") + } + } + + // stop dns servers + err := p.stopDNSServers(ctx) + if err != nil { + utils.LogError(p.logger, err, "failed to stop the dns servers") + return + } + + p.logger.Info("proxy stopped...") +} + +func (p *Proxy) Record(_ context.Context, id uint64, mocks chan<- *models.Mock, opts models.OutgoingOptions) error { + p.sessions.Set(id, &core.Session{ + ID: id, + Mode: models.MODE_RECORD, + MC: mocks, + OutgoingOptions: opts, + }) + + p.MockManagers.Store(id, NewMockManager(NewTreeDb(customComparator), NewTreeDb(customComparator), p.logger)) + + ////set the new proxy ip:port for a new session + //err := p.setProxyIP(opts.DnsIPv4Addr, opts.DnsIPv6Addr) + //if err != nil { + // return errors.New("failed to record the outgoing message") + //} + + return nil +} + +func (p *Proxy) Mock(_ context.Context, id uint64, opts models.OutgoingOptions) error { + p.sessions.Set(id, &core.Session{ + ID: id, + Mode: models.MODE_TEST, + OutgoingOptions: opts, + }) + p.MockManagers.Store(id, NewMockManager(NewTreeDb(customComparator), NewTreeDb(customComparator), p.logger)) + + ////set the new proxy ip:port for a new session + //err := p.setProxyIP(opts.DnsIPv4Addr, opts.DnsIPv6Addr) + //if err != nil { + // return errors.New("failed to mock the outgoing message") + //} + + return nil +} + +func (p *Proxy) SetMocks(_ context.Context, id uint64, filtered []*models.Mock, unFiltered []*models.Mock) error { + //session, ok := p.sessions.Get(id) + //if !ok { + // return fmt.Errorf("session not found") + //} + m, ok := p.MockManagers.Load(id) + if ok { + m.(*MockManager).SetFilteredMocks(filtered) + m.(*MockManager).SetUnFilteredMocks(unFiltered) + } + + return nil +} + +// GetConsumedMocks returns the consumed filtered mocks for a given app id +func (p *Proxy) GetConsumedMocks(_ context.Context, id uint64) ([]string, error) { + m, ok := p.MockManagers.Load(id) + if !ok { + return nil, fmt.Errorf("mock manager not found to get consumed filtered mocks") + } + return m.(*MockManager).GetConsumedMocks(), nil +} diff --git a/pkg/core/proxy/tls.go b/pkg/core/proxy/tls.go new file mode 100644 index 000000000..795d7b9b6 --- /dev/null +++ b/pkg/core/proxy/tls.go @@ -0,0 +1,52 @@ +package proxy + +import ( + "crypto/tls" + "net" + + "github.com/cloudflare/cfssl/helpers" + "go.keploy.io/server/v2/utils" +) + +func isTLSHandshake(data []byte) bool { + if len(data) < 5 { + return false + } + return data[0] == 0x16 && data[1] == 0x03 && (data[2] == 0x00 || data[2] == 0x01 || data[2] == 0x02 || data[2] == 0x03) +} + +func (p *Proxy) handleTLSConnection(conn net.Conn) (net.Conn, error) { + //Load the CA certificate and private key + + var err error + caPrivKey, err = helpers.ParsePrivateKeyPEM(caPKey) + if err != nil { + utils.LogError(p.logger, err, "Failed to parse CA private key") + return nil, err + } + caCertParsed, err = helpers.ParseCertificatePEM(caCrt) + if err != nil { + utils.LogError(p.logger, err, "Failed to parse CA certificate") + return nil, err + } + + // Create a TLS configuration + config := &tls.Config{ + GetCertificate: certForClient, + } + + // Wrap the TCP conn with TLS + tlsConn := tls.Server(conn, config) + // Perform the handshake + err = tlsConn.Handshake() + + if err != nil { + utils.LogError(p.logger, err, "failed to complete TLS handshake with the client") + return nil, err + } + // Use the tlsConn for further communication + // For example, you can read and write data using tlsConn.Read() and tlsConn.Write() + + // Here, we simply close the conn + return tlsConn, nil +} diff --git a/pkg/core/proxy/treedb.go b/pkg/core/proxy/treedb.go new file mode 100644 index 000000000..bcb44881e --- /dev/null +++ b/pkg/core/proxy/treedb.go @@ -0,0 +1,81 @@ +package proxy + +// treeDb is a simple wrapper around redblacktree to provide thread safety +// Here it is used to handle the mocks. + +import ( + "sync" + + "github.com/emirpasic/gods/trees/redblacktree" + "go.keploy.io/server/v2/pkg/models" +) + +// customComparator is a custom comparator function for the tree db +var customComparator = func(a, b interface{}) int { + aStruct := a.(models.TestModeInfo) + bStruct := b.(models.TestModeInfo) + if aStruct.SortOrder < bStruct.SortOrder { + return -1 + } else if aStruct.SortOrder > bStruct.SortOrder { + return 1 + } + if aStruct.ID < bStruct.ID { + return -1 + } else if aStruct.ID > bStruct.ID { + return 1 + } + return 0 +} + +type TreeDb struct { + rbt *redblacktree.Tree + mutex *sync.Mutex +} + +func NewTreeDb(comparator func(a, b interface{}) int) *TreeDb { + return &TreeDb{ + rbt: redblacktree.NewWith(comparator), + mutex: &sync.Mutex{}, + } +} + +func (db *TreeDb) insert(key interface{}, obj interface{}) { + db.mutex.Lock() + defer db.mutex.Unlock() + db.rbt.Put(key, obj) +} + +func (db *TreeDb) delete(key interface{}) bool { + db.mutex.Lock() + defer db.mutex.Unlock() + _, found := db.rbt.Get(key) + if !found { + return false + } + db.rbt.Remove(key) + return true +} + +func (db *TreeDb) update(oldKey interface{}, newKey interface{}, newObj interface{}) bool { + db.mutex.Lock() + defer db.mutex.Unlock() + _, found := db.rbt.Get(oldKey) + if !found { + return false + } + db.rbt.Remove(oldKey) + db.rbt.Put(newKey, newObj) + return true +} + +func (db *TreeDb) deleteAll() { + db.mutex.Lock() + defer db.mutex.Unlock() + db.rbt.Clear() +} + +func (db *TreeDb) getAll() []interface{} { + db.mutex.Lock() + defer db.mutex.Unlock() + return db.rbt.Values() +} diff --git a/pkg/core/proxy/util/util.go b/pkg/core/proxy/util/util.go new file mode 100755 index 000000000..f2dd642f7 --- /dev/null +++ b/pkg/core/proxy/util/util.go @@ -0,0 +1,453 @@ +// Package util provides utility functions for the proxy package. +package util + +import ( + "bytes" + "context" + "encoding/binary" + "errors" + "fmt" + "io" + "os" + "os/exec" + "sync/atomic" + "time" + + "go.keploy.io/server/v2/pkg/core/proxy/integrations" + "golang.org/x/sync/errgroup" + + "go.keploy.io/server/v2/utils" + + "go.uber.org/zap" + + // "math/rand" + "net" + "strconv" + "strings" +) + +// idCounter is used to generate random ID for each request +var idCounter int64 = -1 + +func GetNextID() int64 { + return atomic.AddInt64(&idCounter, 1) +} + +// ReadBuffConn is used to read the buffer from the connection +func ReadBuffConn(ctx context.Context, logger *zap.Logger, conn net.Conn, bufferChannel chan []byte, errChannel chan error) { + //TODO: where to close the bufferChannel and errChannel + for { + select { + case <-ctx.Done(): + // errChannel <- ctx.Err() + return + default: + if conn == nil { + logger.Debug("the conn is nil") + } + buffer, err := ReadBytes(ctx, logger, conn) + if err != nil { + if ctx.Err() != nil { // to avoid sending buffer to closed channel if the context is cancelled + return + } + if err != io.EOF { + utils.LogError(logger, err, "failed to read the packet message in proxy") + } + errChannel <- err + return + } + if ctx.Err() != nil { // to avoid sending buffer to closed channel if the context is cancelled + return + } + bufferChannel <- buffer + } + } +} + +func ReadInitialBuf(ctx context.Context, logger *zap.Logger, conn net.Conn) ([]byte, error) { + readErr := errors.New("failed to read the initial request buffer") + + initialBuf, err := ReadBytes(ctx, logger, conn) + if err != nil && err != io.EOF { + utils.LogError(logger, err, "failed to read the request message in proxy") + return nil, readErr + } + + if err == io.EOF && len(initialBuf) == 0 { + logger.Debug("received EOF, closing conn", zap.Error(err)) + return nil, readErr + } + + logger.Debug("received initial buffer", zap.Any("size", len(initialBuf)), zap.Any("initial buffer", initialBuf)) + if err != nil { + utils.LogError(logger, err, "failed to read the request message in proxy") + return nil, readErr + } + return initialBuf, nil +} + +// ReadBytes function is utilized to read the complete message from the reader until the end of the file (EOF). +// It returns the content as a byte array. +func ReadBytes(ctx context.Context, logger *zap.Logger, reader io.Reader) ([]byte, error) { + var buffer []byte + const maxEmptyReads = 5 + emptyReads := 0 + + // Channel to communicate read results + readResult := make(chan struct { + n int + err error + buf []byte + }) + + g, ctx := errgroup.WithContext(ctx) + + defer func() { + err := g.Wait() + if err != nil { + utils.LogError(logger, err, "failed to read the request message in proxy") + } + close(readResult) + }() + + for { + // Start a goroutine to perform the read operation + g.Go(func() error { + defer utils.Recover(logger) + buf := make([]byte, 1024) + n, err := reader.Read(buf) + if ctx.Err() != nil { + return nil + } + readResult <- struct { + n int + err error + buf []byte + }{n, err, buf} + return nil + }) + + // Use a select statement to wait for either the read result or context cancellation + select { + case <-ctx.Done(): + return buffer, ctx.Err() + case result := <-readResult: + if result.n > 0 { + buffer = append(buffer, result.buf[:result.n]...) + emptyReads = 0 // Reset the counter because we got some data + } + + if result.err != nil { + if result.err == io.EOF { + emptyReads++ + if emptyReads >= maxEmptyReads { + return buffer, result.err // Multiple EOFs in a row, probably a true EOF + } + time.Sleep(time.Millisecond * 100) // Sleep before trying again + continue + } + return buffer, result.err + } + if result.n < len(result.buf) { + return buffer, nil + } + } + } +} + +// ReadRequiredBytes ReadBytes function is utilized to read the complete message from the reader until the end of the file (EOF). +// It returns the content as a byte array. +func ReadRequiredBytes(ctx context.Context, logger *zap.Logger, reader io.Reader, numBytes int) ([]byte, error) { + var buffer []byte + const maxEmptyReads = 5 + emptyReads := 0 + + // Channel to communicate read results + readResult := make(chan struct { + n int + err error + buf []byte + }) + + g, ctx := errgroup.WithContext(ctx) + + defer func() { + err := g.Wait() + if err != nil { + utils.LogError(logger, err, "failed to read the request message in proxy") + } + close(readResult) + }() + + for numBytes > 0 { + // Start a goroutine to perform the read operation + g.Go(func() error { + defer utils.Recover(logger) + buf := make([]byte, numBytes) + n, err := reader.Read(buf) + if ctx.Err() != nil { + return nil + } + readResult <- struct { + n int + err error + buf []byte + }{n, err, buf} + return nil + }) + + // Use a select statement to wait for either the read result or context cancellation + select { + case <-ctx.Done(): + return buffer, ctx.Err() + case result := <-readResult: + if result.n > 0 { + buffer = append(buffer, result.buf[:result.n]...) + numBytes -= result.n + emptyReads = 0 // Reset the counter because we got some data + } + + if result.err != nil { + if result.err == io.EOF { + emptyReads++ + if emptyReads >= maxEmptyReads { + return buffer, result.err // Multiple EOFs in a row, probably a true EOF + } + time.Sleep(time.Millisecond * 100) // Sleep before trying again + continue + } + return buffer, result.err + } + + if result.n == numBytes { + return buffer, nil + } + } + } + + return buffer, nil +} + +// PassThrough function is used to pass the network traffic to the destination connection. +// It also closes the destination connection if the function returns an error. +func PassThrough(ctx context.Context, logger *zap.Logger, clientConn net.Conn, dstCfg *integrations.ConditionalDstCfg, requestBuffer [][]byte) ([]byte, error) { + // making destConn + destConn, err := net.Dial("tcp", dstCfg.Addr) + if err != nil { + utils.LogError(logger, err, "failed to dial the destination server") + return nil, err + } + + logger.Debug("trying to forward requests to target", zap.Any("Destination Addr", destConn.RemoteAddr().String())) + for _, v := range requestBuffer { + _, err := destConn.Write(v) + if err != nil { + utils.LogError(logger, err, "failed to write request message to the destination server", zap.Any("Destination Addr", destConn.RemoteAddr().String())) + return nil, err + } + } + + // channels for writing messages from proxy to destination or client + destBufferChannel := make(chan []byte) + errChannel := make(chan error) + //TODO:Should I even close this error channel here? + defer close(errChannel) + + go func() { + defer utils.Recover(logger) + defer close(destBufferChannel) + defer close(errChannel) + defer func(destConn net.Conn) { + err := destConn.Close() + if err != nil { + utils.LogError(logger, err, "failed to close the destination connection") + } + }(destConn) + + ReadBuffConn(ctx, logger, destConn, destBufferChannel, errChannel) + }() + + select { + case buffer := <-destBufferChannel: + // Write the response message to the client + _, err := clientConn.Write(buffer) + if err != nil { + if ctx.Err() != nil { + return nil, ctx.Err() + } + utils.LogError(logger, err, "failed to write response to the client") + return nil, err + } + + logger.Debug("the iteration for the generic response ends with responses:"+strconv.Itoa(len(buffer)), zap.Any("buffer", buffer)) + case err := <-errChannel: + if netErr, ok := err.(net.Error); !(ok && netErr.Timeout()) && err != nil { + return nil, err + } + return nil, nil + + case <-ctx.Done(): + return nil, ctx.Err() + } + + return nil, nil +} + +// ToIP4AddressStr converts the integer IP4 Address to the octet format +func ToIP4AddressStr(ip uint32) string { + // convert the IP address to a 32-bit binary number + ipBinary := fmt.Sprintf("%032b", ip) + + // divide the binary number into four 8-bit segments + firstByte, _ := strconv.ParseUint(ipBinary[0:8], 2, 64) + secondByte, _ := strconv.ParseUint(ipBinary[8:16], 2, 64) + thirdByte, _ := strconv.ParseUint(ipBinary[16:24], 2, 64) + fourthByte, _ := strconv.ParseUint(ipBinary[24:32], 2, 64) + + // concatenate the four decimal segments with a dot separator to form the dot-decimal string + return fmt.Sprintf("%d.%d.%d.%d", firstByte, secondByte, thirdByte, fourthByte) +} + +func ToIPv6AddressStr(ip [4]uint32) string { + // construct a byte slice + ipBytes := make([]byte, 16) // IPv6 address is 128 bits or 16 bytes long + for i := 0; i < 4; i++ { + // for each uint32, extract its four bytes and put them into the byte slice + ipBytes[i*4] = byte(ip[i] >> 24) + ipBytes[i*4+1] = byte(ip[i] >> 16) + ipBytes[i*4+2] = byte(ip[i] >> 8) + ipBytes[i*4+3] = byte(ip[i]) + } + // net.IP is a byte slice, so it can be directly used to construct an IPv6 address + ipv6Addr := net.IP(ipBytes) + return ipv6Addr.String() +} + +func GetLocalIPv4() (net.IP, error) { + ifaces, err := net.Interfaces() + if err != nil { + return nil, err + } + + for _, iface := range ifaces { + addrs, err := iface.Addrs() + if err != nil { + return nil, err + } + + for _, addr := range addrs { + ipNet, ok := addr.(*net.IPNet) + if ok && !ipNet.IP.IsLoopback() && ipNet.IP.To4() != nil { + return ipNet.IP, nil + } + } + } + + return nil, fmt.Errorf("no valid IP address found") +} + +func ToIPV4(ip net.IP) (uint32, bool) { + ipv4 := ip.To4() + if ipv4 == nil { + return 0, false // Return 0 or handle the error accordingly + } + + return uint32(ipv4[0])<<24 | uint32(ipv4[1])<<16 | uint32(ipv4[2])<<8 | uint32(ipv4[3]), true +} + +func GetLocalIPv6() (net.IP, error) { + ifaces, err := net.Interfaces() + if err != nil { + return nil, err + } + + for _, iface := range ifaces { + addrs, err := iface.Addrs() + if err != nil { + return nil, err + } + + for _, addr := range addrs { + ipNet, ok := addr.(*net.IPNet) + if ok && !ipNet.IP.IsLoopback() && ipNet.IP.To4() == nil && ipNet.IP.To16() != nil { + return ipNet.IP, nil + } + } + } + + return nil, fmt.Errorf("no valid IPv6 address found") +} + +func IPv6ToUint32Array(ip net.IP) ([4]uint32, error) { + ip = ip.To16() + if ip == nil { + return [4]uint32{}, errors.New("invalid IPv6 address") + } + + return [4]uint32{ + binary.BigEndian.Uint32(ip[0:4]), + binary.BigEndian.Uint32(ip[4:8]), + binary.BigEndian.Uint32(ip[8:12]), + binary.BigEndian.Uint32(ip[12:16]), + }, nil +} + +func IPToDotDecimal(ip net.IP) string { + ipStr := ip.String() + if ip.To4() != nil { + ipStr = ip.To4().String() + } + return ipStr +} + +func IsDirectoryExist(path string) bool { + info, err := os.Stat(path) + if os.IsNotExist(err) { + return false + } + return info.IsDir() +} + +func IsJava(input string) bool { + // Convert the input string and the search term "java" to lowercase for a case-insensitive comparison. + inputLower := strings.ToLower(input) + searchTerm := "java" + searchTermLower := strings.ToLower(searchTerm) + + // Use strings.Contains to check if the lowercase input contains the lowercase search term. + return strings.Contains(inputLower, searchTermLower) +} + +// IsJavaInstalled checks if java is installed on the system +func IsJavaInstalled() bool { + _, err := exec.LookPath("java") + return err == nil +} + +// GetJavaHome returns the JAVA_HOME path +func GetJavaHome(ctx context.Context) (string, error) { + cmd := exec.CommandContext(ctx, "java", "-XshowSettings:properties", "-version") + var out bytes.Buffer + cmd.Stderr = &out // The output we need is printed to STDERR + + err := cmd.Run() + if err != nil { + select { + case <-ctx.Done(): + return "", ctx.Err() + default: + return "", err + } + } + + for _, line := range strings.Split(out.String(), "\n") { + if strings.Contains(line, "java.home") { + parts := strings.Split(line, "=") + if len(parts) > 1 { + return strings.TrimSpace(parts[1]), nil + } + } + } + + return "", fmt.Errorf("java.home not found in command output") +} diff --git a/pkg/core/record.go b/pkg/core/record.go new file mode 100644 index 000000000..906aacb88 --- /dev/null +++ b/pkg/core/record.go @@ -0,0 +1,30 @@ +package core + +import ( + "context" + + "go.keploy.io/server/v2/pkg/models" +) + +func (c *Core) GetIncoming(ctx context.Context, id uint64, _ models.IncomingOptions) (<-chan *models.TestCase, error) { + return c.Hooks.Record(ctx, id) +} + +func (c *Core) GetOutgoing(ctx context.Context, id uint64, opts models.OutgoingOptions) (<-chan *models.Mock, error) { + m := make(chan *models.Mock, 500) + + ports := GetPortToSendToKernel(ctx, opts.Rules) + if len(ports) > 0 { + err := c.Hooks.PassThroughPortsInKernel(ctx, id, ports) + if err != nil { + return nil, err + } + } + + err := c.Proxy.Record(ctx, id, m, opts) + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/pkg/core/replay.go b/pkg/core/replay.go new file mode 100644 index 000000000..c83bd7eca --- /dev/null +++ b/pkg/core/replay.go @@ -0,0 +1,24 @@ +package core + +import ( + "context" + + "go.keploy.io/server/v2/pkg/models" +) + +func (c *Core) MockOutgoing(ctx context.Context, id uint64, opts models.OutgoingOptions) error { + ports := GetPortToSendToKernel(ctx, opts.Rules) + if len(ports) > 0 { + err := c.Hooks.PassThroughPortsInKernel(ctx, id, ports) + if err != nil { + return err + } + } + + err := c.Proxy.Mock(ctx, id, opts) + if err != nil { + return err + } + + return nil +} diff --git a/pkg/core/service.go b/pkg/core/service.go new file mode 100644 index 000000000..653913690 --- /dev/null +++ b/pkg/core/service.go @@ -0,0 +1,118 @@ +package core + +import ( + "context" + "sync" + + "go.keploy.io/server/v2/pkg/core/app" + "go.keploy.io/server/v2/utils" + + "go.keploy.io/server/v2/pkg/models" +) + +type Hooks interface { + AppInfo + DestInfo + OutgoingInfo + Load(ctx context.Context, id uint64, cfg HookCfg) error + Record(ctx context.Context, id uint64) (<-chan *models.TestCase, error) +} + +type HookCfg struct { + AppID uint64 + Pid uint32 + IsDocker bool + KeployIPV4 string +} + +type App interface { + Setup(ctx context.Context, opts app.Options) error + Run(ctx context.Context, inodeChan chan uint64, opts app.Options) error + Kind(ctx context.Context) utils.CmdType + KeployIPv4Addr() string +} + +// Proxy listens on all available interfaces and forwards traffic to the destination +type Proxy interface { + StartProxy(ctx context.Context, opts ProxyOptions) error + Record(ctx context.Context, id uint64, mocks chan<- *models.Mock, opts models.OutgoingOptions) error + Mock(ctx context.Context, id uint64, opts models.OutgoingOptions) error + SetMocks(ctx context.Context, id uint64, filtered []*models.Mock, unFiltered []*models.Mock) error + GetConsumedMocks(ctx context.Context, id uint64) ([]string, error) +} + +type ProxyOptions struct { + // DNSIPv4Addr is the proxy IP returned by the DNS server. default is loopback address + DNSIPv4Addr string + // DNSIPv6Addr is the proxy IP returned by the DNS server. default is loopback address + DNSIPv6Addr string +} + +type DestInfo interface { + Get(ctx context.Context, srcPort uint16) (*NetworkAddress, error) + Delete(ctx context.Context, srcPort uint16) error +} + +type AppInfo interface { + SendInode(ctx context.Context, id uint64, inode uint64) error +} + +type OutgoingInfo interface { + PassThroughPortsInKernel(ctx context.Context, id uint64, ports []uint) error +} + +type NetworkAddress struct { + AppID uint64 + Version uint32 + IPv4Addr uint32 + IPv6Addr [4]uint32 + Port uint32 +} + +type Sessions struct { + sessions sync.Map +} + +func NewSessions() *Sessions { + return &Sessions{ + sessions: sync.Map{}, + } +} + +func (s *Sessions) Get(id uint64) (*Session, bool) { + v, ok := s.sessions.Load(id) + if !ok { + return nil, false + } + return v.(*Session), true +} + +func (s *Sessions) Set(id uint64, session *Session) { + s.sessions.Store(id, session) +} + +func (s *Sessions) getAll() map[uint64]*Session { + sessions := map[uint64]*Session{} + s.sessions.Range(func(k, v interface{}) bool { + sessions[k.(uint64)] = v.(*Session) + return true + }) + return sessions +} + +func (s *Sessions) GetAllMC() []chan<- *models.Mock { + sessions := s.getAll() + var mc []chan<- *models.Mock + for _, session := range sessions { + mc = append(mc, session.MC) + } + return mc +} + +type Session struct { + ID uint64 + Mode models.Mode + TC chan<- *models.TestCase + MC chan<- *models.Mock + models.OutgoingOptions +} diff --git a/pkg/core/util.go b/pkg/core/util.go new file mode 100644 index 000000000..390af5629 --- /dev/null +++ b/pkg/core/util.go @@ -0,0 +1,20 @@ +package core + +import ( + "context" + + "go.keploy.io/server/v2/config" +) + +func GetPortToSendToKernel(_ context.Context, rules []config.BypassRule) []uint { + // if the rule only contains port, then it should be sent to kernel + ports := []uint{} + for _, rule := range rules { + if rule.Host == "" && rule.Path == "" { + if rule.Port != 0 { + ports = append(ports, rule.Port) + } + } + } + return ports +} diff --git a/pkg/graph/generated.go b/pkg/graph/generated.go new file mode 100644 index 000000000..cbd9034fb --- /dev/null +++ b/pkg/graph/generated.go @@ -0,0 +1,4043 @@ +// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. + +package graph + +import ( + "bytes" + "context" + "embed" + "errors" + "fmt" + "strconv" + "sync" + "sync/atomic" + + "github.com/99designs/gqlgen/graphql" + "github.com/99designs/gqlgen/graphql/introspection" + gqlparser "github.com/vektah/gqlparser/v2" + "github.com/vektah/gqlparser/v2/ast" + "go.keploy.io/server/v2/pkg/graph/model" +) + +// region ************************** generated!.gotpl ************************** + +// NewExecutableSchema creates an ExecutableSchema from the ResolverRoot interface. +func NewExecutableSchema(cfg Config) graphql.ExecutableSchema { + return &executableSchema{ + schema: cfg.Schema, + resolvers: cfg.Resolvers, + directives: cfg.Directives, + complexity: cfg.Complexity, + } +} + +type Config struct { + Schema *ast.Schema + Resolvers ResolverRoot + Directives DirectiveRoot + Complexity ComplexityRoot +} + +type ResolverRoot interface { + Mutation() MutationResolver + Query() QueryResolver +} + +type DirectiveRoot struct { +} + +type ComplexityRoot struct { + Mutation struct { + RunTestSet func(childComplexity int, testSetID string, testRunID string, appID int) int + StartApp func(childComplexity int, appID int) int + StartHooks func(childComplexity int) int + StopApp func(childComplexity int, appID int) int + StopHooks func(childComplexity int) int + } + + Query struct { + TestSetStatus func(childComplexity int, testRunID string, testSetID string) int + TestSets func(childComplexity int) int + } + + TestRunInfo struct { + AppID func(childComplexity int) int + TestRunID func(childComplexity int) int + } + + TestSetStatus struct { + Status func(childComplexity int) int + } +} + +type MutationResolver interface { + RunTestSet(ctx context.Context, testSetID string, testRunID string, appID int) (bool, error) + StartHooks(ctx context.Context) (*model.TestRunInfo, error) + StartApp(ctx context.Context, appID int) (bool, error) + StopHooks(ctx context.Context) (bool, error) + StopApp(ctx context.Context, appID int) (bool, error) +} +type QueryResolver interface { + TestSets(ctx context.Context) ([]string, error) + TestSetStatus(ctx context.Context, testRunID string, testSetID string) (*model.TestSetStatus, error) +} + +type executableSchema struct { + schema *ast.Schema + resolvers ResolverRoot + directives DirectiveRoot + complexity ComplexityRoot +} + +func (e *executableSchema) Schema() *ast.Schema { + if e.schema != nil { + return e.schema + } + return parsedSchema +} + +func (e *executableSchema) Complexity(typeName, field string, childComplexity int, rawArgs map[string]interface{}) (int, bool) { + ec := executionContext{nil, e, 0, 0, nil} + _ = ec + switch typeName + "." + field { + + case "Mutation.runTestSet": + if e.complexity.Mutation.RunTestSet == nil { + break + } + + args, err := ec.field_Mutation_runTestSet_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Mutation.RunTestSet(childComplexity, args["testSetId"].(string), args["testRunId"].(string), args["appId"].(int)), true + + case "Mutation.startApp": + if e.complexity.Mutation.StartApp == nil { + break + } + + args, err := ec.field_Mutation_startApp_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Mutation.StartApp(childComplexity, args["appId"].(int)), true + + case "Mutation.startHooks": + if e.complexity.Mutation.StartHooks == nil { + break + } + + return e.complexity.Mutation.StartHooks(childComplexity), true + + case "Mutation.stopApp": + if e.complexity.Mutation.StopApp == nil { + break + } + + args, err := ec.field_Mutation_stopApp_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Mutation.StopApp(childComplexity, args["appId"].(int)), true + + case "Mutation.stopHooks": + if e.complexity.Mutation.StopHooks == nil { + break + } + + return e.complexity.Mutation.StopHooks(childComplexity), true + + case "Query.testSetStatus": + if e.complexity.Query.TestSetStatus == nil { + break + } + + args, err := ec.field_Query_testSetStatus_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Query.TestSetStatus(childComplexity, args["testRunId"].(string), args["testSetId"].(string)), true + + case "Query.testSets": + if e.complexity.Query.TestSets == nil { + break + } + + return e.complexity.Query.TestSets(childComplexity), true + + case "TestRunInfo.appId": + if e.complexity.TestRunInfo.AppID == nil { + break + } + + return e.complexity.TestRunInfo.AppID(childComplexity), true + + case "TestRunInfo.testRunId": + if e.complexity.TestRunInfo.TestRunID == nil { + break + } + + return e.complexity.TestRunInfo.TestRunID(childComplexity), true + + case "TestSetStatus.status": + if e.complexity.TestSetStatus.Status == nil { + break + } + + return e.complexity.TestSetStatus.Status(childComplexity), true + + } + return 0, false +} + +func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler { + rc := graphql.GetOperationContext(ctx) + ec := executionContext{rc, e, 0, 0, make(chan graphql.DeferredResult)} + inputUnmarshalMap := graphql.BuildUnmarshalerMap() + first := true + + switch rc.Operation.Operation { + case ast.Query: + return func(ctx context.Context) *graphql.Response { + var response graphql.Response + var data graphql.Marshaler + if first { + first = false + ctx = graphql.WithUnmarshalerMap(ctx, inputUnmarshalMap) + data = ec._Query(ctx, rc.Operation.SelectionSet) + } else { + if atomic.LoadInt32(&ec.pendingDeferred) > 0 { + result := <-ec.deferredResults + atomic.AddInt32(&ec.pendingDeferred, -1) + data = result.Result + response.Path = result.Path + response.Label = result.Label + response.Errors = result.Errors + } else { + return nil + } + } + var buf bytes.Buffer + data.MarshalGQL(&buf) + response.Data = buf.Bytes() + if atomic.LoadInt32(&ec.deferred) > 0 { + hasNext := atomic.LoadInt32(&ec.pendingDeferred) > 0 + response.HasNext = &hasNext + } + + return &response + } + case ast.Mutation: + return func(ctx context.Context) *graphql.Response { + if !first { + return nil + } + first = false + ctx = graphql.WithUnmarshalerMap(ctx, inputUnmarshalMap) + data := ec._Mutation(ctx, rc.Operation.SelectionSet) + var buf bytes.Buffer + data.MarshalGQL(&buf) + + return &graphql.Response{ + Data: buf.Bytes(), + } + } + + default: + return graphql.OneShot(graphql.ErrorResponse(ctx, "unsupported GraphQL operation")) + } +} + +type executionContext struct { + *graphql.OperationContext + *executableSchema + deferred int32 + pendingDeferred int32 + deferredResults chan graphql.DeferredResult +} + +func (ec *executionContext) processDeferredGroup(dg graphql.DeferredGroup) { + atomic.AddInt32(&ec.pendingDeferred, 1) + go func() { + ctx := graphql.WithFreshResponseContext(dg.Context) + dg.FieldSet.Dispatch(ctx) + ds := graphql.DeferredResult{ + Path: dg.Path, + Label: dg.Label, + Result: dg.FieldSet, + Errors: graphql.GetErrors(ctx), + } + // null fields should bubble up + if dg.FieldSet.Invalids > 0 { + ds.Result = graphql.Null + } + ec.deferredResults <- ds + }() +} + +func (ec *executionContext) introspectSchema() (*introspection.Schema, error) { + if ec.DisableIntrospection { + return nil, errors.New("introspection disabled") + } + return introspection.WrapSchema(ec.Schema()), nil +} + +func (ec *executionContext) introspectType(name string) (*introspection.Type, error) { + if ec.DisableIntrospection { + return nil, errors.New("introspection disabled") + } + return introspection.WrapTypeFromDef(ec.Schema(), ec.Schema().Types[name]), nil +} + +//go:embed "schema.graphqls" +var sourcesFS embed.FS + +func sourceData(filename string) string { + data, err := sourcesFS.ReadFile(filename) + if err != nil { + panic(fmt.Sprintf("codegen problem: %s not available", filename)) + } + return string(data) +} + +var sources = []*ast.Source{ + {Name: "schema.graphqls", Input: sourceData("schema.graphqls"), BuiltIn: false}, +} +var parsedSchema = gqlparser.MustLoadSchema(sources...) + +// endregion ************************** generated!.gotpl ************************** + +// region ***************************** args.gotpl ***************************** + +func (ec *executionContext) field_Mutation_runTestSet_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 string + if tmp, ok := rawArgs["testSetId"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("testSetId")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["testSetId"] = arg0 + var arg1 string + if tmp, ok := rawArgs["testRunId"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("testRunId")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["testRunId"] = arg1 + var arg2 int + if tmp, ok := rawArgs["appId"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("appId")) + arg2, err = ec.unmarshalNInt2int(ctx, tmp) + if err != nil { + return nil, err + } + } + args["appId"] = arg2 + return args, nil +} + +func (ec *executionContext) field_Mutation_startApp_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 int + if tmp, ok := rawArgs["appId"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("appId")) + arg0, err = ec.unmarshalNInt2int(ctx, tmp) + if err != nil { + return nil, err + } + } + args["appId"] = arg0 + return args, nil +} + +func (ec *executionContext) field_Mutation_stopApp_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 int + if tmp, ok := rawArgs["appId"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("appId")) + arg0, err = ec.unmarshalNInt2int(ctx, tmp) + if err != nil { + return nil, err + } + } + args["appId"] = arg0 + return args, nil +} + +func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 string + if tmp, ok := rawArgs["name"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["name"] = arg0 + return args, nil +} + +func (ec *executionContext) field_Query_testSetStatus_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 string + if tmp, ok := rawArgs["testRunId"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("testRunId")) + arg0, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["testRunId"] = arg0 + var arg1 string + if tmp, ok := rawArgs["testSetId"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("testSetId")) + arg1, err = ec.unmarshalNString2string(ctx, tmp) + if err != nil { + return nil, err + } + } + args["testSetId"] = arg1 + return args, nil +} + +func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 bool + if tmp, ok := rawArgs["includeDeprecated"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) + arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) + if err != nil { + return nil, err + } + } + args["includeDeprecated"] = arg0 + return args, nil +} + +func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { + var err error + args := map[string]interface{}{} + var arg0 bool + if tmp, ok := rawArgs["includeDeprecated"]; ok { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("includeDeprecated")) + arg0, err = ec.unmarshalOBoolean2bool(ctx, tmp) + if err != nil { + return nil, err + } + } + args["includeDeprecated"] = arg0 + return args, nil +} + +// endregion ***************************** args.gotpl ***************************** + +// region ************************** directives.gotpl ************************** + +// endregion ************************** directives.gotpl ************************** + +// region **************************** field.gotpl ***************************** + +func (ec *executionContext) _Mutation_runTestSet(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_runTestSet(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().RunTestSet(rctx, fc.Args["testSetId"].(string), fc.Args["testRunId"].(string), fc.Args["appId"].(int)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_runTestSet(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_runTestSet_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_startHooks(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_startHooks(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().StartHooks(rctx) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*model.TestRunInfo) + fc.Result = res + return ec.marshalNTestRunInfo2αš–goαš—keployαš—ioαš‹serverαš‹v2αš‹pkgαš‹graphαš‹modelᚐTestRunInfo(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_startHooks(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "appId": + return ec.fieldContext_TestRunInfo_appId(ctx, field) + case "testRunId": + return ec.fieldContext_TestRunInfo_testRunId(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type TestRunInfo", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) _Mutation_startApp(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_startApp(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().StartApp(rctx, fc.Args["appId"].(int)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_startApp(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_startApp_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_stopHooks(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_stopHooks(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().StopHooks(rctx) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_stopHooks(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _Mutation_stopApp(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_stopApp(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().StopApp(rctx, fc.Args["appId"].(int)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_stopApp(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_stopApp_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Query_testSets(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Query_testSets(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Query().TestSets(rctx) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]string) + fc.Result = res + return ec.marshalNString2αš•stringαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Query_testSets(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Query", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _Query_testSetStatus(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Query_testSetStatus(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Query().TestSetStatus(rctx, fc.Args["testRunId"].(string), fc.Args["testSetId"].(string)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*model.TestSetStatus) + fc.Result = res + return ec.marshalNTestSetStatus2αš–goαš—keployαš—ioαš‹serverαš‹v2αš‹pkgαš‹graphαš‹modelᚐTestSetStatus(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Query_testSetStatus(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Query", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "status": + return ec.fieldContext_TestSetStatus_status(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type TestSetStatus", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Query_testSetStatus_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Query___type(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Query___type(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.introspectType(fc.Args["name"].(string)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*introspection.Type) + fc.Result = res + return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Query___type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Query", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Query___type_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Query___schema(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return ec.introspectSchema() + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*introspection.Schema) + fc.Result = res + return ec.marshalO__Schema2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐSchema(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Query___schema(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Query", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "description": + return ec.fieldContext___Schema_description(ctx, field) + case "types": + return ec.fieldContext___Schema_types(ctx, field) + case "queryType": + return ec.fieldContext___Schema_queryType(ctx, field) + case "mutationType": + return ec.fieldContext___Schema_mutationType(ctx, field) + case "subscriptionType": + return ec.fieldContext___Schema_subscriptionType(ctx, field) + case "directives": + return ec.fieldContext___Schema_directives(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Schema", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) _TestRunInfo_appId(ctx context.Context, field graphql.CollectedField, obj *model.TestRunInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_TestRunInfo_appId(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.AppID, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(int) + fc.Result = res + return ec.marshalNInt2int(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_TestRunInfo_appId(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "TestRunInfo", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Int does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _TestRunInfo_testRunId(ctx context.Context, field graphql.CollectedField, obj *model.TestRunInfo) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_TestRunInfo_testRunId(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.TestRunID, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_TestRunInfo_testRunId(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "TestRunInfo", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _TestSetStatus_status(ctx context.Context, field graphql.CollectedField, obj *model.TestSetStatus) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_TestSetStatus_status(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Status, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_TestSetStatus_status(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "TestSetStatus", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Directive_name(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Name, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Directive_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Directive", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Directive_description(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Description(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Directive_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Directive", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Directive_locations(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Locations, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]string) + fc.Result = res + return ec.marshalN__DirectiveLocation2αš•stringαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Directive_locations(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Directive", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type __DirectiveLocation does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Directive_args(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Args, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]introspection.InputValue) + fc.Result = res + return ec.marshalN__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Directive_args(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Directive", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___InputValue_name(ctx, field) + case "description": + return ec.fieldContext___InputValue_description(ctx, field) + case "type": + return ec.fieldContext___InputValue_type(ctx, field) + case "defaultValue": + return ec.fieldContext___InputValue_defaultValue(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __InputValue", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Directive_isRepeatable(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Directive_isRepeatable(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.IsRepeatable, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Directive_isRepeatable(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Directive", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___EnumValue_name(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Name, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___EnumValue_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__EnumValue", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___EnumValue_description(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Description(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___EnumValue_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__EnumValue", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___EnumValue_isDeprecated(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.IsDeprecated(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__EnumValue", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___EnumValue_deprecationReason(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.DeprecationReason(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__EnumValue", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Field_name(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Name, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Field_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Field", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Field_description(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Description(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Field_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Field", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Field_args(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Args, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]introspection.InputValue) + fc.Result = res + return ec.marshalN__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Field_args(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Field", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___InputValue_name(ctx, field) + case "description": + return ec.fieldContext___InputValue_description(ctx, field) + case "type": + return ec.fieldContext___InputValue_type(ctx, field) + case "defaultValue": + return ec.fieldContext___InputValue_defaultValue(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __InputValue", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Field_type(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Type, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*introspection.Type) + fc.Result = res + return ec.marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Field_type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Field", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Field_isDeprecated(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.IsDeprecated(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(bool) + fc.Result = res + return ec.marshalNBoolean2bool(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Field_isDeprecated(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Field", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type Boolean does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Field_deprecationReason(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.DeprecationReason(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Field_deprecationReason(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Field", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___InputValue_name(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Name, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalNString2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___InputValue_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__InputValue", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___InputValue_description(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Description(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___InputValue_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__InputValue", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___InputValue_type(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Type, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*introspection.Type) + fc.Result = res + return ec.marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___InputValue_type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__InputValue", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___InputValue_defaultValue(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.DefaultValue, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___InputValue_defaultValue(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__InputValue", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Schema_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Schema_description(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Description(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Schema_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Schema", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Schema_types(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Types(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]introspection.Type) + fc.Result = res + return ec.marshalN__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Schema_types(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Schema", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Schema_queryType(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.QueryType(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*introspection.Type) + fc.Result = res + return ec.marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Schema_queryType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Schema", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Schema_mutationType(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.MutationType(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*introspection.Type) + fc.Result = res + return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Schema_mutationType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Schema", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Schema_subscriptionType(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.SubscriptionType(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*introspection.Type) + fc.Result = res + return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Schema_subscriptionType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Schema", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Schema_directives(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Schema_directives(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Directives(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]introspection.Directive) + fc.Result = res + return ec.marshalN__Directive2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirectiveαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Schema_directives(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Schema", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___Directive_name(ctx, field) + case "description": + return ec.fieldContext___Directive_description(ctx, field) + case "locations": + return ec.fieldContext___Directive_locations(ctx, field) + case "args": + return ec.fieldContext___Directive_args(ctx, field) + case "isRepeatable": + return ec.fieldContext___Directive_isRepeatable(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Directive", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_kind(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Kind(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(string) + fc.Result = res + return ec.marshalN__TypeKind2string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_kind(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type __TypeKind does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_name(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Name(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_name(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_description(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Description(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_description(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_fields(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Fields(fc.Args["includeDeprecated"].(bool)), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.([]introspection.Field) + fc.Result = res + return ec.marshalO__Field2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐFieldαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_fields(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___Field_name(ctx, field) + case "description": + return ec.fieldContext___Field_description(ctx, field) + case "args": + return ec.fieldContext___Field_args(ctx, field) + case "type": + return ec.fieldContext___Field_type(ctx, field) + case "isDeprecated": + return ec.fieldContext___Field_isDeprecated(ctx, field) + case "deprecationReason": + return ec.fieldContext___Field_deprecationReason(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Field", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field___Type_fields_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_interfaces(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.Interfaces(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.([]introspection.Type) + fc.Result = res + return ec.marshalO__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_interfaces(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_possibleTypes(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.PossibleTypes(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.([]introspection.Type) + fc.Result = res + return ec.marshalO__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_possibleTypes(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_enumValues(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.EnumValues(fc.Args["includeDeprecated"].(bool)), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.([]introspection.EnumValue) + fc.Result = res + return ec.marshalO__EnumValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValueαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_enumValues(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___EnumValue_name(ctx, field) + case "description": + return ec.fieldContext___EnumValue_description(ctx, field) + case "isDeprecated": + return ec.fieldContext___EnumValue_isDeprecated(ctx, field) + case "deprecationReason": + return ec.fieldContext___EnumValue_deprecationReason(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __EnumValue", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field___Type_enumValues_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_inputFields(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.InputFields(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.([]introspection.InputValue) + fc.Result = res + return ec.marshalO__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_inputFields(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___InputValue_name(ctx, field) + case "description": + return ec.fieldContext___InputValue_description(ctx, field) + case "type": + return ec.fieldContext___InputValue_type(ctx, field) + case "defaultValue": + return ec.fieldContext___InputValue_defaultValue(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __InputValue", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_ofType(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.OfType(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*introspection.Type) + fc.Result = res + return ec.marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_ofType(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) ___Type_specifiedByURL(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { + fc, err := ec.fieldContext___Type_specifiedByURL(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { + ctx = rctx // use context from middleware stack in children + return obj.SpecifiedByURL(), nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + return graphql.Null + } + res := resTmp.(*string) + fc.Result = res + return ec.marshalOString2αš–string(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext___Type_specifiedByURL(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "__Type", + Field: field, + IsMethod: true, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type String does not have child fields") + }, + } + return fc, nil +} + +// endregion **************************** field.gotpl ***************************** + +// region **************************** input.gotpl ***************************** + +// endregion **************************** input.gotpl ***************************** + +// region ************************** interface.gotpl *************************** + +// endregion ************************** interface.gotpl *************************** + +// region **************************** object.gotpl **************************** + +var mutationImplementors = []string{"Mutation"} + +func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, mutationImplementors) + ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{ + Object: "Mutation", + }) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + innerCtx := graphql.WithRootFieldContext(ctx, &graphql.RootFieldContext{ + Object: field.Name, + Field: field, + }) + + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("Mutation") + case "runTestSet": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_runTestSet(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "startHooks": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_startHooks(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "startApp": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_startApp(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "stopHooks": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_stopHooks(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "stopApp": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_stopApp(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var queryImplementors = []string{"Query"} + +func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, queryImplementors) + ctx = graphql.WithFieldContext(ctx, &graphql.FieldContext{ + Object: "Query", + }) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + innerCtx := graphql.WithRootFieldContext(ctx, &graphql.RootFieldContext{ + Object: field.Name, + Field: field, + }) + + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("Query") + case "testSets": + field := field + + innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + } + }() + res = ec._Query_testSets(ctx, field) + if res == graphql.Null { + atomic.AddUint32(&fs.Invalids, 1) + } + return res + } + + rrm := func(ctx context.Context) graphql.Marshaler { + return ec.OperationContext.RootResolverMiddleware(ctx, + func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) + } + + out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return rrm(innerCtx) }) + case "testSetStatus": + field := field + + innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + } + }() + res = ec._Query_testSetStatus(ctx, field) + if res == graphql.Null { + atomic.AddUint32(&fs.Invalids, 1) + } + return res + } + + rrm := func(ctx context.Context) graphql.Marshaler { + return ec.OperationContext.RootResolverMiddleware(ctx, + func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) + } + + out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return rrm(innerCtx) }) + case "__type": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Query___type(ctx, field) + }) + case "__schema": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Query___schema(ctx, field) + }) + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var testRunInfoImplementors = []string{"TestRunInfo"} + +func (ec *executionContext) _TestRunInfo(ctx context.Context, sel ast.SelectionSet, obj *model.TestRunInfo) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, testRunInfoImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("TestRunInfo") + case "appId": + out.Values[i] = ec._TestRunInfo_appId(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "testRunId": + out.Values[i] = ec._TestRunInfo_testRunId(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var testSetStatusImplementors = []string{"TestSetStatus"} + +func (ec *executionContext) _TestSetStatus(ctx context.Context, sel ast.SelectionSet, obj *model.TestSetStatus) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, testSetStatusImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("TestSetStatus") + case "status": + out.Values[i] = ec._TestSetStatus_status(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var __DirectiveImplementors = []string{"__Directive"} + +func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionSet, obj *introspection.Directive) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, __DirectiveImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("__Directive") + case "name": + out.Values[i] = ec.___Directive_name(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "description": + out.Values[i] = ec.___Directive_description(ctx, field, obj) + case "locations": + out.Values[i] = ec.___Directive_locations(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "args": + out.Values[i] = ec.___Directive_args(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "isRepeatable": + out.Values[i] = ec.___Directive_isRepeatable(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var __EnumValueImplementors = []string{"__EnumValue"} + +func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.EnumValue) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, __EnumValueImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("__EnumValue") + case "name": + out.Values[i] = ec.___EnumValue_name(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "description": + out.Values[i] = ec.___EnumValue_description(ctx, field, obj) + case "isDeprecated": + out.Values[i] = ec.___EnumValue_isDeprecated(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "deprecationReason": + out.Values[i] = ec.___EnumValue_deprecationReason(ctx, field, obj) + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var __FieldImplementors = []string{"__Field"} + +func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, obj *introspection.Field) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, __FieldImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("__Field") + case "name": + out.Values[i] = ec.___Field_name(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "description": + out.Values[i] = ec.___Field_description(ctx, field, obj) + case "args": + out.Values[i] = ec.___Field_args(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "type": + out.Values[i] = ec.___Field_type(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "isDeprecated": + out.Values[i] = ec.___Field_isDeprecated(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "deprecationReason": + out.Values[i] = ec.___Field_deprecationReason(ctx, field, obj) + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var __InputValueImplementors = []string{"__InputValue"} + +func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.SelectionSet, obj *introspection.InputValue) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, __InputValueImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("__InputValue") + case "name": + out.Values[i] = ec.___InputValue_name(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "description": + out.Values[i] = ec.___InputValue_description(ctx, field, obj) + case "type": + out.Values[i] = ec.___InputValue_type(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "defaultValue": + out.Values[i] = ec.___InputValue_defaultValue(ctx, field, obj) + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var __SchemaImplementors = []string{"__Schema"} + +func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, obj *introspection.Schema) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, __SchemaImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("__Schema") + case "description": + out.Values[i] = ec.___Schema_description(ctx, field, obj) + case "types": + out.Values[i] = ec.___Schema_types(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "queryType": + out.Values[i] = ec.___Schema_queryType(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "mutationType": + out.Values[i] = ec.___Schema_mutationType(ctx, field, obj) + case "subscriptionType": + out.Values[i] = ec.___Schema_subscriptionType(ctx, field, obj) + case "directives": + out.Values[i] = ec.___Schema_directives(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +var __TypeImplementors = []string{"__Type"} + +func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, obj *introspection.Type) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, __TypeImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("__Type") + case "kind": + out.Values[i] = ec.___Type_kind(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "name": + out.Values[i] = ec.___Type_name(ctx, field, obj) + case "description": + out.Values[i] = ec.___Type_description(ctx, field, obj) + case "fields": + out.Values[i] = ec.___Type_fields(ctx, field, obj) + case "interfaces": + out.Values[i] = ec.___Type_interfaces(ctx, field, obj) + case "possibleTypes": + out.Values[i] = ec.___Type_possibleTypes(ctx, field, obj) + case "enumValues": + out.Values[i] = ec.___Type_enumValues(ctx, field, obj) + case "inputFields": + out.Values[i] = ec.___Type_inputFields(ctx, field, obj) + case "ofType": + out.Values[i] = ec.___Type_ofType(ctx, field, obj) + case "specifiedByURL": + out.Values[i] = ec.___Type_specifiedByURL(ctx, field, obj) + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + +// endregion **************************** object.gotpl **************************** + +// region ***************************** type.gotpl ***************************** + +func (ec *executionContext) unmarshalNBoolean2bool(ctx context.Context, v interface{}) (bool, error) { + res, err := graphql.UnmarshalBoolean(v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler { + res := graphql.MarshalBoolean(v) + if res == graphql.Null { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + } + return res +} + +func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v interface{}) (int, error) { + res, err := graphql.UnmarshalInt(v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNInt2int(ctx context.Context, sel ast.SelectionSet, v int) graphql.Marshaler { + res := graphql.MarshalInt(v) + if res == graphql.Null { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + } + return res +} + +func (ec *executionContext) unmarshalNString2string(ctx context.Context, v interface{}) (string, error) { + res, err := graphql.UnmarshalString(v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNString2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler { + res := graphql.MarshalString(v) + if res == graphql.Null { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + } + return res +} + +func (ec *executionContext) unmarshalNString2αš•stringαš„(ctx context.Context, v interface{}) ([]string, error) { + var vSlice []interface{} + if v != nil { + vSlice = graphql.CoerceList(v) + } + var err error + res := make([]string, len(vSlice)) + for i := range vSlice { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) + res[i], err = ec.unmarshalNString2string(ctx, vSlice[i]) + if err != nil { + return nil, err + } + } + return res, nil +} + +func (ec *executionContext) marshalNString2αš•stringαš„(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler { + ret := make(graphql.Array, len(v)) + for i := range v { + ret[i] = ec.marshalNString2string(ctx, sel, v[i]) + } + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalNTestRunInfo2goαš—keployαš—ioαš‹serverαš‹v2αš‹pkgαš‹graphαš‹modelᚐTestRunInfo(ctx context.Context, sel ast.SelectionSet, v model.TestRunInfo) graphql.Marshaler { + return ec._TestRunInfo(ctx, sel, &v) +} + +func (ec *executionContext) marshalNTestRunInfo2αš–goαš—keployαš—ioαš‹serverαš‹v2αš‹pkgαš‹graphαš‹modelᚐTestRunInfo(ctx context.Context, sel ast.SelectionSet, v *model.TestRunInfo) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._TestRunInfo(ctx, sel, v) +} + +func (ec *executionContext) marshalNTestSetStatus2goαš—keployαš—ioαš‹serverαš‹v2αš‹pkgαš‹graphαš‹modelᚐTestSetStatus(ctx context.Context, sel ast.SelectionSet, v model.TestSetStatus) graphql.Marshaler { + return ec._TestSetStatus(ctx, sel, &v) +} + +func (ec *executionContext) marshalNTestSetStatus2αš–goαš—keployαš—ioαš‹serverαš‹v2αš‹pkgαš‹graphαš‹modelᚐTestSetStatus(ctx context.Context, sel ast.SelectionSet, v *model.TestSetStatus) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._TestSetStatus(ctx, sel, v) +} + +func (ec *executionContext) marshalN__Directive2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirective(ctx context.Context, sel ast.SelectionSet, v introspection.Directive) graphql.Marshaler { + return ec.___Directive(ctx, sel, &v) +} + +func (ec *executionContext) marshalN__Directive2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirectiveαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Directive) graphql.Marshaler { + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__Directive2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐDirective(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) unmarshalN__DirectiveLocation2string(ctx context.Context, v interface{}) (string, error) { + res, err := graphql.UnmarshalString(v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalN__DirectiveLocation2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler { + res := graphql.MarshalString(v) + if res == graphql.Null { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + } + return res +} + +func (ec *executionContext) unmarshalN__DirectiveLocation2αš•stringαš„(ctx context.Context, v interface{}) ([]string, error) { + var vSlice []interface{} + if v != nil { + vSlice = graphql.CoerceList(v) + } + var err error + res := make([]string, len(vSlice)) + for i := range vSlice { + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithIndex(i)) + res[i], err = ec.unmarshalN__DirectiveLocation2string(ctx, vSlice[i]) + if err != nil { + return nil, err + } + } + return res, nil +} + +func (ec *executionContext) marshalN__DirectiveLocation2αš•stringαš„(ctx context.Context, sel ast.SelectionSet, v []string) graphql.Marshaler { + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__DirectiveLocation2string(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalN__EnumValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValue(ctx context.Context, sel ast.SelectionSet, v introspection.EnumValue) graphql.Marshaler { + return ec.___EnumValue(ctx, sel, &v) +} + +func (ec *executionContext) marshalN__Field2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐField(ctx context.Context, sel ast.SelectionSet, v introspection.Field) graphql.Marshaler { + return ec.___Field(ctx, sel, &v) +} + +func (ec *executionContext) marshalN__InputValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValue(ctx context.Context, sel ast.SelectionSet, v introspection.InputValue) graphql.Marshaler { + return ec.___InputValue(ctx, sel, &v) +} + +func (ec *executionContext) marshalN__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler { + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__InputValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValue(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalN__Type2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx context.Context, sel ast.SelectionSet, v introspection.Type) graphql.Marshaler { + return ec.___Type(ctx, sel, &v) +} + +func (ec *executionContext) marshalN__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler { + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__Type2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalN__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec.___Type(ctx, sel, v) +} + +func (ec *executionContext) unmarshalN__TypeKind2string(ctx context.Context, v interface{}) (string, error) { + res, err := graphql.UnmarshalString(v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalN__TypeKind2string(ctx context.Context, sel ast.SelectionSet, v string) graphql.Marshaler { + res := graphql.MarshalString(v) + if res == graphql.Null { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + } + return res +} + +func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v interface{}) (bool, error) { + res, err := graphql.UnmarshalBoolean(v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalOBoolean2bool(ctx context.Context, sel ast.SelectionSet, v bool) graphql.Marshaler { + res := graphql.MarshalBoolean(v) + return res +} + +func (ec *executionContext) unmarshalOBoolean2αš–bool(ctx context.Context, v interface{}) (*bool, error) { + if v == nil { + return nil, nil + } + res, err := graphql.UnmarshalBoolean(v) + return &res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalOBoolean2αš–bool(ctx context.Context, sel ast.SelectionSet, v *bool) graphql.Marshaler { + if v == nil { + return graphql.Null + } + res := graphql.MarshalBoolean(*v) + return res +} + +func (ec *executionContext) unmarshalOString2αš–string(ctx context.Context, v interface{}) (*string, error) { + if v == nil { + return nil, nil + } + res, err := graphql.UnmarshalString(v) + return &res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalOString2αš–string(ctx context.Context, sel ast.SelectionSet, v *string) graphql.Marshaler { + if v == nil { + return graphql.Null + } + res := graphql.MarshalString(*v) + return res +} + +func (ec *executionContext) marshalO__EnumValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValueαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler { + if v == nil { + return graphql.Null + } + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__EnumValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐEnumValue(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalO__Field2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐFieldαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Field) graphql.Marshaler { + if v == nil { + return graphql.Null + } + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__Field2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐField(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalO__InputValue2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValueαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler { + if v == nil { + return graphql.Null + } + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__InputValue2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐInputValue(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalO__Schema2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐSchema(ctx context.Context, sel ast.SelectionSet, v *introspection.Schema) graphql.Marshaler { + if v == nil { + return graphql.Null + } + return ec.___Schema(ctx, sel, v) +} + +func (ec *executionContext) marshalO__Type2αš•githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐTypeαš„(ctx context.Context, sel ast.SelectionSet, v []introspection.Type) graphql.Marshaler { + if v == nil { + return graphql.Null + } + ret := make(graphql.Array, len(v)) + var wg sync.WaitGroup + isLen1 := len(v) == 1 + if !isLen1 { + wg.Add(len(v)) + } + for i := range v { + i := i + fc := &graphql.FieldContext{ + Index: &i, + Result: &v[i], + } + ctx := graphql.WithFieldContext(ctx, fc) + f := func(i int) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = nil + } + }() + if !isLen1 { + defer wg.Done() + } + ret[i] = ec.marshalN__Type2githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx, sel, v[i]) + } + if isLen1 { + f(i) + } else { + go f(i) + } + + } + wg.Wait() + + for _, e := range ret { + if e == graphql.Null { + return graphql.Null + } + } + + return ret +} + +func (ec *executionContext) marshalO__Type2αš–githubαš—comαš‹99designsαš‹gqlgenαš‹graphqlαš‹introspectionᚐType(ctx context.Context, sel ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + if v == nil { + return graphql.Null + } + return ec.___Type(ctx, sel, v) +} + +// endregion ***************************** type.gotpl ***************************** diff --git a/pkg/graph/gqlgen.yml b/pkg/graph/gqlgen.yml new file mode 100644 index 000000000..fadbf9aac --- /dev/null +++ b/pkg/graph/gqlgen.yml @@ -0,0 +1,87 @@ +# Where are all the schema files located? globs are supported eg src/**/*.graphqls +schema: + - graph/*.graphqls + +# Where should the generated server code go? +exec: + filename: graph/generated.go + package: graph + +# Uncomment to enable federation +# federation: +# filename: graph/federation.go +# package: graph + +# Where should any generated models go? +model: + filename: graph/model/models_gen.go + package: model + +# Where should the resolver implementations go? +resolver: + layout: follow-schema + dir: graph + package: graph + filename_template: "{name}.resolvers.go" + # Optional: turn on to not generate template comments above resolvers + # omit_template_comment: false + +# Optional: turn on use ` + "`" + `gqlgen:"fieldName"` + "`" + ` tags in your models +# struct_tag: json + +# Optional: turn on to use []Thing instead of []*Thing +# omit_slice_element_pointers: false + +# Optional: turn on to omit Is() methods to interface and unions +# omit_interface_checks : true + +# Optional: turn on to skip generation of ComplexityRoot struct content and Complexity function +# omit_complexity: false + +# Optional: turn on to not generate any file notice comments in generated files +# omit_gqlgen_file_notice: false + +# Optional: turn on to exclude the gqlgen version in the generated file notice. No effect if `omit_gqlgen_file_notice` is true. +# omit_gqlgen_version_in_file_notice: false + +# Optional: turn off to make struct-type struct fields not use pointers +# e.g. type Thing struct { FieldA OtherThing } instead of { FieldA *OtherThing } +# struct_fields_always_pointers: true + +# Optional: turn off to make resolvers return values instead of pointers for structs +# resolvers_always_return_pointers: true + +# Optional: turn on to return pointers instead of values in unmarshalInput +# return_pointers_in_unmarshalinput: false + +# Optional: wrap nullable input fields with Omittable +# nullable_input_omittable: true + +# Optional: set to speed up generation time by not performing a final validation pass. +# skip_validation: true + +# Optional: set to skip running `go mod tidy` when generating server code +# skip_mod_tidy: true + +# gqlgen will search for any type names in the schema in these go packages +# if they match it will use them, otherwise it will generate them. +autobind: +# - "go.keploy.io/server/v2/pkg/graph/model" + +# This section declares type mapping between the GraphQL and go type systems +# +# The first line in each type will be used as defaults for resolver arguments and +# modelgen, the others will be allowed when binding to fields. Configure them to +# your liking +models: + ID: + model: + - github.com/99designs/gqlgen/graphql.ID + - github.com/99designs/gqlgen/graphql.Int + - github.com/99designs/gqlgen/graphql.Int64 + - github.com/99designs/gqlgen/graphql.Int32 + Int: + model: + - github.com/99designs/gqlgen/graphql.Int + - github.com/99designs/gqlgen/graphql.Int64 + - github.com/99designs/gqlgen/graphql.Int32 diff --git a/pkg/graph/model/models_gen.go b/pkg/graph/model/models_gen.go new file mode 100644 index 000000000..f7e5aa1c3 --- /dev/null +++ b/pkg/graph/model/models_gen.go @@ -0,0 +1,18 @@ +// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. + +package model + +type Mutation struct { +} + +type Query struct { +} + +type TestRunInfo struct { + AppID int `json:"appId"` + TestRunID string `json:"testRunId"` +} + +type TestSetStatus struct { + Status string `json:"status"` +} diff --git a/pkg/graph/resolver.go b/pkg/graph/resolver.go new file mode 100644 index 000000000..8fa5e6e3f --- /dev/null +++ b/pkg/graph/resolver.go @@ -0,0 +1,32 @@ +// Package graph provides the resolver implementation for the GraphQL schema. +package graph + +import ( + "context" + + "go.keploy.io/server/v2/pkg/service/replay" + "go.uber.org/zap" +) + +// This file will not be regenerated automatically. +// +// It serves as dependency injection for your app, add any dependencies you require here. + +//go:generate go run github.com/99designs/gqlgen generate + +type Resolver struct { + logger *zap.Logger + replay replay.Service + hookCtx context.Context + hookCancel context.CancelFunc + appCtx context.Context + appCancel context.CancelFunc +} + +func (r *Resolver) getHookCtxWithCancel() (context.Context, context.CancelFunc) { + return r.hookCtx, r.hookCancel +} + +func (r *Resolver) getAppCtxWithCancel() (context.Context, context.CancelFunc) { + return r.appCtx, r.appCancel +} diff --git a/pkg/graph/schema.graphqls b/pkg/graph/schema.graphqls new file mode 100644 index 000000000..863138e66 --- /dev/null +++ b/pkg/graph/schema.graphqls @@ -0,0 +1,26 @@ +# GraphQL schema example +# +# https://gqlgen.com/getting-started/ + +type TestRunInfo { + appId: Int! + testRunId: String! +} + +type TestSetStatus { + status: String! +} + + +type Query { + testSets: [String!]! + testSetStatus(testRunId: String!, testSetId: String!): TestSetStatus! +} + +type Mutation { + runTestSet(testSetId: String!, testRunId: String!, appId: Int!): Boolean! + startHooks: TestRunInfo! + startApp(appId: Int!): Boolean! + stopHooks: Boolean! + stopApp(appId: Int!): Boolean! +} \ No newline at end of file diff --git a/pkg/graph/schema.resolvers.go b/pkg/graph/schema.resolvers.go new file mode 100644 index 000000000..f16fc9ea3 --- /dev/null +++ b/pkg/graph/schema.resolvers.go @@ -0,0 +1,187 @@ +package graph + +// This file will be automatically regenerated based on the schema, any resolver implementations +// will be copied through when generating and any unknown code will be moved to the end. +// Code generated by github.com/99designs/gqlgen version v0.17.45 + +import ( + "context" + "errors" + "fmt" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" + + "go.keploy.io/server/v2/pkg/graph/model" +) + +// TestSets is the resolver for the testSets field. +func (r *queryResolver) TestSets(ctx context.Context) ([]string, error) { + if r.Resolver == nil { + err := fmt.Errorf(utils.Emoji + "failed to get Resolver") + return nil, err + } + + ctx = context.WithoutCancel(ctx) + ids, err := r.replay.GetAllTestSetIDs(ctx) + if err != nil { + utils.LogError(r.logger, err, "failed to get all test set ids") + return nil, errors.New("failed to get all test sets") + } + r.logger.Debug("test set ids", zap.Strings("ids", ids)) + return ids, nil +} + +// StartHooks is the resolver for the startHooks field. +func (r *mutationResolver) StartHooks(ctx context.Context) (*model.TestRunInfo, error) { + if r.Resolver == nil { + err := fmt.Errorf(utils.Emoji + "failed to get Resolver") + return nil, err + } + + ctx = context.WithoutCancel(ctx) + g, ctx := errgroup.WithContext(ctx) + ctx = context.WithValue(ctx, models.ErrGroupKey, g) + r.hookCtx = ctx + + testRunId, appId, hookCancel, err := r.replay.BootReplay(ctx) + if err != nil { + utils.LogError(r.logger, err, "failed to boot replay") + return nil, errors.New("failed to hook the application") + } + r.hookCancel = hookCancel + r.logger.Debug("test run info", zap.String("testRunId", testRunId), zap.Int("appId", int(appId))) + return &model.TestRunInfo{ + TestRunID: testRunId, + AppID: int(appId), + }, nil +} + +// RunTestSet is the resolver for the runTestSet field. +func (r *mutationResolver) RunTestSet(ctx context.Context, testSetID string, testRunID string, appID int) (bool, error) { + if r.Resolver == nil { + err := fmt.Errorf(utils.Emoji + "failed to get Resolver") + return false, err + } + r.logger.Debug("running test set", zap.String("testSetID", testSetID), zap.String("testRunID", testRunID), zap.Int("appID", appID)) + go func(testSetID, testRunID string, appID int) { + ctx := context.WithoutCancel(ctx) + status, err := r.replay.RunTestSet(ctx, testSetID, testRunID, uint64(appID), true) + if err != nil { + return + } + r.logger.Info("test set status", zap.String("status", string(status))) + }(testSetID, testRunID, appID) + + return true, nil +} + +// StartApp is the resolver for the startApp field. +func (r *mutationResolver) StartApp(ctx context.Context, appID int) (bool, error) { + if r.Resolver == nil { + err := fmt.Errorf(utils.Emoji + "failed to get Resolver") + return false, err + } + + r.logger.Debug("starting application", zap.Int("appID", appID)) + + appErrGrp, _ := errgroup.WithContext(ctx) + appCtx := context.WithoutCancel(ctx) + appCtx, appCancel := context.WithCancel(appCtx) + appCtx = context.WithValue(appCtx, models.ErrGroupKey, appErrGrp) + r.appCtx = appCtx + r.appCancel = appCancel + + appErrGrp.Go(func() error { + err := r.replay.RunApplication(appCtx, uint64(appID), models.RunOptions{}) + if err.Err != nil { + r.logger.Error("failed to run application", zap.Error(err)) + utils.LogError(r.logger, err.Err, "error while running the application") + return err + } + return nil + }) + + return true, nil +} + +// TestSetStatus is the resolver for the testSetStatus field. +func (r *queryResolver) TestSetStatus(ctx context.Context, testRunID string, testSetID string) (*model.TestSetStatus, error) { + if r.Resolver == nil { + err := fmt.Errorf(utils.Emoji + "failed to get Resolver") + return nil, err + } + + r.logger.Debug("getting test set status for", zap.String("testRunID", testRunID), zap.String("testSetID", testSetID)) + ctx = context.WithoutCancel(ctx) + status, err := r.replay.GetTestSetStatus(ctx, testRunID, testSetID) + if err != nil { + utils.LogError(r.logger, err, "failed to get test set status") + return nil, errors.New("failed to get test set status") + } + r.logger.Debug("test set status", zap.String("status", string(status))) + return &model.TestSetStatus{ + Status: string(status), + }, nil +} + +// StopApp is the resolver for the stopApp field. +func (r *mutationResolver) StopApp(_ context.Context, appId int) (bool, error) { + if r.Resolver == nil { + err := fmt.Errorf(utils.Emoji + "failed to get Resolver") + return false, err + } + + r.logger.Debug("stopping the application", zap.Int("appID", appId)) + appCtx := r.appCtx + appCancel := r.appCancel + + if appCtx == nil { + return false, fmt.Errorf("failed to get the app context") + } + g, ok := appCtx.Value(models.ErrGroupKey).(*errgroup.Group) + if !ok { + utils.LogError(r.logger, nil, "failed to get the app error group from the context") + return false, errors.New("failed to stop the app") + } + + // cancel the context of the app to stop the app + if appCancel != nil { + appCancel() + } + + err := g.Wait() + if err != nil { + utils.LogError(r.logger, err, "failed to stop the app") + return false, err + } + r.logger.Info("application stopped successfully", zap.Int("appID", appId)) + + return true, nil +} + +// StopHooks is the resolver for the stopHooks field. +func (r *mutationResolver) StopHooks(context.Context) (bool, error) { + if r.Resolver == nil { + err := fmt.Errorf(utils.Emoji + "failed to get Resolver") + return false, err + } + r.logger.Debug("stopping the hooks") + err := utils.Stop(r.logger, "stopping the test run") + if err != nil { + utils.LogError(r.logger, err, "failed to stop the test run") + return false, err + } + return true, nil +} + +// Mutation returns MutationResolver implementation. +func (r *Resolver) Mutation() MutationResolver { return &mutationResolver{r} } + +// Query returns QueryResolver implementation. +func (r *Resolver) Query() QueryResolver { return &queryResolver{r} } + +type mutationResolver struct{ *Resolver } +type queryResolver struct{ *Resolver } diff --git a/pkg/graph/serve.go b/pkg/graph/serve.go new file mode 100644 index 000000000..f5f5e54ec --- /dev/null +++ b/pkg/graph/serve.go @@ -0,0 +1,122 @@ +package graph + +import ( + "context" + "fmt" + "net/http" + "strconv" + "sync" + + "golang.org/x/sync/errgroup" + + "github.com/99designs/gqlgen/graphql/handler" + "github.com/99designs/gqlgen/graphql/playground" + "go.keploy.io/server/v2/config" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/pkg/service/replay" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +type Graph struct { + logger *zap.Logger + mutex sync.Mutex + replay replay.Service + config config.Config +} + +func NewGraph(logger *zap.Logger, replay replay.Service, config config.Config) *Graph { + return &Graph{ + logger: logger, + mutex: sync.Mutex{}, + config: config, + replay: replay, + } +} + +const defaultPort = 6789 + +func (g *Graph) Serve(ctx context.Context) error { + + if g.config.Port == 0 { + g.config.Port = defaultPort + } + + graphGrp, graphCtx := errgroup.WithContext(ctx) + + resolver := &Resolver{ + logger: g.logger, + replay: g.replay, + } + + srv := handler.NewDefaultServer(NewExecutableSchema(Config{ + Resolvers: resolver, + })) + + defer func() { + // cancel the context of the hooks to stop proxy and ebpf hooks + hookCtx, hookCancel := resolver.getHookCtxWithCancel() + if hookCtx != nil && hookCancel != nil { + hookCancel() + hookErrGrp, ok := hookCtx.Value(models.ErrGroupKey).(*errgroup.Group) + if ok { + if err := hookErrGrp.Wait(); err != nil { + utils.LogError(g.logger, err, "failed to stop the hooks gracefully") + } + } + } + + // cancel the context of the app in case of sudden stop if the app was started + appCtx, appCancel := resolver.getAppCtxWithCancel() + if appCtx != nil && appCancel != nil { + appCancel() + appErrGrp, ok := appCtx.Value(models.ErrGroupKey).(*errgroup.Group) + if ok { + if err := appErrGrp.Wait(); err != nil { + utils.LogError(g.logger, err, "failed to stop the application gracefully") + } + } + } + + err := graphGrp.Wait() + if err != nil { + utils.LogError(g.logger, err, "failed to stop the graphql server gracefully") + } + }() + + http.Handle("/", playground.Handler("GraphQL playground", "/query")) + http.Handle("/query", srv) + + // Create a new http.Server instance + httpSrv := &http.Server{ + Addr: ":" + strconv.Itoa(int(g.config.Port)), + Handler: nil, // Use the default http.DefaultServeMux + } + + graphGrp.Go(func() error { + defer utils.Recover(g.logger) + return g.stopGraphqlServer(graphCtx, httpSrv) + }) + + g.logger.Debug(fmt.Sprintf("connect to http://localhost:%d/ for GraphQL playground", int(g.config.Port))) + g.logger.Info("Graphql server started", zap.Int("port", int(g.config.Port))) + if err := httpSrv.ListenAndServe(); err != http.ErrServerClosed { + stopErr := utils.Stop(g.logger, "Graphql server failed to start") + if stopErr != nil { + utils.LogError(g.logger, stopErr, "failed to stop Graphql server gracefully") + } + return err + } + g.logger.Info("Graphql server stopped gracefully") + return nil +} + +// Gracefully shut down the HTTP server +func (g *Graph) stopGraphqlServer(ctx context.Context, httpSrv *http.Server) error { + <-ctx.Done() + if err := httpSrv.Shutdown(ctx); err != nil { + utils.LogError(g.logger, err, "Graphql server shutdown failed") + return err + } + return nil +} diff --git a/pkg/graph/tools.go b/pkg/graph/tools.go new file mode 100644 index 000000000..bd07e3d2d --- /dev/null +++ b/pkg/graph/tools.go @@ -0,0 +1,9 @@ +//go:build tools +// +build tools + +package graph + +import ( + _ "github.com/99designs/gqlgen" + _ "github.com/99designs/gqlgen/graphql/introspection" +) diff --git a/pkg/match.go b/pkg/match.go deleted file mode 100644 index 8c2957441..000000000 --- a/pkg/match.go +++ /dev/null @@ -1,141 +0,0 @@ -package pkg - -import ( - "encoding/json" - "errors" - "reflect" - - "go.uber.org/zap" -) - -// unmarshallJson returns unmarshalled JSON object. -func unmarshallJson(s string, log *zap.Logger) (interface{}, error) { - var result interface{} - if err := json.Unmarshal([]byte(s), &result); err != nil { - log.Error("cannot convert json string into json object", zap.Error(err)) - return nil, err - } else { - return result, nil - } -} - -func arrayToMap(arr []string) map[string]bool { - res := map[string]bool{} - for i := range arr { - res[arr[i]] = true - } - return res -} - -func Match(exp, act string, noise []string, log *zap.Logger) (string, string, bool, error) { - - noiseMap := arrayToMap(noise) - expected, err := unmarshallJson(exp, log) - if err != nil { - return exp, act, false, err - } - actual, err := unmarshallJson(act, log) - if err != nil { - return exp, act, false, err - } - if reflect.TypeOf(expected) != reflect.TypeOf(actual) { - return exp, act, false, nil - } - //tmp := mapClone(noiseMap) - ////expected = removeNoise(expected, tmp) - // - //tmp = mapClone(noiseMap) - //actual = removeNoise(actual, tmp) - match, err := jsonMatch("", expected, actual, noiseMap) - if err != nil { - return exp, act, false, err - } - cleanExp, err := json.Marshal(expected) - if err != nil { - return exp, act, false, err - } - cleanAct, err := json.Marshal(actual) - if err != nil { - return exp, act, false, err - } - return string(cleanExp), string(cleanAct), match, nil -} - -// jsonMatch returns true if expected and actual JSON objects matches(are equal). -func jsonMatch(key string, expected, actual interface{}, noiseMap map[string]bool) (bool, error) { - - if reflect.TypeOf(expected) != reflect.TypeOf(actual) { - return false, errors.New("type not matched ") - } - if expected == nil && actual == nil { - return true, nil - } - x := reflect.ValueOf(expected) - prefix := "" - if key != "" { - prefix = key + "." - } - switch x.Kind() { - case reflect.Float64, reflect.String, reflect.Bool: - if expected != actual && !noiseMap[key] { - return false, nil - } - - case reflect.Map: - expMap := expected.(map[string]interface{}) - actMap := actual.(map[string]interface{}) - for k, v := range expMap { - val, ok := actMap[k] - if !ok { - return false, nil - } - if x, er := jsonMatch(prefix+k, v, val, noiseMap); !x || er != nil { - return false, nil - } - // remove the noisy key from both expected and actual JSON. - if noiseMap[prefix+k] { - delete(expMap, prefix+k) - delete(actMap, k) - continue - } - } - // checks if there is a key which is not present in expMap but present in actMap. - for k := range actMap { - _, ok := expMap[k] - if !ok { - return false, nil - } - } - - case reflect.Slice: - if noiseMap[key] { - return true, nil - } - expSlice := reflect.ValueOf(expected) - actSlice := reflect.ValueOf(actual) - if expSlice.Len() != actSlice.Len() { - return false, nil - } - isMatched := true - for i := 0; i < expSlice.Len(); i++ { - - isMatchedElement := false - for j := 0; j < actSlice.Len(); j++ { - if x, err := jsonMatch(key, expSlice.Index(i).Interface(), actSlice.Index(j).Interface(), noiseMap); err == nil && x { - isMatchedElement = true - break - } - } - isMatched = isMatchedElement && isMatched - // if x, err := jsonMatch(expSlice.Index(i).Interface(), actSlice.Index(i).Interface()); err != nil || !x { - // return false, nil - // } - - } - return isMatched, nil - default: - return false, errors.New("type not registered for json") - } - return true, nil - -} diff --git a/pkg/match_test.go b/pkg/match_test.go deleted file mode 100644 index 7da60f8fd..000000000 --- a/pkg/match_test.go +++ /dev/null @@ -1,1204 +0,0 @@ -package pkg - -import ( - // "encoding/json" - "fmt" - "testing" - - "github.com/go-test/deep" - "go.uber.org/zap" -) - -func TestJsonDiff(t *testing.T) { - for _, tt := range []struct { - exp string - actual string - noise []string - result bool - }{ - // { - // exp: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP", - // "body": "lorem ipsum jibrish" - // }, - // "status":200 - // }`, - // actual: `{ - // "data": { - // "body": "lorem ipsum jibrish", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: true, - // }, - // { - // exp: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP", - // "body": "paorum " - // }, - // "status":200 - // }`, - // actual: `{ - // "data": { - // "body": "lorem ipsum jibrish", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: false, - // }, - // { - // exp: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP", - // "body": "lorem ipsum jibrish" - // }, - // "url":"http://localhost:8080/GMWJGSAP", - // "status":200 - // }`, - // actual: `{ - // "data": { - // "body": "lorem ipsum jibrish", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "url":"http://localhost:8080/GMWJGSAP", - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: true, - // }, - // { - // exp: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP", - // "body": "lorem ipsum jibrish" - // }, - // "url":"http://localhost:6060/", - // "status":200 - // }`, - // actual: `{ - // "data": { - // "body": "lorem ipsum jibrish", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "url":"http://localhost:8080/GMWJGSAP", - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: false, - // }, - // { - // exp: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP", - // "body": "lorem ipsum jibrish" - // }, - // "url":"http://localhost:6060/", - // "status":200 - // }`, - // actual: `{ - // "data": { - // "body": "lorem ipsum jibrish", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: false, - // }, - // { - // exp: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP", - // "body": "lorem ipsum jibrish" - // }, - // "status":200 - // }`, - // actual: `{ - // "data": { - // "body": "lorem ipsum jibrish", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "url":"http://localhost:6060/", - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: false, - // }, - // { - // exp: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "status":200 - // }`, - // actual: `{ - // "data": { - // "foo":"bar", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: false, - // }, - // { - // exp: `{ - // "data": { - // "foo":"bar", - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "status":200 - // }`, - // actual: `{ - // "data": { - // "url":"http://localhost:8080/GMWJGSAP" - // }, - // "status":200 - // }`, - // noise: []string{"data.url"}, - // result: false, - // }, - // { - // exp: `{"name": "Rob Pike", "set": 21}`, - // actual: `{"name": "Rob Pike", "set": false}`, - // noise: []string{"set"}, - // result: true, - // }, - // { - // exp: `{ - // "name": "Ken Thompson", - // "set": true, - // "contact": ["1234567890", "0987654321"]} - // `, - // actual: `{ - // "name": "Ken Thompson", - // "set": false, - // "contact": ["2454665654", "3449834321"]} - // `, - // noise: []string{"contact"}, - // result: false, - // }, - // { - // exp: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "Delhi", - // "Pin": 110082 - // } - // }, - // { - // "Name": "Ken", - // "Address": { - // "City": "Jaipur", - // "Pin": 121212 - // } - // } - // ] - // `, - // actual: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "Delhi", - // "Pin": 110031 - // } - // }, - // { - // "Name": "Ken", - // "Address": { - // "City": "Jaipur", - // "Pin": 919191 - // } - // } - // ] - // `, - // noise: []string{"Address.Pin"}, - // result: true, - // }, - // { - // exp: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "New York", - // "Pin": 110082 - // } - // }, - // { - // "Name": "Ken", - // "Address": { - // "City": "London", - // "Pin": 121212 - // } - // } - // ] - // `, - // actual: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "Delhi", - // "Pin": 110031 - // } - // }, - // { - // "Name": "Ken", - // "Address": { - // "City": "Jaipur", - // "Pin": 919191 - // } - // } - // ] - // `, - // noise: []string{"Address.Pin"}, - // result: false, - // }, - // { - // exp: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "New York", - // "Pin": 110082 - // } - // }, - // { - // "Name": "Ken", - // "Age": 79, - // "Address": { - // "City": "London", - // "Pin": 121212 - // } - // } - // ] - // `, - // actual: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "Delhi", - // "Pin": 110031 - // } - // }, - // { - // "Name": "Ken", - // "Address": { - // "City": "Jaipur", - // "Pin": 919191 - // } - // } - // ] - // `, - // noise: []string{"Address.Pin"}, - // result: false, - // }, - // { - // exp: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "Delhi", - // "Pin": 110082 - // } - // }, - // { - // "Name": "Rob", - // "Address": { - // "City": "New York", - // "Pin": 454545 - // } - // }, - // { - // "Name": "Ken", - // "Address": { - // "City": "Jaipur", - // "Pin": 121212 - // } - // } - // ] - // `, - // actual: `[ - // { - // "Name": "Robert", - // "Address": { - // "City": "Delhi", - // "Pin": 110031 - // } - // }, - // { - // "Name": "Ken", - // "Address": { - // "City": "Jaipur", - // "Pin": 919191 - // } - // } - // ] - // `, - // noise: []string{"Address.Pin"}, - // result: false, - // }, - // { - // exp: ` - // { - // "Profiles": [ - // { - // "Name": "Henry", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Pennsylvania", - // "Pin": 19003 - // } - // }, - // { - // "Name": "Ford", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Chicago", - // "Pin": 19001 - // } - // } - // ] - // } - // `, - // actual: ` - // { - // "Profiles": [ - // { - // "Name": "Henry", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Pennsylvania", - // "Pin": 110082 - // } - // }, - // { - // "Name": "Ford", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Chicago", - // "Pin": 110081 - // } - // } - // ] - // } - // `, - // noise: []string{"set.somethingNotPresent", "Profiles.Address.Pin"}, - // result: true, - // }, - // { - // exp: ` - // { - // "Profiles": [ - // { - // "Name": "Henry", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Pennsylvania", - // "Pin": 19003 - // } - // }, - // { - // "Name": "Ford", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Chicago", - // "Pin": 19001 - // } - // }, - // { - // "Name": "Ansvi", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Geogia", - // "Pin": 19001 - // } - // } - // ] - // } - // `, - // actual: ` - // { - // "Profiles": [ - // { - // "Name": "Henry", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Pennsylvania", - // "Pin": 110082 - // } - // }, - // { - // "Name": "Ford", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Chicago", - // "Pin": 110081 - // } - // } - // ] - // } - // `, - // noise: []string{"set.somethingNotPresent", "Profiles.Address.Pin"}, - // result: false, - // }, - // { - // exp: ` - // { - // "Profiles": [ - // { - // "Name": "Henry", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Pennsylvania", - // "Pin": 19003 - // } - // }, - // { - // "Name": "Ford", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Chicago", - // "Pin": 19001 - // } - // } - // ] - // } - // `, - // actual: ` - // { - // "Profiles": [ - // { - // "Name": "Henry", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Pennsylvania", - // "Pin": 110082 - // } - // }, - // { - // "Name": "Ansvi", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Geogia", - // "Pin": 19001 - // } - // }, - // { - // "Name": "Ford", - // "Contact": ["123", "456"], - // "Address": { - // "City": "Chicago", - // "Pin": 110081 - // } - // } - // ] - // } - // `, - // noise: []string{"set.somethingNotPresent", "Profiles.Address.Pin"}, - // result: false, - // }, - // { - // exp: ` - // [ - // { - // "name": "Ashley", - // "age": 21.0, - // "set": false, - // "contact": [ - // "Student", {"address": "Dwarka"} - // ] - // }, - // { - // "name": "Ritik", - // "age": 21.0, - // "set": false, - // "contact": [ - // "Student", {"address": "Laxmi Nagar"} - // ] - // } - // ] - // `, - // actual: ` - // [ - // { - // "name": "Ashley", - // "age": 21.0, - // "set": true, - // "contact": [ - // "Student", {"address": "XYZ"} - // ] - // }, - // { - // "name": "Barney", - // "age": 21.0, - // "set": 12, - // "contact": [ - // "Student", {"address": "ABC"} - // ] - // } - // ] - // `, - // noise: []string{"set", "contact.address"}, - // result: false, - // }, - // { - // exp: ` - // { - // "Name": "Chandler Muriel Bing", - // "Age": 31.0, - // "Address": { - // "City" : "New York", - // "PIN" : "110192" - // }, - // "Father": { - // "Name": "Charles Bing", - // "Age": 60.0, - // "Address": { - // "City" : "Atlantic City", - // "PIN" : "110192" - // } - // } - // } - // `, - // actual: ` - // { - // "Name": "Chandler Muriel Bing", - // "Age": 31.0, - // "Address": { - // "City" : "New York", - // "PIN" : "110131" - // }, - // "Father": { - // "Name": "Charles Bing", - // "Age": 70.0, - // "Address": { - // "City" : "Atlantic City", - // "PIN" : "321109" - // } - // } - // } - // `, - // noise: []string{"Father.Age", "Father.Address.PIN"}, - // result: false, - // }, - // { - // exp: `{"name": "Rob Pike", "set": {"date": "21/01/2030", "time":"20:08"}}`, - // actual: `{"name": "Rob Pike", "set": {"date": "10/11/2051", "time":"12:21"}}`, - // noise: []string{"set.date", "set.time"}, - // result: true, - // }, - { - exp: `{"contacts": [12345, 98765]}`, - actual: `{"contacts": [98765, 12345]}`, - noise: []string{}, - result: true, - }, - { - exp: `{ - "data": { - "url":"http://localhost:8080/GMWJGSAP", - "body": "paorum " - }, - "status":200 - }`, - actual: `{ - "data": { - "body": "lorem ipsum jibrish", - "url":"http://localhost:8080/GMWJGSAP" - }, - "status":200 - }`, - noise: []string{"data.url"}, - result: false, - }, - { - exp: `{ - "data": { - "url":"http://localhost:8080/GMWJGSAP", - "body": "lorem ipsum jibrish" - }, - "url":"http://localhost:8080/GMWJGSAP", - "status":200 - }`, - actual: `{ - "data": { - "body": "lorem ipsum jibrish", - "url":"http://localhost:8080/GMWJGSAP" - }, - "url":"http://localhost:8080/GMWJGSAP", - "status":200 - }`, - noise: []string{"data.url"}, - result: true, - }, - { - exp: `{ - "data": { - "url":"http://localhost:8080/GMWJGSAP", - "body": "lorem ipsum jibrish" - }, - "url":"http://localhost:6060/", - "status":200 - }`, - actual: `{ - "data": { - "body": "lorem ipsum jibrish", - "url":"http://localhost:8080/GMWJGSAP" - }, - "url":"http://localhost:8080/GMWJGSAP", - "status":200 - }`, - noise: []string{"data.url"}, - result: false, - }, - { - exp: `{ - "data": { - "url":"http://localhost:8080/GMWJGSAP", - "body": "lorem ipsum jibrish" - }, - "url":"http://localhost:6060/", - "status":200 - }`, - actual: `{ - "data": { - "body": "lorem ipsum jibrish", - "url":"http://localhost:8080/GMWJGSAP" - }, - "status":200 - }`, - noise: []string{"data.url"}, - result: false, - }, - { - exp: `{ - "data": { - "url":"http://localhost:8080/GMWJGSAP", - "body": "lorem ipsum jibrish" - }, - "status":200 - }`, - actual: `{ - "data": { - "body": "lorem ipsum jibrish", - "url":"http://localhost:8080/GMWJGSAP" - }, - "url":"http://localhost:6060/", - "status":200 - }`, - noise: []string{"data.url"}, - result: false, - }, - { - exp: `{ - "data": { - "url":"http://localhost:8080/GMWJGSAP" - }, - "status":200 - }`, - actual: `{ - "data": { - "foo":"bar", - "url":"http://localhost:8080/GMWJGSAP" - }, - "status":200 - }`, - noise: []string{"data.url"}, - result: false, - }, - { - exp: `{ - "data": { - "foo":"bar", - "url":"http://localhost:8080/GMWJGSAP" - }, - "status":200 - }`, - actual: `{ - "data": { - "url":"http://localhost:8080/GMWJGSAP" - }, - "status":200 - }`, - noise: []string{"data.url"}, - result: false, - }, - { - exp: `{"name": "Rob Pike", "set": 21}`, - actual: `{"name": "Rob Pike", "set": false}`, - noise: []string{"set"}, - result: false, - }, - { - exp: `{ - "name": "Ken Thompson", - "set": true, - "contact": ["1234567890", "0987654321"]} - `, - actual: `{ - "name": "Ken Thompson", - "set": false, - "contact": ["2454665654", "3449834321"]} - `, - noise: []string{"contact"}, - result: false, - }, - { - exp: `[ - { - "Name": "Robert", - "Address": { - "City": "Delhi", - "Pin": 110082 - } - }, - { - "Name": "Ken", - "Address": { - "City": "Jaipur", - "Pin": 121212 - } - } - ] - `, - actual: `[ - { - "Name": "Robert", - "Address": { - "City": "Delhi", - "Pin": 110031 - } - }, - { - "Name": "Ken", - "Address": { - "City": "Jaipur", - "Pin": 919191 - } - } - ] - `, - noise: []string{"Address.Pin"}, - result: true, - }, - { - exp: `[ - { - "Name": "Robert", - "Address": { - "City": "New York", - "Pin": 110082 - } - }, - { - "Name": "Ken", - "Address": { - "City": "London", - "Pin": 121212 - } - } - ] - `, - actual: `[ - { - "Name": "Robert", - "Address": { - "City": "Delhi", - "Pin": 110031 - } - }, - { - "Name": "Ken", - "Address": { - "City": "Jaipur", - "Pin": 919191 - } - } - ] - `, - noise: []string{"Address.Pin"}, - result: false, - }, - { - exp: `[ - { - "Name": "Robert", - "Address": { - "City": "New York", - "Pin": 110082 - } - }, - { - "Name": "Ken", - "Age": 79, - "Address": { - "City": "London", - "Pin": 121212 - } - } - ] - `, - actual: `[ - { - "Name": "Robert", - "Address": { - "City": "New York", - "Pin": 110031 - } - }, - { - "Name": "Ken", - "Address": { - "City": "London", - "Pin": 919191 - } - } - ] - `, - noise: []string{"Address.Pin"}, - result: false, - }, - { - exp: `[ - { - "Name": "Robert", - "Address": { - "City": "Delhi", - "Pin": 110082 - } - }, - { - "Name": "Rob", - "Address": { - "City": "New York", - "Pin": 454545 - } - }, - { - "Name": "Ken", - "Address": { - "City": "Jaipur", - "Pin": 121212 - } - } - ] - `, - actual: `[ - { - "Name": "Robert", - "Address": { - "City": "Delhi", - "Pin": 110031 - } - }, - { - "Name": "Ken", - "Address": { - "City": "Jaipur", - "Pin": 919191 - } - } - ] - `, - noise: []string{"Address.Pin"}, - result: false, - }, - { - exp: ` - { - "Profiles": [ - { - "Name": "Henry", - "Contact": ["123", "456"], - "Address": { - "City": "Pennsylvania", - "Pin": 19003 - } - }, - { - "Name": "Ford", - "Contact": ["123", "456"], - "Address": { - "City": "Chicago", - "Pin": 19001 - } - } - ] - } - `, - actual: ` - { - "Profiles": [ - { - "Name": "Henry", - "Contact": ["456", "123"], - "Address": { - "City": "Pennsylvania", - "Pin": 110082 - } - }, - { - "Name": "Ford", - "Contact": ["456", "123"], - "Address": { - "City": "Chicago", - "Pin": 110081 - } - } - ] - } - `, - noise: []string{"set.somethingNotPresent", "Profiles.Address.Pin"}, - result: true, - }, - { - exp: ` - { - "Profiles": [ - { - "Name": "Henry", - "Contact": ["123", "456"], - "Address": { - "City": "Pennsylvania", - "Pin": 19003 - } - }, - { - "Name": "Ford", - "Contact": ["123", "456"], - "Address": { - "City": "Chicago", - "Pin": 19001 - } - }, - { - "Name": "Ansvi", - "Contact": ["123", "456"], - "Address": { - "City": "Geogia", - "Pin": 19001 - } - } - ] - } - `, - actual: ` - { - "Profiles": [ - { - "Name": "Henry", - "Contact": ["123", "456"], - "Address": { - "City": "Pennsylvania", - "Pin": 110082 - } - }, - { - "Name": "Ansvi", - "Contact": ["123", "456"], - "Address": { - "City": "Geogia", - "Pin": 19001 - } - }, - { - "Name": "Ford", - "Contact": ["123", "456"], - "Address": { - "City": "Chicago", - "Pin": 110081 - } - } - ] - } - `, - noise: []string{"set.somethingNotPresent", "Profiles.Address.Pin"}, - result: true, - }, - { - exp: ` - { - "Profiles": [ - { - "Name": "Henry", - "Contact": ["123", "456"], - "Address": { - "City": "Pennsylvania", - "Pin": 19003 - } - }, - { - "Name": "Ford", - "Contact": ["123", "456"], - "Address": { - "City": "Chicago", - "Pin": 19001 - } - } - ] - } - `, - actual: ` - { - "Profiles": [ - { - "Name": "Henry", - "Contact": ["123", "456"], - "Address": { - "City": "Pennsylvania", - "Pin": 110082 - } - }, - { - "Name": "Ansvi", - "Contact": ["123", "456"], - "Address": { - "City": "Geogia", - "Pin": 19001 - } - }, - { - "Name": "Ford", - "Contact": ["123", "456"], - "Address": { - "City": "Chicago", - "Pin": 110081 - } - } - ] - } - `, - noise: []string{"set.somethingNotPresent", "Profiles.Address.Pin"}, - result: false, - }, - { - exp: ` - [ - { - "name": "Ashley", - "age": 21.0, - "set": false, - "contact": [ - "Student", {"address": "Dwarka"} - ] - }, - { - "name": "Ritik", - "age": 21.0, - "set": false, - "contact": [ - "Student", {"address": "Laxmi Nagar"} - ] - } - ] - `, - actual: ` - [ - { - "name": "Ashley", - "age": 21.0, - "set": true, - "contact": [ - "Student", {"address": "XYZ"} - ] - }, - { - "name": "Barney", - "age": 21.0, - "set": 12, - "contact": [ - "Student", {"address": "ABC"} - ] - } - ] - `, - noise: []string{"set", "contact.address"}, - result: false, - }, - { - exp: ` - { - "Name": "Chandler Muriel Bing", - "Age": 31.0, - "Address": { - "City" : "New York", - "PIN" : "110192" - }, - "Father": { - "Name": "Charles Bing", - "Age": 60.0, - "Address": { - "City" : "Atlantic City", - "PIN" : "110192" - } - } - } - `, - actual: ` - { - "Name": "Chandler Muriel Bing", - "Age": 31.0, - "Address": { - "City" : "New York", - "PIN" : "110131" - }, - "Father": { - "Name": "Charles Bing", - "Age": 70.0, - "Address": { - "City" : "Atlantic City", - "PIN" : "321109" - } - } - } - `, - noise: []string{"Father.Age", "Father.Address.PIN"}, - result: false, - }, - { - exp: `{"name": "Rob Pike", "set": {"date": "21/01/2030", "time":"20:08"}}`, - actual: `{"name": "Rob Pike", "set": {"date": "10/11/2051", "time":"12:21"}}`, - noise: []string{"set.date", "set.time"}, - - result: true, - }, - { - exp: `{"contacts": [12345, 98765]}`, - actual: `{"contacts": [98765, 12345]}`, - noise: []string{}, - result: true, - }, - { - exp: `[{"url": "www.google.com/sasdde"}, {"url": "www.google.com/jjhhd", "deadline": 123}]`, - actual: `[{"url": "www.google.com/jjhhd", "deadline": 123}, {"url": "www.google.com/sasdde"}]`, - noise: []string{"body.url"}, - result: true, - }, - { - exp: `[{"url": "www.google.com/sasdde" , "deadline": 123}]`, - actual: `[{"deadline": 123}]`, - noise: []string{"body.url"}, - result: false, - }, - } { - logger, _ := zap.NewProduction() - defer logger.Sync() - _, _, res, err := Match(tt.exp, tt.actual, tt.noise, logger) - if err != nil { - logger.Error("%v", zap.Error(err)) - } - diff := deep.Equal(res, tt.result) - if diff != nil { - fmt.Println("This is diff", diff) - t.Fatal(tt.exp, tt.actual, "THIS IS EXP", tt.result, " \n THIS IS ACT", res, "noise is: ", tt.noise) - } - } - -} diff --git a/pkg/models/README.md b/pkg/models/README.md new file mode 100755 index 000000000..18c3566ba --- /dev/null +++ b/pkg/models/README.md @@ -0,0 +1,3 @@ +# Models Package Documentation + +This package defines all the Go structs used for storing the captured data. It is designed as an independent module. \ No newline at end of file diff --git a/pkg/models/app.go b/pkg/models/app.go deleted file mode 100644 index 6deba8d24..000000000 --- a/pkg/models/app.go +++ /dev/null @@ -1,16 +0,0 @@ -package models - -import "context" - -type App struct { - ID string `json:"id" bson:"_id"` - Created int64 `json:"created_at" bson:"created,omitempty"` - Updated int64 `json:"updated" bson:"updated,omitempty"` - CID string `json:"cid" bson:"CID"` -} - -type AppDB interface { - GetByCompany(ctx context.Context, cid string) ([]*App, error) - Exists(ctx context.Context, cid, id string) (bool, error) - Put(ctx context.Context, a *App) error -} diff --git a/pkg/models/body-segment.go b/pkg/models/body-segment.go deleted file mode 100644 index c26c61e00..000000000 --- a/pkg/models/body-segment.go +++ /dev/null @@ -1,33 +0,0 @@ -package models - -type BodySegment struct { - Normal bool - Missing bool - Type SegmentType - ValueType SegmentValueType - Key string - Value *BodySegment - String string - Number float64 - Bool bool - Array []BodySegment -} - -type SegmentValueType string - -const ( - STRING SegmentValueType = "STRING" - NUMBER SegmentValueType = "NUMBER" - BOOL SegmentValueType = "BOOL" - NULL SegmentValueType = "NULL" - ARRAY SegmentValueType = "ARRAY" - OBJECT SegmentValueType = "OBJECT" -) - -type SegmentType string - -const ( - ROOT SegmentType = "ROOT" - KEY SegmentType = "KEY" - VALUE SegmentType = "VALUE" -) diff --git a/pkg/models/browser-mock.go b/pkg/models/browser-mock.go deleted file mode 100644 index 8f1e569fd..000000000 --- a/pkg/models/browser-mock.go +++ /dev/null @@ -1,26 +0,0 @@ -package models - -import "context" - -type BrowserMock struct { - ID string `json:"id" bson:"_id"` - Created int64 `json:"created" bson:"created,omitempty"` - Updated int64 `json:"updated" bson:"updated,omitempty"` - AppID string `json:"app_id" bson:"app_id,omitempty"` - TestName string `json:"test_name" bson:"test_name,omitempty"` - Deps []map[string]FetchResponse `json:"deps" bson:"deps,omitempty"` -} - -type FetchResponse struct { - Status int `json:"status" bson:"status,omitempty"` - Headers map[string]string `json:"headers" bson:"headers,omitempty"` - Body interface{} `json:"body" bson:"body,omitempty"` - ResponseType string `json:"response_type" bson:"response_type"` -} - -type BrowserMockDB interface { - Put(context.Context, BrowserMock) error - Get(ctx context.Context, app string, testName string) ([]BrowserMock, error) - CountDocs(ctx context.Context, app string, testName string) (int64, error) - UpdateArr(ctx context.Context, app string, testName string, doc BrowserMock) error -} diff --git a/pkg/models/config.go b/pkg/models/config.go new file mode 100644 index 000000000..f1f215f0e --- /dev/null +++ b/pkg/models/config.go @@ -0,0 +1,65 @@ +// Package models provides data models for the keploy. +package models + +import "time" + +type Record struct { + Path string `json:"path" yaml:"path"` + Command string `json:"command" yaml:"command"` + ProxyPort uint32 `json:"proxyport" yaml:"proxyport"` + ContainerName string `json:"containerName" yaml:"containerName"` + NetworkName string `json:"networkName" yaml:"networkName"` + Delay uint64 `json:"delay" yaml:"delay"` + BuildDelay time.Duration `json:"buildDelay" yaml:"buildDelay"` + Tests TestFilter `json:"tests" yaml:"tests"` + Stubs Stubs `json:"stubs" yaml:"stubs"` +} + +type TestFilter struct { + Filters []Filters `json:"filters" yaml:"filters"` +} + +type Stubs struct { + Filters []Filters `json:"filters" yaml:"filters"` +} +type Filters struct { + Path string `json:"path" yaml:"path"` + URLMethods []string `json:"urlMethods" yaml:"urlMethods"` + Host string `json:"host" yaml:"host"` + Headers map[string]string `json:"headers" yaml:"headers"` + Port uint `json:"ports" yaml:"ports"` +} + +func (tests *TestFilter) GetKind() string { + return "Tests" +} + +type Test struct { + Path string `json:"path" yaml:"path"` + Command string `json:"command" yaml:"command"` + ProxyPort uint32 `json:"proxyport" yaml:"proxyport"` + ContainerName string `json:"containerName" yaml:"containerName"` + NetworkName string `json:"networkName" yaml:"networkName"` + SelectedTests map[string][]string `json:"selectedTests" yaml:"selectedTests"` + GlobalNoise Globalnoise `json:"globalNoise" yaml:"globalNoise"` + Delay uint64 `json:"delay" yaml:"delay"` + BuildDelay time.Duration `json:"buildDelay" yaml:"buildDelay"` + APITimeout uint64 `json:"apiTimeout" yaml:"apiTimeout"` + PassThroughPorts []uint `json:"passThroughPorts" yaml:"passThroughPorts"` + BypassEndpointsRegistry []string `json:"bypassEndpointsRegistry" yaml:"bypassEndpointsRegistry"` + WithCoverage bool `json:"withCoverage" yaml:"withCoverage"` // boolean to capture the coverage in test + CoverageReportPath string `json:"coverageReportPath" yaml:"coverageReportPath"` // directory path to store the coverage files + IgnoreOrdering bool `json:"ignoreOrdering" yaml:"ignoreOrdering"` + Stubs Stubs `json:"stubs" yaml:"stubs"` +} + +type Globalnoise struct { + Global GlobalNoise `json:"global" yaml:"global"` + Testsets TestsetNoise `json:"test-sets" yaml:"test-sets"` +} + +type ( + Noise map[string][]string + GlobalNoise map[string]map[string][]string + TestsetNoise map[string]map[string]map[string][]string +) diff --git a/pkg/models/const.go b/pkg/models/const.go new file mode 100755 index 000000000..fa974f533 --- /dev/null +++ b/pkg/models/const.go @@ -0,0 +1,197 @@ +package models + +import ( + "time" + + "github.com/fatih/color" + "github.com/k0kubun/pp/v3" +) + +// Patterns for different usecases in keploy +const ( + NoSQLDB string = "NO_SQL_DB" + SQLDB string = "SQL_DB" + GRPC string = "GRPC" + HTTPClient string = "HTTP_CLIENT" + TestSetPattern string = "test-set-" + String string = "string" + TestRunTemplateName string = "test-run-" +) + +var ( + PassThroughHosts = []string{"^dc\\.services\\.visualstudio\\.com$"} +) + +var orangeColorSGR = []color.Attribute{38, 5, 208} + +var BaseTime = time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) + +var HighlightString = color.New(orangeColorSGR...).SprintFunc() +var HighlightPassingString = color.New(color.FgGreen).SprintFunc() +var HighlightFailingString = color.New(color.FgRed).SprintFunc() +var HighlightGrayString = color.New(color.FgHiBlack).SprintFunc() + +var PassingColorScheme = pp.ColorScheme{ + String: pp.Green, + StringQuotation: pp.Green | pp.Bold, + FieldName: pp.White, + Integer: pp.Blue | pp.Bold, + StructName: pp.NoColor, + Bool: pp.Cyan | pp.Bold, + Float: pp.Magenta | pp.Bold, + EscapedChar: pp.Magenta | pp.Bold, + PointerAdress: pp.Blue | pp.Bold, + Nil: pp.Cyan | pp.Bold, + Time: pp.Blue | pp.Bold, + ObjectLength: pp.Blue, +} + +var FailingColorScheme = pp.ColorScheme{ + Bool: pp.Cyan | pp.Bold, + Integer: pp.Blue | pp.Bold, + Float: pp.Magenta | pp.Bold, + String: pp.Red, + StringQuotation: pp.Red | pp.Bold, + EscapedChar: pp.Magenta | pp.Bold, + FieldName: pp.Yellow, + PointerAdress: pp.Blue | pp.Bold, + Nil: pp.Cyan | pp.Bold, + Time: pp.Blue | pp.Bold, + StructName: pp.White, + ObjectLength: pp.Blue, +} + +// MySQL constants +const ( + TypeDecimal byte = 0x00 + TypeTiny byte = 0x01 + TypeShort byte = 0x02 + TypeLong byte = 0x03 + TypeFloat byte = 0x04 + TypeDouble byte = 0x05 + TypeNull byte = 0x06 + TypeTimestamp byte = 0x07 + TypeLongLong byte = 0x08 + TypeInt24 byte = 0x09 + TypeDate byte = 0x0a + TypeTime byte = 0x0b + TypeDateTime byte = 0x0c + TypeYear byte = 0x0d + TypeNewDate byte = 0x0e + TypeVarChar byte = 0x0f + TypeBit byte = 0x10 + TypeNewDecimal byte = 0xf6 + TypeEnum byte = 0xf7 + TypeSet byte = 0xf8 + TypeTinyBlob byte = 0xf9 + TypeMediumBlob byte = 0xfa + TypeLongBlob byte = 0xfb + TypeBlob byte = 0xfc + TypeVarString byte = 0xfd + TypeString byte = 0xfe + TypeGeometry byte = 0xff +) + +// MySQL constants +const ( + HeaderSize = 1024 + OKPacketResulSet = 0x00 + EOFPacketResultSet = 0xfe + LengthEncodedInt = 0xfb +) + +// MySQL constants +const ( + OK = 0x00 + ERR = 0xff + LocalInFile = 0xfb + EOF byte = 0xfe +) + +// MySQL constants +const ( + AuthMoreData byte = 0x01 + CachingSha2PasswordRequestPublicKey byte = 2 + CachingSha2PasswordFastAuthSuccess byte = 3 + CachingSha2PasswordPerformFullAuthentication byte = 4 +) + +// MySQL constants +const ( + MaxPacketSize = 1<<24 - 1 +) + +type CapabilityFlags uint32 + +// MySQL constants +const ( + CLIENT_LONG_PASSWORD CapabilityFlags = 1 << iota + CLIENT_FOUND_ROWS + CLIENT_LONG_FLAG + CLIENT_CONNECT_WITH_DB + CLIENT_NO_SCHEMA + CLIENT_COMPRESS + CLIENT_ODBC + CLIENT_LOCAL_FILES + CLIENT_IGNORE_SPACE + CLIENT_PROTOCOL_41 + CLIENT_INTERACTIVE + CLIENT_SSL = 0x00000800 + CLIENT_IGNORE_SIGPIPE + CLIENT_TRANSACTIONS + CLIENT_RESERVED + CLIENT_SECURE_CONNECTION + CLIENT_MULTI_STATEMENTS = 1 << (iota + 2) + CLIENT_MULTI_RESULTS + CLIENT_PS_MULTI_RESULTS + CLIENT_PLUGIN_AUTH + CLIENT_CONNECT_ATTRS + CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA + CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS + CLIENT_SESSION_TRACK + CLIENT_DEPRECATE_EOF +) + +type FieldType byte + +// MySQL constants +const ( + FieldTypeDecimal FieldType = iota + FieldTypeTiny + FieldTypeShort + FieldTypeLong + FieldTypeFloat + FieldTypeDouble + FieldTypeNULL + FieldTypeTimestamp + FieldTypeLongLong + FieldTypeInt24 + FieldTypeDate + FieldTypeTime + FieldTypeDateTime + FieldTypeYear + FieldTypeNewDate + FieldTypeVarChar + FieldTypeBit +) + +// MySQL constants +const ( + FieldTypeJSON FieldType = iota + 0xf5 + FieldTypeNewDecimal + FieldTypeEnum + FieldTypeSet + FieldTypeTinyBLOB + FieldTypeMediumBLOB + FieldTypeLongBLOB + FieldTypeBLOB + FieldTypeVarString + FieldTypeString + FieldTypeGeometry +) + +type contextKey string + +const ErrGroupKey contextKey = "errGroup" +const ClientConnectionIDKey contextKey = "clientConnectionId" +const DestConnectionIDKey contextKey = "destConnectionId" diff --git a/pkg/models/dep.go b/pkg/models/dep.go deleted file mode 100644 index 263b2f76b..000000000 --- a/pkg/models/dep.go +++ /dev/null @@ -1,17 +0,0 @@ -package models - -type Dependency struct { - Name string `json:"name" bson:"name,omitempty"` - Type DependencyType `json:"type" bson:"type,omitempty"` - Meta map[string]string `json:"meta" bson:"meta,omitempty"` - Data [][]byte `json:"data" bson:"data,omitempty"` -} - -type DependencyType string - -const ( - NoSqlDB DependencyType = "NO_SQL_DB" - SqlDB DependencyType = "SQL_DB" - GRPC DependencyType = "GRPC" - HttpClient DependencyType = "HTTP_CLIENT" -) diff --git a/pkg/models/errors.go b/pkg/models/errors.go new file mode 100644 index 000000000..a43a856c3 --- /dev/null +++ b/pkg/models/errors.go @@ -0,0 +1,26 @@ +package models + +import "fmt" + +type AppError struct { + AppErrorType AppErrorType + Err error +} + +type AppErrorType string + +func (e AppError) Error() string { + if e.Err != nil { + return fmt.Sprintf("%s: %v", e.AppErrorType, e.Err) + } + return string(e.AppErrorType) +} + +// AppErrorType is a type of error that can be returned by the application +const ( + ErrCommandError AppErrorType = "exited due to command error" + ErrUnExpected AppErrorType = "an unexpected error occurred" + ErrInternal AppErrorType = "an internal error occurred" + ErrAppStopped AppErrorType = "app stopped" + ErrCtxCanceled AppErrorType = "context canceled" +) diff --git a/pkg/models/frame.go b/pkg/models/frame.go new file mode 100644 index 000000000..9af593d4a --- /dev/null +++ b/pkg/models/frame.go @@ -0,0 +1,12 @@ +package models + +type Frame struct { + Version Version `json:"version" yaml:"version"` + Kind Kind `json:"kind" yaml:"kind"` + Name string `json:"name" yaml:"name"` + Spec interface{} `json:"spec" yaml:"spec"` + Curl string `json:"curl" yaml:"curl,omitempty"` +} + +type Spec struct { +} diff --git a/pkg/models/generic.go b/pkg/models/generic.go new file mode 100644 index 000000000..478fe3e93 --- /dev/null +++ b/pkg/models/generic.go @@ -0,0 +1,13 @@ +package models + +import ( + "time" +) + +type GenericSchema struct { + Metadata map[string]string `json:"metadata" yaml:"metadata"` + GenericRequests []GenericPayload `json:"RequestBin,omitempty"` + GenericResponses []GenericPayload `json:"ResponseBin,omitempty"` + ReqTimestampMock time.Time `json:"reqTimestampMock,omitempty"` + ResTimestampMock time.Time `json:"resTimestampMock,omitempty"` +} diff --git a/pkg/models/grpc.go b/pkg/models/grpc.go new file mode 100644 index 000000000..0d9824fa4 --- /dev/null +++ b/pkg/models/grpc.go @@ -0,0 +1,64 @@ +package models + +import ( + "time" +) + +type GrpcSpec struct { + GrpcReq GrpcReq `json:"grpcReq" yaml:"grpcReq"` + GrpcResp GrpcResp `json:"grpcResp" yaml:"grpcResp"` + ReqTimestampMock time.Time `json:"reqTimestampMock" yaml:"reqTimestampMock,omitempty"` + ResTimestampMock time.Time `json:"resTimestampMock" yaml:"resTimestampMock,omitempty"` +} + +type GrpcHeaders struct { + PseudoHeaders map[string]string `json:"pseudo_headers" yaml:"pseudo_headers"` + OrdinaryHeaders map[string]string `json:"ordinary_headers" yaml:"ordinary_headers"` +} + +type GrpcLengthPrefixedMessage struct { + CompressionFlag uint `json:"compression_flag" yaml:"compression_flag"` + MessageLength uint32 `json:"message_length" yaml:"message_length"` + DecodedData string `json:"decoded_data" yaml:"decoded_data"` +} + +type GrpcReq struct { + Headers GrpcHeaders `json:"headers" yaml:"headers"` + Body GrpcLengthPrefixedMessage `json:"body" yaml:"body"` +} + +type GrpcResp struct { + Headers GrpcHeaders `json:"headers" yaml:"headers"` + Body GrpcLengthPrefixedMessage `json:"body" yaml:"body"` + Trailers GrpcHeaders `json:"trailers" yaml:"trailers"` +} + +// GrpcStream is a helper function to combine the request-response model in a single struct. +type GrpcStream struct { + StreamID uint32 + GrpcReq GrpcReq + GrpcResp GrpcResp +} + +// NewGrpcStream returns a GrpcStream with all the nested maps initialised. +func NewGrpcStream(streamID uint32) GrpcStream { + return GrpcStream{ + StreamID: streamID, + GrpcReq: GrpcReq{ + Headers: GrpcHeaders{ + PseudoHeaders: make(map[string]string), + OrdinaryHeaders: make(map[string]string), + }, + }, + GrpcResp: GrpcResp{ + Headers: GrpcHeaders{ + PseudoHeaders: make(map[string]string), + OrdinaryHeaders: make(map[string]string), + }, + Trailers: GrpcHeaders{ + PseudoHeaders: make(map[string]string), + OrdinaryHeaders: make(map[string]string), + }, + }, + } +} diff --git a/pkg/models/http.go b/pkg/models/http.go old mode 100644 new mode 100755 index 84503d753..b335fe7e3 --- a/pkg/models/http.go +++ b/pkg/models/http.go @@ -1,38 +1,48 @@ package models -import "net/http" +import ( + "time" +) + +type Method string -type HttpReq struct { - Method Method `json:"method" bson:"method,omitempty" yaml:"method"` - ProtoMajor int `json:"proto_major" bson:"proto_major,omitempty" yaml:"proto_major"` // e.g. 1 - ProtoMinor int `json:"proto_minor" bson:"proto_minor,omitempty" yaml:"proto_minor"` // e.g. 0 - URL string `json:"url" bson:"url,omitempty" yaml:"url"` - URLParams map[string]string `json:"url_params" bson:"url_params,omitempty" yaml:"url_params,omitempty"` - Header http.Header `json:"header" bson:"header,omitempty" yaml:"headers"` - Body string `json:"body" bson:"body,omitempty" yaml:"body"` - Binary string `json:"binary" bson:"binary,omitempty" yaml:"binary,omitempty"` - Form []FormData `json:"form" bson:"form,omitempty" yaml:"form,omitempty"` +type HTTPReq struct { + Method Method `json:"method" yaml:"method"` + ProtoMajor int `json:"proto_major" yaml:"proto_major"` // e.g. 1 + ProtoMinor int `json:"proto_minor" yaml:"proto_minor"` // e.g. 0 + URL string `json:"url" yaml:"url"` + URLParams map[string]string `json:"url_params" yaml:"url_params,omitempty"` + Header map[string]string `json:"header" yaml:"header"` + Body string `json:"body" yaml:"body"` + Binary string `json:"binary" yaml:"binary,omitempty"` + Form []FormData `json:"form" yaml:"form,omitempty"` + Timestamp time.Time `json:"timestamp" yaml:"timestamp"` } -type HttpResp struct { - StatusCode int `json:"status_code" bson:"status_code,omitempty" yaml:"status_code"` // e.g. 200 - Header http.Header `json:"header" bson:"header,omitempty" yaml:"headers"` - Body string `json:"body" bson:"body,omitempty" yaml:"body"` - StatusMessage string `json:"status_message" yaml:"status_message"` - ProtoMajor int `json:"proto_major" yaml:"proto_major"` - ProtoMinor int `json:"proto_minor" yaml:"proto_minor"` - Binary string `json:"binary" bson:"binary,omitempty" yaml:"binary,omitempty"` +type HTTPSchema struct { + Metadata map[string]string `json:"metadata" yaml:"metadata"` + Request HTTPReq `json:"req" yaml:"req"` + Response HTTPResp `json:"resp" yaml:"resp"` + Objects []*OutputBinary `json:"objects" yaml:"objects"` + Assertions map[string]interface{} `json:"assertions" yaml:"assertions,omitempty"` + Created int64 `json:"created" yaml:"created,omitempty"` + ReqTimestampMock time.Time `json:"reqTimestampMock" yaml:"reqTimestampMock,omitempty"` + ResTimestampMock time.Time `json:"resTimestampMock" yaml:"resTimestampMock,omitempty"` } -type Method string +type FormData struct { + Key string `json:"key" bson:"key" yaml:"key"` + Values []string `json:"values" bson:"values,omitempty" yaml:"values,omitempty"` + Paths []string `json:"paths" bson:"paths,omitempty" yaml:"paths,omitempty"` +} -const ( - MethodGet Method = "GET" - MethodPut = "PUT" - MethodHead = "HEAD" - MethodPost = "POST" - MethodPatch = "PATCH" // RFC 5789 - MethodDelete = "DELETE" - MethodOptions = "OPTIONS" - MethodTrace = "TRACE" -) +type HTTPResp struct { + StatusCode int `json:"status_code" yaml:"status_code"` // e.g. 200 + Header map[string]string `json:"header" yaml:"header"` + Body string `json:"body" yaml:"body"` + StatusMessage string `json:"status_message" yaml:"status_message"` + ProtoMajor int `json:"proto_major" yaml:"proto_major"` + ProtoMinor int `json:"proto_minor" yaml:"proto_minor"` + Binary string `json:"binary" yaml:"binary,omitempty"` + Timestamp time.Time `json:"timestamp" yaml:"timestamp"` +} diff --git a/pkg/models/instrument.go b/pkg/models/instrument.go new file mode 100644 index 000000000..19a99f0db --- /dev/null +++ b/pkg/models/instrument.go @@ -0,0 +1,32 @@ +package models + +import ( + "time" + + "go.keploy.io/server/v2/config" +) + +type HookOptions struct { + Mode Mode +} + +type OutgoingOptions struct { + Rules []config.BypassRule + MongoPassword string + // TODO: role of SQLDelay should be mentioned in the comments. + SQLDelay time.Duration // This is the same as Application delay. +} + +type IncomingOptions struct { + //Filters []config.Filter +} + +type SetupOptions struct { + Container string + DockerNetwork string + DockerDelay time.Duration +} + +type RunOptions struct { + //IgnoreErrors bool +} diff --git a/pkg/models/logs-color.go b/pkg/models/logs-color.go deleted file mode 100644 index eb931a282..000000000 --- a/pkg/models/logs-color.go +++ /dev/null @@ -1,33 +0,0 @@ -package models - -import "github.com/k0kubun/pp/v3" - -var PassingColorScheme = pp.ColorScheme{ - String: pp.Green, - StringQuotation: pp.Green | pp.Bold, - FieldName: pp.White, - Integer: pp.Blue | pp.Bold, - StructName: pp.NoColor, - Bool: pp.Cyan | pp.Bold, - Float: pp.Magenta | pp.Bold, - EscapedChar: pp.Magenta | pp.Bold, - PointerAdress: pp.Blue | pp.Bold, - Nil: pp.Cyan | pp.Bold, - Time: pp.Blue | pp.Bold, - ObjectLength: pp.Blue, -} - -var FailingColorScheme = pp.ColorScheme{ - Bool: pp.Cyan | pp.Bold, - Integer: pp.Blue | pp.Bold, - Float: pp.Magenta | pp.Bold, - String: pp.Red, - StringQuotation: pp.Red | pp.Bold, - EscapedChar: pp.Magenta | pp.Bold, - FieldName: pp.Yellow, - PointerAdress: pp.Blue | pp.Bold, - Nil: pp.Cyan | pp.Bold, - Time: pp.Blue | pp.Bold, - StructName: pp.White, - ObjectLength: pp.Blue, -} diff --git a/pkg/models/mock.go b/pkg/models/mock.go old mode 100644 new mode 100755 index 5bebc882f..7de8bdd84 --- a/pkg/models/mock.go +++ b/pkg/models/mock.go @@ -1,139 +1,60 @@ package models -import ( - "context" - - "gopkg.in/yaml.v3" -) - -type Kind string - -const ( - V1Beta1 Version = Version("api.keploy.io/v1beta1") - V1Beta2 Version = Version("api.keploy.io/v1beta2") -) - -type Version string - -const ( - HTTP Kind = "Http" - GENERIC Kind = "Generic" - SQL Kind = "SQL" - GRPC_EXPORT Kind = "gRPC" - BodyTypeUtf8 BodyType = "utf-8" - BodyTypeBinary BodyType = "binary" -) +import "time" type Mock struct { - Version Version `json:"version" yaml:"version"` - Kind Kind `json:"kind" yaml:"kind"` - Name string `json:"name" yaml:"name"` - Spec yaml.Node `json:"spec" yaml:"spec"` -} - -type GrpcSpec struct { - Metadata map[string]string `json:"metadata" yaml:"metadata"` - Request GrpcReq `json:"grpc_req" yaml:"grpc_req"` - Response GrpcResp `json:"grpc_resp" yaml:"grpc_resp"` - Objects []Object `json:"objects" yaml:"objects"` - Mocks []string `json:"mocks" yaml:"mocks,omitempty"` - Assertions map[string][]string `json:"assertions" yaml:"assertions,omitempty"` - Created int64 `json:"created" yaml:"created,omitempty"` -} - -type GrpcReq struct { - Body string `json:"body" yaml:"body" bson:"body"` - Method string `json:"method" yaml:"method" bson:"method"` -} - -type GrpcResp struct { - Body string `json:"body" yaml:"body" bson:"body"` - Err string `json:"error" yaml:"error" bson:"error"` -} - -type GenericSpec struct { - Metadata map[string]string `json:"metadata" yaml:"metadata"` - Objects []Object `json:"objects" yaml:"objects"` -} - -type Object struct { - Type string `json:"type" yaml:"type"` - Data string `json:"data" yaml:"data"` -} - -type HttpSpec struct { - Metadata map[string]string `json:"metadata" yaml:"metadata"` - Request MockHttpReq `json:"req" yaml:"req"` - Response MockHttpResp `json:"resp" yaml:"resp"` - Objects []Object `json:"objects" yaml:"objects"` - Mocks []string `json:"mocks" yaml:"mocks,omitempty"` - Assertions map[string][]string `json:"assertions" yaml:"assertions,omitempty"` - Created int64 `json:"created" yaml:"created,omitempty"` -} - -type MockHttpReq struct { - Method Method `json:"method" yaml:"method"` - ProtoMajor int `json:"proto_major" yaml:"proto_major"` // e.g. 1 - ProtoMinor int `json:"proto_minor" yaml:"proto_minor"` // e.g. 0 - URL string `json:"url" yaml:"url"` - URLParams map[string]string `json:"url_params" yaml:"url_params,omitempty"` - Header map[string]string `json:"header" yaml:"header"` - Body string `json:"body" yaml:"body"` - BodyType string `json:"body_type" yaml:"body_type"` - Binary string `json:"binary" yaml:"binary,omitempty"` - Form []FormData `json:"form" yaml:"form,omitempty"` -} - -type FormData struct { - Key string `json:"key" bson:"key" yaml:"key"` - Values []string `json:"values" bson:"values,omitempty" yaml:"values,omitempty"` - Paths []string `json:"paths" bson:"paths,omitempty" yaml:"paths,omitempty"` + Version Version `json:"Version,omitempty" bson:"Version,omitempty"` + Name string `json:"Name,omitempty" bson:"Name,omitempty"` + Kind Kind `json:"Kind,omitempty" bson:"Kind,omitempty"` + Spec MockSpec `json:"Spec,omitempty" bson:"Spec,omitempty"` + TestModeInfo TestModeInfo `json:"TestModeInfo,omitempty" bson:"TestModeInfo,omitempty"` // Map for additional test mode information + ConnectionID string `json:"ConnectionId,omitempty" bson:"ConnectionId,omitempty"` } -type MockHttpResp struct { - StatusCode int `json:"status_code" yaml:"status_code"` // e.g. 200 - Header map[string]string `json:"header" yaml:"header"` - Body string `json:"body" yaml:"body"` - BodyType string `json:"body_type" yaml:"body_type"` - StatusMessage string `json:"status_message" yaml:"status_message"` - ProtoMajor int `json:"proto_major" yaml:"proto_major"` - ProtoMinor int `json:"proto_minor" yaml:"proto_minor"` - Binary string `json:"binary" yaml:"binary,omitempty"` +type TestModeInfo struct { + ID int `json:"Id,omitempty" bson:"Id,omitempty"` + IsFiltered bool `json:"isFiltered,omitempty" bson:"isFiltered,omitempty"` + SortOrder int `json:"sortOrder,omitempty" bson:"SortOrder,omitempty"` } -type SQlSpec struct { - Metadata map[string]string `json:"metadata" yaml:"metadata"` - Type SqlOutputType `json:"type" yaml:"type"` // eg - POST : save data (TABLE) or number of rows affected (INT) - Table Table `json:"table" yaml:"table,omitempty"` - Int int `json:"int" yaml:"int"` - Err []string `json:"error" yaml:"error",omitempty` +func (m *Mock) GetKind() string { + return string(m.Kind) } -type Table struct { - Cols []SqlCol `json:"cols" yaml:"cols"` - Rows []string `json:"rows" yaml:"rows"` +type MockSpec struct { + Metadata map[string]string `json:"Metadata,omitempty" bson:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + GenericRequests []GenericPayload `json:"RequestBin,omitempty" bson:"generic_requests,omitempty"` + GenericResponses []GenericPayload `json:"ResponseBin,omitempty" bson:"generic_responses,omitempty"` + HTTPReq *HTTPReq `json:"Req,omitempty" bson:"http_req,omitempty"` + HTTPResp *HTTPResp `json:"Res,omitempty" bson:"http_resp,omitempty"` + Created int64 `json:"Created,omitempty" bson:"created,omitempty"` + MongoRequests []MongoRequest `json:"MongoRequests,omitempty" bson:"mongo_requests,omitempty"` + MongoResponses []MongoResponse `json:"MongoResponses,omitempty" bson:"mongo_responses,omitempty"` + PostgresRequests []Backend `json:"postgresRequests,omitempty" bson:"postgres_requests,omitempty"` + PostgresResponses []Frontend `json:"postgresResponses,omitempty" bson:"postgres_responses,omitempty"` + GRPCReq *GrpcReq `json:"gRPCRequest,omitempty" bson:"grpc_req,omitempty"` + GRPCResp *GrpcResp `json:"grpcResponse,omitempty" bson:"grpc_resp,omitempty"` + MySQLRequests []MySQLRequest `json:"MySqlRequests,omitempty" bson:"my_sql_requests,omitempty"` + MySQLResponses []MySQLResponse `json:"MySqlResponses,omitempty" bson:"my_sql_responses,omitempty"` + ReqTimestampMock time.Time `json:"ReqTimestampMock,omitempty" bson:"req_timestamp_mock,omitempty"` + ResTimestampMock time.Time `json:"ResTimestampMock,omitempty" bson:"res_timestamp_mock,omitempty"` } -type SqlCol struct { - Name string `json:"name" yaml:"name"` - Type string `json:"type" yaml:"type"` - // optional fields - Precision int `json:"precision" yaml:"precision"` - Scale int `json:"scale" yaml:"scale"` +// OutputBinary store the encoded binary output of the egress calls as base64-encoded strings +type OutputBinary struct { + Type string `json:"type" bson:"type" yaml:"type"` + Data string `json:"data" bson:"data" yaml:"data"` } -type SqlOutputType string +type OriginType string +// constant for mock origin const ( - TableType SqlOutputType = "table" - IntType SqlOutputType = "int" - ErrType SqlOutputType = "error" + FromServer OriginType = "server" + FromClient OriginType = "client" ) -type MockFS interface { - ReadAll(ctx context.Context, testCasePath, mockPath, tcsType string) ([]TestCase, error) - Read(ctx context.Context, path, name string, libMode bool) ([]Mock, error) - Write(ctx context.Context, path string, doc Mock) error - WriteAll(ctx context.Context, path, fileName string, docs []Mock) error - Exists(ctx context.Context, path string) bool +type GenericPayload struct { + Origin OriginType `json:"Origin,omitempty" yaml:"origin" bson:"origin,omitempty"` + Message []OutputBinary `json:"Message,omitempty" yaml:"message" bson:"message,omitempty"` } diff --git a/pkg/models/mode.go b/pkg/models/mode.go new file mode 100755 index 000000000..ceb642b73 --- /dev/null +++ b/pkg/models/mode.go @@ -0,0 +1,52 @@ +package models + +import "errors" + +// Mode represents the mode at which the SDK is operating +// MODE_RECORD is for recording API calls to generate testcases +// MODE_TEST is for testing the application on previous recorded testcases +// MODE_OFF disables keploy SDK automatically from the application +type Mode string + +type KctxType string + +// constants for keploy mode +const ( + MODE_RECORD Mode = "record" + MODE_TEST Mode = "test" + MODE_OFF Mode = "off" + KCTX KctxType = "KeployContext" + KTime KctxType = "KeployTime" +) + +var ( + mode = MODE_OFF +) + +// Valid checks if the provided mode is valid +func (m Mode) Valid() bool { + if m == MODE_RECORD || m == MODE_TEST || m == MODE_OFF { + return true + } + return false +} + +// GetMode returns the mode of the keploy SDK +func GetMode() Mode { + return mode +} + +// SetTestMode sets the keploy SDK mode to MODE_TEST +func SetTestMode() { + _ = SetMode(MODE_TEST) +} + +// SetMode sets the keploy SDK mode +// error is returned if the mode is invalid +func SetMode(m Mode) error { + if !m.Valid() { + return errors.New("invalid mode: " + string(m)) + } + mode = m + return nil +} diff --git a/pkg/models/mongo.go b/pkg/models/mongo.go new file mode 100755 index 000000000..ce2db7741 --- /dev/null +++ b/pkg/models/mongo.go @@ -0,0 +1,285 @@ +package models + +import ( + "encoding/json" + "errors" + "time" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage" + "gopkg.in/yaml.v3" +) + +type MongoSpec struct { + Metadata map[string]string `json:"metadata" yaml:"metadata"` + Requests []RequestYaml `json:"requests" yaml:"requests"` + Response []ResponseYaml `json:"responses" yaml:"responses"` + CreatedAt int64 `json:"created" yaml:"created,omitempty"` + ReqTimestampMock time.Time `json:"reqTimestampMock" yaml:"reqTimestampMock,omitempty"` + ResTimestampMock time.Time `json:"resTimestampMock" yaml:"resTimestampMock,omitempty"` +} + +type RequestYaml struct { + Header *MongoHeader `json:"header,omitempty" yaml:"header"` + Message yaml.Node `json:"message,omitempty" yaml:"message"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty"` +} + +type ResponseYaml struct { + Header *MongoHeader `json:"header,omitempty" yaml:"header"` + Message yaml.Node `json:"message,omitempty" yaml:"message"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty"` +} + +type MongoOpMessage struct { + FlagBits int `json:"flagBits" yaml:"flagBits" bson:"flagBits"` + Sections []string `json:"sections" yaml:"sections" bson:"sections"` + Checksum int `json:"checksum" yaml:"checksum" bson:"checksum"` +} + +type MongoOpQuery struct { + Flags int32 `json:"flags" yaml:"flags" bson:"flags"` + FullCollectionName string `json:"collection_name" yaml:"collection_name" bson:"collection_name"` + NumberToSkip int32 `json:"number_to_skip" yaml:"number_to_skip" bson:"number_to_skip"` + NumberToReturn int32 `json:"number_to_return" yaml:"number_to_return" bson:"number_to_return"` + Query string `json:"query" yaml:"query" bson:"query"` + ReturnFieldsSelector string `json:"return_fields_selector" yaml:"return_fields_selector" bson:"return_fields_selector"` +} + +type MongoOpReply struct { + ResponseFlags int32 `json:"response_flags" yaml:"response_flags" bson:"response_flags"` + CursorID int64 `json:"cursor_id" yaml:"cursor_id" bson:"cursor_id"` + StartingFrom int32 `json:"starting_from" yaml:"starting_from" bson:"starting_from"` + NumberReturned int32 `json:"number_returned" yaml:"number_returned" bson:"number_returned"` + Documents []string `json:"documents" yaml:"documents" bson:"documents"` +} + +type MongoHeader struct { + Length int32 `json:"length" yaml:"length" bson:"length"` + RequestID int32 `json:"requestId" yaml:"requestId" bson:"request_id"` + ResponseTo int32 `json:"responseTo" yaml:"responseTo" bson:"response_to"` + Opcode wiremessage.OpCode `json:"Opcode" yaml:"Opcode" bson:"opcode"` +} + +type MongoRequest struct { + Header *MongoHeader `json:"header,omitempty" yaml:"header,omitempty" bson:"header,omitempty"` + Message interface{} `json:"message,omitempty" yaml:"message,omitempty" bson:"message,omitempty"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty" bson:"read_delay,omitempty"` +} + +// UnmarshalBSON implements bson.Unmarshaler for mongoRequests because of interface typeof field +func (mr *MongoRequest) UnmarshalBSON(data []byte) error { + + // duplicate struct to avoid infinite recursion + type MongoRequestAlias struct { + Header *MongoHeader `bson:"header,omitempty"` + Message bson.Raw `bson:"message,omitempty"` + ReadDelay int64 `bson:"read_delay,omitempty"` + } + var aux MongoRequestAlias + + if err := bson.Unmarshal(data, &aux); err != nil { + return err + } + + // assign the unmarshalled data to the original data + mr.Header = aux.Header + mr.ReadDelay = aux.ReadDelay + + // unmarshal the message into the correct type + switch mr.Header.Opcode { + case wiremessage.OpMsg: + var msg MongoOpMessage + if err := bson.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + case wiremessage.OpQuery: + var msg MongoOpQuery + if err := bson.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + default: + return errors.New("failed to unmarshal unknown opcode") + } + return nil +} + +// UnmarshalJSON implements json.Unmarshaler for mongoRequests because of interface typeof field +func (mr *MongoRequest) UnmarshalJSON(data []byte) error { + // duplicate struct to avoid infinite recursion + type MongoRequestAlias struct { + Header *MongoHeader `json:"header"` + Message json.RawMessage `json:"message"` + ReadDelay int64 `json:"read_delay"` + } + var aux MongoRequestAlias + + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + + // assign the unmarshalled data to the original data + mr.Header = aux.Header + mr.ReadDelay = aux.ReadDelay + + // unmarshal the message into the correct type + switch mr.Header.Opcode { + case wiremessage.OpMsg: + var msg MongoOpMessage + if err := json.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + case wiremessage.OpQuery: + var msg MongoOpQuery + if err := json.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + default: + return errors.New("failed to unmarshal unknown opcode") + } + + return nil +} + +// MarshalJSON implements json.Marshaler for mongoRequests because of interface typeof field +func (mr *MongoRequest) MarshalJSON() ([]byte, error) { + // duplicate struct to avoid infinite recursion + type MongoRequestAlias struct { + Header *MongoHeader `json:"header"` + Message json.RawMessage `json:"message"` + ReadDelay int64 `json:"read_delay"` + } + + aux := MongoRequestAlias{ + Header: mr.Header, + Message: json.RawMessage(nil), + ReadDelay: mr.ReadDelay, + } + + if mr.Message != nil { + // Marshal the message interface{} into JSON + msgJSON, err := json.Marshal(mr.Message) + if err != nil { + return nil, err + } + aux.Message = msgJSON + } + + return json.Marshal(aux) +} + +type MongoResponse struct { + Header *MongoHeader `json:"header,omitempty" yaml:"header,omitempty" bson:"header,omitempty"` + Message interface{} `json:"message,omitempty" yaml:"message,omitempty" bson:"message,omitempty"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty" bson:"read_delay,omitempty"` +} + +// UnmarshalBSON implements bson.Unmarshaler for mongoResponses because of interface typeof field +func (mr *MongoResponse) UnmarshalBSON(data []byte) error { + // duplicate struct to avoid infinite recursion + type MongoResponseAlias struct { + Header *MongoHeader `bson:"header,omitempty"` + Message bson.Raw `bson:"message,omitempty"` + ReadDelay int64 `bson:"read_delay,omitempty"` + } + var aux MongoResponseAlias + + if err := bson.Unmarshal(data, &aux); err != nil { + return err + } + + // assign the unmarshalled data to the original data + mr.Header = aux.Header + mr.ReadDelay = aux.ReadDelay + + // unmarshal the message into the correct type + switch mr.Header.Opcode { + case wiremessage.OpMsg: + var msg MongoOpMessage + if err := bson.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + case wiremessage.OpReply: + var msg MongoOpReply + if err := bson.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + default: + return errors.New("failed to unmarshal unknown opcode") + } + + return nil +} + +// UnmarshalJSON implements json.Unmarshaler for mongoResponses because of interface typeof field +func (mr *MongoResponse) UnmarshalJSON(data []byte) error { + // duplicate struct to avoid infinite recursion + type MongoResponseAlias struct { + Header *MongoHeader `json:"header"` + Message json.RawMessage `json:"message"` + ReadDelay int64 `json:"read_delay"` + } + var aux MongoResponseAlias + + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + + // assign the unmarshalled data to the original data + mr.Header = aux.Header + mr.ReadDelay = aux.ReadDelay + + // unmarshal the message into the correct type + switch mr.Header.Opcode { + case wiremessage.OpMsg: + var msg MongoOpMessage + if err := json.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + case wiremessage.OpReply: + var msg MongoOpReply + if err := json.Unmarshal(aux.Message, &msg); err != nil { + return err + } + mr.Message = &msg + default: + return errors.New("failed to unmarshal unknown opcode") + } + + return nil + +} + +// MarshalJSON implements json.Marshaler for mongoResponses because of interface typeof field +func (mr *MongoResponse) MarshalJSON() ([]byte, error) { + // duplicate struct to avoid infinite recursion + type MongoResponseAlias struct { + Header *MongoHeader `json:"header"` + Message json.RawMessage `json:"message"` + ReadDelay int64 `json:"read_delay"` + } + + aux := MongoResponseAlias{ + Header: mr.Header, + Message: json.RawMessage(nil), + ReadDelay: mr.ReadDelay, + } + + if mr.Message != nil { + // Marshal the message interface{} into JSON + msgJSON, err := json.Marshal(mr.Message) + if err != nil { + return nil, err + } + aux.Message = msgJSON + } + + return json.Marshal(aux) +} diff --git a/pkg/models/mysql.go b/pkg/models/mysql.go new file mode 100644 index 000000000..312a1361a --- /dev/null +++ b/pkg/models/mysql.go @@ -0,0 +1,223 @@ +package models + +import ( + "gopkg.in/yaml.v3" +) + +type MySQLSpec struct { + Metadata map[string]string `json:"metadata" yaml:"metadata"` + Requests []MysqlRequestYaml `json:"requests" yaml:"requests"` + Response []MysqlResponseYaml `json:"responses" yaml:"responses"` + CreatedAt int64 `json:"created" yaml:"created,omitempty"` +} + +type MysqlRequestYaml struct { + Header *MySQLPacketHeader `json:"header,omitempty" yaml:"header"` + Message yaml.Node `json:"message,omitempty" yaml:"message"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty"` +} + +type MysqlResponseYaml struct { + Header *MySQLPacketHeader `json:"header,omitempty" yaml:"header"` + Message yaml.Node `json:"message,omitempty" yaml:"message"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty"` +} + +type MySQLPacketHeader struct { + PacketLength uint32 `json:"packet_length,omitempty" yaml:"packet_length,omitempty,flow" bson:"packet_length,omitempty"` + PacketNumber uint8 `json:"packet_number,omitempty" yaml:"packet_number,omitempty,flow" bson:"packet_number,omitempty"` + PacketType string `json:"packet_type,omitempty" yaml:"packet_type,omitempty,flow" bson:"packet_type,omitempty"` +} + +type MySQLRequest struct { + Header *MySQLPacketHeader `json:"header,omitempty" yaml:"header,omitempty,flow" bson:"header,omitempty"` + Message interface{} `json:"message,omitempty" yaml:"message,omitempty,flow" bson:"message,omitempty"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty,flow" bson:"read_delay,omitempty"` +} + +// func (mr *MySQLRequest) UnmarshalBSON(data []byte) error +// func (mr *MySQLRequest) UnmarshalJSON(data []byte) error +// func (mr *MySQLRequest) MarshalJSON() ([]byte, error) + +type RowColumnDefinition struct { + Type FieldType `json:"type,omitempty" yaml:"type,omitempty,flow" bson:"type,omitempty"` + Name string `json:"name,omitempty" yaml:"name,omitempty,flow" bson:"name,omitempty"` + Value interface{} `json:"value,omitempty" yaml:"value,omitempty,flow" bson:"value,omitempty"` +} + +// func (r *RowColumnDefinition) UnmarshalBSON(data []byte) error +// func (mr *RowColumnDefinition) UnmarshalJSON(data []byte) error +// func (mr *RowColumnDefinition) MarshalJSON() ([]byte, error) + +type MySQLResponse struct { + Header *MySQLPacketHeader `json:"header,omitempty" yaml:"header,omitempty,flow" bson:"header,omitempty"` + Message interface{} `json:"message,omitempty" yaml:"message,omitempty,flow" bson:"message,omitempty"` + ReadDelay int64 `json:"read_delay,omitempty" yaml:"read_delay,omitempty,flow" bson:"read_delay,omitempty"` +} + +// func (mr *MySQLResponse) UnmarshalBSON(data []byte) error +// func (mr *MySQLResponse) UnmarshalJSON(data []byte) error +// func (mr *MySQLResponse) MarshalJSON() ([]byte, error) + +type MySQLHandshakeV10Packet struct { + ProtocolVersion uint8 `json:"protocol_version,omitempty" yaml:"protocol_version,omitempty,flow" bson:"protocol_version,omitempty"` + ServerVersion string `json:"server_version,omitempty" yaml:"server_version,omitempty,flow" bson:"server_version,omitempty"` + ConnectionID uint32 `json:"connection_id,omitempty" yaml:"connection_id,omitempty,flow" bson:"connection_id,omitempty"` + AuthPluginData string `json:"auth_plugin_data,omitempty" yaml:"auth_plugin_data,omitempty,flow" bson:"auth_plugin_data,omitempty"` + CapabilityFlags uint32 `json:"capability_flags,omitempty" yaml:"capability_flags,omitempty,flow" bson:"capability_flags,omitempty"` + CharacterSet uint8 `json:"character_set,omitempty" yaml:"character_set,omitempty,flow" bson:"character_set,omitempty"` + StatusFlags uint16 `json:"status_flags,omitempty" yaml:"status_flags,omitempty,flow" bson:"status_flags,omitempty"` + AuthPluginName string `json:"auth_plugin_name,omitempty" yaml:"auth_plugin_name,omitempty,flow" bson:"auth_plugin_name,omitempty"` +} + +type PluginDetails struct { + Type string `json:"type,omitempty" yaml:"type,omitempty,flow" bson:"type,omitempty"` + Message string `json:"message,omitempty" yaml:"message,omitempty,flow" bson:"message,omitempty"` +} + +type MySQLHandshakeResponseOk struct { + PacketIndicator string `json:"packet_indicator,omitempty" yaml:"packet_indicator,omitempty,flow" bson:"packet_indicator,omitempty"` + PluginDetails PluginDetails `json:"plugin_details,omitempty" yaml:"plugin_details,omitempty,flow" bson:"plugin_details,omitempty"` + RemainingBytes string `json:"remaining_bytes,omitempty" yaml:"remaining_bytes,omitempty,flow" bson:"remaining_bytes,omitempty"` +} + +type MySQLHandshakeResponse struct { + CapabilityFlags uint32 `json:"capability_flags,omitempty" yaml:"capability_flags,omitempty,flow" bson:"capability_flags,omitempty"` + MaxPacketSize uint32 `json:"max_packet_size,omitempty" yaml:"max_packet_size,omitempty,flow" bson:"max_packet_size,omitempty"` + CharacterSet uint8 `json:"character_set,omitempty" yaml:"character_set,omitempty,flow" bson:"character_set,omitempty"` + Reserved int `json:"reserved,omitempty" yaml:"reserved,omitempty,flow" bson:"reserved,omitempty"` + Username string `json:"username,omitempty" yaml:"username,omitempty,flow" bson:"username,omitempty"` + AuthData string `json:"auth_data,omitempty" yaml:"auth_data,omitempty,flow" bson:"auth_data,omitempty"` + Database string `json:"database,omitempty" yaml:"database,omitempty,flow" bson:"database,omitempty"` + AuthPluginName string `json:"auth_plugin_name,omitempty" yaml:"auth_plugin_name,omitempty,flow" bson:"auth_plugin_name,omitempty"` +} + +type MySQLQueryPacket struct { + Command byte `json:"command,omitempty" yaml:"command,omitempty,flow" bson:"command,omitempty"` + Query string `json:"query,omitempty" yaml:"query,omitempty,flow" bson:"query,omitempty"` +} + +type MySQLComStmtExecute struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow" bson:"statement_id,omitempty"` + Flags byte `json:"flags,omitempty" yaml:"flags,omitempty,flow" bson:"flags,omitempty"` + IterationCount uint32 `json:"iteration_count,omitempty" yaml:"iteration_count,omitempty,flow" bson:"iteration_count,omitempty"` + NullBitmap string `json:"null_bitmap,omitempty" yaml:"null_bitmap,omitempty,flow" bson:"null_bitmap,omitempty"` + ParamCount uint16 `json:"param_count,omitempty" yaml:"param_count,omitempty,flow" bson:"param_count,omitempty"` + Parameters []BoundParameter `json:"parameters,omitempty" yaml:"parameters,omitempty,flow" bson:"parameters,omitempty"` +} + +type BoundParameter struct { + Type byte `json:"type,omitempty" yaml:"type,omitempty,flow" bson:"type,omitempty"` + Unsigned byte `json:"unsigned,omitempty" yaml:"unsigned,omitempty,flow" bson:"unsigned,omitempty"` + Value []byte `json:"value,omitempty" yaml:"value,omitempty,flow" bson:"value,omitempty"` +} + +type MySQLStmtPrepareOk struct { + Status byte `json:"status,omitempty" yaml:"status,omitempty,flow" bson:"status,omitempty"` + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow" bson:"statement_id,omitempty"` + NumColumns uint16 `json:"num_columns,omitempty" yaml:"num_columns,omitempty,flow" bson:"num_columns,omitempty"` + NumParams uint16 `json:"num_params,omitempty" yaml:"num_params,omitempty,flow" bson:"num_params,omitempty"` + WarningCount uint16 `json:"warning_count,omitempty" yaml:"warning_count,omitempty,flow" bson:"warning_count,omitempty"` + ColumnDefs []ColumnDefinition `json:"column_definitions,omitempty" yaml:"column_definitions,omitempty,flow" bson:"column_definitions,omitempty"` + ParamDefs []ColumnDefinition `json:"param_definitions,omitempty" yaml:"param_definitions,omitempty,flow" bson:"param_definitions,omitempty"` +} +type MySQLResultSet struct { + Columns []*ColumnDefinition `json:"columns,omitempty" yaml:"columns,omitempty,flow" bson:"columns,omitempty"` + Rows []*Row `json:"rows,omitempty" yaml:"rows,omitempty,flow" bson:"rows,omitempty"` + EOFPresent bool `json:"eofPresent,omitempty" yaml:"eofPresent,omitempty,flow" bson:"eofPresent,omitempty"` + PaddingPresent bool `json:"paddingPresent,omitempty" yaml:"paddingPresent,omitempty,flow" bson:"paddingPresent,omitempty"` + EOFPresentFinal bool `json:"eofPresentFinal,omitempty" yaml:"eofPresentFinal,omitempty,flow" bson:"eofPresentFinal,omitempty"` + PaddingPresentFinal bool `json:"paddingPresentFinal,omitempty" yaml:"paddingPresentFinal,omitempty,flow" bson:"paddingPresentFinal,omitempty"` + OptionalPadding bool `json:"optionalPadding,omitempty" yaml:"optionalPadding,omitempty,flow" bson:"optionalPadding,omitempty"` + OptionalEOFBytes string `json:"optionalEOFBytes,omitempty" yaml:"optionalEOFBytes,omitempty,flow" bson:"optionalEOFBytes,omitempty"` + EOFAfterColumns string `json:"eofAfterColumns,omitempty" yaml:"eofAfterColumns,omitempty,flow" bson:"eofAfterColumns,omitempty"` +} + +type PacketHeader struct { + PacketLength uint32 `json:"packet_length,omitempty" yaml:"packet_length,omitempty,flow" bson:"packet_length,omitempty"` + PacketSequenceID uint8 `json:"packet_sequence_id,omitempty" yaml:"packet_sequence_id,omitempty,flow" bson:"packet_sequence_id,omitempty"` +} + +type RowHeader struct { + PacketLength uint8 `json:"packet_length,omitempty" yaml:"packet_length,omitempty,flow" bson:"packet_length,omitempty"` + PacketSequenceID uint8 `json:"packet_sequence_id,omitempty" yaml:"packet_sequence_id,omitempty,flow" bson:"packet_sequence_id,omitempty"` +} + +type ColumnDefinition struct { + Catalog string `json:"catalog,omitempty" yaml:"catalog,omitempty,flow" bson:"catalog,omitempty"` + Schema string `json:"schema,omitempty" yaml:"schema,omitempty,flow" bson:"schema,omitempty"` + Table string `json:"table,omitempty" yaml:"table,omitempty,flow" bson:"table,omitempty"` + OrgTable string `json:"org_table,omitempty" yaml:"org_table,omitempty,flow" bson:"org_table,omitempty"` + Name string `json:"name,omitempty" yaml:"name,omitempty,flow" bson:"name,omitempty"` + OrgName string `json:"org_name,omitempty" yaml:"org_name,omitempty,flow" bson:"org_name,omitempty"` + NextLength uint64 `json:"next_length,omitempty" yaml:"next_length,omitempty,flow" bson:"next_length,omitempty"` + CharacterSet uint16 `json:"character_set,omitempty" yaml:"character_set,omitempty,flow" bson:"character_set,omitempty"` + ColumnLength uint32 `json:"column_length,omitempty" yaml:"column_length,omitempty,flow" bson:"column_length,omitempty"` + ColumnType byte `json:"column_type,omitempty" yaml:"column_type,omitempty,flow" bson:"column_type,omitempty"` + Flags uint16 `json:"flags,omitempty" yaml:"flags,omitempty,flow" bson:"flags,omitempty"` + Decimals byte `json:"decimals,omitempty" yaml:"decimals,omitempty,flow" bson:"decimals,omitempty"` + PacketHeader PacketHeader `json:"packet_header,omitempty" yaml:"packet_header,omitempty,flow" bson:"packet_header,omitempty"` +} + +type Row struct { + Header RowHeader `json:"header,omitempty" yaml:"header,omitempty,flow" bson:"header,omitempty"` + Columns []RowColumnDefinition `json:"columns,omitempty" yaml:"columns,omitempty,flow" bson:"columns,omitempty"` +} + +type MySQLOKPacket struct { + AffectedRows uint64 `json:"affected_rows,omitempty" yaml:"affected_rows,omitempty,flow" bson:"affected_rows,omitempty"` + LastInsertID uint64 `json:"last_insert_id,omitempty" yaml:"last_insert_id,omitempty,flow" bson:"last_insert_id,omitempty"` + StatusFlags uint16 `json:"status_flags,omitempty" yaml:"status_flags,omitempty,flow" bson:"status_flags,omitempty"` + Warnings uint16 `json:"warnings,omitempty" yaml:"warnings,omitempty,flow" bson:"warnings,omitempty"` + Info string `json:"info,omitempty" yaml:"info,omitempty,flow" bson:"info,omitempty"` +} + +type MySQLERRPacket struct { + Header byte `json:"header,omitempty" yaml:"header,omitempty,flow" bson:"header,omitempty"` + ErrorCode uint16 `json:"error_code,omitempty" yaml:"error_code,omitempty,flow" bson:"error_code,omitempty"` + SQLStateMarker string `json:"sql_state_marker,omitempty" yaml:"sql_state_marker,omitempty,flow" bson:"sql_state_marker,omitempty"` + SQLState string `json:"sql_state,omitempty" yaml:"sql_state,omitempty,flow" bson:"sql_state,omitempty"` + ErrorMessage string `json:"error_message,omitempty" yaml:"error_message,omitempty,flow" bson:"error_message,omitempty"` +} + +type MySQLComStmtPreparePacket struct { + Query string `json:"query,omitempty" yaml:"query,omitempty,flow" bson:"query,omitempty"` +} + +type MySQLComStmtSendLongData struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow" bson:"statement_id,omitempty"` + ParameterID uint16 `json:"parameter_id,omitempty" yaml:"parameter_id,omitempty,flow" bson:"parameter_id,omitempty"` + Data string `json:"data,omitempty" yaml:"data,omitempty,flow" bson:"data,omitempty"` +} + +type MySQLcomStmtReset struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow" bson:"statement_id,omitempty"` +} + +type MySQLComStmtFetchPacket struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow" bson:"statement_id,omitempty"` + RowCount uint32 `json:"row_count,omitempty" yaml:"row_count,omitempty,flow" bson:"row_count,omitempty"` + Info string `json:"info,omitempty" yaml:"info,omitempty,flow" bson:"info,omitempty"` +} + +type MySQLComChangeUserPacket struct { + User string `json:"user,omitempty" yaml:"user,omitempty,flow" bson:"user,omitempty"` + Auth string `json:"auth,omitempty" yaml:"auth,omitempty,flow" bson:"auth,omitempty"` + Db string `json:"db,omitempty" yaml:"db,omitempty,flow" bson:"db,omitempty"` + CharacterSet uint8 `json:"character_set,omitempty" yaml:"character_set,omitempty,flow" bson:"character_set,omitempty"` + AuthPlugin string `json:"auth_plugin,omitempty" yaml:"auth_plugin,omitempty,flow" bson:"auth_plugin,omitempty"` +} + +type MySQLComStmtClosePacket struct { + StatementID uint32 `json:"statement_id,omitempty" yaml:"statement_id,omitempty,flow" bson:"statement_id,omitempty"` +} + +type AuthSwitchResponsePacket struct { + AuthResponseData string `json:"auth_response_data,omitempty" yaml:"auth_response_data,omitempty,flow" bson:"auth_response_data,omitempty"` +} + +type AuthSwitchRequestPacket struct { + StatusTag byte `json:"status_tag,omitempty" yaml:"status_tag,omitempty,flow" bson:"status_tag,omitempty"` + PluginName string `json:"plugin_name,omitempty" yaml:"plugin_name,omitempty,flow" bson:"plugin_name,omitempty"` + PluginAuthData string `json:"plugin_authdata,omitempty" yaml:"plugin_authdata,omitempty,flow" bson:"plugin_authdata,omitempty"` +} diff --git a/pkg/models/postgres.go b/pkg/models/postgres.go new file mode 100755 index 000000000..bb8306b07 --- /dev/null +++ b/pkg/models/postgres.go @@ -0,0 +1,114 @@ +package models + +import ( + "time" + + "github.com/jackc/pgproto3/v2" +) + +// ProtocolVersionNumber should be replaced with actual version number if different +const ProtocolVersionNumber uint32 = 196608 + +type PostgresSpec struct { + Metadata map[string]string `json:"metadata" yaml:"metadata"` + + // Objects []*models.OutputBinary `json:"objects" yaml:"objects"` + PostgresRequests []Backend `json:"RequestBin,omitempty"` + PostgresResponses []Frontend `json:"ResponseBin,omitempty"` + + ReqTimestampMock time.Time `json:"ReqTimestampMock,omitempty"` + ResTimestampMock time.Time `json:"ResTimestampMock,omitempty"` +} + +// Backend is PG Request Packet Transcoder +type Backend struct { + PacketTypes []string `json:"header,omitempty" yaml:"header,omitempty,flow"` + Identfier string `json:"identifier,omitempty" yaml:"identifier,omitempty"` + Length uint32 `json:"length,omitempty" yaml:"length,omitempty"` + Payload string `json:"payload,omitempty" yaml:"payload,omitempty"` + Bind pgproto3.Bind `yaml:"-"` + Binds []pgproto3.Bind `json:"bind,omitempty" yaml:"bind,omitempty"` + CancelRequest pgproto3.CancelRequest `json:"cancel_request,omitempty" yaml:"cancel_request,omitempty"` + Close pgproto3.Close `json:"close,omitempty" yaml:"close,omitempty"` + CopyFail pgproto3.CopyFail `json:"copy_fail,omitempty" yaml:"copy_fail,omitempty"` + CopyData pgproto3.CopyData `json:"copy_data,omitempty" yaml:"copy_data,omitempty"` + CopyDone pgproto3.CopyDone `json:"copy_done,omitempty" yaml:"copy_done,omitempty"` + Describe pgproto3.Describe `json:"describe,omitempty" yaml:"describe,omitempty"` + Execute pgproto3.Execute `yaml:"-"` + Executes []pgproto3.Execute `json:"execute,omitempty" yaml:"execute,omitempty"` + Flush pgproto3.Flush `json:"flush,omitempty" yaml:"flush,omitempty"` + FunctionCall pgproto3.FunctionCall `json:"function_call,omitempty" yaml:"function_call,omitempty"` + GssEncRequest pgproto3.GSSEncRequest `json:"gss_enc_request,omitempty" yaml:"gss_enc_request,omitempty"` + Parse pgproto3.Parse `yaml:"-"` + Parses []pgproto3.Parse `json:"parse,omitempty" yaml:"parse,omitempty"` + Query pgproto3.Query `json:"query,omitempty" yaml:"query,omitempty"` + SSlRequest pgproto3.SSLRequest `json:"ssl_request,omitempty" yaml:"ssl_request,omitempty"` + StartupMessage pgproto3.StartupMessage `json:"startup_message,omitempty" yaml:"startup_message,omitempty"` + Sync pgproto3.Sync `json:"sync,omitempty" yaml:"sync,omitempty"` + Terminate pgproto3.Terminate `json:"terminate,omitempty" yaml:"terminate,omitempty"` + SASLInitialResponse pgproto3.SASLInitialResponse `json:"sasl_initial_response,omitempty" yaml:"sasl_initial_response,omitempty"` + SASLResponse pgproto3.SASLResponse `json:"sasl_response,omitempty" yaml:"sasl_response,omitempty"` + PasswordMessage pgproto3.PasswordMessage `json:"password_message,omitempty" yaml:"password_message,omitempty"` + MsgType byte `json:"msg_type,omitempty" yaml:"msg_type,omitempty"` + PartialMsg bool `json:"partial_msg,omitempty" yaml:"partial_msg,omitempty"` + AuthType int32 `json:"auth_type" yaml:"auth_type"` + BodyLen int `json:"body_len,omitempty" yaml:"body_len,omitempty"` + // AuthMechanism string `json:"auth_mechanism,omitempty" yaml:"auth_mechanism,omitempty"` +} + +type Frontend struct { + PacketTypes []string `json:"header,omitempty" yaml:"header,omitempty,flow"` + Identfier string `json:"identifier,omitempty" yaml:"identifier,omitempty"` + Length uint32 `json:"length,omitempty" yaml:"length,omitempty"` + Payload string `json:"payload,omitempty" yaml:"payload,omitempty"` + AuthenticationOk pgproto3.AuthenticationOk `json:"authentication_ok,omitempty" yaml:"authentication_ok,omitempty"` + AuthenticationCleartextPassword pgproto3.AuthenticationCleartextPassword `json:"authentication_cleartext_password,omitempty" yaml:"authentication_cleartext_password,omitempty"` + AuthenticationMD5Password pgproto3.AuthenticationMD5Password `json:"authentication_md5_password,omitempty" yaml:"authentication_md5_password,omitempty"` + AuthenticationGSS pgproto3.AuthenticationGSS `json:"authentication_gss,omitempty" yaml:"authentication_gss,omitempty"` + AuthenticationGSSContinue pgproto3.AuthenticationGSSContinue `json:"authentication_gss_continue,omitempty" yaml:"authentication_gss_continue,omitempty"` + AuthenticationSASL pgproto3.AuthenticationSASL `json:"authentication_sasl,omitempty" yaml:"authentication_sasl,omitempty"` + AuthenticationSASLContinue pgproto3.AuthenticationSASLContinue `json:"authentication_sasl_continue,omitempty" yaml:"authentication_sasl_continue,omitempty,flow"` + AuthenticationSASLFinal pgproto3.AuthenticationSASLFinal `json:"authentication_sasl_final,omitempty" yaml:"authentication_sasl_final,omitempty,flow"` + BackendKeyData pgproto3.BackendKeyData `json:"backend_key_data,omitempty" yaml:"backend_key_data,omitempty"` + BindComplete pgproto3.BindComplete `yaml:"-"` + BindCompletes []pgproto3.BindComplete `json:"bind_complete,omitempty" yaml:"bind_complete,omitempty"` + CloseComplete pgproto3.CloseComplete `json:"close_complete,omitempty" yaml:"close_complete,omitempty"` + CommandComplete pgproto3.CommandComplete `yaml:"-"` + CommandCompletes []pgproto3.CommandComplete `json:"command_complete,omitempty" yaml:"command_complete,omitempty"` + CopyBothResponse pgproto3.CopyBothResponse `json:"copy_both_response,omitempty" yaml:"copy_both_response,omitempty"` + CopyData pgproto3.CopyData `json:"copy_data,omitempty" yaml:"copy_data,omitempty"` + CopyInResponse pgproto3.CopyInResponse `json:"copy_in_response,omitempty" yaml:"copy_in_response,omitempty"` + CopyOutResponse pgproto3.CopyOutResponse `json:"copy_out_response,omitempty" yaml:"copy_out_response,omitempty"` + CopyDone pgproto3.CopyDone `json:"copy_done,omitempty" yaml:"copy_done,omitempty"` + DataRow pgproto3.DataRow `yaml:"-"` + DataRows []pgproto3.DataRow `json:"data_row,omitempty" yaml:"data_row,omitempty,flow"` + EmptyQueryResponse pgproto3.EmptyQueryResponse `json:"empty_query_response,omitempty" yaml:"empty_query_response,omitempty"` + ErrorResponse pgproto3.ErrorResponse `json:"error_response,omitempty" yaml:"error_response,omitempty"` + FunctionCallResponse pgproto3.FunctionCallResponse `json:"function_call_response,omitempty" yaml:"function_call_response,omitempty"` + NoData pgproto3.NoData `json:"no_data,omitempty" yaml:"no_data,omitempty"` + NoticeResponse pgproto3.NoticeResponse `json:"notice_response,omitempty" yaml:"notice_response,omitempty"` + NotificationResponse pgproto3.NotificationResponse `json:"notification_response,omitempty" yaml:"notification_response,omitempty"` + ParameterDescription pgproto3.ParameterDescription `json:"parameter_description,omitempty" yaml:"parameter_description,omitempty"` + ParameterStatus pgproto3.ParameterStatus `yaml:"-"` + ParameterStatusCombined []pgproto3.ParameterStatus `json:"parameter_status,omitempty" yaml:"parameter_status,omitempty"` + ParseComplete pgproto3.ParseComplete `yaml:"-"` + ParseCompletes []pgproto3.ParseComplete `json:"parse_complete,omitempty" yaml:"parse_complete,omitempty"` + ReadyForQuery pgproto3.ReadyForQuery `json:"ready_for_query,omitempty" yaml:"ready_for_query,omitempty"` + RowDescription pgproto3.RowDescription `json:"row_description,omitempty" yaml:"row_description,omitempty,flow"` + PortalSuspended pgproto3.PortalSuspended `json:"portal_suspended,omitempty" yaml:"portal_suspended,omitempty"` + MsgType byte `json:"msg_type,omitempty" yaml:"msg_type,omitempty"` + AuthType int32 `json:"auth_type" yaml:"auth_type"` + // AuthMechanism string `json:"auth_mechanism,omitempty" yaml:"auth_mechanism,omitempty"` + BodyLen int `json:"body_len,omitempty" yaml:"body_len,omitempty"` +} + +type StartupPacket struct { + Length uint32 + ProtocolVersion uint32 +} + +type RegularPacket struct { + Identifier byte + Length uint32 + Payload []byte +} diff --git a/pkg/models/tc.go b/pkg/models/tc.go deleted file mode 100644 index 1bf1b74c1..000000000 --- a/pkg/models/tc.go +++ /dev/null @@ -1,103 +0,0 @@ -package models - -import ( - "context" - "errors" - "net/http" - "strings" - - proto "go.keploy.io/server/grpc/regression" -) - -type TestCase struct { - ID string `json:"id" bson:"_id"` - Created int64 `json:"created" bson:"created,omitempty"` - Updated int64 `json:"updated" bson:"updated,omitempty"` - Captured int64 `json:"captured" bson:"captured,omitempty"` - CID string `json:"cid" bson:"cid,omitempty"` - AppID string `json:"app_id" bson:"app_id,omitempty"` - URI string `json:"uri" bson:"uri,omitempty"` - // GrpcMethod string `json:"grpc_method" bson:"grpc_method,omitempty"` - HttpReq HttpReq `json:"http_req" bson:"http_req,omitempty"` - HttpResp HttpResp `json:"http_resp" bson:"http_resp,omitempty"` - GrpcReq GrpcReq `json:"grpc_req" bson:"grpc_req,omitempty"` - GrpcResp GrpcResp `json:"grpc_resp" bson:"grpc_resp,omitempty"` - Deps []Dependency `json:"deps" bson:"deps,omitempty"` - AllKeys map[string][]string `json:"all_keys" bson:"all_keys,omitempty"` - Anchors map[string][]string `json:"anchors" bson:"anchors,omitempty"` - Noise []string `json:"noise" bson:"noise,omitempty"` - Mocks []*proto.Mock `json:"mocks"` - Type string `json:"type" bson:"type,omitempty"` -} - -type TestCaseDB interface { - Upsert(context.Context, TestCase) error - UpdateTC(context.Context, TestCase) error - Get(ctx context.Context, cid, id string) (TestCase, error) - Delete(ctx context.Context, id string) error - GetAll(ctx context.Context, cid, app, tcsType string, anchors bool, offset int, limit int) ([]TestCase, error) - GetKeys(ctx context.Context, cid, app, uri, tcsType string) ([]TestCase, error) - //Exists(context.Context, TestCase) (bool, error) - DeleteByAnchor(ctx context.Context, cid, app, uri, tcsType string, filterKeys map[string][]string) error - GetApps(ctx context.Context, cid string) ([]string, error) -} - -// TestCaseReq is a struct for Http API request JSON body -type TestCaseReq struct { - Captured int64 `json:"captured" bson:"captured"` - AppID string `json:"app_id" bson:"app_id"` - URI string `json:"uri" bson:"uri"` - HttpReq HttpReq `json:"http_req" bson:"http_req"` - HttpResp HttpResp `json:"http_resp" bson:"http_resp"` - GrpcReq GrpcReq `json:"grpc_req" bson:"grpc_req"` - GrpcResp GrpcResp `json:"grpc_resp" bson:"grpc_resp"` - Deps []Dependency `json:"deps" bson:"deps"` - TestCasePath string `json:"test_case_path" bson:"test_case_path"` - MockPath string `json:"mock_path" bson:"mock_path"` - Mocks []*proto.Mock `json:"mocks" bson:"mocks"` - Type Kind `json:"type" bson:"type"` - Remove []string `json:"remove" bson:"remove"` - Replace map[string]string `json:"replace" bson:"replace"` -} - -func (req *TestCaseReq) Bind(r *http.Request) error { - if req.Captured == 0 { - return errors.New("captured timestamp cant be empty") - } - - if req.AppID == "" { - return errors.New("app id needs to be declared") - } - - if strings.Contains(req.TestCasePath, "../") || strings.Contains(req.MockPath, "../") || strings.HasPrefix(req.TestCasePath, "/etc/passwd") || strings.HasPrefix(req.MockPath, "/etc/passwd") { - return errors.New("file path should be absolute") - } - return nil -} - -// TestReq is a struct for Http API request JSON body -type TestReq struct { - ID string `json:"id" bson:"_id"` - AppID string `json:"app_id" bson:"app_id"` - RunID string `json:"run_id" bson:"run_id"` - Resp HttpResp `json:"resp" bson:"resp"` - GrpcResp GrpcResp `json:"grpc_resp" bson:"grpc_resp"` - TestCasePath string `json:"test_case_path" bson:"test_case_path"` - MockPath string `json:"mock_path" bson:"mock_path"` - Type Kind `json:"type" bson:"type"` -} - -func (req *TestReq) Bind(r *http.Request) error { - if req.ID == "" { - return errors.New("id is required") - } - - if req.AppID == "" { - return errors.New("app id is required") - } - - if strings.Contains(req.TestCasePath, "../") || strings.Contains(req.MockPath, "../") || strings.HasPrefix(req.TestCasePath, "/etc/passwd") || strings.HasPrefix(req.MockPath, "/etc/passwd") { - return errors.New("file path should be absolute") - } - return nil -} diff --git a/pkg/models/event.go b/pkg/models/tele.go old mode 100644 new mode 100755 similarity index 76% rename from pkg/models/event.go rename to pkg/models/tele.go index c104634a0..7085ccad1 --- a/pkg/models/event.go +++ b/pkg/models/tele.go @@ -7,5 +7,6 @@ type TeleEvent struct { CreatedAt int64 `json:"createdAt"` TeleCheck bool `json:"tele_check"` OS string `json:"os"` - KeployVersion string `json:"keploy_version"` + KeployVersion string `json:"keploy_version"` + Arch string `json:"arch"` } diff --git a/pkg/models/testcase.go b/pkg/models/testcase.go new file mode 100755 index 000000000..dadaeee04 --- /dev/null +++ b/pkg/models/testcase.go @@ -0,0 +1,57 @@ +package models + +type Kind string +type BodyType string +type Version string + +const V1Beta1 = Version("api.keploy.io/v1beta1") + +var ( + currentVersion = V1Beta1 +) + +func SetVersion(V1 string) { + currentVersion = Version(V1) +} + +func GetVersion() (V1 Version) { + return currentVersion +} + +// mocks types +const ( + HTTP Kind = "Http" + GENERIC Kind = "Generic" + SQL Kind = "SQL" + Postgres Kind = "Postgres" + GRPC_EXPORT Kind = "gRPC" + Mongo Kind = "Mongo" + BodyTypeUtf8 BodyType = "utf-8" + BodyTypeBinary BodyType = "binary" + BodyTypePlain BodyType = "PLAIN" + BodyTypeJSON BodyType = "JSON" + BodyTypeError BodyType = "ERROR" +) + +type TestCase struct { + Version Version `json:"version" bson:"version"` + Kind Kind `json:"kind" bson:"kind"` + Name string `json:"name" bson:"name"` + Created int64 `json:"created" bson:"created"` + Updated int64 `json:"updated" bson:"updated"` + Captured int64 `json:"captured" bson:"captured"` + HTTPReq HTTPReq `json:"http_req" bson:"http_req"` + HTTPResp HTTPResp `json:"http_resp" bson:"http_resp"` + AllKeys map[string][]string `json:"all_keys" bson:"all_keys"` + GrpcResp GrpcResp `json:"grpcResp" bson:"grpcResp"` + GrpcReq GrpcReq `json:"grpcReq" bson:"grpcReq"` + Anchors map[string][]string `json:"anchors" bson:"anchors"` + Noise map[string][]string `json:"noise" bson:"noise"` + Mocks []*Mock `json:"mocks" bson:"mocks"` + Type string `json:"type" bson:"type"` + Curl string `json:"curl" bson:"curl"` +} + +func (tc *TestCase) GetKind() string { + return string(tc.Kind) +} diff --git a/pkg/models/testcompare.go b/pkg/models/testcompare.go new file mode 100644 index 000000000..b7192cc14 --- /dev/null +++ b/pkg/models/testcompare.go @@ -0,0 +1,43 @@ +package models + +type AbsResult struct { + Kind StringResult `json:"kind" bson:"kind" yaml:"kind"` + Name StringResult `json:"name" bson:"name" yaml:"name"` + ReqResult ReqResult `json:"req_result" bson:"req_result" yaml:"req_result"` + RespResult RespResult `json:"resp_result" bson:"resp_result" yaml:"resp_result"` + CurlResult StringResult `json:"curl_result" bson:"curl_result" yaml:"curl_result"` +} + +type ReqResult struct { + MethodResult StringResult `json:"method_result" bson:"method_result" yaml:"method_result"` + URLResult StringResult `json:"url_result" bson:"url_result" yaml:"url_result"` + URLParamsResult []URLParamsResult `json:"url_params_result" bson:"url_params_result" yaml:"url_params_result"` + ProtoMajor IntResult `json:"proto_major" bson:"proto_major" yaml:"proto_major"` + ProtoMinor IntResult `json:"proto_minor" bson:"proto_minor" yaml:"proto_minor"` + HeaderResult []HeaderResult `json:"headers_result" bson:"headers_result" yaml:"headers_result"` + BodyResult BodyResult `json:"body_result" bson:"body_result" yaml:"body_result"` + HostResult StringResult `json:"host_result" bson:"host_result" yaml:"host_result"` +} + +type RespResult struct { + StatusCode IntResult `json:"status_code" bson:"status_code" yaml:"status_code"` + HeadersResult []HeaderResult `json:"headers_result" bson:"headers_result" yaml:"headers_result"` + BodyResult BodyResult `json:"body_result" bson:"body_result" yaml:"body_result"` +} + +type StringResult struct { + Normal bool `json:"normal" bson:"normal" yaml:"normal"` + Expected string `json:"expected" bson:"expected" yaml:"expected"` + Actual string `json:"actual" bson:"actual" yaml:"actual"` +} + +type URLParamsResult struct { + Normal bool `json:"normal" bson:"normal" yaml:"normal"` + Expected Params `json:"expected" bson:"expected" yaml:"expected"` + Actual Params `json:"actual" bson:"actual" yaml:"actual"` +} + +type Params struct { + Key string `json:"key" bson:"key" yaml:"key"` + Value string `json:"value" bson:"value" yaml:"value"` +} diff --git a/pkg/models/testrun.go b/pkg/models/testrun.go old mode 100644 new mode 100755 index 1c8f5db6e..8ae44a71e --- a/pkg/models/testrun.go +++ b/pkg/models/testrun.go @@ -1,5 +1,9 @@ package models +import ( + "errors" +) + type TestReport struct { Version Version `json:"version" yaml:"version"` Name string `json:"name" yaml:"name"` @@ -8,66 +12,66 @@ type TestReport struct { Failure int `json:"failure" yaml:"failure"` Total int `json:"total" yaml:"total"` Tests []TestResult `json:"tests" yaml:"tests,omitempty"` + TestSet string `json:"testSet" yaml:"test_set"` } -type TestResult struct { - Kind Kind `json:"kind" yaml:"kind"` - Name string `json:"name" yaml:"name"` - Status TestStatus `json:"status" yaml:"status"` - Started int64 `json:"started" yaml:"started"` - Completed int64 `json:"completed" yaml:"completed"` - TestCasePath string `json:"testCasePath" yaml:"test_case_path"` - MockPath string `json:"mockPath" yaml:"mock_path"` - TestCaseID string `json:"testCaseID" yaml:"test_case_id"` - Req MockHttpReq `json:"req" yaml:"req,omitempty"` - Mocks []string `json:"mocks" yaml:"mocks"` - Res MockHttpResp `json:"resp" yaml:"resp,omitempty"` - Noise []string `json:"noise" yaml:"noise,omitempty"` - Result Result `json:"result" yaml:"result"` - GrpcReq GrpcReq `json:"grpc_req" yaml:"grpc_req,omitempty"` - GrpcResp GrpcResp `json:"grpc_resp" yaml:"grpc_resp,omitempty"` +func (tr *TestReport) GetKind() string { + return "TestReport" } -type TestRun struct { - ID string `json:"id" bson:"_id"` - Created int64 `json:"created" bson:"created,omitempty"` - Updated int64 `json:"updated" bson:"updated,omitempty"` - Status TestRunStatus `json:"status" bson:"status"` - CID string `json:"cid" bson:"cid,omitempty"` - App string `json:"app" bson:"app,omitempty"` - User string `json:"user" bson:"user,omitempty"` - Success int `json:"success" bson:"success,omitempty"` - Failure int `json:"failure" bson:"failure,omitempty"` - Total int `json:"total" bson:"total,omitempty"` - Tests []Test `json:"tests" bson:"-"` +type TestResult struct { + Kind Kind `json:"kind" yaml:"kind"` + Name string `json:"name" yaml:"name"` + Status TestStatus `json:"status" yaml:"status"` + Started int64 `json:"started" yaml:"started"` + Completed int64 `json:"completed" yaml:"completed"` + TestCasePath string `json:"testCasePath" yaml:"test_case_path"` + MockPath string `json:"mockPath" yaml:"mock_path"` + TestCaseID string `json:"testCaseID" yaml:"test_case_id"` + Req HTTPReq `json:"req" yaml:"req,omitempty"` + Res HTTPResp `json:"resp" yaml:"resp,omitempty"` + Noise Noise `json:"noise" yaml:"noise,omitempty"` + Result Result `json:"result" yaml:"result"` } -type Test struct { - ID string `json:"id" bson:"_id"` - Status TestStatus `json:"status" bson:"status"` - Started int64 `json:"started" bson:"started"` - Completed int64 `json:"completed" bson:"completed"` - RunID string `json:"run_id" bson:"run_id"` - TestCaseID string `json:"testCaseID" bson:"test_case_id"` - URI string `json:"uri" bson:"uri"` - Req HttpReq `json:"req" bson:"req"` - Dep []Dependency `json:"dep" bson:"dep"` - Resp HttpResp `json:"http_resp" bson:"http_resp,omitempty"` - Noise []string `json:"noise" bson:"noise"` - Result Result `json:"result" bson:"result"` - // GrpcMethod string `json:"grpc_method" bson:"grpc_method"` - GrpcReq GrpcReq `json:"grpc_req" bson:"grpc_req"` - GrpcResp GrpcResp `json:"grpc_resp" bson:"grpc_resp,omitempty"` +func (tr *TestResult) GetKind() string { + return string(tr.Kind) } -type TestRunStatus string +type TestSetStatus string +// constants for testSet status const ( - TestRunStatusRunning TestRunStatus = "RUNNING" - TestRunStatusFailed TestRunStatus = "FAILED" - TestRunStatusPassed TestRunStatus = "PASSED" + TestSetStatusRunning TestSetStatus = "RUNNING" + TestSetStatusFailed TestSetStatus = "FAILED" + TestSetStatusPassed TestSetStatus = "PASSED" + TestSetStatusAppHalted TestSetStatus = "APP_HALTED" + TestSetStatusUserAbort TestSetStatus = "USER_ABORT" + TestSetStatusFaultUserApp TestSetStatus = "APP_FAULT" + TestSetStatusInternalErr TestSetStatus = "INTERNAL_ERR" ) +func StringToTestSetStatus(s string) (TestSetStatus, error) { + switch s { + case "RUNNING": + return TestSetStatusRunning, nil + case "FAILED": + return TestSetStatusFailed, nil + case "PASSED": + return TestSetStatusPassed, nil + case "APP_HALTED": + return TestSetStatusAppHalted, nil + case "USER_ABORT": + return TestSetStatusUserAbort, nil + case "APP_FAULT": + return TestSetStatusFaultUserApp, nil + case "INTERNAL_ERR": + return TestSetStatusInternalErr, nil + default: + return "", errors.New("invalid TestSetStatus value") + } +} + type Result struct { StatusCode IntResult `json:"status_code" bson:"status_code" yaml:"status_code"` HeadersResult []HeaderResult `json:"headers_result" bson:"headers_result" yaml:"headers_result"` @@ -77,7 +81,7 @@ type Result struct { type DepResult struct { Name string `json:"name" bson:"name" yaml:"name"` - Type DependencyType `json:"type" bson:"type" yaml:"type"` + Type string `json:"type" bson:"type" yaml:"type"` Meta []DepMetaResult `json:"meta" bson:"meta" yaml:"meta"` } @@ -112,16 +116,9 @@ type BodyResult struct { Actual string `json:"actual" bson:"actual" yaml:"actual"` } -type BodyType string - -const ( - BodyTypePlain BodyType = "PLAIN" - BodyTypeJSON BodyType = "JSON" - BodyTypeError BodyType = "ERROR" -) - type TestStatus string +// constants for test status const ( TestStatusPending TestStatus = "PENDING" TestStatusRunning TestStatus = "RUNNING" diff --git a/pkg/platform/README.md b/pkg/platform/README.md new file mode 100755 index 000000000..ab693cc0c --- /dev/null +++ b/pkg/platform/README.md @@ -0,0 +1,12 @@ +# Platform Package Documentation + +This package exposes a set of interfaces and methods for common data +store operations such as creating, reading, updating, and deleting +(CRUD) records. + +Implementations for different types of data stores can be added +here, all in one place. These implementations are abstracted from +other logic using interface methods. + +This package depends on the `models` package, using its structs to +perform the CRUD operations. \ No newline at end of file diff --git a/pkg/platform/fs/historyConfig.go b/pkg/platform/fs/historyConfig.go deleted file mode 100644 index 9e0417b42..000000000 --- a/pkg/platform/fs/historyConfig.go +++ /dev/null @@ -1,168 +0,0 @@ -package fs - -import ( - "errors" - "fmt" - "gopkg.in/yaml.v3" - "io" - "os" - "path/filepath" -) - -type HistCfg struct { - TcPath string `json:"tc_path" yaml:"tc_path"` - MockPath string `json:"mock_path" yaml:"mock_path"` - AppPath string `json:"app_path" yaml:"app_path"` - TestRuns map[string][]string `json:"test_runs" yaml:"test_runs"` -} - -func NewHistCfgFS() *HistCfg { - return &HistCfg{ - TcPath: "", - MockPath: "", - AppPath: "", - TestRuns: map[string][]string{}, - } -} - -func (hc *HistCfg) CaptureTestsEvent(tc_path, mock_path, app_path, test_run_path, test_run_id string) error { - HistCfg := HistCfg{ - TcPath: tc_path, - AppPath: app_path, - MockPath: mock_path, - TestRuns: map[string][]string{ - test_run_path: {test_run_id}, - }, - } - err := SetHistory(&HistCfg) - if err != nil { - return err - } - return nil -} - -// Todo : optimize this function -func (hc *HistCfg) CapturedRecordEvents(tc_path, mock_path, app_path string) error { - HistCfg := HistCfg{ - TcPath: tc_path, - MockPath: mock_path, - AppPath: app_path, - } - err := SetHistory(&HistCfg) - if err != nil { - return err - } - return nil -} - -func SetHistory(hc *HistCfg) error { - currentHistory := make(map[string][]HistCfg) - currentHistory["histCfg"] = append(currentHistory["histCfg"], *hc) - - path := UserHomeDir(true) - fileName := "histCfg.yaml" - filePath := filepath.Join(path, fileName) - - // Check if the file exists; if not, create it - if _, err := os.Stat(filePath); os.IsNotExist(err) { - _, err := CreateMockFile(path, "histCfg") - if err != nil { - return fmt.Errorf("failed to create file %s. error: %s", fileName, err.Error()) - } - } - - // Read the existing content of the file - exstingData, err := os.ReadFile(filePath) - if len(exstingData) == 0 { - Write(filePath, currentHistory) - return nil - } - if err != nil { - return fmt.Errorf("failed to read existing content from yaml file. error: %s", err.Error()) - } - - totalHist, err := ParseBytes(exstingData, currentHistory) - if err != nil { - return fmt.Errorf("failed to parse bytes. error: %s", err.Error()) - } - - Write(filePath, totalHist) - - return nil -} - -// UI can be rendered by fetching this method -func (hc *HistCfg) GetHistory() error { - var ( - path = UserHomeDir(true) - history map[string][]HistCfg - ) - - file, err := os.OpenFile(filepath.Join(path, "histCfg.yaml"), os.O_RDONLY, os.ModePerm) - defer file.Close() - decoder := yaml.NewDecoder(file) - err = decoder.Decode(&history) - if errors.Is(err, io.EOF) { - return fmt.Errorf("failed to decode the HistCfg yaml. error: %v", err.Error()) - } - return nil -} - -func Write(filePath string, data map[string][]HistCfg) error { - d, err := yaml.Marshal(&data) - if err != nil { - return fmt.Errorf("failed to marshal document to yaml. error: %s", err.Error()) - } - err = os.WriteFile(filePath, d, os.ModePerm) - if err != nil { - return fmt.Errorf("failed to write histCfg in yaml file. Please check the Unix permissions error: %s", err.Error()) - } - return nil -} - -func ParseBytes(data []byte, hc map[string][]HistCfg) (map[string][]HistCfg, error) { - var exstingData map[string][]HistCfg - err := yaml.Unmarshal(data, &exstingData) - if err != nil { - return nil, fmt.Errorf("failed to read existing content from yaml file. error: %s", err.Error()) - } - - if err != nil { - return nil, fmt.Errorf("failed to Unmarshal document to yaml. error: %s", err.Error()) - } - - var prev = exstingData["histCfg"] - var current = hc["histCfg"][0] - var flag = false - for i, v := range prev { - if v.TcPath == current.TcPath && v.MockPath == current.MockPath { - - // iterate over all testrun path - f := false - for j := range prev[i].TestRuns { - if _, ok := current.TestRuns[j]; ok { - prev[i].TestRuns[j] = append(current.TestRuns[j], v.TestRuns[j]...) - f = true - } - } - // test run path is new and not available in history - if !f { - for k, v := range current.TestRuns { - prev[i].TestRuns[k] = v - } - } - //for appending after record for the first time - if len(prev[i].TestRuns) == 0 { - prev[i].TestRuns = current.TestRuns - } - flag = true - break - } - } - if !flag { - prev = append(prev, current) - } - - exstingData["histCfg"] = prev - return exstingData, nil -} diff --git a/pkg/platform/fs/mock.go b/pkg/platform/fs/mock.go deleted file mode 100644 index ce629b7a5..000000000 --- a/pkg/platform/fs/mock.go +++ /dev/null @@ -1,313 +0,0 @@ -package fs - -import ( - "context" - "errors" - "fmt" - "io" - "os" - "path/filepath" - - // "runtime" - "sort" - "strings" - "sync" - - grpcMock "go.keploy.io/server/grpc/mock" - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" - "gopkg.in/yaml.v3" -) - -type mockExport struct { - isTestMode bool - tests sync.Map -} - -func NewMockExportFS(isTestMode bool) *mockExport { - return &mockExport{ - isTestMode: isTestMode, - tests: sync.Map{}, - } -} - -func (fe *mockExport) Exists(ctx context.Context, path string) bool { - if _, err := os.Stat(filepath.Join(path)); err != nil { - return false - } - return true -} - -func (fe *mockExport) ReadAll(ctx context.Context, testCasePath, mockPath, tcsType string) ([]models.TestCase, error) { - if !pkg.IsValidPath(testCasePath) || !pkg.IsValidPath(mockPath) { - return nil, fmt.Errorf("file path should be absolute. got testcase path: %s and mock path: %s", pkg.SanitiseInput(testCasePath), pkg.SanitiseInput(mockPath)) - } - dir, err := os.OpenFile(testCasePath, os.O_RDONLY, os.ModePerm) - if err != nil { - return nil, fmt.Errorf("failed to open the directory containing testcases yaml files. path: %s error: %s", pkg.SanitiseInput(testCasePath), err.Error()) - } - - var ( - res = []models.TestCase{} - ) - files, err := dir.ReadDir(0) - if err != nil { - return nil, fmt.Errorf("failed to read the names of testcases yaml files from path directory. path: %s error: %s", pkg.SanitiseInput(testCasePath), err.Error()) - } - for _, j := range files { - if filepath.Ext(j.Name()) != ".yaml" { - continue - } - - name := strings.TrimSuffix(j.Name(), filepath.Ext(j.Name())) - tcs, err := read(testCasePath, name, false) - if err != nil { - return nil, err - } - - tests, err := toTestCase(tcs, name, mockPath) - if err != nil { - return nil, err - } - res = append(res, tests...) - } - sort.Slice(res, func(i, j int) bool { - return res[i].Captured < res[j].Captured - }) - - if tcsType != "" { - filteredTcs := reqTypeFilter(res, tcsType) - res = filteredTcs - } - - return res, nil -} - -func (fe *mockExport) Read(ctx context.Context, path, name string, libMode bool) ([]models.Mock, error) { - return read(path, name, libMode) -} - -func (fe *mockExport) Write(ctx context.Context, path string, doc models.Mock) error { - if fe.isTestMode { - return nil - } - isFileEmpty, err := CreateMockFile(path, doc.Name) - if err != nil { - return err - } - file, err := os.OpenFile(filepath.Join(path, doc.Name+".yaml"), os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm) - if err != nil { - return fmt.Errorf("failed to open the file. error: %v", err.Error()) - } - - data := []byte("---\n") - if isFileEmpty { - data = []byte{} - } - d, err := yaml.Marshal(&doc) - if err != nil { - return fmt.Errorf("failed to marshal document to yaml. error: %s", err.Error()) - } - data = append(data, d...) - - _, err = file.Write(data) - if err != nil { - return fmt.Errorf("failed to embed document into yaml file. error: %s", err.Error()) - } - defer file.Close() - return nil -} - -func (fe *mockExport) WriteAll(ctx context.Context, path, fileName string, docs []models.Mock) error { - if fe.isTestMode { - return nil - } - _, err := CreateMockFile(path, fileName) - if err != nil { - return err - } - file, err := os.OpenFile(filepath.Join(path, fileName+".yaml"), os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm) - if err != nil { - return fmt.Errorf("failed to open the file. error: %s", err.Error()) - } - - for i, j := range docs { - data := []byte("---\n") - if i == 0 { - data = []byte{} - } - d, err := yaml.Marshal(j) - if err != nil { - return fmt.Errorf("failed to marshal document to yaml. error: %s", err.Error()) - } - data = append(data, d...) - - _, err = file.Write(data) - if err != nil { - return fmt.Errorf("failed to embed document into yaml file. error: %s", err.Error()) - } - } - - defer file.Close() - return nil -} - -func toTestCase(tcs []models.Mock, fileName, mockPath string) ([]models.TestCase, error) { - res := []models.TestCase{} - for _, j := range tcs { - var ( - // spec = models.HttpSpec{} - mocks = []*proto.Mock{} - ) - - switch j.Kind { - case models.HTTP: - spec := models.HttpSpec{} - err := j.Spec.Decode(&spec) - if err != nil { - return res, fmt.Errorf("failed to decode the yaml spec field of testcase. file: %s error: %s", pkg.SanitiseInput(fileName), err.Error()) - } - - noise, ok := spec.Assertions["noise"] - if !ok { - noise = []string{} - } - if len(spec.Mocks) > 0 { - nameCheck := strings.Split(spec.Mocks[0], "-")[0] - var mockName string - if nameCheck == "mock" { - mockName = "mock-" + strings.Split(fileName, "-")[1] - } else { - mockName = fileName - } - yamlDocs, err := read(mockPath, mockName, false) - if err != nil { - return nil, err - } - mocks, err = grpcMock.Decode(yamlDocs) - if err != nil { - return nil, err - } - } - res = append(res, models.TestCase{ - ID: j.Name, - HttpReq: models.HttpReq{ - Method: spec.Request.Method, - ProtoMajor: spec.Request.ProtoMajor, - ProtoMinor: spec.Request.ProtoMinor, - URL: spec.Request.URL, - Header: grpcMock.ToHttpHeader(spec.Request.Header), - Body: spec.Request.Body, - URLParams: spec.Request.URLParams, - }, - HttpResp: models.HttpResp{ - StatusCode: spec.Response.StatusCode, - Header: grpcMock.ToHttpHeader(spec.Response.Header), - Body: spec.Response.Body, - }, - Noise: noise, - Mocks: mocks, - Captured: spec.Created, - Type: string(models.HTTP), - }) - case models.GRPC_EXPORT: - spec := models.GrpcSpec{} - err := j.Spec.Decode(&spec) - if err != nil { - return res, fmt.Errorf("failed to decode the yaml spec field of testcase. file: %s error: %s", pkg.SanitiseInput(fileName), err.Error()) - } - - noise, ok := spec.Assertions["noise"] - if !ok { - noise = []string{} - } - if len(spec.Mocks) > 0 { - nameCheck := strings.Split(spec.Mocks[0], "-")[0] - var mockName string - if nameCheck == "mock" { - mockName = "mock-" + strings.Split(fileName, "-")[1] - } else { - mockName = fileName - } - yamlDocs, err := read(mockPath, mockName, false) - if err != nil { - return nil, err - } - mocks, err = grpcMock.Decode(yamlDocs) - if err != nil { - return nil, err - } - } - res = append(res, models.TestCase{ - ID: j.Name, - // GrpcReq: spec.Request.Body, - GrpcReq: spec.Request, - // GrpcMethod: spec.Request.Method, - GrpcResp: spec.Response, - Noise: noise, - Mocks: mocks, - Captured: spec.Created, - Type: string(models.GRPC_EXPORT), - }) - default: - return res, fmt.Errorf("failed to decode the yaml. file: %s error: Invalid kind of yaml", pkg.SanitiseInput(fileName)) - } - } - return res, nil -} - -func read(path, name string, libMode bool) ([]models.Mock, error) { - if !pkg.IsValidPath(path) { - return nil, fmt.Errorf("file path should be absolute. got path: %s", pkg.SanitiseInput(path)) - } - file, err := os.OpenFile(filepath.Join(path, name+".yaml"), os.O_RDONLY, os.ModePerm) - if err != nil { - return nil, err - } - defer file.Close() - decoder := yaml.NewDecoder(file) - arr := []models.Mock{} - for { - var doc models.Mock - err := decoder.Decode(&doc) - if errors.Is(err, io.EOF) { - break - } - if err != nil { - return nil, fmt.Errorf("failed to decode the yaml file documents. error: %v", err.Error()) - } - if !libMode || doc.Name == name { - arr = append(arr, doc) - } - } - return arr, nil -} - -func CreateMockFile(path string, fileName string) (bool, error) { - if !pkg.IsValidPath(path) { - return false, fmt.Errorf("file path should be absolute. got path: %s", pkg.SanitiseInput(path)) - } - if _, err := os.Stat(filepath.Join(path, fileName+".yaml")); err != nil { - err := os.MkdirAll(filepath.Join(path), os.ModePerm) - if err != nil { - return false, fmt.Errorf("failed to create a mock dir. error: %v", err.Error()) - } - _, err = os.Create(filepath.Join(path, fileName+".yaml")) - if err != nil { - return false, fmt.Errorf("failed to create a yaml file. error: %v", err.Error()) - } - return true, nil - } - return false, nil -} - -func reqTypeFilter(tcs []models.TestCase, reqType string) []models.TestCase { - var result []models.TestCase - for i := 0; i < len(tcs); i++ { - if tcs[i].Type == reqType { - result = append(result, tcs[i]) - } - } - return result -} diff --git a/pkg/platform/fs/tele.go b/pkg/platform/fs/tele.go deleted file mode 100644 index 7d34d32bc..000000000 --- a/pkg/platform/fs/tele.go +++ /dev/null @@ -1,79 +0,0 @@ -package fs - -import ( - "errors" - "fmt" - "io" - "os" - "path/filepath" - "runtime" - - "gopkg.in/yaml.v3" -) - -// telemetry provides interface for create-read installationID for self-hosted keploy -type telemetry struct{} - -func UserHomeDir(isNewConfigPath bool) string { - - var configFolder = "/keploy-config" - if isNewConfigPath { - configFolder = "/.keploy-config" - } - - if runtime.GOOS == "windows" { - home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") - if home == "" { - home = os.Getenv("USERPROFILE") - } - return home + configFolder - } - return os.Getenv("HOME") + configFolder -} - -func NewTeleFS() *telemetry { - return &telemetry{} -} - -func (fs *telemetry) Get(isNewConfigPath bool) (string, error) { - var ( - path = UserHomeDir(isNewConfigPath) - id = "" - ) - - file, err := os.OpenFile(filepath.Join(path, "installation-id.yaml"), os.O_RDONLY, os.ModePerm) - if err != nil { - return "", err - } - defer file.Close() - decoder := yaml.NewDecoder(file) - err = decoder.Decode(&id) - if errors.Is(err, io.EOF) { - return id, fmt.Errorf("failed to decode the installation-id yaml. error: %v", err.Error()) - } - if err != nil { - return id, fmt.Errorf("failed to decode the installation-id yaml. error: %v", err.Error()) - } - - return id, nil -} - -func (fs *telemetry) Set(id string) error { - path := UserHomeDir(true) - CreateMockFile(path, "installation-id") - - data := []byte{} - - d, err := yaml.Marshal(&id) - if err != nil { - return fmt.Errorf("failed to marshal document to yaml. error: %s", err.Error()) - } - data = append(data, d...) - - err = os.WriteFile(filepath.Join(path, "installation-id.yaml"), data, os.ModePerm) - if err != nil { - return fmt.Errorf("failed to write installation id in yaml file. error: %s", err.Error()) - } - - return nil -} diff --git a/pkg/platform/fs/testReport.go b/pkg/platform/fs/testReport.go deleted file mode 100644 index 21b9ae563..000000000 --- a/pkg/platform/fs/testReport.go +++ /dev/null @@ -1,101 +0,0 @@ -package fs - -import ( - "context" - "errors" - "fmt" - "os" - "path/filepath" - "strings" - "sync" - - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" - "gopkg.in/yaml.v3" -) - -type testReport struct { - isTestMode bool - tests map[string][]models.TestResult - m sync.Mutex -} - -func NewTestReportFS(isTestMode bool) *testReport { - return &testReport{ - isTestMode: isTestMode, - tests: map[string][]models.TestResult{}, - m: sync.Mutex{}, - } -} - -func (fe *testReport) Lock() { - fe.m.Lock() -} - -func (fe *testReport) Unlock() { - fe.m.Unlock() -} - -func (fe *testReport) SetResult(runId string, test models.TestResult) { - // TODO: send runId to the historyConfig - tests, _ := fe.tests[runId] - tests = append(tests, test) - fe.tests[runId] = tests - fe.m.Unlock() -} - -func (fe *testReport) GetResults(runId string) ([]models.TestResult, error) { - val, ok := fe.tests[runId] - if !ok { - return nil, fmt.Errorf("found no test results for test report with id: %v", runId) - } - return val, nil -} - -func (fe *testReport) Read(ctx context.Context, path, name string) (models.TestReport, error) { - if !pkg.IsValidPath(path) { - return models.TestReport{}, fmt.Errorf("file path should be absolute. got test report path: %s and its name: %s", pkg.SanitiseInput(path), pkg.SanitiseInput(name)) - } - if strings.Contains(name, "/") || !pkg.IsValidPath(name) { - return models.TestReport{}, errors.New("invalid name for test-report. It should not include any slashes") - } - file, err := os.OpenFile(filepath.Join(path, name+".yaml"), os.O_RDONLY, os.ModePerm) - if err != nil { - return models.TestReport{}, err - } - defer file.Close() - decoder := yaml.NewDecoder(file) - var doc models.TestReport - err = decoder.Decode(&doc) - if err != nil { - return models.TestReport{}, fmt.Errorf("failed to decode the yaml file documents. error: %v", err.Error()) - } - return doc, nil -} - -func (fe *testReport) Write(ctx context.Context, path string, doc models.TestReport) error { - if fe.isTestMode { - return nil - } - if strings.Contains(doc.Name, "/") || !pkg.IsValidPath(doc.Name) { - return errors.New("invalid name for test-report. It should not include any slashes") - } - - _, err := CreateMockFile(path, doc.Name) - if err != nil { - return err - } - - data := []byte{} - d, err := yaml.Marshal(&doc) - if err != nil { - return fmt.Errorf("failed to marshal document to yaml. error: %s", err.Error()) - } - data = append(data, d...) - - err = os.WriteFile(filepath.Join(path, doc.Name+".yaml"), data, os.ModePerm) - if err != nil { - return fmt.Errorf("failed to write test report in yaml file. error: %s", err.Error()) - } - return nil -} diff --git a/pkg/platform/mgo/browser-mockdb.go b/pkg/platform/mgo/browser-mockdb.go deleted file mode 100644 index 7bc338317..000000000 --- a/pkg/platform/mgo/browser-mockdb.go +++ /dev/null @@ -1,69 +0,0 @@ -package mgo - -import ( - "context" - - "github.com/keploy/go-sdk/integrations/kmongo" - "go.keploy.io/server/pkg/models" - "go.mongodb.org/mongo-driver/bson" - "go.uber.org/zap" -) - -func NewBrowserMockDB(c *kmongo.Collection, log *zap.Logger) *browserMockDB { - return &browserMockDB{ - c: c, - log: log, - } -} - -type browserMockDB struct { - c *kmongo.Collection - log *zap.Logger -} - -func (s *browserMockDB) UpdateArr(ctx context.Context, app string, testName string, doc models.BrowserMock) error { - filter := bson.M{"app_id": app, "test_name": testName} - _, err := s.c.UpdateOne(ctx, filter, bson.M{"$push": bson.M{"deps": bson.M{"$each": doc.Deps}}}) - return err -} - -func (s *browserMockDB) CountDocs(ctx context.Context, app string, testName string) (int64, error) { - filter := bson.M{"app_id": app, "test_name": testName} - return s.c.CountDocuments(ctx, filter) -} - -func (s *browserMockDB) Put(ctx context.Context, doc models.BrowserMock) error { - _, err := s.c.InsertOne(ctx, doc) - return err -} - -func (s *browserMockDB) Get(ctx context.Context, app string, testName string) ([]models.BrowserMock, error) { - var result []models.BrowserMock - filter := bson.M{"app_id": app, "test_name": testName} - cur, err := s.c.Find(ctx, filter) - if err != nil { - return nil, err - } - - // Loop through the cursor - for cur.Next(ctx) { - var doc models.BrowserMock - err = cur.Decode(&doc) - if err != nil { - return nil, err - - } - result = append(result, doc) - } - - if err = cur.Err(); err != nil { - return nil, err - - } - - err = cur.Close(ctx) - if err != nil { - return nil, err - } - return result, nil -} diff --git a/pkg/platform/mgo/mongo.go b/pkg/platform/mgo/mongo.go deleted file mode 100644 index 5cd7b3ff4..000000000 --- a/pkg/platform/mgo/mongo.go +++ /dev/null @@ -1,17 +0,0 @@ -package mgo - -import ( - "context" - "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" - "time" -) - -func New(uri string) (*mongo.Client, error) { - - clientOptions := options.Client().ApplyURI(uri) - ctx, _ := context.WithTimeout(context.Background(), 65*time.Second) - // defer cancel() - return mongo.Connect(ctx, clientOptions) - -} diff --git a/pkg/platform/mgo/rdb.go b/pkg/platform/mgo/rdb.go deleted file mode 100644 index 23e49b432..000000000 --- a/pkg/platform/mgo/rdb.go +++ /dev/null @@ -1,199 +0,0 @@ -package mgo - -import ( - "context" - "time" - - "go.keploy.io/server/pkg/models" - - "go.mongodb.org/mongo-driver/bson" - - "github.com/keploy/go-sdk/integrations/kmongo" - "go.mongodb.org/mongo-driver/mongo/options" - "go.uber.org/zap" -) - -func NewRun(c *kmongo.Collection, test *kmongo.Collection, log *zap.Logger) *RunDB { - return &RunDB{ - c: c, - log: log, - test: test, - } -} - -type RunDB struct { - c *kmongo.Collection - test *kmongo.Collection - log *zap.Logger -} - -func (r *RunDB) ReadTest(ctx context.Context, id string) (models.Test, error) { - - // too repetitive - // TODO write a generic FindOne for all get calls - filter := bson.M{"_id": id} - var t models.Test - err := r.test.FindOne(ctx, filter).Decode(&t) - if err != nil { - return t, err - } - return t, nil -} - -func (r *RunDB) ReadTests(ctx context.Context, runID string) ([]models.Test, error) { - - filter := bson.M{"run_id": runID} - findOptions := options.Find() - - var res []models.Test - cur, err := r.test.Find(ctx, filter, findOptions) - if err != nil { - return nil, err - } - - // Loop through the cursor - for cur.Next(ctx) { - var t models.Test - err = cur.Decode(&t) - if err != nil { - return nil, err - } - res = append(res, t) - } - - if err = cur.Err(); err != nil { - return nil, err - - } - - err = cur.Close(ctx) - if err != nil { - return nil, err - } - return res, nil -} - -func (r *RunDB) PutTest(ctx context.Context, t models.Test) error { - - upsert := true - opt := &options.UpdateOptions{ - Upsert: &upsert, - } - filter := bson.M{"_id": t.ID} - update := bson.D{{Key: "$set", Value: t}} - - _, err := r.test.UpdateOne(ctx, filter, update, opt) - if err != nil { - //t.log.Error("failed to insert testcase into DB", zap.String("cid", tc.CID), zap.String("appid", tc.AppID), zap.String("id", tc.ID), zap.Error()) - return err - } - return nil -} - -func (r *RunDB) ReadOne(ctx context.Context, id string) (*models.TestRun, error) { - filter := bson.M{} - if id != "" { - filter["_id"] = id - } - testrun := &models.TestRun{} - cur := r.c.FindOne(ctx, filter) - err := cur.Decode(testrun) - return testrun, err -} - -func (r *RunDB) Read(ctx context.Context, cid string, user, app, id *string, from, to *time.Time, offset int, limit int) ([]*models.TestRun, error) { - - filter := bson.M{ - "cid": cid, - } - if user != nil { - filter["user"] = user - } - - if app != nil { - filter["app"] = app - } - if id != nil { - filter["_id"] = id - } - - if from != nil { - filter["updated"] = bson.M{"$gte": from.Unix()} - } - - if to != nil { - filter["updated"] = bson.M{"$lte": to.Unix()} - } - - var tcs []*models.TestRun - opt := options.Find() - - opt.SetSort(bson.M{"created": -1}) //for descending order - opt.SetSkip(int64(offset)) - opt.SetLimit(int64(limit)) - - cur, err := r.c.Find(ctx, filter, opt) - if err != nil { - return nil, err - } - - // Loop through the cursor - for cur.Next(ctx) { - var tc *models.TestRun - err = cur.Decode(&tc) - if err != nil { - return nil, err - - } - tcs = append(tcs, tc) - } - - if err = cur.Err(); err != nil { - return nil, err - - } - - err = cur.Close(ctx) - if err != nil { - return nil, err - } - return tcs, nil -} - -func (r *RunDB) Upsert(ctx context.Context, testRun models.TestRun) error { - - upsert := true - opt := &options.UpdateOptions{ - Upsert: &upsert, - } - filter := bson.M{"_id": testRun.ID} - update := bson.D{{Key: "$set", Value: testRun}} - - _, err := r.c.UpdateOne(ctx, filter, update, opt) - if err != nil { - //t.log.Error("failed to insert testcase into DB", zap.String("cid", tc.CID), zap.String("appid", tc.AppID), zap.String("id", tc.ID), zap.Error()) - return err - } - return nil -} - -func (r *RunDB) Increment(ctx context.Context, success, failure bool, id string) error { - - update := bson.M{} - if success { - update["$inc"] = bson.D{{Key: "success", Value: 1}} - } - - if failure { - update["$inc"] = bson.D{{Key: "failure", Value: 1}} - } - - _, err := r.c.UpdateOne(ctx, bson.M{ - "_id": id, - }, update, options.Update().SetUpsert(true)) - - if err != nil { - return err - } - return nil -} diff --git a/pkg/platform/mgo/tdb.go b/pkg/platform/mgo/tdb.go deleted file mode 100644 index 4aaa0f8c0..000000000 --- a/pkg/platform/mgo/tdb.go +++ /dev/null @@ -1,278 +0,0 @@ -package mgo - -import ( - "context" - "sort" - "time" - - "go.keploy.io/server/pkg/models" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/bson/primitive" - - "github.com/keploy/go-sdk/integrations/kmongo" - "go.mongodb.org/mongo-driver/mongo/options" - "go.uber.org/zap" -) - -func NewTestCase(c *kmongo.Collection, log *zap.Logger) *testCaseDB { - - return &testCaseDB{ - c: c, - log: log, - } -} - -type testCaseDB struct { - c *kmongo.Collection - log *zap.Logger -} - -func (t *testCaseDB) Delete(ctx context.Context, id string) error { - _, err := t.c.DeleteOne(ctx, bson.M{"_id": id}) - if err != nil { - return err - } - return nil - -} - -func (t *testCaseDB) GetApps(ctx context.Context, cid string) ([]string, error) { - - filter := bson.M{"cid": cid} - values, err := t.c.Distinct(ctx, "app_id", filter) - if err != nil { - return nil, err - } - var apps []string - for _, v := range values { - s, ok := v.(string) - if ok { - apps = append(apps, s) - } - } - - return apps, nil -} - -func (t *testCaseDB) GetKeys(ctx context.Context, cid, app, uri, tcsType string) ([]models.TestCase, error) { - var filter primitive.M - switch tcsType { - case string(models.HTTP): - filter = bson.M{"cid": cid, "app_id": app, "uri": uri} - case string(models.GRPC_EXPORT): - filter = bson.M{"cid": cid, "app_id": app, "grpc_req.method": uri} - } - findOptions := options.Find() - findOptions.SetProjection(bson.M{"anchors": 1, "all_keys": 1}) - return t.getAll(ctx, filter, findOptions) -} - -// <---- TO-DO ----> -//func (t *testCaseDB) Exists(ctx context.Context, tc models.TestCase) (bool, error) { -// opts := options.Count().SetMaxTime(2 * time.Second) -// filters := bson.M{ -// "cid": tc.CID, -// "app_id": tc.AppID, -// "uri": tc.URI, -// } -// for k, v := range tc.Anchors { -// //if len(v) == 1 { -// // filters[k] = v[0] -// // continue -// //} -// filters["anchors."+k] = bson.M{ -// "$size": len(v), -// "$all": v, -// } -// } -// count, err := t.c.CountDocuments(ctx, filters, opts) -// if err != nil { -// return false, err -// } -// if count > 0 { -// return true, nil -// } -// return false, nil -//} - -func (t *testCaseDB) DeleteByAnchor(ctx context.Context, cid, app, uri, tcsType string, filterKeys map[string][]string) error { - - filters := bson.M{} - switch tcsType { - case string(models.HTTP): - filters = bson.M{ - "cid": cid, - "app_id": app, - "uri": uri, - } - case string(models.GRPC_EXPORT): - filters = bson.M{ - "cid": cid, - "app_id": app, - "grpc_req.method": uri, - } - } - _, err := t.c.UpdateMany(ctx, filters, bson.M{ - "$set": bson.M{"anchors": filterKeys}, - }) - if err != nil { - return err - } - // remove duplicates - var dups []string - - filters["anchors"] = bson.M{"$ne": ""} - - pipeline := []bson.M{ - { - "$match": filters, - }, - { - "$group": bson.M{ - "_id": bson.M{"anchors": "$anchors"}, - "dups": bson.M{"$addToSet": "$_id"}, - "count": bson.M{"$sum": 1}, - }, - }, - { - "$match": bson.M{ - "count": bson.M{"$gt": 1}, - }, - }, - } - - opts := options.Aggregate().SetMaxTime(10 * time.Second) - - cur, err := t.c.Aggregate(ctx, pipeline, opts) - if err != nil { - return err - } - - var results []bson.M - if err = cur.All(ctx, &results); err != nil { - return err - } - - for _, result := range results { - arr := result["dups"].(bson.A) - for i, v := range arr { - if i == 1 { - continue - } - dups = append(dups, v.(string)) - } - } - - if len(dups) > 0 { - t.log.Info("duplicate testcases deleted", zap.Any("testcase ids: ", dups)) - _, err = t.c.DeleteMany(ctx, bson.M{ - "_id": bson.M{ - "$in": dups, - }, - }) - } - - if err != nil { - return err - } - return nil -} - -// UpdateTC only updates the http request and response of the given testcase. -func (t *testCaseDB) UpdateTC(ctx context.Context, tc models.TestCase) error { - filter := bson.M{"_id": tc.ID} - update := bson.D{{Key: "$set", Value: bson.M{"http_req": tc.HttpReq, "http_resp": tc.HttpResp}}} - _, err := t.c.UpdateOne(ctx, filter, update) - if err != nil { - return err - } - return nil -} - -func (t *testCaseDB) Upsert(ctx context.Context, tc models.TestCase) error { - - // sort arrays before insert - for _, v := range tc.Anchors { - sort.Strings(v) - } - upsert := true - opt := &options.UpdateOptions{ - Upsert: &upsert, - } - filter := bson.M{"_id": tc.ID} - update := bson.D{{Key: "$set", Value: tc}} - - _, err := t.c.UpdateOne(ctx, filter, update, opt) - if err != nil { - //t.log.Error("failed to insert testcase into DB", zap.String("cid", tc.CID), zap.String("appid", tc.AppID), zap.String("id", tc.ID), zap.Error()) - return err - } - return nil -} - -func (t *testCaseDB) Get(ctx context.Context, cid, id string) (models.TestCase, error) { - // too repetitive - // TODO write a generic FindOne for all get calls - filter := bson.M{"_id": id} - if cid != "" { - filter["cid"] = cid - } - - var tc models.TestCase - - err := t.c.FindOne(ctx, filter).Decode(&tc) - if err != nil { - return tc, err - } - return tc, nil -} - -func (t *testCaseDB) getAll(ctx context.Context, filter bson.M, findOptions *options.FindOptions) ([]models.TestCase, error) { - var tcs []models.TestCase - cur, err := t.c.Find(ctx, filter, findOptions) - if err != nil { - return nil, err - } - - // Loop through the cursor - for cur.Next(ctx) { - var tc models.TestCase - err = cur.Decode(&tc) - if err != nil { - return nil, err - - } - tcs = append(tcs, tc) - } - - if err = cur.Err(); err != nil { - return nil, err - - } - - err = cur.Close(ctx) - if err != nil { - return nil, err - } - return tcs, nil -} - -func (t *testCaseDB) GetAll(ctx context.Context, cid, app, tcsType string, anchors bool, offset int, limit int) ([]models.TestCase, error) { - filter := bson.M{"cid": cid, "app_id": app} - if tcsType != "" { - filter["type"] = tcsType - } - findOptions := options.Find() - if !anchors { - findOptions.SetProjection(bson.M{"anchors": 0, "all_keys": 0}) - } - if offset < 0 { - offset = 0 - } - - findOptions.SetSkip(int64(offset)) - findOptions.SetLimit(int64(limit)) - findOptions.SetSort(bson.M{"created": -1}) //reverse sort - - return t.getAll(ctx, filter, findOptions) -} diff --git a/pkg/platform/mgo/teledb.go b/pkg/platform/mgo/teledb.go deleted file mode 100644 index 6cc5d1502..000000000 --- a/pkg/platform/mgo/teledb.go +++ /dev/null @@ -1,66 +0,0 @@ -package mgo - -import ( - "context" - - "github.com/keploy/go-sdk/integrations/kmongo" - "go.mongodb.org/mongo-driver/bson" - "go.mongodb.org/mongo-driver/mongo" - "go.uber.org/zap" -) - -type telemetryDB struct { - c *kmongo.Collection - log *zap.Logger -} - -func (tele *telemetryDB) Count() (int64, error) { - if tele.c == nil { - return 0, nil - } - return tele.c.CountDocuments(context.TODO(), bson.M{}) -} - -func (tele *telemetryDB) Insert(id string) (*mongo.InsertOneResult, error) { - if tele.c == nil { - return nil, nil - } - return tele.c.InsertOne(context.TODO(), bson.D{{Key: "InstallationID", Value: id}}) -} - -func (tele *telemetryDB) Find() string { - if tele.c == nil { - return "" - } - sr := tele.c.FindOne(context.TODO(), bson.M{}) - if sr.Err() != nil { - tele.log.Error("failed to find installationId", zap.Error(sr.Err())) - return "" - } - doc := bson.D{} - err := sr.Decode(&doc) - if err != nil { - tele.log.Error("failed to decode transactionID", zap.Error(err)) - return "" - } - m := doc.Map() - tid, ok := m["InstallationID"].(string) - if !ok { - tele.log.Error("InstallationID not present") - return "" - } - return tid -} - -func NewTelemetryDB(db *mongo.Database, telemetryTable string, enabled bool, logger *zap.Logger) *telemetryDB { - - tele := telemetryDB{ - log: logger, - } - if enabled { - tele.c = kmongo.NewCollection(db.Collection(telemetryTable)) - } - - return &tele - -} diff --git a/pkg/platform/telemetry/service.go b/pkg/platform/telemetry/service.go deleted file mode 100644 index e97a6e2c9..000000000 --- a/pkg/platform/telemetry/service.go +++ /dev/null @@ -1,35 +0,0 @@ -package telemetry - -import ( - // "context" - - // "go.mongodb.org/mongo-driver/bson" - "context" - - - "go.mongodb.org/mongo-driver/mongo" - // "go.uber.org/zap" -) - -type DB interface { - Count() (int64, error) - Insert(id string) (*mongo.InsertOneResult, error) - Find() string -} - -type FS interface { - Get(bool) (string, error) - Set(string) error -} - -type Service interface { - Ping(bool) - Normalize(context.Context) - EditTc(context.Context) - Testrun(int, int,context.Context) - MockTestRun(int, int, context.Context) - RecordedTest(context.Context, int, []string) - RecordedMock(context.Context, string) - DeleteTc(context.Context) - GetApps(int,context.Context) -} diff --git a/pkg/platform/telemetry/telemetry.go b/pkg/platform/telemetry/telemetry.go index bd1e23278..5b2893ec2 100644 --- a/pkg/platform/telemetry/telemetry.go +++ b/pkg/platform/telemetry/telemetry.go @@ -1,212 +1,131 @@ +// Package telemetry provides functionality for telemetry data collection. package telemetry import ( "bytes" - "context" "net/http" "runtime" "time" - "go.keploy.io/server/pkg/models" + "go.keploy.io/server/v2/pkg/models" "go.uber.org/zap" ) +var teleURL = "https://telemetry.keploy.io/analytics" + type Telemetry struct { - db DB Enabled bool OffMode bool logger *zap.Logger InstallationID string - store FS - testExport bool KeployVersion string GlobalMap map[string]interface{} client *http.Client } -func NewTelemetry(col DB, enabled, offMode, testExport bool, store FS, logger *zap.Logger, KeployVersion string, GlobalMap map[string]interface{}) *Telemetry { - - tele := Telemetry{ - Enabled: enabled, - OffMode: offMode, - logger: logger, - db: col, - store: store, - testExport: testExport, - KeployVersion: KeployVersion, - GlobalMap: GlobalMap, - client: &http.Client{Timeout: 10 * time.Second}, +type Options struct { + Enabled bool + Version string + GlobalMap map[string]interface{} + InstallationID string +} + +func NewTelemetry(logger *zap.Logger, opt Options) *Telemetry { + return &Telemetry{ + Enabled: opt.Enabled, + logger: logger, + KeployVersion: opt.Version, + GlobalMap: opt.GlobalMap, + InstallationID: opt.InstallationID, + client: &http.Client{Timeout: 10 * time.Second}, } - return &tele } -func (ac *Telemetry) Ping(isTestMode bool) { - check := false - if !ac.Enabled { +func (tel *Telemetry) Ping() { + if !tel.Enabled { return } - if isTestMode { - check = true - } - go func() { for { - var count int64 - var err error - var id string - - if ac.Enabled && !isTestMode { - if ac.testExport { - // Checking if id is present in hidden keploy-config folder - id, _ = ac.store.Get(true) - count = int64(len(id)) - } else { - count, err = ac.db.Count() - } - } - - if err != nil { - ac.logger.Debug("failed to countDocuments in analytics collection", zap.Error(err)) - } - event := models.TeleEvent{ - EventType: "Ping", - CreatedAt: time.Now().Unix(), - TeleCheck: check, - } - - if count == 0 { - if ac.testExport { - // Checking if id is present in old keploy-config folder - id, _ = ac.store.Get(false) - count = int64(len(id)) - } - if count == 0 { - bin, err := marshalEvent(event, ac.logger) - if err != nil { - break - } - resp, err := http.Post("https://telemetry.keploy.io/analytics", "application/json", bytes.NewBuffer(bin)) - if err != nil { - ac.logger.Debug("failed to send request for analytics", zap.Error(err)) - break - } - - installation_id, err := unmarshalResp(resp, ac.logger) - if err != nil { - break - } - id = installation_id - } - ac.InstallationID = id - if ac.testExport { - ac.store.Set(id) - } else { - ac.db.Insert(id) - } - } else { - ac.SendTelemetry("Ping", context.TODO()) - } + tel.SendTelemetry("Ping") time.Sleep(5 * time.Minute) } }() } -func (ac *Telemetry) Normalize(ctx context.Context) { - ac.SendTelemetry("NormaliseTC", ctx) -} - -func (ac *Telemetry) DeleteTc(ctx context.Context) { - ac.SendTelemetry("DeleteTC", ctx) +func (tel *Telemetry) TestSetRun(success int, failure int, testSet string, runStatus string) { + go tel.SendTelemetry("TestSetRun", map[string]interface{}{"Passed-Tests": success, "Failed-Tests": failure, "Test-Set": testSet, "Run-Status": runStatus}) } -func (ac *Telemetry) EditTc(ctx context.Context) { - ac.SendTelemetry("EditTC", ctx) +func (tel *Telemetry) TestRun(success int, failure int, testSets int, runStatus string) { + go tel.SendTelemetry("TestRun", map[string]interface{}{"Passed-Tests": success, "Failed-Tests": failure, "Test-Sets": testSets, "Run-Status": runStatus}) } -func (ac *Telemetry) Testrun(success int, failure int, ctx context.Context) { - ac.SendTelemetry("TestRun", ctx, map[string]interface{}{"Passed-Tests": success, "Failed-Tests": failure}) +// MockTestRun is Telemetry event for the Mocking feature test run +func (tel *Telemetry) MockTestRun(utilizedMocks int) { + go tel.SendTelemetry("MockTestRun", map[string]interface{}{"Utilized-Mocks": utilizedMocks}) } -// Telemetry event for the Mocking feature test run -func (ac *Telemetry) MockTestRun(success int, failure int, ctx context.Context) { - ac.SendTelemetry("MockTestRun", ctx, map[string]interface{}{"Passed-Mocks": success, "Failed-Mocks": failure}) +// RecordedTestSuite is Telemetry event for the tests and mocks that are recorded +func (tel *Telemetry) RecordedTestSuite(testSet string, testsTotal int, mockTotal map[string]int) { + go tel.SendTelemetry("RecordedTestSuite", map[string]interface{}{"test-set": testSet, "tests": testsTotal, "mocks": mockTotal}) } -// Telemetry event for the tests and mocks that are recorded -func (ac *Telemetry) RecordedTest(ctx context.Context, mockCount int, mockType []string) { - ac.SendTelemetry("RecordedTestAndMocks", ctx, map[string]interface{}{"mockCount": mockCount, "mockType": mockType}) +func (tel *Telemetry) RecordedTestAndMocks() { + go tel.SendTelemetry("RecordedTestAndMocks", map[string]interface{}{"mocks": make(map[string]int)}) } -// Telemetry event for the mocks that are recorded in the mocking feature -func (ac *Telemetry) RecordedMock(ctx context.Context, mockType string) { - ac.SendTelemetry("RecordedMock", ctx, map[string]interface{}{"mockType": mockType}) +// RecordedMocks is Telemetry event for the mocks that are recorded in the mocking feature +func (tel *Telemetry) RecordedMocks(mockTotal map[string]int) { + go tel.SendTelemetry("RecordedMocks", map[string]interface{}{"mocks": mockTotal}) } -func (ac *Telemetry) GetApps(apps int, ctx context.Context) { - ac.SendTelemetry("GetApps", ctx, map[string]interface{}{"Apps": apps}) +func (tel *Telemetry) RecordedTestCaseMock(mockType string) { + go tel.SendTelemetry("RecordedTestCaseMock", map[string]interface{}{"mock": mockType}) } -func (ac *Telemetry) SendTelemetry(eventType string, ctx context.Context, output ...map[string]interface{}) { - - if ac.Enabled { +func (tel *Telemetry) SendTelemetry(eventType string, output ...map[string]interface{}) { + if tel.Enabled { event := models.TeleEvent{ EventType: eventType, CreatedAt: time.Now().Unix(), } - event.Meta = make(map[string]interface{}) if len(output) != 0 { event.Meta = output[0] } - if ac.GlobalMap != nil { - event.Meta["global-map"] = ac.GlobalMap + if tel.GlobalMap != nil { + event.Meta["global-map"] = tel.GlobalMap } - if ac.InstallationID == "" { - id := "" - if ac.testExport { - id, _ = ac.store.Get(true) - } else { - id = ac.db.Find() - } - ac.InstallationID = id - } - event.InstallationID = ac.InstallationID + event.InstallationID = tel.InstallationID event.OS = runtime.GOOS - event.KeployVersion = ac.KeployVersion - bin, err := marshalEvent(event, ac.logger) + event.KeployVersion = tel.KeployVersion + event.Arch = runtime.GOARCH + bin, err := marshalEvent(event, tel.logger) if err != nil { - ac.logger.Debug("failed to marshal event", zap.Error(err)) + tel.logger.Debug("failed to marshal event", zap.Error(err)) return } - req, err := http.NewRequest(http.MethodPost, "https://telemetry.keploy.io/analytics", bytes.NewBuffer(bin)) + req, err := http.NewRequest(http.MethodPost, teleURL, bytes.NewBuffer(bin)) if err != nil { - ac.logger.Debug("failed to create request for analytics", zap.Error(err)) + tel.logger.Debug("failed to create request for analytics", zap.Error(err)) return } req.Header.Set("Content-Type", "application/json; charset=utf-8") - if !ac.OffMode { - req = req.WithContext(ctx) - resp, err := ac.client.Do(req) - if err != nil { - ac.logger.Debug("failed to send request for analytics", zap.Error(err)) - return - } - - unmarshalResp(resp, ac.logger) + resp, err := tel.client.Do(req) + if err != nil { + tel.logger.Debug("failed to send request for analytics", zap.Error(err)) + return + } + _, err = unmarshalResp(resp, tel.logger) + if err != nil { + tel.logger.Debug("failed to unmarshal response", zap.Error(err)) return } - go func() { - resp, err := ac.client.Do(req) - if err != nil { - ac.logger.Debug("failed to send request for analytics", zap.Error(err)) - return - } - unmarshalResp(resp, ac.logger) - }() } } diff --git a/pkg/platform/telemetry/utils.go b/pkg/platform/telemetry/utils.go index d4ba88335..b4229f406 100644 --- a/pkg/platform/telemetry/utils.go +++ b/pkg/platform/telemetry/utils.go @@ -4,10 +4,9 @@ import ( "encoding/json" "errors" "io" - "io/ioutil" "net/http" - "go.keploy.io/server/pkg/models" + "go.keploy.io/server/v2/pkg/models" "go.uber.org/zap" ) @@ -25,27 +24,27 @@ func unmarshalResp(resp *http.Response, log *zap.Logger) (id string, err error) defer func(Body io.ReadCloser) { err = Body.Close() if err != nil { - log.Error("failed to close connecton reader", zap.String("url", "https://telemetry.keploy.io/analytics"), zap.Error(err)) + log.Debug("failed to close connecton reader", zap.String("url", "https://telemetry.keploy.io/analytics"), zap.Error(err)) return } }(resp.Body) var res map[string]string - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { - log.Error("failed to read response from telemetry server", zap.String("url", "https://telemetry.keploy.io/analytics"), zap.Error(err)) + log.Debug("failed to read response from telemetry server", zap.String("url", "https://telemetry.keploy.io/analytics"), zap.Error(err)) return } err = json.Unmarshal(body, &res) if err != nil { - log.Error("failed to read testcases from telemetry server", zap.Error(err)) + log.Debug("failed to read testcases from telemetry server", zap.Error(err)) return } id, ok := res["InstallationID"] if !ok { - log.Error("InstallationID not present") + log.Debug("InstallationID not present") err = errors.New("InstallationID not present") return } diff --git a/pkg/platform/yaml/configdb/db.go b/pkg/platform/yaml/configdb/db.go new file mode 100644 index 000000000..c20ac1dae --- /dev/null +++ b/pkg/platform/yaml/configdb/db.go @@ -0,0 +1,99 @@ +// Package configdb provides functionality for working with keploy configuration databases. +package configdb + +import ( + "context" + "errors" + "fmt" + "io" + "io/fs" + "os" + "path/filepath" + "runtime" + + "go.keploy.io/server/v2/pkg/platform/yaml" + "go.keploy.io/server/v2/utils" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.uber.org/zap" + yamlLib "gopkg.in/yaml.v3" +) + +type ConfigDb struct { + logger *zap.Logger +} + +func UserHomeDir() string { + + configFolder := "/.keploy" + if runtime.GOOS == "windows" { + home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") + if home == "" { + home = os.Getenv("USERPROFILE") + } + return home + configFolder + } + return os.Getenv("HOME") + configFolder +} + +func NewConfigDb(logger *zap.Logger) *ConfigDb { + return &ConfigDb{ + logger: logger, + } +} + +func (cdb *ConfigDb) GetInstallationID(ctx context.Context) (string, error) { + var id string + id = getInstallationFromFile(cdb.logger) + if id == "" { + id = primitive.NewObjectID().String() + err := cdb.setInstallationID(ctx, id) + if err != nil { + return "", fmt.Errorf("failed to set installation id in file. error: %s", err.Error()) + } + } + return id, nil +} + +func getInstallationFromFile(logger *zap.Logger) string { + var ( + path = UserHomeDir() + id = "" + ) + + file, err := os.OpenFile(filepath.Join(path, "installation-id.yaml"), os.O_RDONLY, fs.ModePerm) + if err != nil { + return id + } + defer func() { + if err := file.Close(); err != nil { + utils.LogError(logger, err, "failed to close file") + } + }() + decoder := yamlLib.NewDecoder(file) + err = decoder.Decode(&id) + if errors.Is(err, io.EOF) { + return id + } + if err != nil { + return id + } + return id +} + +func (cdb *ConfigDb) setInstallationID(ctx context.Context, id string) error { + path := UserHomeDir() + data := []byte{} + + d, err := yamlLib.Marshal(&id) + if err != nil { + return fmt.Errorf("failed to marshal document to yaml. error: %s", err.Error()) + } + data = append(data, d...) + err = yaml.WriteFile(ctx, cdb.logger, path, "installation-id", data, false) + if err != nil { + utils.LogError(cdb.logger, err, "failed to write installation id in yaml file") + return err + } + + return nil +} diff --git a/pkg/platform/yaml/mockdb/db.go b/pkg/platform/yaml/mockdb/db.go new file mode 100644 index 000000000..087d2ef11 --- /dev/null +++ b/pkg/platform/yaml/mockdb/db.go @@ -0,0 +1,309 @@ +// Package mockdb provides a mock database implementation. +package mockdb + +import ( + "bytes" + "context" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "sort" + "sync/atomic" + "time" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/pkg/platform/yaml" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + yamlLib "gopkg.in/yaml.v3" +) + +type MockYaml struct { + MockPath string + MockName string + Logger *zap.Logger + idCounter int64 +} + +func New(Logger *zap.Logger, mockPath string, mockName string) *MockYaml { + return &MockYaml{ + MockPath: mockPath, + MockName: mockName, + Logger: Logger, + idCounter: -1, + } +} + +// UpdateMocks deletes the mocks from the mock file with given names +// +// mockNames is a map which contains the name of the mocks as key and a isConfig boolean as value +func (ys *MockYaml) UpdateMocks(ctx context.Context, testSetID string, mockNames map[string]bool) error { + mockFileName := "mocks" + if ys.MockName != "" { + mockFileName = ys.MockName + } + path := filepath.Join(ys.MockPath, testSetID) + ys.Logger.Debug("logging the names of the unused mocks to be removed", zap.Any("mockNames", mockNames), zap.Any("for testset", testSetID), zap.Any("at path", filepath.Join(path, mockFileName+".yaml"))) + + // Read the mocks from the yaml file + mockPath, err := yaml.ValidatePath(filepath.Join(path, mockFileName+".yaml")) + if err != nil { + utils.LogError(ys.Logger, err, "failed to read mocks due to inaccessible path", zap.Any("at path", filepath.Join(path, mockFileName+".yaml"))) + return err + } + if _, err := os.Stat(mockPath); err != nil { + utils.LogError(ys.Logger, err, "failed to find the mocks yaml file") + return err + } + data, err := yaml.ReadFile(ctx, ys.Logger, path, mockFileName) + if err != nil { + utils.LogError(ys.Logger, err, "failed to read the mocks from yaml file", zap.Any("at path", filepath.Join(path, mockFileName+".yaml"))) + return err + } + + // decode the mocks read from the yaml file + dec := yamlLib.NewDecoder(bytes.NewReader(data)) + var mockYamls []*yaml.NetworkTrafficDoc + for { + var doc *yaml.NetworkTrafficDoc + err := dec.Decode(&doc) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + utils.LogError(ys.Logger, err, "failed to decode the yaml file documents", zap.Any("at path", filepath.Join(path, mockFileName+".yaml"))) + return fmt.Errorf("failed to decode the yaml file documents. error: %v", err.Error()) + } + mockYamls = append(mockYamls, doc) + } + mocks, err := decodeMocks(mockYamls, ys.Logger) + if err != nil { + return err + } + var newMocks []*models.Mock + for _, mock := range mocks { + if _, ok := mockNames[mock.Name]; ok { + newMocks = append(newMocks, mock) + continue + } + } + ys.Logger.Debug("logging the names of the used mocks", zap.Any("mockNames", newMocks), zap.Any("for testset", testSetID)) + + // remove the old mock yaml file + err = os.Remove(filepath.Join(path, mockFileName+".yaml")) + if err != nil { + return err + } + + // write the new mocks to the new yaml file + for _, newMock := range newMocks { + mockYaml, err := EncodeMock(newMock, ys.Logger) + if err != nil { + utils.LogError(ys.Logger, err, "failed to encode the mock to yaml", zap.Any("mock", newMock.Name), zap.Any("for testset", testSetID)) + return err + } + data, err = yamlLib.Marshal(&mockYaml) + if err != nil { + utils.LogError(ys.Logger, err, "failed to marshal the mock to yaml", zap.Any("mock", newMock.Name), zap.Any("for testset", testSetID)) + return err + } + err = yaml.WriteFile(ctx, ys.Logger, path, mockFileName, data, true) + if err != nil { + utils.LogError(ys.Logger, err, "failed to write the mock to yaml", zap.Any("mock", newMock.Name), zap.Any("for testset", testSetID)) + return err + } + } + return nil +} + +func (ys *MockYaml) InsertMock(ctx context.Context, mock *models.Mock, testSetID string) error { + mock.Name = fmt.Sprint("mock-", ys.getNextID()) + mockYaml, err := EncodeMock(mock, ys.Logger) + if err != nil { + return err + } + mockPath := filepath.Join(ys.MockPath, testSetID) + mockFileName := ys.MockName + if mockFileName == "" { + mockFileName = "mocks" + } + data, err := yamlLib.Marshal(&mockYaml) + if err != nil { + return err + } + err = yaml.WriteFile(ctx, ys.Logger, mockPath, mockFileName, data, true) + if err != nil { + return err + } + return nil +} + +func (ys *MockYaml) GetFilteredMocks(ctx context.Context, testSetID string, afterTime time.Time, beforeTime time.Time) ([]*models.Mock, error) { + + var tcsMocks = make([]*models.Mock, 0) + var filteredTcsMocks = make([]*models.Mock, 0) + + mockFileName := "mocks" + if ys.MockName != "" { + mockFileName = ys.MockName + } + + path := filepath.Join(ys.MockPath, testSetID) + mockPath, err := yaml.ValidatePath(path + "/" + mockFileName + ".yaml") + if err != nil { + return nil, err + } + + if _, err := os.Stat(mockPath); err == nil { + var mockYamls []*yaml.NetworkTrafficDoc + data, err := yaml.ReadFile(ctx, ys.Logger, path, mockFileName) + if err != nil { + utils.LogError(ys.Logger, err, "failed to read the mocks from config yaml", zap.Any("session", filepath.Base(path))) + return nil, err + } + dec := yamlLib.NewDecoder(bytes.NewReader(data)) + for { + var doc *yaml.NetworkTrafficDoc + err := dec.Decode(&doc) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, fmt.Errorf("failed to decode the yaml file documents. error: %v", err.Error()) + } + mockYamls = append(mockYamls, doc) + } + mocks, err := decodeMocks(mockYamls, ys.Logger) + if err != nil { + utils.LogError(ys.Logger, err, "failed to decode the config mocks from yaml docs", zap.Any("session", filepath.Base(path))) + return nil, err + } + + for _, mock := range mocks { + if mock.Spec.Metadata["type"] != "config" && mock.Kind != "Generic" && mock.Kind != "Postgres" { + tcsMocks = append(tcsMocks, mock) + } + } + } + + filteredTcsMocks, _ = ys.filterByTimeStamp(ctx, tcsMocks, afterTime, beforeTime, ys.Logger) + + sort.SliceStable(filteredTcsMocks, func(i, j int) bool { + return filteredTcsMocks[i].Spec.ReqTimestampMock.Before(filteredTcsMocks[j].Spec.ReqTimestampMock) + }) + + return filteredTcsMocks, nil +} + +func (ys *MockYaml) GetUnFilteredMocks(ctx context.Context, testSetID string, afterTime time.Time, beforeTime time.Time) ([]*models.Mock, error) { + + var configMocks = make([]*models.Mock, 0) + + mockName := "mocks" + if ys.MockName != "" { + mockName = ys.MockName + } + + path := filepath.Join(ys.MockPath, testSetID) + + mockPath, err := yaml.ValidatePath(path + "/" + mockName + ".yaml") + if err != nil { + return nil, err + } + + if _, err := os.Stat(mockPath); err == nil { + var mockYamls []*yaml.NetworkTrafficDoc + data, err := yaml.ReadFile(ctx, ys.Logger, path, mockName) + if err != nil { + utils.LogError(ys.Logger, err, "failed to read the mocks from config yaml", zap.Any("session", filepath.Base(path))) + return nil, err + } + dec := yamlLib.NewDecoder(bytes.NewReader(data)) + for { + var doc *yaml.NetworkTrafficDoc + err := dec.Decode(&doc) + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return nil, fmt.Errorf("failed to decode the yaml file documents. error: %v", err.Error()) + } + mockYamls = append(mockYamls, doc) + } + mocks, err := decodeMocks(mockYamls, ys.Logger) + if err != nil { + utils.LogError(ys.Logger, err, "failed to decode the config mocks from yaml docs", zap.Any("session", filepath.Base(path))) + return nil, err + } + for _, mock := range mocks { + if mock.Spec.Metadata["type"] == "config" || mock.Kind == "Postgres" || mock.Kind == "Generic" { + configMocks = append(configMocks, mock) + } + } + } + + filteredMocks, unfilteredMocks := ys.filterByTimeStamp(ctx, configMocks, afterTime, beforeTime, ys.Logger) + + sort.SliceStable(filteredMocks, func(i, j int) bool { + return filteredMocks[i].Spec.ReqTimestampMock.Before(filteredMocks[j].Spec.ReqTimestampMock) + }) + + sort.SliceStable(unfilteredMocks, func(i, j int) bool { + return unfilteredMocks[i].Spec.ReqTimestampMock.Before(unfilteredMocks[j].Spec.ReqTimestampMock) + }) + + // if len(unfilteredMocks) > 10 { + // unfilteredMocks = unfilteredMocks[:10] + // } + + mocks := append(filteredMocks, unfilteredMocks...) + + return mocks, nil +} + +func (ys *MockYaml) getNextID() int64 { + return atomic.AddInt64(&ys.idCounter, 1) +} + +func (ys *MockYaml) filterByTimeStamp(_ context.Context, m []*models.Mock, afterTime time.Time, beforeTime time.Time, logger *zap.Logger) ([]*models.Mock, []*models.Mock) { + + filteredMocks := make([]*models.Mock, 0) + unfilteredMocks := make([]*models.Mock, 0) + + if afterTime == (time.Time{}) { + return m, unfilteredMocks + } + + if beforeTime == (time.Time{}) { + return m, unfilteredMocks + } + + isNonKeploy := false + + for _, mock := range m { + if mock.Version != "api.keploy.io/v1beta1" && mock.Version != "api.keploy.io/v1beta2" { + isNonKeploy = true + continue + } + if mock.Spec.ReqTimestampMock == (time.Time{}) || mock.Spec.ResTimestampMock == (time.Time{}) { + logger.Debug("request or response timestamp of mock is missing") + mock.TestModeInfo.IsFiltered = true + filteredMocks = append(filteredMocks, mock) + continue + } + + if mock.Spec.ReqTimestampMock.After(afterTime) && mock.Spec.ResTimestampMock.Before(beforeTime) { + mock.TestModeInfo.IsFiltered = true + filteredMocks = append(filteredMocks, mock) + continue + } + mock.TestModeInfo.IsFiltered = false + unfilteredMocks = append(unfilteredMocks, mock) + } + if isNonKeploy { + ys.Logger.Warn("Few mocks in the mock File are not recorded by keploy ignoring them") + } + return filteredMocks, unfilteredMocks +} diff --git a/pkg/platform/yaml/mockdb/util.go b/pkg/platform/yaml/mockdb/util.go new file mode 100644 index 000000000..90212a81a --- /dev/null +++ b/pkg/platform/yaml/mockdb/util.go @@ -0,0 +1,538 @@ +package mockdb + +import ( + "errors" + "strings" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/pkg/platform/yaml" + "go.keploy.io/server/v2/utils" + "go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage" + "go.uber.org/zap" +) + +func EncodeMock(mock *models.Mock, logger *zap.Logger) (*yaml.NetworkTrafficDoc, error) { + yamlDoc := yaml.NetworkTrafficDoc{ + Version: mock.Version, + Kind: mock.Kind, + Name: mock.Name, + ConnectionID: mock.ConnectionID, + } + switch mock.Kind { + case models.Mongo: + requests := []models.RequestYaml{} + for _, v := range mock.Spec.MongoRequests { + req := models.RequestYaml{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + err := req.Message.Encode(v.Message) + if err != nil { + utils.LogError(logger, err, "failed to encode mongo request wiremessage into yaml") + return nil, err + } + requests = append(requests, req) + } + responses := []models.ResponseYaml{} + for _, v := range mock.Spec.MongoResponses { + resp := models.ResponseYaml{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + err := resp.Message.Encode(v.Message) + if err != nil { + utils.LogError(logger, err, "failed to encode mongo response wiremessage into yaml") + return nil, err + } + responses = append(responses, resp) + } + mongoSpec := models.MongoSpec{ + Metadata: mock.Spec.Metadata, + Requests: requests, + Response: responses, + CreatedAt: mock.Spec.Created, + ReqTimestampMock: mock.Spec.ReqTimestampMock, + ResTimestampMock: mock.Spec.ResTimestampMock, + } + + err := yamlDoc.Spec.Encode(mongoSpec) + if err != nil { + utils.LogError(logger, err, "failed to marshal the mongo input-output as yaml") + return nil, err + } + + case models.HTTP: + httpSpec := models.HTTPSchema{ + Metadata: mock.Spec.Metadata, + Request: *mock.Spec.HTTPReq, + Response: *mock.Spec.HTTPResp, + Created: mock.Spec.Created, + ReqTimestampMock: mock.Spec.ReqTimestampMock, + ResTimestampMock: mock.Spec.ResTimestampMock, + } + err := yamlDoc.Spec.Encode(httpSpec) + if err != nil { + utils.LogError(logger, err, "failed to marshal the http input-output as yaml") + return nil, err + } + case models.GENERIC: + genericSpec := models.GenericSchema{ + Metadata: mock.Spec.Metadata, + GenericRequests: mock.Spec.GenericRequests, + GenericResponses: mock.Spec.GenericResponses, + ReqTimestampMock: mock.Spec.ReqTimestampMock, + ResTimestampMock: mock.Spec.ResTimestampMock, + } + err := yamlDoc.Spec.Encode(genericSpec) + if err != nil { + utils.LogError(logger, err, "failed to marshal the generic input-output as yaml") + return nil, err + } + case models.Postgres: + // case models.PostgresV2: + + postgresSpec := models.PostgresSpec{ + Metadata: mock.Spec.Metadata, + PostgresRequests: mock.Spec.PostgresRequests, + PostgresResponses: mock.Spec.PostgresResponses, + ReqTimestampMock: mock.Spec.ReqTimestampMock, + ResTimestampMock: mock.Spec.ResTimestampMock, + } + + err := yamlDoc.Spec.Encode(postgresSpec) + if err != nil { + utils.LogError(logger, err, "failed to marshal the postgres input-output as yaml") + return nil, err + } + case models.GRPC_EXPORT: + gRPCSpec := models.GrpcSpec{ + GrpcReq: *mock.Spec.GRPCReq, + GrpcResp: *mock.Spec.GRPCResp, + ReqTimestampMock: mock.Spec.ReqTimestampMock, + ResTimestampMock: mock.Spec.ResTimestampMock, + } + err := yamlDoc.Spec.Encode(gRPCSpec) + if err != nil { + utils.LogError(logger, err, "failed to marshal gRPC of external call into yaml") + return nil, err + } + case models.SQL: + requests := []models.MysqlRequestYaml{} + for _, v := range mock.Spec.MySQLRequests { + + req := models.MysqlRequestYaml{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + err := req.Message.Encode(v.Message) + if err != nil { + utils.LogError(logger, err, "failed to encode mongo request wiremessage into yaml") + return nil, err + } + requests = append(requests, req) + } + responses := []models.MysqlResponseYaml{} + for _, v := range mock.Spec.MySQLResponses { + resp := models.MysqlResponseYaml{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + err := resp.Message.Encode(v.Message) + if err != nil { + utils.LogError(logger, err, "failed to encode mongo response wiremessage into yaml") + return nil, err + } + responses = append(responses, resp) + } + + sqlSpec := models.MySQLSpec{ + Metadata: mock.Spec.Metadata, + Requests: requests, + Response: responses, + CreatedAt: mock.Spec.Created, + } + err := yamlDoc.Spec.Encode(sqlSpec) + if err != nil { + utils.LogError(logger, err, "failed to marshal the SQL input-output as yaml") + return nil, err + } + default: + utils.LogError(logger, nil, "failed to marshal the recorded mock into yaml due to invalid kind of mock") + return nil, errors.New("type of mock is invalid") + } + + return &yamlDoc, nil +} + +func decodeMocks(yamlMocks []*yaml.NetworkTrafficDoc, logger *zap.Logger) ([]*models.Mock, error) { + mocks := []*models.Mock{} + + for _, m := range yamlMocks { + mock := models.Mock{ + Version: m.Version, + Name: m.Name, + Kind: m.Kind, + ConnectionID: m.ConnectionID, + } + mockCheck := strings.Split(string(m.Kind), "-") + if len(mockCheck) > 1 { + logger.Debug("This dependency does not belong to open source version, will be skipped", zap.String("mock kind:", string(m.Kind))) + continue + } + switch m.Kind { + case models.HTTP: + httpSpec := models.HTTPSchema{} + err := m.Spec.Decode(&httpSpec) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into http mock", zap.Any("mock name", m.Name)) + return nil, err + } + mock.Spec = models.MockSpec{ + Metadata: httpSpec.Metadata, + HTTPReq: &httpSpec.Request, + HTTPResp: &httpSpec.Response, + + Created: httpSpec.Created, + ReqTimestampMock: httpSpec.ReqTimestampMock, + ResTimestampMock: httpSpec.ResTimestampMock, + } + case models.Mongo: + mongoSpec := models.MongoSpec{} + err := m.Spec.Decode(&mongoSpec) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into mongo mock", zap.Any("mock name", m.Name)) + return nil, err + } + + mockSpec, err := decodeMongoMessage(&mongoSpec, logger) + if err != nil { + return nil, err + } + mock.Spec = *mockSpec + case models.GRPC_EXPORT: + grpcSpec := models.GrpcSpec{} + err := m.Spec.Decode(&grpcSpec) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into http mock", zap.Any("mock name", m.Name)) + return nil, err + } + mock.Spec = models.MockSpec{ + GRPCResp: &grpcSpec.GrpcResp, + GRPCReq: &grpcSpec.GrpcReq, + ReqTimestampMock: grpcSpec.ReqTimestampMock, + ResTimestampMock: grpcSpec.ResTimestampMock, + } + case models.GENERIC: + genericSpec := models.GenericSchema{} + err := m.Spec.Decode(&genericSpec) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into generic mock", zap.Any("mock name", m.Name)) + return nil, err + } + mock.Spec = models.MockSpec{ + Metadata: genericSpec.Metadata, + GenericRequests: genericSpec.GenericRequests, + GenericResponses: genericSpec.GenericResponses, + ReqTimestampMock: genericSpec.ReqTimestampMock, + ResTimestampMock: genericSpec.ResTimestampMock, + } + + case models.Postgres: + // case models.PostgresV2: + + PostSpec := models.PostgresSpec{} + err := m.Spec.Decode(&PostSpec) + + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into generic mock", zap.Any("mock name", m.Name)) + return nil, err + } + mock.Spec = models.MockSpec{ + Metadata: PostSpec.Metadata, + // OutputBinary: genericSpec.Objects, + PostgresRequests: PostSpec.PostgresRequests, + PostgresResponses: PostSpec.PostgresResponses, + ReqTimestampMock: PostSpec.ReqTimestampMock, + ResTimestampMock: PostSpec.ResTimestampMock, + } + case models.SQL: + mysqlSpec := models.MySQLSpec{} + err := m.Spec.Decode(&mysqlSpec) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into mysql mock", zap.Any("mock name", m.Name)) + return nil, err + } + + mockSpec, err := decodeMySQLMessage(&mysqlSpec, logger) + if err != nil { + return nil, err + } + mock.Spec = *mockSpec + default: + utils.LogError(logger, nil, "failed to unmarshal a mock yaml doc of unknown type", zap.Any("type", m.Kind)) + continue + } + mocks = append(mocks, &mock) + } + + return mocks, nil +} + +func decodeMySQLMessage(yamlSpec *models.MySQLSpec, logger *zap.Logger) (*models.MockSpec, error) { + mockSpec := models.MockSpec{ + Metadata: yamlSpec.Metadata, + Created: yamlSpec.CreatedAt, + } + requests := []models.MySQLRequest{} + for _, v := range yamlSpec.Requests { + req := models.MySQLRequest{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + switch v.Header.PacketType { + case "HANDSHAKE_RESPONSE": + requestMessage := &models.MySQLHandshakeResponse{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLHandshakeResponse") + return nil, err + } + req.Message = requestMessage + case "MySQLQuery": + requestMessage := &models.MySQLQueryPacket{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLQueryPacket") + return nil, err + } + req.Message = requestMessage + case "COM_STMT_PREPARE": + requestMessage := &models.MySQLComStmtPreparePacket{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLComStmtPreparePacket") + return nil, err + } + req.Message = requestMessage + case "COM_STMT_EXECUTE": + requestMessage := &models.MySQLComStmtExecute{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLComStmtExecute") + return nil, err + } + req.Message = requestMessage + case "COM_STMT_SEND_LONG_DATA": + requestMessage := &models.MySQLComStmtSendLongData{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLCOM_STMT_SEND_LONG_DATA") + return nil, err + } + req.Message = requestMessage + case "COM_STMT_RESET": + requestMessage := &models.MySQLcomStmtReset{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLCOM_STMT_RESET") + return nil, err + } + req.Message = requestMessage + case "COM_STMT_FETCH": + requestMessage := &models.MySQLComStmtFetchPacket{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLComStmtFetchPacket") + return nil, err + } + req.Message = requestMessage + case "COM_STMT_CLOSE": + requestMessage := &models.MySQLComStmtClosePacket{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLComStmtClosePacket") + return nil, err + } + req.Message = requestMessage + case "AUTH_SWITCH_RESPONSE": + requestMessage := &models.AuthSwitchRequestPacket{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLComStmtClosePacket") + return nil, err + } + req.Message = requestMessage + case "COM_CHANGE_USER": + requestMessage := &models.MySQLComChangeUserPacket{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLComChangeUserPacket") + return nil, err + } + req.Message = requestMessage + } + requests = append(requests, req) + } + mockSpec.MySQLRequests = requests + + responses := []models.MySQLResponse{} + for _, v := range yamlSpec.Response { + resp := models.MySQLResponse{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + // decode the yaml document to mysql structs + switch v.Header.PacketType { + case "HANDSHAKE_RESPONSE_OK": + responseMessage := &models.MySQLHandshakeResponseOk{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLHandshakeResponseOk") + return nil, err + } + resp.Message = responseMessage + case "MySQLHandshakeV10": + responseMessage := &models.MySQLHandshakeV10Packet{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLHandshakeV10Packet") + return nil, err + } + resp.Message = responseMessage + case "MySQLOK": + responseMessage := &models.MySQLOKPacket{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLOKPacket") + return nil, err + } + resp.Message = responseMessage + case "COM_STMT_PREPARE_OK": + responseMessage := &models.MySQLStmtPrepareOk{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLStmtPrepareOk") + return nil, err + } + resp.Message = responseMessage + case "RESULT_SET_PACKET": + responseMessage := &models.MySQLResultSet{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLResultSet") + return nil, err + } + resp.Message = responseMessage + case "AUTH_SWITCH_REQUEST": + responseMessage := &models.AuthSwitchRequestPacket{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into AuthSwitchRequestPacket") + return nil, err + } + resp.Message = responseMessage + case "MySQLErr": + responseMessage := &models.MySQLERRPacket{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into MySQLERRPacket") + return nil, err + } + resp.Message = responseMessage + } + responses = append(responses, resp) + } + mockSpec.MySQLResponses = responses + return &mockSpec, nil + +} +func decodeMongoMessage(yamlSpec *models.MongoSpec, logger *zap.Logger) (*models.MockSpec, error) { + mockSpec := models.MockSpec{ + Metadata: yamlSpec.Metadata, + Created: yamlSpec.CreatedAt, + ReqTimestampMock: yamlSpec.ReqTimestampMock, + ResTimestampMock: yamlSpec.ResTimestampMock, + } + + // mongo request + requests := []models.MongoRequest{} + for _, v := range yamlSpec.Requests { + req := models.MongoRequest{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + // decode the yaml document to mongo request wiremessage + switch v.Header.Opcode { + case wiremessage.OpMsg: + requestMessage := &models.MongoOpMessage{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into mongo OpMsg request wiremessage") + return nil, err + } + req.Message = requestMessage + case wiremessage.OpReply: + requestMessage := &models.MongoOpReply{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into mongo OpReply request wiremessage") + return nil, err + } + req.Message = requestMessage + case wiremessage.OpQuery: + requestMessage := &models.MongoOpQuery{} + err := v.Message.Decode(requestMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into mongo OpQuery request wiremessage") + // return fmt.Errorf("failed to decode the mongo OpReply of mock with name: %s. error: %s", doc.Name, err.Error()) + return nil, err + } + req.Message = requestMessage + default: + } + requests = append(requests, req) + } + mockSpec.MongoRequests = requests + + // mongo response + responses := []models.MongoResponse{} + for _, v := range yamlSpec.Response { + resp := models.MongoResponse{ + Header: v.Header, + ReadDelay: v.ReadDelay, + } + // decode the yaml document to mongo response wiremessage + switch v.Header.Opcode { + case wiremessage.OpMsg: + responseMessage := &models.MongoOpMessage{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into mongo OpMsg response wiremessage") + // return fmt.Errorf("failed to decode the mongo OpMsg of mock with name: %s. error: %s", doc.Name, err.Error()) + return nil, err + } + resp.Message = responseMessage + case wiremessage.OpReply: + responseMessage := &models.MongoOpReply{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into mongo OpMsg response wiremessage") + return nil, err + } + resp.Message = responseMessage + case wiremessage.OpQuery: + responseMessage := &models.MongoOpQuery{} + err := v.Message.Decode(responseMessage) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal yml document into mongo OpMsg response wiremessage") + // return fmt.Errorf("failed to decode the mongo OpMsg of mock with name: %s. error: %s", doc.Name, err.Error()) + return nil, err + } + resp.Message = responseMessage + default: + } + responses = append(responses, resp) + } + mockSpec.MongoResponses = responses + return &mockSpec, nil +} diff --git a/pkg/platform/yaml/reportdb/db.go b/pkg/platform/yaml/reportdb/db.go new file mode 100755 index 000000000..06cb4b207 --- /dev/null +++ b/pkg/platform/yaml/reportdb/db.go @@ -0,0 +1,109 @@ +// Package reportdb provides functionality for managing test reports in a database. +package reportdb + +import ( + "bytes" + "context" + "fmt" + "path/filepath" + "sync" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/pkg/platform/yaml" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + yamlLib "gopkg.in/yaml.v3" +) + +type TestReport struct { + tests map[string]map[string][]models.TestResult + m sync.Mutex + Logger *zap.Logger + Path string + Name string +} + +func New(logger *zap.Logger, reportPath string) *TestReport { + return &TestReport{ + tests: make(map[string]map[string][]models.TestResult), + m: sync.Mutex{}, + Logger: logger, + Path: reportPath, + } +} + +func (fe *TestReport) GetAllTestRunIDs(ctx context.Context) ([]string, error) { + return yaml.ReadSessionIndices(ctx, fe.Path, fe.Logger) +} + +func (fe *TestReport) InsertTestCaseResult(_ context.Context, testRunID string, testSetID string, result *models.TestResult) error { + fe.m.Lock() + defer fe.m.Unlock() + + testSet := fe.tests[testRunID] + if testSet == nil { + testSet = make(map[string][]models.TestResult) + testSet[testSetID] = []models.TestResult{*result} + } else { + testSet[testSetID] = append(testSet[testSetID], *result) + } + fe.tests[testRunID] = testSet + return nil +} + +func (fe *TestReport) GetTestCaseResults(_ context.Context, testRunID string, testSetID string) ([]models.TestResult, error) { + testRun, ok := fe.tests[testRunID] + if !ok { + return []models.TestResult{}, fmt.Errorf("%s found no test results for test report with id: %s", utils.Emoji, testRunID) + } + testSetResults, ok := testRun[testSetID] + if !ok { + return []models.TestResult{}, fmt.Errorf("%s found no test results for test set with id: %s", utils.Emoji, testSetID) + } + return testSetResults, nil +} + +func (fe *TestReport) GetReport(ctx context.Context, testRunID string, testSetID string) (*models.TestReport, error) { + path := filepath.Join(fe.Path, testRunID) + reportName := testSetID + "-report" + _, err := yaml.ValidatePath(filepath.Join(path, reportName+".yaml")) + if err != nil { + return nil, err + } + data, err := yaml.ReadFile(ctx, fe.Logger, path, reportName) + if err != nil { + utils.LogError(fe.Logger, err, "failed to read the mocks from config yaml", zap.Any("session", filepath.Base(path))) + return nil, err + } + + decoder := yamlLib.NewDecoder(bytes.NewReader(data)) + var doc models.TestReport + err = decoder.Decode(&doc) + if err != nil { + return &models.TestReport{}, fmt.Errorf("%s failed to decode the yaml file documents. error: %v", utils.Emoji, err.Error()) + } + return &doc, nil +} + +func (fe *TestReport) InsertReport(ctx context.Context, testRunID string, testSetID string, testReport *models.TestReport) error { + + reportPath := filepath.Join(fe.Path, testRunID) + + if testReport.Name == "" { + testReport.Name = testSetID + "-report" + } + + data := []byte{} + d, err := yamlLib.Marshal(&testReport) + if err != nil { + return fmt.Errorf("%s failed to marshal document to yaml. error: %s", utils.Emoji, err.Error()) + } + data = append(data, d...) + + err = yaml.WriteFile(ctx, fe.Logger, reportPath, testReport.Name, data, false) + if err != nil { + utils.LogError(fe.Logger, err, "failed to write the report to yaml", zap.Any("session", filepath.Base(reportPath))) + return err + } + return nil +} diff --git a/pkg/platform/yaml/testdb/db.go b/pkg/platform/yaml/testdb/db.go new file mode 100644 index 000000000..e5c3218de --- /dev/null +++ b/pkg/platform/yaml/testdb/db.go @@ -0,0 +1,118 @@ +// Package testdb provides functionality for working with test databases. +package testdb + +import ( + "context" + "fmt" + "io/fs" + "os" + "path/filepath" + "sort" + "strings" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/pkg/platform/yaml" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + yamlLib "gopkg.in/yaml.v3" +) + +type TestYaml struct { + TcsPath string + logger *zap.Logger +} + +func New(logger *zap.Logger, tcsPath string) *TestYaml { + return &TestYaml{ + TcsPath: tcsPath, + logger: logger, + } +} + +func (ts *TestYaml) InsertTestCase(ctx context.Context, tc *models.TestCase, testSetID string) error { + tcsPath := filepath.Join(ts.TcsPath, testSetID, "tests") + var tcsName string + if tc.Name == "" { + lastIndx, err := yaml.FindLastIndex(tcsPath, ts.logger) + if err != nil { + return err + } + tcsName = fmt.Sprintf("test-%v", lastIndx) + } else { + tcsName = tc.Name + } + yamlTc, err := EncodeTestcase(*tc, ts.logger) + if err != nil { + return err + } + yamlTc.Name = tcsName + data, err := yamlLib.Marshal(&yamlTc) + if err != nil { + return err + } + err = yaml.WriteFile(ctx, ts.logger, tcsPath, tcsName, data, false) + if err != nil { + utils.LogError(ts.logger, err, "failed to write testcase yaml file") + return err + } + ts.logger.Info("🟠 Keploy has captured test cases for the user's application.", zap.String("path", tcsPath), zap.String("testcase name", tcsName)) + return nil +} + +func (ts *TestYaml) GetAllTestSetIDs(ctx context.Context) ([]string, error) { + return yaml.ReadSessionIndices(ctx, ts.TcsPath, ts.logger) +} + +func (ts *TestYaml) GetTestCases(ctx context.Context, testSetID string) ([]*models.TestCase, error) { + path := filepath.Join(ts.TcsPath, testSetID, "tests") + tcs := []*models.TestCase{} + TestPath, err := yaml.ValidatePath(path) + if err != nil { + return nil, err + } + _, err = os.Stat(TestPath) + if err != nil { + ts.logger.Debug("no tests are recorded for the session", zap.String("index", testSetID)) + return nil, nil + } + dir, err := yaml.ReadDir(TestPath, fs.ModePerm) + if err != nil { + utils.LogError(ts.logger, err, "failed to open the directory containing yaml testcases", zap.Any("path", TestPath)) + return nil, err + } + files, err := dir.ReadDir(0) + if err != nil { + utils.LogError(ts.logger, err, "failed to read the file names of yaml testcases", zap.Any("path", TestPath)) + return nil, err + } + for _, j := range files { + if filepath.Ext(j.Name()) != ".yaml" || strings.Contains(j.Name(), "mocks") { + continue + } + + name := strings.TrimSuffix(j.Name(), filepath.Ext(j.Name())) + data, err := yaml.ReadFile(ctx, ts.logger, TestPath, name) + if err != nil { + utils.LogError(ts.logger, err, "failed to read the testcase from yaml") + return nil, err + } + + var testCase *yaml.NetworkTrafficDoc + err = yamlLib.Unmarshal(data, &testCase) + if err != nil { + utils.LogError(ts.logger, err, "failed to unmarshall YAML data") + return nil, err + } + + tc, err := Decode(testCase, ts.logger) + if err != nil { + utils.LogError(ts.logger, err, "failed to decode the testcase") + return nil, err + } + tcs = append(tcs, tc) + } + sort.SliceStable(tcs, func(i, j int) bool { + return tcs[i].HTTPReq.Timestamp.Before(tcs[j].HTTPReq.Timestamp) + }) + return tcs, nil +} diff --git a/pkg/platform/yaml/testdb/util.go b/pkg/platform/yaml/testdb/util.go new file mode 100644 index 000000000..051c602e1 --- /dev/null +++ b/pkg/platform/yaml/testdb/util.go @@ -0,0 +1,274 @@ +package testdb + +import ( + "encoding/json" + "errors" + "fmt" + "net/http" + "net/url" + "reflect" + "regexp" + "strconv" + "strings" + + "go.keploy.io/server/v2/pkg" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/pkg/platform/yaml" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +func EncodeTestcase(tc models.TestCase, logger *zap.Logger) (*yaml.NetworkTrafficDoc, error) { + + header := pkg.ToHTTPHeader(tc.HTTPReq.Header) + curl := pkg.MakeCurlCommand(string(tc.HTTPReq.Method), tc.HTTPReq.URL, pkg.ToYamlHTTPHeader(header), tc.HTTPReq.Body) + doc := &yaml.NetworkTrafficDoc{ + Version: tc.Version, + Kind: tc.Kind, + Name: tc.Name, + Curl: curl, + } + // find noisy fields + m, err := FlattenHTTPResponse(pkg.ToHTTPHeader(tc.HTTPResp.Header), tc.HTTPResp.Body) + if err != nil { + msg := "error in flattening http response" + utils.LogError(logger, err, msg) + } + noise := tc.Noise + + noiseFieldsFound := FindNoisyFields(m, func(_ string, vals []string) bool { + // check if k is date + for _, v := range vals { + if pkg.IsTime(v) { + return true + } + } + + // maybe we need to concatenate the values + return pkg.IsTime(strings.Join(vals, ", ")) + }) + + for _, v := range noiseFieldsFound { + noise[v] = []string{} + } + + switch tc.Kind { + case models.HTTP: + err := doc.Spec.Encode(models.HTTPSchema{ + Request: tc.HTTPReq, + Response: tc.HTTPResp, + Created: tc.Created, + Assertions: map[string]interface{}{ + "noise": noise, + }, + }) + if err != nil { + utils.LogError(logger, err, "failed to encode testcase into a yaml doc") + return nil, err + } + default: + utils.LogError(logger, nil, "failed to marshal the testcase into yaml due to invalid kind of testcase") + return nil, errors.New("type of testcases is invalid") + } + return doc, nil +} + +func FindNoisyFields(m map[string][]string, comparator func(string, []string) bool) []string { + var noise []string + for k, v := range m { + if comparator(k, v) { + noise = append(noise, k) + } + } + return noise +} + +func FlattenHTTPResponse(h http.Header, body string) (map[string][]string, error) { + m := map[string][]string{} + for k, v := range h { + m["header."+k] = []string{strings.Join(v, "")} + } + err := AddHTTPBodyToMap(body, m) + if err != nil { + return m, err + } + return m, nil +} + +func AddHTTPBodyToMap(body string, m map[string][]string) error { + // add body + if json.Valid([]byte(body)) { + var result interface{} + + err := json.Unmarshal([]byte(body), &result) + if err != nil { + return err + } + j := Flatten(result) + for k, v := range j { + nk := "body" + if k != "" { + nk = nk + "." + k + } + m[nk] = v + } + } else { + // add it as raw text + m["body"] = []string{body} + } + return nil +} + +// Flatten takes a map and returns a new one where nested maps are replaced +// by dot-delimited keys. +// examples of valid jsons - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#examples +func Flatten(j interface{}) map[string][]string { + if j == nil { + return map[string][]string{"": {""}} + } + o := make(map[string][]string) + x := reflect.ValueOf(j) + switch x.Kind() { + case reflect.Map: + m, ok := j.(map[string]interface{}) + if !ok { + return map[string][]string{} + } + for k, v := range m { + nm := Flatten(v) + for nk, nv := range nm { + fk := k + if nk != "" { + fk = fk + "." + nk + } + o[fk] = nv + } + } + case reflect.Bool: + o[""] = []string{strconv.FormatBool(x.Bool())} + case reflect.Float64: + o[""] = []string{strconv.FormatFloat(x.Float(), 'E', -1, 64)} + case reflect.String: + o[""] = []string{x.String()} + case reflect.Slice: + child, ok := j.([]interface{}) + if !ok { + return map[string][]string{} + } + for _, av := range child { + nm := Flatten(av) + for nk, nv := range nm { + if ov, exists := o[nk]; exists { + o[nk] = append(ov, nv...) + } else { + o[nk] = nv + } + } + } + default: + fmt.Println(utils.Emoji, "found invalid value in json", j, x.Kind()) + } + return o +} + +func ContainsMatchingURL(urlMethods []string, urlStr string, requestURL string, requestMethod models.Method) (bool, error) { + urlMatched := false + parsedURL, err := url.Parse(requestURL) + if err != nil { + return false, err + } + + // Check for URL path and method + regex, err := regexp.Compile(urlStr) + if err != nil { + return false, err + } + + urlMatch := regex.MatchString(parsedURL.Path) + + if urlMatch && len(urlStr) != 0 { + urlMatched = true + } + + if len(urlMethods) != 0 && urlMatched { + urlMatched = false + for _, method := range urlMethods { + if string(method) == string(requestMethod) { + urlMatched = true + } + } + } + + return urlMatched, nil +} + +func HasBannedHeaders(object map[string]string, bannedHeaders map[string]string) (bool, error) { + for headerName, headerNameValue := range object { + for bannedHeaderName, bannedHeaderValue := range bannedHeaders { + regex, err := regexp.Compile(headerName) + if err != nil { + return false, err + } + + headerNameMatch := regex.MatchString(bannedHeaderName) + regex, err = regexp.Compile(bannedHeaderValue) + if err != nil { + return false, err + } + headerValueMatch := regex.MatchString(headerNameValue) + if headerNameMatch && headerValueMatch { + return true, nil + } + } + } + return false, nil +} + +func Decode(yamlTestcase *yaml.NetworkTrafficDoc, logger *zap.Logger) (*models.TestCase, error) { + tc := models.TestCase{ + Version: yamlTestcase.Version, + Kind: yamlTestcase.Kind, + Name: yamlTestcase.Name, + Curl: yamlTestcase.Curl, + } + switch tc.Kind { + case models.HTTP: + httpSpec := models.HTTPSchema{} + err := yamlTestcase.Spec.Decode(&httpSpec) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into the http testcase") + return nil, err + } + tc.Created = httpSpec.Created + tc.HTTPReq = httpSpec.Request + tc.HTTPResp = httpSpec.Response + tc.Noise = map[string][]string{} + switch reflect.ValueOf(httpSpec.Assertions["noise"]).Kind() { + case reflect.Map: + for k, v := range httpSpec.Assertions["noise"].(map[string]interface{}) { + tc.Noise[k] = []string{} + for _, val := range v.([]interface{}) { + tc.Noise[k] = append(tc.Noise[k], val.(string)) + } + } + case reflect.Slice: + for _, v := range httpSpec.Assertions["noise"].([]interface{}) { + tc.Noise[v.(string)] = []string{} + } + } + // unmarshal its mocks from yaml docs to go struct + case models.GRPC_EXPORT: + grpcSpec := models.GrpcSpec{} + err := yamlTestcase.Spec.Decode(&grpcSpec) + if err != nil { + utils.LogError(logger, err, "failed to unmarshal a yaml doc into the gRPC testcase") + return nil, err + } + tc.GrpcReq = grpcSpec.GrpcReq + tc.GrpcResp = grpcSpec.GrpcResp + default: + utils.LogError(logger, nil, "failed to unmarshal yaml doc of unknown type", zap.Any("type of yaml doc", tc.Kind)) + return nil, errors.New("yaml doc of unknown type") + } + return &tc, nil +} diff --git a/pkg/platform/yaml/utils.go b/pkg/platform/yaml/utils.go new file mode 100755 index 000000000..f4c78ac6e --- /dev/null +++ b/pkg/platform/yaml/utils.go @@ -0,0 +1,237 @@ +// Package yaml provides utility functions for working with YAML files. +package yaml + +import ( + "errors" + "fmt" + "io/fs" + "net/http" + "os" + "path/filepath" + + "strconv" + "strings" + + "go.keploy.io/server/v2/pkg/models" + "go.uber.org/zap" +) + +func CompareHeaders(h1 http.Header, h2 http.Header, res *[]models.HeaderResult, noise map[string]string) bool { + if res == nil { + return false + } + match := true + _, isHeaderNoisy := noise["header"] + for k, v := range h1 { + _, isNoisy := noise[k] + isNoisy = isNoisy || isHeaderNoisy + val, ok := h2[k] + if !isNoisy { + if !ok { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: nil, + }, + }) + } + + match = false + continue + } + if len(v) != len(val) { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: val, + }, + }) + } + match = false + continue + } + for i, e := range v { + if val[i] != e { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: val, + }, + }) + } + match = false + continue + } + } + } + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: true, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: val, + }, + }) + } + } + for k, v := range h2 { + _, isNoisy := noise[k] + isNoisy = isNoisy || isHeaderNoisy + val, ok := h1[k] + if isNoisy && checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: true, + Expected: models.Header{ + Key: k, + Value: val, + }, + Actual: models.Header{ + Key: k, + Value: v, + }, + }) + continue + } + if !ok { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: nil, + }, + Actual: models.Header{ + Key: k, + Value: v, + }, + }) + } + + match = false + } + } + return match +} + +func checkKey(res *[]models.HeaderResult, key string) bool { + for _, v := range *res { + if key == v.Expected.Key { + return false + } + } + return true +} + +func Contains(elems []string, v string) bool { + for _, s := range elems { + if v == s { + return true + } + } + return false +} + +func NewSessionIndex(path string, Logger *zap.Logger) (string, error) { + indx := 0 + dir, err := ReadDir(path, fs.FileMode(os.O_RDONLY)) + if err != nil { + Logger.Debug("creating a folder for the keploy generated testcases", zap.Error(err)) + return fmt.Sprintf("%s%v", models.TestSetPattern, indx), nil + } + + files, err := dir.ReadDir(0) + if err != nil { + return "", err + } + + for _, v := range files { + // fmt.Println("name for the file", v.Name()) + fileName := filepath.Base(v.Name()) + fileNamePackets := strings.Split(fileName, "-") + if len(fileNamePackets) == 3 { + fileIndx, err := strconv.Atoi(fileNamePackets[2]) + if err != nil { + Logger.Debug("failed to convert the index string to integer", zap.Error(err)) + continue + } + if indx < fileIndx+1 { + indx = fileIndx + 1 + } + } + } + return fmt.Sprintf("%s%v", models.TestSetPattern, indx), nil +} + +func ValidatePath(path string) (string, error) { + // Validate the input to prevent directory traversal attack + if strings.Contains(path, "..") { + return "", errors.New("invalid path: contains '..' indicating directory traversal") + } + return path, nil +} + +// FindLastIndex returns the index for the new yaml file by reading the yaml file names in the given path directory +func FindLastIndex(path string, _ *zap.Logger) (int, error) { + dir, err := ReadDir(path, fs.FileMode(os.O_RDONLY)) + if err != nil { + return 1, nil + } + files, err := dir.ReadDir(0) + if err != nil { + return 1, nil + } + + lastIndex := 0 + for _, v := range files { + if v.Name() == "mocks.yaml" || v.Name() == "config.yaml" { + continue + } + fileName := filepath.Base(v.Name()) + fileNameWithoutExt := fileName[:len(fileName)-len(filepath.Ext(fileName))] + fileNameParts := strings.Split(fileNameWithoutExt, "-") + if len(fileNameParts) != 2 || (fileNameParts[0] != "test" && fileNameParts[0] != "report") { + continue + } + indxStr := fileNameParts[1] + indx, err := strconv.Atoi(indxStr) + if err != nil { + continue + } + if indx > lastIndex { + lastIndex = indx + } + } + lastIndex++ + + return lastIndex, nil +} + +func ReadDir(path string, fileMode fs.FileMode) (*os.File, error) { + dir, err := os.OpenFile(path, os.O_RDONLY, fileMode) + if err != nil { + return nil, err + } + return dir, nil +} diff --git a/pkg/platform/yaml/yaml.go b/pkg/platform/yaml/yaml.go new file mode 100755 index 000000000..638369fba --- /dev/null +++ b/pkg/platform/yaml/yaml.go @@ -0,0 +1,211 @@ +package yaml + +import ( + "context" + "errors" + "fmt" + "io" + "io/fs" + "os" + "os/exec" + "path/filepath" + "strings" + + "regexp" + + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + yamlLib "gopkg.in/yaml.v3" +) + +// NetworkTrafficDoc stores the request-response data of a network call (ingress or egress) +type NetworkTrafficDoc struct { + Version models.Version `json:"version" yaml:"version"` + Kind models.Kind `json:"kind" yaml:"kind"` + Name string `json:"name" yaml:"name"` + Spec yamlLib.Node `json:"spec" yaml:"spec"` + Curl string `json:"curl" yaml:"curl,omitempty"` + ConnectionID string `json:"connectionId" yaml:"connectionId,omitempty"` +} + +// ctxReader wraps an io.Reader with a context for cancellation support +type ctxReader struct { + ctx context.Context + r io.Reader +} + +func (cr *ctxReader) Read(p []byte) (n int, err error) { + select { + case <-cr.ctx.Done(): + return 0, cr.ctx.Err() + default: + return cr.r.Read(p) + } +} + +// ctxWriter wraps an io.Writer with a context for cancellation support +type ctxWriter struct { + ctx context.Context + writer io.Writer +} + +func (cw *ctxWriter) Write(p []byte) (n int, err error) { + for len(p) > 0 { + var written int + written, err = cw.writer.Write(p) + n += written + if err != nil { + return n, err + } + p = p[written:] + } + return n, nil +} + +func WriteFile(ctx context.Context, logger *zap.Logger, path, fileName string, docData []byte, isAppend bool) error { + isFileEmpty, err := CreateYamlFile(ctx, logger, path, fileName) + if err != nil { + return err + } + flag := os.O_CREATE | os.O_WRONLY | os.O_TRUNC + if isAppend { + data := []byte("---\n") + if isFileEmpty { + data = []byte{} + } + docData = append(data, docData...) + flag = os.O_CREATE | os.O_WRONLY | os.O_APPEND + } + yamlPath := filepath.Join(path, fileName+".yaml") + file, err := os.OpenFile(yamlPath, flag, fs.ModePerm) + if err != nil { + utils.LogError(logger, err, "failed to open file for writing", zap.String("file", yamlPath)) + return err + } + defer func() { + if err := file.Close(); err != nil { + utils.LogError(logger, err, "failed to close file", zap.String("file", yamlPath)) + } + }() + + cw := &ctxWriter{ + ctx: ctx, + writer: file, + } + + _, err = cw.Write(docData) + if err != nil { + if err == ctx.Err() { + return nil // Ignore context cancellation error + } + utils.LogError(logger, err, "failed to write the yaml document", zap.String("yaml file name", fileName)) + return err + } + return nil +} + +func ReadFile(ctx context.Context, logger *zap.Logger, path, name string) ([]byte, error) { + filePath := filepath.Join(path, name+".yaml") + file, err := os.Open(filePath) + if err != nil { + return nil, fmt.Errorf("failed to read the file: %v", err) + } + + defer func() { + if err := file.Close(); err != nil { + utils.LogError(logger, err, "failed to close file", zap.String("file", filePath)) + } + }() + + cr := &ctxReader{ + ctx: ctx, + r: file, + } + + data, err := io.ReadAll(cr) + if err != nil { + if err == ctx.Err() { + return nil, err // Ignore context cancellation error + } + return nil, fmt.Errorf("failed to read the file: %v", err) + } + return data, nil +} +func validateBasePath(basePath string) error { + var basePathRegex = regexp.MustCompile(`test-set-\d+$`) + if !basePathRegex.MatchString(basePath) { + return errors.New("invalid base path format") + } + return nil +} + +func CreateYamlFile(ctx context.Context, Logger *zap.Logger, path string, fileName string) (bool, error) { + yamlPath, err := ValidatePath(filepath.Join(path, fileName+".yaml")) + if err != nil { + utils.LogError(Logger, err, "failed to validate the yaml file path", zap.String("path directory", path), zap.String("yaml", fileName)) + return false, err + } + if _, err := os.Stat(yamlPath); err != nil { + if ctx.Err() == nil { + err = os.MkdirAll(filepath.Join(path), fs.ModePerm) + if err != nil { + utils.LogError(Logger, err, "failed to create a directory for the yaml file", zap.String("path directory", path), zap.String("yaml", fileName)) + return false, err + } + file, err := os.OpenFile(yamlPath, os.O_CREATE, 0777) // Set file permissions to 777 + if err != nil { + utils.LogError(Logger, err, "failed to create a yaml file", zap.String("path directory", path), zap.String("yaml", fileName)) + return false, err + } + err = file.Close() + if err != nil { + utils.LogError(Logger, err, "failed to close the yaml file", zap.String("path directory", path), zap.String("yaml", fileName)) + return false, err + } + + basePath := path[:strings.LastIndex(path, "/")] + basePath, err = ValidatePath(basePath) + if err != nil { + utils.LogError(Logger, err, "failed to validate the base path", zap.String("path directory", path), zap.String("yaml", fileName)) + return false, err + } + err = validateBasePath(basePath) + if err != nil { + utils.LogError(Logger, err, "failed to validate the base path", zap.String("path directory", path), zap.String("yaml", fileName)) + return false, err + } + + cmd := exec.Command("sudo", "chmod", "-R", "777", basePath) + err = cmd.Run() + if err != nil { + utils.LogError(Logger, err, "failed to change the permissions of the directory", zap.String("path directory", path), zap.String("yaml", fileName)) + return false, err + } + return true, nil + } + return false, err + } + return false, nil +} + +func ReadSessionIndices(_ context.Context, path string, Logger *zap.Logger) ([]string, error) { + var indices []string + dir, err := ReadDir(path, fs.FileMode(os.O_RDONLY)) + if err != nil { + Logger.Debug("creating a folder for the keploy generated testcases", zap.Error(err)) + return indices, nil + } + + files, err := dir.ReadDir(0) + if err != nil { + return indices, err + } + + for _, v := range files { + if v.Name() != "reports" && v.Name() != "testReports" { + indices = append(indices, v.Name()) + } + } + return indices, nil +} diff --git a/pkg/service/README.md b/pkg/service/README.md new file mode 100755 index 000000000..26a04d6be --- /dev/null +++ b/pkg/service/README.md @@ -0,0 +1,5 @@ +# Service Package Documentation + +This package focuses on encapsulating core business operations in a +maintainable and reusable manner. This package calls the `platform` interface methods +to store the output of the service methods. \ No newline at end of file diff --git a/pkg/service/browserMock/browser-mock.go b/pkg/service/browserMock/browser-mock.go deleted file mode 100644 index abd030baa..000000000 --- a/pkg/service/browserMock/browser-mock.go +++ /dev/null @@ -1,32 +0,0 @@ -package browserMock - -import ( - "context" - - "go.keploy.io/server/pkg/models" - "go.uber.org/zap" -) - -func NewBrMockService(c models.BrowserMockDB, log *zap.Logger) *BrowserMock { - return &BrowserMock{ - sdb: c, - log: log, - } -} - -// BrowserMock is a service to read-write mocks during record and replay in Selenium-IDE only. -type BrowserMock struct { - sdb models.BrowserMockDB - log *zap.Logger -} - -func (s *BrowserMock) Put(ctx context.Context, doc models.BrowserMock) error { - if count, err := s.sdb.CountDocs(ctx, doc.AppID, doc.TestName); err == nil && count > 0 { - return s.sdb.UpdateArr(ctx, doc.AppID, doc.TestName, doc) - } - return s.sdb.Put(ctx, doc) -} - -func (s *BrowserMock) Get(ctx context.Context, app string, testName string) ([]models.BrowserMock, error) { - return s.sdb.Get(ctx, app, testName) -} diff --git a/pkg/service/browserMock/service.go b/pkg/service/browserMock/service.go deleted file mode 100644 index 5cc6409ea..000000000 --- a/pkg/service/browserMock/service.go +++ /dev/null @@ -1,12 +0,0 @@ -package browserMock - -import ( - "context" - - "go.keploy.io/server/pkg/models" -) - -type Service interface { - Put(context.Context, models.BrowserMock) error - Get(ctx context.Context, app string, testName string) ([]models.BrowserMock, error) -} diff --git a/pkg/service/mock/mock.go b/pkg/service/mock/mock.go deleted file mode 100644 index 2bd70e934..000000000 --- a/pkg/service/mock/mock.go +++ /dev/null @@ -1,420 +0,0 @@ -package mock - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/url" - "os" - "path/filepath" - "strconv" - "strings" - "sync" - - "github.com/go-test/deep" - "github.com/google/uuid" - grpcMock "go.keploy.io/server/grpc/mock" - proto "go.keploy.io/server/grpc/regression" - - "go.keploy.io/server/grpc/utils" - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" - "go.uber.org/zap" -) - -func NewMockService(mockFS models.MockFS, log *zap.Logger) *Mock { - return &Mock{ - log: log, - mockFS: mockFS, - } -} - -// Mock is a service to read-write mocks during record and replay in unit-tests only. -type Mock struct { - log *zap.Logger - mocks sync.Map - mockFS models.MockFS -} - -func (m *Mock) FileExists(ctx context.Context, path string, overWrite bool) (bool, error) { - exists := m.mockFS.Exists(ctx, path) - if exists { - if !overWrite { - m.log.Error(fmt.Sprint("❌ Yaml file already exists with mock name: ", filepath.Base(path))) - } else { - path := strings.Split(path, "/") - fileName := strings.Split(path[len(path)-1], ".")[0] - - mocks, err := m.GetAll(ctx, strings.Join(path[0:len(path)-1], "/"), fileName) - if err != nil { - return false, err - } - res, err := grpcMock.Decode(mocks) - if err != nil { - return false, err - } - - if _, ok := m.mocks.Load(fileName); ok { - m.mocks.Delete(fileName) - } - m.mocks.Store(fileName, res) - } - - } - return exists, nil -} - -func replaceHttpFields(doc *proto.Mock, replace map[string]string) { - if doc.Kind == string(models.HTTP) { - for k, v := range replace { - fieldType := strings.Split(k, ".")[0] //req, resp, all - fieldValue := strings.Split(k, ".")[1] //header, body, proto_major, proto_minor, method, url - if fieldType == "req" || fieldType == "all" { - switch fieldValue { - case "header": - newHeader := strings.Split(v, "|") //The value of the header is a string of the form "value1|value2" - doc.Spec.Req.Header[strings.Split(k, ".")[2]] = utils.ToStrArr(newHeader) - case "domain": - url, err := url.Parse(doc.Spec.Req.URL) - if err != nil { - fmt.Println("Error while parsing url", err) - } - url.Host = v - doc.Spec.Req.URL = "something" - case "method": - doc.Spec.Req.Method = v - case "proto_major": - protomajor, err := strconv.Atoi(v) - if err != nil { - fmt.Println("Error while converting proto_major to int", err) - } - doc.Spec.Req.ProtoMajor = int64(protomajor) - case "proto_minor": - protominor, err := strconv.Atoi(v) - if err != nil { - fmt.Println("Error while converting proto_minor to int", err) - } - doc.Spec.Req.ProtoMinor = int64(protominor) - } - } - if fieldType == "meta" || fieldType == "all" { - - switch fieldValue { - case "header": - newHeader := strings.Split(v, "|") //The value of the header is a string of the form "value1|value2" - doc.Spec.Req.Header[strings.Split(k, ".")[2]] = utils.ToStrArr(newHeader) - case "domain": - url, err := url.Parse(doc.Spec.Req.URL) - if err != nil { - fmt.Println("Error while parsing url", err) - } - url.Host = v - doc.Spec.Req.URL = "something" - case "method": - doc.Spec.Req.Method = v - case "proto_major": - protomajor, err := strconv.Atoi(v) - if err != nil { - fmt.Println("Error while converting proto_major to int", err) - } - doc.Spec.Req.ProtoMajor = int64(protomajor) - case "proto_minor": - protominor, err := strconv.Atoi(v) - if err != nil { - fmt.Println("Error while converting proto_minor to int", err) - } - doc.Spec.Req.ProtoMinor = int64(protominor) - } - } - } - - } -} - -func (m *Mock) Put(ctx context.Context, path string, doc *proto.Mock, meta interface{}, remove []string, replace map[string]string) error { - doc.Spec = pkg.FilterFields(doc.Spec, remove, m.log).(*proto.Mock_SpecSchema) - // replaceHttpFields(doc, replace) - doc.Spec = pkg.ReplaceFields(doc.Spec, replace, m.log).(*proto.Mock_SpecSchema) - newMock, err := grpcMock.Encode(doc) - if err != nil { - m.log.Error("failed to encode the mock to yaml document", zap.Error(err)) - return err - } - - mocksFromMap, ok := m.mocks.Load(newMock.Name) - var mocks = []*proto.Mock{} - if ok { - mocks = mocksFromMap.([]*proto.Mock) - } - if len(mocks) > 0 { - err := m.isEqual(ctx, mocks[0], doc, path, doc.Name, len(mocks)) - if err == nil { - mocks = mocks[1:] - if len(mocks) > 0 { - m.mocks.Store(doc.Name, mocks) - } else { - m.mocks.Delete(doc.Name) - } - - } else if err != nil && err.Error() == ERR_DEP_REQ_UNEQUAL_REMOVE { - for i := 1; i < len(mocks); i++ { - if mocks[i].Kind == doc.Kind || deep.Equal(mocks[i].Spec.Metadata, doc.Spec.Metadata) == nil && m.compareMockResponses(mocks[i], doc) { - mocks = mocks[i+1:] - if len(mocks) > 0 { - m.mocks.Store(doc.Name, mocks) - } else { - m.mocks.Delete(doc.Name) - } - break - } - } - } else if err != nil && err.Error() != ERR_DEP_REQ_UNEQUAL_INSERT { - return err - } - } else { - err = m.put(ctx, path, newMock, doc.Spec.Metadata) - if err != nil { - return err - } - } - return nil -} - -func (m *Mock) put(ctx context.Context, path string, doc models.Mock, meta interface{}) error { - - isGenerated := false - if doc.Name == "" { - doc.Name = uuid.New().String() - isGenerated = true - } - err := m.mockFS.Write(ctx, path, doc) - if err != nil { - m.log.Error(err.Error()) - } - MockPathStr := fmt.Sprint("\nβœ… Mocks are successfully written in yaml file at path: ", path, "/", doc.Name, ".yaml", "\n") - if isGenerated { - MockConfigStr := fmt.Sprint("\n\n🚨 Note: Please set the mock.Config.Name to auto generated name in your unit test. Ex: \n mock.Config{\n Name: ", doc.Name, "\n }\n") - MockNameStr := fmt.Sprint("\nπŸ’‘ Auto generated name for your mock: ", doc.Name, " for ", doc.Kind, " with meta: {\n", mapToStrLog(meta.(map[string]string)), " }") - m.log.Info(fmt.Sprint(MockNameStr, MockConfigStr, MockPathStr)) - } else { - m.log.Info(MockPathStr) - } - return nil -} - -// GetAll returns an array of mocks which are captured in unit-tests -func (m *Mock) GetAll(ctx context.Context, path string, name string) ([]models.Mock, error) { - arr, err := m.mockFS.Read(ctx, path, name, true) - if err != nil { - m.log.Error("failed to read then yaml file", zap.Any("error", err)) - return nil, err - } - MockPathStr := fmt.Sprint("\nβœ… Mocks are read successfully from yaml file at path: ", path, "/", name, ".yaml", "\n") - m.log.Info(MockPathStr) - - return arr, nil -} - -func (m *Mock) upsert(ctx context.Context, mock *proto.Mock, path, name string, updateCount int) error { - mocks, err := m.mockFS.Read(ctx, path, name, true) - if err != nil { - m.log.Error(err.Error()) - return err - } - newMock, err := grpcMock.Encode(mock) - if err != nil { - m.log.Error(err.Error()) - return err - } - - err = os.Remove(filepath.Join(path, name+".yaml")) - if err != nil { - m.log.Error("failed to remove mocks from", zap.String("file", name), zap.Error(err)) - return err - } - mocks[len(mocks)-updateCount] = newMock - err = m.mockFS.WriteAll(ctx, path, name, mocks) - if err != nil { - m.log.Error("failed to write updated mocks", zap.Error(err)) - return err - } - // for i := 0; i < len(arr)-updateCount; i++ { - // err := m.mockFS.Write(ctx, path, arr[i]) - // if err != nil { - // m.log.Error(err.Error()) - // return err - // } - // } - - return nil -} - -func (m *Mock) insertAt(ctx context.Context, mock *proto.Mock, path, name string, updateCount int) error { - mocks, err := m.mockFS.Read(ctx, path, name, true) - if err != nil { - m.log.Error(err.Error()) - return err - } - newMock, err := grpcMock.Encode(mock) - if err != nil { - m.log.Error(err.Error()) - return err - } - i := len(mocks) - updateCount - - //insert the new mock at index i - mocks = append(mocks, newMock) - copy(mocks[i+1:], mocks[i:]) - mocks[i] = newMock - - // update the yaml file - err = os.Remove(filepath.Join(path, name+".yaml")) - if err != nil { - m.log.Error("failed to remove mocks from", zap.String("file", name), zap.Error(err)) - return err - } - err = m.mockFS.WriteAll(ctx, path, name, mocks) - if err != nil { - m.log.Error("failed to write updated mocks", zap.Error(err)) - return err - } - return nil -} - -func (m *Mock) compareMockResponses(old, new *proto.Mock) bool { - matched := true - - if old.Version != new.Version || old.Name != new.Name { - matched = false - } - switch old.Kind { - case string(models.GENERIC): - if deep.Equal(old.Spec.Objects, new.Spec.Objects) != nil { - matched = false - } - case string(models.HTTP): - // old.Spec.Res.ProtoMinor = 0 - // if deep.Equal(old.Spec.Assertions, new.Spec.Assertions) != nil || - if old.Spec.Res.StatusCode != new.Spec.Res.StatusCode { - matched = false - } - var ( - bodyNoise []string - headerNoise = map[string]string{} - ) - assertions := utils.GetStringMap(old.Spec.Assertions) - for _, n := range assertions["noise"] { - a := strings.Split(n, ".") - if len(a) > 1 && a[0] == "body" { - x := strings.Join(a[1:], ".") - bodyNoise = append(bodyNoise, x) - } else if a[0] == "header" { - // if len(a) == 2 { - // headerNoise[a[1]] = a[1] - // continue - // } - headerNoise[a[len(a)-1]] = a[len(a)-1] - // headerNoise[a[0]] = a[0] - } - } - if !pkg.Contains(assertions["noise"], "body") { - bodyType := models.BodyTypePlain - if json.Valid([]byte(new.Spec.Res.Body)) != json.Valid([]byte(old.Spec.Res.Body)) { - matched = false - } - if json.Valid([]byte(old.Spec.Res.Body)) { - bodyType = models.BodyTypeJSON - } - - if bodyType == models.BodyTypeJSON { - _, _, pass, err := pkg.Match(old.Spec.Res.Body, new.Spec.Res.Body, bodyNoise, m.log) - if err != nil || !pass { - matched = false - } - } else { - if old.Spec.Res.Body != new.Spec.Res.Body { - matched = false - } - } - } - - hRes := &[]models.HeaderResult{} - - if !pkg.CompareHeaders(utils.GetHttpHeader(old.Spec.Res.Header), utils.GetHttpHeader(new.Spec.Res.Header), hRes, headerNoise) { - matched = false - } - case string(models.SQL): - if deep.Equal(old.Spec, new.Spec) != nil { - matched = false - } - } - return matched -} - -func (m *Mock) trimMocks(ctx context.Context, mocks []models.Mock, path, name string, fromIndex, toIndex int) error { - mocks = append(mocks[0:fromIndex], mocks[toIndex:]...) - - err := os.Remove(filepath.Join(path, name+".yaml")) - if err != nil { - m.log.Error("failed to remove mocks from", zap.String("file", name), zap.Error(err)) - return err - } - err = m.mockFS.WriteAll(ctx, path, name, mocks) - if err != nil { - m.log.Error("failed to write updated mocks", zap.Error(err)) - return err - } - return nil -} - -func (m *Mock) isEqual(ctx context.Context, old, new *proto.Mock, path, name string, updateCount int) error { - - if old.Kind != new.Kind || deep.Equal(old.Spec.Metadata, new.Spec.Metadata) != nil { - mArr, err := m.mockFS.Read(ctx, path, name, true) - if err != nil { - m.log.Error(err.Error()) - return err - } - mocks, err := grpcMock.Decode(mArr) - if err != nil { - m.log.Error(err.Error()) - return err - } - - for i := len(mocks) - updateCount + 1; i < len(mocks); i++ { - if mocks[i].Kind == new.Kind && deep.Equal(mocks[i].Spec.Metadata, new.Spec.Metadata) == nil && m.compareMockResponses(mocks[i], new) { - err := m.trimMocks(ctx, mArr, path, name, len(mocks)-updateCount, i) - if err != nil { - return err - } - return errors.New(ERR_DEP_REQ_UNEQUAL_REMOVE) - } - } - - err = m.insertAt(ctx, new, path, name, updateCount) - if err != nil { - return err - } - - m.log.Info("Request of dmocks not matches: ", zap.Any("", old.Kind), zap.Any("", new.Kind)) - return errors.New(ERR_DEP_REQ_UNEQUAL_INSERT) - } - - matched := m.compareMockResponses(old, new) - if !matched { - err := m.upsert(ctx, new, path, name, updateCount) - if err != nil { - return err - } - } - return nil -} - -func mapToStrLog(meta map[string]string) string { - res := "" - for k, v := range meta { - res += " " + k + ": " + v + "\n" - } - return res -} diff --git a/pkg/service/mock/mock_test.go b/pkg/service/mock/mock_test.go deleted file mode 100644 index 11819ed10..000000000 --- a/pkg/service/mock/mock_test.go +++ /dev/null @@ -1,509 +0,0 @@ -package mock - -import ( - "context" - "errors" - "os" - "testing" - "time" - - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/pkg/models" - mockPlatform "go.keploy.io/server/pkg/platform/fs" - "go.uber.org/zap" -) - -var ( - logger *zap.Logger - path string - mockSrv *Mock - err error -) - -func TestMain(m *testing.M) { - logger, _ = zap.NewProduction() - defer logger.Sync() - path, err = os.Getwd() - if err != nil { - logger.Error("failed to get the current absolute path", zap.Error(err)) - } - path += "/mocks" - - mockFS := mockPlatform.NewMockExportFS(false) - mockSrv = NewMockService(mockFS, logger) - m.Run() - tearDown() -} - -func TestService(t *testing.T) { - - for _, tt := range []struct { - input struct { - doc *proto.Mock - meta interface{} - name string - appendDocs []*proto.Mock - remove []string - replace map[string]string - } - result struct { - putErr error - getAllErr error - existsErr error - FinalErr []error - } - }{ - // 1. Write a mock of SQL. - // 2. Update the writen output in yaml to new output from appendDocs array - { - input: struct { - doc *proto.Mock - meta interface{} - name string - appendDocs []*proto.Mock - remove []string - replace map[string]string - }{ - name: "mock-1", - doc: &proto.Mock{ - Version: string(models.V1Beta2), - Name: "mock-1", - Kind: string(models.SQL), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "name": "SQL", - "operation": "QueryContext.Close", - "type": "SQL_DB", - }, - Type: "table", - Table: &proto.Table{ - Cols: []*proto.SqlCol{ - { - Name: "total", - Type: "int64", - Precision: 0, - Scale: 0, - }, - { - Name: "id", - Type: "int64", - Precision: 0, - Scale: 0, - }, - }, - Rows: []string{"[`5` | `1` | ]"}, - }, - Int: 0, - Err: []string{"nil", "nil"}, - }, - }, - meta: map[string]string{ - "name": "SQL", - "operation": "QueryContext.Close", - "type": "SQL_DB", - }, - appendDocs: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-1", - Kind: string(models.SQL), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "name": "SQL", - "operation": "QueryContext.Close", - "type": "SQL_DB", - }, - Type: "table", - Table: &proto.Table{ - Cols: []*proto.SqlCol{ - { - Name: "total", - Type: "int64", - Precision: 0, - Scale: 0, - }, - { - Name: "id", - Type: "int64", - Precision: 0, - Scale: 0, - }, - }, - Rows: []string{"[`2` | `1` | ]"}, - }, - Int: 0, - Err: []string{"nil", "nil"}, - }, - }, - }, - }, - result: struct { - putErr error - getAllErr error - existsErr error - FinalErr []error - }{ - putErr: nil, - getAllErr: nil, - existsErr: nil, - FinalErr: []error{nil}, - }, - }, - // Attempt to write mock of invalid kind which fails with expected error - { - input: struct { - doc *proto.Mock - meta interface{} - name string - appendDocs []*proto.Mock - remove []string - replace map[string]string - }{ - name: "mock-2", - doc: &proto.Mock{ - Version: string(models.V1Beta2), - Name: "mock-2", - Kind: "Invalid", - }, - appendDocs: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-2", - Kind: "Invalid", - }, - }, - }, - result: struct { - putErr error - getAllErr error - existsErr error - FinalErr []error - }{ - putErr: errors.New("mock with name mock-2 is not of a valid kind"), - getAllErr: errors.New("open " + path + "/mock-2.yaml: no such file or directory"), - existsErr: nil, - FinalErr: []error{errors.New("mock with name mock-2 is not of a valid kind")}, - }, - }, - // 1. Writes mock of kind Http with binary request/response body (valid utf-8 encoded) - // 2. Adds a SQL mock at 0th position in mock-3.yaml file. This runs insertAt function - { - input: struct { - doc *proto.Mock - meta interface{} - name string - appendDocs []*proto.Mock - remove []string - replace map[string]string - }{ - name: "mock-3", - doc: &proto.Mock{ - Version: string(models.V1Beta2), - Name: "mock-3", - Kind: string(models.HTTP), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "type": "HTTP", - "method": "POST", - }, - Req: &proto.HttpReq{ - Method: "POST", - ProtoMajor: 0, - ProtoMinor: 0, - URL: "https://youtube.com/url", - BodyData: []byte("sample request data"), - Body: "sample request data", - Header: map[string]*proto.StrArr{ - "Accept": {Value: []string{"*/*"}}, - "Content-Length": {Value: []string{"28"}}, - "Content-Type": {Value: []string{"application/json"}}, - }, - }, - Res: &proto.HttpResp{ - StatusCode: 200, - Header: map[string]*proto.StrArr{ - "Connection": {Value: []string{"Close"}}, - "Content-Length": {Value: []string{"16"}}, - "Content-Type": {Value: []string{"application/json"}}, - }, - BodyData: []byte(`{"message": "passed"}`), - Body: `{"message": "passed"}`, - }, - Created: time.Now().Unix(), - Objects: []*proto.Mock_Object{}, - }, - }, - remove: []string{"all.header.Content-Type", "invalid_format"}, - replace: map[string]string{ - "header.Accept": "all", - "domain": "google.com", - "method": "PATCH", - "proto_major": "0", - "proto_minor": "0", - "header": "Invalid_format", // format should header. - "invalid_field": "val", - }, - appendDocs: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-3", - Kind: string(models.SQL), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "name": "SQL", - "operation": "QueryContext.Close", - "type": "SQL_DB", - }, - Type: "table", - Table: &proto.Table{ - Cols: []*proto.SqlCol{ - { - Name: "total", - Type: "int64", - Precision: 0, - Scale: 0, - }, - { - Name: "id", - Type: "int64", - Precision: 0, - Scale: 0, - }, - }, - Rows: []string{"[`5` | `1` | ]"}, - }, - Int: 0, - Err: []string{"nil", "nil"}, - }, - }, - { - Version: string(models.V1Beta2), - Name: "mock-3", - Kind: string(models.HTTP), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "type": "HTTP", - "method": "POST", - }, - Req: &proto.HttpReq{ - Method: "POST", - ProtoMajor: 0, - ProtoMinor: 0, - URL: "/url", - BodyData: []byte("sample request data"), - Body: "sample request data", - Header: map[string]*proto.StrArr{ - "Accept": {Value: []string{"*/*"}}, - }, - }, - Res: &proto.HttpResp{ - StatusCode: 200, - Header: map[string]*proto.StrArr{ - "Connection": {Value: []string{"Close"}}, - }, - BodyData: []byte(`{"message": "passed"}`), - Body: `{"message": "passed"}`, - }, - Created: time.Now().Unix(), - Objects: []*proto.Mock_Object{}, - }, - }, - }, - }, - result: struct { - putErr error - getAllErr error - existsErr error - FinalErr []error - }{ - putErr: nil, - FinalErr: []error{nil, nil}, - }, - }, - // 1. Write yaml of kind http which contains binary request-response body(not in utf-8 encoded) - // 2. Attempts to rewrite the same mock again. But the mock-4.yaml is not edited. - { - input: struct { - doc *proto.Mock - meta interface{} - name string - appendDocs []*proto.Mock - remove []string - replace map[string]string - }{ - name: "mock-4", - replace: map[string]string{ - "proto_major": "xyz", - "proto_minor": "xyz", - "domain": "google.com", - }, - doc: &proto.Mock{ - Version: string(models.V1Beta2), - Name: "mock-4", - Kind: string(models.HTTP), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "type": "HTTP", - "method": "POST", - }, - Req: &proto.HttpReq{ - Method: "POST", - ProtoMajor: 0, - ProtoMinor: 0, - URL: `&www.example:.com/file[/].html`, // invalid URL for url parser error handling - BodyData: []byte{0x80, 0x81, 0x82, 0x83}, - Header: map[string]*proto.StrArr{ - "Accept": {Value: []string{"*/*"}}, - "Connect": {Value: []string{"alive"}}, - }, - }, - Res: &proto.HttpResp{ - StatusCode: 200, - Header: map[string]*proto.StrArr{ - "Connection": {Value: []string{"Close"}}, - }, - BodyData: []byte{0x80, 0x81, 0x82, 0x83}, - }, - Created: time.Now().Unix(), - Objects: []*proto.Mock_Object{}, - Assertions: map[string]*proto.StrArr{ - "noise": {Value: []string{"header.Connect"}}, - }, - }, - }, - appendDocs: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-4", - Kind: string(models.HTTP), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "type": "HTTP", - "method": "POST", - }, - Req: &proto.HttpReq{ - Method: "POST", - ProtoMajor: 0, - ProtoMinor: 0, - URL: "/url", - BodyData: []byte{0x80, 0x81, 0x82, 0x83}, - Header: map[string]*proto.StrArr{ - "Accept": {Value: []string{"*/*"}}, - "Connect": {Value: []string{"alive"}}, - }, - }, - Res: &proto.HttpResp{ - StatusCode: 200, - Header: map[string]*proto.StrArr{ - "Connection": {Value: []string{"Close"}}, - }, - BodyData: []byte{0x80, 0x81, 0x82, 0x83}, - }, - Created: time.Now().Unix(), - Objects: []*proto.Mock_Object{}, - Assertions: map[string]*proto.StrArr{ - "noise": {Value: []string{"header.Connect"}}, - }, - }, - }, - }, - }, - result: struct { - putErr error - getAllErr error - existsErr error - FinalErr []error - }{ - putErr: nil, - FinalErr: []error{nil}, - }, - }, - // To delete unwanted mocks from yaml docs. This testcase will run - // trimMocks function for mock-3.yaml - { - input: struct { - doc *proto.Mock - meta interface{} - name string - appendDocs []*proto.Mock - remove []string - replace map[string]string - }{ - name: "mock-3", - appendDocs: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-3", - Kind: string(models.HTTP), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "type": "HTTP", - "method": "POST", - }, - Req: &proto.HttpReq{ - Method: "POST", - ProtoMajor: 0, - ProtoMinor: 0, - URL: "/url", - BodyData: []byte("sample request data"), - Body: "sample request data", - Header: map[string]*proto.StrArr{ - "Accept": {Value: []string{"*/*"}}, - }, - }, - Res: &proto.HttpResp{ - StatusCode: 200, - Header: map[string]*proto.StrArr{ - "Connection": {Value: []string{"Close"}}, - }, - BodyData: []byte(`{"message": "passed"}`), - Body: `{"message": "passed"}`, - }, - Created: time.Now().Unix(), - Objects: []*proto.Mock_Object{}, - }, - }, - }, - }, - result: struct { - putErr error - getAllErr error - existsErr error - FinalErr []error - }{ - putErr: nil, - FinalErr: []error{nil}, - }, - }, - } { - var actErr error - if tt.input.doc != nil { - actErr = mockSrv.Put(context.Background(), path, tt.input.doc, tt.input.meta, tt.input.remove, tt.input.replace) - if (actErr == nil && tt.result.putErr != nil) || (actErr != nil && tt.result.putErr == nil) || (actErr != nil && tt.result.putErr != nil && actErr.Error() != tt.result.putErr.Error()) { - t.Fatal("test failed at Put", "Expected error", tt.result.putErr, "Actual error", actErr) - } - } - - _, actErr = mockSrv.GetAll(context.Background(), path, tt.input.name) - if (actErr == nil && tt.result.getAllErr != nil) || (actErr != nil && tt.result.getAllErr == nil) || (actErr != nil && tt.result.getAllErr != nil && actErr.Error() != tt.result.getAllErr.Error()) { - t.Fatal("test failed at GetAll", "Expected error", tt.result.getAllErr, "Actual error", actErr) - } - - _, actErr = mockSrv.FileExists(context.Background(), path+"/"+tt.input.name+".yaml", true) - if (actErr == nil && tt.result.existsErr != nil) || (actErr != nil && tt.result.existsErr == nil) || (actErr != nil && tt.result.existsErr != nil && actErr.Error() != tt.result.existsErr.Error()) { - t.Fatal("test failed at FileExists", "Expected error", tt.result.getAllErr, "Actual error", actErr) - } - for i, v := range tt.input.appendDocs { - actErr = mockSrv.Put(context.Background(), path, v, tt.input.meta, []string{}, map[string]string{}) - if (actErr == nil && tt.result.FinalErr[i] != nil) || (actErr != nil && tt.result.FinalErr[i] == nil) || (actErr != nil && tt.result.FinalErr[i] != nil && actErr.Error() != tt.result.FinalErr[i].Error()) { - t.Fatal("test failed at Put after FileExists", "Expected error", tt.result.putErr, "Actual error", actErr) - } - } - } -} - -func tearDown() { - if _, err := os.ReadDir("mocks"); err == nil { - os.RemoveAll("mocks") - } -} diff --git a/pkg/service/mock/service.go b/pkg/service/mock/service.go deleted file mode 100644 index a96344e70..000000000 --- a/pkg/service/mock/service.go +++ /dev/null @@ -1,20 +0,0 @@ -package mock - -import ( - "context" - - proto "go.keploy.io/server/grpc/regression" - - "go.keploy.io/server/pkg/models" -) - -const ( - ERR_DEP_REQ_UNEQUAL_INSERT string = "the stored external dependency output is not for the current dependency request call. Insert the new mock" - ERR_DEP_REQ_UNEQUAL_REMOVE string = "a set of dependency calls are removed. Remove the adjacent set of mocks from the mock file" -) - -type Service interface { - Put(ctx context.Context, path string, doc *proto.Mock, meta interface{}, remove []string, replace map[string]string) error - GetAll(ctx context.Context, path string, name string) ([]models.Mock, error) - FileExists(ctx context.Context, path string, overWrite bool) (bool, error) -} diff --git a/pkg/service/record/record.go b/pkg/service/record/record.go new file mode 100755 index 000000000..29b66da99 --- /dev/null +++ b/pkg/service/record/record.go @@ -0,0 +1,311 @@ +// Package record provides functionality for recording and managing test cases and mocks. +package record + +import ( + "context" + "errors" + "fmt" + "time" + + "go.keploy.io/server/v2/config" + "go.keploy.io/server/v2/pkg" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" +) + +type recorder struct { + logger *zap.Logger + testDB TestDB + mockDB MockDB + telemetry Telemetry + instrumentation Instrumentation + config config.Config +} + +func New(logger *zap.Logger, testDB TestDB, mockDB MockDB, telemetry Telemetry, instrumentation Instrumentation, config config.Config) Service { + return &recorder{ + logger: logger, + testDB: testDB, + mockDB: mockDB, + telemetry: telemetry, + instrumentation: instrumentation, + config: config, + } +} + +func (r *recorder) Start(ctx context.Context) error { + + // creating error group to manage proper shutdown of all the go routines and to propagate the error to the caller + errGrp, _ := errgroup.WithContext(ctx) + ctx = context.WithValue(ctx, models.ErrGroupKey, errGrp) + + runAppErrGrp, _ := errgroup.WithContext(ctx) + runAppCtx := context.WithoutCancel(ctx) + runAppCtx, runAppCtxCancel := context.WithCancel(runAppCtx) + + hookErrGrp, _ := errgroup.WithContext(ctx) + hookCtx := context.WithoutCancel(ctx) + hookCtx, hookCtxCancel := context.WithCancel(hookCtx) + hookCtx = context.WithValue(hookCtx, models.ErrGroupKey, hookErrGrp) + + var stopReason string + + // defining all the channels and variables required for the record + var runAppError models.AppError + var appErrChan = make(chan models.AppError, 1) + var incomingChan <-chan *models.TestCase + var outgoingChan <-chan *models.Mock + var insertTestErrChan = make(chan error, 10) + var insertMockErrChan = make(chan error, 10) + var appID uint64 + var newTestSetID string + var testCount = 0 + var mockCountMap = make(map[string]int) + + // defering the stop function to stop keploy in case of any error in record or in case of context cancellation + defer func() { + select { + case <-ctx.Done(): + r.telemetry.RecordedTestSuite(newTestSetID, testCount, mockCountMap) + default: + err := utils.Stop(r.logger, stopReason) + if err != nil { + utils.LogError(r.logger, err, "failed to stop recording") + } + } + runAppCtxCancel() + err := runAppErrGrp.Wait() + if err != nil { + utils.LogError(r.logger, err, "failed to stop application") + } + hookCtxCancel() + err = hookErrGrp.Wait() + if err != nil { + utils.LogError(r.logger, err, "failed to stop hooks") + } + err = errGrp.Wait() + if err != nil { + utils.LogError(r.logger, err, "failed to stop recording") + } + }() + + defer close(appErrChan) + defer close(insertTestErrChan) + defer close(insertMockErrChan) + + testSetIDs, err := r.testDB.GetAllTestSetIDs(ctx) + if err != nil { + stopReason = "failed to get testSetIds" + utils.LogError(r.logger, err, stopReason) + return fmt.Errorf(stopReason) + } + + newTestSetID = pkg.NewID(testSetIDs, models.TestSetPattern) + + // setting up the environment for recording + appID, err = r.instrumentation.Setup(ctx, r.config.Command, models.SetupOptions{Container: r.config.ContainerName, DockerNetwork: r.config.NetworkName, DockerDelay: r.config.BuildDelay}) + if err != nil { + stopReason = "failed setting up the environment" + utils.LogError(r.logger, err, stopReason) + return fmt.Errorf(stopReason) + } + + // checking for context cancellation as we don't want to start the hooks and proxy if the context is cancelled + select { + case <-ctx.Done(): + return nil + default: + // Starting the hooks and proxy + err = r.instrumentation.Hook(hookCtx, appID, models.HookOptions{Mode: models.MODE_RECORD}) + if err != nil { + stopReason = "failed to start the hooks and proxy" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + } + + // fetching test cases and mocks from the application and inserting them into the database + incomingChan, err = r.instrumentation.GetIncoming(ctx, appID, models.IncomingOptions{}) + if err != nil { + stopReason = "failed to get incoming frames" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + + errGrp.Go(func() error { + for testCase := range incomingChan { + err := r.testDB.InsertTestCase(ctx, testCase, newTestSetID) + if err != nil { + if err == context.Canceled { + continue + } + insertTestErrChan <- err + } else { + testCount++ + r.telemetry.RecordedTestAndMocks() + } + } + return nil + }) + + outgoingChan, err = r.instrumentation.GetOutgoing(ctx, appID, models.OutgoingOptions{}) + if err != nil { + stopReason = "failed to get outgoing frames" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + errGrp.Go(func() error { + for mock := range outgoingChan { + err := r.mockDB.InsertMock(ctx, mock, newTestSetID) + if err != nil { + if err == context.Canceled { + continue + } + insertMockErrChan <- err + } else { + mockCountMap[mock.GetKind()]++ + r.telemetry.RecordedTestCaseMock(mock.GetKind()) + } + } + return nil + }) + + // running the user application + runAppErrGrp.Go(func() error { + runAppError = r.instrumentation.Run(runAppCtx, appID, models.RunOptions{}) + if runAppError.AppErrorType == models.ErrCtxCanceled { + return nil + } + appErrChan <- runAppError + return nil + }) + + // setting a timer for recording + if r.config.Record.RecordTimer != 0 { + errGrp.Go(func() error { + r.logger.Info("Setting a timer of " + r.config.Record.RecordTimer.String() + " for recording") + timer := time.After(r.config.Record.RecordTimer) + select { + case <-timer: + r.logger.Warn("Time up! Stopping keploy") + err := utils.Stop(r.logger, "Time up! Stopping keploy") + if err != nil { + utils.LogError(r.logger, err, "failed to stop recording") + return errors.New("failed to stop recording") + } + case <-ctx.Done(): + return nil + } + return nil + }) + } + + // Waiting for the error to occur in any of the go routines + select { + case appErr := <-appErrChan: + switch appErr.AppErrorType { + case models.ErrCommandError: + stopReason = "error in running the user application, hence stopping keploy" + case models.ErrUnExpected: + stopReason = "user application terminated unexpectedly hence stopping keploy, please check application logs if this behaviour is not expected" + case models.ErrInternal: + stopReason = "internal error occured while hooking into the application, hence stopping keploy" + case models.ErrAppStopped: + stopReason = "user application terminated unexpectedly hence stopping keploy, please check application logs if this behaviour is not expected" + r.logger.Warn(stopReason, zap.Error(appErr)) + return nil + case models.ErrCtxCanceled: + return nil + default: + stopReason = "unknown error recieved from application, hence stopping keploy" + } + + case err = <-insertTestErrChan: + stopReason = "error while inserting test case into db, hence stopping keploy" + case err = <-insertMockErrChan: + stopReason = "error while inserting mock into db, hence stopping keploy" + case <-ctx.Done(): + return nil + } + utils.LogError(r.logger, err, stopReason) + return fmt.Errorf(stopReason) +} + +func (r *recorder) StartMock(ctx context.Context) error { + g, ctx := errgroup.WithContext(ctx) + ctx = context.WithValue(ctx, models.ErrGroupKey, g) + var stopReason string + defer func() { + select { + case <-ctx.Done(): + break + default: + err := utils.Stop(r.logger, stopReason) + if err != nil { + utils.LogError(r.logger, err, "failed to stop recording") + } + } + err := g.Wait() + if err != nil { + utils.LogError(r.logger, err, "failed to stop recording") + } + }() + var outgoingChan <-chan *models.Mock + var insertMockErrChan = make(chan error) + + appID, err := r.instrumentation.Setup(ctx, r.config.Command, models.SetupOptions{Container: r.config.ContainerName, DockerNetwork: r.config.NetworkName, DockerDelay: r.config.BuildDelay}) + if err != nil { + stopReason = "failed to exeute mock record due to error while setting up the environment" + utils.LogError(r.logger, err, stopReason) + return fmt.Errorf(stopReason) + } + err = r.instrumentation.Hook(ctx, appID, models.HookOptions{Mode: models.MODE_RECORD}) + if err != nil { + stopReason = "failed to start the hooks and proxy" + utils.LogError(r.logger, err, stopReason) + return fmt.Errorf(stopReason) + } + + outgoingChan, err = r.instrumentation.GetOutgoing(ctx, appID, models.OutgoingOptions{}) + if err != nil { + stopReason = "failed to get outgoing frames" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + g.Go(func() error { + for mock := range outgoingChan { + mock := mock // capture range variable + g.Go(func() error { + err := r.mockDB.InsertMock(ctx, mock, "") + if err != nil { + insertMockErrChan <- err + } + return nil + }) + } + return nil + }) + + select { + case err = <-insertMockErrChan: + stopReason = "error while inserting mock into db, hence stopping keploy" + case <-ctx.Done(): + return nil + } + utils.LogError(r.logger, err, stopReason) + return fmt.Errorf(stopReason) +} diff --git a/pkg/service/record/service.go b/pkg/service/record/service.go new file mode 100755 index 000000000..9031d523f --- /dev/null +++ b/pkg/service/record/service.go @@ -0,0 +1,39 @@ +package record + +import ( + "context" + + "go.keploy.io/server/v2/pkg/models" +) + +type Instrumentation interface { + //Setup prepares the environment for the recording + Setup(ctx context.Context, cmd string, opts models.SetupOptions) (uint64, error) + //Hook will load hooks and start the proxy server. + Hook(ctx context.Context, id uint64, opts models.HookOptions) error + GetIncoming(ctx context.Context, id uint64, opts models.IncomingOptions) (<-chan *models.TestCase, error) + GetOutgoing(ctx context.Context, id uint64, opts models.OutgoingOptions) (<-chan *models.Mock, error) + // Run is blocking call and will execute until error + Run(ctx context.Context, id uint64, opts models.RunOptions) models.AppError +} + +type Service interface { + Start(ctx context.Context) error + StartMock(ctx context.Context) error +} + +type TestDB interface { + GetAllTestSetIDs(ctx context.Context) ([]string, error) + InsertTestCase(ctx context.Context, tc *models.TestCase, testSetID string) error +} + +type MockDB interface { + InsertMock(ctx context.Context, mock *models.Mock, testSetID string) error +} + +type Telemetry interface { + RecordedTestSuite(testSet string, testsTotal int, mockTotal map[string]int) + RecordedTestCaseMock(mockType string) + RecordedMocks(mockTotal map[string]int) + RecordedTestAndMocks() +} diff --git a/pkg/service/regression/output.go b/pkg/service/regression/output.go deleted file mode 100644 index df8a524c3..000000000 --- a/pkg/service/regression/output.go +++ /dev/null @@ -1,287 +0,0 @@ -package regression - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - "strings" - - "github.com/fatih/color" - "github.com/olekukonko/tablewriter" - "github.com/yudai/gojsondiff" - "github.com/yudai/gojsondiff/formatter" -) - -// Chars PER expected/actual string. Can be changed no problem -const MAX_LINE_LENGTH = 50 - -type DiffsPrinter struct { - testCase string - statusExp string - statusAct string - headerExp string - headerAct string - bodyExp string - bodyAct string - bodyNoise []string - headNoise map[string]string -} - -func NewDiffsPrinter(testCase string) DiffsPrinter { - return DiffsPrinter{testCase, "", "", "", "", "", "", []string{}, map[string]string{}} -} - -func (d *DiffsPrinter) PushStatusDiff(exp, act string) { - d.statusExp, d.statusAct = exp, act -} - -func (d *DiffsPrinter) PushHeaderDiff(exp, act string, noise map[string]string) { - d.headerExp, d.headerAct, d.headNoise = exp, act, noise -} - -func (d *DiffsPrinter) PushBodyDiff(exp, act string, noise []string) { - d.bodyExp, d.bodyAct, d.bodyNoise = exp, act, noise -} - -// Will display and colorize diffs side-by-side -func (d *DiffsPrinter) Render() { - diffs := []string{} - - if d.statusExp != d.statusAct { - diffs = append(diffs, sprintDiff(d.statusExp, d.statusAct, "status")) - } - - if d.headerExp != d.headerAct { - diffs = append(diffs, sprintDiff(fmt.Sprint(d.headerExp), fmt.Sprint(d.headerAct), "header")) - } - - if len(d.bodyExp) != 0 || len(d.bodyAct) != 0 { - bE, bA := []byte(d.bodyExp), []byte(d.bodyAct) - if json.Valid(bE) && json.Valid(bA) { - diffs = append(diffs, sprintJSONDiff(bE, bA, "body", d.bodyNoise)) - } else { - diffs = append(diffs, sprintDiff(d.bodyExp, d.bodyAct, "body")) - } - - } - - table := tablewriter.NewWriter(os.Stdout) - table.SetAutoWrapText(false) - table.SetHeader([]string{fmt.Sprintf("Diffs %v", d.testCase)}) - table.SetHeaderColor(tablewriter.Colors{tablewriter.FgHiRedColor}) - table.SetAlignment(tablewriter.ALIGN_CENTER) - for _, e := range diffs { - table.Append([]string{e}) - } - table.Render() -} - -/* - * Returns a nice diff table where the left is the expect and the right - * is the actual. Its generic because it works with whatever string. For - * JSON-based diffs use SprintJSONDiff - * field: body, stauts, header... - */ -func sprintDiff(expect, actual, field string) string { - - // Offset will be where the string start to unmatch - offset, _ := diffIndex(expect, actual) - - // Color of the unmatch, can be changed - cE, cA := color.FgHiRed, color.FgHiGreen - - exp := breakWithColor(expect, &cE, offset) - act := breakWithColor(actual, &cA, offset) - if len(expect) > MAX_LINE_LENGTH || len(actual) > MAX_LINE_LENGTH { - return expectActualTable(exp, act, field, false) // Don't centerize - } - return expectActualTable(exp, act, field, true) -} - -/* This will return the json diffs in a beautifull way. It will in fact - * create a colorized table-based expect-response string and return it. - * on the left-side there'll be the expect and on the right the actual - * response. Its important to mention the inputs must to be a json. If - * the body isnt in the rest-api formats (what means it is not json-based) - * its better to use a generic diff output as the SprintDiff. - */ -func sprintJSONDiff(json1 []byte, json2 []byte, field string, noise []string) string { - diffString := calculateJSONDiffs(json1, json2) - expect, actual := separateAndColorize(diffString, noise) - result := expectActualTable(expect, actual, field, false) - return result -} - -// Find the diff between two strings returning index where -// the difference begin -func diffIndex(s1, s2 string) (int, bool) { - diff := false - i := -1 - - // Check if one string is smaller than another, if so theres a diff - if len(s1) < len(s2) { - i = len(s1) - diff = true - } else if len(s2) < len(s1) { - diff = true - i = len(s2) - } - - // Check for unmatched characters - for i := 0; i < len(s1) && i < len(s2); i++ { - if s1[i] != s2[i] { - return i, true - } - } - - return i, diff -} - -/* Will perform the calculation of the diffs, returning a string that - * containes the lines that does not match represented by either a - * minus or add symbol followed by the respective line. - */ -func calculateJSONDiffs(json1 []byte, json2 []byte) string { - var diff = gojsondiff.New() - dObj, _ := diff.Compare(json1, json2) - - var jsonObject map[string]interface{} - json.Unmarshal([]byte(json1), &jsonObject) - - diffString, _ := formatter.NewAsciiFormatter(jsonObject, formatter.AsciiFormatterConfig{ - ShowArrayIndex: true, - Coloring: false, // We will color our way - }).Format(dObj) - - return diffString -} - -// Will receive a string that has the differences represented -// by a plus or a minus sign and separate it. Just works with json -func separateAndColorize(diffStr string, noise []string) (string, string) { - expect, actual := "", "" - - diffLines := strings.Split(diffStr, "\n") - - for i, line := range diffLines { - if len(line) > 0 { - noised := false - - for _, e := range noise { - // If contains noise remove diff flag - if strings.Contains(line, e) { - - if line[0] == '-' { - line = " " + line[1:] - expect += breakWithColor(line, nil, 0) - } else if line[0] == '+' { - line = " " + line[1:] - actual += breakWithColor(line, nil, 0) - } - noised = true - } - } - - if noised { - continue - } - - if line[0] == '-' { - c := color.FgRed - - // Workaround to get the exact index where the diff begins - if diffLines[i+1][0] == '+' { - - /* As we want to get the exact difference where the line's - * diff begin we must to, first, get the expect (this) and - * the actual (next) line. Then we must to espace the first - * char that is an "+" or "-" symbol so we end up having - * just the contents of the line we want to compare */ - offset, _ := diffIndex(line[1:], diffLines[i+1][1:]) - expect += breakWithColor(line, &c, offset+1) - } else { - // In the case where there isn't in fact an actual - // version to compare, it was just expect to have this - expect += breakWithColor(line, &c, 0) - } - } else if line[0] == '+' { - c := color.FgGreen - - // Here we do the same thing as above, just inverted - if diffLines[i-1][0] == '-' { - offset, _ := diffIndex(line[1:], diffLines[i-1][1:]) - actual += breakWithColor(line, &c, offset+1) - } else { - actual += breakWithColor(line, &c, 0) - } - } else { - expect += breakWithColor(line, nil, 0) - actual += breakWithColor(line, nil, 0) - } - } - } - - return expect, actual -} - -// Will colorize the strubg and do the job of break it if it pass MAX_LINE_LENGTH, -// always respecting the reset of ascii colors before the break line to dont -func breakWithColor(input string, c *color.Attribute, offset int) string { - var output []string - var paint func(a ...interface{}) string - colorize := false - - if c != nil { - colorize = true - paint = color.New(*c).SprintFunc() - } - - for i := 0; i < len(input); i += MAX_LINE_LENGTH { - end := i + MAX_LINE_LENGTH - - if end > len(input) { - end = len(input) - } - - // This conditions joins if we are at line where the offset begins - if colorize && i+MAX_LINE_LENGTH > offset { - paintedStart := i - if paintedStart < offset { - paintedStart = offset - } - - // Will basically concatenated the non-painted string with the - // painted - prePaint := input[i:paintedStart] // Start at i ends at offset - postPaint := paint(input[paintedStart:end]) // Starts at offset (diff begins), goes til maxLength - substr := prePaint + postPaint + "\n" // Concatenate - output = append(output, substr) - } else { - substr := input[i:end] + "\n" - output = append(output, substr) - } - } - return strings.Join(output, "") -} - -// Will return a string in a two columns table where the left -// side is the expected string and the right is the actual -// field: body, header, status... -func expectActualTable(exp string, act string, field string, centerize bool) string { - buf := &bytes.Buffer{} - table := tablewriter.NewWriter(buf) - - if centerize { - table.SetAlignment(tablewriter.ALIGN_CENTER) - } - - table.SetHeader([]string{fmt.Sprintf("Expect %v", field), fmt.Sprintf("Actual %v", field)}) - table.SetAutoWrapText(false) - table.SetBorder(false) - table.SetColMinWidth(0, MAX_LINE_LENGTH) - table.SetColMinWidth(1, MAX_LINE_LENGTH) - table.Append([]string{exp, act}) - table.Render() - return buf.String() -} diff --git a/pkg/service/regression/regression.go b/pkg/service/regression/regression.go deleted file mode 100644 index e262c9d97..000000000 --- a/pkg/service/regression/regression.go +++ /dev/null @@ -1,947 +0,0 @@ -package regression - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "net/http" - "os" - "path/filepath" - "reflect" - "strings" - "sync" - "time" - - "github.com/go-test/deep" - "github.com/wI2L/jsondiff" - - "github.com/google/uuid" - "github.com/k0kubun/pp/v3" - grpcMock "go.keploy.io/server/grpc/mock" - "go.keploy.io/server/grpc/utils" - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" - "go.keploy.io/server/pkg/platform/telemetry" - "go.uber.org/zap" - "gopkg.in/yaml.v3" -) - -func New(tdb models.TestCaseDB, rdb TestRunDB, testReportFS TestReportFS, adb telemetry.Service, log *zap.Logger, TestExport bool, mFS models.MockFS) *Regression { - return &Regression{ - yamlTcs: sync.Map{}, - tele: adb, - tdb: tdb, - log: log, - // client: cl, - rdb: rdb, - testReportFS: testReportFS, - mockFS: mFS, - testExport: TestExport, - mutex: sync.Mutex{}, - } -} - -type Regression struct { - yamlTcs sync.Map - runCount int - - tdb models.TestCaseDB - client http.Client - testReportFS TestReportFS - rdb TestRunDB - tele telemetry.Service - mockFS models.MockFS - testExport bool - log *zap.Logger - mutex sync.Mutex -} - -func (r *Regression) startTestRun(ctx context.Context, runId, testCasePath, mockPath, testReportPath string, totalTcs int) error { - if !pkg.IsValidPath(testCasePath) || !pkg.IsValidPath(mockPath) { - r.log.Error("file path should be absolute to read and write testcases and their mocks") - return fmt.Errorf("file path should be absolute") - } - - // all types of tcs should be stored to be tested. Empty tcsType returns all keploy tcs - tcs, err := r.mockFS.ReadAll(ctx, testCasePath, mockPath, "") - if err != nil { - r.log.Error("failed to read and cache testcases from ", zap.String("testcase path", pkg.SanitiseInput(testCasePath)), zap.String("mock path", pkg.SanitiseInput(mockPath)), zap.Error(err)) - return err - } - tcsMap := sync.Map{} - for _, j := range tcs { - tcsMap.Store(j.ID, j) - } - r.yamlTcs.Store(runId, tcsMap) - err = r.testReportFS.Write(ctx, testReportPath, models.TestReport{ - Version: models.V1Beta1, - Name: runId, - Total: len(tcs), - Status: string(models.TestRunStatusRunning), - }) - if err != nil { - r.log.Error("failed to create test report file", zap.String("file path", testReportPath), zap.Error(err)) - return err - } - return nil -} - -func (r *Regression) stopTestRun(ctx context.Context, runId, testReportPath string) error { - r.yamlTcs.Delete(runId) - testResults, err := r.testReportFS.GetResults(runId) - if err != nil { - r.log.Error(err.Error()) - } - var ( - success = 0 - failure = 0 - status = models.TestRunStatusPassed - ) - for _, j := range testResults { - if j.Status == models.TestStatusPassed { - success++ - } else if j.Status == models.TestStatusFailed { - failure++ - status = models.TestRunStatusFailed - } - } - err = r.testReportFS.Write(ctx, testReportPath, models.TestReport{ - Version: models.V1Beta1, - Name: runId, - Total: len(testResults), - Status: string(status), - Tests: testResults, - Success: success, - Failure: failure, - }) - if err != nil { - r.log.Error("failed to create test report file", zap.String("file path", testReportPath), zap.Error(err)) - return err - } - return nil -} - -// var delay = 0 // We need a delay to dont mess the entire output -func (r *Regression) test(ctx context.Context, cid, runId, id, app string, resp models.HttpResp) (bool, *models.Result, *models.TestCase, error) { - var ( - tc models.TestCase - err error - ) - switch r.testExport { - case false: - tc, err = r.tdb.Get(ctx, cid, id) - if err != nil { - r.log.Error("failed to get testcase from DB", zap.String("id", id), zap.String("cid", cid), zap.String("appID", app), zap.Error(err)) - return false, nil, nil, err - } - case true: - if val, ok := r.yamlTcs.Load(runId); ok { - tcsMap := val.(sync.Map) - if val, ok := tcsMap.Load(id); ok { - tc = val.(models.TestCase) - // tcsMap.Delete(id) - } else { - err := fmt.Errorf("failed to load testcase from tcs map coresponding to testcaseId: %s", pkg.SanitiseInput(id)) - r.log.Error(err.Error()) - return false, nil, nil, err - } - } else { - err := fmt.Errorf("failed to load testcases coresponding to runId: %s", pkg.SanitiseInput(runId)) - r.log.Error(err.Error()) - return false, nil, nil, err - } - } - bodyType := models.BodyTypePlain - if json.Valid([]byte(resp.Body)) { - bodyType = models.BodyTypeJSON - } - pass := true - hRes := &[]models.HeaderResult{} - - res := &models.Result{ - StatusCode: models.IntResult{ - Normal: false, - Expected: tc.HttpResp.StatusCode, - Actual: resp.StatusCode, - }, - BodyResult: []models.BodyResult{{ - Normal: false, - Type: bodyType, - Expected: tc.HttpResp.Body, - Actual: resp.Body, - }}, - } - - var ( - bodyNoise []string - headerNoise = map[string]string{} - ) - - for _, n := range tc.Noise { - a := strings.Split(n, ".") - if len(a) > 1 && a[0] == "body" { - x := strings.Join(a[1:], ".") - bodyNoise = append(bodyNoise, x) - } else if a[0] == "header" { - // if len(a) == 2 { - // headerNoise[a[1]] = a[1] - // continue - // } - headerNoise[a[len(a)-1]] = a[len(a)-1] - // headerNoise[a[0]] = a[0] - } - } - - // stores the json body after removing the noise - cleanExp, cleanAct := "", "" - - if !pkg.Contains(tc.Noise, "body") && bodyType == models.BodyTypeJSON { - - cleanExp, cleanAct, pass, err = pkg.Match(tc.HttpResp.Body, resp.Body, bodyNoise, r.log) - if err != nil { - return false, res, &tc, err - } - } else { - if !pkg.Contains(tc.Noise, "body") && tc.HttpResp.Body != resp.Body { - pass = false - } - } - - res.BodyResult[0].Normal = pass - - if !pkg.CompareHeaders(tc.HttpResp.Header, grpcMock.ToHttpHeader(grpcMock.ToMockHeader(resp.Header)), hRes, headerNoise) { - pass = false - } - - res.HeadersResult = *hRes - if tc.HttpResp.StatusCode == resp.StatusCode { - res.StatusCode.Normal = true - } else { - - pass = false - } - - if !pass { - logDiffs := NewDiffsPrinter(tc.ID) - - logger := pp.New() - logger.WithLineInfo = false - logger.SetColorScheme(models.FailingColorScheme) - var logs = "" - - logs = logs + logger.Sprintf("Testrun failed for testcase with id: %s\n\n--------------------------------------------------------------------\n\n", tc.ID) - // "Test Result:\n"+ - // "\tInput Http Request: %+v\n\n"+ - // "\tExpected Response: "+ - // "%+v\n\n"+"\tActual Response: "+ - // , tc.ID) - - // ------------ DIFFS RELATED CODE ----------- - if !res.StatusCode.Normal { - logDiffs.PushStatusDiff(fmt.Sprint(res.StatusCode.Expected), fmt.Sprint(res.StatusCode.Actual)) - } - - var ( - actualHeader = map[string][]string{} - expectedHeader = map[string][]string{} - unmatched = true - ) - - for _, j := range res.HeadersResult { - if !j.Normal { - unmatched = false - actualHeader[j.Actual.Key] = j.Actual.Value - expectedHeader[j.Expected.Key] = j.Expected.Value - } - } - - if !unmatched { - for i, j := range expectedHeader { - logDiffs.PushHeaderDiff(fmt.Sprint(j), fmt.Sprint(actualHeader[i]), headerNoise) - } - } - - if !res.BodyResult[0].Normal { - - if json.Valid([]byte(resp.Body)) { - patch, err := jsondiff.Compare(cleanExp, cleanAct) - if err != nil { - r.log.Warn("failed to compute json diff", zap.Error(err)) - } - for _, op := range patch { - keyStr := op.Path.String() - if len(keyStr) > 1 && keyStr[0] == '/' { - keyStr = keyStr[1:] - } - logDiffs.PushBodyDiff(fmt.Sprint(op.OldValue), fmt.Sprint(op.Value), bodyNoise) - - } - } else { - logDiffs.PushBodyDiff(fmt.Sprint(tc.HttpResp.Body), fmt.Sprint(resp.Body), bodyNoise) - } - } - r.mutex.Lock() - logger.Printf(logs) - // time.Sleep(time.Second * time.Duration(delay)) // race condition bugging and mixing outputs - logDiffs.Render() - r.mutex.Unlock() - - } else { - logger := pp.New() - logger.WithLineInfo = false - logger.SetColorScheme(models.PassingColorScheme) - var log2 = "" - log2 += logger.Sprintf("Testrun passed for testcase with id: %s\n\n--------------------------------------------------------------------\n\n", tc.ID) - r.mutex.Lock() - logger.Printf(log2) - r.mutex.Unlock() - - } - - return pass, res, &tc, nil -} - -func (r *Regression) testGrpc(ctx context.Context, cid, runId, id, app string, resp models.GrpcResp) (bool, *models.Result, *models.TestCase, error) { - var ( - tc models.TestCase - err error - mutex sync.Mutex - ) - switch r.testExport { - case false: - tc, err = r.tdb.Get(ctx, cid, id) - if err != nil { - r.log.Error("failed to get testcase from DB", zap.String("id", id), zap.String("cid", cid), zap.String("appID", app), zap.Error(err)) - return false, nil, nil, err - } - case true: - if val, ok := r.yamlTcs.Load(runId); ok { - tcsMap := val.(sync.Map) - if val, ok := tcsMap.Load(id); ok { - tc = val.(models.TestCase) - // tcsMap.Delete(id) - } else { - err := fmt.Errorf("failed to load testcase from tcs map coresponding to testcaseId: %s", pkg.SanitiseInput(id)) - r.log.Error(err.Error()) - return false, nil, nil, err - } - } else { - err := fmt.Errorf("failed to load testcases coresponding to runId: %s", pkg.SanitiseInput(runId)) - r.log.Error(err.Error()) - return false, nil, nil, err - } - } - bodyType := models.BodyTypePlain - if json.Valid([]byte(resp.Body)) { - bodyType = models.BodyTypeJSON - } - pass := true - - res := &models.Result{ - BodyResult: []models.BodyResult{ - { - Normal: false, - Type: bodyType, - Expected: tc.GrpcResp.Body, - Actual: resp.Body, - }, - { - Normal: true, - Type: models.BodyTypeError, - Expected: tc.GrpcResp.Err, - Actual: resp.Err, - }, - }, - } - - var ( - bodyNoise []string - headerNoise = map[string]string{} - ) - - for _, n := range tc.Noise { - a := strings.Split(n, ".") - if len(a) > 1 && a[0] == "body" { - x := strings.Join(a[1:], ".") - bodyNoise = append(bodyNoise, x) - } else if a[0] == "header" { - headerNoise[a[len(a)-1]] = a[len(a)-1] - } - } - - // stores the json body after removing the noise - cleanExp, cleanAct := "", "" - - if !pkg.Contains(tc.Noise, "body") && bodyType == models.BodyTypeJSON { - cleanExp, cleanAct, pass, err = pkg.Match(tc.GrpcResp.Body, resp.Body, bodyNoise, r.log) - if err != nil { - return false, res, &tc, err - } - } else { - if !pkg.Contains(tc.Noise, "body") && tc.GrpcResp.Body != resp.Body { - pass = false - } - } - res.BodyResult[0].Normal = pass - - if diff := deep.Equal(resp.Err, tc.GrpcResp.Err); diff != nil { - pass = false - res.BodyResult[1].Normal = false - } - - if !pass { - logDiff := NewDiffsPrinter(tc.ID) - logger := pp.New() - logger.WithLineInfo = false - logger.SetColorScheme(models.FailingColorScheme) - var logs = "" - - logs = logs + logger.Sprintf("Testrun failed for testcase with id: %s\n"+ - "Test Result:\n"+ - "\tInput Grpc Request: %+v\n\n"+ - "\tExpected Response: "+ - "%+v\n\n"+"\tActual Response: "+ - "%+v\n\n", tc.ID, tc.GrpcReq, tc.GrpcResp, resp) - - // ------------ DIFFS RELATED CODE -------------- - - if !res.BodyResult[0].Normal { - - if json.Valid([]byte(resp.Body)) { - - patch, err := jsondiff.Compare(cleanExp, cleanAct) - if err != nil { - r.log.Warn("failed to compute json diff", zap.Error(err)) - } - for _, op := range patch { - keyStr := op.Path.String() - if len(keyStr) > 1 && keyStr[0] == '/' { - keyStr = keyStr[1:] - } - logDiff.PushBodyDiff(keyStr, fmt.Sprint(op.OldValue), bodyNoise) - } - } else { - logDiff.PushBodyDiff(fmt.Sprint(tc.GrpcResp), fmt.Sprint(resp), bodyNoise) - } - - } - - if !res.BodyResult[1].Normal { - logDiff.PushBodyDiff(fmt.Sprint(tc.GrpcResp.Err), fmt.Sprint(resp.Err), bodyNoise) - } - mutex.Lock() - logger.Printf(logs) - logDiff.Render() - mutex.Unlock() - } else { - logger := pp.New() - logger.WithLineInfo = false - logger.SetColorScheme(models.PassingColorScheme) - var log2 = "" - log2 += logger.Sprintf("Testrun passed for testcase with id: %s\n\n--------------------------------------------------------------------\n\n", tc.ID) - mutex.Lock() - logger.Printf(log2) - mutex.Unlock() - - } - return pass, res, &tc, nil -} - -func (r *Regression) Test(ctx context.Context, cid, app, runID, id, testCasePath, mockPath string, resp models.HttpResp) (bool, error) { - var t *models.Test - started := time.Now().UTC() - - ok, res, tc, err := r.test(ctx, cid, runID, id, app, resp) - if tc != nil { - t = &models.Test{ - ID: uuid.New().String(), - Started: started.Unix(), - RunID: runID, - TestCaseID: id, - URI: tc.URI, - Req: tc.HttpReq, - Dep: tc.Deps, - Resp: resp, - Result: *res, - Noise: tc.Noise, - } - } - t.Completed = time.Now().UTC().Unix() - - if err != nil { - r.log.Error("failed to run the testcase", zap.Error(err), zap.String("cid", cid), zap.String("app", app)) - t.Status = models.TestStatusFailed - } - t.Status = models.TestStatusFailed - if ok { - t.Status = models.TestStatusPassed - } - defer func() { - - if r.testExport { - mockIds := []string{} - for i := 0; i < len(tc.Mocks); i++ { - mockIds = append(mockIds, tc.Mocks[i].Name) - } - r.testReportFS.Lock() - r.testReportFS.SetResult(runID, models.TestResult{ - Kind: models.HTTP, - Name: runID, - Status: t.Status, - Started: t.Started, - Completed: t.Completed, - TestCaseID: id, - Req: models.MockHttpReq{ - Method: t.Req.Method, - ProtoMajor: t.Req.ProtoMajor, - ProtoMinor: t.Req.ProtoMinor, - URL: t.Req.URL, - URLParams: t.Req.URLParams, - Header: grpcMock.ToMockHeader(t.Req.Header), - Body: t.Req.Body, - }, - Res: models.MockHttpResp{ - StatusCode: t.Resp.StatusCode, - Header: grpcMock.ToMockHeader(t.Resp.Header), - Body: t.Resp.Body, - StatusMessage: t.Resp.StatusMessage, - ProtoMajor: t.Resp.ProtoMajor, - ProtoMinor: t.Resp.ProtoMinor, - }, - Mocks: mockIds, - TestCasePath: testCasePath, - MockPath: mockPath, - Noise: tc.Noise, - Result: *res, - }) - r.testReportFS.Lock() - defer r.testReportFS.Unlock() - } else { - err2 := r.saveResult(ctx, t) - if err2 != nil { - r.log.Error("failed test result to db", zap.Error(err2), zap.String("cid", cid), zap.String("app", app)) - } - } - }() - return ok, nil -} - -func (r *Regression) TestGrpc(ctx context.Context, resp models.GrpcResp, cid, app, runID, id, testCasePath, mockPath string) (bool, error) { - var t *models.Test - started := time.Now().UTC() - ok, res, tc, err := r.testGrpc(ctx, cid, runID, id, app, resp) - if tc != nil { - t = &models.Test{ - ID: uuid.New().String(), - Started: started.Unix(), - RunID: runID, - TestCaseID: id, - // GrpcMethod: tc.GrpcReq.Method, - GrpcReq: tc.GrpcReq, - Dep: tc.Deps, - GrpcResp: resp, - Result: *res, - Noise: tc.Noise, - } - } - t.Completed = time.Now().UTC().Unix() - - if err != nil { - r.log.Error("failed to run the grpc testcase", zap.Error(err), zap.String("cid", cid), zap.String("app", app)) - t.Status = models.TestStatusFailed - } - t.Status = models.TestStatusFailed - if ok { - t.Status = models.TestStatusPassed - } - defer func() { - - if r.testExport { - mockIds := []string{} - for i := 0; i < len(tc.Mocks); i++ { - mockIds = append(mockIds, tc.Mocks[i].Name) - } - r.testReportFS.Lock() - r.testReportFS.SetResult(runID, models.TestResult{ - Kind: models.GRPC_EXPORT, - Name: runID, - Status: t.Status, - Started: t.Started, - Completed: t.Completed, - TestCaseID: id, - GrpcReq: tc.GrpcReq, - GrpcResp: resp, - Mocks: mockIds, - TestCasePath: testCasePath, - MockPath: mockPath, - Noise: tc.Noise, - Result: *res, - }) - r.testReportFS.Lock() - r.testReportFS.Unlock() - } else { - err2 := r.saveResult(ctx, t) - if err2 != nil { - r.log.Error("failed test result to db", zap.Error(err2), zap.String("cid", cid), zap.String("app", app)) - } - } - }() - return ok, nil -} - -func (r *Regression) saveResult(ctx context.Context, t *models.Test) error { - err := r.rdb.PutTest(ctx, *t) - if err != nil { - return err - } - if t.Status == models.TestStatusFailed { - err = r.rdb.Increment(ctx, false, true, t.RunID) - } else { - err = r.rdb.Increment(ctx, true, false, t.RunID) - } - - if err != nil { - return err - } - return nil -} - -func (r *Regression) deNoiseYaml(ctx context.Context, id, path, body, tcsType string, h http.Header) error { - tcs, err := r.mockFS.Read(ctx, path, id, false) - if err != nil { - r.log.Error("failed to read testcase from yaml", zap.String("id", id), zap.String("path", path), zap.Error(err)) - return err - } - if len(tcs) == 0 { - r.log.Error("no testcase exists with", zap.String("id", id), zap.String("at path", path), zap.Error(err)) - return err - } - docs, err := grpcMock.Decode(tcs) - if err != nil { - r.log.Error(err.Error()) - return err - } - tc := docs[0] - var oldResp map[string][]string - switch tcsType { - case string(models.GRPC_EXPORT): - oldResp = map[string][]string{} - err := pkg.AddHttpBodyToMap(tc.Spec.GrpcResp.Body, oldResp) - if err != nil { - r.log.Error("failed to flatten response", zap.Error(err)) - return err - } - default: - // tcsType is Http by default - oldResp, err = pkg.FlattenHttpResponse(utils.GetStringMap(tc.Spec.Res.Header), tc.Spec.Res.Body) - if err != nil { - r.log.Error("failed to flatten response", zap.Error(err)) - return err - } - } - - noise := pkg.FindNoisyFields(oldResp, func(k string, v []string) bool { - var newResp map[string][]string - switch tcsType { - case string(models.GRPC_EXPORT): - newResp = map[string][]string{} - err := pkg.AddHttpBodyToMap(body, newResp) - if err != nil { - r.log.Error("failed to flatten response", zap.Error(err)) - return false - } - default: - // tcsType is Http by default - newResp, err = pkg.FlattenHttpResponse(h, body) - if err != nil { - r.log.Error("failed to flatten response", zap.Error(err)) - return false - } - } - // TODO : can we simplify this by checking and return false first? - v2, ok := newResp[k] - if !ok { - return true - } - if !reflect.DeepEqual(v, v2) { - return true - } - return false - - }) - r.log.Debug("Noise Array : ", zap.Any("", noise)) - tc.Spec.Assertions["noise"] = utils.ToStrArr(noise) - doc, err := grpcMock.Encode(tc) - if err != nil { - r.log.Error(err.Error()) - return err - } - enc := doc - d, err := yaml.Marshal(enc) - if err != nil { - r.log.Error("failed to marshal document to yaml", zap.Any("error", err)) - return err - } - err = os.WriteFile(filepath.Join(path, id+".yaml"), d, os.ModePerm) - if err != nil { - r.log.Error("failed to write test to yaml file", zap.String("id", id), zap.String("path", path), zap.Error(err)) - } - - return nil -} - -func (r *Regression) DeNoise(ctx context.Context, cid, id, app, body string, h http.Header, path, tcsType string) error { - - if r.testExport { - return r.deNoiseYaml(ctx, id, path, body, tcsType, h) - } - tc, err := r.tdb.Get(ctx, cid, id) - var tcRespBody string - switch tcsType { - case string(models.GRPC_EXPORT): - tcRespBody = tc.GrpcResp.Body - default: - // tcsType is Http by default - tcRespBody = tc.HttpResp.Body - tcsType = string(models.HTTP) - } - if err != nil { - r.log.Error("failed to get testcase from DB", zap.String("id", id), zap.String("cid", cid), zap.String("appID", app), zap.Error(err)) - return err - } - - a, b := map[string][]string{}, map[string][]string{} - - if models.Kind(tcsType) == models.HTTP { - // add headers - for k, v := range tc.HttpResp.Header { - a["header."+k] = []string{strings.Join(v, "")} - } - - for k, v := range h { - b["header."+k] = []string{strings.Join(v, "")} - } - } - - err = pkg.AddHttpBodyToMap(tcRespBody, a) - if err != nil { - r.log.Error("failed to parse response body", zap.String("id", id), zap.String("cid", cid), zap.String("appID", app), zap.Error(err)) - return err - } - - err = pkg.AddHttpBodyToMap(body, b) - if err != nil { - r.log.Error("failed to parse response body", zap.String("id", id), zap.String("cid", cid), zap.String("appID", app), zap.Error(err)) - return err - } - // r.log.Debug("denoise between",zap.Any("stored object",a),zap.Any("coming object",b)) - var noise []string - for k, v := range a { - v2, ok := b[k] - if !ok { - noise = append(noise, k) - continue - } - if !reflect.DeepEqual(v, v2) { - noise = append(noise, k) - } - } - // r.log.Debug("Noise Array : ",zap.Any("",noise)) - tc.Noise = noise - err = r.tdb.Upsert(ctx, tc) - if err != nil { - r.log.Error("failed to update noise fields for testcase", zap.String("id", id), zap.String("cid", cid), zap.String("appID", app), zap.Error(err)) - return err - } - return nil -} - -func (r *Regression) Normalize(ctx context.Context, cid, id string) error { - t, err := r.rdb.ReadTest(ctx, id) - if err != nil { - r.log.Error("failed to fetch test from db", zap.String("cid", cid), zap.String("id", id), zap.Error(err)) - return errors.New("test not found") - } - tc, err := r.tdb.Get(ctx, cid, t.TestCaseID) - if err != nil { - r.log.Error("failed to fetch testcase from db", zap.String("cid", cid), zap.String("id", id), zap.Error(err)) - return errors.New("testcase not found") - } - // update the responses - tc.HttpResp = t.Resp - err = r.tdb.Upsert(ctx, tc) - if err != nil { - r.log.Error("failed to update testcase in db", zap.String("cid", cid), zap.String("id", id), zap.Error(err)) - return errors.New("could not update testcase") - } - r.tele.Normalize(ctx) - return nil -} - -func (r *Regression) GetTestRun(ctx context.Context, summary bool, cid string, user, app, id *string, from, to *time.Time, offset *int, limit *int) ([]*models.TestRun, error) { - off, lim := 0, 25 - if offset != nil { - off = *offset - } - if limit != nil { - lim = *limit - } - res, err := r.rdb.Read(ctx, cid, user, app, id, from, to, off, lim) - if err != nil { - r.log.Error("failed to read test runs from DB", zap.String("cid", cid), zap.Any("user", user), zap.Any("app", app), zap.Any("id", id), zap.Any("from", from), zap.Any("to", to), zap.Error(err)) - return nil, errors.New("failed getting test runs") - } - err = r.updateStatus(ctx, res) - if err != nil { - return nil, err - } - if summary { - return res, nil - } - if len(res) == 0 { - return res, nil - } - - for _, v := range res { - tests, err1 := r.rdb.ReadTests(ctx, v.ID) - if err1 != nil { - msg := "failed getting tests from DB" - r.log.Error(msg, zap.String("cid", cid), zap.String("test run id", v.ID), zap.Error(err1)) - return nil, errors.New(msg) - } - v.Tests = tests - } - return res, nil -} - -func (r *Regression) updateStatus(ctx context.Context, trs []*models.TestRun) error { - tests := 0 - - for _, tr := range trs { - - if tr.Status != models.TestRunStatusRunning { - // r.tele.Testrun(tr.Success, tr.Failure, r.client, ctx) - tests++ - continue - } - tests, err1 := r.rdb.ReadTests(ctx, tr.ID) - - if err1 != nil { - msg := "failed getting tests from DB" - r.log.Error(msg, zap.String("cid", tr.CID), zap.String("test run id", tr.ID), zap.Error(err1)) - return errors.New(msg) - } - if len(tests) == 0 { - - // check if the testrun is more than 5 mins old - err := r.failOldTestRuns(ctx, tr.Created, tr) - if err != nil { - return err - } - continue - - } - // find the newest test - ts := tests[0].Started - for _, test := range tests { - if test.Started > ts { - ts = test.Started - } - } - // if the oldest test is older than 5 minutes then fail the whole test run - err := r.failOldTestRuns(ctx, ts, tr) - if err != nil { - return err - } - } - if tests != r.runCount { - - for _, tr := range trs { - - if tr.Status != models.TestRunStatusRunning { - - r.tele.Testrun(tr.Success, tr.Failure, ctx) - } - } - r.runCount = tests - } - return nil -} - -func (r *Regression) failOldTestRuns(ctx context.Context, ts int64, tr *models.TestRun) error { - diff := time.Now().UTC().Sub(time.Unix(ts, 0)) - if diff < 5*time.Minute { - return nil - } - tr.Status = models.TestRunStatusFailed - err2 := r.rdb.Upsert(ctx, *tr) - if err2 != nil { - msg := "failed validating and updating test run status" - r.log.Error(msg, zap.String("cid", tr.CID), zap.String("test run id", tr.ID), zap.Error(err2)) - return errors.New(msg) - } - return nil - -} - -func (r *Regression) PutTest(ctx context.Context, run models.TestRun, testExport bool, runId, testCasePath, mockPath, testReportPath string, totalTcs int) error { - if run.Status == models.TestRunStatusRunning { - if testExport { - err := r.startTestRun(ctx, runId, testCasePath, mockPath, testReportPath, totalTcs) - if err != nil { - return err - } - } - pp.SetColorScheme(models.PassingColorScheme) - pp.Printf("\n <=========================================> \n TESTRUN STARTED with id: %s\n"+"\tFor App: %s\n"+"\tTotal tests: %s\n <=========================================> \n\n", run.ID, run.App, run.Total) - } else { - var ( - total int - success int - failure int - err error - ) - if testExport { - err = r.stopTestRun(ctx, runId, testReportPath) - if err != nil { - return err - } - res := models.TestReport{} - res, err = r.testReportFS.Read(ctx, testReportPath, run.ID) - total = res.Total - success = res.Success - failure = res.Failure - } else { - var res *models.TestRun - res, err = r.rdb.ReadOne(ctx, run.ID) - total = res.Total - success = res.Success - failure = res.Failure - } - if err != nil { - r.log.Error("failed to load testrun for logging test summary", zap.Error(err)) - return err - } - if run.Status == models.TestRunStatusFailed { - pp.SetColorScheme(models.FailingColorScheme) - } else { - pp.SetColorScheme(models.PassingColorScheme) - } - - // if testCasePath is empty that means PutTest is triggered by mocking feature - if testExport && testCasePath == "" { - // sending MockTestRun Telemetry event to Telemetry service. - r.tele.MockTestRun(success, failure, ctx) - } else { - // sending Testrun Telemetry event to Telemetry service. - r.tele.Testrun(success, failure, ctx) - } - - pp.Printf("\n <=========================================> \n TESTRUN SUMMARY. For testrun with id: %s\n"+"\tTotal tests: %s\n"+"\tTotal test passed: %s\n"+"\tTotal test failed: %s\n <=========================================> \n\n", run.ID, total, success, failure) - } - if !testExport { - return r.rdb.Upsert(ctx, run) - } - return nil -} diff --git a/pkg/service/regression/regression_test.go b/pkg/service/regression/regression_test.go deleted file mode 100644 index c7401a851..000000000 --- a/pkg/service/regression/regression_test.go +++ /dev/null @@ -1,590 +0,0 @@ -package regression - -import ( - "context" - "errors" - "net/http" - "os" - "testing" - "time" - - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/pkg/models" - mockPlatform "go.keploy.io/server/pkg/platform/fs" - "go.keploy.io/server/pkg/platform/telemetry" - "go.keploy.io/server/pkg/service/testCase" - "go.uber.org/zap" -) - -const ( - defaultCompany = "default_company" - defaultUser = "default_user" -) - -var ( - now = time.Now() - testReportPath string - tcsPath string - mockPath string - err error - logger *zap.Logger - rSvc *Regression - testReportFS TestReportFS - mockFS models.MockFS -) - -var ( - grpcTcs = []models.TestCase{{ - ID: "1", - Created: 1674553692, - Updated: 1674553692, - Captured: 1674553692, - CID: defaultCompany, - AppID: "test-1", - GrpcReq: models.GrpcReq{ - Body: "Lorem Ipsum", - Method: "services.Service.Add", - }, - GrpcResp: models.GrpcResp{ - Body: `{"message":"Failed", "ts":1674553692}`, - Err: "nil", - }, - Mocks: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-1", - Kind: string(models.GENERIC), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "operation": "find", - }, - Objects: []*proto.Mock_Object{ - { - Type: "error", - Data: []byte("123"), - }, - }, - }, - }, - }, - Type: string(models.GRPC_EXPORT), - }} - httpTcs = []models.TestCase{ - { - ID: "1", - Created: 1674553692, - Updated: 1674553692, - Captured: 1674553692, - CID: defaultCompany, - AppID: "test-1", - URI: "/url", - HttpReq: models.HttpReq{ - Method: "GET", - ProtoMajor: 0, - ProtoMinor: 0, - URL: "/url", - }, - HttpResp: models.HttpResp{ - StatusCode: 200, - Header: http.Header{ - "Pass": []string{"true"}, - }, - Body: `{"message": "passed"}`, - }, - Mocks: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-1", - Kind: string(models.GENERIC), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "operation": "find", - }, - Objects: []*proto.Mock_Object{ - { - Type: "error", - Data: []byte("123"), - }, - }, - }, - }, - }, - Type: string(models.HTTP), - }, - } -) - -func TestMain(m *testing.M) { - logger, _ = zap.NewProduction() - defer logger.Sync() - - testReportPath, err = os.Getwd() - if err != nil { - logger.Error("failed to get the current absolute path", zap.Error(err)) - } - tcsPath = testReportPath + "/tests" - mockPath = testReportPath + "/mocks" - testReportPath += "/reports" - - mockFS = mockPlatform.NewMockExportFS(false) - testReportFS = mockPlatform.NewTestReportFS(false) - analyticsConfig := telemetry.NewTelemetry(nil, false, false, true, nil, logger, "", nil) - rSvc = New(nil, nil, testReportFS, analyticsConfig, logger, true, mockFS) - m.Run() -} - -func TestDeNoise(t *testing.T) { - - for _, tt := range []struct { - input struct { - id string - app string - body string - h http.Header - path string - kind models.Kind - tcs []models.TestCase - } - result error - }{ - // http response contains a noisy field - { - input: struct { - id string - app string - body string - h http.Header - path string - kind models.Kind - tcs []models.TestCase - }{ - id: "test-1", - app: "test-1", - body: `{"message": "failed"}`, - h: http.Header{ - "Pass": []string{"true"}, - }, - path: tcsPath, - kind: models.HTTP, - tcs: httpTcs, - }, - result: nil, - }, - // grpc response contains a noisy field("body.ts") - { - input: struct { - id string - app string - body string - h http.Header - path string - kind models.Kind - tcs []models.TestCase - }{ - id: "test-1", - app: "test-1", - tcs: grpcTcs, - kind: models.GRPC_EXPORT, - body: `{"message":"Failed", "ts":1674553123}`, - path: tcsPath, - }, - result: nil, - }, - // error no tcs yaml exists to be denoised. This throws an error - { - input: struct { - id string - app string - body string - h http.Header - path string - kind models.Kind - tcs []models.TestCase - }{ - id: "test-1", - app: "test-1", - tcs: []models.TestCase{}, - kind: models.GRPC_EXPORT, - body: `{"message":"Failed", "ts":1674553123}`, - path: tcsPath, - }, - result: errors.New("open " + tcsPath + "/test-1.yaml: no such file or directory"), - }, - } { - // setup. Write the tcs yaml which is to be tested - analyticsConfig := telemetry.NewTelemetry(nil, false, false, true, nil, logger, "", nil) - tcSvc := testCase.New(nil, logger, false, analyticsConfig, true, mockFS) - tcSvc.Insert(context.Background(), tt.input.tcs, tcsPath, mockPath, defaultCompany, []string{}, map[string]string{}) - - // update the tcs yaml with noised fields - ctx := context.Background() - // ctx = context.WithValue(ctx, "reqType", tt.input.kind) - actErr := rSvc.DeNoise(ctx, defaultCompany, tt.input.id, tt.input.app, tt.input.body, tt.input.h, tt.input.path, string(tt.input.kind)) - if (actErr == nil && tt.result != nil) || (actErr != nil && tt.result == nil) || (actErr != nil && tt.result != nil && actErr.Error() != tt.result.Error()) { - t.Fatal("Actual output from DeNoise does not matches with expected.", "Expected", tt.result, "Actual", actErr) - } - - tearDown() - } -} - -func TestTestGrpc(t *testing.T) { - for _, tt := range []struct { - input struct { - startRun models.TestRun - runId string - totalTcs int - tcs []models.TestCase - resp models.GrpcResp - stopRun models.TestRun - } - result struct { - startTestOutput struct { - err error - } - testOutput struct { - pass bool - err error - } - stopTestOutput struct { - err error - } - } - }{ - // reponse matches the tccs yaml grpc response. - { - input: struct { - startRun models.TestRun - runId string - - totalTcs int - tcs []models.TestCase - resp models.GrpcResp - stopRun models.TestRun - }{ - startRun: models.TestRun{ - ID: "2a6b4382-176d-4c06-921e-36ce6bc0ecb1", - Status: models.TestRunStatusRunning, - Created: now.Unix(), - Updated: now.Unix(), - CID: defaultCompany, - App: "sample", - User: defaultUser, - Total: 1, - }, - runId: "2a6b4382-176d-4c06-921e-36ce6bc0ecb1", - totalTcs: 1, - tcs: grpcTcs, - resp: models.GrpcResp{ - Body: `{"message":"Failed", "ts":1674553692}`, - Err: "nil", - }, - stopRun: models.TestRun{ - ID: "2a6b4382-176d-4c06-921e-36ce6bc0ecb1", - Updated: now.Unix(), - Status: models.TestRunStatusPassed, - }, - }, - result: struct { - startTestOutput struct{ err error } - testOutput struct { - pass bool - err error - } - stopTestOutput struct { - err error - } - }{ - startTestOutput: struct{ err error }{ - err: nil, - }, - testOutput: struct { - pass bool - err error - }{ - pass: true, - err: nil, - }, - stopTestOutput: struct{ err error }{ - err: nil, - }, - }, - }, - // response do not matches with tcs yaml grpc response - { - input: struct { - startRun models.TestRun - runId string - - totalTcs int - tcs []models.TestCase - resp models.GrpcResp - stopRun models.TestRun - }{ - startRun: models.TestRun{ - ID: "3a6b4382-176d-4c06-921e-36ce6bc0ecb2", - Status: models.TestRunStatusRunning, - Created: now.Unix(), - Updated: now.Unix(), - CID: defaultCompany, - App: "sample-1", - User: defaultUser, - Total: 1, - }, - runId: "3a6b4382-176d-4c06-921e-36ce6bc0ecb2", - totalTcs: 1, - tcs: grpcTcs, - resp: models.GrpcResp{ - Body: `{"message":"Failed", "ts":1674553699}`, - Err: "nil", - }, - stopRun: models.TestRun{ - ID: "3a6b4382-176d-4c06-921e-36ce6bc0ecb2", - Updated: now.Unix(), - Status: models.TestRunStatusFailed, - }, - }, - result: struct { - startTestOutput struct{ err error } - testOutput struct { - pass bool - err error - } - stopTestOutput struct { - err error - } - }{ - startTestOutput: struct{ err error }{ - err: nil, - }, - testOutput: struct { - pass bool - err error - }{ - pass: false, - err: nil, - }, - stopTestOutput: struct{ err error }{ - err: nil, - }, - }, - }, - } { - // setup. Write the tcs yaml which is to be tested - analyticsConfig := telemetry.NewTelemetry(nil, false, false, true, nil, logger, "", nil) - tcSvc := testCase.New(nil, logger, false, analyticsConfig, true, mockFS) - tcSvc.Insert(context.Background(), tt.input.tcs, tcsPath, mockPath, defaultCompany, []string{}, map[string]string{}) - - // Start Testrun - actErr := rSvc.PutTest(context.Background(), tt.input.startRun, true, tt.input.runId, tcsPath, mockPath, testReportPath, tt.input.totalTcs) - if (actErr == nil && tt.result.startTestOutput.err != nil) || (actErr != nil && tt.result.startTestOutput.err == nil) || (actErr != nil && tt.result.startTestOutput.err != nil && actErr.Error() != tt.result.startTestOutput.err.Error()) { - t.Fatal("failed at startTest", "Expected", tt.result.startTestOutput.err, "Actual", actErr) - } - - // Test the actual grpc response with stored response in tcs yaml - actPass, actErr := rSvc.TestGrpc(context.Background(), tt.input.resp, defaultCompany, tt.input.startRun.App, tt.input.runId, "test-1", tcsPath, mockPath) - if actPass != tt.result.testOutput.pass { - t.Fatal("output from TestGrpc does not matches", "Expected", tt.result.testOutput.pass, "Actual", actPass) - } - if (actErr == nil && tt.result.testOutput.err != nil) || (actErr != nil && tt.result.testOutput.err == nil) || (actErr != nil && tt.result.testOutput.err != nil && actErr.Error() != tt.result.testOutput.err.Error()) { - t.Fatal("failed at TestGrpc", "Expected", tt.result.testOutput.err, "Actual", actErr) - } - - // End Testrun with test summary - actErr = rSvc.PutTest(context.Background(), tt.input.stopRun, true, tt.input.runId, tcsPath, mockPath, testReportPath, tt.input.totalTcs) - if (actErr == nil && tt.result.stopTestOutput.err != nil) || (actErr != nil && tt.result.stopTestOutput.err == nil) || (actErr != nil && tt.result.stopTestOutput.err != nil && actErr.Error() != tt.result.stopTestOutput.err.Error()) { - t.Fatal("failed at stopTest", "Expected", tt.result.stopTestOutput.err, "Actual", actErr) - } - - tearDown() - } -} - -func TestTest(t *testing.T) { - for _, tt := range []struct { - input struct { - startRun models.TestRun - runId string - - totalTcs int - tcs []models.TestCase - resp models.HttpResp - stopRun models.TestRun - } - result struct { - startTestOutput struct { - err error - } - testOutput struct { - pass bool - err error - } - stopTestOutput struct { - err error - } - } - }{ - { - input: struct { - startRun models.TestRun - runId string - - totalTcs int - tcs []models.TestCase - resp models.HttpResp - stopRun models.TestRun - }{ - startRun: models.TestRun{ - ID: "2a6b4382-176d-4c06-921e-36ce6bc0ecb1", - Status: models.TestRunStatusRunning, - Created: now.Unix(), - Updated: now.Unix(), - CID: defaultCompany, - App: "sample", - User: defaultUser, - Total: 1, - }, - runId: "2a6b4382-176d-4c06-921e-36ce6bc0ecb1", - totalTcs: 1, - tcs: httpTcs, - resp: models.HttpResp{ - StatusCode: 200, - Header: http.Header{ - "Pass": []string{"true"}, - }, - Body: `{"message": "passed"}`, - }, - stopRun: models.TestRun{ - ID: "2a6b4382-176d-4c06-921e-36ce6bc0ecb1", - Updated: now.Unix(), - Status: models.TestRunStatusPassed, - }, - }, - result: struct { - startTestOutput struct{ err error } - testOutput struct { - pass bool - err error - } - stopTestOutput struct { - err error - } - }{ - startTestOutput: struct{ err error }{ - err: nil, - }, - testOutput: struct { - pass bool - err error - }{ - pass: true, - err: nil, - }, - stopTestOutput: struct{ err error }{ - err: nil, - }, - }, - }, - { - input: struct { - startRun models.TestRun - runId string - - totalTcs int - tcs []models.TestCase - resp models.HttpResp - stopRun models.TestRun - }{ - startRun: models.TestRun{ - ID: "3a6b4382-176d-4c06-921e-36ce6bc0ecb2", - Status: models.TestRunStatusRunning, - Created: now.Unix(), - Updated: now.Unix(), - CID: defaultCompany, - App: "sample-1", - User: defaultUser, - Total: 1, - }, - runId: "3a6b4382-176d-4c06-921e-36ce6bc0ecb2", - totalTcs: 1, - tcs: httpTcs, - resp: models.HttpResp{ - StatusCode: 200, - Header: http.Header{ - "Pass": []string{"false"}, - }, - Body: `{"message": "failed"}`, - }, - stopRun: models.TestRun{ - ID: "3a6b4382-176d-4c06-921e-36ce6bc0ecb2", - Updated: now.Unix(), - Status: models.TestRunStatusFailed, - }, - }, - result: struct { - startTestOutput struct{ err error } - testOutput struct { - pass bool - err error - } - stopTestOutput struct { - err error - } - }{ - startTestOutput: struct{ err error }{ - err: nil, - }, - testOutput: struct { - pass bool - err error - }{ - pass: false, - err: nil, - }, - stopTestOutput: struct{ err error }{ - err: nil, - }, - }, - }, - } { - // setup. Write the tcs yaml which is to be tested - analyticsConfig := telemetry.NewTelemetry(nil, false, false, true, nil, logger, "", nil) - tcSvc := testCase.New(nil, logger, false, analyticsConfig, true, mockFS) - tcSvc.Insert(context.Background(), tt.input.tcs, tcsPath, mockPath, defaultCompany, []string{}, map[string]string{}) - - // Start Testrun - actErr := rSvc.PutTest(context.Background(), tt.input.startRun, true, tt.input.runId, tcsPath, mockPath, testReportPath, tt.input.totalTcs) - if (actErr == nil && tt.result.startTestOutput.err != nil) || (actErr != nil && tt.result.startTestOutput.err == nil) || (actErr != nil && tt.result.startTestOutput.err != nil && actErr.Error() != tt.result.startTestOutput.err.Error()) { - t.Fatal("failed at startTest", "Expected", tt.result.startTestOutput.err, "Actual", actErr) - } - - // Test the actual http response with stored response in tcs yaml - actPass, actErr := rSvc.Test(context.Background(), defaultCompany, tt.input.startRun.App, tt.input.runId, "test-1", tcsPath, mockPath, tt.input.resp) - if actPass != tt.result.testOutput.pass { - t.Fatal("output from TestGrpc does not matches", "Expected", tt.result.testOutput.pass, "Actual", actPass) - } - if (actErr == nil && tt.result.testOutput.err != nil) || (actErr != nil && tt.result.testOutput.err == nil) || (actErr != nil && tt.result.testOutput.err != nil && actErr.Error() != tt.result.testOutput.err.Error()) { - t.Fatal("failed at TestGrpc", "Expected", tt.result.testOutput.err, "Actual", actErr) - } - - // End Testrun with test summary - actErr = rSvc.PutTest(context.Background(), tt.input.stopRun, true, tt.input.runId, tcsPath, mockPath, testReportPath, tt.input.totalTcs) - if (actErr == nil && tt.result.stopTestOutput.err != nil) || (actErr != nil && tt.result.stopTestOutput.err == nil) || (actErr != nil && tt.result.stopTestOutput.err != nil && actErr.Error() != tt.result.stopTestOutput.err.Error()) { - t.Fatal("failed at stopTest", "Expected", tt.result.stopTestOutput.err, "Actual", actErr) - } - - tearDown() - } -} - -func tearDown() { - if _, err := os.ReadDir("tests"); err == nil { - os.RemoveAll("tests") - } - if _, err := os.ReadDir("mocks"); err == nil { - os.RemoveAll("mocks") - } - if _, err := os.ReadDir("reports"); err == nil { - os.RemoveAll("reports") - } -} diff --git a/pkg/service/regression/service.go b/pkg/service/regression/service.go deleted file mode 100644 index c534c7de6..000000000 --- a/pkg/service/regression/service.go +++ /dev/null @@ -1,38 +0,0 @@ -package regression - -import ( - "context" - "net/http" - "time" - - "go.keploy.io/server/pkg/models" -) - -type Service interface { - DeNoise(ctx context.Context, cid, id, app, body string, h http.Header, path, tcsType string) error - Test(ctx context.Context, cid, app, runID, id, testCasePath, mockPath string, resp models.HttpResp) (bool, error) - // For Grpc - TestGrpc(ctx context.Context, resp models.GrpcResp, cid, app, runID, id, testCasePath, mockPath string) (bool, error) - Normalize(ctx context.Context, cid, id string) error - GetTestRun(ctx context.Context, summary bool, cid string, user, app, id *string, from, to *time.Time, offset *int, limit *int) ([]*models.TestRun, error) - PutTest(ctx context.Context, run models.TestRun, testExport bool, runId, testCasePath, mockPath, testReportPath string, totalTcs int) error -} - -type TestRunDB interface { - Read(ctx context.Context, cid string, user, app, id *string, from, to *time.Time, offset int, limit int) ([]*models.TestRun, error) - Upsert(ctx context.Context, run models.TestRun) error - ReadOne(ctx context.Context, id string) (*models.TestRun, error) - ReadTest(ctx context.Context, id string) (models.Test, error) - ReadTests(ctx context.Context, runID string) ([]models.Test, error) - PutTest(ctx context.Context, t models.Test) error - Increment(ctx context.Context, success, failure bool, id string) error -} - -type TestReportFS interface { - Write(ctx context.Context, path string, doc models.TestReport) error - Read(ctx context.Context, path, name string) (models.TestReport, error) - SetResult(runId string, test models.TestResult) - GetResults(runId string) ([]models.TestResult, error) - Lock() - Unlock() -} diff --git a/pkg/service/replay/match.go b/pkg/service/replay/match.go new file mode 100644 index 000000000..e14791685 --- /dev/null +++ b/pkg/service/replay/match.go @@ -0,0 +1,1000 @@ +// Package replay provides functions for replaying requests and comparing responses. +package replay + +import ( + "encoding/json" + "errors" + "fmt" + "net/http" + "reflect" + "regexp" + "strconv" + "strings" + + "bytes" + "os" + + "go.uber.org/zap" + + "github.com/fatih/color" + "github.com/k0kubun/pp/v3" + "github.com/olekukonko/tablewriter" + "github.com/wI2L/jsondiff" + "github.com/yudai/gojsondiff" + "github.com/yudai/gojsondiff/formatter" + "go.keploy.io/server/v2/pkg" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" +) + +type ValidatedJSON struct { + expected interface{} // The expected JSON + actual interface{} // The actual JSON + isIdentical bool +} + +type JSONComparisonResult struct { + matches bool // Indicates if the JSON strings match according to the criteria + isExact bool // Indicates if the match is exact, considering ordering and noise + differences []string // Lists the keys or indices of values that are not the same +} + +func match(tc *models.TestCase, actualResponse *models.HTTPResp, noiseConfig map[string]map[string][]string, ignoreOrdering bool, logger *zap.Logger) (bool, *models.Result) { + bodyType := models.BodyTypePlain + if json.Valid([]byte(actualResponse.Body)) { + bodyType = models.BodyTypeJSON + } + pass := true + hRes := &[]models.HeaderResult{} + + res := &models.Result{ + StatusCode: models.IntResult{ + Normal: false, + Expected: tc.HTTPResp.StatusCode, + Actual: actualResponse.StatusCode, + }, + BodyResult: []models.BodyResult{{ + Normal: false, + Type: bodyType, + Expected: tc.HTTPResp.Body, + Actual: actualResponse.Body, + }}, + } + noise := tc.Noise + + var ( + bodyNoise = noiseConfig["body"] + headerNoise = noiseConfig["header"] + ) + + if bodyNoise == nil { + bodyNoise = map[string][]string{} + } + if headerNoise == nil { + headerNoise = map[string][]string{} + } + + for field, regexArr := range noise { + a := strings.Split(field, ".") + if len(a) > 1 && a[0] == "body" { + x := strings.Join(a[1:], ".") + bodyNoise[x] = regexArr + } else if a[0] == "header" { + headerNoise[a[len(a)-1]] = regexArr + } + } + + // stores the json body after removing the noise + cleanExp, cleanAct := tc.HTTPResp.Body, actualResponse.Body + var jsonComparisonResult JSONComparisonResult + if !Contains(MapToArray(noise), "body") && bodyType == models.BodyTypeJSON { + //validate the stored json + validatedJSON, err := ValidateAndMarshalJSON(logger, &cleanExp, &cleanAct) + if err != nil { + return false, res + } + if validatedJSON.isIdentical { + jsonComparisonResult, err = JSONDiffWithNoiseControl(validatedJSON, bodyNoise, ignoreOrdering) + pass = jsonComparisonResult.isExact + if err != nil { + return false, res + } + } else { + pass = false + } + + // debug log for cleanExp and cleanAct + logger.Debug("cleanExp", zap.Any("", cleanExp)) + logger.Debug("cleanAct", zap.Any("", cleanAct)) + } else { + if !Contains(MapToArray(noise), "body") && tc.HTTPResp.Body != actualResponse.Body { + pass = false + } + } + + res.BodyResult[0].Normal = pass + + if !CompareHeaders(pkg.ToHTTPHeader(tc.HTTPResp.Header), pkg.ToHTTPHeader(actualResponse.Header), hRes, headerNoise) { + + pass = false + } + + res.HeadersResult = *hRes + if tc.HTTPResp.StatusCode == actualResponse.StatusCode { + res.StatusCode.Normal = true + } else { + + pass = false + } + + if !pass { + logDiffs := NewDiffsPrinter(tc.Name) + + newLogger := pp.New() + newLogger.WithLineInfo = false + newLogger.SetColorScheme(models.FailingColorScheme) + var logs = "" + + logs = logs + newLogger.Sprintf("Testrun failed for testcase with id: %s\n\n--------------------------------------------------------------------\n\n", tc.Name) + + // ------------ DIFFS RELATED CODE ----------- + if !res.StatusCode.Normal { + logDiffs.PushStatusDiff(fmt.Sprint(res.StatusCode.Expected), fmt.Sprint(res.StatusCode.Actual)) + } + + var ( + actualHeader = map[string][]string{} + expectedHeader = map[string][]string{} + unmatched = true + ) + + for _, j := range res.HeadersResult { + if !j.Normal { + unmatched = false + actualHeader[j.Actual.Key] = j.Actual.Value + expectedHeader[j.Expected.Key] = j.Expected.Value + } + } + + if !unmatched { + for i, j := range expectedHeader { + logDiffs.PushHeaderDiff(fmt.Sprint(j), fmt.Sprint(actualHeader[i]), i, headerNoise) + } + } + + if !res.BodyResult[0].Normal { + if json.Valid([]byte(actualResponse.Body)) { + patch, err := jsondiff.Compare(tc.HTTPResp.Body, actualResponse.Body) + if err != nil { + logger.Warn("failed to compute json diff", zap.Error(err)) + } + for _, op := range patch { + if jsonComparisonResult.matches { + logDiffs.hasarrayIndexMismatch = true + logDiffs.PushFooterDiff(strings.Join(jsonComparisonResult.differences, ", ")) + } + logDiffs.PushBodyDiff(fmt.Sprint(op.OldValue), fmt.Sprint(op.Value), bodyNoise) + + } + } else { + logDiffs.PushBodyDiff(fmt.Sprint(tc.HTTPResp.Body), fmt.Sprint(actualResponse.Body), bodyNoise) + } + } + _, err := newLogger.Printf(logs) + if err != nil { + utils.LogError(logger, err, "failed to print the logs") + } + + err = logDiffs.Render() + if err != nil { + utils.LogError(logger, err, "failed to render the diffs") + } + } else { + newLogger := pp.New() + newLogger.WithLineInfo = false + newLogger.SetColorScheme(models.PassingColorScheme) + var log2 = "" + log2 += newLogger.Sprintf("Testrun passed for testcase with id: %s\n\n--------------------------------------------------------------------\n\n", tc.Name) + _, err := newLogger.Printf(log2) + if err != nil { + utils.LogError(logger, err, "failed to print the logs") + } + } + return pass, res +} + +func FlattenHTTPResponse(h http.Header, body string) (map[string][]string, error) { + m := map[string][]string{} + for k, v := range h { + m["header."+k] = []string{strings.Join(v, "")} + } + err := AddHTTPBodyToMap(body, m) + if err != nil { + return m, err + } + return m, nil +} + +// UnmarshallJSON returns unmarshalled JSON object. +func UnmarshallJSON(s string, log *zap.Logger) (interface{}, error) { + var result interface{} + if err := json.Unmarshal([]byte(s), &result); err != nil { + utils.LogError(log, err, "cannot convert json string into json object") + return nil, err + } + return result, nil +} + +func ArrayToMap(arr []string) map[string]bool { + res := map[string]bool{} + for i := range arr { + res[arr[i]] = true + } + return res +} + +func InterfaceToString(val interface{}) string { + switch v := val.(type) { + case int: + return fmt.Sprintf("%d", v) + case float64: + return fmt.Sprintf("%f", v) + case bool: + return fmt.Sprintf("%t", v) + case string: + return v + default: + return fmt.Sprintf("%v", v) + } +} + +func JSONDiffWithNoiseControl(validatedJSON ValidatedJSON, noise map[string][]string, ignoreOrdering bool) (JSONComparisonResult, error) { + var matchJSONComparisonResult JSONComparisonResult + matchJSONComparisonResult, err := matchJSONWithNoiseHandling("", validatedJSON.expected, validatedJSON.actual, noise, ignoreOrdering) + if err != nil { + return matchJSONComparisonResult, err + } + + return matchJSONComparisonResult, nil +} + +func ValidateAndMarshalJSON(log *zap.Logger, exp, act *string) (ValidatedJSON, error) { + var validatedJSON ValidatedJSON + expected, err := UnmarshallJSON(*exp, log) + if err != nil { + return validatedJSON, err + } + actual, err := UnmarshallJSON(*act, log) + if err != nil { + return validatedJSON, err + } + validatedJSON.expected = expected + validatedJSON.actual = actual + if reflect.TypeOf(expected) != reflect.TypeOf(actual) { + validatedJSON.isIdentical = false + return validatedJSON, nil + } + cleanExp, err := json.Marshal(expected) + if err != nil { + return validatedJSON, err + } + cleanAct, err := json.Marshal(actual) + if err != nil { + return validatedJSON, err + } + *exp = string(cleanExp) + *act = string(cleanAct) + validatedJSON.isIdentical = true + return validatedJSON, nil +} + +// matchJSONWithNoiseHandling returns strcut if expected and actual JSON objects matches(are equal) and in exact order(isExact). +func matchJSONWithNoiseHandling(key string, expected, actual interface{}, noiseMap map[string][]string, ignoreOrdering bool) (JSONComparisonResult, error) { + var matchJSONComparisonResult JSONComparisonResult + if reflect.TypeOf(expected) != reflect.TypeOf(actual) { + return matchJSONComparisonResult, errors.New("type not matched") + } + if expected == nil && actual == nil { + matchJSONComparisonResult.isExact = true + matchJSONComparisonResult.matches = true + return matchJSONComparisonResult, nil + } + x := reflect.ValueOf(expected) + prefix := "" + if key != "" { + prefix = key + "." + } + switch x.Kind() { + case reflect.Float64, reflect.String, reflect.Bool: + regexArr, isNoisy := CheckStringExist(key, noiseMap) + if isNoisy && len(regexArr) != 0 { + isNoisy, _ = MatchesAnyRegex(InterfaceToString(expected), regexArr) + } + if expected != actual && !isNoisy { + return matchJSONComparisonResult, nil + } + + case reflect.Map: + expMap := expected.(map[string]interface{}) + actMap := actual.(map[string]interface{}) + copiedExpMap := make(map[string]interface{}) + copiedActMap := make(map[string]interface{}) + + // Copy each key-value pair from expMap to copiedExpMap + for key, value := range expMap { + copiedExpMap[key] = value + } + + // Repeat the same process for actual map + for key, value := range actMap { + copiedActMap[key] = value + } + isExact := true + differences := []string{} + for k, v := range expMap { + val, ok := actMap[k] + if !ok { + return matchJSONComparisonResult, nil + } + if valueMatchJSONComparisonResult, er := matchJSONWithNoiseHandling(prefix+k, v, val, noiseMap, ignoreOrdering); !valueMatchJSONComparisonResult.matches || er != nil { + return valueMatchJSONComparisonResult, nil + } else if !valueMatchJSONComparisonResult.isExact { + isExact = false + differences = append(differences, k) + differences = append(differences, valueMatchJSONComparisonResult.differences...) + } + // remove the noisy key from both expected and actual JSON. + if _, ok := CheckStringExist(prefix+k, noiseMap); ok { + delete(copiedExpMap, prefix+k) + delete(copiedActMap, k) + continue + } + } + // checks if there is a key which is not present in expMap but present in actMap. + for k := range actMap { + _, ok := expMap[k] + if !ok { + return matchJSONComparisonResult, nil + } + } + matchJSONComparisonResult.matches = true + matchJSONComparisonResult.isExact = isExact + matchJSONComparisonResult.differences = append(matchJSONComparisonResult.differences, differences...) + return matchJSONComparisonResult, nil + case reflect.Slice: + if regexArr, isNoisy := CheckStringExist(key, noiseMap); isNoisy && len(regexArr) != 0 { + break + } + expSlice := reflect.ValueOf(expected) + actSlice := reflect.ValueOf(actual) + if expSlice.Len() != actSlice.Len() { + return matchJSONComparisonResult, nil + } + isMatched := true + isExact := true + for i := 0; i < expSlice.Len(); i++ { + matched := false + for j := 0; j < actSlice.Len(); j++ { + if valMatchJSONComparisonResult, err := matchJSONWithNoiseHandling(key, expSlice.Index(i).Interface(), actSlice.Index(j).Interface(), noiseMap, ignoreOrdering); err == nil && valMatchJSONComparisonResult.matches { + if !valMatchJSONComparisonResult.isExact { + for _, val := range valMatchJSONComparisonResult.differences { + prefixedVal := key + "[" + fmt.Sprint(j) + "]." + val // Prefix the value + matchJSONComparisonResult.differences = append(matchJSONComparisonResult.differences, prefixedVal) + } + } + matched = true + break + } + } + + if !matched { + isMatched = false + isExact = false + break + } + } + if !isMatched { + matchJSONComparisonResult.matches = isMatched + matchJSONComparisonResult.isExact = isExact + return matchJSONComparisonResult, nil + } + if !ignoreOrdering { + for i := 0; i < expSlice.Len(); i++ { + if valMatchJSONComparisonResult, er := matchJSONWithNoiseHandling(key, expSlice.Index(i).Interface(), actSlice.Index(i).Interface(), noiseMap, ignoreOrdering); er != nil || !valMatchJSONComparisonResult.isExact { + isExact = false + break + } + } + } + matchJSONComparisonResult.matches = isMatched + matchJSONComparisonResult.isExact = isExact + + return matchJSONComparisonResult, nil + default: + return matchJSONComparisonResult, errors.New("type not registered for json") + } + matchJSONComparisonResult.matches = true + matchJSONComparisonResult.isExact = true + return matchJSONComparisonResult, nil +} + +// MAX_LINE_LENGTH is chars PER expected/actual string. Can be changed no problem +const MAX_LINE_LENGTH = 50 + +type DiffsPrinter struct { + testCase string + statusExp string + statusAct string + headerExp map[string]string + headerAct map[string]string + bodyExp string + bodyAct string + bodyNoise map[string][]string + headNoise map[string][]string + hasarrayIndexMismatch bool + text string +} + +func NewDiffsPrinter(testCase string) DiffsPrinter { + return DiffsPrinter{testCase, "", "", map[string]string{}, map[string]string{}, "", "", map[string][]string{}, map[string][]string{}, false, ""} +} + +func (d *DiffsPrinter) PushStatusDiff(exp, act string) { + d.statusExp, d.statusAct = exp, act +} + +func (d *DiffsPrinter) PushFooterDiff(key string) { + d.hasarrayIndexMismatch = true + d.text = key +} + +func (d *DiffsPrinter) PushHeaderDiff(exp, act, key string, noise map[string][]string) { + d.headerExp[key], d.headerAct[key], d.headNoise = exp, act, noise +} + +func (d *DiffsPrinter) PushBodyDiff(exp, act string, noise map[string][]string) { + d.bodyExp, d.bodyAct, d.bodyNoise = exp, act, noise +} + +// Render will display and colorize diffs side-by-side +func (d *DiffsPrinter) Render() error { + diffs := []string{} + + if d.statusExp != d.statusAct { + diffs = append(diffs, sprintDiff(d.statusExp, d.statusAct, "status")) + } + + diffs = append(diffs, sprintDiffHeader(d.headerExp, d.headerAct)) + + if len(d.bodyExp) != 0 || len(d.bodyAct) != 0 { + bE, bA := []byte(d.bodyExp), []byte(d.bodyAct) + if json.Valid(bE) && json.Valid(bA) { + difference, err := sprintJSONDiff(bE, bA, "body", d.bodyNoise) + if err != nil { + difference = sprintDiff(d.bodyExp, d.bodyAct, "body") + } + diffs = append(diffs, difference) + } else { + diffs = append(diffs, sprintDiff(d.bodyExp, d.bodyAct, "body")) + } + + } + + table := tablewriter.NewWriter(os.Stdout) + table.SetAutoWrapText(false) + table.SetHeader([]string{fmt.Sprintf("Diffs %v", d.testCase)}) + table.SetHeaderColor(tablewriter.Colors{tablewriter.FgHiRedColor}) + table.SetAlignment(tablewriter.ALIGN_CENTER) + + for _, e := range diffs { + table.Append([]string{e}) + } + if d.hasarrayIndexMismatch { + yellowPaint := color.New(color.FgYellow).SprintFunc() + redPaint := color.New(color.FgRed).SprintFunc() + startPart := " Expected and actual value" + var midPartpaint string + if len(d.text) > 0 { + midPartpaint = redPaint(d.text) + startPart += " of " + } + initalPart := yellowPaint(utils.WarningSign + startPart) + + endPaint := yellowPaint(" are in different order but have the same objects") + table.SetHeader([]string{initalPart + midPartpaint + endPaint}) + table.SetAlignment(tablewriter.ALIGN_CENTER) + table.Append([]string{initalPart + midPartpaint + endPaint}) + } + table.Render() + return nil +} + +/* + * Returns a nice diff table where the left is the expect and the right + * is the actual. each entry in expect and actual will contain the key + * and the corresponding value. + */ +func sprintDiffHeader(expect, actual map[string]string) string { + + expectAll := "" + actualAll := "" + for key, expValue := range expect { + actValue := key + ": " + actual[key] + expValue = key + ": " + expValue + // Offset will be where the string start to unmatch + offset, _ := diffIndex(expValue, actValue) + + // Color of the unmatch, can be changed + cE, cA := color.FgHiRed, color.FgHiGreen + + expectAll += breakWithColor(expValue, &cE, offset) + actualAll += breakWithColor(actValue, &cA, offset) + } + if len(expect) > MAX_LINE_LENGTH || len(actual) > MAX_LINE_LENGTH { + return expectActualTable(expectAll, actualAll, "header", false) // Don't centerize + } + return expectActualTable(expectAll, actualAll, "header", true) +} + +/* + * Returns a nice diff table where the left is the expect and the right + * is the actual. For JSON-based diffs use SprintJSONDiff + * field: body, status... + */ +func sprintDiff(expect, actual, field string) string { + + // Offset will be where the string start to unmatch + offset, _ := diffIndex(expect, actual) + + // Color of the unmatch, can be changed + cE, cA := color.FgHiRed, color.FgHiGreen + + exp := breakWithColor(expect, &cE, offset) + act := breakWithColor(actual, &cA, offset) + if len(expect) > MAX_LINE_LENGTH || len(actual) > MAX_LINE_LENGTH { + return expectActualTable(exp, act, field, false) // Don't centerize + } + return expectActualTable(exp, act, field, true) +} + +/* This will return the json diffs in a beautifull way. It will in fact + * create a colorized table-based expect-response string and return it. + * on the left-side there'll be the expect and on the right the actual + * response. Its important to mention the inputs must to be a json. If + * the body isnt in the rest-api formats (what means it is not json-based) + * its better to use a generic diff output as the SprintDiff. + */ +func sprintJSONDiff(json1 []byte, json2 []byte, field string, noise map[string][]string) (string, error) { + diffString, err := calculateJSONDiffs(json1, json2) + if err != nil { + return "", err + } + expect, actual := separateAndColorize(diffString, noise) + result := expectActualTable(expect, actual, field, false) + return result, nil +} + +// Find the diff between two strings returning index where +// the difference begin +func diffIndex(s1, s2 string) (int, bool) { + diff := false + i := -1 + + // Check if one string is smaller than another, if so theres a diff + if len(s1) < len(s2) { + i = len(s1) + diff = true + } else if len(s2) < len(s1) { + diff = true + i = len(s2) + } + + // Check for unmatched characters + for i := 0; i < len(s1) && i < len(s2); i++ { + if s1[i] != s2[i] { + return i, true + } + } + + return i, diff +} + +/* Will perform the calculation of the diffs, returning a string that + * containes the lines that does not match represented by either a + * minus or add symbol followed by the respective line. + */ +func calculateJSONDiffs(json1 []byte, json2 []byte) (string, error) { + var diff = gojsondiff.New() + dObj, err := diff.Compare(json1, json2) + if err != nil { + return "", err + } + + var jsonObject map[string]interface{} + err = json.Unmarshal([]byte(json1), &jsonObject) + if err != nil { + return "", err + } + + diffString, _ := formatter.NewAsciiFormatter(jsonObject, formatter.AsciiFormatterConfig{ + ShowArrayIndex: true, + Coloring: false, // We will color our way + }).Format(dObj) + + return diffString, nil +} + +// Will receive a string that has the differences represented +// by a plus or a minus sign and separate it. Just works with json +func separateAndColorize(diffStr string, noise map[string][]string) (string, string) { + expect, actual := "", "" + + diffLines := strings.Split(diffStr, "\n") + + for i, line := range diffLines { + if len(line) > 0 { + noised := false + + for e := range noise { + // If contains noise remove diff flag + if strings.Contains(line, e) { + + if line[0] == '-' { + line = " " + line[1:] + expect += breakWithColor(line, nil, 0) + } else if line[0] == '+' { + line = " " + line[1:] + actual += breakWithColor(line, nil, 0) + } + noised = true + } + } + + if noised { + continue + } + + if line[0] == '-' { + c := color.FgRed + + // Workaround to get the exact index where the diff begins + if diffLines[i+1][0] == '+' { + + /* As we want to get the exact difference where the line's + * diff begin we must to, first, get the expect (this) and + * the actual (next) line. Then we must to espace the first + * char that is an "+" or "-" symbol so we end up having + * just the contents of the line we want to compare */ + offset, _ := diffIndex(line[1:], diffLines[i+1][1:]) + expect += breakWithColor(line, &c, offset+1) + } else { + // In the case where there isn't in fact an actual + // version to compare, it was just expect to have this + expect += breakWithColor(line, &c, 0) + } + } else if line[0] == '+' { + c := color.FgGreen + + // Here we do the same thing as above, just inverted + if diffLines[i-1][0] == '-' { + offset, _ := diffIndex(line[1:], diffLines[i-1][1:]) + actual += breakWithColor(line, &c, offset+1) + } else { + actual += breakWithColor(line, &c, 0) + } + } else { + expect += breakWithColor(line, nil, 0) + actual += breakWithColor(line, nil, 0) + } + } + } + + return expect, actual +} + +// Will colorize the strubg and do the job of break it if it pass MAX_LINE_LENGTH, +// always respecting the reset of ascii colors before the break line to dont +func breakWithColor(input string, c *color.Attribute, offset int) string { + var output []string + var paint func(a ...interface{}) string + colorize := false + + if c != nil { + colorize = true + paint = color.New(*c).SprintFunc() + } + + for i := 0; i < len(input); i += MAX_LINE_LENGTH { + end := i + MAX_LINE_LENGTH + + if end > len(input) { + end = len(input) + } + + // This conditions joins if we are at line where the offset begins + if colorize && i+MAX_LINE_LENGTH > offset { + paintedStart := i + if paintedStart < offset { + paintedStart = offset + } + + // Will basically concatenated the non-painted string with the + // painted + prePaint := input[i:paintedStart] // Start at i ends at offset + postPaint := paint(input[paintedStart:end]) // Starts at offset (diff begins), goes til maxLength + substr := prePaint + postPaint + "\n" // Concatenate + output = append(output, substr) + } else { + substr := input[i:end] + "\n" + output = append(output, substr) + } + } + return strings.Join(output, "") +} + +// Will return a string in a two columns table where the left +// side is the expected string and the right is the actual +// field: body, header, status... +func expectActualTable(exp string, act string, field string, centerize bool) string { + buf := &bytes.Buffer{} + table := tablewriter.NewWriter(buf) + + if centerize { + table.SetAlignment(tablewriter.ALIGN_CENTER) + } + + table.SetHeader([]string{fmt.Sprintf("Expect %v", field), fmt.Sprintf("Actual %v", field)}) + table.SetAutoWrapText(false) + table.SetBorder(false) + table.SetColMinWidth(0, MAX_LINE_LENGTH) + table.SetColMinWidth(1, MAX_LINE_LENGTH) + table.Append([]string{exp, act}) + table.Render() + return buf.String() +} + +func Contains(elems []string, v string) bool { + for _, s := range elems { + if v == s { + return true + } + } + return false +} + +func checkKey(res *[]models.HeaderResult, key string) bool { + for _, v := range *res { + if key == v.Expected.Key { + return false + } + } + return true +} + +func CompareHeaders(h1 http.Header, h2 http.Header, res *[]models.HeaderResult, noise map[string][]string) bool { + if res == nil { + return false + } + match := true + _, isHeaderNoisy := noise["header"] + for k, v := range h1 { + regexArr, isNoisy := CheckStringExist(k, noise) + if isNoisy && len(regexArr) != 0 { + isNoisy, _ = MatchesAnyRegex(v[0], regexArr) + } + isNoisy = isNoisy || isHeaderNoisy + val, ok := h2[k] + if !isNoisy { + if !ok { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: nil, + }, + }) + } + + match = false + continue + } + if len(v) != len(val) { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: val, + }, + }) + } + match = false + continue + } + for i, e := range v { + if val[i] != e { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: val, + }, + }) + } + match = false + continue + } + } + } + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: true, + Expected: models.Header{ + Key: k, + Value: v, + }, + Actual: models.Header{ + Key: k, + Value: val, + }, + }) + } + } + for k, v := range h2 { + regexArr, isNoisy := CheckStringExist(k, noise) + if isNoisy && len(regexArr) != 0 { + isNoisy, _ = MatchesAnyRegex(v[0], regexArr) + } + isNoisy = isNoisy || isHeaderNoisy + val, ok := h1[k] + if isNoisy && checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: true, + Expected: models.Header{ + Key: k, + Value: val, + }, + Actual: models.Header{ + Key: k, + Value: v, + }, + }) + continue + } + if !ok { + if checkKey(res, k) { + *res = append(*res, models.HeaderResult{ + Normal: false, + Expected: models.Header{ + Key: k, + Value: nil, + }, + Actual: models.Header{ + Key: k, + Value: v, + }, + }) + } + + match = false + } + } + return match +} + +func MapToArray(mp map[string][]string) []string { + var result []string + for k := range mp { + result = append(result, k) + } + return result +} + +func CheckStringExist(s string, mp map[string][]string) ([]string, bool) { + if val, ok := mp[s]; ok { + return val, ok + } + ok, val := MatchesAnyRegex(s, MapToArray(mp)) + if ok { + return mp[val], ok + } + return []string{}, false +} + +func MatchesAnyRegex(str string, regexArray []string) (bool, string) { + for _, pattern := range regexArray { + re := regexp.MustCompile(pattern) + if re.MatchString(str) { + return true, pattern + } + } + return false, "" +} + +func AddHTTPBodyToMap(body string, m map[string][]string) error { + // add body + if json.Valid([]byte(body)) { + var result interface{} + + err := json.Unmarshal([]byte(body), &result) + if err != nil { + return err + } + j := Flatten(result) + for k, v := range j { + nk := "body" + if k != "" { + nk = nk + "." + k + } + m[nk] = v + } + } else { + // add it as raw text + m["body"] = []string{body} + } + return nil +} + +// Flatten takes a map and returns a new one where nested maps are replaced +// by dot-delimited keys. +// examples of valid jsons - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#examples +func Flatten(j interface{}) map[string][]string { + if j == nil { + return map[string][]string{"": {""}} + } + o := make(map[string][]string) + x := reflect.ValueOf(j) + switch x.Kind() { + case reflect.Map: + m, ok := j.(map[string]interface{}) + if !ok { + return map[string][]string{} + } + for k, v := range m { + nm := Flatten(v) + for nk, nv := range nm { + fk := k + if nk != "" { + fk = fk + "." + nk + } + o[fk] = nv + } + } + case reflect.Bool: + o[""] = []string{strconv.FormatBool(x.Bool())} + case reflect.Float64: + o[""] = []string{strconv.FormatFloat(x.Float(), 'E', -1, 64)} + case reflect.String: + o[""] = []string{x.String()} + case reflect.Slice: + child, ok := j.([]interface{}) + if !ok { + return map[string][]string{} + } + for _, av := range child { + nm := Flatten(av) + for nk, nv := range nm { + if ov, exists := o[nk]; exists { + o[nk] = append(ov, nv...) + } else { + o[nk] = nv + } + } + } + } + return o +} diff --git a/pkg/service/replay/replay.go b/pkg/service/replay/replay.go new file mode 100644 index 000000000..e01261e79 --- /dev/null +++ b/pkg/service/replay/replay.go @@ -0,0 +1,710 @@ +package replay + +import ( + "context" + "errors" + "fmt" + "os" + "os/exec" + "path/filepath" + "sort" + "strconv" + "strings" + "time" + + "github.com/k0kubun/pp/v3" + "go.keploy.io/server/v2/config" + "go.keploy.io/server/v2/pkg" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "golang.org/x/sync/errgroup" +) + +var completeTestReport = make(map[string]TestReportVerdict) +var totalTests int +var totalTestPassed int +var totalTestFailed int + +type replayer struct { + logger *zap.Logger + testDB TestDB + mockDB MockDB + reportDB ReportDB + telemetry Telemetry + instrumentation Instrumentation + config config.Config +} + +func NewReplayer(logger *zap.Logger, testDB TestDB, mockDB MockDB, reportDB ReportDB, telemetry Telemetry, instrumentation Instrumentation, config config.Config) Service { + return &replayer{ + logger: logger, + testDB: testDB, + mockDB: mockDB, + reportDB: reportDB, + telemetry: telemetry, + instrumentation: instrumentation, + config: config, + } +} + +func (r *replayer) Start(ctx context.Context) error { + + // creating error group to manage proper shutdown of all the go routines and to propagate the error to the caller + g, ctx := errgroup.WithContext(ctx) + ctx = context.WithValue(ctx, models.ErrGroupKey, g) + + var stopReason = "replay completed successfully" + var hookCancel context.CancelFunc + + // defering the stop function to stop keploy in case of any error in record or in case of context cancellation + defer func() { + select { + case <-ctx.Done(): + break + default: + err := utils.Stop(r.logger, stopReason) + if err != nil { + utils.LogError(r.logger, err, "failed to stop recording") + } + } + if hookCancel != nil { + hookCancel() + } + err := g.Wait() + if err != nil { + utils.LogError(r.logger, err, "failed to stop recording") + } + }() + + // BootReplay will start the hooks and proxy and return the testRunID and appID + testRunID, appID, hookCancel, err := r.BootReplay(ctx) + if err != nil { + stopReason = fmt.Sprintf("failed to boot replay: %v", err) + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + + testSetIDs, err := r.testDB.GetAllTestSetIDs(ctx) + if err != nil { + stopReason = fmt.Sprintf("failed to get all test set ids: %v", err) + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + + testSetResult := false + testRunResult := true + abortTestRun := false + + for _, testSetID := range testSetIDs { + + if _, ok := r.config.Test.SelectedTests[testSetID]; !ok && len(r.config.Test.SelectedTests) != 0 { + continue + } + + testSetStatus, err := r.RunTestSet(ctx, testSetID, testRunID, appID, false) + if err != nil { + stopReason = fmt.Sprintf("failed to run test set: %v", err) + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + switch testSetStatus { + case models.TestSetStatusAppHalted: + testSetResult = false + abortTestRun = true + case models.TestSetStatusInternalErr: + testSetResult = false + abortTestRun = true + case models.TestSetStatusFaultUserApp: + testSetResult = false + abortTestRun = true + case models.TestSetStatusUserAbort: + return nil + case models.TestSetStatusFailed: + testSetResult = false + case models.TestSetStatusPassed: + testSetResult = true + } + testRunResult = testRunResult && testSetResult + if abortTestRun { + break + } + } + + testRunStatus := "fail" + if testRunResult { + testRunStatus = "pass" + } + r.telemetry.TestRun(totalTestPassed, totalTestFailed, len(testSetIDs), testRunStatus) + + if !abortTestRun { + r.printSummary(ctx, testRunResult) + } + return nil +} + +func (r *replayer) BootReplay(ctx context.Context) (string, uint64, context.CancelFunc, error) { + + var cancel context.CancelFunc + + testRunIDs, err := r.reportDB.GetAllTestRunIDs(ctx) + if err != nil { + if errors.Is(err, context.Canceled) { + return "", 0, nil, err + } + return "", 0, nil, fmt.Errorf("failed to get all test run ids: %w", err) + } + + newTestRunID := pkg.NewID(testRunIDs, models.TestRunTemplateName) + + appID, err := r.instrumentation.Setup(ctx, r.config.Command, models.SetupOptions{Container: r.config.ContainerName, DockerNetwork: r.config.NetworkName, DockerDelay: r.config.BuildDelay}) + if err != nil { + if errors.Is(err, context.Canceled) { + return "", 0, nil, err + } + return "", 0, nil, fmt.Errorf("failed to setup instrumentation: %w", err) + } + + // starting the hooks and proxy + select { + case <-ctx.Done(): + return "", 0, nil, context.Canceled + default: + hookCtx := context.WithoutCancel(ctx) + hookCtx, cancel = context.WithCancel(hookCtx) + err = r.instrumentation.Hook(hookCtx, appID, models.HookOptions{Mode: models.MODE_TEST}) + if err != nil { + cancel() + if errors.Is(err, context.Canceled) { + return "", 0, nil, err + } + return "", 0, nil, fmt.Errorf("failed to start the hooks and proxy: %w", err) + } + } + + return newTestRunID, appID, cancel, nil +} + +func (r *replayer) GetAllTestSetIDs(ctx context.Context) ([]string, error) { + return r.testDB.GetAllTestSetIDs(ctx) +} + +func (r *replayer) RunTestSet(ctx context.Context, testSetID string, testRunID string, appID uint64, serveTest bool) (models.TestSetStatus, error) { + + // creating error group to manage proper shutdown of all the go routines and to propagate the error to the caller + runTestSetErrGrp, runTestSetCtx := errgroup.WithContext(ctx) + runTestSetCtx = context.WithValue(runTestSetCtx, models.ErrGroupKey, runTestSetErrGrp) + + runTestSetCtx, runTestSetCtxCancel := context.WithCancel(runTestSetCtx) + + exitLoopChan := make(chan bool, 2) + defer func() { + runTestSetCtxCancel() + err := runTestSetErrGrp.Wait() + if err != nil { + utils.LogError(r.logger, err, "error in testLoopErrGrp") + } + close(exitLoopChan) + }() + + var appErrChan = make(chan models.AppError, 1) + var appErr models.AppError + var success int + var failure int + var totalConsumedMocks = map[string]bool{} + + testSetStatus := models.TestSetStatusPassed + testSetStatusByErrChan := models.TestSetStatusRunning + + r.logger.Info("running", zap.Any("test-set", models.HighlightString(testSetID))) + + testCases, err := r.testDB.GetTestCases(runTestSetCtx, testSetID) + if err != nil { + return models.TestSetStatusFailed, fmt.Errorf("failed to get test cases: %w", err) + } + + if len(testCases) == 0 { + return models.TestSetStatusPassed, nil + } + + filteredMocks, err := r.mockDB.GetFilteredMocks(runTestSetCtx, testSetID, models.BaseTime, time.Now()) + if err != nil { + utils.LogError(r.logger, err, "failed to get filtered mocks") + return models.TestSetStatusFailed, err + } + unfilteredMocks, err := r.mockDB.GetUnFilteredMocks(runTestSetCtx, testSetID, models.BaseTime, time.Now()) + if err != nil { + utils.LogError(r.logger, err, "failed to get unfiltered mocks") + return models.TestSetStatusFailed, err + } + + err = r.instrumentation.MockOutgoing(runTestSetCtx, appID, models.OutgoingOptions{ + Rules: r.config.BypassRules, + MongoPassword: r.config.Test.MongoPassword, + SQLDelay: time.Duration(r.config.Test.Delay), + }) + if err != nil { + utils.LogError(r.logger, err, "failed to mock outgoing") + return models.TestSetStatusFailed, err + } + + err = r.instrumentation.SetMocks(runTestSetCtx, appID, filteredMocks, unfilteredMocks) + if err != nil { + utils.LogError(r.logger, err, "failed to set mocks") + return models.TestSetStatusFailed, err + } + + if !serveTest { + runTestSetErrGrp.Go(func() error { + defer utils.Recover(r.logger) + appErr = r.RunApplication(runTestSetCtx, appID, models.RunOptions{}) + if appErr.AppErrorType == models.ErrCtxCanceled { + return nil + } + appErrChan <- appErr + return nil + }) + } + + // Checking for errors in the mocking and application + runTestSetErrGrp.Go(func() error { + defer utils.Recover(r.logger) + select { + case err := <-appErrChan: + switch err.AppErrorType { + case models.ErrCommandError: + testSetStatusByErrChan = models.TestSetStatusFaultUserApp + case models.ErrUnExpected: + testSetStatusByErrChan = models.TestSetStatusAppHalted + case models.ErrAppStopped: + testSetStatusByErrChan = models.TestSetStatusAppHalted + case models.ErrCtxCanceled: + return nil + case models.ErrInternal: + testSetStatusByErrChan = models.TestSetStatusInternalErr + default: + testSetStatusByErrChan = models.TestSetStatusAppHalted + } + utils.LogError(r.logger, err, "application failed to run") + case <-runTestSetCtx.Done(): + testSetStatusByErrChan = models.TestSetStatusUserAbort + } + exitLoopChan <- true + runTestSetCtxCancel() + return nil + }) + + // Delay for user application to run + select { + case <-time.After(time.Duration(r.config.Test.Delay) * time.Second): + case <-runTestSetCtx.Done(): + return models.TestSetStatusUserAbort, context.Canceled + } + + selectedTests := ArrayToMap(r.config.Test.SelectedTests[testSetID]) + + testCasesCount := len(testCases) + + if len(selectedTests) != 0 { + testCasesCount = len(selectedTests) + } + + // Inserting the initial report for the test set + testReport := &models.TestReport{ + Version: models.GetVersion(), + Total: testCasesCount, + Status: string(models.TestStatusRunning), + } + + err = r.reportDB.InsertReport(runTestSetCtx, testRunID, testSetID, testReport) + if err != nil { + utils.LogError(r.logger, err, "failed to insert report") + return models.TestSetStatusFailed, err + } + + // var to exit the loop + var exitLoop bool + // var to store the error in the loop + var loopErr error + + for _, testCase := range testCases { + + if _, ok := selectedTests[testCase.Name]; !ok && len(selectedTests) != 0 { + continue + } + + // Checking for errors in the mocking and application + select { + case <-exitLoopChan: + testSetStatus = testSetStatusByErrChan + exitLoop = true + default: + } + + if exitLoop { + break + } + + var testStatus models.TestStatus + var testResult *models.Result + var testPass bool + + filteredMocks, loopErr := r.mockDB.GetFilteredMocks(runTestSetCtx, testSetID, testCase.HTTPReq.Timestamp, testCase.HTTPResp.Timestamp) + if loopErr != nil { + utils.LogError(r.logger, err, "failed to get filtered mocks") + break + } + unfilteredMocks, loopErr := r.mockDB.GetUnFilteredMocks(runTestSetCtx, testSetID, testCase.HTTPReq.Timestamp, testCase.HTTPResp.Timestamp) + if loopErr != nil { + utils.LogError(r.logger, err, "failed to get unfiltered mocks") + break + } + + loopErr = r.instrumentation.SetMocks(runTestSetCtx, appID, filteredMocks, unfilteredMocks) + if loopErr != nil { + utils.LogError(r.logger, err, "failed to set mocks") + break + } + + started := time.Now().UTC() + resp, loopErr := r.SimulateRequest(runTestSetCtx, appID, testCase, testSetID) + if loopErr != nil { + utils.LogError(r.logger, err, "failed to simulate request") + break + } + + consumedMocks, err := r.instrumentation.GetConsumedMocks(runTestSetCtx, appID) + if err != nil { + utils.LogError(r.logger, err, "failed to get consumed filtered mocks") + } + if r.config.Test.RemoveUnusedMocks { + for _, mockName := range consumedMocks { + totalConsumedMocks[mockName] = true + } + } + + testPass, testResult = r.compareResp(testCase, resp, testSetID) + if !testPass { + // log the consumed mocks during the test run of the test case for test set + r.logger.Info("result", zap.Any("testcase id", models.HighlightFailingString(testCase.Name)), zap.Any("testset id", models.HighlightFailingString(testSetID)), zap.Any("passed", models.HighlightFailingString(testPass)), zap.Any("consumed mocks", consumedMocks)) + } else { + r.logger.Info("result", zap.Any("testcase id", models.HighlightPassingString(testCase.Name)), zap.Any("testset id", models.HighlightPassingString(testSetID)), zap.Any("passed", models.HighlightPassingString(testPass))) + } + if testPass { + testStatus = models.TestStatusPassed + success++ + } else { + testStatus = models.TestStatusFailed + failure++ + testSetStatus = models.TestSetStatusFailed + } + + if testResult != nil { + testCaseResult := &models.TestResult{ + Kind: models.HTTP, + Name: testSetID, + Status: testStatus, + Started: started.Unix(), + Completed: time.Now().UTC().Unix(), + TestCaseID: testCase.Name, + Req: models.HTTPReq{ + Method: testCase.HTTPReq.Method, + ProtoMajor: testCase.HTTPReq.ProtoMajor, + ProtoMinor: testCase.HTTPReq.ProtoMinor, + URL: testCase.HTTPReq.URL, + URLParams: testCase.HTTPReq.URLParams, + Header: testCase.HTTPReq.Header, + Body: testCase.HTTPReq.Body, + Binary: testCase.HTTPReq.Binary, + Form: testCase.HTTPReq.Form, + Timestamp: testCase.HTTPReq.Timestamp, + }, + Res: models.HTTPResp{ + StatusCode: testCase.HTTPResp.StatusCode, + Header: testCase.HTTPResp.Header, + Body: testCase.HTTPResp.Body, + StatusMessage: testCase.HTTPResp.StatusMessage, + ProtoMajor: testCase.HTTPResp.ProtoMajor, + ProtoMinor: testCase.HTTPResp.ProtoMinor, + Binary: testCase.HTTPResp.Binary, + Timestamp: testCase.HTTPResp.Timestamp, + }, + TestCasePath: filepath.Join(r.config.Path, testSetID), + MockPath: filepath.Join(r.config.Path, testSetID, "mocks.yaml"), + Noise: testCase.Noise, + Result: *testResult, + } + loopErr = r.reportDB.InsertTestCaseResult(runTestSetCtx, testRunID, testSetID, testCaseResult) + if loopErr != nil { + utils.LogError(r.logger, err, "failed to insert test case result") + break + } + } else { + utils.LogError(r.logger, nil, "test result is nil") + break + } + } + + testCaseResults, err := r.reportDB.GetTestCaseResults(runTestSetCtx, testRunID, testSetID) + if err != nil { + if runTestSetCtx.Err() != context.Canceled { + utils.LogError(r.logger, err, "failed to get test case results") + testSetStatus = models.TestSetStatusInternalErr + } + } + + // Checking errors for final iteration + // Checking for errors in the loop + if loopErr != nil && !errors.Is(loopErr, context.Canceled) { + testSetStatus = models.TestSetStatusInternalErr + } else { + // Checking for errors in the mocking and application + select { + case <-exitLoopChan: + testSetStatus = testSetStatusByErrChan + default: + } + } + + testReport = &models.TestReport{ + Version: models.GetVersion(), + TestSet: testSetID, + Status: string(testSetStatus), + Total: testCasesCount, + Success: success, + Failure: failure, + Tests: testCaseResults, + } + + // final report should have reason for sudden stop of the test run so this should get canceled + reportCtx := context.WithoutCancel(runTestSetCtx) + err = r.reportDB.InsertReport(reportCtx, testRunID, testSetID, testReport) + if err != nil { + utils.LogError(r.logger, err, "failed to insert report") + return models.TestSetStatusInternalErr, fmt.Errorf("failed to insert report") + } + + // remove the unused mocks by the test cases of a testset + if r.config.Test.RemoveUnusedMocks && testSetStatus == models.TestSetStatusPassed { + r.logger.Debug("consumed mocks from the completed testset", zap.Any("for test-set", testSetID), zap.Any("consumed mocks", totalConsumedMocks)) + // delete the unused mocks from the data store + err = r.mockDB.UpdateMocks(runTestSetCtx, testSetID, totalConsumedMocks) + if err != nil { + utils.LogError(r.logger, err, "failed to delete unused mocks") + } + } + + // TODO Need to decide on whether to use global variable or not + verdict := TestReportVerdict{ + total: testReport.Total, + failed: testReport.Failure, + passed: testReport.Success, + status: testSetStatus == models.TestSetStatusPassed, + } + + completeTestReport[testSetID] = verdict + totalTests += testReport.Total + totalTestPassed += testReport.Success + totalTestFailed += testReport.Failure + + if testSetStatus == models.TestSetStatusFailed || testSetStatus == models.TestSetStatusPassed { + if testSetStatus == models.TestSetStatusFailed { + pp.SetColorScheme(models.FailingColorScheme) + } else { + pp.SetColorScheme(models.PassingColorScheme) + } + if _, err := pp.Printf("\n <=========================================> \n TESTRUN SUMMARY. For test-set: %s\n"+"\tTotal tests: %s\n"+"\tTotal test passed: %s\n"+"\tTotal test failed: %s\n <=========================================> \n\n", testReport.TestSet, testReport.Total, testReport.Success, testReport.Failure); err != nil { + utils.LogError(r.logger, err, "failed to print testrun summary") + } + } + + r.telemetry.TestSetRun(testReport.Success, testReport.Failure, testSetID, string(testSetStatus)) + return testSetStatus, nil +} + +func (r *replayer) GetTestSetStatus(ctx context.Context, testRunID string, testSetID string) (models.TestSetStatus, error) { + testReport, err := r.reportDB.GetReport(ctx, testRunID, testSetID) + if err != nil { + return models.TestSetStatusFailed, fmt.Errorf("failed to get report: %w", err) + } + status, err := models.StringToTestSetStatus(testReport.Status) + if err != nil { + return models.TestSetStatusFailed, fmt.Errorf("failed to convert string to test set status: %w", err) + } + return status, nil +} + +func (r *replayer) SimulateRequest(ctx context.Context, appID uint64, tc *models.TestCase, testSetID string) (*models.HTTPResp, error) { + switch tc.Kind { + case models.HTTP: + r.logger.Debug("Before simulating the request", zap.Any("Test case", tc)) + cmdType := utils.FindDockerCmd(r.config.Command) + if cmdType == utils.Docker || cmdType == utils.DockerCompose { + var err error + + userIP, err := r.instrumentation.GetAppIP(ctx, appID) + if err != nil { + utils.LogError(r.logger, err, "failed to get the app ip") + return nil, err + } + + tc.HTTPReq.URL, err = replaceHostToIP(tc.HTTPReq.URL, userIP) + if err != nil { + utils.LogError(r.logger, err, "failed to replace host to docker container's IP") + } + r.logger.Debug("", zap.Any("replaced URL in case of docker env", tc.HTTPReq.URL)) + } + r.logger.Debug(fmt.Sprintf("the url of the testcase: %v", tc.HTTPReq.URL)) + resp, err := pkg.SimulateHTTP(ctx, *tc, testSetID, r.logger, r.config.Test.APITimeout) + r.logger.Debug("After simulating the request", zap.Any("test case id", tc.Name)) + r.logger.Debug("After GetResp of the request", zap.Any("test case id", tc.Name)) + return resp, err + } + return nil, nil +} + +func (r *replayer) compareResp(tc *models.TestCase, actualResponse *models.HTTPResp, testSetID string) (bool, *models.Result) { + + noiseConfig := r.config.Test.GlobalNoise.Global + if tsNoise, ok := r.config.Test.GlobalNoise.Testsets[testSetID]; ok { + noiseConfig = LeftJoinNoise(r.config.Test.GlobalNoise.Global, tsNoise) + } + return match(tc, actualResponse, noiseConfig, r.config.Test.IgnoreOrdering, r.logger) +} + +func (r *replayer) printSummary(ctx context.Context, testRunResult bool) { + if totalTests > 0 { + testSuiteNames := make([]string, 0, len(completeTestReport)) + for testSuiteName := range completeTestReport { + testSuiteNames = append(testSuiteNames, testSuiteName) + } + sort.SliceStable(testSuiteNames, func(i, j int) bool { + testSuitePartsI := strings.Split(testSuiteNames[i], "-") + testSuitePartsJ := strings.Split(testSuiteNames[j], "-") + if len(testSuitePartsI) < 3 || len(testSuitePartsJ) < 3 { + return testSuiteNames[i] < testSuiteNames[j] + } + testSuiteIDNumberI, err1 := strconv.Atoi(testSuitePartsI[2]) + testSuiteIDNumberJ, err2 := strconv.Atoi(testSuitePartsJ[2]) + if err1 != nil || err2 != nil { + return false + } + return testSuiteIDNumberI < testSuiteIDNumberJ + }) + if _, err := pp.Printf("\n <=========================================> \n COMPLETE TESTRUN SUMMARY. \n\tTotal tests: %s\n"+"\tTotal test passed: %s\n"+"\tTotal test failed: %s\n", totalTests, totalTestPassed, totalTestFailed); err != nil { + utils.LogError(r.logger, err, "failed to print test run summary") + return + } + if _, err := pp.Printf("\n\tTest Suite Name\t\tTotal Test\tPassed\t\tFailed\t\n"); err != nil { + utils.LogError(r.logger, err, "failed to print test suite summary") + return + } + for _, testSuiteName := range testSuiteNames { + if completeTestReport[testSuiteName].status { + pp.SetColorScheme(models.PassingColorScheme) + } else { + pp.SetColorScheme(models.FailingColorScheme) + } + if _, err := pp.Printf("\n\t%s\t\t%s\t\t%s\t\t%s", testSuiteName, completeTestReport[testSuiteName].total, completeTestReport[testSuiteName].passed, completeTestReport[testSuiteName].failed); err != nil { + utils.LogError(r.logger, err, "failed to print test suite details") + return + } + } + if _, err := pp.Printf("\n<=========================================> \n\n"); err != nil { + utils.LogError(r.logger, err, "failed to print separator") + return + } + r.logger.Info("test run completed", zap.Bool("passed overall", testRunResult)) + if r.config.Test.Coverage { + r.logger.Info("there is a opportunity to get the coverage here") + coverCmd := exec.CommandContext(ctx, "go", "tool", "covdata", "percent", "-i="+os.Getenv("GOCOVERDIR")) + output, err := coverCmd.Output() + if err != nil { + utils.LogError(r.logger, err, "failed to get the coverage of the go binary", zap.Any("cmd", coverCmd.String())) + } + r.logger.Sugar().Infoln("\n", models.HighlightPassingString(string(output))) + generateCovTxtCmd := exec.CommandContext(ctx, "go", "tool", "covdata", "textfmt", "-i="+os.Getenv("GOCOVERDIR"), "-o="+os.Getenv("GOCOVERDIR")+"/total-coverage.txt") + output, err = generateCovTxtCmd.Output() + if err != nil { + utils.LogError(r.logger, err, "failed to get the coverage of the go binary", zap.Any("cmd", coverCmd.String())) + } + if len(output) > 0 { + r.logger.Sugar().Infoln("\n", models.HighlightFailingString(string(output))) + } + } + } +} + +func (r *replayer) RunApplication(ctx context.Context, appID uint64, opts models.RunOptions) models.AppError { + return r.instrumentation.Run(ctx, appID, opts) +} + +func (r *replayer) ProvideMocks(ctx context.Context) error { + var stopReason string + var hookCancel context.CancelFunc + defer func() { + select { + case <-ctx.Done(): + return + default: + err := utils.Stop(r.logger, stopReason) + if err != nil { + utils.LogError(r.logger, err, "failed to stop mock replay") + } + } + if hookCancel != nil { + hookCancel() + } + }() + + filteredMocks, err := r.mockDB.GetFilteredMocks(ctx, "", time.Time{}, time.Now()) + if err != nil { + stopReason = "failed to get filtered mocks" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + + unfilteredMocks, err := r.mockDB.GetUnFilteredMocks(ctx, "", time.Time{}, time.Now()) + if err != nil { + stopReason = "failed to get unfiltered mocks" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + + _, appID, hookCancel, err := r.BootReplay(ctx) + if err != nil { + stopReason = "failed to boot replay" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + + err = r.instrumentation.SetMocks(ctx, appID, filteredMocks, unfilteredMocks) + if err != nil { + stopReason = "failed to set mocks" + utils.LogError(r.logger, err, stopReason) + if err == context.Canceled { + return err + } + return fmt.Errorf(stopReason) + } + <-ctx.Done() + return nil +} diff --git a/pkg/service/replay/service.go b/pkg/service/replay/service.go new file mode 100644 index 000000000..897819eaf --- /dev/null +++ b/pkg/service/replay/service.go @@ -0,0 +1,59 @@ +package replay + +import ( + "context" + "time" + + "go.keploy.io/server/v2/pkg/models" +) + +type Instrumentation interface { + //Setup prepares the environment for the recording + Setup(ctx context.Context, cmd string, opts models.SetupOptions) (uint64, error) + //Hook will load hooks and start the proxy server. + Hook(ctx context.Context, id uint64, opts models.HookOptions) error + MockOutgoing(ctx context.Context, id uint64, opts models.OutgoingOptions) error + // SetMocks Allows for setting mocks between test runs for better filtering and matching + SetMocks(ctx context.Context, id uint64, filtered []*models.Mock, unFiltered []*models.Mock) error + // GetConsumedMocks to log the names of the mocks that were consumed during the test run of failed test cases + GetConsumedMocks(ctx context.Context, id uint64) ([]string, error) + // Run is blocking call and will execute until error + Run(ctx context.Context, id uint64, opts models.RunOptions) models.AppError + + GetAppIP(ctx context.Context, id uint64) (string, error) +} + +type Service interface { + Start(ctx context.Context) error + BootReplay(ctx context.Context) (string, uint64, context.CancelFunc, error) + GetAllTestSetIDs(ctx context.Context) ([]string, error) + RunTestSet(ctx context.Context, testSetID string, testRunID string, appID uint64, serveTest bool) (models.TestSetStatus, error) + GetTestSetStatus(ctx context.Context, testRunID string, testSetID string) (models.TestSetStatus, error) + RunApplication(ctx context.Context, appID uint64, opts models.RunOptions) models.AppError + ProvideMocks(ctx context.Context) error +} + +type TestDB interface { + GetAllTestSetIDs(ctx context.Context) ([]string, error) + GetTestCases(ctx context.Context, testSetID string) ([]*models.TestCase, error) +} + +type MockDB interface { + GetFilteredMocks(ctx context.Context, testSetID string, afterTime time.Time, beforeTime time.Time) ([]*models.Mock, error) + GetUnFilteredMocks(ctx context.Context, testSetID string, afterTime time.Time, beforeTime time.Time) ([]*models.Mock, error) + UpdateMocks(ctx context.Context, testSetID string, mockNames map[string]bool) error +} + +type ReportDB interface { + GetAllTestRunIDs(ctx context.Context) ([]string, error) + GetTestCaseResults(ctx context.Context, testRunID string, testSetID string) ([]models.TestResult, error) + GetReport(ctx context.Context, testRunID string, testSetID string) (*models.TestReport, error) + InsertTestCaseResult(ctx context.Context, testRunID string, testSetID string, result *models.TestResult) error + InsertReport(ctx context.Context, testRunID string, testSetID string, testReport *models.TestReport) error +} + +type Telemetry interface { + TestSetRun(success int, failure int, testSet string, runStatus string) + TestRun(success int, failure int, testSets int, runStatus string) + MockTestRun(utilizedMocks int) +} diff --git a/pkg/service/replay/utils.go b/pkg/service/replay/utils.go new file mode 100644 index 000000000..133c4513e --- /dev/null +++ b/pkg/service/replay/utils.go @@ -0,0 +1,46 @@ +package replay + +import ( + "fmt" + "net/url" + "strings" + + "go.keploy.io/server/v2/config" +) + +type TestReportVerdict struct { + total int + passed int + failed int + status bool +} + +func LeftJoinNoise(globalNoise config.GlobalNoise, tsNoise config.GlobalNoise) config.GlobalNoise { + noise := globalNoise + for field, regexArr := range tsNoise["body"] { + noise["body"][field] = regexArr + } + for field, regexArr := range tsNoise["header"] { + noise["header"][field] = regexArr + } + return noise +} + +func replaceHostToIP(currentURL string, ipAddress string) (string, error) { + // Parse the current URL + parsedURL, err := url.Parse(currentURL) + + if err != nil { + // Return the original URL if parsing fails + return currentURL, err + } + + if ipAddress == "" { + return currentURL, fmt.Errorf("failed to replace url in case of docker env") + } + + // Replace hostname with the IP address + parsedURL.Host = strings.Replace(parsedURL.Host, parsedURL.Hostname(), ipAddress, 1) + // Return the modified URL + return parsedURL.String(), nil +} diff --git a/pkg/service/testCase/service.go b/pkg/service/testCase/service.go deleted file mode 100644 index 900f5c3b1..000000000 --- a/pkg/service/testCase/service.go +++ /dev/null @@ -1,18 +0,0 @@ -package testCase - -import ( - "context" - - "go.keploy.io/server/pkg/models" -) - -type Service interface { - Get(ctx context.Context, cid, appID, id string) (models.TestCase, error) - GetAll(ctx context.Context, cid, appID string, offset *int, limit *int, testCasePath, mockPath, tcsType string) ([]models.TestCase, error) - GetApps(ctx context.Context, cid string) ([]string, error) - Update(ctx context.Context, t []models.TestCase) error - Delete(ctx context.Context, cid, id string) error - Insert(ctx context.Context, t []models.TestCase, testCasePath, mockPath, cid string, Remove []string, Replace map[string]string) ([]string, error) - // InsertToDB(ctx context.Context, cid string, t []models.TestCase) ([]string, error) - // WriteToYaml(ctx context.Context, t []models.Mock, testCasePath, mockPath string) ([]string, error) -} diff --git a/pkg/service/testCase/testCase.go b/pkg/service/testCase/testCase.go deleted file mode 100644 index 6af6140d1..000000000 --- a/pkg/service/testCase/testCase.go +++ /dev/null @@ -1,572 +0,0 @@ -package testCase - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "reflect" - "sort" - "strconv" - "strings" - "sync" - - grpcMock "go.keploy.io/server/grpc/mock" - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/grpc/utils" - "go.keploy.io/server/pkg" - "go.keploy.io/server/pkg/models" - "go.keploy.io/server/pkg/platform/telemetry" - "go.uber.org/zap" -) - -func New(tdb models.TestCaseDB, log *zap.Logger, EnableDeDup bool, adb telemetry.Service, TestExport bool, mFS models.MockFS) *TestCase { - return &TestCase{ - tdb: tdb, - tele: adb, - log: log, - mockFS: mFS, - testExport: TestExport, - mu: sync.Mutex{}, - anchors: map[string][]map[string][]string{}, - noisyFields: map[string]map[string]bool{}, - fieldCounts: map[string]map[string]map[string]int{}, - EnableDeDup: EnableDeDup, - nextYamlIndex: yamlTcsIndx{tcsCount: map[string]int{}, mu: sync.Mutex{}}, - } -} - -type yamlTcsIndx struct { - tcsCount map[string]int // number of testcases with app_id - mu sync.Mutex -} - -type TestCase struct { - tdb models.TestCaseDB - tele telemetry.Service - mockFS models.MockFS - testExport bool - // client http.Client - log *zap.Logger - nextYamlIndex yamlTcsIndx - mu sync.Mutex - appCount int - // index is `cid-appID-uri` - // - // anchors is map[index][]map[key][]value or map[index]combinationOfAnchors - // anchors stores all the combinations of anchor fields for a particular index - // anchor field is a low variance field which is used in the deduplication algorithm. - // example: user-type or blood-group could be good anchor fields whereas timestamps - // and usernames are bad anchor fields. - // during deduplication only anchor fields are compared for new requests to determine whether it is a duplicate or not. - // other fields are ignored. - anchors map[string][]map[string][]string - // noisyFields is map[index][key]bool - noisyFields map[string]map[string]bool - // fieldCounts is map[index][key][value]count - // fieldCounts stores the count of all values of a particular field in an index. - // eg: lets say field is bloodGroup then the value would be {A+: 20, B+: 10,...} - fieldCounts map[string]map[string]map[string]int - EnableDeDup bool -} - -func (r *TestCase) Delete(ctx context.Context, cid, id string) error { - // reset cache - r.mu.Lock() - defer r.mu.Unlock() - t, err := r.tdb.Get(ctx, cid, id) - if err != nil { - r.log.Error("failed to get testcases from the DB", zap.String("cid", cid), zap.Error(err)) - return errors.New("internal failure") - } - index := fmt.Sprintf("%s-%s-%s", t.CID, t.AppID, t.URI) - delete(r.anchors, index) - err = r.tdb.Delete(ctx, id) - if err != nil { - r.log.Error("failed to delete testcase from the DB", zap.String("cid", cid), zap.String("appID", t.AppID), zap.Error(err)) - return errors.New("internal failure") - } - - r.tele.DeleteTc(ctx) - return nil -} - -func (r *TestCase) GetApps(ctx context.Context, cid string) ([]string, error) { - apps, err := r.tdb.GetApps(ctx, cid) - if apps != nil && len(apps) != r.appCount { - r.tele.GetApps(len(apps), ctx) - r.appCount = len(apps) - } - return apps, err -} - -// Get returns testcase with specific company_id, app_id and id. -// -// Note: During testcase-export, generated testcase will not be displayed in ui currently. Because path is not provided by the ui graphQL query. -func (r *TestCase) Get(ctx context.Context, cid, appID, id string) (models.TestCase, error) { - if r.testExport { - return models.TestCase{}, nil - } - tcs, err := r.tdb.Get(ctx, cid, id) - if err != nil { - sanitizedAppID := pkg.SanitiseInput(appID) - r.log.Error("failed to get testcases from the DB", zap.String("cid", cid), zap.String("appID", sanitizedAppID), zap.Error(err)) - return models.TestCase{}, errors.New("internal failure") - } - return tcs, nil -} - -// readTCS returns all the generated testcases and their mocks from the testCasePath and mockPath directory. It returns all the testcases. -func (r *TestCase) readTCS(ctx context.Context, testCasePath, mockPath, tcsType string) ([]models.TestCase, error) { - if testCasePath == "" || mockPath == "" || !pkg.IsValidPath(testCasePath) || !pkg.IsValidPath(mockPath) { - return nil, fmt.Errorf("file path should be absolute. got testcase path: %s and mock path: %s", pkg.SanitiseInput(testCasePath), pkg.SanitiseInput(mockPath)) - } - res, err := r.mockFS.ReadAll(ctx, testCasePath, mockPath, tcsType) - if err != nil { - r.log.Info(fmt.Sprintf("no testcases found in %s directory.", pkg.SanitiseInput(testCasePath))) - return nil, err - } - return res, err -} - -// GetAll fetches and returns testcases for the application. -// -// Empty tcsType returns testcases of all types(ex: grpc and http). -func (r *TestCase) GetAll(ctx context.Context, cid, appID string, offset *int, limit *int, testCasePath, mockPath, tcsType string) ([]models.TestCase, error) { - off, lim := 0, 25 - if offset != nil { - off = *offset - } - if limit != nil { - lim = *limit - } - - if r.testExport { - return r.readTCS(ctx, testCasePath, mockPath, tcsType) - } - - tcs, err := r.tdb.GetAll(ctx, cid, appID, tcsType, false, off, lim) - - if err != nil { - sanitizedAppID := pkg.SanitiseInput(appID) - r.log.Error("failed to get testcases from the DB", zap.String("cid", cid), zap.String("appID", sanitizedAppID), zap.Error(err)) - return nil, errors.New("internal failure") - } - return tcs, nil -} - -func (r *TestCase) Update(ctx context.Context, t []models.TestCase) error { - for _, v := range t { - err := r.tdb.UpdateTC(ctx, v) - if err != nil { - r.log.Error("failed to insert testcase into DB", zap.String("appID", v.AppID), zap.Error(err)) - return errors.New("internal failure") - } - } - r.tele.EditTc(ctx) - return nil -} - -func (r *TestCase) putTC(ctx context.Context, cid string, t models.TestCase) (string, error) { - t.CID = cid - - var err error - if r.EnableDeDup { - // check if already exists - dup, err := r.isDup(ctx, &t) - if err != nil { - r.log.Error("failed to run deduplication on the testcase", zap.String("cid", cid), zap.String("appID", t.AppID), zap.Error(err)) - return "", errors.New("internal failure") - } - if dup { - r.log.Info("found duplicate testcase", zap.String("cid", cid), zap.String("appID", t.AppID), zap.String("uri", t.URI)) - return "", nil - } - } - err = r.tdb.Upsert(ctx, t) - if err != nil { - r.log.Error("failed to insert testcase into DB", zap.String("cid", cid), zap.String("appID", t.AppID), zap.Error(err)) - return "", errors.New("internal failure") - } - - return t.ID, nil -} - -func (r *TestCase) insertToDB(ctx context.Context, cid string, tcs []models.TestCase) ([]string, error) { - var ids []string - if len(tcs) == 0 { - err := errors.New("no testcase to update") - r.log.Error(err.Error()) - return nil, err - } - for _, t := range tcs { - id, err := r.putTC(ctx, cid, t) - if err != nil { - msg := "failed saving testcase" - r.log.Error(msg, zap.Error(err), zap.String("cid", cid), zap.String("id", t.ID), zap.String("app", t.AppID)) - return nil, errors.New(msg) - } - ids = append(ids, id) - } - return ids, nil -} - -// writeToYaml Write will write testcases into the path directory as yaml files. -// Note: dedup algo is not executed during testcase-export currently. -func (r *TestCase) writeToYaml(ctx context.Context, test []models.Mock, testCasePath, mockPath string) ([]string, error) { - if testCasePath == "" || !pkg.IsValidPath(testCasePath) || !pkg.IsValidPath(mockPath) { - err := fmt.Errorf("path directory not found. got testcase path: %s and mock path: %s", pkg.SanitiseInput(testCasePath), pkg.SanitiseInput(mockPath)) - r.log.Error(err.Error()) - return nil, err - } - // test[0] will always be a testcase. test[1:] will be the mocks. - // check for known noisy fields like dates - err := r.mockFS.Write(ctx, testCasePath, test[0]) - if err != nil { - r.log.Error(err.Error()) - return nil, err - } - r.log.Info(fmt.Sprint("\nπŸ’Ύ Recorded testcase with name: ", test[0].Name, " in yaml file at path: ", testCasePath, "\n")) - mockName := "mock" + test[0].Name[4:] - - if len(test) > 1 { - err = r.mockFS.WriteAll(ctx, mockPath, mockName, test[1:]) - if err != nil { - r.log.Error(err.Error()) - return nil, err - - } - r.log.Info(fmt.Sprint("\nπŸ’Ύ Recorded mocks for testcase with name: ", test[0].Name, " at path: ", mockPath, "\n")) - } - return []string{test[0].Name}, nil -} - -func (r *TestCase) Insert(ctx context.Context, t []models.TestCase, testCasePath, mockPath, cid string, fieldFilters []string, replace map[string]string) ([]string, error) { - var ( - inserted = []string{} - err error - ) - for _, v := range t { - // filter the header fields of http testcase - v = pkg.FilterFields(v, fieldFilters, r.log).(models.TestCase) //Filtering the headers from the testcases. - v = pkg.ReplaceFields(v, replace, r.log).(models.TestCase) //Replacing the fields in the testcases. - - // store testcase in yaml file - if r.testExport { - r.nextYamlIndex.mu.Lock() - - // defer r.nextYamlIndex.mu.Unlock() - lastIndex, ok := r.nextYamlIndex.tcsCount[v.AppID] - if !ok { - // Empty tcsType returns all types keploy testcases - tcs, err := r.GetAll(ctx, v.CID, v.AppID, nil, nil, testCasePath, mockPath, "") - if len(tcs) > 0 && err == nil { - if len(strings.Split(tcs[len(tcs)-1].ID, "-")) < 1 || len(strings.Split(strings.Split(tcs[len(tcs)-1].ID, "-")[1], ".")) == 0 { - return nil, errors.New("failed to decode the last sequence number from yaml test") - } - indx := strings.Split(strings.Split(tcs[len(tcs)-1].ID, "-")[1], ".")[0] - lastIndex, err = strconv.Atoi(indx) - if err != nil { - r.log.Error("failed to get the last sequence number for testcase", zap.Error(err)) - return nil, err - } - } - } - r.nextYamlIndex.tcsCount[v.AppID] = lastIndex + 1 - var ( - id = fmt.Sprintf("test-%v", lastIndex+1) - - tc = []models.Mock{{ - Version: models.V1Beta2, - Kind: models.HTTP, - Name: id, - }} - mocks = []string{} - ) - - for i, j := range v.Mocks { - if j.Spec != nil && j.Spec.Req != nil { - j.Spec = pkg.FilterFields(j.Spec, fieldFilters, r.log).(*proto.Mock_SpecSchema) - } - doc, err := grpcMock.Encode(j) - if err != nil { - r.log.Error(err.Error()) - } - tc = append(tc, doc) - m := "mock-" + fmt.Sprint(lastIndex+1) + "-" + strconv.Itoa(i) - tc[len(tc)-1].Name = m - mocks = append(mocks, m) - } - - testcase := &proto.Mock{ - Version: string(models.V1Beta2), - Name: id, - Spec: &proto.Mock_SpecSchema{ - Objects: []*proto.Mock_Object{{ - Type: "error", - Data: []byte{}, - }}, - Mocks: mocks, - Assertions: map[string]*proto.StrArr{ - "noise": {Value: v.Noise}, - }, - Created: v.Captured, - }, - } - switch v.Type { - case string(models.HTTP): - testcase.Kind = string(models.HTTP) - testcase.Spec.Req = &proto.HttpReq{ - Method: string(v.HttpReq.Method), - ProtoMajor: int64(v.HttpReq.ProtoMajor), - ProtoMinor: int64(v.HttpReq.ProtoMinor), - URL: v.HttpReq.URL, - URLParams: v.HttpReq.URLParams, - Body: v.HttpReq.Body, - Header: utils.GetProtoMap(v.HttpReq.Header), - Form: grpcMock.GetProtoFormData(v.HttpReq.Form), - } - testcase.Spec.Res = &proto.HttpResp{ - StatusCode: int64(v.HttpResp.StatusCode), - Body: v.HttpResp.Body, - Header: utils.GetProtoMap(v.HttpResp.Header), - StatusMessage: v.HttpResp.StatusMessage, - ProtoMajor: int64(v.HttpReq.ProtoMajor), - ProtoMinor: int64(v.HttpReq.ProtoMinor), - Binary: v.HttpResp.Binary, - } - case string(models.GRPC_EXPORT): - testcase.Kind = string(models.GRPC_EXPORT) - testcase.Spec.GrpcRequest = &proto.GrpcReq{ - Body: v.GrpcReq.Body, - Method: v.GrpcReq.Method, - } - testcase.Spec.GrpcResp = &proto.GrpcResp{ - Body: v.GrpcResp.Body, - Err: v.GrpcResp.Err, - } - } - tcsMock, err := grpcMock.Encode(testcase) - if err != nil { - r.log.Error(err.Error()) - return nil, err - } - tc[0] = tcsMock - insertedIds, err := r.writeToYaml(ctx, tc, testCasePath, mockPath) - r.nextYamlIndex.mu.Unlock() - if err != nil { - return nil, err - } - inserted = append(inserted, insertedIds...) - - go func() { - var mockTypes []string - for _, mockElement := range tc[1:] { - mockTypes = append(mockTypes, string(mockElement.Kind)) - } - r.tele.RecordedTest(ctx, len(tc)-1, mockTypes) - }() - - continue - } - - // store testcase in mongoDB - v.Mocks = nil - insertedIds, err := r.insertToDB(ctx, cid, []models.TestCase{v}) - if err != nil { - return nil, err - } - inserted = append(inserted, insertedIds...) - } - return inserted, err -} - -func (r *TestCase) fillCache(ctx context.Context, t *models.TestCase) (string, error) { - uri := "" - switch t.Type { - case string(models.HTTP): - uri = t.URI - case string(models.GRPC_EXPORT): - uri = t.GrpcReq.Method - } - index := fmt.Sprintf("%s-%s-%s", t.CID, t.AppID, t.URI) - _, ok1 := r.noisyFields[index] - _, ok2 := r.fieldCounts[index] - if ok1 && ok2 { - return index, nil - } - - r.mu.Lock() - defer r.mu.Unlock() - - // check again after the lock - _, ok1 = r.noisyFields[index] - _, ok2 = r.fieldCounts[index] - - if !ok1 || !ok2 { - var anchors []map[string][]string - fieldCounts, noisyFields := map[string]map[string]int{}, map[string]bool{} - tcs, err := r.tdb.GetKeys(ctx, t.CID, t.AppID, uri, t.Type) // TODO: add method for grpc - if err != nil { - return "", err - } - for _, v := range tcs { - //var appAnchors map[string][]string - //for _, a := range v.Anchors { - // appAnchors[a] = v.AllKeys[a] - //} - anchors = append(anchors, v.Anchors) - for k, v1 := range v.AllKeys { - if fieldCounts[k] == nil { - fieldCounts[k] = map[string]int{} - } - for _, v2 := range v1 { - fieldCounts[k][v2] = fieldCounts[k][v2] + 1 - } - if !isAnchor(fieldCounts[k]) { - noisyFields[k] = true - } - } - } - r.fieldCounts[index], r.noisyFields[index], r.anchors[index] = fieldCounts, noisyFields, anchors - } - return index, nil -} - -func (r *TestCase) isDup(ctx context.Context, t *models.TestCase) (bool, error) { - - reqKeys := map[string][]string{} - filterKeys := map[string][]string{} - uri := "" - - index, err := r.fillCache(ctx, t) - if err != nil { - return false, err - } - - switch t.Type { - case string(models.HTTP): - uri = t.URI - // add headers - for k, v := range t.HttpReq.Header { - reqKeys["header."+k] = []string{strings.Join(v, "")} - } - - // add url params - for k, v := range t.HttpReq.URLParams { - reqKeys["url_params."+k] = []string{v} - } - - // add body if it is a valid json - if json.Valid([]byte(t.HttpReq.Body)) { - var result interface{} - - err = json.Unmarshal([]byte(t.HttpReq.Body), &result) - if err != nil { - return false, err - } - body := pkg.Flatten(result) - for k, v := range body { - nk := "body" - if k != "" { - nk = nk + "." + k - } - reqKeys[nk] = v - } - } - case string(models.GRPC_EXPORT): - uri = t.GrpcReq.Method - if json.Valid([]byte(t.GrpcReq.Body)) { - var result interface{} - - err = json.Unmarshal([]byte(t.GrpcReq.Body), &result) - if err != nil { - return false, err - } - body := pkg.Flatten(result) - for k, v := range body { - nk := "body" - if k != "" { - nk = nk + "." + k - } - reqKeys[nk] = v - } - } - } - - isAnchorChange := false - for k, v := range reqKeys { - if !r.noisyFields[index][k] { - // update field count - for _, s := range v { - if _, ok := r.fieldCounts[index][k]; !ok { - r.fieldCounts[index][k] = map[string]int{} - } - r.fieldCounts[index][k][s] = r.fieldCounts[index][k][s] + 1 - } - if !isAnchor(r.fieldCounts[index][k]) { - r.noisyFields[index][k] = true - isAnchorChange = true - continue - } - filterKeys[k] = v - } - } - - if len(filterKeys) == 0 { - return true, nil - } - if isAnchorChange { - err = r.tdb.DeleteByAnchor(ctx, t.CID, t.AppID, uri, t.Type, filterKeys) - if err != nil { - return false, err - } - } - - // check if testcase based on anchor keys already exists - dup, err := r.exists(ctx, filterKeys, index) - if err != nil { - return false, err - } - - t.AllKeys = reqKeys - //var keys []string - //for k := range filterKeys { - // keys = append(keys, k) - //} - t.Anchors = filterKeys - r.anchors[index] = append(r.anchors[index], filterKeys) - - return dup, nil -} - -func (r *TestCase) exists(_ context.Context, anchors map[string][]string, index string) (bool, error) { - for _, v := range anchors { - sort.Strings(v) - } - for _, v := range r.anchors[index] { - if reflect.DeepEqual(v, anchors) { - return true, nil - } - } - return false, nil - -} - -func isAnchor(m map[string]int) bool { - totalCount := 0 - for _, v := range m { - totalCount = totalCount + v - } - // if total values for that field is less than 20 then, - // the sample size is too small to know if its high variance. - if totalCount < 20 { - return true - } - // if the unique values are less than 40% of the total value count them, - // the field is low variant. - if float64(totalCount)*0.40 > float64(len(m)) { - return true - } - return false -} diff --git a/pkg/service/testCase/testCase_test.go b/pkg/service/testCase/testCase_test.go deleted file mode 100644 index 23d3d98b5..000000000 --- a/pkg/service/testCase/testCase_test.go +++ /dev/null @@ -1,350 +0,0 @@ -package testCase - -import ( - "context" - "errors" - "net/http" - "os" - "testing" - - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/pkg/models" - mockPlatform "go.keploy.io/server/pkg/platform/fs" - "go.keploy.io/server/pkg/platform/telemetry" - "go.uber.org/zap" -) - -const defaultCompany = "default_company" - -var ( - tcsPath string - mockPath string - err error - logger *zap.Logger - tcSvc *TestCase -) - -var ( - httpTcs = []models.TestCase{ - { - ID: "1", - Created: 1674553692, - Updated: 1674553692, - Captured: 1674553692, - CID: defaultCompany, - AppID: "test-1", - URI: "/url", - HttpReq: models.HttpReq{ - Method: "GET", - ProtoMajor: 0, - ProtoMinor: 0, - URL: "/url", - }, - HttpResp: models.HttpResp{ - StatusCode: 200, - Header: http.Header{ - "Pass": []string{"true"}, - }, - Body: `{"message": "passed"}`, - }, - Mocks: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-2", - Kind: string(models.GENERIC), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "operation": "find", - }, - Objects: []*proto.Mock_Object{ - { - Type: "error", - Data: []byte("123"), - }, - }, - }, - }, - }, - Type: string(models.HTTP), - }, - } - grpcTcs = []models.TestCase{ - { - ID: "1", - Created: 1674553692, - Updated: 1674553692, - Captured: 1674553692, - CID: defaultCompany, - AppID: "test-2", - GrpcReq: models.GrpcReq{ - Body: "Lorem Ipsum", - Method: "services.Service.Add", - }, - GrpcResp: models.GrpcResp{ - Body: "success", - Err: "nil", - }, - Mocks: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-2", - Kind: string(models.GENERIC), - Spec: &proto.Mock_SpecSchema{ - Metadata: make(map[string]string), - Objects: []*proto.Mock_Object{ - { - Type: "error", - Data: []byte("123"), - }, - }, - }, - }, - }, - Type: string(models.GRPC_EXPORT), - }, - } -) - -func TestMain(m *testing.M) { - logger, _ = zap.NewProduction() - defer logger.Sync() - tcsPath, err = os.Getwd() - if err != nil { - logger.Error("failed to get the current absolute path", zap.Error(err)) - } - mockPath = tcsPath + "/mocks" - tcsPath += "/tests" - - mockFS := mockPlatform.NewMockExportFS(false) - analyticsConfig := telemetry.NewTelemetry(nil, false, false, true, nil, logger, "",nil) - tcSvc = New(nil, logger, false, analyticsConfig, true, mockFS) - - m.Run() -} - -func TestInsert(t *testing.T) { - - for _, tt := range []struct { - input struct { - testCasePath string - mockPath string - t []models.TestCase - } - result struct { - id []string - err error - } - }{ - //keys and values matches - { - input: struct { - testCasePath string - mockPath string - t []models.TestCase - }{ - testCasePath: "", - mockPath: "", - t: httpTcs, - }, - result: struct { - id []string - err error - }{ - id: nil, - err: errors.New("path directory not found. got testcase path: and mock path: "), - }, - }, - { - input: struct { - testCasePath string - mockPath string - t []models.TestCase - }{ - testCasePath: tcsPath, - mockPath: mockPath, - t: httpTcs, - }, - result: struct { - id []string - err error - }{ - id: []string{"test-1"}, - err: nil, - }, - }, - { - input: struct { - testCasePath string - mockPath string - t []models.TestCase - }{ - testCasePath: tcsPath, - mockPath: mockPath, - t: grpcTcs, - }, - result: struct { - id []string - err error - }{ - id: []string{"test-2"}, - err: nil, - }, - }, - } { - actId, actErr := tcSvc.Insert(context.Background(), tt.input.t, tt.input.testCasePath, tt.input.mockPath, defaultCompany, []string{}, map[string]string{}) - if (actErr == nil && tt.result.err != nil) || (actErr != nil && tt.result.err == nil) || (actErr != nil && tt.result.err != nil && actErr.Error() != tt.result.err.Error()) { - t.Fatal("Err from Insert does not matches", "Expected", tt.result.err, "Actual", actErr) - } - if len(tt.result.id) != len(actId) { - t.Fatal("length of the actual ids is not equal with expected", "Expected ids", tt.result.id, "Actual ids", actId) - } - tearDown(tt.input.t[0].ID) - } -} - -func TestGetAll(t *testing.T) { - for _, tt := range []struct { - input struct { - testCasePath string - mockPath string - tcsType string - } - result struct { - tcs []models.TestCase - err error - } - }{ - { - input: struct { - testCasePath string - mockPath string - tcsType string - }{ - testCasePath: tcsPath, - mockPath: mockPath, - tcsType: string(models.HTTP), - }, - result: struct { - tcs []models.TestCase - err error - }{ - tcs: []models.TestCase{ - { - ID: "1", - Created: 1674553692, - Updated: 1674553692, - Captured: 1674553692, - CID: defaultCompany, - AppID: "test-1", - URI: "/url", - HttpReq: models.HttpReq{ - Method: "GET", - ProtoMajor: 0, - ProtoMinor: 0, - URL: "/url", - }, - HttpResp: models.HttpResp{ - StatusCode: 200, - Header: http.Header{ - "Pass": []string{"true"}, - }, - Body: `{"message": "passed"}`, - }, - Mocks: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-2", - Kind: string(models.GENERIC), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "operation": "find", - }, - Objects: []*proto.Mock_Object{ - { - Type: "error", - Data: []byte("123"), - }, - }, - }, - }, - }, - Type: string(models.HTTP), - }, - }, - }, - }, - { - input: struct { - testCasePath string - mockPath string - tcsType string - }{ - testCasePath: tcsPath, - mockPath: mockPath, - tcsType: string(models.GRPC_EXPORT), - }, - result: struct { - tcs []models.TestCase - err error - }{ - tcs: []models.TestCase{ - { - ID: "1", - Created: 1674553692, - Updated: 1674553692, - Captured: 1674553692, - CID: defaultCompany, - AppID: "test-2", - GrpcReq: models.GrpcReq{ - Body: "Lorem Ipsum", - Method: "services.Service.Add", - }, - GrpcResp: models.GrpcResp{ - Body: "success", - Err: "nil", - }, - Mocks: []*proto.Mock{ - { - Version: string(models.V1Beta2), - Name: "mock-2", - Kind: string(models.GENERIC), - Spec: &proto.Mock_SpecSchema{ - Metadata: map[string]string{ - "operation": "find", - }, - Objects: []*proto.Mock_Object{ - { - Type: "error", - Data: []byte("123"), - }, - }, - }, - }, - }, - Type: string(models.GRPC_EXPORT), - }, - }, - }, - }, - } { - tcSvc.Insert(context.Background(), tt.result.tcs, tt.input.testCasePath, tt.input.mockPath, defaultCompany, []string{}, map[string]string{}) - - actTcs, actErr := tcSvc.GetAll(context.Background(), defaultCompany, "", nil, nil, tt.input.testCasePath, tt.input.mockPath, tt.input.tcsType) - if (actErr == nil && tt.result.err != nil) || (actErr != nil && tt.result.err == nil) || (actErr != nil && tt.result.err != nil && actErr.Error() != tt.result.err.Error()) { - t.Fatal("Err from GetAll does not matches", "Expected", tt.result.err, "Actual", actErr) - } - if len(tt.result.tcs) != len(actTcs) { - t.Fatal("length of the actual ids is not equal with expected", "Expected ids", tt.result.tcs, "Actual ids", actTcs) - } - tearDown(tt.result.tcs[0].ID) - } -} - -func tearDown(tid string) { - if _, err := os.ReadDir("tests"); err == nil { - os.RemoveAll("tests") - } - if _, err := os.ReadDir("mocks"); err == nil { - os.RemoveAll("mocks") - } -} diff --git a/pkg/service/tools/service.go b/pkg/service/tools/service.go new file mode 100644 index 000000000..055821401 --- /dev/null +++ b/pkg/service/tools/service.go @@ -0,0 +1,12 @@ +// Package tools provides utility functions for the service package. +package tools + +import "context" + +type Service interface { + Update(ctx context.Context) error + CreateConfig(ctx context.Context, filePath string, config string) error +} + +type teleDB interface { +} diff --git a/pkg/service/tools/tools.go b/pkg/service/tools/tools.go new file mode 100644 index 000000000..d6a74bd86 --- /dev/null +++ b/pkg/service/tools/tools.go @@ -0,0 +1,285 @@ +package tools + +import ( + "archive/tar" + "compress/gzip" + "context" + "errors" + "fmt" + "io" + "io/fs" + "net/http" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" + + "github.com/charmbracelet/glamour" + "go.keploy.io/server/v2/config" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" + "gopkg.in/yaml.v3" +) + +func NewTools(logger *zap.Logger, telemetry teleDB) Service { + return &Tools{ + logger: logger, + telemetry: telemetry, + } +} + +type Tools struct { + logger *zap.Logger + telemetry teleDB +} + +var ErrGitHubAPIUnresponsive = errors.New("GitHub API is unresponsive") + +// Update initiates the tools process for the Keploy binary file. +func (t *Tools) Update(ctx context.Context) error { + currentVersion := "v" + utils.Version + isKeployInDocker := len(os.Getenv("KEPLOY_INDOCKER")) > 0 + if isKeployInDocker { + fmt.Println("As you are using docker version of keploy, please pull the latest Docker image of keploy to update keploy") + return nil + } + if strings.HasSuffix(currentVersion, "-dev") { + fmt.Println("you are using a development version of Keploy. Skipping update") + return nil + } + + releaseInfo, err := utils.GetLatestGitHubRelease(ctx, t.logger) + if err != nil { + if errors.Is(err, ErrGitHubAPIUnresponsive) { + return errors.New("gitHub API is unresponsive. Update process cannot continue") + } + return fmt.Errorf("failed to fetch latest GitHub release version: %v", err) + } + + latestVersion := releaseInfo.TagName + changelog := releaseInfo.Body + + if currentVersion == latestVersion { + fmt.Println("βœ…You are already on the latest version of Keploy: " + latestVersion) + return nil + } + + t.logger.Info("Updating to Version: " + latestVersion) + + downloadURL := "" + if runtime.GOARCH == "amd64" { + downloadURL = "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_amd64.tar.gz" + } else { + downloadURL = "https://github.com/keploy/keploy/releases/latest/download/keploy_linux_arm64.tar.gz" + } + err = t.downloadAndUpdate(ctx, t.logger, downloadURL) + if err != nil { + return err + } + + t.logger.Info("Update Successful!") + + changelog = "\n" + string(changelog) + var renderer *glamour.TermRenderer + + var termRendererOpts []glamour.TermRendererOption + termRendererOpts = append(termRendererOpts, glamour.WithAutoStyle(), glamour.WithWordWrap(0)) + + renderer, err = glamour.NewTermRenderer(termRendererOpts...) + if err != nil { + utils.LogError(t.logger, err, "failed to initialize renderer") + return err + } + changelog, err = renderer.Render(changelog) + if err != nil { + utils.LogError(t.logger, err, "failed to render release notes") + return err + } + fmt.Println(changelog) + return nil +} + +func (t *Tools) downloadAndUpdate(ctx context.Context, logger *zap.Logger, downloadURL string) error { + // Create a new request with context + req, err := http.NewRequestWithContext(ctx, "GET", downloadURL, nil) + if err != nil { + return fmt.Errorf("failed to create request: %v", err) + } + + // Create a HTTP client and execute the request + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return fmt.Errorf("failed to download file: %v", err) + } + defer func() { + if cerr := resp.Body.Close(); cerr != nil { + utils.LogError(logger, cerr, "failed to close response body") + } + }() + + // Create a temporary file to store the downloaded tar.gz + tmpFile, err := os.CreateTemp("", "keploy-download-*.tar.gz") + if err != nil { + return fmt.Errorf("failed to create temporary file: %v", err) + } + defer func() { + if err := tmpFile.Close(); err != nil { + utils.LogError(logger, err, "failed to close temporary file") + } + if err := os.Remove(tmpFile.Name()); err != nil { + utils.LogError(logger, err, "failed to remove temporary file") + } + }() + + // Write the downloaded content to the temporary file + _, err = io.Copy(tmpFile, resp.Body) + if err != nil { + return fmt.Errorf("failed to write to temporary file: %v", err) + } + + // Extract the tar.gz file + if err := extractTarGz(tmpFile.Name(), "/tmp"); err != nil { + return fmt.Errorf("failed to extract tar.gz file: %v", err) + } + + // Determine the path based on the alias "keploy" + aliasPath := "/usr/local/bin/keploy" // Default path + + keployPath, err := exec.LookPath("keploy") + if err == nil && keployPath != "" { + aliasPath = keployPath + } + + // Check if the aliasPath is a valid path + _, err = os.Stat(aliasPath) + if os.IsNotExist(err) { + return fmt.Errorf("alias path %s does not exist", aliasPath) + } + + // Check if the aliasPath is a directory + if fileInfo, err := os.Stat(aliasPath); err == nil && fileInfo.IsDir() { + return fmt.Errorf("alias path %s is a directory, not a file", aliasPath) + } + + // Move the extracted binary to the alias path + if err := os.Rename("/tmp/keploy", aliasPath); err != nil { + return fmt.Errorf("failed to move keploy binary to %s: %v", aliasPath, err) + } + + if err := os.Chmod(aliasPath, 0777); err != nil { + return fmt.Errorf("failed to set execute permission on %s: %v", aliasPath, err) + } + + return nil +} + +func extractTarGz(gzipPath, destDir string) error { + file, err := os.Open(gzipPath) + if err != nil { + return err + } + + defer func() { + if err := file.Close(); err != nil { + utils.LogError(nil, err, "failed to close file") + } + }() + + gzipReader, err := gzip.NewReader(file) + if err != nil { + return err + } + + defer func() { + if err := gzipReader.Close(); err != nil { + utils.LogError(nil, err, "failed to close gzip reader") + } + }() + + tarReader := tar.NewReader(gzipReader) + + for { + header, err := tarReader.Next() + if err == io.EOF { + break + } + if err != nil { + return err + } + + fileName := filepath.Clean(header.Name) + if strings.Contains(fileName, "..") { + return fmt.Errorf("invalid file path: %s", fileName) + } + + target := filepath.Join(destDir, header.Name) + + switch header.Typeflag { + case tar.TypeDir: + if err := os.MkdirAll(target, 0777); err != nil { + return err + } + case tar.TypeReg: + outFile, err := os.Create(target) + if err != nil { + return err + } + if _, err := io.Copy(outFile, tarReader); err != nil { + if err := outFile.Close(); err != nil { + return err + } + return err + } + if err := outFile.Close(); err != nil { + return err + } + } + } + return nil +} + +func (t *Tools) CreateConfig(_ context.Context, filePath string, configData string) error { + var node yaml.Node + var data []byte + var err error + + if configData != "" { + data = []byte(configData) + } else { + configData, err = config.Merge(config.InternalConfig, config.GetDefaultConfig()) + if err != nil { + utils.LogError(t.logger, err, "failed to create default config string") + return nil + } + data = []byte(configData) + } + + if err := yaml.Unmarshal(data, &node); err != nil { + utils.LogError(t.logger, err, "failed to unmarshal the config") + return nil + } + results, err := yaml.Marshal(node.Content[0]) + if err != nil { + utils.LogError(t.logger, err, "failed to marshal the config") + return nil + } + + finalOutput := append(results, []byte(utils.ConfigGuide)...) + + err = os.WriteFile(filePath, finalOutput, fs.ModePerm) + if err != nil { + utils.LogError(t.logger, err, "failed to write config file") + return nil + } + + err = os.Chmod(filePath, 0777) // Set permissions to 777 + if err != nil { + utils.LogError(t.logger, err, "failed to set the permission of config file") + return nil + } + + t.logger.Info("Config file generated successfully") + return nil +} diff --git a/pkg/util.go b/pkg/util.go new file mode 100755 index 000000000..b0001c105 --- /dev/null +++ b/pkg/util.go @@ -0,0 +1,212 @@ +// Package pkg provides utility functions for Keploy. +package pkg + +import ( + "bufio" + "bytes" + "context" + "fmt" + "io" + "io/fs" + "net/http" + "os" + "strconv" + "strings" + "time" + + "github.com/araddon/dateparse" + "go.keploy.io/server/v2/pkg/models" + "go.keploy.io/server/v2/utils" + "go.uber.org/zap" +) + +var Emoji = "\U0001F430" + " Keploy:" + +// URLParams returns the Url and Query parameters from the request url. +func URLParams(r *http.Request) map[string]string { + qp := r.URL.Query() + result := make(map[string]string) + + for key, values := range qp { + result[key] = strings.Join(values, ", ") + } + + return result +} + +// ToYamlHTTPHeader converts the http header into yaml format +func ToYamlHTTPHeader(httpHeader http.Header) map[string]string { + header := map[string]string{} + for i, j := range httpHeader { + header[i] = strings.Join(j, ",") + } + return header +} + +func ToHTTPHeader(mockHeader map[string]string) http.Header { + header := http.Header{} + for i, j := range mockHeader { + match := IsTime(j) + if match { + //Values like "Tue, 17 Jan 2023 16:34:58 IST" should be considered as single element + header[i] = []string{j} + continue + } + header[i] = strings.Split(j, ",") + } + return header +} + +// IsTime verifies whether a given string represents a valid date or not. +func IsTime(stringDate string) bool { + s := strings.TrimSpace(stringDate) + _, err := dateparse.ParseAny(s) + return err == nil +} + +func SimulateHTTP(ctx context.Context, tc models.TestCase, testSet string, logger *zap.Logger, apiTimeout uint64) (*models.HTTPResp, error) { + var resp *models.HTTPResp + + logger.Info("starting test for of", zap.Any("test case", models.HighlightString(tc.Name)), zap.Any("test set", models.HighlightString(testSet))) + req, err := http.NewRequestWithContext(ctx, string(tc.HTTPReq.Method), tc.HTTPReq.URL, bytes.NewBufferString(tc.HTTPReq.Body)) + if err != nil { + utils.LogError(logger, err, "failed to create a http request from the yaml document") + return nil, err + } + req.Header = ToHTTPHeader(tc.HTTPReq.Header) + req.Header.Set("KEPLOY-TEST-ID", tc.Name) + req.ProtoMajor = tc.HTTPReq.ProtoMajor + req.ProtoMinor = tc.HTTPReq.ProtoMinor + + logger.Debug(fmt.Sprintf("Sending request to user app:%v", req)) + + // Creating the client and disabling redirects + var client *http.Client + + keepAlive, ok := req.Header["Connection"] + if ok && strings.EqualFold(keepAlive[0], "keep-alive") { + logger.Debug("simulating request with conn:keep-alive") + client = &http.Client{ + Timeout: time.Second * time.Duration(apiTimeout), + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { + return http.ErrUseLastResponse + }, + } + } else if ok && strings.EqualFold(keepAlive[0], "close") { + logger.Debug("simulating request with conn:close") + client = &http.Client{ + Timeout: time.Second * time.Duration(apiTimeout), + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { + return http.ErrUseLastResponse + }, + Transport: &http.Transport{ + DisableKeepAlives: true, + }, + } + } else { + logger.Debug("simulating request with conn:keep-alive (maxIdleConn=1)") + client = &http.Client{ + Timeout: time.Second * time.Duration(apiTimeout), + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { + return http.ErrUseLastResponse + }, + Transport: &http.Transport{ + DisableKeepAlives: false, + MaxIdleConns: 1, + }, + } + } + + httpResp, errHTTPReq := client.Do(req) + if errHTTPReq != nil { + utils.LogError(logger, errHTTPReq, "failed to send testcase request to app") + return nil, errHTTPReq + } + + respBody, errReadRespBody := io.ReadAll(httpResp.Body) + if errReadRespBody != nil { + utils.LogError(logger, errReadRespBody, "failed reading response body") + return nil, err + } + + resp = &models.HTTPResp{ + StatusCode: httpResp.StatusCode, + Body: string(respBody), + Header: ToYamlHTTPHeader(httpResp.Header), + } + + return resp, errHTTPReq +} + +func ParseHTTPRequest(requestBytes []byte) (*http.Request, error) { + // Parse the request using the http.ReadRequest function + request, err := http.ReadRequest(bufio.NewReader(bytes.NewReader(requestBytes))) + if err != nil { + return nil, err + } + request.Header.Set("Host", request.Host) + + return request, nil +} + +func ParseHTTPResponse(data []byte, request *http.Request) (*http.Response, error) { + buffer := bytes.NewBuffer(data) + reader := bufio.NewReader(buffer) + response, err := http.ReadResponse(reader, request) + if err != nil { + return nil, err + } + return response, nil +} + +func MakeCurlCommand(method string, url string, header map[string]string, body string) string { + curl := fmt.Sprintf("curl --request %s \\\n", method) + curl = curl + fmt.Sprintf(" --url %s \\\n", url) + for k, v := range header { + if k != "Content-Length" { + curl = curl + fmt.Sprintf(" --header '%s: %s' \\\n", k, v) + } + } + if body != "" { + curl = curl + fmt.Sprintf(" --data '%s'", body) + } + return curl +} + +func ReadSessionIndices(path string, Logger *zap.Logger) ([]string, error) { + indices := []string{} + dir, err := os.OpenFile(path, os.O_RDONLY, fs.FileMode(os.O_RDONLY)) + if err != nil { + Logger.Debug("creating a folder for the keploy generated testcases", zap.Error(err)) + return indices, nil + } + + files, err := dir.ReadDir(0) + if err != nil { + return indices, err + } + + for _, v := range files { + if v.Name() != "reports" { + indices = append(indices, v.Name()) + } + } + return indices, nil +} + +func NewID(IDs []string, identifier string) string { + latestIndx := 0 + for _, ID := range IDs { + namePackets := strings.Split(ID, "-") + if len(namePackets) == 3 { + Indx, err := strconv.Atoi(namePackets[2]) + if err != nil { + continue + } + if latestIndx < Indx+1 { + latestIndx = Indx + 1 + } + } + } + return fmt.Sprintf("%s%v", identifier, latestIndx) +} diff --git a/pkg/utils.go b/pkg/utils.go deleted file mode 100644 index dad777a86..000000000 --- a/pkg/utils.go +++ /dev/null @@ -1,426 +0,0 @@ -package pkg - -import ( - "encoding/json" - "fmt" - "html" - "net/http" - "net/url" - "reflect" - "regexp" - "strconv" - "strings" - - "github.com/araddon/dateparse" - proto "go.keploy.io/server/grpc/regression" - "go.keploy.io/server/grpc/utils" - "go.keploy.io/server/pkg/models" - "go.uber.org/zap" -) - -func IsTime(stringDate string) bool { - s := strings.TrimSpace(stringDate) - _, err := dateparse.ParseAny(s) - return err == nil -} - -func AddHttpBodyToMap(body string, m map[string][]string) error { - // add body - if json.Valid([]byte(body)) { - var result interface{} - - err := json.Unmarshal([]byte(body), &result) - if err != nil { - return err - } - j := Flatten(result) - for k, v := range j { - nk := "body" - if k != "" { - nk = nk + "." + k - } - m[nk] = v - } - } else { - // add it as raw text - m["body"] = []string{body} - } - return nil -} - -func FlattenHttpResponse(h http.Header, body string) (map[string][]string, error) { - m := map[string][]string{} - for k, v := range h { - m["header."+k] = []string{strings.Join(v, "")} - } - err := AddHttpBodyToMap(body, m) - if err != nil { - return m, err - } - return m, nil -} - -func FindNoisyFields(m map[string][]string, comparator func(string, []string) bool) []string { - var noise []string - for k, v := range m { - if comparator(k, v) { - noise = append(noise, k) - } - } - return noise -} - -// Flatten takes a map and returns a new one where nested maps are replaced -// by dot-delimited keys. -// examples of valid jsons - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#examples -func Flatten(j interface{}) map[string][]string { - if j == nil { - return map[string][]string{"": {""}} - } - o := make(map[string][]string) - x := reflect.ValueOf(j) - switch x.Kind() { - case reflect.Map: - m, ok := j.(map[string]interface{}) - if !ok { - return map[string][]string{} - } - for k, v := range m { - nm := Flatten(v) - for nk, nv := range nm { - fk := k - if nk != "" { - fk = fk + "." + nk - } - o[fk] = nv - } - } - case reflect.Bool: - o[""] = []string{strconv.FormatBool(x.Bool())} - case reflect.Float64: - o[""] = []string{strconv.FormatFloat(x.Float(), 'E', -1, 64)} - case reflect.String: - o[""] = []string{x.String()} - case reflect.Slice: - child, ok := j.([]interface{}) - if !ok { - return map[string][]string{} - } - for _, av := range child { - nm := Flatten(av) - for nk, nv := range nm { - if ov, exists := o[nk]; exists { - o[nk] = append(ov, nv...) - } else { - o[nk] = nv - } - } - } - default: - fmt.Println("found invalid value in json", j, x.Kind()) - } - return o -} - -func IsValidPath(s string) bool { - return !strings.HasPrefix(s, "/etc/passwd") && !strings.Contains(s, "../") -} - -// sanitiseInput sanitises user input strings before logging them for safety, removing newlines -// and escaping HTML tags. This is to prevent log injection, including forgery of log records. -// Reference: https://www.owasp.org/index.php/Log_Injection -func SanitiseInput(s string) string { - re := regexp.MustCompile(`(\n|\n\r|\r\n|\r)`) - return html.EscapeString(string(re.ReplaceAll([]byte(s), []byte("")))) -} - -func CompareHeaders(h1 http.Header, h2 http.Header, res *[]models.HeaderResult, noise map[string]string) bool { - if res == nil { - return false - } - match := true - _, isHeaderNoisy := noise["header"] - for k, v := range h1 { - // Ignore go http router default headers - // if k == "Date" || k == "Content-Length" || k == "date" || k == "connection" { - // continue - // } - _, isNoisy := noise[k] - isNoisy = isNoisy || isHeaderNoisy - val, ok := h2[k] - if !isNoisy { - if !ok { - if checkKey(res, k) { - *res = append(*res, models.HeaderResult{ - Normal: false, - Expected: models.Header{ - Key: k, - Value: v, - }, - Actual: models.Header{ - Key: k, - Value: nil, - }, - }) - } - - match = false - continue - } - if len(v) != len(val) { - if checkKey(res, k) { - *res = append(*res, models.HeaderResult{ - Normal: false, - Expected: models.Header{ - Key: k, - Value: v, - }, - Actual: models.Header{ - Key: k, - Value: val, - }, - }) - } - match = false - continue - } - for i, e := range v { - if val[i] != e { - if checkKey(res, k) { - *res = append(*res, models.HeaderResult{ - Normal: false, - Expected: models.Header{ - Key: k, - Value: v, - }, - Actual: models.Header{ - Key: k, - Value: val, - }, - }) - } - match = false - continue - } - } - } - if checkKey(res, k) { - *res = append(*res, models.HeaderResult{ - Normal: true, - Expected: models.Header{ - Key: k, - Value: v, - }, - Actual: models.Header{ - Key: k, - Value: val, - }, - }) - } - } - for k, v := range h2 { - // Ignore go http router default headers - // if k == "Date" || k == "Content-Length" || k == "date" || k == "connection" { - // continue - // } - _, isNoisy := noise[k] - isNoisy = isNoisy || isHeaderNoisy - val, ok := h1[k] - if isNoisy && checkKey(res, k) { - *res = append(*res, models.HeaderResult{ - Normal: true, - Expected: models.Header{ - Key: k, - Value: val, - }, - Actual: models.Header{ - Key: k, - Value: v, - }, - }) - continue - } - if !ok { - if checkKey(res, k) { - *res = append(*res, models.HeaderResult{ - Normal: false, - Expected: models.Header{ - Key: k, - Value: nil, - }, - Actual: models.Header{ - Key: k, - Value: v, - }, - }) - } - - match = false - } - } - return match -} - -func checkKey(res *[]models.HeaderResult, key string) bool { - for _, v := range *res { - if key == v.Expected.Key { - return false - } - } - return true -} - -func Contains(elems []string, v string) bool { - for _, s := range elems { - if v == s { - return true - } - } - return false -} -func FilterFields(r interface{}, filter []string, logger *zap.Logger) interface{} { //This filters the headers that the user does not want to record - for _, v := range filter { - fields := strings.Split(v, ".") - if len(fields) < 3 { - logger.Error(fmt.Sprintf("failed to filter a tcs field `%v` due to invalid format. Format should be `..`", v)) - continue - } - fieldType := fields[0] //req, resp, all - fieldValue := fields[1] //header, body - fieldName := fields[2] //name of the header or body - - switch i := r.(type) { - case models.TestCase: //This is for the case when the user wants to filter the headers of the testcases - // i := r.(models.TestCase) - if fieldType == "req" || fieldType == "all" { - fieldRegex := regexp.MustCompile(fieldName) - switch fieldValue { - case "header": // pair with matching key is filtered from request headers - for k := range i.HttpReq.Header { //If the regex matches the header name, delete it - if fieldRegex.MatchString(k) { - delete(i.HttpReq.Header, k) - } - } - // TODO: Filter for request body - } - } - if fieldType == "resp" || fieldType == "all" { - fieldRegex := regexp.MustCompile(fieldName) - switch fieldValue { - case "header": // filters pair with matching key from the response headers - for k := range i.HttpResp.Header { - if fieldRegex.MatchString(k) { - delete(i.HttpResp.Header, k) - } - } - // TODO: Filter for response body - } - } - case *proto.Mock_SpecSchema: //This is for the case when the user wants to filter the headers of the mocks - // i := r.(*proto.Mock_SpecSchema) - if fieldType == "req" || fieldType == "all" { - fieldRegex := regexp.MustCompile(fieldName) - switch fieldValue { - case "header": // pair with matching key is filtered from request headers - for k := range i.Req.Header { - if fieldRegex.MatchString(k) { - delete(i.Req.Header, k) - } - } - // TODO: Filter for response body - } - } - if fieldType == "resp" || fieldType == "all" { - fieldRegex := regexp.MustCompile(fieldName) - switch fieldValue { - case "header": // filters pair with matching key from the response headers - for k := range i.Res.Header { - if fieldRegex.MatchString(k) { - delete(i.Res.Header, k) - } - } - } - } - } - } - return r -} - -// replaceUrlDomain changes the Domain of the full urlStr to domain -func replaceUrlDomain(urlStr string, domain string, logger *zap.Logger) (*url.URL, error) { - replaceUrl, err := url.Parse(urlStr) - if err != nil { - logger.Error("failed to replace http.Request domain field due to error while parsing url", zap.Error(err)) - return replaceUrl, err - } - replaceUrl.Host = domain // changes the Domain of parsed url - return replaceUrl, nil -} - -// ReplaceFields replaces the http test-case Request fields to values from the "replace" map. -func ReplaceFields(r interface{}, replace map[string]string, logger *zap.Logger) interface{} { - for k, v := range replace { - fields := strings.Split(k, ".") - fieldType := fields[0] //header, domain, method, proto_major, proto_minor - - switch fieldType { - case "header": // FORMAT should be "header.key":"val1 | val2 | val3" - newHeader := strings.Split(v, " | ") //The value of the header is a string of the form "value1 | value2" - if len(fields) > 1 { - switch i := r.(type) { - case models.TestCase: - i.HttpReq.Header[fields[1]] = newHeader - case *proto.Mock_SpecSchema: - i.Req.Header[fields[1]] = utils.ToStrArr(newHeader) - } - } else { - logger.Error("failed to replace http.Request header field due to no header key provided. The format should be `map[string]string{'header.Accept': 'val1 | val2 | val3'}`") - } - case "domain": - switch i := r.(type) { - case models.TestCase: - if replacedUrl, err := replaceUrlDomain(i.HttpReq.URL, v, logger); err == nil { - i.HttpReq.URL = replacedUrl.String() - } - case *proto.Mock_SpecSchema: - if replacedUrl, err := replaceUrlDomain(i.Req.URL, v, logger); err == nil { - i.Req.URL = replacedUrl.String() - - } - } - case "method": - switch i := r.(type) { - case models.TestCase: - i.HttpReq.Method = models.Method(v) - case *proto.Mock_SpecSchema: - i.Req.Method = v - i.Metadata["operation"] = v - } - case "proto_major": - protomajor, err := strconv.Atoi(v) - if err != nil { - logger.Error("failed to replace http.Request proto_major field", zap.Error(err)) - } - switch i := r.(type) { - case models.TestCase: - i.HttpReq.ProtoMajor = protomajor - case *proto.Mock_SpecSchema: - i.Req.ProtoMajor = int64(protomajor) - } - case "proto_minor": - protominor, err := strconv.Atoi(v) - if err != nil { - logger.Error("failed to replace http.Request proto_minor field", zap.Error(err)) - } - switch i := r.(type) { - case models.TestCase: - i.HttpReq.ProtoMinor = protominor - case *proto.Mock_SpecSchema: - i.Req.ProtoMinor = int64(protominor) - } - default: - logger.Error("Invalid format for replace map keys. Possible values for keys are `header, domain, method, proto_major, proto_minor`") - } - } - return r -} diff --git a/pkg/utils_test.go b/pkg/utils_test.go deleted file mode 100644 index 67e40feaa..000000000 --- a/pkg/utils_test.go +++ /dev/null @@ -1,362 +0,0 @@ -package pkg - -import ( - // "encoding/json" - // "fmt" - "fmt" - "net/http" - "testing" - - // "time" - "github.com/go-test/deep" - "go.keploy.io/server/pkg/models" - "go.uber.org/zap" -) - -func TestCompareHeader(t *testing.T) { - for _, tt := range []struct { - exp http.Header - actual http.Header - hdrResult []models.HeaderResult - noise map[string]string - result bool - }{ - //keys and values matches - { - exp: http.Header{ - "id": {"1234"}, - "app": {"sports", "study"}, - }, - actual: http.Header{ - "id": {"1234"}, - "app": {"sports", "study"}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: true, - Expected: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - Actual: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - }, - { - Normal: true, - Expected: models.Header{ - Key: "app", - Value: []string{"sports", "study"}, - }, - Actual: models.Header{ - Key: "app", - Value: []string{"sports", "study"}, - }, - }, - }, - noise: map[string]string{}, - result: true, - }, - //key present in actual but not in exp - { - exp: http.Header{ - "Content-Length": {"gg"}, - "id": {"1234"}, - }, - actual: http.Header{ - "Content-Length": {"sj"}, - "id": {"1234"}, - "app": {"sports", "study"}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: true, - Expected: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - Actual: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - }, - { - Normal: false, - Expected: models.Header{ - Key: "app", - Value: nil, - }, - Actual: models.Header{ - Key: "app", - Value: []string{"sports", "study"}, - }, - }, - { - Normal: false, - Expected: models.Header{ - Key: "Content-Length", - Value: []string{"gg"}, - }, - Actual: models.Header{ - Key: "Content-Length", - Value: []string{"sj"}, - }, - }, - }, - noise: map[string]string{}, - result: false, - }, - //key present in exp but not in actual - { - exp: http.Header{ - "id": {"1234"}, - "app": {"sports", "study"}, - }, - actual: http.Header{ - "app": {"sports", "study"}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: false, - Expected: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - Actual: models.Header{ - Key: "id", - Value: nil, - }, - }, - { - Normal: true, - Expected: models.Header{ - Key: "app", - Value: []string{"sports", "study"}, - }, - Actual: models.Header{ - Key: "app", - Value: []string{"sports", "study"}, - }, - }, - }, - noise: map[string]string{}, - result: false, - }, - //key present in both but value array aren't equal - { - exp: http.Header{ - "id": {"1234"}, - "app": {"sports", "study", "code"}, - }, - actual: http.Header{ - "id": {"1234"}, - "app": {"sports", "eat", "code"}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: true, - Expected: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - Actual: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - }, - { - Normal: false, - Expected: models.Header{ - Key: "app", - Value: []string{"sports", "study", "code"}, - }, - Actual: models.Header{ - Key: "app", - Value: []string{"sports", "eat", "code"}, - }, - }, - }, - noise: map[string]string{}, - result: false, - }, - //key present but length of value array aren't equal - { - exp: http.Header{ - "id": {"1234"}, - "app": {"sports", "code"}, - }, - actual: http.Header{ - "id": {"1234"}, - "app": {"sports", "eat", "code"}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: true, - Expected: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - Actual: models.Header{ - Key: "id", - Value: []string{"1234"}, - }, - }, - { - Normal: false, - Expected: models.Header{ - Key: "app", - Value: []string{"sports", "code"}, - }, - Actual: models.Header{ - Key: "app", - Value: []string{"sports", "eat", "code"}, - }, - }, - }, - noise: map[string]string{}, - result: false, - }, - //key present but length of value array are empty - { - exp: http.Header{ - "app": {}, - }, - actual: http.Header{ - "app": {}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: true, - Expected: models.Header{ - Key: "app", - Value: []string{}, - }, - Actual: models.Header{ - Key: "app", - Value: []string{}, - }, - }, - }, - result: true, - }, - { - exp: http.Header{}, - actual: http.Header{}, - hdrResult: []models.HeaderResult{}, - noise: map[string]string{}, - result: true, - }, - { - exp: http.Header{ - "etag": {"0/dfjnrgs"}, - "content-length": {"26"}, - }, - actual: http.Header{ - "etag": {"2/fdvtgt"}, - "content-length": {"22"}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: true, - Expected: models.Header{ - Key: "etag", - Value: []string{"0/dfjnrgs"}, - }, - Actual: models.Header{ - Key: "etag", - Value: []string{"2/fdvtgt"}, - }, - }, - { - Normal: true, - Expected: models.Header{ - Key: "content-length", - Value: []string{"26"}, - }, - Actual: models.Header{ - Key: "content-length", - Value: []string{"22"}, - }, - }, - }, - noise: map[string]string{"etag": "etag", "content-length": "content-length"}, - result: true, - }, - { - exp: http.Header{ - "etag": {"0/dfjnrgs"}, - "content-length": {"26"}, - }, - actual: http.Header{ - "etag": {"2/fdvtgt"}, - "content-length": {"22"}, - "host": {"express"}, - }, - hdrResult: []models.HeaderResult{ - { - Normal: false, - Expected: models.Header{ - Key: "etag", - Value: []string{"0/dfjnrgs"}, - }, - Actual: models.Header{ - Key: "etag", - Value: []string{"2/fdvtgt"}, - }, - }, - { - Normal: false, - Expected: models.Header{ - Key: "content-length", - Value: []string{"26"}, - }, - Actual: models.Header{ - Key: "content-length", - Value: []string{"22"}, - }, - }, - { - Normal: true, - Expected: models.Header{ - Key: "host", - Value: nil, - }, - Actual: models.Header{ - Key: "host", - Value: []string{"express"}, - }, - }, - }, - noise: map[string]string{"host": "host"}, - result: false, - }, - } { - logger, _ := zap.NewProduction() - defer logger.Sync() - hdrResult := []models.HeaderResult{} - res := CompareHeaders(tt.exp, tt.actual, &hdrResult, tt.noise) - if res != tt.result { - t.Fatal(tt.exp, tt.actual, "THIS IS EXP", tt.hdrResult, " \n THIS IS ACT", hdrResult) - } - diff := isEqual(hdrResult, tt.hdrResult) - if diff != nil { - fmt.Printf("This is diff %v\n", diff) - t.Fatal("THIS IS EXP", tt.hdrResult, " \n THIS IS ACT", hdrResult) - } - } -} - -func isEqual(x, y []models.HeaderResult) []string { - - expected := make(map[string]models.HeaderResult) - actual := make(map[string]models.HeaderResult) - for _, i := range x { - expected[i.Expected.Key] = i - } - for _, i := range y { - actual[i.Expected.Key] = i - } - - return deep.Equal(expected, actual) -} diff --git a/server/const.go b/server/const.go deleted file mode 100644 index 0327a9b39..000000000 --- a/server/const.go +++ /dev/null @@ -1,5 +0,0 @@ -package server - -const( - DefaultVersion = "0.1.0-dev" -) \ No newline at end of file diff --git a/server/server.go b/server/server.go deleted file mode 100644 index 5e6118e6e..000000000 --- a/server/server.go +++ /dev/null @@ -1,220 +0,0 @@ -package server - -import ( - "fmt" - "math/rand" - "net" - "net/http" - "os" - "path/filepath" - "time" - - "github.com/99designs/gqlgen/graphql/handler" - "github.com/99designs/gqlgen/graphql/playground" - "github.com/go-chi/chi" - "github.com/go-chi/cors" - "github.com/kelseyhightower/envconfig" - "github.com/keploy/go-sdk/integrations/kchi" - "github.com/keploy/go-sdk/integrations/khttpclient" - "github.com/keploy/go-sdk/integrations/kmongo" - "github.com/keploy/go-sdk/keploy" - "github.com/soheilhy/cmux" - "go.keploy.io/server/graph" - "go.keploy.io/server/graph/generated" - "go.keploy.io/server/grpc/grpcserver" - "go.keploy.io/server/http/browserMock" - "go.keploy.io/server/http/regression" - mockPlatform "go.keploy.io/server/pkg/platform/fs" - "go.keploy.io/server/pkg/platform/mgo" - "go.keploy.io/server/pkg/platform/telemetry" - mock2 "go.keploy.io/server/pkg/service/browserMock" - "go.keploy.io/server/pkg/service/mock" - regression2 "go.keploy.io/server/pkg/service/regression" - "go.keploy.io/server/pkg/service/testCase" - "go.keploy.io/server/web" - "go.uber.org/zap" - "golang.org/x/sync/errgroup" -) - -// const defaultPort = "8080" - -const logo string = ` - β–“β–ˆβ–ˆβ–“β–„ - β–“β–“β–“β–“β–ˆβ–ˆβ–“β–ˆβ–“β–„ - β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“β–’ - β–€β–“β–“β–ˆβ–ˆβ–ˆβ–„ β–„β–„ β–„ β–Œ - β–„β–Œβ–Œβ–“β–“β–ˆβ–ˆβ–ˆβ–ˆβ–„ β–ˆβ–ˆ β–“β–ˆβ–€ β–„β–Œβ–€β–„ β–“β–“β–Œβ–„ β–“β–ˆ β–„β–Œβ–“β–“β–Œβ–„ β–Œβ–Œ β–“ - β–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–Œβ–“β–“ β–ˆβ–ˆβ–“β–ˆβ–„ β–“β–ˆβ–„β–“β–“ β–β–ˆβ–Œ β–ˆβ–ˆ β–“β–ˆ β–ˆβ–Œ β–ˆβ–ˆ β–ˆβ–Œ β–ˆβ–“ - β–“β–“β–“β–“β–€β–€β–€β–€β–“β–“β–“β–“β–“β–“β–Œ β–ˆβ–ˆ β–ˆβ–“ β–“β–Œβ–„β–„ β–β–ˆβ–“β–„β–“β–ˆβ–€ β–ˆβ–“β–ˆ β–€β–ˆβ–„β–„β–ˆβ–€ β–ˆβ–“β–ˆ - β–“β–Œ β–β–ˆβ–Œ β–ˆβ–Œ - β–“ -` - -type config struct { - MongoURI string `envconfig:"MONGO_URI" default:"mongodb://localhost:27017"` - DB string `envconfig:"DB" default:"keploy"` - TestCaseTable string `envconfig:"TEST_CASE_TABLE" default:"test-cases"` - TestRunTable string `envconfig:"TEST_RUN_TABLE" default:"test-runs"` - TestTable string `envconfig:"TEST_TABLE" default:"tests"` - TelemetryTable string `envconfig:"TELEMETRY_TABLE" default:"telemetry"` - APIKey string `envconfig:"API_KEY"` - EnableDeDup bool `envconfig:"ENABLE_DEDUP" default:"false"` - EnableTelemetry bool `envconfig:"ENABLE_TELEMETRY" default:"true"` - EnableDebugger bool `envconfig:"ENABLE_DEBUG" default:"false"` - EnableTestExport bool `envconfig:"ENABLE_TEST_EXPORT" default:"true"` - KeployApp string `envconfig:"APP_NAME" default:"Keploy-Test-App"` - Port string `envconfig:"PORT" default:"6789"` - ReportPath string `envconfig:"REPORT_PATH" default:""` - PathPrefix string `envconfig:"KEPLOY_PATH_PREFIX" default:"/"` -} - -func Server(ver string) *chi.Mux { - rand.Seed(time.Now().UTC().UnixNano()) - - logConf := zap.NewDevelopmentConfig() - logConf.Level = zap.NewAtomicLevelAt(zap.InfoLevel) - logger, err := logConf.Build() - if err != nil { - panic(err) - } - defer logger.Sync() // flushes buffer, if any - - var conf config - err = envconfig.Process("keploy", &conf) - if err != nil { - logger.Error("failed to read/process configuration", zap.Error(err)) - } - // default resultPath is current directory from which keploy binary is running - if conf.ReportPath == "" { - curr, err := os.Getwd() - if err != nil { - logger.Error("failed to get path of current directory from which keploy binary is running", zap.Error(err)) - } - conf.ReportPath = curr - } else if conf.ReportPath[0] != '/' { - path, err := filepath.Abs(conf.ReportPath) - if err != nil { - logger.Error("Failed to get the absolute path from relative conf.path", zap.Error(err)) - } - conf.ReportPath = path - } - conf.ReportPath += "/test-reports" - - if conf.EnableDebugger { - logConf.Level.SetLevel(zap.DebugLevel) - } - - cl, err := mgo.New(conf.MongoURI) - if err != nil { - logger.Fatal("failed to create mgo db client", zap.Error(err)) - } - - db := cl.Database(conf.DB) - - tdb := mgo.NewTestCase(kmongo.NewCollection(db.Collection(conf.TestCaseTable)), logger) - - rdb := mgo.NewRun(kmongo.NewCollection(db.Collection(conf.TestRunTable)), kmongo.NewCollection(db.Collection(conf.TestTable)), logger) - - mockFS := mockPlatform.NewMockExportFS(keploy.GetMode() == keploy.MODE_TEST) - testReportFS := mockPlatform.NewTestReportFS(keploy.GetMode() == keploy.MODE_TEST) - path:=mockPlatform.UserHomeDir(true) - _, err = mockPlatform.CreateMockFile(path, "histCfg") - teleFS := mockPlatform.NewTeleFS() - mdb := mgo.NewBrowserMockDB(kmongo.NewCollection(db.Collection("test-browser-mocks")), logger) - browserMockSrv := mock2.NewBrMockService(mdb, logger) - enabled := conf.EnableTelemetry - analyticsConfig := telemetry.NewTelemetry(mgo.NewTelemetryDB(db, conf.TelemetryTable, enabled, logger), enabled, keploy.GetMode() == keploy.MODE_OFF, conf.EnableTestExport, teleFS, logger, ver, nil) - - client := http.Client{ - Transport: khttpclient.NewInterceptor(http.DefaultTransport), - } - - tcSvc := testCase.New(tdb, logger, conf.EnableDeDup, analyticsConfig, conf.EnableTestExport, mockFS) - // runSrv := run.New(rdb, tdb, logger, analyticsConfig, client, testReportFS) - regSrv := regression2.New(tdb, rdb, testReportFS, analyticsConfig, logger, conf.EnableTestExport, mockFS) - mockSrv := mock.NewMockService(mockFS, logger) - - srv := handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: graph.NewResolver(logger, regSrv, tcSvc)})) - - // initialize the client serveri - r := chi.NewRouter() - port := conf.Port - - k := keploy.New(keploy.Config{ - App: keploy.AppConfig{ - Name: conf.KeployApp, - Port: port, - Filter: keploy.Filter{ - AcceptUrlRegex: "^/api", - }, - TestPath: "./cmd/server/keploy/tests", - MockPath: "./cmd/server/keploy/mocks", - Timeout: 80 * time.Second, - }, - - Server: keploy.ServerConfig{ - // LicenseKey: conf.APIKey, - // URL: "https://api.keploy.io", - URL: "http://localhost:6790/api", - }, - }) - - r.Use(kchi.ChiMiddlewareV5(k)) - - r.Use(cors.Handler(cors.Options{ - - AllowedOrigins: []string{"*"}, - AllowCredentials: true, - ExposedHeaders: []string{"Link"}, - AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, - AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"}, - })) - - r.Get("/healthz", func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("ok")) - }) - - r.Handle("/*", http.StripPrefix(conf.PathPrefix, web.Handler())) - - // add api routes - r.Route("/api", func(r chi.Router) { - regression.New(r, logger, regSrv, tcSvc, conf.EnableTestExport, conf.ReportPath) - browserMock.New(r, logger, browserMockSrv) - - r.Handle("/", playground.Handler("keploy graphql backend", "/api/query")) - r.Handle("/query", srv) - }) - - analyticsConfig.Ping(keploy.GetMode() == keploy.MODE_TEST) - - listener, err := net.Listen("tcp", ":"+port) - - if err != nil { - panic(err) - } - - m := cmux.New(listener) - grpcListener := m.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc")) - - httpListener := m.Match(cmux.HTTP1Fast()) - - //log.Printf("πŸ‘ connect to http://localhost:%s for GraphQL playground\n ", port) - hs := mockPlatform.NewHistCfgFS() - g := new(errgroup.Group) - g.Go(func() error { - return grpcserver.New(k, logger, regSrv, mockSrv, tcSvc, hs, grpcListener, conf.EnableTestExport, conf.ReportPath, analyticsConfig, client) - }) - - g.Go(func() error { - srv := http.Server{Handler: r} - err := srv.Serve(httpListener) - return err - }) - g.Go(func() error { return m.Serve() }) - fmt.Println(logo, " ") - fmt.Printf("keploy %v\n\n.", ver) - logger.Info("keploy started at port " + port) - g.Wait() - - return r -} diff --git a/utils/ctx.go b/utils/ctx.go new file mode 100644 index 000000000..1d1167e39 --- /dev/null +++ b/utils/ctx.go @@ -0,0 +1,65 @@ +// Package utils provides utility functions for the Keploy application. +package utils + +import ( + "context" + "errors" + "fmt" + "os" + "os/signal" + "syscall" + + "go.uber.org/zap" +) + +var cancel context.CancelFunc + +func NewCtx() context.Context { + // Create a context that can be canceled + ctx, cancel := context.WithCancel(context.Background()) + + SetCancel(cancel) + // Set up a channel to listen for signals + sigs := make(chan os.Signal, 1) + // os.Interrupt is more portable than syscall.SIGINT + // there is no equivalent for syscall.SIGTERM in os.Signal + signal.Notify(sigs, os.Interrupt, syscall.SIGTERM) + + // Start a goroutine that will cancel the context when a signal is received + go func() { + <-sigs + fmt.Println("Signal received, canceling context...") + cancel() + }() + + return ctx +} + +// Stop requires a reason to stop the server. +// this is to ensure that the server is not stopped accidentally. +// and to trace back the stopper +func Stop(logger *zap.Logger, reason string) error { + // Stop the server. + if logger == nil { + return errors.New("logger is not set") + } + if cancel == nil { + err := errors.New("cancel function is not set") + LogError(logger, err, "failed stopping keploy") + return err + } + + if reason == "" { + err := errors.New("cannot stop keploy without a reason") + LogError(logger, err, "failed stopping keploy") + return err + } + + logger.Info("stopping Keploy", zap.String("reason", reason)) + cancel() + return nil +} + +func SetCancel(c context.CancelFunc) { + cancel = c +} diff --git a/utils/docker.go b/utils/docker.go new file mode 100644 index 000000000..353b1416f --- /dev/null +++ b/utils/docker.go @@ -0,0 +1,84 @@ +package utils + +import ( + "context" + "os" + + "go.keploy.io/server/v2/config" + "go.uber.org/zap" +) + +//func CheckPath(logger *zap.Logger, conf *config.Config, currDir string) error { +// var err error +// if strings.Contains(conf.Path, "..") || strings.HasPrefix(conf.Path, "/") { +// conf.Path, err = filepath.Abs(filepath.Clean(conf.Path)) +// if err != nil { +// return logError(logger, "failed to get the absolute path", conf.Path, err) +// } +// +// relativePath, err := filepath.Rel(currDir, conf.Path) +// if err != nil { +// return logError(logger, "failed to get the relative path", conf.Path, err) +// } +// +// if relativePath == ".." || strings.HasPrefix(relativePath, "../") { +// return logError(logger, "path provided is not a subdirectory of current directory", conf.Path, nil) +// } +// +// if strings.HasPrefix(conf.Path, "/") { +// currentDir, err := getCurrentDirInDocker(curDir) +// if err != nil { +// return logError(logger, "failed to get the current directory path in docker", conf.Path, err) +// } +// +// if !strings.HasPrefix(conf.Path, currentDir) { +// return logError(logger, "path provided is not a subdirectory of current directory", conf.Path, nil) +// } +// +// conf.Path, err = filepath.Rel(currentDir, conf.Path) +// if err != nil { +// return logError(logger, "failed to get the relative path for the subdirectory", conf.Path, err) +// } +// } +// } +// return nil +//} + +// func logError(logger *zap.Logger, message, path string, err error) error { +// LogError(logger, err, message, zap.String("path:", path)) +// return fmt.Errorf("%s: %v", message, err) +// } + +// TODO: Use inbuilt functions rather than executing cmd whereever possible +//func getCurrentDirInDocker(curDir string) (string, error) { +// getDir := fmt.Sprintf(`docker inspect keploy-v2 --format '{{ range .Mounts }}{{ if eq .Destination "%s" }}{{ .Source }}{{ end }}{{ end }}'`, curDir) +// cmd := exec.Command("sh", "-c", getDir) +// out, err := cmd.Output() +// if err != nil { +// return "", err +// } +// return strings.TrimSpace(string(out)), nil +//} + +// StartInDocker will check if the docker command is provided as an input +// then start the Keploy as a docker container and run the command +// should also return a boolean if the execution is moved to docker +func StartInDocker(ctx context.Context, logger *zap.Logger, conf *config.Config) error { + //Check if app command starts with docker or docker-compose. + // If it does, then we would run the docker version of keploy and + // pass the command and control to it. + cmdType := FindDockerCmd(conf.Command) + if conf.InDocker || !(cmdType == Docker || cmdType == DockerCompose) { + return nil + } + // pass the all the commands and args to the docker version of Keploy + err := RunInDocker(ctx, logger) + if err != nil { + LogError(logger, err, "failed to run the command in docker") + return err + } + // gracefully exit the current process + logger.Info("exiting the current process as the command is moved to docker") + os.Exit(0) + return nil +} diff --git a/utils/inc.go b/utils/inc.go new file mode 100644 index 000000000..c7c590038 --- /dev/null +++ b/utils/inc.go @@ -0,0 +1,17 @@ +package utils + +import "sync" + +type AutoInc struct { + sync.Mutex // ensures autoInc is goroutine-safe + id int +} + +func (a *AutoInc) Next() (id int) { + a.Lock() + defer a.Unlock() + + id = a.id + a.id++ + return +} diff --git a/utils/log/colors.go b/utils/log/colors.go new file mode 100644 index 000000000..17127cebb --- /dev/null +++ b/utils/log/colors.go @@ -0,0 +1,44 @@ +// Package log provides utility functions for logging. +package log + +import ( + "bytes" + + "go.uber.org/zap/buffer" + "go.uber.org/zap/zapcore" +) + +type color struct { + *zapcore.EncoderConfig + zapcore.Encoder +} + +func NewColor(cfg zapcore.EncoderConfig) (enc zapcore.Encoder) { + return color{ + EncoderConfig: &cfg, + // Using the default ConsoleEncoder can avoid rewriting interfaces such as ObjectEncoder + Encoder: zapcore.NewConsoleEncoder(cfg), + } +} + +// EncodeEntry overrides ConsoleEncoder's EncodeEntry +func (c color) EncodeEntry(ent zapcore.Entry, fields []zapcore.Field) (buf *buffer.Buffer, err error) { + buff, err := c.Encoder.EncodeEntry(ent, fields) // Utilize the existing implementation of zap + if err != nil { + return nil, err + } + + bytesArr := bytes.Replace(buff.Bytes(), []byte("\\u001b"), []byte("\u001b"), -1) + buff.Reset() + buff.AppendString(string(bytesArr)) + return buff, err +} + +// Clone overrides ConsoleEncoder's Clone +func (c color) Clone() zapcore.Encoder { + clone := c.Encoder.Clone() + return color{ + EncoderConfig: c.EncoderConfig, + Encoder: clone, + } +} diff --git a/utils/log/logger.go b/utils/log/logger.go new file mode 100644 index 000000000..99dd87d17 --- /dev/null +++ b/utils/log/logger.go @@ -0,0 +1,82 @@ +package log + +import ( + "fmt" + "log" + "os" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +var Emoji = "\U0001F430" + " Keploy:" + +// TODO find better way than global variable +var logCfg zap.Config + +func New() (*zap.Logger, error) { + _ = zap.RegisterEncoder("colorConsole", func(config zapcore.EncoderConfig) (zapcore.Encoder, error) { + return NewColor(config), nil + }) + + logCfg = zap.NewDevelopmentConfig() + + logCfg.Encoding = "colorConsole" + + // Customize the encoder config to put the emoji at the beginning. + logCfg.EncoderConfig.EncodeTime = customTimeEncoder + logCfg.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder + + logCfg.OutputPaths = []string{ + "stdout", + "./keploy-logs.txt", + } + + // Check if keploy-log.txt exists, if not create it. + _, err := os.Stat("keploy-logs.txt") + if os.IsNotExist(err) { + _, err := os.Create("keploy-logs.txt") + if err != nil { + return nil, fmt.Errorf("failed to create the log file: %v", err) + } + } + + // Check if the permission of the log file is 777, if not set it to 777. + fileInfo, err := os.Stat("keploy-logs.txt") + if err != nil { + log.Println(Emoji, "failed to get the log file info", err) + return nil, fmt.Errorf("failed to get the log file info: %v", err) + } + if fileInfo.Mode().Perm() != 0777 { + // Set the permissions of the log file to 777. + err = os.Chmod("keploy-logs.txt", 0777) + if err != nil { + log.Println(Emoji, "failed to set the log file permission to 777", err) + return nil, fmt.Errorf("failed to set the log file permission to 777: %v", err) + } + } + + logCfg.Level = zap.NewAtomicLevelAt(zap.InfoLevel) + logCfg.DisableStacktrace = true + logCfg.EncoderConfig.EncodeCaller = nil + + logger, err := logCfg.Build() + if err != nil { + return nil, fmt.Errorf("failed to build config for logger: %v", err) + } + return logger, nil +} + +func ChangeLogLevel(level zapcore.Level) (*zap.Logger, error) { + logCfg.Level = zap.NewAtomicLevelAt(level) + if level == zap.DebugLevel { + logCfg.DisableStacktrace = false + logCfg.EncoderConfig.EncodeCaller = zapcore.ShortCallerEncoder + } + + logger, err := logCfg.Build() + if err != nil { + return nil, fmt.Errorf("failed to build config for logger: %v", err) + } + return logger, nil +} diff --git a/utils/log/time.go b/utils/log/time.go new file mode 100644 index 000000000..48509f7ac --- /dev/null +++ b/utils/log/time.go @@ -0,0 +1,12 @@ +package log + +import ( + "time" + + "go.uber.org/zap/zapcore" +) + +func customTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { + emoji := "\U0001F430" + " Keploy:" + enc.AppendString(emoji + " " + t.Format(time.RFC3339) + " ") +} diff --git a/utils/utils.go b/utils/utils.go new file mode 100644 index 000000000..9f9be9e9c --- /dev/null +++ b/utils/utils.go @@ -0,0 +1,638 @@ +package utils + +import ( + "bufio" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net" + "net/http" + "os" + "os/exec" + "path/filepath" + "runtime" + "runtime/debug" + "strconv" + "strings" + "syscall" + "time" + + "github.com/getsentry/sentry-go" + "github.com/spf13/cobra" + "github.com/spf13/pflag" + "github.com/spf13/viper" + "go.uber.org/zap" + "golang.org/x/term" +) + +var WarningSign = "\U000026A0" + +func BindFlagsToViper(logger *zap.Logger, cmd *cobra.Command, viperKeyPrefix string) error { + var bindErr error + cmd.Flags().VisitAll(func(flag *pflag.Flag) { + // Construct the Viper key and the env variable name + if viperKeyPrefix == "" { + viperKeyPrefix = cmd.Name() + } + viperKey := viperKeyPrefix + "." + flag.Name + envVarName := strings.ToUpper(viperKeyPrefix + "_" + flag.Name) + envVarName = strings.ReplaceAll(envVarName, ".", "_") // Why do we need this? + + // Bind the flag to Viper with the constructed key + err := viper.BindPFlag(viperKey, flag) + if err != nil { + LogError(logger, err, "failed to bind flag to config") + bindErr = err + } + + // Tell Viper to also read this flag's value from the corresponding env variable + err = viper.BindEnv(viperKey, envVarName) + logger.Debug("Binding flag to viper", zap.String("viperKey", viperKey), zap.String("envVarName", envVarName)) + if err != nil { + LogError(logger, err, "failed to bind environment variables to config") + bindErr = err + } + }) + return bindErr +} + +//func ModifyToSentryLogger(ctx context.Context, logger *zap.Logger, client *sentry.Client, configDb *configdb.ConfigDb) *zap.Logger { +// cfg := zapsentry.Configuration{ +// Level: zapcore.ErrorLevel, //when to send message to sentry +// EnableBreadcrumbs: true, // enable sending breadcrumbs to Sentry +// BreadcrumbLevel: zapcore.InfoLevel, // at what level should we sent breadcrumbs to sentry +// Tags: map[string]string{ +// "component": "system", +// }, +// } +// +// core, err := zapsentry.NewCore(cfg, zapsentry.NewSentryClientFromClient(client)) +// //in case of err it will return noop core. So we don't need to attach it to log. +// if err != nil { +// logger.Debug("failed to init zap", zap.Error(err)) +// return logger +// } +// +// logger = zapsentry.AttachCoreToLogger(core, logger) +// kernelVersion := "" +// if runtime.GOOS == "linux" { +// cmd := exec.CommandContext(ctx, "uname", "-r") +// kernelBytes, err := cmd.Output() +// if err != nil { +// logger.Debug("failed to get kernel version", zap.Error(err)) +// } else { +// kernelVersion = string(kernelBytes) +// } +// } +// +// arch := runtime.GOARCH +// installationID, err := configDb.GetInstallationId(ctx) +// if err != nil { +// logger.Debug("failed to get installationID", zap.Error(err)) +// } +// sentry.ConfigureScope(func(scope *sentry.Scope) { +// scope.SetTag("Keploy Version", Version) +// scope.SetTag("Linux Kernel Version", kernelVersion) +// scope.SetTag("Architecture", arch) +// scope.SetTag("Installation ID", installationID) +// }) +// return logger +//} + +// LogError logs the error with the provided fields if the error is not context.Canceled. +func LogError(logger *zap.Logger, err error, msg string, fields ...zap.Field) { + if logger == nil { + fmt.Println("Failed to log error. Logger is nil.") + return + } + if !errors.Is(err, context.Canceled) { + logger.Error(msg, append(fields, zap.Error(err))...) + } +} +func DeleteLogs(logger *zap.Logger) { + //Check if keploy-log.txt exists + _, err := os.Stat("keploy-logs.txt") + if os.IsNotExist(err) { + return + } + //If it does, remove it. + err = os.Remove("keploy-logs.txt") + if err != nil { + LogError(logger, err, "Error removing log file") + return + } +} + +type GitHubRelease struct { + TagName string `json:"tag_name"` + Body string `json:"body"` +} + +var ErrGitHubAPIUnresponsive = errors.New("GitHub API is unresponsive") + +var Emoji = "\U0001F430" + " Keploy:" +var ConfigGuide = ` +# Example on using tests +#tests: +# filters: +# - path: "/user/app" +# urlMethods: ["GET"] +# headers: { +# "^asdf*": "^test" +# } +# host: "dc.services.visualstudio.com" +#Example on using stubs +#stubs: +# filters: +# - path: "/user/app" +# port: 8080 +# - port: 8081 +# - host: "dc.services.visualstudio.com" +# - port: 8081 +# host: "dc.services.visualstudio.com" +# path: "/user/app" + # +#Example on using globalNoise +#globalNoise: +# global: +# body: { +# # to ignore some values for a field, +# # pass regex patterns to the corresponding array value +# "url": ["https?://\S+", "http://\S+"], +# } +# header: { +# # to ignore the entire field, pass an empty array +# "Date": [], +# } +# # to ignore fields or the corresponding values for a specific test-set, +# # pass the test-set-name as a key to the "test-sets" object and +# # populate the corresponding "body" and "header" objects +# test-sets: +# test-set-1: +# body: { +# # ignore all the values for the "url" field +# "url": [] +# } +# header: { +# # we can also pass the exact value to ignore for a field +# "User-Agent": ["PostmanRuntime/7.34.0"] +# } +` + +// AskForConfirmation asks the user for confirmation. A user must type in "yes" or "no" and +// then press enter. It has fuzzy matching, so "y", "Y", "yes", "YES", and "Yes" all count as +// confirmations. If the input is not recognized, it will ask again. The function does not return +// until it gets a valid response from the user. +func AskForConfirmation(s string) (bool, error) { + reader := bufio.NewReader(os.Stdin) + + for { + fmt.Printf("%s [y/n]: ", s) + + response, err := reader.ReadString('\n') + if err != nil { + return false, err + } + + response = strings.ToLower(strings.TrimSpace(response)) + + if response == "y" || response == "yes" { + return true, nil + } else if response == "n" || response == "no" { + return false, nil + } + } +} + +func CheckFileExists(path string) bool { + if _, err := os.Stat(path); os.IsNotExist(err) { + return false + } + return true +} + +var Version string + +func attachLogFileToSentry(logger *zap.Logger, logFilePath string) error { + file, err := os.Open(logFilePath) + if err != nil { + return fmt.Errorf("error opening log file: %s", err.Error()) + } + defer func() { + if err := file.Close(); err != nil { + LogError(logger, err, "Error closing log file") + } + }() + + content, err := io.ReadAll(file) + if err != nil { + return fmt.Errorf("error reading log file: %s", err.Error()) + } + + sentry.ConfigureScope(func(scope *sentry.Scope) { + scope.SetExtra("logfile", string(content)) + }) + sentry.Flush(time.Second * 5) + return nil +} + +// Recover recovers from a panic and logs the stack trace to Sentry. +// It also stops the global context. +func Recover(logger *zap.Logger) { + if logger == nil { + fmt.Println(Emoji + "Failed to recover from panic. Logger is nil.") + return + } + sentry.Flush(2 * time.Second) + if r := recover(); r != nil { + err := attachLogFileToSentry(logger, "./keploy-logs.txt") + if err != nil { + LogError(logger, err, "failed to attach log file to sentry") + } + sentry.CaptureException(errors.New(fmt.Sprint(r))) + // Get the stack trace + stackTrace := debug.Stack() + LogError(logger, nil, "Recovered from panic", zap.String("stack trace", string(stackTrace))) + //stopping the global context + err = Stop(logger, fmt.Sprintf("Recovered from: %s", r)) + if err != nil { + LogError(logger, err, "failed to stop the global context") + //return + } + sentry.Flush(time.Second * 2) + } +} + +// GetLatestGitHubRelease fetches the latest version and release body from GitHub releases with a timeout. +func GetLatestGitHubRelease(ctx context.Context, logger *zap.Logger) (GitHubRelease, error) { + // GitHub repository details + repoOwner := "keploy" + repoName := "keploy" + + apiURL := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", repoOwner, repoName) + + client := http.Client{ + Timeout: 4 * time.Second, + } + + req, err := http.NewRequestWithContext(ctx, "GET", apiURL, nil) + if err != nil { + return GitHubRelease{}, err + } + + resp, err := client.Do(req) + if err != nil { + var netErr net.Error + if errors.As(err, &netErr) && netErr.Timeout() { + return GitHubRelease{}, ErrGitHubAPIUnresponsive + } + return GitHubRelease{}, err + } + defer func() { + if err := resp.Body.Close(); err != nil { + LogError(logger, err, "failed to close response body") + } + }() + + var release GitHubRelease + if err := json.NewDecoder(resp.Body).Decode(&release); err != nil { + return GitHubRelease{}, err + } + return release, nil +} + +// FindDockerCmd checks if the cli is related to docker or not, it also returns if it is a docker compose file +func FindDockerCmd(cmd string) CmdType { + // Convert command to lowercase for case-insensitive comparison + cmdLower := strings.TrimSpace(strings.ToLower(cmd)) + + // Define patterns for Docker and Docker Compose + dockerPatterns := []string{"docker", "sudo docker"} + dockerComposePatterns := []string{"docker-compose", "sudo docker-compose", "docker compose", "sudo docker compose"} + + // Check for Docker Compose command patterns and file extensions + for _, pattern := range dockerComposePatterns { + if strings.HasPrefix(cmdLower, pattern) { + return DockerCompose + } + } + // Check for Docker command patterns + for _, pattern := range dockerPatterns { + if strings.HasPrefix(cmdLower, pattern) { + return Docker + } + } + return Native +} + +type CmdType string + +// CmdType constants +const ( + Docker CmdType = "docker" + DockerCompose CmdType = "docker-compose" + Native CmdType = "native" +) + +type RecordFlags struct { + Path string + Command string + ContainerName string + Proxyport uint32 + NetworkName string + Delay uint64 + BuildDelay time.Duration + PassThroughPorts []uint + ConfigPath string + EnableTele bool +} + +type TestFlags struct { + Path string + Proxyport uint32 + Command string + Testsets []string + ContainerName string + NetworkName string + Delay uint64 + BuildDelay time.Duration + APITimeout uint64 + PassThroughPorts []uint + ConfigPath string + MongoPassword string + CoverageReportPath string + EnableTele bool + WithCoverage bool +} + +func getAlias(ctx context.Context, logger *zap.Logger) (string, error) { + // Get the name of the operating system. + osName := runtime.GOOS + //TODO: configure the hardcoded port mapping + img := "ghcr.io/keploy/keploy:" + "v" + Version + logger.Info("Starting keploy in docker with image", zap.String("image:", img)) + + var ttyFlag string + + if term.IsTerminal(int(os.Stdin.Fd())) { + ttyFlag = " -it " + } else { + ttyFlag = "" + } + + switch osName { + case "linux": + alias := "sudo docker container run --name keploy-v2 -e BINARY_TO_DOCKER=true -p 16789:16789 --privileged --pid=host" + ttyFlag + " -v " + os.Getenv("PWD") + ":" + os.Getenv("PWD") + " -w " + os.Getenv("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 -v " + os.Getenv("HOME") + "/.keploy-config:/root/.keploy-config -v " + os.Getenv("HOME") + "/.keploy:/root/.keploy --rm " + img + return alias, nil + case "darwin": + cmd := exec.CommandContext(ctx, "docker", "context", "ls", "--format", "{{.Name}}\t{{.Current}}") + out, err := cmd.Output() + if err != nil { + LogError(logger, err, "failed to get the current docker context") + return "", errors.New("failed to get alias") + } + dockerContext := strings.Split(strings.TrimSpace(string(out)), "\n")[0] + if len(dockerContext) == 0 { + LogError(logger, nil, "failed to get the current docker context") + return "", errors.New("failed to get alias") + } + dockerContext = strings.Split(dockerContext, "\n")[0] + if dockerContext == "colima" { + logger.Info("Starting keploy in docker with colima context, as that is the current context.") + alias := "docker container run --name keploy-v2 -e BINARY_TO_DOCKER=true -p 16789:16789 --privileged --pid=host" + ttyFlag + "-v " + os.Getenv("PWD") + ":" + os.Getenv("PWD") + " -w " + os.Getenv("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 -v " + os.Getenv("HOME") + "/.keploy-config:/root/.keploy-config -v " + os.Getenv("HOME") + "/.keploy:/root/.keploy --rm " + img + return alias, nil + } + // if default docker context is used + logger.Info("Starting keploy in docker with default context, as that is the current context.") + alias := "docker container run --name keploy-v2 -e BINARY_TO_DOCKER=true -p 16789:16789 --privileged --pid=host" + ttyFlag + "-v " + os.Getenv("PWD") + ":" + os.Getenv("PWD") + " -w " + os.Getenv("PWD") + " -v /sys/fs/cgroup:/sys/fs/cgroup -v debugfs:/sys/kernel/debug:rw -v /sys/fs/bpf:/sys/fs/bpf -v /var/run/docker.sock:/var/run/docker.sock -v " + os.Getenv("HOME") + "/.keploy-config:/root/.keploy-config -v " + os.Getenv("HOME") + "/.keploy:/root/.keploy --rm " + img + return alias, nil + case "Windows": + LogError(logger, nil, "Windows is not supported. Use WSL2 instead.") + return "", errors.New("failed to get alias") + } + return "", errors.New("failed to get alias") +} + +func RunInDocker(ctx context.Context, logger *zap.Logger) error { + //Get the correct keploy alias. + keployAlias, err := getAlias(ctx, logger) + if err != nil { + return err + } + var quotedArgs []string + + for _, arg := range os.Args[1:] { + quotedArgs = append(quotedArgs, strconv.Quote(arg)) + } + + cmd := exec.CommandContext( + ctx, + "sh", + "-c", + keployAlias+" "+strings.Join(quotedArgs, " "), + ) + + cmd.Cancel = func() error { + return InterruptProcessTree(cmd, logger, cmd.Process.Pid, syscall.SIGINT) + } + + cmd.Stdout = os.Stdout + cmd.Stdin = os.Stdin + cmd.Stderr = os.Stderr + logger.Debug("running the following command in docker", zap.String("command", cmd.String())) + err = cmd.Run() + if err != nil { + if ctx.Err() == context.Canceled { + return ctx.Err() + } + LogError(logger, err, "failed to start keploy in docker") + return err + } + return nil +} + +// Keys returns an array containing the keys of the given map. +func Keys(m map[string][]string) []string { + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + return keys +} + +func SentryInit(logger *zap.Logger, dsn string) { + err := sentry.Init(sentry.ClientOptions{ + Dsn: dsn, + TracesSampleRate: 1.0, + }) + if err != nil { + logger.Debug("Could not initialise sentry.", zap.Error(err)) + } +} + +//func FetchHomeDirectory(isNewConfigPath bool) string { +// var configFolder = "/.keploy-config" +// +// if isNewConfigPath { +// configFolder = "/.keploy" +// } +// if runtime.GOOS == "windows" { +// home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") +// if home == "" { +// home = os.Getenv("USERPROFILE") +// } +// return home + configFolder +// } +// +// return os.Getenv("HOME") + configFolder +//} + +// InterruptProcessTree interrupts an entire process tree using the given signal +func InterruptProcessTree(cmd *exec.Cmd, logger *zap.Logger, ppid int, sig syscall.Signal) error { + // Find all descendant PIDs of the given PID & then signal them. + // Any shell doesn't signal its children when it receives a signal. + // Children may have their own process groups, so we need to signal them separately. + children, err := findChildPIDs(ppid) + if err != nil { + return err + } + + children = append(children, ppid) + uniqueProcess, err := uniqueProcessGroups(children) + if err != nil { + logger.Error("failed to find unique process groups", zap.Int("pid", ppid), zap.Error(err)) + uniqueProcess = children + } + + for _, pid := range uniqueProcess { + err := syscall.Kill(-pid, sig) + // ignore the ESRCH error as it means the process is already dead + if errno, ok := err.(syscall.Errno); ok && err != nil && errno != syscall.ESRCH { + logger.Error("failed to send signal to process", zap.Int("pid", pid), zap.Error(err)) + } + } + return nil +} + +func uniqueProcessGroups(pids []int) ([]int, error) { + uniqueGroups := make(map[int]bool) + var uniqueGPIDs []int + + for _, pid := range pids { + pgid, err := getProcessGroupID(pid) + if err != nil { + return nil, err + } + if !uniqueGroups[pgid] { + uniqueGroups[pgid] = true + uniqueGPIDs = append(uniqueGPIDs, pgid) + } + } + + return uniqueGPIDs, nil +} + +func getProcessGroupID(pid int) (int, error) { + statusPath := filepath.Join("/proc", strconv.Itoa(pid), "status") + statusBytes, err := os.ReadFile(statusPath) + if err != nil { + return 0, err + } + + status := string(statusBytes) + for _, line := range strings.Split(status, "\n") { + if strings.HasPrefix(line, "NSpgid:") { + return extractIDFromStatusLine(line), nil + } + } + + return 0, nil +} + +// extractIDFromStatusLine extracts the ID from a status line in the format "Key:\tValue". +func extractIDFromStatusLine(line string) int { + fields := strings.Fields(line) + if len(fields) == 2 { + id, err := strconv.Atoi(fields[1]) + if err == nil { + return id + } + } + return -1 +} + +// findChildPIDs takes a parent PID and returns a slice of all descendant PIDs. +func findChildPIDs(parentPID int) ([]int, error) { + var childPIDs []int + + // Recursive helper function to find all descendants of a given PID. + var findDescendants func(int) + findDescendants = func(pid int) { + procDirs, err := os.ReadDir("/proc") + if err != nil { + return + } + + for _, procDir := range procDirs { + if !procDir.IsDir() { + continue + } + + childPid, err := strconv.Atoi(procDir.Name()) + if err != nil { + continue + } + + statusPath := filepath.Join("/proc", procDir.Name(), "status") + statusBytes, err := os.ReadFile(statusPath) + if err != nil { + continue + } + + status := string(statusBytes) + for _, line := range strings.Split(status, "\n") { + if strings.HasPrefix(line, "PPid:") { + fields := strings.Fields(line) + if len(fields) == 2 { + ppid, err := strconv.Atoi(fields[1]) + if err != nil { + break + } + if ppid == pid { + childPIDs = append(childPIDs, childPid) + findDescendants(childPid) + } + } + break + } + } + } + } + + // Start the recursion with the initial parent PID. + findDescendants(parentPID) + + return childPIDs, nil +} + +func EnsureRmBeforeName(cmd string) string { + parts := strings.Split(cmd, " ") + rmIndex := -1 + nameIndex := -1 + + for i, part := range parts { + if part == "--rm" { + rmIndex = i + } else if part == "--name" { + nameIndex = i + break // Assuming --name will always have an argument, we can break here + } + } + if rmIndex == -1 && nameIndex != -1 { + parts = append(parts[:nameIndex], append([]string{"--rm"}, parts[nameIndex:]...)...) + } + + return strings.Join(parts, " ") +} diff --git a/web/public/README.md b/web/public/README.md deleted file mode 100644 index 1c0f7e724..000000000 --- a/web/public/README.md +++ /dev/null @@ -1 +0,0 @@ -This directory is embedded into the binary to host the frontend code \ No newline at end of file diff --git a/web/public/index.html b/web/public/index.html deleted file mode 100644 index e2c2ee3b7..000000000 --- a/web/public/index.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - Keploy Test Generation - - - - - - - - - - -
- -

Improving CLI Experience

-
-

Dear user, we are pleased to announce that we are focusing on improving the command line interface (CLI) experience for Keploy with the help of our community. - As part of this effort, we have deprecated the user interface (UI) and it will no longer be available.

-

You can access our documentation by clicking here.

- -

If you have any issues or questions regarding the CLI, please create a new issue on Github Issues page. - If you have any feature requests, please create a new issue and label it as a feature request.

-

For more information and resources, please refer to the following links:

- -
- -
-

If you find Keploy useful, please consider giving it a star on Github!

-
-
- - diff --git a/web/web.go b/web/web.go deleted file mode 100644 index 08f261398..000000000 --- a/web/web.go +++ /dev/null @@ -1,16 +0,0 @@ -package web - -import ( - "embed" - "io/fs" - "net/http" -) - -//go:embed public -var content embed.FS - -func Handler() http.Handler { - fsys := fs.FS(content) - contentStatic, _ := fs.Sub(fsys, "public") - return http.FileServer(http.FS(contentStatic)) -}