diff --git a/.circleci/README.rst b/.circleci/README.rst index e19a6485ed1..5b61ee5cd46 100644 --- a/.circleci/README.rst +++ b/.circleci/README.rst @@ -94,5 +94,5 @@ images that extend the current ones and pre-installs the required dependencies. .. _CircleCI: https://app.circleci.com/pipelines/github/varnishcache/varnish-cache -.. _pkg-varnish-cache: https://github.com/varnishcache/pkg-varnish-cache +.. _pkg-varnish-cache: https://code.vinyl-cache.org/vinyl-cache/pkg-vinyl-cache .. _PackageCloud: https://packagecloud.io/varnishcache/ diff --git a/.circleci/config.yml b/.circleci/config.yml index 4aa420d3f50..b27311decec 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,12 +23,12 @@ parameters: --disable-stack-protector \ --with-persistent-storage \ build-pkgs: - type: string - default: "" + type: boolean + default: false jobs: dist: - description: Build or download varnish-x.y.z.tar.gz that is used later for the packaging jobs + description: Build or download vinyl-x.y.z.tar.gz that is used later for the packaging jobs docker: - image: fedora:latest steps: @@ -54,23 +54,23 @@ jobs: - run: name: Download the dist tarball command: | - curl -Ls '<< pipeline.parameters.dist-url >>' -o varnish-dist.tar.gz + curl -Ls '<< pipeline.parameters.dist-url >>' -o vinyl-dist.tar.gz - when: condition: << pipeline.parameters.dist-url-sha256 >> steps: - run: name: Verify downloaded tarball command: | - echo "<< pipeline.parameters.dist-url-sha256 >> varnish-dist.tar.gz" | sha256sum -c + echo "<< pipeline.parameters.dist-url-sha256 >> vinyl-dist.tar.gz" | sha256sum -c - run: name: Rename the dist tarball by parsed version command: | mkdir parse-version-tmp cd parse-version-tmp - tar xzf ../varnish-dist.tar.gz - VERSION=$(varnish-*/configure --version | awk 'NR == 1 {print $NF}') + tar xzf ../vinyl-dist.tar.gz + VERSION=$(vinyl-*/configure --version | awk 'NR == 1 {print $NF}') cd .. - mv -v varnish-dist.tar.gz varnish-${VERSION}.tar.gz + mv -v vinyl-dist.tar.gz vinyl-${VERSION}.tar.gz - unless: condition: << pipeline.parameters.dist-url >> steps: @@ -93,11 +93,11 @@ jobs: root: . paths: - .is_weekly - - varnish*.tar.gz + - vinyl*.tar.gz - tools/*.suppr - .circleci tar_pkg_tools: - description: Builds archives with the packaging tools from https://github.com/varnishcache/pkg-varnish-cache + description: Builds archives with the packaging tools from https://code.vinyl-cache.org/vinyl-cache/pkg-vinyl-cache docker: - image: fedora:latest steps: @@ -111,7 +111,7 @@ jobs: mkdir -p ~/.ssh ssh-keyscan -H github.com >> ~/.ssh/known_hosts echo ${CIRCLE_REPOSITORY_URL} - git clone --recursive https://github.com/varnishcache/pkg-varnish-cache.git . + git clone --recursive https://code.vinyl-cache.org/vinyl-cache/pkg-vinyl-cache.git . git checkout << pipeline.parameters.pkg-commit >> tar cvzf debian.tar.gz debian --dereference tar cvzf redhat.tar.gz redhat --dereference @@ -184,10 +184,10 @@ jobs: --security-opt seccomp=unconfined \ -e PARAM_DIST=$(echo "<< parameters.platform >>" | cut -d: -f1) \ -e PARAM_RELEASE=$(echo "<< parameters.platform >>" | cut -d: -f2) \ - -v$(pwd):/varnish-cache \ + -v$(pwd):/vinyl-cache \ --platform linux/$ARCH \ << parameters.platform >> \ - /varnish-cache/.circleci/make-$EXT-packages.sh + /vinyl-cache/.circleci/make-$EXT-packages.sh - run: name: List created packages command: find ./packages -type f @@ -231,16 +231,16 @@ jobs: case "<< parameters.dist >>" in almalinux|fedora) case "<< parameters.dist >>:<< parameters.release >>" in - almalinux:9) + almalinux:8) dnf -y install "dnf-command(config-manager)" - dnf config-manager --set-enabled crb + dnf config-manager --set-enabled powertools dnf -y install diffutils dnf -y install epel-release dnf -y groupinstall "Development Tools" ;; - almalinux:8) + almalinux:*) dnf -y install "dnf-command(config-manager)" - dnf config-manager --set-enabled powertools + dnf config-manager --set-enabled crb dnf -y install diffutils dnf -y install epel-release dnf -y groupinstall "Development Tools" @@ -326,19 +326,19 @@ jobs: case "<< parameters.dist >>" in archlinux) - useradd varnish + useradd vinyl ;; almalinux|fedora) - adduser varnish + adduser vinyl ;; *) - adduser --disabled-password --gecos "" varnish + adduser --disabled-password --gecos "" vinyl ;; esac - chown -R varnish:varnish . + chown -R vinyl:vinyl . - sudo -u varnish sh -c ' + sudo -u vinyl sh -c ' export ASAN_OPTIONS=abort_on_error=1,detect_odr_violation=1,detect_leaks=1,detect_stack_use_after_return=1,detect_invalid_pointer_pairs=1,handle_segv=0,handle_sigbus=0,use_sigaltstack=0,disable_coredump=0 export LSAN_OPTIONS=abort_on_error=1,use_sigaltstack=0,suppressions=$(pwd)/tools/lsan.suppr export TSAN_OPTIONS=abort_on_error=1,halt_on_error=1,use_sigaltstack=0,suppressions=$(pwd)/tools/tsan.suppr @@ -433,12 +433,13 @@ workflows: matrix: parameters: platform: - - ubuntu:focal - ubuntu:jammy - ubuntu:noble - debian:bookworm + - debian:trixie - almalinux:8 - almalinux:9 + - almalinux:10 - fedora:latest - alpine:latest rclass: diff --git a/.circleci/make-apk-packages.sh b/.circleci/make-apk-packages.sh index a8b678f8f41..1857818f11f 100755 --- a/.circleci/make-apk-packages.sh +++ b/.circleci/make-apk-packages.sh @@ -15,7 +15,7 @@ elif [ -z "$PARAM_DIST" ]; then exit 1 fi -cd /varnish-cache +cd /vinyl-cache tar xazf alpine.tar.gz --strip 1 adduser -D builder @@ -28,11 +28,11 @@ echo "Generate key" su builder -c "abuild-keygen -nai" echo "Fix APKBUILD's variables" -tar xavf varnish-*.tar.gz -VERSION=$(varnish-*/configure --version | awk 'NR == 1 {print $NF}') +tar xavf vinyl-*.tar.gz +VERSION=$(vinyl-*/configure --version | awk 'NR == 1 {print $NF}') echo "Version: $VERSION" sed -i "s/@VERSION@/$VERSION/" APKBUILD -rm -rf varnish-*/ +rm -rf vinyl-*/ echo "Change the ownership so that abuild is able to write its logs" chown builder -R . diff --git a/.circleci/make-deb-packages.sh b/.circleci/make-deb-packages.sh index 2f05e99d2c7..21271f91643 100755 --- a/.circleci/make-deb-packages.sh +++ b/.circleci/make-deb-packages.sh @@ -23,14 +23,14 @@ fi # semop(1): encountered an error: Function not implemented update-alternatives --set fakeroot /usr/bin/fakeroot-tcp -cd /varnish-cache +cd /vinyl-cache ls -la echo "Untar debian..." tar xavf debian.tar.gz echo "Untar orig..." -tar xavf varnish-*.tar.gz --strip 1 +tar xavf vinyl-*.tar.gz --strip 1 echo "Update changelog version..." if [ -e .is_weekly ]; then diff --git a/.circleci/make-rpm-packages.sh b/.circleci/make-rpm-packages.sh index 4a9f8a14231..9f6cf77ab40 100755 --- a/.circleci/make-rpm-packages.sh +++ b/.circleci/make-rpm-packages.sh @@ -14,14 +14,14 @@ elif [ -z "$PARAM_DIST" ]; then fi case "$PARAM_DIST:$PARAM_RELEASE" in - almalinux:9) + almalinux:8) dnf -y install 'dnf-command(config-manager)' - dnf config-manager --set-enabled crb + dnf config-manager --set-enabled powertools dnf -y install epel-release ;; - almalinux:8) + almalinux:*) dnf -y install 'dnf-command(config-manager)' - dnf config-manager --set-enabled powertools + dnf config-manager --set-enabled crb dnf -y install epel-release ;; esac @@ -30,7 +30,7 @@ dnf -y install rpm-build dnf-utils export DIST_DIR=build -cd /varnish-cache +cd /vinyl-cache rm -rf $DIST_DIR mkdir $DIST_DIR @@ -39,7 +39,7 @@ echo "Untar redhat..." tar xavf redhat.tar.gz -C $DIST_DIR echo "Untar orig..." -tar xavf varnish-*.tar.gz -C $DIST_DIR --strip 1 +tar xavf vinyl-*.tar.gz -C $DIST_DIR --strip 1 echo "Build Packages..." if [ -e .is_weekly ]; then @@ -70,9 +70,9 @@ rpmbuild() { "$@" } -dnf builddep -y "$DIST_DIR"/redhat/varnish.spec -rpmbuild -bs "$DIST_DIR"/redhat/varnish.spec -rpmbuild --rebuild "$RESULT_DIR"/varnish-*.src.rpm +dnf builddep -y "$DIST_DIR"/redhat/vinyl.spec +rpmbuild -bs "$DIST_DIR"/redhat/vinyl.spec +rpmbuild --rebuild "$RESULT_DIR"/vinyl-*.src.rpm echo "Prepare the packages for storage..." mkdir -p packages/$PARAM_DIST/$PARAM_RELEASE/ diff --git a/.forgejo/pull_request_template.md b/.forgejo/pull_request_template.md new file mode 100644 index 00000000000..b5cf2e99ad8 --- /dev/null +++ b/.forgejo/pull_request_template.md @@ -0,0 +1,12 @@ +--- + +name: "Pull Request Template" +about: "Template for all Pull Requests" + +--- + +## Checklist + +- [ ] I have read, understood and followed [CONTRIBUTING.md](https://code.vinyl-cache.org/vinyl-cache/vinyl-cache/src/branch/main/CONTRIBUTING.md) +- [ ] I used ``autogen.des`` to configure the source tree +- [ ] I called ``make distcheck`` and it completed without error (recommended to call ``make -j $(($(nproc) * 10)) distcheck`` for short runtime if you have enough RAM) diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml new file mode 100644 index 00000000000..12dfccfe339 --- /dev/null +++ b/.forgejo/workflows/build.yaml @@ -0,0 +1,36 @@ +on: [pull_request] +jobs: + distcheck: + runs-on: debian + steps: + - name: apt-get + run: | + apt-get update + apt-get install -y git + - name: setup + run: | + git config --global core.autocrlf false + git config --global --add safe.directory ${FORGEJO_WORKSPACE} + - uses: https://code.vinyl-cache.org/forgejo/sane-checkout.git@v0.3 + - name: prerequisites + run: | + apt-get install -y \ + make \ + automake \ + autotools-dev \ + libedit-dev \ + libjemalloc-dev \ + libncurses-dev \ + libpcre2-dev \ + libtool \ + pkg-config \ + python3-docutils \ + python3-sphinx \ + cpio \ + \ + graphviz \ + pip furo + - name: build + run: | + ./autogen.des + make -j10 distcheck || (find . -name test-suite.log | xargs cat) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index d5dda4693b2..b860fdfa925 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,7 +1,7 @@ diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index eed7e978432..6b00e794ad8 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -5,13 +5,13 @@ body: attributes: value: |+ Did you check that there are no similar bug reports or pull requests? - + If your panic happens in the child_sigsegv_handler function, look at the backtrace to determine whether it is similar to another issue. When in doubt, open a new one and it will be closed as a duplicate if needed. - - If it's a packaging bug (including sysv or systemd services bugs) please open an issue on [varnishcache/pkg-varnish-cache](https://github.com/varnishcache/pkg-varnish-cache) instead. - - If it's a feature request, please start a thread on the [varnish-misc](https://varnish-cache.org/support/index.html#mailing-lists) list instead. - + + If it's a packaging bug (including sysv or systemd services bugs) please open an issue on [vinylcache/pkg-vinyl-cache](https://code.vinyl-cache.org/vinyl-cache/pkg-vinyl-cache) instead. + + If it's a feature request, please start a thread on the [vinyl-misc](https://vinyl-cache.org/support/index.html#mailing-lists) list instead. + - type: textarea attributes: label: Expected Behavior @@ -53,10 +53,10 @@ body: required: true - type: input attributes: - label: Varnish Cache version + label: Vinyl Cache version description: |+ - The version can be obtained by "varnishd -V". - placeholder: "varnishd (varnish-7.3.0 revision 84d79120b6d17b11819a663a93160743f293e63f)" + The version can be obtained by "vinyld -V". + placeholder: "vinyld (vinyl-cache-trunk revision 82fff61ce98a282c721d2026c7649403bc1d18eb)" - type: input attributes: placeholder: Ubuntu22.04 @@ -64,4 +64,4 @@ body: - type: input attributes: label: Source of binary packages used (if any) - placeholder: https://packagecloud.io/varnishcache/ + placeholder: https://code.vinyl-cache.org/ diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 8ca24cae961..72779ed09c6 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: true contact_links: - name: Getting Help - url: https://varnish-cache.org/support/index.html + url: https://vinyl-cache.org/support/index.html about: If you have questions or need help, please click here. - name: Report a security vulnerability - url: https://varnish-cache.org/security/index.html#i-have-found-a-security-hole + url: https://vinyl-cache.org/security/index.html#i-have-found-a-security-hole about: Report a security vulnerability. diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml index 4895b0ffcb5..528f433a166 100644 --- a/.github/workflows/cifuzz.yml +++ b/.github/workflows/cifuzz.yml @@ -2,20 +2,20 @@ name: CIFuzz on: [pull_request] jobs: Fuzzing: - if: github.repository_owner == 'varnishcache' - runs-on: ubuntu-latest + if: github.repository_owner == 'vinyl-cache' + runs-on: debian steps: - name: Build Fuzzers id: build uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master with: - oss-fuzz-project-name: 'varnish' + oss-fuzz-project-name: 'vinyl' dry-run: false language: c - name: Run Fuzzers uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master with: - oss-fuzz-project-name: 'varnish' + oss-fuzz-project-name: 'vinyl' fuzz-seconds: 600 dry-run: false language: c diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index 3c3d28a0019..039597db650 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -7,7 +7,7 @@ on: jobs: coverity: - if: github.repository_owner == 'varnishcache' + if: github.repository_owner == 'vinylcache' runs-on: ubuntu-latest steps: - run: | @@ -33,6 +33,6 @@ jobs: - run: ./configure --with-persistent-storage - uses: vapier/coverity-scan-action@v1.8.0 with: - project: varnish - email: varnish-dev@varnish-cache.org + project: vinyl + email: vinyl-dev@vinyl-cache.org token: ${{ secrets.COVERITY_SCAN_TOKEN }} diff --git a/.gitignore b/.gitignore index 2767cb72d25..d8cf3355fa4 100644 --- a/.gitignore +++ b/.gitignore @@ -38,21 +38,21 @@ _* /m4/lt~obsolete.m4 /missing /stamp-h1 -/varnishapi.pc -/varnishapi-uninstalled.pc +/vinylapi.pc +/vinylapi-uninstalled.pc TAGS tags cscope.*out .dirstamp -# Default vcl made from bin/varnishd/default.vcl -/bin/varnishd/builtin_vcl.c +# Default vcl made from bin/vinyld/default.vcl +/bin/vinyld/builtin_vcl.c /etc/builtin.vcl # Various auto-generated code snippets -/bin/varnishd/vhp_hufdec.h -/bin/varnishd/vhp_gen_hufdec -/bin/varnishtest/vtc_h2_dectbl.h +/bin/vinyld/vhp_hufdec.h +/bin/vinyld/vhp_gen_hufdec +/bin/vinyltest/vtc_h2_dectbl.h /include/vcl.h /include/vrt_obj.h /include/vmod_abi.h @@ -64,9 +64,9 @@ cscope.*out /lib/libvcc/vcc_obj.c /lib/libvcc/vcc_token_defs.h /lib/libvcc/vcc_types.h -/lib/libvarnishapi/vsl2rst -/lib/libvarnishapi/vxp_fixed_token.c -/lib/libvarnishapi/vxp_tokens.h +/lib/libvinylapi/vsl2rst +/lib/libvinylapi/vxp_fixed_token.c +/lib/libvinylapi/vxp_tokens.h # Stats /lib/libvsc/VSC_*.c @@ -89,24 +89,25 @@ cscope.*out /man/*.3 /man/*.7 /doc/sphinx/include -/bin/varnishadm/varnishadm -/bin/varnishd/varnishd -/bin/varnishhist/varnishhist -/bin/varnishlog/varnishlog -/bin/varnishncsa/varnishncsa -/bin/varnishstat/varnishstat -/bin/varnishstat/varnishstat_help_gen -/bin/varnishstat/varnishstat_curses_help.c -/bin/varnishstat/vsc2rst -/bin/varnishtest/teken_state.h -/bin/varnishtest/varnishtest -/bin/varnishtest/vtest -/bin/varnishtop/varnishtop +/bin/vinyladm/vinyladm +/bin/vinyld/vinyld +/bin/vinylhist/vinylhist +/bin/vinyllog/vinyllog +/bin/vinylncsa/vinylncsa +/bin/vinylstat/vinylstat +/bin/vinylstat/vinylstat_help_gen +/bin/vinylstat/vinylstat_curses_help.c +/bin/vinylstat/vsc2rst +/bin/vinyltest/teken_state.h +/bin/vinyltest/vinyltest +/bin/vinyltest/vtest +/bin/vinyltop/vinyltop # Doc-stuff generated from xml /doc/*.html /doc/sphinx/build/ /doc/sphinx/conf.py +!/doc/sphinx/_static/ /doc/sphinx/reference/vmod_*.generated.rst @@ -117,12 +118,12 @@ cscope.*out /nbproject/private/ # Test droppings -/bin/varnishd/*_test -/bin/varnishtest/tests/*.log-t +/bin/vinyld/*_test +/bin/vinyltest/tests/*.log-t /include/vrt_test* /include/vbm_test -/lib/libvarnish/*_test -/lib/libvarnishapi/*_test +/lib/libvinyl/*_test +/lib/libvinylapi/*_test # GCOV droppings *.gcda @@ -134,17 +135,21 @@ cscope.*out # vtest.sh droppings /tools/tmp/ /tools/_vtest_tmp/ -/tools/varnish-cache/ +/tools/vinyl-cache/ /tools/vt_key /tools/vt_key.pub # fuzzers -/bin/varnishd/esi_parse_fuzzer +/bin/vinyld/esi_parse_fuzzer # Coverity output /cov-int /myproject.tgz +# Source artifact +/vinyl-cache-trunk.tar.gz +/vinyl-cache-trunk + # Witness droppings witness.dot witness.svg diff --git a/.gitmodules b/.gitmodules index b7404dca4df..9f44bf42dc8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "bin/varnishtest/vtest2"] - path = bin/varnishtest/vtest2 - url = https://github.com/vtest/VTest2.git +[submodule "bin/vinyltest/vtest2"] + path = bin/vinyltest/vtest2 + url = https://code.vinyl-cache.org/vtest/VTest2.git diff --git a/CONTRIBUTING b/CONTRIBUTING deleted file mode 100644 index 8ba7471d3ee..00000000000 --- a/CONTRIBUTING +++ /dev/null @@ -1,54 +0,0 @@ -Contributing to Varnish Cache -============================= - -Official development tree is here: - - https://github.com/varnishcache/varnish-cache - -These days we prefer patches as pull requests directly to that tree. - -Bugreports go there too. - -Our main project communication is through our developer IRC channel:: - - #varnish-hacking on server irc.linpro.no - -(That channel is not for user questions, use the #varnish channel for that.) - -Mondays at 15:00 EU time we hold our weekly "bugwash" where we go -through new (and old) tickets. It speeds things up a lot if you -can join the channel and answer questions directly when we go over -the ticket. - -General process ---------------- - -In general, please follow these steps when contributing new features or -non-trivial fixes: - -1) Present the idea on -dev or in an issue -2) Write the documentation and present it -3) Create the full PR - -GitHub pull requests --------------------- - -Pull requests are handled like other tickets. - -Trivial pull requests (fix typos, etc) are welcomed, but they may be committed -by a core team member and the author credited in the commit message. - -For anything non trivial, please take Jens Axboe's excellent contributing guide -as guidance: https://github.com/axboe/liburing/blob/master/CONTRIBUTING.md - -Notable differences for Varnish-Cache are: - -* For code style, we broadly follow bsd style(9) https://man.freebsd.org/cgi/man.cgi?query=style&sektion=9 - -* Regarding commit messages, we are usually less strict - -* The Varnish-Cache repository uses a linear history, so all changes are rebased - on top of the current upstream head always. When your PR can no longer be - merged, rebase it and force-push your changes. - -* For testing `make distcheck` should pass diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..24974003175 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,50 @@ +# Contributing to Vinyl Cache + +The official development tree is here: + +We prefer patches as [pull requests](https://code.vinyl-cache.org/vinyl-cache/vinyl-cache/compare/main) onto the ``main`` branch. + +Please use [issues](https://code.vinyl-cache.org/vinyl-cache/vinyl-cache/issues/new/choose) for bug reports. + +Our main project communication is through our developer IRC channel ``#vinyl-hacking`` on server irc.linpro.no + +(That channel is not for user questions, use the ``#vinyl-cache`` channel for that.) + +Mondays at 15:00 EU time we hold our weekly "bugwash" where we go +through new (and old) tickets. It speeds things up a lot if you +can join the channel and answer questions directly when we go over +the ticket. + +See [Developing for and with Vinyl Cache](https://vinyl-cache.org/developer/index.html) for additional information. + +## General process + +In general, please follow these steps when contributing new features or +non-trivial fixes: + +1) Present the idea on -dev or in an issue +2) Write the documentation and present it +3) Create the full PR + +## [Pull Requests](https://code.vinyl-cache.org/vinyl-cache/vinyl-cache/pulls) + +Pull requests are handled like other tickets. + +Trivial pull requests (fix typos, etc) are welcomed, but they may be committed +by a core team member and the author credited in the commit message. + +For anything non trivial, please take [Jens Axboe's excellent contributing +guide](https://github.com/axboe/liburing/blob/master/CONTRIBUTING.md) as +guidance. + +Notable differences for Vinyl Cache are: + +* For code style, we broadly follow bsd [style(9)](https://man.freebsd.org/cgi/man.cgi?query=style&sektion=9) + +* Regarding commit messages, we are usually less strict + +* The Vinyl Cache repository uses a linear history, so all changes are rebased + on top of the current upstream head always. When your PR can no longer be + merged, rebase it and force-push your changes. + +* For testing ``make distcheck`` should pass diff --git a/INSTALL b/INSTALL index b170fb7850d..2ec0a719eb9 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ Installation Instructions -See https://varnish-cache.org/docs/trunk/installation/install_source.html +See https://vinyl-cache.org/docs/trunk/installation/install_source.html for complete and up to date install instructions. This file only mentions the basic steps: @@ -11,13 +11,13 @@ This file only mentions the basic steps: sh autogen.sh -* To build and install Varnish, run +* To build and install Vinyl Cache, run sh configure make make install -Varnish will store run-time state in /var/run/varnishd; you may +Vinyl Cache will store run-time state in /var/run/vinyld; you may want to tune this using configure's --localstatedir parameter. Additional configure options of interest: @@ -26,3 +26,5 @@ Additional configure options of interest: enable strict warnings (default is NO) --enable-debugging-symbols enable debugging symbols (default is NO) + +*END* diff --git a/LICENSE b/LICENSE index bc7f1d35b26..b0c7c36c01a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,8 +1,9 @@ -The compilation of software known as "Varnish Cache" is distributed +The compilation of software known as "Vinyl Cache" is distributed under the following terms: Copyright (c) 2006 Verdens Gang AS Copyright (c) 2006-2021 Varnish Software AS +Copyright (c) 2026 The Vinyl Cache Project All rights reserved. SPDX-License-Identifier: BSD-2-Clause diff --git a/Makefile.am b/Makefile.am index 97bfacf0c7e..c1f87a253ef 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,11 +1,3 @@ -all: - @echo - @echo - @echo THIS REPOSITORY HAS MOVED. See README.rst - @echo - @echo - exit 1 - ACLOCAL_AMFLAGS = -I m4 -I . SUBDIRS = include lib bin vmod etc doc man contrib @@ -13,10 +5,10 @@ SUBDIRS = include lib bin vmod etc doc man contrib TESTS = tools/magic_check.sh pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = varnishapi.pc +pkgconfig_DATA = vinylapi.pc m4dir = $(datadir)/aclocal -m4_DATA = varnish.m4 varnish-legacy.m4 +m4_DATA = vinyl.m4 vinyl-legacy.m4 CLEANFILES = \ cscope.in.out \ @@ -27,13 +19,13 @@ CLEANFILES = \ EXTRA_DIST = \ $(TESTS) \ - README.rst \ + README.md \ README.Packaging \ LICENSE \ autogen.sh \ - varnishapi.pc.in \ - varnish.m4 \ - varnish-legacy.m4 \ + vinylapi.pc.in \ + vinyl.m4 \ + vinyl-legacy.m4 \ vsc.am \ vtc.am \ wflags.py @@ -52,11 +44,10 @@ AM_DISTCHECK_CONFIGURE_FLAGS += --with-unwind endif install-data-local: - $(install_sh) -d -m 0755 $(DESTDIR)$(localstatedir)/varnish - + $(install_sh) -d -m 0755 "$(DESTDIR)/${VINYL_STATE_DIR}" distclean-local: - find . '(' -name '*.gcda' -o -name '*.gcda' ')' -exec rm '{}' ';' + -find . '(' -name '*.gcda' -o -name '*.gcda' ')' -exec rm '{}' ';' distcleancheck_listfiles = \ find . -type f -exec sh -c 'test -f $(srcdir)/$$1 || echo $$1' \ @@ -70,7 +61,7 @@ vtest-clean: # solved it better, but we don't, so use this at least for now. LICENSE: all -# XXX: This is a similar hack to ensure we have a built varnishtest +# XXX: This is a similar hack to ensure we have a built vinyltest # (and technically any other binary that may be involved in a VTC) # before we try to run tests anywhere in the tree. check-recursive: all @@ -89,7 +80,7 @@ gcov_digest: witness.dot: all $(MAKE) check AM_VTC_LOG_FLAGS=-pdebug=+witness - $(AM_V_GEN) $(srcdir)/tools/witness.sh witness.dot bin/varnishtest/ \ + $(AM_V_GEN) $(srcdir)/tools/witness.sh witness.dot bin/vinyltest/ \ vmod/ .dot.svg: @@ -99,7 +90,7 @@ witness: witness.svg update: git submodule sync - git submodule update --remote bin/varnishtest/vtest2 - git commit -m 'Update vtest2' bin/varnishtest/vtest2 || true + git submodule update --remote bin/vinyltest/vtest2 + git commit -m 'Update vtest2' bin/vinyltest/vtest2 || true .PHONY: cscope witness.dot update diff --git a/README.Packaging b/README.Packaging index 0b4275893a6..9591984b576 100644 --- a/README.Packaging +++ b/README.Packaging @@ -1,7 +1,7 @@ Packaging ========= -Varnish Cache packaging files are kept outside of the main distribution. +Vinyl Cache packaging files are kept outside of the main distribution. The main reason for this is to decouple the development work from the packaging work. @@ -12,16 +12,13 @@ to wait for the packagers to finish their work/changes. Official packages ----------------- -The official Debian and Redhat packages are built by the Varnish Cache team -and made available on https://packagecloud.io/varnishcache/ . - Packaging files and scripts for Debian and Redhat: - https://github.com/varnishcache/pkg-varnish-cache + https://code.vinyl-cache.org/vinyl-cache/pkg-vinyl-cache Third-party packages -------------------- -Varnish Cache is built and packaged in many different operating systems and -distributions. Please see https://varnish-cache.org/ for more information. +Vinyl Cache is built and packaged in many different operating systems and +distributions. Please see https://vinyl-cache.org/ for more information. diff --git a/README.md b/README.md new file mode 100644 index 00000000000..c4448407ada --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ + + +# Vinyl Cache + +This is Vinyl Cache, the high-performance HTTP accelerator. + +Documentation and additional information about Vinyl Cache is available on + + +See [here for how to get help](https://vinyl-cache.org/support/index.html). For +questions about commercial support and services related to Vinyl Cache +see the [Vinyl HTTP Cache Business page](https://vinyl-cache.org/business/index.html). + +Most platforms are tested via [vtest](https://vinyl-cache.org/vtest/) diff --git a/README.rst b/README.rst deleted file mode 100644 index e260e278e83..00000000000 --- a/README.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. - Copyright (c) 2016-2020 Varnish Software AS - SPDX-License-Identifier: BSD-2-Clause - See LICENSE file for full text of license - -===================================== -IMPORTANT - THIS REPOSITORY HAS MOVED -===================================== - -New location: https://code.vinyl-cache.org/vinyl-cache/vinyl-cache - -The main branch changes from ``master`` to ``main``. - -The last usable version on github has the ``last`` tag. - -Read this: https://vinyl-cache.org/organization/moving.html - -Varnish Cache -============= - -This is Varnish Cache, the high-performance HTTP accelerator. - -Documentation and additional information about Varnish is available on -https://www.varnish-cache.org/ - -Technical questions about Varnish and this release should be addressed -to . - -Please see CONTRIBUTING for how to contribute patches and report bugs. - -For questions about commercial support and services related to Varnish -see the `Varnish HTTP Cache Business page -`_ . - -.. |ccibadge| image:: https://circleci.com/gh/varnishcache/varnish-cache/tree/master.svg?style=svg - :target: https://circleci.com/gh/varnishcache/varnish-cache/tree/master -.. _vtest: https://varnish-cache.org/vtest/ - -CircleCI tests: |ccibadge| - -More platforms are tested via vtest_ diff --git a/autogen.des b/autogen.des index 3c4a1e04be8..9cb136c381c 100755 --- a/autogen.des +++ b/autogen.des @@ -19,7 +19,7 @@ if [ "x$DST" != "x" ] ; then elif [ "x`uname`" = "xFreeBSD" ] ; then DST="--prefix=/usr/local --mandir=/usr/local/man" else - DST="--prefix=/opt/varnish --mandir=/opt/varnish/man" + DST="--prefix=/opt/vinyl --mandir=/opt/vinyl/man" fi PERSISTENT=--with-persistent-storage diff --git a/bin/Makefile.am b/bin/Makefile.am index 2d4185c4809..834cdb62633 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -1,11 +1,11 @@ # SUBDIRS = \ - varnishadm \ - varnishd \ - varnishhist \ - varnishlog \ - varnishncsa \ - varnishstat \ - varnishtop \ - varnishtest + vinyladm \ + vinyld \ + vinylhist \ + vinyllog \ + vinylncsa \ + vinylstat \ + vinyltop \ + vinyltest diff --git a/bin/varnishadm/Makefile.am b/bin/varnishadm/Makefile.am deleted file mode 100644 index a86fff4b284..00000000000 --- a/bin/varnishadm/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -# - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_builddir)/include - -bin_PROGRAMS = varnishadm - -varnishadm_SOURCES = varnishadm.c - -varnishadm_CFLAGS = @LIBEDIT_CFLAGS@ - -varnishadm_LDADD = \ - $(top_builddir)/lib/libvarnishapi/libvarnishapi.la \ - $(top_builddir)/lib/libvarnish/libvarnish.la \ - ${PTHREAD_LIBS} ${RT_LIBS} ${NET_LIBS} @LIBEDIT_LIBS@ ${LIBM} diff --git a/bin/varnishadm/flint.sh b/bin/varnishadm/flint.sh deleted file mode 100644 index 69dde629bdc..00000000000 --- a/bin/varnishadm/flint.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2017-2021 Varnish Software AS -# SPDX-License-Identifier: BSD-2-Clause -# See LICENSE file for full text of license - -FLOPS=' - *.c - ../../lib/libvarnishapi/flint.lnt - ../../lib/libvarnishapi/*.c -' ../../tools/flint_skel.sh $* diff --git a/bin/varnishadm/varnishadm.c b/bin/varnishadm/varnishadm.c deleted file mode 100644 index 3f84afcc299..00000000000 --- a/bin/varnishadm/varnishadm.c +++ /dev/null @@ -1,533 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2015 Varnish Software AS - * All rights reserved. - * - * Author: Cecilie Fritzvold - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include "config.h" - -#include -#include - -#include - -#if defined(HAVE_EDIT_READLINE_READLINE_H) -# include -#elif defined(HAVE_LIBEDIT) -# include -#elif defined (HAVE_READLINE_READLINE_H) -# include -# ifdef HAVE_READLINE_HISTORY_H -# include -# else -# error missing history.h - this should have got caught in configure -# endif -#else -# error missing readline.h - this should have got caught in configure -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "vdef.h" - -#include "vqueue.h" - -#include "vapi/vsig.h" -#include "vapi/vsm.h" -#include "vas.h" -#include "vcli.h" -#include "vjsn.h" -#include "vtcp.h" - -#define RL_EXIT(status) \ - do { \ - rl_callback_handler_remove(); \ - exit(status); \ - } while (0) - -enum pass_mode_e { - pass_script, - pass_interactive, -}; - -static double timeout = 5; -static int p_arg = 0; -static int line_sock; - -static void -cli_write(int sock, const char *s) -{ - int i, l; - - i = strlen(s); - l = write (sock, s, i); - if (i == l) - return; - perror("Write error CLI socket"); - RL_EXIT(1); -} - -/* - * This function establishes a connection to the specified ip and port and - * sends a command to varnishd. If varnishd returns an OK status, the result - * is printed and 0 returned. Else, an error message is printed and 1 is - * returned - */ -static int -cli_sock(const char *T_arg, const char *S_arg) -{ - int fd; - int sock; - unsigned status; - char *answer = NULL; - char buf[CLI_AUTH_RESPONSE_LEN + 1]; - const char *err; - - sock = VTCP_open(T_arg, NULL, timeout, &err); - if (sock < 0) { - fprintf(stderr, "Connection failed (%s): %s\n", T_arg, err); - return (-1); - } - - (void)VCLI_ReadResult(sock, &status, &answer, timeout); - if (status == CLIS_AUTH) { - if (S_arg == NULL) { - fprintf(stderr, "Authentication required\n"); - free(answer); - closefd(&sock); - return (-1); - } - fd = open(S_arg, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "Cannot open \"%s\": %s\n", - S_arg, strerror(errno)); - closefd(&sock); - free(answer); - return (-1); - } - VCLI_AuthResponse(fd, answer, buf); - closefd(&fd); - free(answer); - - cli_write(sock, "auth "); - cli_write(sock, buf); - cli_write(sock, "\n"); - (void)VCLI_ReadResult(sock, &status, &answer, timeout); - } - if (status != CLIS_OK && status != CLIS_TRUNCATED) { - fprintf(stderr, "Rejected %u\n%s\n", status, answer); - closefd(&sock); - free(answer); - return (-1); - } - free(answer); - - cli_write(sock, "ping\n"); - (void)VCLI_ReadResult(sock, &status, &answer, timeout); - if (status != CLIS_OK || strstr(answer, "PONG") == NULL) { - fprintf(stderr, "No pong received from server\n"); - closefd(&sock); - free(answer); - return (-1); - } - free(answer); - - return (sock); -} - -static unsigned -pass_answer(int fd, enum pass_mode_e mode) -{ - unsigned u, status; - char *answer = NULL; - - u = VCLI_ReadResult(fd, &status, &answer, timeout); - if (u) { - if (status == CLIS_COMMS) { - fprintf(stderr, "%s\n", answer); - RL_EXIT(2); - } - if (answer) - fprintf(stderr, "%s\n", answer); - RL_EXIT(1); - } - - if (p_arg && answer != NULL) { - printf("%-3u %-8zu\n%s", status, strlen(answer), answer); - } else if (p_arg) { - printf("%-3u %-8u\n", status, 0U); - } else { - if (mode == pass_interactive) - printf("%u\n", status); - if (answer != NULL) - printf("%s\n", answer); - if (status == CLIS_TRUNCATED) - printf("[response was truncated]\n"); - } - free(answer); - (void)fflush(stdout); - return (status); -} - -static void v_noreturn_ -do_args(int sock, int argc, char * const *argv) -{ - int i; - unsigned status; - - for (i = 0; i < argc; i++) { - /* XXX: We should really CLI-quote these */ - if (i > 0) - cli_write(sock, " "); - cli_write(sock, argv[i]); - } - cli_write(sock, "\n"); - status = pass_answer(sock, pass_script); - closefd(&sock); - if (status == CLIS_OK || status == CLIS_TRUNCATED) - exit(0); - if (!p_arg) - fprintf(stderr, "Command failed with error code %u\n", status); - exit(1); -} - -/* Callback for readline, doesn't take a private pointer, so we need - * to have a global variable. - */ -static void v_matchproto_() -send_line(char *l) -{ - if (l) { - cli_write(line_sock, l); - cli_write(line_sock, "\n"); - if (*l) - add_history(l); - rl_callback_handler_install("varnish> ", send_line); - } else { - RL_EXIT(0); - } -} - -static char * -command_generator (const char *text, int state) -{ - static struct vjsn *jsn_cmds; - static const struct vjsn_val *jv; - struct vjsn_val *jv2; - unsigned u; - char *answer = NULL; - const char *err; - - if (!state) { - cli_write(line_sock, "help -j\n"); - u = VCLI_ReadResult(line_sock, NULL, &answer, timeout); - if (u) { - free(answer); - return (NULL); - } - jsn_cmds = vjsn_parse(answer, &err); - free(answer); - if (err != NULL) - return (NULL); - AN(jsn_cmds); - AN(jsn_cmds->value); - assert (vjsn_is_array(jsn_cmds->value)); - jv = VTAILQ_FIRST(&jsn_cmds->value->children); - assert (vjsn_is_number(jv)); - jv = VTAILQ_NEXT(jv, list); - assert (vjsn_is_array(jv)); - jv = VTAILQ_NEXT(jv, list); - assert (vjsn_is_number(jv)); - jv = VTAILQ_NEXT(jv, list); - } - while (jv != NULL) { - assert (vjsn_is_object(jv)); - jv2 = VTAILQ_FIRST(&jv->children); - AN(jv2); - jv = VTAILQ_NEXT(jv, list); - assert (vjsn_is_string(jv2)); - assert (!strcmp(jv2->name, "request")); - if (!strncmp(text, jv2->value, strlen(text))) - return (strdup(jv2->value)); - } - vjsn_delete(&jsn_cmds); - return (NULL); -} - -static char ** -varnishadm_completion (const char *text, int start, int end) -{ - char **matches; - (void)end; - matches = (char **)NULL; - if (start == 0) - matches = rl_completion_matches(text, command_generator); - return (matches); -} - - -/* - * No arguments given, simply pass bytes on stdin/stdout and CLI socket - * Send a "banner" to varnish, to provoke a welcome message. - */ -static void v_noreturn_ -interactive(int sock) -{ - struct pollfd fds[2]; - int i; - unsigned status; - line_sock = sock; - rl_already_prompted = 1; - rl_callback_handler_install("varnish> ", send_line); - rl_attempted_completion_function = varnishadm_completion; - - fds[0].fd = sock; - fds[0].events = POLLIN; - fds[1].fd = 0; - fds[1].events = POLLIN; - - cli_write(sock, "banner\n"); - while (1) { - i = poll(fds, 2, -1); - if (i == -1 && errno == EINTR) { - continue; - } - assert(i > 0); - if (fds[0].revents & POLLIN) { - /* Get rid of the prompt, kinda hackish */ - printf("\r \r"); - status = pass_answer(fds[0].fd, pass_interactive); - rl_forced_update_display(); - if (status == CLIS_CLOSE) - RL_EXIT(0); - } - if (fds[1].revents & POLLIN) { - rl_callback_read_char(); - } - } -} - -/* - * No arguments given, simply pass bytes on stdin/stdout and CLI socket - */ -static void v_noreturn_ -pass(int sock) -{ - struct pollfd fds[2]; - char buf[1024]; - int i; - ssize_t n; - int busy = 0; - - fds[0].fd = sock; - fds[0].events = POLLIN; - fds[1].fd = 0; - fds[1].events = POLLIN; - while (1) { - i = poll(fds, 2, -1); - if (i == -1 && errno == EINTR) { - continue; - } - assert(i > 0); - if (fds[0].revents & POLLIN) { - (void)pass_answer(fds[0].fd, pass_script); - busy = 0; - if (fds[1].fd < 0) - RL_EXIT(0); - } - if (fds[1].revents & POLLIN || fds[1].revents & POLLHUP) { - n = read(fds[1].fd, buf, sizeof buf - 1); - if (n == 0) { - if (!busy) - RL_EXIT(0); - fds[1].fd = -1; - } else if (n < 0) { - RL_EXIT(0); - } else { - busy = 1; - buf[n] = '\0'; - cli_write(sock, buf); - } - } - } -} - - -static void v_noreturn_ -usage(int status) -{ - fprintf(stderr, - "Usage: varnishadm [-h] [-n workdir] [-p] [-S secretfile] " - "[-T [address]:port] [-t timeout] [command [...]]\n"); - fprintf(stderr, "\t-n is mutually exclusive with -S and -T\n"); - exit(status); -} - -static int -n_arg_sock(const char *n_arg, const char *t_arg) -{ - char *T_arg, *T_start; - char *S_arg; - struct vsm *vsm; - char *p; - int sock; - - vsm = VSM_New(); - AN(vsm); - if (VSM_Arg(vsm, 'n', n_arg) < 0 || - VSM_Arg(vsm, 't', t_arg) < 0 || - VSM_Attach(vsm, STDERR_FILENO) < 0) { - fprintf(stderr, "%s\n", VSM_Error(vsm)); - VSM_Destroy(&vsm); - return (-1); - } - - T_start = T_arg = VSM_Dup(vsm, "Arg", "-T"); - S_arg = VSM_Dup(vsm, "Arg", "-S"); - VSM_Destroy(&vsm); - - if (T_arg == NULL) { - fprintf(stderr, "No -T in shared memory\n"); - return (-1); - } - - sock = -1; - while (*T_arg) { - p = strchr(T_arg, '\n'); - AN(p); - *p = '\0'; - sock = cli_sock(T_arg, S_arg); - if (sock >= 0) - break; - T_arg = p + 1; - } - free(T_start); - free(S_arg); - return (sock); -} - -static int -t_arg_timeout(const char *t_arg) -{ - char *p = NULL; - - AN(t_arg); - timeout = strtod(t_arg, &p); - if ((p != NULL && *p != '\0') || - !isfinite(timeout) || timeout < 0) { - fprintf(stderr, "-t: Invalid argument: %s", t_arg); - return (-1); - } - return (1); -} - -#define OPTARG "hn:pS:T:t:" - -int -main(int argc, char * const *argv) -{ - const char *T_arg = NULL; - const char *S_arg = NULL; - const char *n_arg = NULL; - const char *t_arg = NULL; - int opt, sock; - - if (argc == 2 && !strcmp(argv[1], "--optstring")) { - printf(OPTARG "\n"); - exit(0); - } - /* - * By default linux::getopt(3) mangles the argv order, such that - * varnishadm -n bla param.set foo -bar - * gets interpreted as - * varnishadm -n bla -bar param.set foo - * The '+' stops that from happening - * See #1496 - */ - while ((opt = getopt(argc, argv, "+" OPTARG)) != -1) { - switch (opt) { - case 'h': - /* Usage help */ - usage(0); - case 'n': - n_arg = optarg; - break; - case 'p': - p_arg = 1; - break; - case 'S': - S_arg = optarg; - break; - case 'T': - T_arg = optarg; - break; - case 't': - t_arg = optarg; - break; - default: - usage(1); - } - } - - argc -= optind; - argv += optind; - - if (T_arg != NULL) { - if (n_arg != NULL) - usage(1); - sock = cli_sock(T_arg, S_arg); - } else { - if (S_arg != NULL) - usage(1); - sock = n_arg_sock(n_arg, t_arg); - } - if (sock < 0) - exit(2); - - if (t_arg != NULL && t_arg_timeout(t_arg) < 0) - exit(2); - - if (argc > 0) { - VSIG_Arm_int(); - VSIG_Arm_term(); - do_args(sock, argc, argv); - NEEDLESS(exit(0)); - } - - if (isatty(0) && !p_arg) - interactive(sock); - else - pass(sock); - NEEDLESS(exit(0)); -} diff --git a/bin/varnishd/Makefile.am b/bin/varnishd/Makefile.am deleted file mode 100644 index bbda7dea90d..00000000000 --- a/bin/varnishd/Makefile.am +++ /dev/null @@ -1,264 +0,0 @@ -# - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_srcdir)/lib/libvgz \ - -I$(top_builddir)/bin/varnishd \ - -I$(top_builddir)/include \ - -I$(top_builddir)/lib/libvsc - -sbin_PROGRAMS = varnishd - -varnishd_SOURCES = \ - acceptor/cache_acceptor.c \ - acceptor/cache_acceptor_tcp.c \ - acceptor/cache_acceptor_uds.c \ - acceptor/mgt_acceptor.c \ - acceptor/mgt_acceptor_tcp.c \ - acceptor/mgt_acceptor_uds.c \ - cache/cache_backend.c \ - cache/cache_backend_probe.c \ - cache/cache_ban.c \ - cache/cache_ban_build.c \ - cache/cache_ban_idx.c \ - cache/cache_ban_lurker.c \ - cache/cache_busyobj.c \ - cache/cache_cli.c \ - cache/cache_conn_pool.c \ - cache/cache_deliver_proc.c \ - cache/cache_director.c \ - cache/cache_esi_deliver.c \ - cache/cache_esi_fetch.c \ - cache/cache_esi_parse.c \ - cache/cache_expire.c \ - cache/cache_fetch.c \ - cache/cache_fetch_proc.c \ - cache/cache_gzip.c \ - cache/cache_hash.c \ - cache/cache_http.c \ - cache/cache_lck.c \ - cache/cache_main.c \ - cache/cache_mempool.c \ - cache/cache_obj.c \ - cache/cache_panic.c \ - cache/cache_pool.c \ - cache/cache_range.c \ - cache/cache_req.c \ - cache/cache_req_body.c \ - cache/cache_req_fsm.c \ - cache/cache_rfc2616.c \ - cache/cache_session.c \ - cache/cache_shmlog.c \ - cache/cache_vary.c \ - cache/cache_vcl.c \ - cache/cache_vpi.c \ - cache/cache_vrt.c \ - cache/cache_vrt_filter.c \ - cache/cache_vrt_priv.c \ - cache/cache_vrt_re.c \ - cache/cache_vrt_var.c \ - cache/cache_vrt_vcl.c \ - cache/cache_vrt_vmod.c \ - cache/cache_wrk.c \ - cache/cache_ws_common.c \ - common/common_vsc.c \ - common/common_vsmw.c \ - hash/hash_classic.c \ - hash/hash_critbit.c \ - hash/hash_simple_list.c \ - hash/mgt_hash.c \ - hpack/vhp_decode.c \ - hpack/vhp_table.c \ - http1/cache_http1_deliver.c \ - http1/cache_http1_fetch.c \ - http1/cache_http1_fsm.c \ - http1/cache_http1_line.c \ - http1/cache_http1_pipe.c \ - http1/cache_http1_proto.c \ - http1/cache_http1_vfp.c \ - http2/cache_http2_deliver.c \ - http2/cache_http2_hpack.c \ - http2/cache_http2_panic.c \ - http2/cache_http2_proto.c \ - http2/cache_http2_send.c \ - http2/cache_http2_session.c \ - mgt/mgt_child.c \ - mgt/mgt_cli.c \ - mgt/mgt_jail.c \ - mgt/mgt_jail_solaris.c \ - mgt/mgt_jail_solaris_tbl.h \ - mgt/mgt_jail_unix.c \ - mgt/mgt_jail_linux.c \ - mgt/mgt_main.c \ - mgt/mgt_param.c \ - mgt/mgt_param_tcp.c \ - mgt/mgt_param_tweak.c \ - mgt/mgt_shmem.c \ - mgt/mgt_symtab.c \ - mgt/mgt_util.c \ - mgt/mgt_vcc.c \ - mgt/mgt_vcl.c \ - mgt/mgt_vext.c \ - proxy/cache_proxy_proto.c \ - proxy/cache_proxy.h \ - storage/mgt_stevedore.c \ - storage/stevedore.c \ - storage/stevedore_utils.c \ - storage/storage_file.c \ - storage/storage_lru.c \ - storage/storage_malloc.c \ - storage/storage_debug.c \ - storage/storage_simple.c \ - storage/storage_umem.c \ - waiter/cache_waiter.c \ - waiter/cache_waiter_epoll.c \ - waiter/cache_waiter_kqueue.c \ - waiter/cache_waiter_poll.c \ - waiter/cache_waiter_ports.c \ - waiter/mgt_waiter.c - -if ENABLE_WORKSPACE_EMULATOR -varnishd_SOURCES += \ - cache/cache_ws_emu.c -else -varnishd_SOURCES += \ - cache/cache_ws.c -endif - -if WITH_PERSISTENT_STORAGE -varnishd_SOURCES += \ - storage/mgt_storage_persistent.c \ - storage/storage_persistent.c \ - storage/storage_persistent_silo.c \ - storage/storage_persistent_subr.c -endif - -nodist_varnishd_SOURCES = \ - builtin_vcl.c - -noinst_HEADERS = \ - acceptor/acceptor_priv.h \ - acceptor/acceptor_tcp.h \ - acceptor/acceptor_uds.h \ - acceptor/cache_acceptor.h \ - acceptor/mgt_acceptor.h \ - cache/cache_ban.h \ - cache/cache_conn_pool.h \ - cache/cache_esi.h \ - cache/cache_obj.h \ - cache/cache_objhead.h \ - cache/cache_pool.h \ - cache/cache_transport.h \ - cache/cache_vcl.h \ - cache/cache_vgz.h \ - common/heritage.h \ - common/vsmw.h \ - hash/hash_slinger.h \ - hpack/vhp.h \ - http1/cache_http1.h \ - http2/cache_http2.h \ - mgt/mgt.h \ - mgt/mgt_vcl.h \ - mgt/mgt_param.h \ - storage/storage.h \ - storage/storage_persistent.h \ - storage/storage_simple.h \ - waiter/mgt_waiter.h \ - waiter/waiter_priv.h - -# Headers for use with vmods -nobase_pkginclude_HEADERS = \ - cache/cache.h \ - cache/cache_backend.h \ - cache/cache_director.h \ - cache/cache_filter.h \ - cache/cache_varnishd.h \ - common/common_param.h \ - waiter/waiter.h - -vcldir=$(datarootdir)/$(PACKAGE)/vcl - -varnishd_CFLAGS = \ - -DNOT_IN_A_VMOD \ - -DVARNISH_STATE_DIR='"${VARNISH_STATE_DIR}"' \ - -DVARNISH_VMOD_DIR='"${vmoddir}"' \ - -DVARNISH_VCL_DIR='"${pkgsysconfdir}:${vcldir}"' - -varnishd_LDFLAGS = -export-dynamic - -varnishd_LDADD = \ - $(top_builddir)/lib/libvcc/libvcc.la \ - $(top_builddir)/lib/libvarnish/libvarnish.la \ - $(top_builddir)/lib/libvsc/libvsc.la \ - $(top_builddir)/lib/libvgz/libvgz.la \ - @JEMALLOC_LDADD@ \ - ${DL_LIBS} ${PTHREAD_LIBS} ${NET_LIBS} ${RT_LIBS} ${LIBM} - -if WITH_UNWIND -varnishd_CFLAGS += -DUNW_LOCAL_ONLY ${LIBUNWIND_CFLAGS} -varnishd_LDADD += ${LIBUNWIND_LIBS} -endif - -noinst_PROGRAMS = vhp_gen_hufdec -vhp_gen_hufdec_SOURCES = hpack/vhp_gen_hufdec.c -vhp_gen_hufdec_LDADD = $(top_builddir)/lib/libvarnish/libvarnish.la - -noinst_PROGRAMS += vhp_table_test -vhp_table_test_SOURCES = hpack/vhp_table.c -vhp_table_test_CFLAGS = -DTABLE_TEST_DRIVER -vhp_table_test_LDADD = $(top_builddir)/lib/libvarnish/libvarnish.la - -noinst_PROGRAMS += vhp_decode_test -vhp_decode_test_SOURCES = hpack/vhp_decode.c hpack/vhp_table.c -vhp_decode_test_CFLAGS = -DDECODE_TEST_DRIVER -vhp_decode_test_LDADD = $(top_builddir)/lib/libvarnish/libvarnish.la - -noinst_PROGRAMS += esi_parse_fuzzer -esi_parse_fuzzer_SOURCES = \ - cache/cache_ws_emu.c \ - cache/cache_ws_common.c \ - cache/cache_esi_parse.c \ - fuzzers/esi_parse_fuzzer.c -esi_parse_fuzzer_CFLAGS = \ - -DNOT_IN_A_VMOD -DENABLE_WORKSPACE_EMULATOR -esi_parse_fuzzer_LDADD = \ - $(top_builddir)/lib/libvarnish/libvarnish.la \ - $(top_builddir)/lib/libvgz/libvgz.la - -if ENABLE_OSS_FUZZ -esi_parse_fuzzer_LDFLAGS = $(LIB_FUZZING_ENGINE) -else -esi_parse_fuzzer_CFLAGS += -DTEST_DRIVER -endif - -TESTS = vhp_table_test vhp_decode_test - -# -# Turn the builtin.vcl file into a C-string we can include in the program. -# -builtin_vcl.c: builtin.vcl - echo '/*' > $@ - echo ' * NB: This file is machine generated, DO NOT EDIT!' >> $@ - echo ' *' >> $@ - echo ' * Edit builtin.vcl instead and run make' >> $@ - echo ' *' >> $@ - echo ' */' >> $@ - echo '#include "config.h"' >> $@ - echo '#include "mgt/mgt.h"' >> $@ - echo '' >> $@ - echo 'const char * const builtin_vcl =' >> $@ - sed -e 's/"/\\"/g' \ - -e 's/$$/\\n"/' \ - -e 's/^/ "/' $(srcdir)/builtin.vcl >> $@ - echo ';' >> $@ - -EXTRA_DIST = builtin.vcl - -vhp_hufdec.h: vhp_gen_hufdec - $(AM_V_GEN) ./vhp_gen_hufdec > vhp_hufdec.h_ - mv -f vhp_hufdec.h_ vhp_hufdec.h - -DISTCLEANFILES = builtin_vcl.c - -BUILT_SOURCES = vhp_hufdec.h -DISTCLEANFILES += vhp_hufdec.h diff --git a/bin/varnishd/cache/cache_expire.c b/bin/varnishd/cache/cache_expire.c deleted file mode 100644 index cd604f1d0a3..00000000000 --- a/bin/varnishd/cache/cache_expire.c +++ /dev/null @@ -1,506 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2011 Varnish Software AS - * All rights reserved. - * - * Author: Poul-Henning Kamp - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * LRU and object timer handling. - * - */ - -#include "config.h" - -#include - -#include "cache_varnishd.h" -#include "cache_objhead.h" - -#include "vbh.h" -#include "vtim.h" - -struct exp_priv { - unsigned magic; -#define EXP_PRIV_MAGIC 0x9db22482 - /* shared */ - struct lock mtx; - VSTAILQ_HEAD(,objcore) inbox; - pthread_cond_t condvar; - - /* owned by exp thread */ - struct worker *wrk; - struct vsl_log vsl; - struct vbh *heap; - pthread_t thread; -}; - -static struct exp_priv *exphdl; -static int exp_shutdown = 0; - -/*--------------------------------------------------------------------- - * Calculate the point in time when an object will become stale, taking - * req.max_age into account, if available - */ - -vtim_real -EXP_Ttl(const struct req *req, const struct objcore *oc) -{ - vtim_dur r; - - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - - r = oc->ttl; - if (req != NULL && req->d_ttl > 0. && req->d_ttl < r) - r = req->d_ttl; - return (oc->t_origin + r); -} - -/*-------------------------------------------------------------------- - * Calculate an object's effective ttl+grace time, taking req.grace into - * account if it is available. - */ - -vtim_real -EXP_Ttl_grace(const struct req *req, const struct objcore *oc) -{ - vtim_dur g; - - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - - g = oc->grace; - if (req != NULL && req->d_grace >= 0. && req->d_grace < g) - g = req->d_grace; - return (EXP_Ttl(req, oc) + g); -} - -/*-------------------------------------------------------------------- - * Post an objcore to the exp_thread's inbox. - */ - -static void -exp_mail_it(struct objcore *oc, uint8_t cmds) -{ - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - assert(oc->refcnt > 0); - AZ(cmds & OC_EF_REFD); - - Lck_AssertHeld(&exphdl->mtx); - - if (oc->exp_flags & OC_EF_REFD) { - if (!(oc->exp_flags & OC_EF_POSTED)) { - if (cmds & OC_EF_REMOVE) - VSTAILQ_INSERT_HEAD(&exphdl->inbox, - oc, exp_list); - else - VSTAILQ_INSERT_TAIL(&exphdl->inbox, - oc, exp_list); - VSC_C_main->exp_mailed++; - } - oc->exp_flags |= cmds | OC_EF_POSTED; - PTOK(pthread_cond_signal(&exphdl->condvar)); - } -} - -/*-------------------------------------------------------------------- - * Setup a new ObjCore for control by expire. Should be called with the - * ObjHead locked by HSH_Unbusy(/HSH_Insert) (in private access). - */ - -void -EXP_RefNewObjcore(struct objcore *oc) -{ - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - - Lck_AssertHeld(&oc->objhead->mtx); - - AZ(oc->exp_flags); - assert(oc->refcnt >= 1); - oc->refcnt++; - oc->exp_flags |= OC_EF_REFD | OC_EF_NEW; -} - - - -/*-------------------------------------------------------------------- - * Call EXP's attention to an oc - */ - -void -EXP_Remove(struct objcore *oc, const struct objcore *new_oc) -{ - - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - CHECK_OBJ_ORNULL(new_oc, OBJCORE_MAGIC); - - if (oc->exp_flags & OC_EF_REFD) { - Lck_Lock(&exphdl->mtx); - if (new_oc != NULL) - VSC_C_main->n_superseded++; - if (oc->exp_flags & OC_EF_NEW) { - /* EXP_Insert has not been called for this object - * yet. Mark it for removal, and EXP_Insert will - * clean up once it is called. */ - AZ(oc->exp_flags & OC_EF_POSTED); - oc->exp_flags |= OC_EF_REMOVE; - } else - exp_mail_it(oc, OC_EF_REMOVE); - Lck_Unlock(&exphdl->mtx); - } -} - -/*-------------------------------------------------------------------- - * Insert new object. - * - * Caller got a oc->refcnt for us. - */ - -void -EXP_Insert(struct worker *wrk, struct objcore *oc) -{ - unsigned remove_race = 0; - struct objcore *tmpoc; - - CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - - AZ(oc->flags & OC_F_BUSY); - - if (!(oc->exp_flags & OC_EF_REFD)) - return; - - /* One ref held by the caller, and one that will be owned by - * expiry. */ - assert(oc->refcnt >= 2); - - ObjSendEvent(wrk, oc, OEV_INSERT); - - Lck_Lock(&exphdl->mtx); - AN(oc->exp_flags & OC_EF_NEW); - oc->exp_flags &= ~OC_EF_NEW; - AZ(oc->exp_flags & (OC_EF_INSERT | OC_EF_MOVE | OC_EF_POSTED)); - if (oc->exp_flags & OC_EF_REMOVE) { - /* We raced some other thread executing EXP_Remove */ - remove_race = 1; - oc->exp_flags &= ~(OC_EF_REFD | OC_EF_REMOVE); - } else - exp_mail_it(oc, OC_EF_INSERT | OC_EF_MOVE); - Lck_Unlock(&exphdl->mtx); - - if (remove_race) { - ObjSendEvent(wrk, oc, OEV_EXPIRE); - tmpoc = oc; - assert(oc->refcnt >= 2); /* Silence coverity */ - (void)HSH_DerefObjCore(wrk, &oc); - AZ(oc); - assert(tmpoc->refcnt >= 1); /* Silence coverity */ - } -} - -/*-------------------------------------------------------------------- - * Reduce object timers - */ - -void -EXP_Reduce(struct objcore *oc, vtim_real now, - vtim_dur ttl, vtim_dur grace, vtim_dur keep) -{ - - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - assert(oc->refcnt > 0); - - if (!isnan(ttl) && now + ttl - oc->t_origin >= oc->ttl) - ttl = NAN; - if (!isnan(grace) && grace >= oc->grace) - grace = NAN; - if (!isnan(keep) && keep >= oc->keep) - keep = NAN; - - EXP_Rearm(oc, now, ttl, grace, keep); -} - -/*-------------------------------------------------------------------- - * We have changed one or more of the object timers, tell the exp_thread - * - */ - -void -EXP_Rearm(struct objcore *oc, vtim_real now, - vtim_dur ttl, vtim_dur grace, vtim_dur keep) -{ - vtim_real when; - - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - assert(oc->refcnt > 0); - - if (!(oc->exp_flags & OC_EF_REFD)) - return; - - if (!isnan(ttl)) - oc->ttl = now + ttl - oc->t_origin; - if (!isnan(grace)) - oc->grace = grace; - if (!isnan(keep)) - oc->keep = keep; - - when = EXP_WHEN(oc); - - VSL(SLT_ExpKill, NO_VXID, "EXP_Rearm p=%p E=%.6f e=%.6f f=0x%x", oc, - oc->timer_when, when, oc->flags); - - if (when < oc->t_origin || when < oc->timer_when) { - Lck_Lock(&exphdl->mtx); - if (oc->exp_flags & OC_EF_NEW) { - /* EXP_Insert has not been called yet, do nothing - * as the initial insert will execute the move - * operation. */ - } else - exp_mail_it(oc, OC_EF_MOVE); - Lck_Unlock(&exphdl->mtx); - } -} - -/*-------------------------------------------------------------------- - * Handle stuff in the inbox - */ - -static void -exp_inbox(struct exp_priv *ep, struct objcore *oc, unsigned flags, vtim_real now) -{ - - CHECK_OBJ_NOTNULL(ep, EXP_PRIV_MAGIC); - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - assert(oc->refcnt > 0); - - VSLb(&ep->vsl, SLT_ExpKill, "EXP_Inbox flg=%x p=%p e=%.6f f=0x%x", - flags, oc, oc->timer_when, oc->flags); - - if (flags & OC_EF_REMOVE) { - if (!(flags & OC_EF_INSERT)) { - assert(oc->timer_idx != VBH_NOIDX); - VBH_delete(ep->heap, oc->timer_idx); - } - assert(oc->timer_idx == VBH_NOIDX); - assert(oc->refcnt > 0); - AZ(oc->exp_flags); - VSLb(&ep->vsl, SLT_ExpKill, "EXP_Removed x=%ju t=%.0f h=%jd", - VXID(ObjGetXID(ep->wrk, oc)), EXP_Ttl(NULL, oc) - now, - (intmax_t)oc->hits); - ObjSendEvent(ep->wrk, oc, OEV_EXPIRE); - (void)HSH_DerefObjCore(ep->wrk, &oc); - return; - } - - if (flags & OC_EF_MOVE) { - oc->timer_when = EXP_WHEN(oc); - ObjSendEvent(ep->wrk, oc, OEV_TTLCHG); - } - - VSLb(&ep->vsl, SLT_ExpKill, "EXP_When p=%p e=%.6f f=0x%x", oc, - oc->timer_when, flags); - - /* - * XXX: There are some pathological cases here, were we - * XXX: insert or move an expired object, only to find out - * XXX: the next moment and rip them out again. - */ - - if (flags & OC_EF_INSERT) { - assert(oc->timer_idx == VBH_NOIDX); - VBH_insert(exphdl->heap, oc); - assert(oc->timer_idx != VBH_NOIDX); - } else if (flags & OC_EF_MOVE) { - assert(oc->timer_idx != VBH_NOIDX); - VBH_reorder(exphdl->heap, oc->timer_idx); - assert(oc->timer_idx != VBH_NOIDX); - } else { - WRONG("Objcore state wrong in inbox"); - } -} - -/*-------------------------------------------------------------------- - * Expire stuff from the binheap - */ - -static vtim_real -exp_expire(struct exp_priv *ep, vtim_real now) -{ - struct objcore *oc; - - CHECK_OBJ_NOTNULL(ep, EXP_PRIV_MAGIC); - - oc = VBH_root(ep->heap); - if (oc == NULL) - return (now + 355. / 113.); - VSLb(&ep->vsl, SLT_ExpKill, "EXP_Inspect p=%p e=%.6f f=0x%x", oc, - oc->timer_when - now, oc->flags); - - CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC); - - /* Ready ? */ - if (oc->timer_when > now) - return (oc->timer_when); - - VSC_C_main->n_expired++; - - Lck_Lock(&ep->mtx); - if (oc->exp_flags & OC_EF_POSTED) { - oc->exp_flags |= OC_EF_REMOVE; - oc = NULL; - } else { - oc->exp_flags &= ~OC_EF_REFD; - } - Lck_Unlock(&ep->mtx); - if (oc != NULL) { - if (!(oc->flags & OC_F_DYING)) - HSH_Kill(oc); - - /* Remove from binheap */ - assert(oc->timer_idx != VBH_NOIDX); - VBH_delete(ep->heap, oc->timer_idx); - assert(oc->timer_idx == VBH_NOIDX); - - CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC); - VSLb(&ep->vsl, SLT_ExpKill, "EXP_Expired x=%ju t=%.0f h=%jd", - VXID(ObjGetXID(ep->wrk, oc)), EXP_Ttl(NULL, oc) - now, - (intmax_t)oc->hits); - ObjSendEvent(ep->wrk, oc, OEV_EXPIRE); - (void)HSH_DerefObjCore(ep->wrk, &oc); - } - return (0); -} - -/*-------------------------------------------------------------------- - * This thread monitors the root of the binary heap and whenever an - * object expires, accounting also for graceability, it is killed. - */ - -static int v_matchproto_(vbh_cmp_t) -object_cmp(void *priv, const void *a, const void *b) -{ - const struct objcore *aa, *bb; - - (void)priv; - CAST_OBJ_NOTNULL(aa, a, OBJCORE_MAGIC); - CAST_OBJ_NOTNULL(bb, b, OBJCORE_MAGIC); - return (aa->timer_when < bb->timer_when); -} - -static void v_matchproto_(vbh_update_t) -object_update(void *priv, void *p, unsigned u) -{ - struct objcore *oc; - - (void)priv; - CAST_OBJ_NOTNULL(oc, p, OBJCORE_MAGIC); - oc->timer_idx = u; -} - -static void * v_matchproto_(bgthread_t) -exp_thread(struct worker *wrk, void *priv) -{ - struct objcore *oc; - vtim_real t = 0, tnext = 0; - struct exp_priv *ep; - unsigned flags = 0; - - CAST_OBJ_NOTNULL(ep, priv, EXP_PRIV_MAGIC); - ep->wrk = wrk; - VSL_Setup(&ep->vsl, NULL, 0); - AZ(wrk->vsl); - wrk->vsl = &ep->vsl; - ep->heap = VBH_new(NULL, object_cmp, object_update); - AN(ep->heap); - while (exp_shutdown == 0) { - - Lck_Lock(&ep->mtx); - oc = VSTAILQ_FIRST(&ep->inbox); - CHECK_OBJ_ORNULL(oc, OBJCORE_MAGIC); - if (oc != NULL) { - assert(oc->refcnt >= 1); - assert(oc->exp_flags & OC_EF_POSTED); - VSTAILQ_REMOVE(&ep->inbox, oc, objcore, exp_list); - VSC_C_main->exp_received++; - tnext = 0; - flags = oc->exp_flags; - if (flags & OC_EF_REMOVE) - oc->exp_flags = 0; - else - oc->exp_flags &= OC_EF_REFD; - } else if (tnext > t) { - VSL_Flush(&ep->vsl, 0); - Pool_Sumstat(wrk); - (void)Lck_CondWaitUntil(&ep->condvar, &ep->mtx, tnext); - } - Lck_Unlock(&ep->mtx); - - t = VTIM_real(); - - if (oc != NULL) - exp_inbox(ep, oc, flags, t); - else - tnext = exp_expire(ep, t); - } - wrk->vsl = NULL; - return (NULL); -} - -/*--------------------------------------------------------------------*/ - -void -EXP_Init(void) -{ - struct exp_priv *ep; - pthread_t pt; - - ALLOC_OBJ(ep, EXP_PRIV_MAGIC); - AN(ep); - - Lck_New(&ep->mtx, lck_exp); - PTOK(pthread_cond_init(&ep->condvar, NULL)); - VSTAILQ_INIT(&ep->inbox); - WRK_BgThread(&pt, "cache-exp", exp_thread, ep); - ep->thread = pt; - exphdl = ep; -} - -void -EXP_Shutdown(void) -{ - struct exp_priv *ep = exphdl; - void *status; - - Lck_Lock(&ep->mtx); - exp_shutdown = 1; - PTOK(pthread_cond_signal(&ep->condvar)); - Lck_Unlock(&ep->mtx); - - AN(ep->thread); - PTOK(pthread_join(ep->thread, &status)); - AZ(status); - memset(&ep->thread, 0, sizeof ep->thread); - - /* XXX could cleanup more - not worth it for now */ -} diff --git a/bin/varnishd/cache/cache_varnishd.h b/bin/varnishd/cache/cache_varnishd.h deleted file mode 100644 index a2edf20833f..00000000000 --- a/bin/varnishd/cache/cache_varnishd.h +++ /dev/null @@ -1,622 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2015 Varnish Software AS - * All rights reserved. - * - * Author: Poul-Henning Kamp - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Stuff that should *never* be exposed to a VMOD - */ - -#include "cache.h" - -#include "vsb.h" - -#include - -#include -#include -#include - -#include "common/common_param.h" - -#ifdef NOT_IN_A_VMOD -# include "VSC_main.h" -#endif - -/*--------------------------------------------------------------------*/ - -struct vfp; -struct vdp; -struct cli_proto; -struct poolparam; - -/*--------------------------------------------------------------------*/ - -typedef enum req_fsm_nxt req_state_f(struct worker *, struct req *); -struct req_step { - const char *name; - req_state_f *func; -}; - -extern const struct req_step R_STP_TRANSPORT[1]; -extern const struct req_step R_STP_RECV[1]; - -struct vxid_pool { - uint64_t next; - uint32_t count; -}; - -/*-------------------------------------------------------------------- - * Private part of worker threads - */ - -struct worker_priv { - unsigned magic; -#define WORKER_PRIV_MAGIC 0x3047db99 - struct objhead *nobjhead; - struct objcore *nobjcore; - void *nhashpriv; - struct vxid_pool vxid_pool[1]; - struct vcl *vcl; -}; - -/*-------------------------------------------------------------------- - * HTTP Protocol connection structure - * - * This is the protocol independent object for a HTTP connection, used - * both for backend and client sides. - * - */ - -struct http_conn { - unsigned magic; -#define HTTP_CONN_MAGIC 0x3e19edd1 - - int *rfd; - stream_close_t doclose; - body_status_t body_status; - struct ws *ws; - char *rxbuf_b; - char *rxbuf_e; - char *pipeline_b; - char *pipeline_e; - ssize_t content_length; - void *priv; - - /* Timeouts */ - vtim_dur first_byte_timeout; - vtim_dur between_bytes_timeout; -}; - -enum htc_status_e { -#define HTC_STATUS(e, n, s, l) HTC_S_ ## e = n, -#include "tbl/htc.h" -}; - -typedef enum htc_status_e htc_complete_f(struct http_conn *); - -/* -------------------------------------------------------------------*/ - -extern volatile struct params * cache_param; - -/* ------------------------------------------------------------------- - * The VCF facility is deliberately undocumented, use at your peril. - */ - -struct vcf_return { - const char *name; -}; - -#define VCF_RETURNS() \ - VCF_RETURN(CONTINUE) \ - VCF_RETURN(DEFAULT) \ - VCF_RETURN(MISS) \ - VCF_RETURN(HIT) - -#define VCF_RETURN(x) extern const struct vcf_return VCF_##x[1]; -VCF_RETURNS() -#undef VCF_RETURN - -typedef const struct vcf_return *vcf_func_f( - struct req *req, - struct objcore **oc, - struct objcore **oc_exp, - int state); - -struct vcf { - unsigned magic; -#define VCF_MAGIC 0x183285d1 - vcf_func_f *func; - void *priv; -}; - -/* Prototypes etc ----------------------------------------------------*/ - -/* cache_backend.c */ -struct backend; - -/* cache_backend_cfg.c */ -void VBE_InitCfg(void); - -/* cache_ban.c */ - -/* for stevedoes resurrecting bans */ -void BAN_Hold(void); -void BAN_Release(void); -void BAN_Reload(const uint8_t *ban, unsigned len); -struct ban *BAN_FindBan(vtim_real t0); -void BAN_RefBan(struct objcore *oc, struct ban *); -vtim_real BAN_Time(const struct ban *ban); - -/* cache_busyobj.c */ -struct busyobj *VBO_GetBusyObj(const struct worker *, const struct req *); -void VBO_ReleaseBusyObj(struct worker *wrk, struct busyobj **busyobj); -void VBO_SetState(struct worker *wrk, struct busyobj *bo, - enum boc_state_e next); - -/* cache_director.c */ -int VDI_GetHdr(struct busyobj *); -VCL_IP VDI_GetIP(struct busyobj *); -void VDI_Finish(struct busyobj *bo); -stream_close_t VDI_Http1Pipe(struct req *, struct busyobj *); -void VDI_Panic(const struct director *, struct vsb *, const char *nm); -void VDI_Event(const struct director *d, enum vcl_event_e ev); -void VDI_Init(void); - -/* cache_deliver_proc.c */ -void VDP_Fini(const struct vdp_ctx *vdc); -void VDP_Init(struct vdp_ctx *vdc, struct worker *wrk, struct vsl_log *vsl, - const struct req *req, const struct busyobj *bo, intmax_t *cl); -uint64_t VDP_Close(struct vdp_ctx *, struct objcore *, struct boc *); -void VDP_Panic(struct vsb *vsb, const struct vdp_ctx *vdc); -int VDP_Push(VRT_CTX, struct vdp_ctx *, struct ws *, const struct vdp *, - void *priv); -int VDP_ObjIterate(void *priv, unsigned flush, const void *ptr, ssize_t len); -int VDP_DeliverObj(struct vdp_ctx *vdc, struct objcore *oc); -extern const struct vdp VDP_gunzip; -extern const struct vdp VDP_esi; -extern const struct vdp VDP_range; - -uint64_t VDPIO_Close(struct vdp_ctx *, struct objcore *, struct boc *); -int VDPIO_Upgrade(VRT_CTX, struct vdp_ctx *vdc); -int VDPIO_Push(VRT_CTX, struct vdp_ctx *, struct ws *, const struct vdp *, - void *priv); - - -/* cache_exp.c */ -vtim_real EXP_Ttl(const struct req *, const struct objcore *); -vtim_real EXP_Ttl_grace(const struct req *, const struct objcore *oc); -void EXP_RefNewObjcore(struct objcore *); -void EXP_Insert(struct worker *wrk, struct objcore *oc); -void EXP_Remove(struct objcore *, const struct objcore *); - -#define EXP_Dttl(req, oc) (oc->ttl - (req->t_req - oc->t_origin)) - -/* cache_expire.c */ - -/* - * The set of variables which control object expiry are inconveniently - * 24 bytes long (double+3*float) and this causes alignment waste if - * we put then in a struct. - * These three macros operate on the struct we don't use. - */ - -#define EXP_ZERO(xx) \ - do { \ - (xx)->t_origin = 0.0; \ - (xx)->ttl = 0.0; \ - (xx)->grace = 0.0; \ - (xx)->keep = 0.0; \ - } while (0) - -#define EXP_COPY(to,fm) \ - do { \ - (to)->t_origin = (fm)->t_origin; \ - (to)->ttl = (fm)->ttl; \ - (to)->grace = (fm)->grace; \ - (to)->keep = (fm)->keep; \ - } while (0) - -#define EXP_WHEN(to) \ - ((to)->t_origin + (to)->ttl + (to)->grace + (to)->keep) - -/* cache_exp.c */ -void EXP_Rearm(struct objcore *oc, vtim_real now, - vtim_dur ttl, vtim_dur grace, vtim_dur keep); -void EXP_Reduce(struct objcore *oc, vtim_real now, - vtim_dur ttl, vtim_dur grace, vtim_dur keep); - -/* From cache_main.c */ -void BAN_Init(void); -void BAN_Compile(void); -void BAN_Shutdown(void); - -/* From cache_hash.c */ -void BAN_NewObjCore(struct objcore *oc); -void BAN_DestroyObj(struct objcore *oc); -int BAN_CheckObject(struct worker *, struct objcore *, struct req *); - -/* cache_busyobj.c */ -void VBO_Init(void); - -/* cache_cli.c [CLI] */ -void CLI_Init(void); -void CLI_Run(void); -void CLI_AddFuncs(struct cli_proto *p); - -/* cache_expire.c */ -void EXP_Init(void); -void EXP_Shutdown(void); - -/* cache_fetch.c */ -enum vbf_fetch_mode_e { - VBF_NORMAL = 0, - VBF_PASS = 1, - VBF_BACKGROUND = 2, -}; -void VBF_Fetch(struct worker *wrk, struct req *req, - struct objcore *oc, struct objcore *oldoc, enum vbf_fetch_mode_e); -const char *VBF_Get_Filter_List(struct busyobj *); -void Bereq_Rollback(VRT_CTX); - -/* cache_fetch_proc.c */ -void VFP_Init(void); -struct vfp_entry *VFP_Push(struct vfp_ctx *, const struct vfp *); -enum vfp_status VFP_GetStorage(struct vfp_ctx *, ssize_t *sz, uint8_t **ptr); -void VFP_Extend(const struct vfp_ctx *, ssize_t sz, enum vfp_status); -void VFP_Setup(struct vfp_ctx *vc, struct worker *wrk); -int VFP_Open(VRT_CTX, struct vfp_ctx *); -uint64_t VFP_Close(struct vfp_ctx *); - -extern const struct vfp VFP_gunzip; -extern const struct vfp VFP_gzip; -extern const struct vfp VFP_testgunzip; -extern const struct vfp VFP_esi; -extern const struct vfp VFP_esi_gzip; - -/* cache_http.c */ -void HTTP_Init(void); - -/* cache_http1_proto.c */ - -htc_complete_f HTTP1_Complete; -uint16_t HTTP1_DissectRequest(struct http_conn *, struct http *); -uint16_t HTTP1_DissectResponse(struct http_conn *, struct http *resp, - const struct http *req); -struct v1l; -unsigned HTTP1_Write(struct v1l *v1l, const struct http *hp, const int*); - -/* cache_main.c */ -vxid_t VXID_Get(const struct worker *, uint64_t marker); -extern pthread_key_t panic_key; -extern pthread_key_t witness_key; - -void THR_SetName(const char *name); -const char* THR_GetName(void); -void THR_SetBusyobj(const struct busyobj *); -struct busyobj * THR_GetBusyobj(void); -void THR_SetRequest(const struct req *); -struct req * THR_GetRequest(void); -void THR_SetWorker(const struct worker *); -struct worker * THR_GetWorker(void); -void THR_Init(void); - -/* cache_lck.c */ -void LCK_Init(void); - -/* cache_mempool.c */ -void MPL_AssertSane(const void *item); -struct mempool * MPL_New(const char *name, volatile struct poolparam *pp, - volatile unsigned *cur_size); -void MPL_Destroy(struct mempool **mpp); -void *MPL_Get(struct mempool *mpl, unsigned *size); -void MPL_Free(struct mempool *mpl, void *item); - -/* cache_obj.c */ -void ObjInit(void); -struct objcore * ObjNew(const struct worker *); -void ObjDestroy(const struct worker *, struct objcore **); -int ObjGetSpace(struct worker *, struct objcore *, ssize_t *sz, uint8_t **ptr); -void ObjExtend(struct worker *, struct objcore *, ssize_t l, int final); -uint64_t ObjWaitExtend(const struct worker *, const struct objcore *, - uint64_t l, enum boc_state_e *statep); -void ObjSetState(struct worker *, struct objcore *, enum boc_state_e next, - unsigned broadcast); -enum boc_state_e ObjWaitState(const struct objcore *, enum boc_state_e want); -void ObjTouch(struct worker *, struct objcore *, vtim_real now); -void ObjFreeObj(struct worker *, struct objcore *); -void ObjSlim(struct worker *, struct objcore *); -void *ObjSetAttr(struct worker *, struct objcore *, enum obj_attr, - ssize_t len, const void *); -int ObjCopyAttr(struct worker *, struct objcore *, struct objcore *, - enum obj_attr attr); -void ObjBocDone(struct worker *, struct objcore *, struct boc **); -// VAI -uint64_t ObjVAIGetExtend(struct worker *, const struct objcore *, uint64_t, - enum boc_state_e *, struct vai_qe *); -void ObjVAICancel(struct worker *, struct boc *, struct vai_qe *); - -int ObjSetDouble(struct worker *, struct objcore *, enum obj_attr, double); -int ObjSetU64(struct worker *, struct objcore *, enum obj_attr, uint64_t); -int ObjSetXID(struct worker *, struct objcore *, vxid_t); - -void ObjSetFlag(struct worker *, struct objcore *, enum obj_flags of, int val); - -void ObjSendEvent(struct worker *, struct objcore *oc, unsigned event); - -#define OEV_INSERT (1U<<1) -#define OEV_BANCHG (1U<<2) -#define OEV_TTLCHG (1U<<3) -#define OEV_EXPIRE (1U<<4) - -#define OEV_MASK (OEV_INSERT|OEV_BANCHG|OEV_TTLCHG|OEV_EXPIRE) - -typedef void obj_event_f(struct worker *, void *priv, struct objcore *, - unsigned); - -uintptr_t ObjSubscribeEvents(obj_event_f *, void *, unsigned mask); -void ObjUnsubscribeEvents(uintptr_t *); - -/* cache_panic.c */ -void PAN_Init(void); -int PAN__DumpStruct(struct vsb *vsb, int block, int track, const void *ptr, - const char *smagic, unsigned magic, const char *fmt, ...) - v_printflike_(7,8); - -#define PAN_CheckMagic(vsb, ptr, exp) \ - do { \ - if ((ptr)->magic != (exp)) \ - VSB_printf((vsb), \ - "MAGIC at %p is 0x%08x (Should be: %s/0x%08x)\n", \ - ptr, (ptr)->magic, #exp, exp); \ - } while(0) - -#define PAN_dump_struct(vsb, ptr, magic, ...) \ - PAN__DumpStruct(vsb, 1, 1, ptr, #magic, magic, __VA_ARGS__) - -#define PAN_dump_oneline(vsb, ptr, magic, ...) \ - PAN__DumpStruct(vsb, 0, 1, ptr, #magic, magic, __VA_ARGS__) - -#define PAN_dump_once(vsb, ptr, magic, ...) \ - PAN__DumpStruct(vsb, 1, 0, ptr, #magic, magic, __VA_ARGS__) - -#define PAN_dump_once_oneline(vsb, ptr, magic, ...) \ - PAN__DumpStruct(vsb, 0, 0, ptr, #magic, magic, __VA_ARGS__) - -/* cache_pool.c */ -void Pool_Init(void); -int Pool_Task(struct pool *pp, struct pool_task *task, enum task_prio prio); -int Pool_Task_Arg(struct worker *, enum task_prio, task_func_t *, - const void *arg, size_t arg_len); -void Pool_Sumstat(const struct worker *w); -int Pool_TrySumstat(const struct worker *wrk); -void Pool_PurgeStat(unsigned nobj); -int Pool_Task_Any(struct pool_task *task, enum task_prio prio); -void pan_pool(struct vsb *); - -/* cache_range.c */ -int VRG_CheckBo(struct busyobj *); - -/* cache_req.c */ -struct req *Req_New(struct sess *, const struct req *); -void Req_Release(struct req *); -void Req_Rollback(VRT_CTX); -void Req_Cleanup(struct sess *sp, struct worker *wrk, struct req *req); -void Req_Fail(struct req *req, stream_close_t reason); -void Req_AcctLogCharge(struct VSC_main_wrk *, struct req *); -void Req_LogHit(struct worker *, struct req *, struct objcore *, intmax_t); -const char *Req_LogStart(const struct worker *, struct req *); - -/* cache_req_body.c */ -int VRB_Ignore(struct req *); -ssize_t VRB_Cache(struct req *, ssize_t maxsize); -void VRB_Free(struct req *); - -/* cache_req_fsm.c [CNT] */ - -int Resp_Setup_Deliver(struct req *); -void Resp_Setup_Synth(struct req *); - -enum req_fsm_nxt { - REQ_FSM_MORE, - REQ_FSM_DONE, - REQ_FSM_DISEMBARK, -}; - -void CNT_Embark(struct worker *, struct req *); -enum req_fsm_nxt CNT_Request(struct req *); - -/* cache_session.c */ -void SES_NewPool(struct pool *, unsigned pool_no); -void SES_DestroyPool(struct pool *); -void SES_Wait(struct sess *, const struct transport *); -void SES_Ref(struct sess *sp); -void SES_Rel(struct sess *sp); - -void HTC_Status(enum htc_status_e, const char **, const char **); -void HTC_RxInit(struct http_conn *htc, struct ws *ws); -void HTC_RxPipeline(struct http_conn *htc, char *); -enum htc_status_e HTC_RxStuff(struct http_conn *, htc_complete_f *, - vtim_real *t1, vtim_real *t2, vtim_real ti, vtim_real tn, vtim_dur td, - int maxbytes); - -#define SESS_ATTR(UP, low, typ, len) \ - int SES_Set_##low(const struct sess *sp, const typ *src); \ - int SES_Reserve_##low(struct sess *sp, typ **dst, ssize_t *sz); -#include "tbl/sess_attr.h" -int SES_Set_String_Attr(struct sess *sp, enum sess_attr a, const char *src); - -/* cache_shmlog.c */ -extern struct VSC_main *VSC_C_main; -void VSM_Init(void); -void VSL_Setup(struct vsl_log *vsl, void *ptr, size_t len); -void VSL_ChgId(struct vsl_log *vsl, const char *typ, const char *why, - vxid_t vxid); -void VSL_End(struct vsl_log *vsl); -void VSL_Flush(struct vsl_log *, int overflow); - -/* cache_conn_pool.c */ -struct conn_pool; -void VCP_Init(void); -void VCP_Panic(struct vsb *, struct conn_pool *); -void VCP_RelPoll(void); - -/* cache_backend_probe.c */ -void VBP_Init(void); - -/* cache_vary.c */ -int VRY_Create(struct busyobj *bo, struct vsb **psb); -int VRY_Match(const struct req *, const uint8_t *vary); -void VRY_Prep(struct req *); -void VRY_Clear(struct req *); -enum vry_finish_flag { KEEP, DISCARD }; -void VRY_Finish(struct req *req, enum vry_finish_flag); - -/* cache_vcl.c */ -void VCL_Bo2Ctx(struct vrt_ctx *, struct busyobj *); -void VCL_Req2Ctx(struct vrt_ctx *, struct req *); -struct vrt_ctx *VCL_Get_CliCtx(int); -struct vsb *VCL_Rel_CliCtx(struct vrt_ctx **); -void VCL_Panic(struct vsb *, const char *nm, const struct vcl *); -void VCL_Poll(void); -void VCL_Init(void); -void VCL_Shutdown(void); - -#define VCL_MET_MAC(l,u,t,b) \ - void VCL_##l##_method(struct vcl *, struct worker *, struct req *, \ - struct busyobj *bo, void *specific); -#include "tbl/vcl_returns.h" - - -typedef int vcl_be_func(struct cli *, struct director *, void *); - -int VCL_IterDirector(struct cli *, const char *, vcl_be_func *, void *); - -/* cache_vrt.c */ -void pan_privs(struct vsb *, const struct vrt_privs *); - -/* cache_vrt_filter.c */ -int VCL_StackVFP(struct vfp_ctx *, const struct vcl *, const char *); -int VCL_StackVDP(struct vdp_ctx *vdc, const struct vcl *vcl, const char *fl, - struct req *req, struct busyobj *bo); -const char *resp_Get_Filter_List(struct req *req); -void VCL_VRT_Init(void); - -/* cache_vrt_vcl.c */ -const char *VCL_Return_Name(unsigned); -const char *VCL_Method_Name(unsigned); -void VCL_Refresh(struct vcl **); -void VCL_Recache(const struct worker *, struct vcl **); -void VCL_Ref(struct vcl *); -void VCL_Rel(struct vcl **); -VCL_BACKEND VCL_DefaultDirector(const struct vcl *); -const struct vrt_backend_probe *VCL_DefaultProbe(const struct vcl *); - -/* cache_vrt_priv.c */ -extern struct vrt_privs cli_task_privs[1]; -void VCL_TaskEnter(struct vrt_privs *); -void VCL_TaskLeave(VRT_CTX, struct vrt_privs *); - -/* cache_vrt_vmod.c */ -void VMOD_Init(void); -void VMOD_Panic(struct vsb *); - -#if defined(ENABLE_COVERAGE) || defined(ENABLE_SANITIZER) -# define DONT_DLCLOSE_VMODS -#endif - -/* cache_wrk.c */ -void WRK_Init(void); -void WRK_AddStat(const struct worker *); -void WRK_Log(enum VSL_tag_e, const char *, ...); - -/* cache_vpi.c */ -extern const size_t vpi_wrk_len; -void VPI_wrk_init(struct worker *, void *, size_t); -void VPI_Panic(struct vsb *, const struct wrk_vpi *, const struct vcl *); - -/* cache_ws.c */ -void WS_Panic(struct vsb *, const struct ws *); -static inline int -WS_IsReserved(const struct ws *ws) -{ - - return (ws->r != NULL); -} - -void *WS_AtOffset(const struct ws *ws, unsigned off, unsigned len); -unsigned WS_ReservationOffset(const struct ws *ws); -int WS_Pipeline(struct ws *, const void *b, const void *e, unsigned rollback); - -/* cache_ws_common.c */ -void WS_Id(const struct ws *ws, char *id); -void WS_Rollback(struct ws *, uintptr_t); - -/* http1/cache_http1_pipe.c */ -void V1P_Init(void); - -/* cache_http2_deliver.c */ -void V2D_Init(void); - -/* stevedore.c */ -void STV_open(void); -void STV_warn(void); -void STV_close(void); -const struct stevedore *STV_next(void); -int STV_BanInfoDrop(const uint8_t *ban, unsigned len); -int STV_BanInfoNew(const uint8_t *ban, unsigned len); -void STV_BanExport(const uint8_t *banlist, unsigned len); -// STV_NewObject() len is space for OBJ_VARATTR -int STV_NewObject(struct worker *, struct objcore *, - const struct stevedore *, unsigned len); - -struct stv_buffer; -struct stv_buffer *STV_AllocBuf(struct worker *wrk, const struct stevedore *stv, - size_t size); -void STV_FreeBuf(struct worker *wrk, struct stv_buffer **pstvbuf); -void *STV_GetBufPtr(struct stv_buffer *stvbuf, size_t *psize); - -#ifdef WITH_PERSISTENT_STORAGE -/* storage_persistent.c */ -void SMP_Ready(void); -#endif - -#define FEATURE(x) COM_FEATURE(cache_param->feature_bits, x) -#define EXPERIMENT(x) COM_EXPERIMENT(cache_param->experimental_bits, x) -#define DO_DEBUG(x) COM_DO_DEBUG(cache_param->debug_bits, x) - -#define DSL(debug_bit, id, ...) \ - do { \ - if (DO_DEBUG(debug_bit)) \ - VSL(SLT_Debug, (id), __VA_ARGS__); \ - } while (0) - -#define DSLb(debug_bit, ...) \ - do { \ - if (DO_DEBUG(debug_bit)) \ - WRK_Log(SLT_Debug, __VA_ARGS__); \ - } while (0) diff --git a/bin/varnishd/flint.lnt b/bin/varnishd/flint.lnt deleted file mode 100644 index 302c532aede..00000000000 --- a/bin/varnishd/flint.lnt +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright (c) 2006-2020 Varnish Software AS -// SPDX-License-Identifier: BSD-2-Clause -// See LICENSE file for full text of license - -// -w4 - -/////////////////////////////////////////////////////////////////////// -// deprecated - --esym(765, WS_Reserve) --esym(714, WS_Reserve) --esym(759, WS_Reserve) - -/////////////////////////////////////////////////////////////////////// - --printf(3, VSL) --printf(2, http_PrintfHeader) --printf(2, VSB_printf) - --esym(759, VDI_AH_*) // could be moved from header to module --esym(765, VDI_AH_*) // could be made static - --esym(755, vct_*) --esym(759, vpf_*) --esym(765, vpf_*) --esym(714, vpf_*) --esym(759, H_*) --esym(765, H_*) --esym(757, VSL_*) --esym(765, VLU_*) --esym(759, VLU_*) --esym(714, VLU_*) --esym(765, VSS_*) --esym(759, VSS_*) --esym(755, VSL_*) --esym(765, VSL_*) --esym(759, VSL_*) --esym(765, CLI_*) --esym(759, CLI_*) --esym(755, CLI_*) - --esym(765, http_IsHdr) --esym(759, http_IsHdr) --esym(755, http_IsHdr) - -// -"esym(793,significant characters in an external identifier)" - -// XXX: I think this is a flexelint bug: --esym(522, vbit_clr) - -// Stuff used by compiled VCL --esym(757, VRT_*) --esym(759, VRT_*) --esym(765, VRT_*) --esym(714, VRT_*) --esym(755, VRT_*) --esym(765, vrt_magic_string_end) --esym(759, vrt_magic_string_end) --esym(768, vrt_ref::*) --esym(768, vcf_return::name) --esym(768, VCL_conf::*) --esym(768, vdp::priv1) - -// FLINT Bug20090910_838 --efunc(838, VRT_purge) - -// Stuff in VMODs which is used through dl*(3) functions --esym(754, Vmod_*_Func::*) --esym(714, Vmod_*_Data) --esym(765, Vmod_*_Data) - --esym(755, PAN_dump_once) // global macro not referenced --esym(755, PAN_dump_once_oneline) // global macro not referenced --esym(714, WS_Dump) // Info 714: sym not referenced --esym(759, WS_Dump) // Info 759: header declaration could be moved to module --esym(765, WS_Dump) // Info 765: external could be static - - -//-sem (pthread_mutex_lock, thread_lock) --sem (pthread_mutex_trylock, thread_lock) --sem (VBE_DropRefLocked, thread_unlock) - --emacro(835, HCB_BIT_NODE) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, VBC_STATE_AVAIL) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, BANS_FLAG_REQ) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, HTTPH) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, HTTPH_R_PASS) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, SMP_SC_LOADED) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, SMP_SEG_MUSTLOAD) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, DELAYED_EFFECT) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, HDF_FILTER) // Info 835: A zero has been given as left argument to operator '<<' --emacro(835, O_LARGEFILE) // Info 835: A zero has been given as left argument to operator '<<' - --emacro(845, HTTPH) // Info 845: The left argument to operator '&&' is certain to be 0 --esym(773, PCRE2_DATE) // Expression-like macro '___' not parenthesized - -////////////// -// Macros defined differently in each VMOD -// -esym(767, VPFX) // macro '___' was defined differently in another module -// -esym(767, VARGS) // macro '___' was defined differently in another module -// -esym(767, VENUM) // macro '___' was defined differently in another module -////////////// --efunc(1791, pdiff) // return last on line -////////////// --efile(451, "symbol_kind.h") // No include guard --efile(451, "config.h") // No include guard -////////////// --sem(vca_thread_acct, thread_mono) --sem(vca_epoll_thread, thread_mono) --sem(vca_kqueue_thread, thread_mono) --sem(vca_poll_thread, thread_mono) --sem(vca_ports_thread, thread_mono) --sem(exp_timer, thread_mono) --sem(wrk_herdtimer_thread, thread_mono) --sem(wrk_herder_thread, thread_mono) - -////////////// -// 436 = Apparent preprocessor directive in invocation of macro '___' --emacro(436, SLTM) - -////////////// -+libh netinet/tcp.h --elib(46) -+libh sys/queue.h --elib(607) -////////////// - -+libh mgt_event.h --esym(522, mgt_ProcTitle) - --sem(VRT_AddDirector, custodial(3)) --sem(VCP_New, custodial(3)) --sem(vsmw_addseg, custodial(2)) --sem(BAN_Free, custodial(1)) --sem(EXP_Inject, custodial(1)) --sem(HSH_Insert, custodial(3)) --sem(WS_Init, custodial(2)) --sem(http_Setup, custodial(2)) --sem(vfp_esi_end, custodial(2)) - --sem(vdi_dns_cache_list_add, custodial(3)) - --e717 // do ... while(1) ... --e850 // for loop index variable '___' whose type category is '___' - // is modified in body of the for loop that began at '___' - --esym(765, vcc_ProcAction) // could be made static --esym(759, vcc_ProcAction) // could be moved to module --esym(714, vcc_ProcAction) // not ref. - --emacro(506, isnan, isfinite) // constant value boolean --emacro(736, isfinite) // loss of precision --emacro(774, HTTPH) // always false --emacro(527, ARGV_ERR) // unreachable - --e788 // enum value not used in defaulted switch - -// cache.h --emacro(506, INCOMPL) // Constant value Boolean - --esym(525, __builtin_frame_address) // Not defined --esym(525, __builtin_return_address) // Not defined - -// cache_vcl.c --esym(528, vcl_call_method) // Not referenced --esym(765, VCL_TEMP_*) --esym(759, VCL_TEMP_*) - --e441 // for clause irregularity: loop variable '___' not found in 2nd for expression - -// cache_vpi.c --esym(552, vpi_wrk_len) - -// from libvarnish ---emacro((835),VBH_NOIDX) ---emacro((835),O_CLOEXEC) - -// Deliberately exported, despite no in-tree users --esym(759, EXP_Rearm) --esym(765, EXP_Rearm) - -// Review all below this line /////////////////////////////////////////////// - --e713 // 42 Loss of precision (___) (___ to ___) --e840 // Use of nul character in a string literal (see: vcc_if.c) --e663 // Suspicious array to pointer conversion --e778 // Constant expression evaluates to 0 in operation '___' --e736 // Loss of precision (___) (___ bits to ___ bits) --e655 // bitwise compatible enums - -// cache_session.c --esym(528, ses_set_attr) // Not referenced -// cache_vrt_var.c --esym(528, beresp_filter_fixed) // Not referenced - --esym(714, Lck_DestroyClass) // Not referenced --esym(759, HTTP_IterHdrPack) // Could be moved to module --esym(759, ObjGetU32) // Could be moved to module --esym(759, Lck_DestroyClass) // Could be moved to module --esym(765, HTTP_IterHdrPack) // Could be made static --esym(765, ObjGetU32) // Could be made static --esym(765, Lck_DestroyClass) // Could be made static --esym(769, obj_attr::OA__MAX) // Not referenced diff --git a/bin/varnishd/flint.sh b/bin/varnishd/flint.sh deleted file mode 100644 index b26f0f27a9e..00000000000 --- a/bin/varnishd/flint.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2006-2021 Varnish Software AS -# SPDX-License-Identifier: BSD-2-Clause -# See LICENSE file for full text of license - -FLOPS=' - -I../../lib/libvgz - -I../../lib/libvsc - -DNOT_IN_A_VMOD - -DVARNISH_STATE_DIR="foo" - -DVARNISH_VMOD_DIR="foo" - -DVARNISH_VCL_DIR="foo" - -DWITH_PERSISTENT_STORAGE - acceptor/*.c - cache/*.c - common/*.c - hash/*.c - http1/*.c - http2/*.c - mgt/*.c - proxy/*.c - storage/*.c - waiter/*.c - ../../lib/libvarnish/flint.lnt - ../../lib/libvarnish/*.c - ../../lib/libvcc/flint.lnt - ../../lib/libvcc/*.c - ../../vmod/flint.lnt - ../../vmod/vcc_debug_if.c - ../../vmod/vmod_debug*.c - ../../vmod/VSC_debug*.c -' ../../tools/flint_skel.sh $* diff --git a/bin/varnishd/vclflint.sh b/bin/varnishd/vclflint.sh deleted file mode 100755 index 742265144a0..00000000000 --- a/bin/varnishd/vclflint.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# -# Run flexelint on the VCL output -LIBS="-p vmod_path=/home/phk/Varnish/trunk/varnish-cache/vmod/.libs" - -if [ "x$1" = "x" ] ; then - ./varnishd $LIBS -C -b localhost > /tmp/_.c -elif [ -f $1 ] ; then - ./varnishd $LIBS -C -f $1 > /tmp/_.c -else - echo "usage!" 1>&2 -fi - -flexelint vclflint.lnt /tmp/_.c diff --git a/bin/varnishhist/Makefile.am b/bin/varnishhist/Makefile.am deleted file mode 100644 index f30528b1115..00000000000 --- a/bin/varnishhist/Makefile.am +++ /dev/null @@ -1,17 +0,0 @@ -# - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_builddir)/include \ - @CURSES_CFLAGS@ - -bin_PROGRAMS = varnishhist - -varnishhist_SOURCES = \ - varnishhist.c \ - varnishhist_options.h \ - varnishhist_profiles.h - -varnishhist_LDADD = \ - $(top_builddir)/lib/libvarnishapi/libvarnishapi.la \ - -lm @CURSES_LIBS@ ${RT_LIBS} ${PTHREAD_LIBS} diff --git a/bin/varnishhist/flint.lnt b/bin/varnishhist/flint.lnt deleted file mode 100644 index c2702057f48..00000000000 --- a/bin/varnishhist/flint.lnt +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) 2017-2018 Varnish Software AS -// SPDX-License-Identifier: BSD-2-Clause -// See LICENSE file for full text of license - --efile(451, "varnishhist_profiles.h") --efile(451, "varnishhist_options.h") --sem(profile_error, r_no) diff --git a/bin/varnishhist/flint.sh b/bin/varnishhist/flint.sh deleted file mode 100644 index 69dde629bdc..00000000000 --- a/bin/varnishhist/flint.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2017-2021 Varnish Software AS -# SPDX-License-Identifier: BSD-2-Clause -# See LICENSE file for full text of license - -FLOPS=' - *.c - ../../lib/libvarnishapi/flint.lnt - ../../lib/libvarnishapi/*.c -' ../../tools/flint_skel.sh $* diff --git a/bin/varnishhist/varnishhist.c b/bin/varnishhist/varnishhist.c deleted file mode 100644 index 4d1f1eb901b..00000000000 --- a/bin/varnishhist/varnishhist.c +++ /dev/null @@ -1,632 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2015 Varnish Software AS - * All rights reserved. - * - * Author: Poul-Henning Kamp - * Author: Dag-Erling Smørgrav - * Author: Guillaume Quintard - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Log tailer for Varnish - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include - -#define VOPT_DEFINITION -#define VOPT_INC "varnishhist_options.h" - -#include "vdef.h" -#include "vcurses.h" -#include "vapi/vsl.h" -#include "vapi/vsm.h" -#include "vapi/voptget.h" -#include "vapi/vsig.h" -#include "vas.h" -#include "vut.h" -#include "vtim.h" - -#define HIST_N 2000 /* how far back we remember */ -#define HIST_RES 100 /* bucket resolution */ - -static struct VUT *vut; - -static int hist_low; -static int hist_high; -static int hist_range; -static unsigned hist_buckets; - -static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; - -static int end_of_file = 0; -static unsigned ms_delay = 1000; -static unsigned rr_hist[HIST_N]; -static unsigned nhist; -static unsigned next_hist; -static unsigned *bucket_miss; -static unsigned *bucket_hit; -static char *format; -static int match_tag; -static double timebend = 0, t0; -static double vsl_t0 = 0, vsl_to, vsl_ts = 0; -static pthread_cond_t timebend_cv; -static double log_ten; -static char *ident; - -static const unsigned scales[] = { - 1, - 2, - 3, - 4, - 5, - 10, - 15, - 20, - 25, - 50, - 100, - 250, - 500, - 1000, - 2500, - 5000, - 10000, - 25000, - 50000, - 100000, - UINT_MAX -}; - -struct profile { - const char *name; - char VSL_arg; - enum VSL_tag_e tag; - const char *prefix; - int field; - int hist_low; - int hist_high; -}; - -#define HIS_PROF(name,vsl_arg,tag,prefix,field,hist_low,high_high,doc) \ - {name,vsl_arg,tag,prefix,field,hist_low,high_high}, -#define HIS_NO_PREFIX NULL -#define HIS_CLIENT 'c' -#define HIS_BACKEND 'b' -static const struct profile profiles[] = { -#include "varnishhist_profiles.h" - { NULL } -}; -#undef HIS_NO_PREFIX -#undef HIS_BACKEND -#undef HIS_CLIENT -#undef HIS_PROF - -static const struct profile *active_profile; - -static void -update(void) -{ - char t[VTIM_FORMAT_SIZE]; - const unsigned w = COLS / hist_range; - const unsigned n = w * hist_range; - unsigned bm[n], bh[n]; - unsigned max; - unsigned scale; - int i, j; - unsigned k, l; - - /* Draw horizontal axis */ - for (k = 0; k < n; ++k) - (void)mvaddch(LINES - 2, k, '-'); - for (i = 0, j = hist_low; i < hist_range; ++i, ++j) { - (void)mvaddch(LINES - 2, w * i, '+'); - IC(mvprintw(LINES - 1, w * i, "|1e%d", j)); - } - - if (end_of_file) - IC(mvprintw(0, 0, "%*s", COLS - 1, "EOF")); - else - IC(mvprintw(0, 0, "%*s", COLS - 1, ident)); - - /* count our flock */ - memset(bm, 0, sizeof bm); - memset(bh, 0, sizeof bh); - for (k = 0, max = 1; k < hist_buckets; ++k) { - l = k * n / hist_buckets; - assert(l < n); - bm[l] += bucket_miss[k]; - bh[l] += bucket_hit[k]; - max = vmax(max, bm[l] + bh[l]); - } - - /* scale,time */ - assert(LINES - 3 >= 0); - for (i = 0; max / scales[i] > (unsigned)(LINES - 3); ++i) - /* nothing */ ; - scale = scales[i]; - - if (vsl_t0 > 0) { - VTIM_format(vsl_ts, t); - - IC(mvprintw(0, 0, "1:%u, n = %u, d = %g @ %s x %g", - scale, nhist, 1e-3 * ms_delay, t, timebend)); - } else { - IC(mvprintw(0, 0, "1:%u, n = %u, d = %g", - scale, nhist, 1e-3 * ms_delay)); - } - - for (j = 5; j < LINES - 2; j += 5) - IC(mvprintw((LINES - 2) - j, 0, "%u_", j * scale)); - - /* show them */ - for (k = 0; k < n; ++k) { - for (l = 0; l < bm[k] / scale; ++l) - (void)mvaddch((LINES - 3) - l, k, '#'); - for (; l < (bm[k] + bh[k]) / scale; ++l) - (void)mvaddch((LINES - 3) - l, k, '|'); - } -} - -inline static void -upd_vsl_ts(const char *p) -{ - - if (timebend == 0) - return; - - p = strchr(p, ' '); - - if (p == NULL) - return; - - vsl_ts = vmax_t(double, vsl_ts, strtod(p + 1, NULL)); -} - -static void -delorean(void) -{ - int i; - double t = VTIM_mono(); - - if (vsl_t0 == 0) - vsl_to = vsl_t0 = vsl_ts; - - assert(t > t0); - vsl_to = vsl_t0 + (t - t0) * timebend; - - if (vsl_ts > vsl_to) { - double when = VTIM_real() + vsl_ts - vsl_to; - struct timespec ts = VTIM_timespec(when); - i = pthread_cond_timedwait(&timebend_cv, &mtx, &ts); - assert(i == 0 || i == ETIMEDOUT); - } -} - -static int v_matchproto_ (VSLQ_dispatch_f) -accumulate(struct VSL_data *vsl, struct VSL_transaction * const pt[], - void *priv) -{ - int i, tag, skip, match, hit; - unsigned u; - double value = 0; - struct VSL_transaction *tr; - const char *tsp; - enum vsl_status stat; - - (void)vsl; - (void)priv; - - for (tr = pt[0]; tr != NULL; tr = *++pt) { - if (VSIG_int || VSIG_term || VSIG_hup) - return (-1); - - if (tr->reason == VSL_r_esi) { - /* Skip ESI requests */ - continue; - } - - hit = 0; - skip = 0; - match = 0; - tsp = NULL; - while (skip == 0) { - stat = VSL_Next(tr->c); - if (stat == vsl_e_overrun) { - /* need to skip forward */ - PTOK(pthread_mutex_lock(&mtx)); - vsl_to = vsl_t0 = vsl_ts = 0; - t0 = VTIM_mono(); - PTOK(pthread_mutex_unlock(&mtx)); - break; - } - if (stat != vsl_more) - break; - - /* get the value we want and register if it's a hit */ - tag = VSL_TAG(tr->c->rec.ptr); - - if (VSL_tagflags[tag]) - continue; - - switch (tag) { - case SLT_Hit: - hit = 1; - break; - case SLT_VCL_return: - if (!strcasecmp(VSL_CDATA(tr->c->rec.ptr), - "restart") || - !strcasecmp(VSL_CDATA(tr->c->rec.ptr), - "retry")) - skip = 1; - break; - case SLT_Timestamp: - tsp = VSL_CDATA(tr->c->rec.ptr); - /* FALLTHROUGH */ - default: - if (tag != match_tag) - break; - - if (active_profile->prefix && - strncmp(VSL_CDATA(tr->c->rec.ptr), - active_profile->prefix, - strlen(active_profile->prefix)) != 0) - break; - - i = sscanf(VSL_CDATA(tr->c->rec.ptr), - format, &value); - if (i != 1) - break; - match = 1; - break; - } - } - - if (skip || !match || value <= 0) - continue; - - /* select bucket */ - i = vlimit_t(int, lround(HIST_RES * log(value) / log_ten), - hist_low * HIST_RES, hist_high * HIST_RES - 1) - - hist_low * HIST_RES; - assert(i >= 0); - assert((unsigned)i < hist_buckets); - - PTOK(pthread_mutex_lock(&mtx)); - - /* - * only parse the last tsp seen in this transaction - - * it should be the latest. - */ - if (tsp) - upd_vsl_ts(tsp); - - /* phase out old data */ - if (nhist == HIST_N) { - u = rr_hist[next_hist]; - if (u >= hist_buckets) { - u -= hist_buckets; - assert(u < hist_buckets); - assert(bucket_hit[u] > 0); - bucket_hit[u]--; - } else { - assert(bucket_miss[u] > 0); - bucket_miss[u]--; - } - } else { - ++nhist; - } - - /* phase in new data */ - if (hit) { - bucket_hit[i]++; - rr_hist[next_hist] = i + hist_buckets; - } else { - bucket_miss[i]++; - rr_hist[next_hist] = i; - } - if (++next_hist == HIST_N) { - next_hist = 0; - } - if (vsl_ts >= vsl_to) - delorean(); - PTOK(pthread_mutex_unlock(&mtx)); - } - return (0); -} - -static void * v_matchproto_(pthread_t) -do_curses(void *arg) -{ - int ch; - (void)arg; - - (void)initscr(); - AC(raw()); - AC(noecho()); - AC(nonl()); - AC(intrflush(stdscr, FALSE)); - IC(curs_set(0)); - AC(erase()); - while (!VSIG_int && !VSIG_term && !VSIG_hup) { - - AC(erase()); - PTOK(pthread_mutex_lock(&mtx)); - update(); - PTOK(pthread_mutex_unlock(&mtx)); - AC(refresh()); - - assert(ms_delay > 0); - timeout(ms_delay); - switch ((ch = getch())) { - case ERR: - break; -#ifdef KEY_RESIZE - case KEY_RESIZE: - AC(erase()); - break; -#endif - case '\014': /* Ctrl-L */ - case '\024': /* Ctrl-T */ - AC(redrawwin(stdscr)); - AC(refresh()); - break; - case '\032': /* Ctrl-Z */ - AC(endwin()); - AZ(raise(SIGTSTP)); - break; - case '\003': /* Ctrl-C */ - case '\021': /* Ctrl-Q */ - case 'Q': - case 'q': - AZ(raise(SIGINT)); - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - ms_delay = 1000U << (ch - '0'); - break; - case '+': - ms_delay = vmax(ms_delay >> 1, 1U); - break; - case '-': - ms_delay *= 2; - break; - case '>': - case '<': - /* see below */ - break; - default: - AC(beep()); - break; - } - - if (ch == '<' || ch == '>') { - PTOK(pthread_mutex_lock(&mtx)); - vsl_to = vsl_t0 = vsl_ts; - t0 = VTIM_mono(); - if (timebend == 0) - timebend = 1; - else if (ch == '<') - timebend /= 2; - else - timebend *= 2; - PTOK(pthread_cond_broadcast(&timebend_cv)); - PTOK(pthread_mutex_unlock(&mtx)); - } - } - AC(endwin()); - return (NULL); -} - -/*--------------------------------------------------------------------*/ - -static void v_noreturn_ -profile_error(const char *s) -{ - fprintf(stderr, "-P: '%s' is not a valid" - " profile name or definition\n", s); - exit(1); -} - -int -main(int argc, char **argv) -{ - int i; - char *colon; - const char *ptag, *profile = "responsetime"; - pthread_t thr; - int fnum; - struct profile cli_p = {0}; - - vut = VUT_InitProg(argc, argv, &vopt_spec); - AN(vut); - PTOK(pthread_cond_init(&timebend_cv, NULL)); - - while ((i = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) { - switch (i) { - case 'h': - /* Usage help */ - VUT_Usage(vut, &vopt_spec, 0); - case 'p': - ms_delay = lround(1e3 * strtod(optarg, NULL)); - if (ms_delay == 0) - VUT_Error(vut, 1, "-p: invalid '%s'", optarg); - break; - case 'P': - colon = strchr(optarg, ':'); - /* no colon, take the profile as a name */ - if (colon == NULL) { - profile = optarg; - break; - } - /* else check if valid definition */ - if (colon == optarg + 1 && (*optarg == 'b' || - *optarg == 'c' || *optarg == 'E')) { - cli_p.VSL_arg = *optarg; - ptag = colon + 1; - colon = strchr(colon + 1, ':'); - if (colon == NULL) - profile_error(optarg); - } else { - ptag = optarg; - cli_p.VSL_arg = 'c'; - } - - assert(colon); - - match_tag = VSL_Name2Tag(ptag, colon - ptag); - if (match_tag < 0) - VUT_Error(vut, 1, - "-P: '%s' is not a valid tag name", - optarg); - - if (VSL_tagflags[match_tag]) - VUT_Error(vut, 1, - "-P: '%s' is an unsafe or binary record", - optarg); - - cli_p.prefix = colon + 1; - - colon = strchr(colon + 1, ':'); - if (colon == NULL) - profile_error(optarg); - - *colon = '\0'; - if (*cli_p.prefix == '\0') - cli_p.prefix = NULL; - - if (sscanf(colon + 1, "%d", &cli_p.field) != 1) - profile_error(optarg); - - cli_p.name = "custom"; - cli_p.tag = (enum VSL_tag_e)match_tag; - cli_p.hist_low = -6; - cli_p.hist_high = 3; - profile = NULL; - active_profile = &cli_p; - - colon = strchr(colon + 1, ':'); - if (colon == NULL) - break; - - if (sscanf(colon + 1, "%d:%d", &cli_p.hist_low, - &cli_p.hist_high) != 2) - profile_error(optarg); - - break; - case 'B': - timebend = strtod(optarg, NULL); - if (timebend == 0) - VUT_Error(vut, 1, - "-B: being able to bend time does not" - " mean we can stop it" - " (invalid factor '%s')", optarg); - if (timebend < 0) - VUT_Error(vut, 1, - "-B: being able to bend time does not" - " mean we can make it go backwards" - " (invalid factor '%s')", optarg); - break; - default: - if (!VUT_Arg(vut, i, optarg)) - VUT_Usage(vut, &vopt_spec, 1); - } - } - - if (optind != argc) - VUT_Usage(vut, &vopt_spec, 1); - - /* Check for valid grouping mode */ - assert(vut->g_arg < VSL_g__MAX); - if (vut->g_arg != VSL_g_vxid && vut->g_arg != VSL_g_request) - VUT_Error(vut, 1, "Invalid grouping mode: %s" - " (only vxid and request are supported)", - VSLQ_grouping[vut->g_arg]); - - if (profile) { - for (active_profile = profiles; active_profile->name; - active_profile++) { - if (strcmp(active_profile->name, profile) == 0) - break; - } - } - AN(active_profile); - if (!active_profile->name) - VUT_Error(vut, 1, "-P: No such profile '%s'", profile); - - assert(active_profile->VSL_arg == 'b' || - active_profile->VSL_arg == 'c' || - active_profile->VSL_arg == 'E'); - assert(VUT_Arg(vut, active_profile->VSL_arg, NULL)); - match_tag = active_profile->tag; - fnum = active_profile->field; - hist_low = active_profile->hist_low; - hist_high = active_profile->hist_high; - - hist_range = hist_high - hist_low; - hist_buckets = hist_range * HIST_RES; - bucket_hit = calloc(hist_buckets, sizeof *bucket_hit); - bucket_miss = calloc(hist_buckets, sizeof *bucket_miss); - - if (timebend > 0) - t0 = VTIM_mono(); - - format = malloc(4L * fnum); - AN(format); - for (i = 0; i < fnum - 1; i++) - strcpy(format + 4 * i, "%*s "); - strcpy(format + 4 * (fnum - 1), "%lf"); - - log_ten = log(10.0); - - VUT_Setup(vut); - if (vut->vsm) - ident = VSM_Dup(vut->vsm, "Arg", "-i"); - else - ident = strdup(""); - PTOK(pthread_create(&thr, NULL, do_curses, NULL)); - vut->dispatch_f = accumulate; - vut->dispatch_priv = NULL; - (void)VUT_Main(vut); - end_of_file = 1; - PTOK(pthread_join(thr, NULL)); - VUT_Fini(&vut); - exit(0); -} diff --git a/bin/varnishhist/varnishhist_options.h b/bin/varnishhist/varnishhist_options.h deleted file mode 100644 index 7c22df208c5..00000000000 --- a/bin/varnishhist/varnishhist_options.h +++ /dev/null @@ -1,101 +0,0 @@ -/*- - * Copyright (c) 2014-2015 Varnish Software AS - * All rights reserved. - * - * Author: Martin Blix Grydeland - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Option definitions for varnishhist - */ - -#include "vapi/vapi_options.h" -#include "vut_options.h" - -#define HIS_OPT_g \ - VOPT("g:", "[-g ]", \ - "Grouping mode (default: vxid)", \ - "The grouping of the log records. The default is to group" \ - " by vxid." \ - ) - -#define HIS_OPT_p \ - VOPT("p:", "[-p ]", "Refresh period", \ - "Specified the number of seconds between screen refreshes." \ - " Default is 1 second, and can be changed at runtime by" \ - " pressing the [0-9] keys (powers of 2 in seconds" \ - " or + and - (double/halve the speed)." \ - ) - -#define HIS_OPT_P \ - VOPT("P:", "[-P <[cbE:]tag:[prefix]:field_num[:min:max]>]", \ - "Custom profile definition", \ - "Graph the given custom definition defined as: an optional" \ - " (c)lient, (b)ackend or (E)SI filter (defaults to client),"\ - " the tag we'll look for, a prefix to look for (can be" \ - " empty, but must be terminated by a colon) and the field" \ - " number of the value we are interested in. min and max are"\ - " the boundaries of the graph in powers of ten and default" \ - " to -6 and 3." \ - ) - -#define HIS_OPT_B \ - VOPT("B:", "[-B ]", \ - "Time bending", \ - "Factor to bend time by. Particularly useful when" \ - " [-r]eading from a vsl file. =1 process in near real" \ - " time, <1 slow-motion, >1 time-lapse (useless unless" \ - " reading from a file). At runtime, < halves and" \ - " > doubles." \ - ) - -HIS_OPT_B -VSL_OPT_C -VUT_OPT_d -HIS_OPT_g -VUT_OPT_h -VSL_OPT_L -VUT_OPT_n -HIS_OPT_p -#define HIS_CLIENT "client" -#define HIS_BACKEND "backend" -#define HIS_NO_PREFIX "" -#define HIS_PROF(name,cb,tg,prefix,fld,hist_low,high_high,doc) \ - VOPT("P:", "[-P " name "]", \ - "Predefined " cb " profile", \ - "Predefined " cb " profile: " doc \ - " (field " #fld " of " #tg " " prefix " VSL tag)." \ - ) -#include "varnishhist_profiles.h" -#undef HIS_NO_PREFIX -#undef HIS_BACKEND -#undef HIS_CLIENT -#undef HIS_PROF -HIS_OPT_P -VUT_OPT_Q -VUT_OPT_q -VUT_OPT_r -VUT_OPT_t -VSL_OPT_T -VUT_GLOBAL_OPT_V diff --git a/bin/varnishhist/varnishhist_profiles.h b/bin/varnishhist/varnishhist_profiles.h deleted file mode 100644 index 6619f06d1a8..00000000000 --- a/bin/varnishhist/varnishhist_profiles.h +++ /dev/null @@ -1,109 +0,0 @@ -/*- - * Copyright 2016 UPLEX - Nils Goroll Systemoptimierung - * All rights reserved. - * - * Author: Nils Goroll - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Profile definitions for varnishhist - */ - -// client -HIS_PROF( - "responsetime", // name - HIS_CLIENT, // HIS_CLIENT | HIS_BACKEND - SLT_Timestamp, // tag - "Process:", // prefix - 3, // field - -6, // hist_low - 3, // hist_high - "graph the total time from start of request processing" - " (first byte received) until ready to deliver the" - " client response" - ) -HIS_PROF( - "reqbodytime", // name - HIS_CLIENT, // HIS_CLIENT | HIS_BACKEND - SLT_Timestamp, // tag - "ReqBody:", // prefix - 3, // field - -6, // hist_low - 3, // hist_high - "graph the time for reading the request body" - ) -HIS_PROF( - "size", // name - HIS_CLIENT, // HIS_CLIENT | HIS_BACKEND - SLT_ReqAcct, // tag - HIS_NO_PREFIX, // prefix - 5, // field - 1, // hist_low - 8, // hist_high - "graph the size of responses" - ) -// backend -HIS_PROF( - "Bereqtime", // name - HIS_BACKEND, // HIS_CLIENT | HIS_BACKEND - SLT_Timestamp, // tag - "Bereq:", // prefix - 3, // field - -6, // hist_low - 3, // hist_high - "graph the time from beginning of backend processing" - " until a backend request is sent completely" - ) -HIS_PROF( - "Beresptime", // name - HIS_BACKEND, // HIS_CLIENT | HIS_BACKEND - SLT_Timestamp, // tag - "Beresp:", // prefix - 3, // field - -6, // hist_low - 3, // hist_high - "graph the time from beginning of backend processing" - " until the response headers are being received completely" - ) -HIS_PROF( - "BerespBodytime", // name - HIS_BACKEND, // HIS_CLIENT | HIS_BACKEND - SLT_Timestamp, // tag - "BerespBody:", // prefix - 3, // field - -6, // hist_low - 3, // hist_high - "graph the time from beginning of backend processing" - " until the response body has been received" - ) -HIS_PROF( - "Besize", // name - HIS_BACKEND, // HIS_CLIENT | HIS_BACKEND - SLT_BereqAcct, // tag - HIS_NO_PREFIX, // prefix - 5, // field - 1, // hist_low - 8, // hist_high - "graph the backend response body size" - ) diff --git a/bin/varnishlog/Makefile.am b/bin/varnishlog/Makefile.am deleted file mode 100644 index 41e8cfe4e22..00000000000 --- a/bin/varnishlog/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -# - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_builddir)/include - -bin_PROGRAMS = varnishlog - -varnishlog_SOURCES = \ - varnishlog.c \ - varnishlog_options.h - -varnishlog_LDADD = \ - $(top_builddir)/lib/libvarnishapi/libvarnishapi.la \ - ${RT_LIBS} ${LIBM} ${PTHREAD_LIBS} diff --git a/bin/varnishlog/flint.lnt b/bin/varnishlog/flint.lnt deleted file mode 100644 index b922a299a02..00000000000 --- a/bin/varnishlog/flint.lnt +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2010-2018 Varnish Software AS -// SPDX-License-Identifier: BSD-2-Clause -// See LICENSE file for full text of license - --e712 // 14 Info 712 Loss of precision (___) (___ to ___) --e747 // 16 Info 747 Significant prototype coercion (___) ___ to ___ - --e763 // Redundant declaration for symbol '...' previously declared - --efile(451, "varnishlog_options.h") - --e732 // Loss of sign (arg. no. 2) (int to unsigned --e713 // Loss of precision (assignment) (unsigned long long to long long) - --e788 // enum constant '___' not used within defaulted switch --e641 // Converting enum '___' to '___' diff --git a/bin/varnishlog/flint.sh b/bin/varnishlog/flint.sh deleted file mode 100644 index 6d2df55a315..00000000000 --- a/bin/varnishlog/flint.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2010-2021 Varnish Software AS -# SPDX-License-Identifier: BSD-2-Clause -# See LICENSE file for full text of license - -FLOPS=' - -DVARNISH_STATE_DIR=\"foo\" - *.c - ../../lib/libvarnishapi/flint.lnt - ../../lib/libvarnishapi/*.c -' ../../tools/flint_skel.sh $* diff --git a/bin/varnishlog/varnishlog.c b/bin/varnishlog/varnishlog.c deleted file mode 100644 index 2b3de138313..00000000000 --- a/bin/varnishlog/varnishlog.c +++ /dev/null @@ -1,187 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2015 Varnish Software AS - * All rights reserved. - * - * Author: Poul-Henning Kamp - * Author: Martin Blix Grydeland - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Log tailer for Varnish - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include - -#define VOPT_DEFINITION -#define VOPT_INC "varnishlog_options.h" - -#include "vdef.h" - -#include "vapi/vsm.h" -#include "vapi/vsl.h" -#include "vapi/voptget.h" -#include "vas.h" -#include "vut.h" -#include "miniobj.h" - -static struct VUT *vut; - -static struct log { - /* Options */ - int a_opt; - int A_opt; - int u_opt; - char *w_arg; - - /* State */ - FILE *fo; -} LOG; - -static void -openout(int append) -{ - - AN(LOG.w_arg); - if (LOG.A_opt) { - if (!strcmp(LOG.w_arg, "-")) - LOG.fo = stdout; - else - LOG.fo = fopen(LOG.w_arg, append ? "a" : "w"); - } else - LOG.fo = VSL_WriteOpen(vut->vsl, LOG.w_arg, append, LOG.u_opt); - if (LOG.fo == NULL) - VUT_Error(vut, 2, "Cannot open output file (%s)", - LOG.A_opt ? strerror(errno) : VSL_Error(vut->vsl)); - vut->dispatch_priv = LOG.fo; -} - -static int v_matchproto_(VUT_cb_f) -rotateout(struct VUT *v) -{ - - assert(v == vut); - AN(LOG.w_arg); - AN(LOG.fo); - (void)fclose(LOG.fo); - openout(1); - AN(LOG.fo); - return (0); -} - -static int v_matchproto_(VUT_cb_f) -flushout(struct VUT *v) -{ - - assert(v == vut); - AN(LOG.fo); - if (fflush(LOG.fo)) - return (-5); - return (0); -} - -int -main(int argc, char * const *argv) -{ - int opt; - - vut = VUT_InitProg(argc, argv, &vopt_spec); - AN(vut); - memset(&LOG, 0, sizeof LOG); - - while ((opt = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) { - switch (opt) { - case 'a': - /* Append to file */ - LOG.a_opt = 1; - break; - case 'A': - /* Text output */ - LOG.A_opt = 1; - break; - case 'h': - /* Usage help */ - VUT_Usage(vut, &vopt_spec, 0); - case 'u': - /* Unbuffered output */ - LOG.u_opt = 1; - break; - case 'w': - /* Write to file */ - REPLACE(LOG.w_arg, optarg); - break; - default: - if (!VUT_Arg(vut, opt, optarg)) - VUT_Usage(vut, &vopt_spec, 1); - } - } - - if (optind != argc) - VUT_Usage(vut, &vopt_spec, 1); - - if (vut->D_opt && !LOG.w_arg) - VUT_Error(vut, 1, "Missing -w option"); - - if (vut->D_opt && !strcmp(LOG.w_arg, "-")) - VUT_Error(vut, 1, "Daemon cannot write to stdout"); - - /* Setup output */ - if (LOG.A_opt || !LOG.w_arg) { - vut->dispatch_f = VSL_PrintTransactions; - } else { - vut->dispatch_f = VSL_WriteTransactions; - /* - * inefficient but not crossing API layers - * first x argument avoids initial suppression of all tags - */ - AN(VUT_Arg(vut, 'x', "Link")); - AN(VUT_Arg(vut, 'i', "Link")); - AN(VUT_Arg(vut, 'i', "Begin")); - AN(VUT_Arg(vut, 'i', "End")); - } - if (LOG.w_arg) { - openout(LOG.a_opt); - AN(LOG.fo); - if (vut->D_opt) - vut->sighup_f = rotateout; - } else - LOG.fo = stdout; - vut->idle_f = flushout; - - VUT_Setup(vut); - (void)VUT_Main(vut); - VUT_Fini(&vut); - - (void)flushout(NULL); - - exit(0); -} diff --git a/bin/varnishlog/varnishlog_options.h b/bin/varnishlog/varnishlog_options.h deleted file mode 100644 index dabaffff003..00000000000 --- a/bin/varnishlog/varnishlog_options.h +++ /dev/null @@ -1,95 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2015 Varnish Software AS - * All rights reserved. - * - * Author: Martin Blix Grydeland - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include "vapi/vapi_options.h" -#include "vut_options.h" - -#define LOG_NOTICE_w " This option has no effect without the -w option." - -#define LOG_OPT_a \ - VOPT("a", "[-a]", "Append to file", \ - "When writing output to a file with the -w option, append" \ - " to it rather than overwrite it." LOG_NOTICE_w \ - ) - -#define LOG_OPT_A \ - VOPT("A", "[-A]", "Text output", \ - "When writing output to a file with the -w option, output" \ - " data in ascii format." LOG_NOTICE_w \ - ) - -#define LOG_OPT_u \ - VOPT("u", "[-u]", "Unbuffered output", \ - "When writing output to a file with the -w option, output" \ - " data is not buffered." LOG_NOTICE_w \ - ) - -#define LOG_OPT_w \ - VOPT("w:", "[-w ]", "Output filename", \ - "Redirect output to file. The file will be overwritten" \ - " unless the -a option was specified. If the application" \ - " receives a SIGHUP in daemon mode the file will be " \ - " reopened allowing the old one to be rotated away. The" \ - " file can then be read by varnishlog and other tools with" \ - " the -r option, unless the -A option was specified. This" \ - " option is required when running in daemon mode. If the" \ - " filename is -, varnishlog writes to the standard output" \ - " and cannot work as a daemon." \ - ) - -LOG_OPT_a -LOG_OPT_A -VSL_OPT_b -VSL_OPT_c -VSL_OPT_C -VUT_OPT_d -VUT_GLOBAL_OPT_D -VSL_OPT_E -VUT_OPT_g -VUT_OPT_h -VSL_OPT_i -VSL_OPT_I -VUT_OPT_k -VSL_OPT_L -VUT_OPT_n -VUT_GLOBAL_OPT_P -VUT_OPT_Q -VUT_OPT_q -VUT_OPT_r -VSL_OPT_R -VUT_OPT_t -VSL_OPT_T -LOG_OPT_u -VSL_OPT_v -VUT_GLOBAL_OPT_V -LOG_OPT_w -VSL_OPT_x -VSL_OPT_X diff --git a/bin/varnishncsa/Makefile.am b/bin/varnishncsa/Makefile.am deleted file mode 100644 index 519f1334253..00000000000 --- a/bin/varnishncsa/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -# - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_builddir)/include - -bin_PROGRAMS = varnishncsa - -varnishncsa_SOURCES = \ - varnishncsa.c \ - varnishncsa_options.h - -varnishncsa_LDADD = \ - $(top_builddir)/lib/libvarnishapi/libvarnishapi.la \ - ${RT_LIBS} ${LIBM} diff --git a/bin/varnishncsa/flint.lnt b/bin/varnishncsa/flint.lnt deleted file mode 100644 index f52151546cd..00000000000 --- a/bin/varnishncsa/flint.lnt +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) 2006-2018 Varnish Software AS -// SPDX-License-Identifier: BSD-2-Clause -// See LICENSE file for full text of license - - --efile(451, "varnishncsa_options.h") diff --git a/bin/varnishncsa/flint.sh b/bin/varnishncsa/flint.sh deleted file mode 100644 index 83afec16450..00000000000 --- a/bin/varnishncsa/flint.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2006-2021 Varnish Software AS -# SPDX-License-Identifier: BSD-2-Clause -# See LICENSE file for full text of license - -FLOPS=' - *.c - ../../lib/libvarnishapi/flint.lnt - ../../lib/libvarnishapi/*.c -' ../../tools/flint_skel.sh $* diff --git a/bin/varnishncsa/varnishncsa.c b/bin/varnishncsa/varnishncsa.c deleted file mode 100644 index 68c96f94783..00000000000 --- a/bin/varnishncsa/varnishncsa.c +++ /dev/null @@ -1,1359 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2016 Varnish Software AS - * All rights reserved. - * - * Author: Anders Berg - * Author: Poul-Henning Kamp - * Author: Tollef Fog Heen - * Author: Martin Blix Grydeland - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Obtain log data from the shared memory log, order it by session ID, and - * display it in Apache / NCSA combined log format. - * - * See doc/sphinx/reference/varnishncsa.rst for the supported format - * specifiers. - * - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define VOPT_DEFINITION -#define VOPT_INC "varnishncsa_options.h" - -#include "vdef.h" - -#include "vapi/vsl.h" -#include "vapi/voptget.h" -#include "vas.h" -#include "venc.h" -#include "vsb.h" -#include "vut.h" -#include "vqueue.h" -#include "miniobj.h" - -#define TIME_FMT "[%d/%b/%Y:%T %z]" -#define FORMAT "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" - -static struct VUT *vut; - -struct format; - -enum e_frag { - F_H, /* %H Proto */ - F_U, /* %U URL path */ - F_q, /* %q Query string */ - F_b, /* %b Body bytes sent */ - F_h, /* %h Host name / IP Address */ - F_m, /* %m Method */ - F_s, /* %s Status */ - F_I, /* %I Bytes received */ - F_O, /* %O Bytes sent */ - F_tstart, /* Time start */ - F_tend, /* Time end */ - F_ttfb, /* %{Varnish:time_firstbyte}x */ - F_host, /* Host header */ - F_auth, /* Authorization header */ - F__MAX, -}; - -enum format_policy { - FMTPOL_INTERNAL = 1, - FMTPOL_REQ, - FMTPOL_RESP, - FMTPOL_FIRST, - FMTPOL_LAST -}; - -struct fragment { - uint64_t gen; - const char *b, *e; -}; - -typedef int format_f(const struct format *format); - -struct format { - unsigned magic; -#define FORMAT_MAGIC 0xC3119CDA - - char time_type; - VTAILQ_ENTRY(format) list; - format_f *func; - struct fragment *frag; - char *string; - const char *const *strptr; - char *time_fmt; - int64_t *int64; -}; - -struct watch { - unsigned magic; -#define WATCH_MAGIC 0xA7D4005C - - VTAILQ_ENTRY(watch) list; - char *key; - int keylen; - struct fragment frag; - enum format_policy match; -}; -VTAILQ_HEAD(watch_head, watch); - -struct vsl_watch { - unsigned magic; -#define VSL_WATCH_MAGIC 0xE3E27D23 - - VTAILQ_ENTRY(vsl_watch) list; - enum VSL_tag_e tag; - int idx; - char *prefix; - int prefixlen; - struct fragment frag; -}; -VTAILQ_HEAD(vsl_watch_head, vsl_watch); - -static struct ctx { - /* Options */ - int a_opt; - char *w_arg; - - FILE *fo; - struct vsb *vsb; - uint64_t gen; - VTAILQ_HEAD(,format) format; - int quote_how; - char *missing_string; - char *missing_int; - - /* State */ - struct watch_head watch_vcl_log; - struct watch_head watch_reqhdr; /* also bereqhdr */ - struct watch_head watch_resphdr; /* also beresphdr */ - struct vsl_watch_head watch_vsl; - struct fragment frag[F__MAX]; - const char *hitmiss; - const char *handling; - const char *side; - int64_t vxid; - int recv_compl; -} CTX; - -static void parse_format(const char *format); - -static unsigned -frag_needed(const struct fragment *frag, enum format_policy fp) -{ - unsigned is_first, want_first, want_frag; - - is_first = CTX.gen != frag->gen; - - switch (fp) { - case FMTPOL_LAST: - want_frag = 1; - want_first = 0; - break; - case FMTPOL_FIRST: - case FMTPOL_INTERNAL: - want_first = 1; - want_frag = 1; - break; - case FMTPOL_REQ: - want_first = *CTX.side == 'c'; - want_frag = !CTX.recv_compl; - break; - case FMTPOL_RESP: - want_first = *CTX.side == 'b'; - want_frag = (*CTX.side == 'c') || !CTX.recv_compl; - break; - default: - WRONG("Invalid format policy"); - } - - if (!want_frag) - return (0); - if (want_first && !is_first) - return (0); - return (1); -} - -static void -openout(int append) -{ - - AN(CTX.w_arg); - if (!strcmp(CTX.w_arg, "-")) - CTX.fo = stdout; - else - CTX.fo = fopen(CTX.w_arg, append ? "a" : "w"); - if (CTX.fo == NULL) - VUT_Error(vut, 1, "Can't open output file (%s)", - strerror(errno)); -} - -static int v_matchproto_(VUT_cb_f) -rotateout(struct VUT *v) -{ - - assert(v == vut); - AN(CTX.w_arg); - AN(CTX.fo); - (void)fclose(CTX.fo); - openout(1); - AN(CTX.fo); - return (0); -} - -static int v_matchproto_(VUT_cb_f) -flushout(struct VUT *v) -{ - - assert(v == vut); - AN(CTX.fo); - if (fflush(CTX.fo)) - return (-5); - return (0); -} - -static inline int -vsb_fcat(struct vsb *vsb, const struct fragment *f, const char *dflt) -{ - if (f->gen == CTX.gen) { - assert(f->b <= f->e); - VSB_quote(vsb, f->b, f->e - f->b, CTX.quote_how); - } else if (dflt) - VSB_quote(vsb, dflt, -1, CTX.quote_how); - else - return (-1); - return (0); -} - -static int v_matchproto_(format_f) -format_string(const struct format *format) -{ - - CHECK_OBJ_NOTNULL(format, FORMAT_MAGIC); - AN(format->string); - AZ(VSB_cat(CTX.vsb, format->string)); - return (1); -} - -static int v_matchproto_(format_f) -format_strptr(const struct format *format) -{ - - CHECK_OBJ_NOTNULL(format, FORMAT_MAGIC); - AN(format->strptr); - AN(*format->strptr); - AZ(VSB_cat(CTX.vsb, *format->strptr)); - return (1); -} - -static int v_matchproto_(format_f) -format_int64(const struct format *format) -{ - - CHECK_OBJ_NOTNULL(format, FORMAT_MAGIC); - VSB_printf(CTX.vsb, "%jd", (intmax_t)*format->int64); - return (1); -} - -static int v_matchproto_(format_f) -format_fragment(const struct format *format) -{ - - CHECK_OBJ_NOTNULL(format, FORMAT_MAGIC); - AN(format->frag); - - if (format->frag->gen != CTX.gen) { - if (format->string == NULL) - return (-1); - VSB_quote(CTX.vsb, format->string, -1, CTX.quote_how); - return (0); - } - AZ(vsb_fcat(CTX.vsb, format->frag, NULL)); - return (1); -} - -static int v_matchproto_(format_f) -format_time(const struct format *format) -{ - double t_start, t_end, d; - char *p; - char buf[64]; - time_t t; - intmax_t l; - struct tm tm; - - CHECK_OBJ_NOTNULL(format, FORMAT_MAGIC); - if (CTX.frag[F_tstart].gen == CTX.gen) { - t_start = strtod(CTX.frag[F_tstart].b, &p); - if (p != CTX.frag[F_tstart].e) - t_start = NAN; - } else - t_start = NAN; - if (isnan(t_start)) { - /* Missing t_start is a no go */ - if (format->string == NULL) - return (-1); - AZ(VSB_cat(CTX.vsb, format->string)); - return (0); - } - - /* Missing t_end defaults to t_start */ - if (CTX.frag[F_tend].gen == CTX.gen) { - t_end = strtod(CTX.frag[F_tend].b, &p); - if (p != CTX.frag[F_tend].e) - t_end = t_start; - } else - t_end = t_start; - - AN(format->time_fmt); - - switch (format->time_type) { - case 't': - t = (intmax_t)floor(t_start); - (void)localtime_r(&t, &tm); - AN(strftime(buf, sizeof buf, format->time_fmt, &tm)); - AZ(VSB_cat(CTX.vsb, buf)); - return (1); - case '3': - l = (intmax_t)(modf(t_start, &d) * 1e3); - break; - case '6': - l = (intmax_t)(modf(t_start, &d) * 1e6); - break; - case 'S': - l = (intmax_t)t_start; - break; - case 'M': - l = (intmax_t)(t_start * 1e3); - break; - case 'U': - l = (intmax_t)(t_start * 1e6); - break; - case 's': - l = (intmax_t)(t_end - t_start); - break; - case 'm': - l = (intmax_t)((t_end - t_start) * 1e3); - break; - case 'u': - l = (intmax_t)((t_end - t_start) * 1e6); - break; - default: - WRONG("Time format specifier"); - } - -#ifdef __FreeBSD__ - assert(fmtcheck(format->time_fmt, "%jd") == format->time_fmt); -#endif - AZ(VSB_printf(CTX.vsb, format->time_fmt, l)); - - return (1); -} - -static int v_matchproto_(format_f) -format_requestline(const struct format *format) -{ - - (void)format; - AZ(vsb_fcat(CTX.vsb, &CTX.frag[F_m], "-")); - AZ(VSB_putc(CTX.vsb, ' ')); - if (CTX.frag[F_host].gen == CTX.gen) { - if (strncmp(CTX.frag[F_host].b, "http://", 7)) - AZ(VSB_cat(CTX.vsb, "http://")); - AZ(vsb_fcat(CTX.vsb, &CTX.frag[F_host], NULL)); - } else - AZ(VSB_cat(CTX.vsb, "http://localhost")); - AZ(vsb_fcat(CTX.vsb, &CTX.frag[F_U], "")); - AZ(vsb_fcat(CTX.vsb, &CTX.frag[F_q], "")); - AZ(VSB_putc(CTX.vsb, ' ')); - AZ(vsb_fcat(CTX.vsb, &CTX.frag[F_H], "HTTP/1.0")); - return (1); -} - -static int v_matchproto_(format_f) -format_auth(const struct format *format) -{ - struct vsb *vsb = VSB_new_auto(); - AN(vsb); - char *q; - - if (CTX.frag[F_auth].gen != CTX.gen || - VENC_Decode_Base64(vsb, CTX.frag[F_auth].b, CTX.frag[F_auth].e)) { - VSB_destroy(&vsb); - if (format->string == NULL) - return (-1); - VSB_quote(CTX.vsb, format->string, -1, CTX.quote_how); - return (0); - } - AZ(VSB_finish(vsb)); - q = strchr(VSB_data(vsb), ':'); - if (q != NULL) - *q = '\0'; - VSB_quote(CTX.vsb, VSB_data(vsb), -1, CTX.quote_how); - VSB_destroy(&vsb); - return (1); -} - -static int -print(void) -{ - const struct format *f; - int i, r = 1; - - VSB_clear(CTX.vsb); - VTAILQ_FOREACH(f, &CTX.format, list) { - CHECK_OBJ_NOTNULL(f, FORMAT_MAGIC); - i = (f->func)(f); - AZ(VSB_error(CTX.vsb)); - if (r > i) - r = i; - } - AZ(VSB_putc(CTX.vsb, '\n')); - AZ(VSB_finish(CTX.vsb)); - if (r >= 0) { - i = fwrite(VSB_data(CTX.vsb), 1, VSB_len(CTX.vsb), CTX.fo); - if (i != VSB_len(CTX.vsb)) - return (-5); - } - return (0); -} - -static void -addf_string(const char *str) -{ - struct format *f; - - AN(str); - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_string; - f->string = strdup(str); - AN(f->string); - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_strptr(const char *const *strptr) -{ - struct format *f; - - AN(strptr); - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_strptr; - f->strptr = strptr; - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_fragment(struct fragment *frag, const char *str) -{ - struct format *f; - - AN(frag); - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_fragment; - f->frag = frag; - if (str != NULL) { - f->string = strdup(str); - AN(f->string); - } - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_int64(int64_t *i) -{ - struct format *f; - - AN(i); - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_int64; - f->int64 = i; - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_time(char type, const char *fmt) -{ - struct format *f; - - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - AN(fmt); - f->func = format_time; - f->time_type = type; - f->time_fmt = strdup(fmt); - - if (f->time_type == 'T') { - if (!strcmp(fmt, "s")) - f->time_type = 's'; - else if (!strcmp(fmt, "ms")) - f->time_type = 'm'; - else if (!strcmp(fmt, "us")) - f->time_type = 'u'; - else - VUT_Error(vut, 1, "Unknown specifier: %%{%s}T", - fmt); - REPLACE(f->time_fmt, "%jd"); - } else if (f->time_type == 't') { - if (!strcmp(fmt, "sec")) { - f->time_type = 'S'; - REPLACE(f->time_fmt, "%jd"); - } else if (!strncmp(fmt, "msec", 4)) { - fmt += 4; - if (!strcmp(fmt, "_frac")) { - f->time_type = '3'; - REPLACE(f->time_fmt, "%03jd"); - } else if (*fmt == '\0') { - f->time_type = 'M'; - REPLACE(f->time_fmt, "%jd"); - } - } else if (!strncmp(fmt, "usec", 4)) { - fmt += 4; - if (!strcmp(fmt, "_frac")) { - f->time_type = '6'; - REPLACE(f->time_fmt, "%06jd"); - } else if (*fmt == '\0') { - f->time_type = 'U'; - REPLACE(f->time_fmt, "%jd"); - } - } - } - - AN(f->time_fmt); - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_requestline(void) -{ - struct format *f; - - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_requestline; - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_vcl_log(const char *key) -{ - struct watch *w; - struct format *f; - - AN(key); - ALLOC_OBJ(w, WATCH_MAGIC); - AN(w); - w->keylen = asprintf(&w->key, "%s:", key); - assert(w->keylen > 0); - VTAILQ_INSERT_TAIL(&CTX.watch_vcl_log, w, list); - - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_fragment; - f->frag = &w->frag; - f->string = strdup(""); - AN(f->string); - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_hdr(struct watch_head *head, char *key) -{ - struct watch *w; - struct format *f; - char *match; - - AN(head); - AN(key); - ALLOC_OBJ(w, WATCH_MAGIC); - AN(w); - - match = strchr(key, ':'); - if (match != NULL) { - match++; - if (!strncmp(match, "first", 5)) - w->match = FMTPOL_FIRST; - else if (!strncmp(match, "last", 4)) - w->match = FMTPOL_LAST; - else - VUT_Error(vut, 1, "Unknown match rule :%s", match); - match[-1] = '\0'; - } - - w->keylen = asprintf(&w->key, "%s:", key); - assert(w->keylen > 0); - VTAILQ_INSERT_TAIL(head, w, list); - - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_fragment; - f->frag = &w->frag; - f->string = strdup(CTX.missing_string); - AN(f->string); - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -addf_vsl(enum VSL_tag_e tag, long i, const char *prefix) -{ - struct vsl_watch *w; - - ALLOC_OBJ(w, VSL_WATCH_MAGIC); - AN(w); - if (VSL_tagflags[tag] && CTX.quote_how != VSB_QUOTE_JSON) - VUT_Error(vut, 1, "Tag %s can contain control characters", - VSL_tags[tag]); - w->tag = tag; - assert(i <= INT_MAX); - w->idx = i; - if (prefix != NULL) { - w->prefixlen = asprintf(&w->prefix, "%s:", prefix); - assert(w->prefixlen > 0); - } - VTAILQ_INSERT_TAIL(&CTX.watch_vsl, w, list); - addf_fragment(&w->frag, CTX.missing_string); -} - -static void -addf_auth(void) -{ - struct format *f; - - ALLOC_OBJ(f, FORMAT_MAGIC); - AN(f); - f->func = format_auth; - f->string = strdup("-"); - AN(f->string); - VTAILQ_INSERT_TAIL(&CTX.format, f, list); -} - -static void -parse_x_format(char *buf) -{ - char *e, *r, *s; - long lval; - int slt; - - if (!strcmp(buf, "Varnish:time_firstbyte")) { - addf_fragment(&CTX.frag[F_ttfb], CTX.missing_int); - return; - } - if (!strcmp(buf, "Varnish:hitmiss")) { - addf_strptr(&CTX.hitmiss); - return; - } - if (!strcmp(buf, "Varnish:handling")) { - addf_strptr(&CTX.handling); - return; - } - if (!strcmp(buf, "Varnish:side")) { - addf_strptr(&CTX.side); - return; - } - if (!strcmp(buf, "Varnish:vxid")) { - addf_int64(&CTX.vxid); - return; - } - if (!strncmp(buf, "VCL_Log:", 8)) { - addf_vcl_log(buf + 8); - return; - } - if (!strncmp(buf, "VSL:", 4)) { - buf += 4; - e = buf; - while (*e != '\0') - e++; - if (e == buf) - VUT_Error(vut, 1, "Missing tag in VSL:"); - if (e[-1] == ']') { - r = e - 1; - while (r > buf && *r != '[') - r--; - if (r == buf || r[1] == ']') - VUT_Error(vut, 1, "Syntax error: VSL:%s", buf); - e[-1] = '\0'; - lval = strtol(r + 1, &s, 10); - if (s != e - 1) - VUT_Error(vut, 1, "Syntax error: VSL:%s]", buf); - if (lval <= 0 || lval > 255) { - VUT_Error(vut, 1, - "Syntax error. Field specifier must be" - " between 1 and 255: %s]", - buf); - } - *r = '\0'; - } else - lval = 0; - r = buf; - while (r < e && *r != ':') - r++; - if (r != e) { - slt = VSL_Name2Tag(buf, r - buf); - r++; - } else { - slt = VSL_Name2Tag(buf, -1); - r = NULL; - } - if (slt == -2) - VUT_Error(vut, 1, "Tag not unique: %s", buf); - if (slt == -1) - VUT_Error(vut, 1, "Unknown log tag: %s", buf); - assert(slt >= 0); - - addf_vsl((enum VSL_tag_e)slt, lval, r); - return; - } - if (!strcmp(buf, "Varnish:default_format")) { - parse_format(FORMAT); - return; - } - VUT_Error(vut, 1, "Unknown formatting extension: %s", buf); -} - -static void -parse_format(const char *format) -{ - const char *p, *q; - struct vsb *vsb; - char buf[256]; - int b; - - if (format == NULL) - format = FORMAT; - - vsb = VSB_new_auto(); - AN(vsb); - - for (p = format; *p != '\0'; p++) { - - /* Allow the most essential escape sequences in format */ - if (*p == '\\' && p[1] != '\0') { - if (*++p == 't') - AZ(VSB_putc(vsb, '\t')); - else if (*p == 'n') - AZ(VSB_putc(vsb, '\n')); - else - AZ(VSB_putc(vsb, *p)); - continue; - } - - if (*p != '%') { - AZ(VSB_putc(vsb, *p)); - continue; - } - - if (VSB_len(vsb) > 0) { - AZ(VSB_finish(vsb)); - addf_string(VSB_data(vsb)); - VSB_clear(vsb); - } - - p++; - switch (*p) { - case 'b': /* Body bytes sent */ - addf_fragment(&CTX.frag[F_b], CTX.missing_int); - break; - case 'D': /* Float request time */ - addf_time('T', "us"); - break; - case 'h': /* Client host name / IP Address */ - addf_fragment(&CTX.frag[F_h], CTX.missing_string); - break; - case 'H': /* Protocol */ - addf_fragment(&CTX.frag[F_H], "HTTP/1.0"); - break; - case 'I': /* Bytes received */ - addf_fragment(&CTX.frag[F_I], CTX.missing_int); - break; - case 'l': /* Client user ID (identd) always '-' */ - AZ(VSB_putc(vsb, '-')); - break; - case 'm': /* Method */ - addf_fragment(&CTX.frag[F_m], CTX.missing_string); - break; - case 'O': /* Bytes sent */ - addf_fragment(&CTX.frag[F_O], CTX.missing_int); - break; - case 'q': /* Query string */ - addf_fragment(&CTX.frag[F_q], ""); - break; - case 'r': /* Request line */ - addf_requestline(); - break; - case 's': /* Status code */ - addf_fragment(&CTX.frag[F_s], CTX.missing_int); - break; - case 't': /* strftime */ - addf_time(*p, TIME_FMT); - break; - case 'T': /* Int request time */ - addf_time(*p, "s"); - break; - case 'u': /* Remote user from auth */ - addf_auth(); - break; - case 'U': /* URL */ - addf_fragment(&CTX.frag[F_U], CTX.missing_string); - break; - case '{': - p++; - q = p; - b = 1; - while (*q) { - if (*q == '{') - b++; - else if (*q == '}') - if (--b == 0) - break; - q++; - } - if (b > 0) - VUT_Error(vut, 1, "Unmatched bracket at: %s", - p - 2); - assert((unsigned)(q - p) < sizeof buf - 1); - strncpy(buf, p, q - p); - buf[q - p] = '\0'; - q++; - switch (*q) { - case 'i': - addf_hdr(&CTX.watch_reqhdr, buf); - break; - case 'o': - addf_hdr(&CTX.watch_resphdr, buf); - break; - case 't': - addf_time(*q, buf); - break; - case 'T': - addf_time(*q, buf); - break; - case 'x': - parse_x_format(buf); - break; - default: - VUT_Error(vut, 1, - "Unknown format specifier at: %s", - p - 2); - } - p = q; - break; - default: - VUT_Error(vut, 1, "Unknown format specifier at: %s", - p - 1); - } - } - - if (VSB_len(vsb) > 0) { - /* Add any remaining static */ - AZ(VSB_finish(vsb)); - addf_string(VSB_data(vsb)); - VSB_clear(vsb); - } - - VSB_destroy(&vsb); -} - -static int -isprefix(const char *prefix, size_t len, const char *b, - const char *e, const char **next) -{ - assert(len > 0); - if (e < b + len || strncasecmp(b, prefix, len)) - return (0); - b += len; - if (next) { - while (b < e && *b == ' ') - b++; - *next = b; - } - return (1); -} - -static void -frag_fields(enum format_policy fp, const char *b, const char *e, ...) -{ - va_list ap; - const char *p, *q; - int n, field; - struct fragment *frag; - - AN(b); - AN(e); - va_start(ap, e); - - n = 0; - while (1) { - field = va_arg(ap, int); - frag = va_arg(ap, struct fragment *); - if (field == 0) { - AZ(frag); - break; - } - p = q = NULL; - while (n < field) { - while (b < e && isspace(*b)) - b++; - p = b; - while (b < e && !isspace(*b)) - b++; - q = b; - n++; - } - assert(p != NULL && q != NULL); - if (p >= e || q <= p) - continue; - if (frag_needed(frag, fp)) { - /* We only grab the same matching field once */ - frag->gen = CTX.gen; - frag->b = p; - frag->e = q; - } - } - va_end(ap); -} - -static void -frag_line(enum format_policy fp, const char *b, const char *e, - struct fragment *f) -{ - - if (!frag_needed(f, fp)) { - /* We only grab the same matching record once */ - return; - } - - if (e == NULL) - e = b + strlen(b); - - /* Skip leading space */ - while (b < e && isspace(*b)) - ++b; - - /* Skip trailing space */ - while (e > b && isspace(e[-1])) - --e; - - f->gen = CTX.gen; - f->b = b; - f->e = e; -} - -static void -process_hdr(enum format_policy fp, const struct watch_head *head, const char *b, - const char *e, int unset) -{ - struct watch *w; - const char *p; - - VTAILQ_FOREACH(w, head, list) { - CHECK_OBJ_NOTNULL(w, WATCH_MAGIC); - if (!isprefix(w->key, w->keylen, b, e, &p)) - continue; - - if (w->match) { - assert(w->match == FMTPOL_FIRST || - w->match == FMTPOL_LAST); - fp = w->match; - } - - if (unset && !w->match) { - frag_line(fp, CTX.missing_string, - NULL, - &w->frag); - } else - frag_line(fp, p, e, &w->frag); - } -} - -static void -process_vsl(const struct vsl_watch_head *head, enum VSL_tag_e tag, - const char *b, const char *e) -{ - struct vsl_watch *w; - const char *p; - VTAILQ_FOREACH(w, head, list) { - CHECK_OBJ_NOTNULL(w, VSL_WATCH_MAGIC); - if (tag != w->tag) - continue; - p = b; - if (w->prefixlen > 0 && - !isprefix(w->prefix, w->prefixlen, b, e, &p)) - continue; - if (w->idx == 0) - frag_line(FMTPOL_INTERNAL, p, e, &w->frag); - else - frag_fields(FMTPOL_INTERNAL, p, e, w->idx, &w->frag, 0, NULL); - } -} - -static int v_matchproto_(VSLQ_dispatch_f) -dispatch_f(struct VSL_data *vsl, struct VSL_transaction * const pt[], - void *priv) -{ - struct VSL_transaction *t; - enum VSL_tag_e tag; - const char *b, *e, *p; - struct watch *w; - int i, skip; - - (void)vsl; - (void)priv; - - for (t = pt[0]; t != NULL; t = *++pt) { - CTX.gen++; - - if (t->type == VSL_t_req) { - CTX.side = "c"; - } else if (t->type == VSL_t_bereq) { - CTX.side = "b"; - } else - continue; - - CTX.recv_compl = 0; - CTX.hitmiss = "-"; - CTX.handling = "-"; - CTX.vxid = t->vxid; - skip = 0; - while (skip == 0 && 1 == VSL_Next(t->c)) { - tag = VSL_TAG(t->c->rec.ptr); - if (VSL_tagflags[tag] && - CTX.quote_how != VSB_QUOTE_JSON) - continue; - - b = VSL_CDATA(t->c->rec.ptr); - e = b + VSL_LEN(t->c->rec.ptr); - if (!VSL_tagflags[tag]) { - while (e > b && e[-1] == '\0') - e--; - } - - switch (tag) { - case SLT_HttpGarbage: - skip = 1; - break; - case SLT_PipeAcct: - frag_fields(FMTPOL_INTERNAL, b, e, - 3, &CTX.frag[F_I], - 4, &CTX.frag[F_O], - 0, NULL); - break; - case SLT_BackendOpen: - frag_fields(FMTPOL_INTERNAL, b, e, - 3, &CTX.frag[F_h], - 0, NULL); - break; - case SLT_ReqStart: - frag_fields(FMTPOL_INTERNAL, b, e, - 1, &CTX.frag[F_h], - 0, NULL); - break; - case SLT_BereqMethod: - case SLT_ReqMethod: - frag_line(FMTPOL_REQ, b, e, &CTX.frag[F_m]); - break; - case SLT_BereqURL: - case SLT_ReqURL: - p = memchr(b, '?', e - b); - if (p == NULL) - p = e; - frag_line(FMTPOL_REQ, b, p, &CTX.frag[F_U]); - frag_line(FMTPOL_REQ, p, e, &CTX.frag[F_q]); - break; - case SLT_BereqProtocol: - case SLT_ReqProtocol: - frag_line(FMTPOL_REQ, b, e, &CTX.frag[F_H]); - break; - case SLT_BerespStatus: - case SLT_RespStatus: - frag_line(FMTPOL_RESP, b, e, &CTX.frag[F_s]); - break; - case SLT_BereqAcct: - case SLT_ReqAcct: - frag_fields(FMTPOL_INTERNAL, b, e, - 3, &CTX.frag[F_I], - 5, &CTX.frag[F_b], - 6, &CTX.frag[F_O], - 0, NULL); - break; - case SLT_Timestamp: -#define ISPREFIX(a, b, c, d) isprefix(a, strlen(a), b, c, d) - if (ISPREFIX("Start:", b, e, &p)) { - frag_fields(FMTPOL_INTERNAL, p, e, 1, - &CTX.frag[F_tstart], 0, NULL); - - } else if (ISPREFIX("Resp:", b, e, &p) || - ISPREFIX("PipeSess:", b, e, &p) || - ISPREFIX("BerespBody:", b, e, &p)) { - frag_fields(FMTPOL_INTERNAL, p, e, 1, - &CTX.frag[F_tend], 0, NULL); - - } else if (ISPREFIX("Process:", b, e, &p) || - ISPREFIX("Pipe:", b, e, &p) || - ISPREFIX("Beresp:", b, e, &p)) { - frag_fields(FMTPOL_INTERNAL, p, e, 2, - &CTX.frag[F_ttfb], 0, NULL); - } - break; - case SLT_BereqHeader: - case SLT_ReqHeader: - process_hdr(FMTPOL_REQ, &CTX.watch_reqhdr, b, e, 0); - if (ISPREFIX("Authorization:", b, e, &p) && - ISPREFIX("basic ", p, e, &p)) - frag_line(FMTPOL_REQ, p, e, - &CTX.frag[F_auth]); - else if (ISPREFIX("Host:", b, e, &p)) - frag_line(FMTPOL_REQ, p, e, - &CTX.frag[F_host]); -#undef ISPREFIX - break; - case SLT_BerespHeader: - case SLT_RespHeader: - process_hdr(FMTPOL_RESP, &CTX.watch_resphdr, b, e, 0); - break; - case SLT_BereqUnset: - case SLT_ReqUnset: - process_hdr(FMTPOL_REQ, &CTX.watch_reqhdr, b, e, 1); - break; - case SLT_BerespUnset: - case SLT_RespUnset: - process_hdr(FMTPOL_RESP, &CTX.watch_resphdr, b, e, 1); - break; - case SLT_HitMiss: - CTX.hitmiss = "miss"; - CTX.handling = "hitmiss"; - break; - case SLT_HitPass: - CTX.hitmiss = "miss"; - CTX.handling = "hitpass"; - break; - case SLT_VCL_call: - if (!strcasecmp(b, "recv")) { - CTX.recv_compl = 1; - CTX.hitmiss = "-"; - CTX.handling = "-"; - } else if (!strcasecmp(b, "hit")) { - CTX.hitmiss = "hit"; - CTX.handling = "hit"; - } else if (!strcasecmp(b, "miss") && strcmp(CTX.handling, "hitmiss")) { - CTX.hitmiss = "miss"; - CTX.handling = "miss"; - } else if (!strcasecmp(b, "pass") && strcmp(CTX.handling, "hitpass")) { - CTX.hitmiss = "miss"; - CTX.handling = "pass"; - } else if (!strcasecmp(b, "synth")) { - /* Arguably, synth isn't a hit or - a miss, but miss is less - wrong */ - CTX.hitmiss = "miss"; - CTX.handling = "synth"; - } else if (!strcasecmp(b, "backend_response")) { - CTX.recv_compl = 1; - } - break; - case SLT_VCL_return: - if (!strcasecmp(b, "pipe")) { - CTX.hitmiss = "miss"; - CTX.handling = "pipe"; - } else if (!strcasecmp(b, "restart")) - skip = 1; - break; - case SLT_VCL_Log: - VTAILQ_FOREACH(w, &CTX.watch_vcl_log, list) { - CHECK_OBJ_NOTNULL(w, WATCH_MAGIC); - if (e - b < w->keylen || - strncmp(b, w->key, w->keylen)) - continue; - p = b + w->keylen; - frag_line(FMTPOL_INTERNAL, p, e, &w->frag); - } - break; - default: - break; - } - - process_vsl(&CTX.watch_vsl, tag, b, e); - } - if (skip) - continue; - i = print(); - if (i) - return (i); - } - - return (0); -} - -static char * -read_format(const char *formatfile) -{ - FILE *fmtfile; - size_t len = 0; - int fmtlen; - char *fmt = NULL; - - fmtfile = fopen(formatfile, "r"); - if (fmtfile == NULL) - VUT_Error(vut, 1, "Can't open format file (%s)", - strerror(errno)); - AN(fmtfile); - fmtlen = getline(&fmt, &len, fmtfile); - if (fmtlen == -1) { - free(fmt); - if (feof(fmtfile)) - VUT_Error(vut, 1, "Empty format file"); - VUT_Error(vut, 1, "Can't read format from file (%s)", - strerror(errno)); - } - AZ(fclose(fmtfile)); - if (fmt[fmtlen - 1] == '\n') - fmt[fmtlen - 1] = '\0'; - return (fmt); -} - -int -main(int argc, char * const *argv) -{ - signed char opt; - char *format = NULL; - int mode_opt = 0; - - vut = VUT_InitProg(argc, argv, &vopt_spec); - AN(vut); - memset(&CTX, 0, sizeof CTX); - VTAILQ_INIT(&CTX.format); - VTAILQ_INIT(&CTX.watch_vcl_log); - VTAILQ_INIT(&CTX.watch_reqhdr); - VTAILQ_INIT(&CTX.watch_resphdr); - VTAILQ_INIT(&CTX.watch_vsl); - CTX.vsb = VSB_new_auto(); - AN(CTX.vsb); - CTX.quote_how = VSB_QUOTE_ESCHEX; - REPLACE(CTX.missing_string, "-"); - REPLACE(CTX.missing_int, "-"); - - tzset(); // We use localtime_r(3) - - while ((opt = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) { - switch (opt) { - case 'a': - /* Append to file */ - CTX.a_opt = 1; - break; - case 'b': /* backend mode */ - case 'c': /* client mode */ - case 'E': /* show ESI */ - AN(VUT_Arg(vut, opt, NULL)); - mode_opt = 1; - break; - case 'F': - if (format != NULL) - VUT_Error(vut, 1, "Format already set"); - REPLACE(format, optarg); - break; - case 'f': - if (format != NULL) - VUT_Error(vut, 1, "Format already set"); - /* Format string from file */ - format = read_format(optarg); - AN(format); - break; - case 'h': - /* Usage help */ - VUT_Usage(vut, &vopt_spec, 0); - break; - case 'j': - REPLACE(CTX.missing_string, ""); - REPLACE(CTX.missing_int, "0"); - CTX.quote_how = VSB_QUOTE_JSON; - break; - case 'w': - /* Write to file */ - REPLACE(CTX.w_arg, optarg); - break; - default: - if (!VUT_Arg(vut, opt, optarg)) - VUT_Usage(vut, &vopt_spec, 1); - } - } - - /* default is client mode: */ - if (!mode_opt) - AN(VUT_Arg(vut, 'c', NULL)); - - if (optind != argc) - VUT_Usage(vut, &vopt_spec, 1); - - if (vut->D_opt && !CTX.w_arg) - VUT_Error(vut, 1, "Missing -w option"); - - if (vut->D_opt && !strcmp(CTX.w_arg, "-")) - VUT_Error(vut, 1, "Daemon cannot write to stdout"); - - /* Check for valid grouping mode */ - assert(vut->g_arg < VSL_g__MAX); - if (vut->g_arg != VSL_g_vxid && vut->g_arg != VSL_g_request) - VUT_Error(vut, 1, "Invalid grouping mode: %s", - VSLQ_grouping[vut->g_arg]); - - /* Prepare output format */ - parse_format(format); - REPLACE(format, NULL); - - /* Setup output */ - vut->dispatch_f = dispatch_f; - vut->dispatch_priv = NULL; - if (CTX.w_arg) { - openout(CTX.a_opt); - AN(CTX.fo); - if (vut->D_opt) - vut->sighup_f = rotateout; - } else - CTX.fo = stdout; - vut->idle_f = flushout; - - VUT_Setup(vut); - (void)VUT_Main(vut); - VUT_Fini(&vut); - - exit(0); -} diff --git a/bin/varnishncsa/varnishncsa_options.h b/bin/varnishncsa/varnishncsa_options.h deleted file mode 100644 index b907888afc0..00000000000 --- a/bin/varnishncsa/varnishncsa_options.h +++ /dev/null @@ -1,116 +0,0 @@ -/*- - * Copyright (c) 2013 Varnish Software AS - * All rights reserved. - * - * Author: Martin Blix Grydeland - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include "vapi/vapi_options.h" -#include "vut_options.h" - -#define NCSA_OPT_a \ - VOPT("a", "[-a]", "Append to file", \ - "When writing output to a file, append to it rather than" \ - " overwrite it. This option has no effect without the -w" \ - " option." \ - ) - -#define NCSA_OPT_F \ - VOPT("F:", "[-F ]", "Set output format", \ - "Set the output log format string." \ - ) - -#define NCSA_OPT_f \ - VOPT("f:", "[-f ]", "Read output format from file", \ - "Read output format from a file. Will read a single line" \ - " from the specified file, and use that line as the" \ - " format." \ - ) - - -#define NCSA_OPT_g \ - VOPT("g:", "[-g ]", "Grouping mode (default: vxid)", \ - "The grouping of the log records. The default is to group" \ - " by vxid." \ - ) - -#define NCSA_OPT_w \ - VOPT("w:", "[-w ]", "Output filename", \ - "Redirect output to file. The file will be overwritten" \ - " unless the -a option was specified. If the application" \ - " receives a SIGHUP in daemon mode the file will be" \ - " reopened allowing the old one to be rotated away. This" \ - " option is required when running in daemon mode. If the" \ - " filename is -, varnishncsa writes to the standard output" \ - " and cannot work as a daemon." \ - ) -#define NCSA_OPT_b \ - VOPT("b", "[-b]", "Backend mode", \ - "Log backend requests. If -c is not specified, then only" \ - " backend requests will trigger log lines." \ - ) -#define NCSA_OPT_c \ - VOPT("c", "[-c]", "Client mode", \ - "Log client requests. This is the default. If -b is" \ - " specified, then -c is needed to also log client requests" \ - ) -#define NCSA_OPT_E \ - VOPT("E", "[-E]", "Show ESI requests", \ - "Show ESI requests, implies client mode." \ - ) -#define NCSA_OPT_j \ - VOPT("j", "[-j]", "Make output JSON-compatible", \ - "Make format-specifier replacements JSON-compatible. When" \ - " escaping characters, use JSON-style \\\\uXXXX escape" \ - " sequences instead of C-style \\\\xXX sequences. Empty" \ - " strings will be replaced with \"\" instead of \"-\", and" \ - " empty integers will be replaced with null. Use -F or -f" \ - " in combination with -j to write JSON logs." \ - ) - -NCSA_OPT_a -NCSA_OPT_b -NCSA_OPT_c -VSL_OPT_C -VUT_OPT_d -VUT_GLOBAL_OPT_D -NCSA_OPT_E -NCSA_OPT_F -NCSA_OPT_f -NCSA_OPT_g -VUT_OPT_h -NCSA_OPT_j -VUT_OPT_k -VSL_OPT_L -VUT_OPT_n -VUT_GLOBAL_OPT_P -VUT_OPT_Q -VUT_OPT_q -VUT_OPT_r -VSL_OPT_R -VUT_OPT_t -VUT_GLOBAL_OPT_V -NCSA_OPT_w diff --git a/bin/varnishstat/Makefile.am b/bin/varnishstat/Makefile.am deleted file mode 100644 index 45dc4f34e1a..00000000000 --- a/bin/varnishstat/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -# - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_builddir)/include \ - @CURSES_CFLAGS@ - -bin_PROGRAMS = varnishstat varnishstat_help_gen - -varnishstat_SOURCES = \ - varnishstat.h \ - varnishstat.c \ - varnishstat_bindings.h \ - varnishstat_curses.c \ - varnishstat_options.h - -nodist_varnishstat_SOURCES = \ - varnishstat_curses_help.c - -BUILT_SOURCES = $(nodist_varnishstat_SOURCES) -DISTCLEANFILES = $(nodist_varnishstat_SOURCES) - -varnishstat_help_gen_SOURCES = \ - varnishstat_help_gen.c \ - varnishstat_bindings.h - -varnishstat_curses_help.c: varnishstat_help_gen - $(AM_V_GEN) ./varnishstat_help_gen >$@_ - @mv $@_ $@ - -varnishstat_LDADD = \ - $(top_builddir)/lib/libvarnishapi/libvarnishapi.la \ - @CURSES_LIBS@ ${RT_LIBS} ${LIBM} ${PTHREAD_LIBS} - -varnishstat_help_gen_LDADD = \ - $(top_builddir)/lib/libvarnish/libvarnish.la diff --git a/bin/varnishstat/flint.lnt b/bin/varnishstat/flint.lnt deleted file mode 100644 index 764ed641e27..00000000000 --- a/bin/varnishstat/flint.lnt +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) 2010-2019 Varnish Software AS -// SPDX-License-Identifier: BSD-2-Clause -// See LICENSE file for full text of license - - -// +libh mgt_event.h - --efile(451, varnishstat_options.h) // No include guard --efile(451, varnishstat_bindings.h) // No include guard diff --git a/bin/varnishstat/flint.sh b/bin/varnishstat/flint.sh deleted file mode 100644 index 87d8d0bc25b..00000000000 --- a/bin/varnishstat/flint.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2010-2021 Varnish Software AS -# SPDX-License-Identifier: BSD-2-Clause -# See LICENSE file for full text of license - -FLOPS=' - varnishstat.c - varnishstat_curses.c - varnishstat_curses_help.c - - ../../lib/libvarnishapi/flint.lnt - ../../lib/libvarnishapi/*.c -' ../../tools/flint_skel.sh $* diff --git a/bin/varnishstat/varnishstat.c b/bin/varnishstat/varnishstat.c deleted file mode 100644 index 080e311973b..00000000000 --- a/bin/varnishstat/varnishstat.c +++ /dev/null @@ -1,368 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2015 Varnish Software AS - * All rights reserved. - * - * Author: Poul-Henning Kamp - * Author: Dag-Erling Smørgrav - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Statistics output program - */ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#define VOPT_DEFINITION -#define VOPT_INC "varnishstat_options.h" - -#include "vapi/voptget.h" -#include "vapi/vsl.h" -#include "vdef.h" -#include "vut.h" - -#include "varnishstat.h" - -static struct VUT *vut; -int has_f = 0; - -/*--------------------------------------------------------------------*/ - -static int v_matchproto_(VSC_iter_f) -do_xml_cb(void *priv, const struct VSC_point * const pt) -{ - uint64_t val; - - (void)priv; - if (pt == NULL) - return (0); - AZ(strcmp(pt->ctype, "uint64_t")); - val = VSC_Value(pt); - - printf("\t\n"); - printf("\t\t%s\n", pt->name); - printf("\t\t%ju\n", (uintmax_t)val); - printf("\t\t%c\n", pt->semantics); - printf("\t\t%c\n", pt->format); - printf("\t\t%s\n", pt->sdesc); - printf("\t\n"); - return (0); -} - -static void -do_xml(struct vsm *vsm, struct vsc *vsc) -{ - char time_stamp[20]; - time_t now; - - printf("\n"); - now = time(NULL); - (void)strftime(time_stamp, 20, "%Y-%m-%dT%H:%M:%S", localtime(&now)); - printf("\n", time_stamp); - (void)VSC_Iter(vsc, vsm, do_xml_cb, NULL); - printf("\n"); -} - - -/*--------------------------------------------------------------------*/ - -static int v_matchproto_(VSC_iter_f) -do_json_cb(void *priv, const struct VSC_point * const pt) -{ - const char **sep; - uintmax_t val; - - if (pt == NULL) - return (0); - - AZ(strcmp(pt->ctype, "uint64_t")); - val = (uintmax_t)VSC_Value(pt); - - sep = priv; - - printf( - "%s" - " \"%s\": {\n" - " \"description\": \"%s\",\n" - " \"flag\": \"%c\",\n" - " \"format\": \"%c\",\n" - " \"value\": %ju\n" - " }", - *sep, pt->name, pt->sdesc, pt->semantics, pt->format, val); - - *sep = ",\n"; - return (0); -} - -static void -do_json(struct vsm *vsm, struct vsc *vsc) -{ - const char *sep; - char time_stamp[20]; - time_t now; - - sep = ""; - now = time(NULL); - - (void)strftime(time_stamp, 20, "%Y-%m-%dT%H:%M:%S", localtime(&now)); - printf( - "{\n" - " \"version\": 1,\n" - " \"timestamp\": \"%s\",\n" - " \"counters\": {\n", time_stamp); - (void)VSC_Iter(vsc, vsm, do_json_cb, &sep); - printf( - "\n" - " }\n" - "}\n"); -} - - -/*--------------------------------------------------------------------*/ - -struct once_priv { - double up; - int pad; -}; - -static int v_matchproto_(VSC_iter_f) -do_once_cb_first(void *priv, const struct VSC_point * const pt) -{ - struct once_priv *op; - uint64_t val; - - if (pt == NULL) - return (0); - op = priv; - AZ(strcmp(pt->ctype, "uint64_t")); - if (strcmp(pt->name, "MAIN.uptime")) - return (0); - val = VSC_Value(pt); - op->up = (double)val; - return (1); -} - -static int v_matchproto_(VSC_iter_f) -do_once_cb(void *priv, const struct VSC_point * const pt) -{ - struct once_priv *op; - uint64_t val; - int i; - - if (pt == NULL) - return (0); - op = priv; - AZ(strcmp(pt->ctype, "uint64_t")); - val = VSC_Value(pt); - i = 0; - i += printf("%s", pt->name); - if (i >= op->pad) - op->pad = i + 1; - printf("%*.*s", op->pad - i, op->pad - i, ""); - if (pt->semantics == 'c') - printf("%12ju %12.2f %s\n", - (uintmax_t)val, op->up ? val / op->up : 0, - pt->sdesc); - else - printf("%12ju %12s %s\n", - (uintmax_t)val, ". ", pt->sdesc); - return (0); -} - -static void -do_once(struct vsm *vsm, struct vsc *vsc) -{ - struct vsc *vsconce = VSC_New(); - struct once_priv op; - - AN(vsconce); - AN(VSC_Arg(vsconce, 'f', "MAIN.uptime")); - - memset(&op, 0, sizeof op); - op.pad = 18; - - (void)VSC_Iter(vsconce, vsm, do_once_cb_first, &op); - VSC_Destroy(&vsconce, vsm); - (void)VSC_Iter(vsc, vsm, do_once_cb, &op); -} - -/*--------------------------------------------------------------------*/ - -static int v_matchproto_(VSC_iter_f) -do_list_cb(void *priv, const struct VSC_point * const pt) -{ - int i; - - (void)priv; - - if (pt == NULL) - return (0); - - i = 0; - i += printf("%s", pt->name); - if (i < 30) - printf("%*s", i - 30, ""); - printf(" %s\n", pt->sdesc); - return (0); -} - -static void -list_fields(struct vsm *vsm, struct vsc *vsc) -{ - printf("Varnishstat -f option fields:\n"); - printf("Field name Description\n"); - printf("---------- -----------\n"); - - (void)VSC_Iter(vsc, vsm, do_list_cb, NULL); -} - -/*--------------------------------------------------------------------*/ - -static void v_noreturn_ -usage(int status) -{ - const char **opt; - - fprintf(stderr, "Usage: %s \n\n", vut->progname); - fprintf(stderr, "Options:\n"); - for (opt = vopt_spec.vopt_usage; *opt != NULL; opt +=2) - fprintf(stderr, " %-25s %s\n", *opt, *(opt + 1)); - exit(status); -} - -static int -key_bindings(void) -{ - -#define BINDING_KEY(chr, name, next) \ - printf("<%s>" next, name); -#define BINDING(name, desc) \ - printf("\n%s\n\n", desc); -#include "varnishstat_bindings.h" - return (0); -} - -int -main(int argc, char * const *argv) -{ - struct vsm *vd; - int once = 0, xml = 0, json = 0, f_list = 0, curses = 0; - signed char opt; - int i; - struct vsc *vsc; - - if (argc == 2 && !strcmp(argv[1], "--bindings")) - exit(key_bindings()); - - vut = VUT_InitProg(argc, argv, &vopt_spec); - AN(vut); - vd = VSM_New(); - AN(vd); - vsc = VSC_New(); - AN(vsc); - - while ((opt = getopt(argc, argv, vopt_spec.vopt_optstring)) != -1) { - switch (opt) { - case '1': - once = 1; - break; - case 'c': - curses = 1; - break; - case 'h': - /* Usage help */ - usage(0); - break; - case 'l': - f_list = 1; - break; - case 'x': - xml = 1; - break; - case 'j': - json = 1; - break; - case 'I': - case 'X': - case 'f': - AN(VSC_Arg(vsc, opt, optarg)); - has_f = 1; - break; - case 'r': - AN(VSC_Arg(vsc, opt, optarg)); - break; - case 'V': - AN(VUT_Arg(vut, opt, optarg)); - break; - default: - i = VSM_Arg(vd, opt, optarg); - if (i < 0) - VUT_Error(vut, 1, "%s", VSM_Error(vd)); - if (!i) - usage(1); - } - } - - if (optind != argc) - usage(1); - - if (!(curses || xml || json || once || f_list)) { - curses = isatty(STDOUT_FILENO); - once = !curses; - } - - if (VSM_Attach(vd, STDERR_FILENO)) - VUT_Error(vut, 1, "%s", VSM_Error(vd)); - - if (curses) { - if (has_f) { - AN(VSC_Arg(vsc, 'R', "MGT.uptime")); - AN(VSC_Arg(vsc, 'R', "MAIN.uptime")); - AN(VSC_Arg(vsc, 'R', "MAIN.cache_hit")); - AN(VSC_Arg(vsc, 'R', "MAIN.cache_miss")); - } - do_curses(vd, vsc); - } - else if (xml) - do_xml(vd, vsc); - else if (json) - do_json(vd, vsc); - else if (once) - do_once(vd, vsc); - else if (f_list) - list_fields(vd, vsc); - else - WRONG("undefined varnishstat mode"); - - exit(0); -} diff --git a/bin/varnishstat/varnishstat.h b/bin/varnishstat/varnishstat.h deleted file mode 100644 index dbdadaf7c72..00000000000 --- a/bin/varnishstat/varnishstat.h +++ /dev/null @@ -1,48 +0,0 @@ -/*- - * Copyright (c) 2010-2014 Varnish Software AS - * All rights reserved. - * - * Author: Poul-Henning Kamp - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include - -#include "vapi/vsm.h" -#include "vapi/vsc.h" - -#include "vas.h" -#include "vcs.h" - -/* varnishstat.c */ -extern int has_f; - -/* varnishstat_curses.c */ -void do_curses(struct vsm *, struct vsc *); - -/* varnishstat_curses_help.c */ -extern const char *const bindings_help[]; -extern const int bindings_help_len; diff --git a/bin/varnishstat/varnishstat.xsd b/bin/varnishstat/varnishstat.xsd deleted file mode 100644 index aaef80fee97..00000000000 --- a/bin/varnishstat/varnishstat.xsd +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/bin/varnishstat/varnishstat_bindings.h b/bin/varnishstat/varnishstat_bindings.h deleted file mode 100644 index c4a79ad568d..00000000000 --- a/bin/varnishstat/varnishstat_bindings.h +++ /dev/null @@ -1,127 +0,0 @@ -/*- - * Copyright (c) 2019 Varnish Software AS - * All rights reserved. - * - * Author: Dridi Boukelmoune - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/*lint -save -e525 -e539 */ - -#ifndef BINDING_KEY -# define BINDING_KEY(key, name, next) -#endif - -#define BINDING_CTRL(c) ((c) & 0x1f) - -BINDING_KEY('h', "h",) -BINDING(HELP, "\tToggle the help screen.") - -BINDING_KEY(KEY_UP, "UP", " or ") -BINDING_KEY('k', "k",) -BINDING(UP, "\tNavigate the counter list one line up.") - -BINDING_KEY(KEY_DOWN, "DOWN", " or ") -BINDING_KEY('j', "j",) -BINDING(DOWN, "\tNavigate the counter list one line down.") - -BINDING_KEY(KEY_PPAGE, "PAGEUP", " or ") -BINDING_KEY('b', "b", " or ") -BINDING_KEY(BINDING_CTRL('b'), "CTRL-B",) -BINDING(PAGEUP, "\tNavigate the counter list one page up.") - -BINDING_KEY(KEY_NPAGE, "PAGEDOWN", " or ") -BINDING_KEY(' ', "SPACE", " or ") -BINDING_KEY(BINDING_CTRL('f'), "CTRL-F",) -BINDING(PAGEDOWN, "\tNavigate the counter list one page down.") - -BINDING_KEY(KEY_HOME, "HOME", " or ") -BINDING_KEY('g', "g",) -BINDING(TOP, "\tNavigate the counter list to the top.") - -BINDING_KEY(KEY_END, "END", " or ") -BINDING_KEY('G', "G",) -BINDING(BOTTOM, "\tNavigate the counter list to the bottom.") - -BINDING_KEY('d', "d",) -BINDING(UNSEEN, - "\tToggle between showing and hiding unseen counters. Unseen\n" - "\tcounters are those that has been zero for the entire runtime\n" - "\tof varnishstat. Defaults to hide unseen counters." -) - -BINDING_KEY('r', "r",) -BINDING(RAW, - "\tToggle between showing raw and adjusted gauges. When a gauge\n" - "\tis decremented faster than it is incremented, it may appear as\n" - "\ta large integer with its most significant bit set. By default\n" - "\tsuch values are adjusted to zero." -) - -BINDING_KEY('e', "e",) -BINDING(SCALE, "\tToggle scaling of values.") - -BINDING_KEY('v', "v",) -BINDING(VERBOSE, - "\tIncrease verbosity. Defaults to only showing informational\n" - "\tcounters." -) - -BINDING_KEY('V', "V",) -BINDING(QUIET, - "\tDecrease verbosity. Defaults to only showing informational\n" - "\tcounters." -) - -BINDING_KEY('q', "q",) -BINDING(QUIT, "\tQuit.") - -BINDING_KEY(BINDING_CTRL('t'), "CTRL+T",) -BINDING(SAMPLE, "\tSample now.") - -BINDING_KEY('0', "0",) -BINDING(RESET_AVERAGES, "\tReset averages.") - -BINDING_KEY('+', "+",) -BINDING(ACCEL, "\tIncrease refresh interval.") - -BINDING_KEY('-', "-",) -BINDING(DECEL, "\tDecrease refresh interval.") - -#ifdef BINDING_SIG -BINDING_KEY(BINDING_CTRL('c'), "CTRL+C",) -BINDING(SIG_INT, "") - -BINDING_KEY(BINDING_CTRL('z'), "CTRL+Z",) -BINDING(SIG_TSTP, "") -# undef BINDING_SIG -#endif - -#undef BINDING_KEY -#undef BINDING_CTRL -#undef BINDING - -/*lint -restore */ - diff --git a/bin/varnishstat/varnishstat_curses.c b/bin/varnishstat/varnishstat_curses.c deleted file mode 100644 index d1a1cb21919..00000000000 --- a/bin/varnishstat/varnishstat_curses.c +++ /dev/null @@ -1,1228 +0,0 @@ -/*- - * Copyright (c) 2006 Verdens Gang AS - * Copyright (c) 2006-2015 Varnish Software AS - * All rights reserved. - * - * Author: Poul-Henning Kamp - * Author: Dag-Erling Smørgrav - * Author: Martin Blix Grydeland - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Statistics output program - */ - -#include "config.h" - -#include -#include -#include -#include -#include - -#include "vdef.h" -#include "vas.h" -#include "miniobj.h" -#include "vqueue.h" -#include "vtim.h" -#include "vapi/vsig.h" - -#include "varnishstat.h" -#include "vcurses.h" - -#define LINES_STATUS 3 -#define LINES_BAR_T 1 -#define LINES_BAR_B 1 -#define LINES_INFO 3 -#define LINES_POINTS_MIN 3 - -#define N_COL 6 -#define COLW 14 -#define COLW_NAME_MIN 24 - -#define VALUE_MAX 999999999999 - -#define REBUILD_NEXT (1u << 0) -#define REBUILD_FIRST (1u << 1) - -enum kb_e { -#define BINDING(name, desc) KB_ ## name, -#define BINDING_SIG -#include "varnishstat_bindings.h" -}; - -struct ma { - unsigned n, nmax; - double acc; -}; - -struct pt { - unsigned magic; -#define PT_MAGIC 0x41698E4F - VTAILQ_ENTRY(pt) list; - - const struct VSC_point *vpt; - - char seen; - - uint64_t cur, last; - double t_cur, t_last; - double chg, avg; - - struct ma ma_10, ma_100, ma_1000; -}; - -struct hitrate { - uint64_t lhit, lmiss; - struct ma hr_10; - struct ma hr_100; - struct ma hr_1000; -}; -static struct hitrate hitrate; - -static VTAILQ_HEAD(, pt) ptlist = VTAILQ_HEAD_INITIALIZER(ptlist); -static int n_ptlist = 0; -static int n_ptarray = 0; -static struct pt **ptarray = NULL; -static const volatile uint64_t *mgt_uptime; -static const volatile uint64_t *main_uptime; -static const volatile uint64_t *main_cache_hit; -static const volatile uint64_t *main_cache_miss; - -static int l_status, l_bar_t, l_points, l_bar_b, l_info; -static unsigned colw_name = COLW_NAME_MIN; -static WINDOW *w_status = NULL; -static WINDOW *w_bar_t = NULL; -static WINDOW *w_points = NULL; -static WINDOW *w_bar_b = NULL; -static WINDOW *w_info = NULL; - -static const struct VSC_level_desc *verbosity; -static int show_help = 0; -static int help_line = 0; -static int keep_running = 1; -static int hide_unseen = 1; -static int raw_vsc = 0; -static int page_start = 0; -static int current = 0; -static int rebuild = 0; -static int redraw = 0; -static int sample = 0; -static int reset_averages = 0; -static int scale = 1; -static double t_sample = 0.; -static double interval = 1.; -static unsigned vsm_status = 0; - -#define NOTIF_MAXLEN 256 -static char notification_message[NOTIF_MAXLEN] = ""; -static vtim_mono notification_eol = 0.0; - -static void -init_hitrate(void) -{ - memset(&hitrate, 0, sizeof (struct hitrate)); - if (main_cache_hit != NULL) { - hitrate.lhit = *main_cache_hit; - hitrate.lmiss = *main_cache_miss; - } - hitrate.hr_10.nmax = 10; - hitrate.hr_100.nmax = 100; - hitrate.hr_1000.nmax = 1000; -} - -static void -update_ma(struct ma *ma, double val) -{ - AN(ma); - AN(ma->nmax); - if (ma->n < ma->nmax) - ma->n++; - ma->acc += (val - ma->acc) / (double)ma->n; -} - -static void -update_position(void) -{ - int old_current, old_page_start; - - old_current = current; - old_page_start = page_start; - - if (n_ptarray == 0) { - current = 0; - page_start = 0; - } else { - current = vlimit_t(int, current, 0, n_ptarray - 1); - page_start = vmin(page_start, current); - if (current > page_start + (l_points - 1)) - page_start = current - (l_points - 1); - page_start = vlimit_t(int, page_start, 0, n_ptarray - 1); - } - - if (current != old_current || page_start != old_page_start) - redraw = 1; -} - -static void -delete_pt_array(void) -{ - if (ptarray != NULL) - free(ptarray); - ptarray = NULL; - n_ptarray = 0; - - update_position(); -} - -static void -build_pt_array(void) -{ - int i; - struct pt *pt; - struct pt *pt_current = NULL; - int current_line = 0; - - if (current < n_ptarray) { - pt_current = ptarray[current]; - current_line = current - page_start; - } - - if (ptarray != NULL) - delete_pt_array(); - AZ(n_ptarray); - ptarray = calloc(n_ptlist, sizeof *ptarray); - AN(ptarray); - - VTAILQ_FOREACH(pt, &ptlist, list) { - CHECK_OBJ_NOTNULL(pt, PT_MAGIC); - if (pt->vpt->level > verbosity) { - if (has_f && (rebuild & REBUILD_FIRST)) - verbosity = VSC_ChangeLevel(verbosity, - pt->vpt->level - verbosity); - else - continue; - } - if (!pt->seen && hide_unseen) - continue; - assert(n_ptarray < n_ptlist); - ptarray[n_ptarray++] = pt; - } - assert(n_ptarray <= n_ptlist); - - for (i = 0; pt_current != NULL && i < n_ptarray; i++) - if (ptarray[i] == pt_current) - break; - current = i; - page_start = current - current_line; - update_position(); - - rebuild = 0; - redraw = 1; -} - -static void -sample_points(void) -{ - struct pt *pt; - uint64_t v; - - VTAILQ_FOREACH(pt, &ptlist, list) { - AN(pt->vpt); - AN(pt->vpt->ptr); - v = VSC_Value(pt->vpt); - if (v == 0 && !pt->seen) - continue; - if (!pt->seen) { - pt->seen = 1; - rebuild = REBUILD_NEXT; - } - pt->last = pt->cur; - pt->cur = v; - pt->t_last = pt->t_cur; - pt->t_cur = VTIM_mono(); - - if (reset_averages) { - pt->chg = 0; - pt->ma_10.n = 0; - pt->ma_100.n = 0; - pt->ma_1000.n = 0; - } - if (pt->t_last) - pt->chg = ((int64_t)pt->cur - (int64_t)pt->last) / - (pt->t_cur - pt->t_last); - - if (pt->vpt->semantics == 'g') { - pt->avg = 0.; - update_ma(&pt->ma_10, (int64_t)pt->cur); - update_ma(&pt->ma_100, (int64_t)pt->cur); - update_ma(&pt->ma_1000, (int64_t)pt->cur); - } else if (pt->vpt->semantics == 'c') { - if (main_uptime != NULL && *main_uptime) - pt->avg = pt->cur / (double)*main_uptime; - else - pt->avg = 0.; - if (pt->t_last) { - update_ma(&pt->ma_10, pt->chg); - update_ma(&pt->ma_100, pt->chg); - update_ma(&pt->ma_1000, pt->chg); - } - } - } -} - -static void -sample_hitrate(void) -{ - double hr, mr, ratio; - uint64_t hit, miss; - - if (main_cache_hit == NULL) - return; - - hit = *main_cache_hit; - miss = *main_cache_miss; - hr = hit - hitrate.lhit; - mr = miss - hitrate.lmiss; - hitrate.lhit = hit; - hitrate.lmiss = miss; - - if (hr + mr != 0) - ratio = hr / (hr + mr); - else - ratio = 0; - if (reset_averages) { - hitrate.hr_10.n = 0; - hitrate.hr_100.n = 0; - hitrate.hr_1000.n = 0; - } - update_ma(&hitrate.hr_10, ratio); - update_ma(&hitrate.hr_100, ratio); - update_ma(&hitrate.hr_1000, ratio); -} - -static void -sample_data(void) -{ - t_sample = VTIM_mono(); - sample = 0; - redraw = 1; - sample_points(); - sample_hitrate(); - reset_averages = 0; -} - -static void -destroy_window(WINDOW **w) -{ - - AN(w); - if (*w == NULL) - return; - AC(delwin(*w)); - *w = NULL; -} - -static void -make_windows(void) -{ - int Y, X; - int y; - int y_status, y_bar_t, y_points, y_bar_b, y_info; - - destroy_window(&w_status); - destroy_window(&w_bar_t); - destroy_window(&w_points); - destroy_window(&w_bar_b); - destroy_window(&w_info); - - Y = LINES; - X = COLS; - - l_status = LINES_STATUS; - l_bar_t = LINES_BAR_T; - l_bar_b = LINES_BAR_B; - l_info = LINES_INFO; - l_points = Y - (l_status + l_bar_t + l_bar_b + l_info); - if (l_points < LINES_POINTS_MIN) { - l_points += l_info; - l_info = 0; - } - l_points = vmax(l_points, LINES_POINTS_MIN); - - y = 0; - y_status = y; - y += l_status; - y_bar_t = y; - y += l_bar_t; - y_points = y; - y += l_points; - y_bar_b = y; - y += l_bar_b; - y_info = y; - y += l_info; - assert(y >= Y); - - w_status = newwin(l_status, X, y_status, 0); - AN(w_status); - AC(nodelay(w_status, 1)); - AC(keypad(w_status, 1)); - AC(wnoutrefresh(w_status)); - - w_bar_t = newwin(l_bar_t, X, y_bar_t, 0); - AN(w_bar_t); - wbkgd(w_bar_t, A_REVERSE); - AC(wnoutrefresh(w_bar_t)); - - w_points = newwin(l_points, X, y_points, 0); - AN(w_points); - AC(wnoutrefresh(w_points)); - - w_bar_b = newwin(l_bar_b, X, y_bar_b, 0); - AN(w_bar_b); - wbkgd(w_bar_b, A_REVERSE); - AC(wnoutrefresh(w_bar_b)); - - if (l_info) { - w_info = newwin(l_info, X, y_info, 0); - AN(w_info); - AC(wnoutrefresh(w_info)); - } - - if (X - COLW_NAME_MIN > N_COL * COLW) - colw_name = X - (N_COL * COLW); - else - colw_name = COLW_NAME_MIN; - - redraw = 1; -} - -static void -print_duration(WINDOW *w, uint64_t t) -{ - - IC(wprintw(w, "%4ju+%02ju:%02ju:%02ju", - (uintmax_t)t / 86400, (uintmax_t)(t % 86400) / 3600, - (uintmax_t)(t % 3600) / 60, (uintmax_t)t % 60)); -} - -static void -running(WINDOW *w, uint64_t up, int flg) -{ - if (vsm_status & flg) { - print_duration(w_status, up); - } else { - wattron(w, A_STANDOUT); - IC(wprintw(w, " Not Running")); - wattroff(w, A_STANDOUT); - } -} - -static void -draw_status(void) -{ - uint64_t up_mgt = 0; - uint64_t up_chld = 0; - - AN(w_status); - - AC(werase(w_status)); - - if (mgt_uptime != NULL) - up_mgt = *mgt_uptime; - if (main_uptime != NULL) - up_chld = *main_uptime; - - IC(mvwprintw(w_status, 0, 0, "Uptime mgt: ")); - running(w_status, up_mgt, VSM_MGT_RUNNING); - IC(mvwprintw(w_status, 1, 0, "Uptime child: ")); - running(w_status, up_chld, VSM_WRK_RUNNING); - IC(mvwprintw(w_status, 2, 0, "Press to toggle help screen")); - - if (VTIM_mono() < notification_eol) - mvwaddstr(w_status, 2, 0, notification_message); - - if (COLS > 70) { - IC(mvwprintw(w_status, 0, getmaxx(w_status) - 37, - "Hitrate n: %8u %8u %8u", hitrate.hr_10.n, hitrate.hr_100.n, - hitrate.hr_1000.n)); - IC(mvwprintw(w_status, 1, getmaxx(w_status) - 37, - " avg(n): %8.4f %8.4f %8.4f", hitrate.hr_10.acc, - hitrate.hr_100.acc, hitrate.hr_1000.acc)); - } - - AC(wnoutrefresh(w_status)); -} - -static void -draw_bar_t(void) -{ - int X, x; - enum { - COL_CUR, - COL_CHG, - COL_AVG, - COL_MA10, - COL_MA100, - COL_MA1000, - COL_LAST - } col; - - AN(w_bar_t); - - X = getmaxx(w_bar_t); - x = 0; - AC(werase(w_bar_t)); - if (page_start > 0) - IC(mvwprintw(w_bar_t, 0, x, "^^^")); - x += 4; - IC(mvwprintw(w_bar_t, 0, x, "%.*s", colw_name - 4, "NAME")); - x += colw_name - 4; - col = COL_CUR; - while (col < COL_LAST) { - if (X - x < COLW) - break; - switch (col) { - case COL_CUR: - IC(mvwprintw(w_bar_t, 0, x, " %12.12s", "CURRENT")); - break; - case COL_CHG: - IC(mvwprintw(w_bar_t, 0, x, " %12.12s", "CHANGE")); - break; - case COL_AVG: - IC(mvwprintw(w_bar_t, 0, x, " %12.12s", "AVERAGE")); - break; - case COL_MA10: - IC(mvwprintw(w_bar_t, 0, x, " %12.12s", "AVG_10")); - break; - case COL_MA100: - IC(mvwprintw(w_bar_t, 0, x, " %12.12s", "AVG_100")); - break; - case COL_MA1000: - IC(mvwprintw(w_bar_t, 0, x, " %12.12s", "AVG_1000")); - break; - default: - break; - } - x += COLW; - col++; - } - - AC(wnoutrefresh(w_bar_t)); -} - -static void -draw_line_default(WINDOW *w, int y, int x, int X, const struct pt *pt) -{ - enum { - COL_CUR, - COL_CHG, - COL_AVG, - COL_MA10, - COL_MA100, - COL_MA1000, - COL_LAST - } col; - - AN(w); - AN(pt); - - col = COL_CUR; - while (col < COL_LAST) { - if (X - x < COLW) - break; - switch (col) { - case COL_CUR: - IC(mvwprintw(w, y, x, " %12ju", (uintmax_t)pt->cur)); - break; - case COL_CHG: - if (pt->t_last) - IC(mvwprintw(w, y, x, " %12.2f", pt->chg)); - else - IC(mvwprintw(w, y, x, " %12s", ". ")); - break; - case COL_AVG: - if (pt->avg) - IC(mvwprintw(w, y, x, " %12.2f", pt->avg)); - else - IC(mvwprintw(w, y, x, " %12s", ". ")); - break; - case COL_MA10: - IC(mvwprintw(w, y, x, " %12.2f", pt->ma_10.acc)); - break; - case COL_MA100: - IC(mvwprintw(w, y, x, " %12.2f", pt->ma_100.acc)); - break; - case COL_MA1000: - IC(mvwprintw(w, y, x, " %12.2f", pt->ma_1000.acc)); - break; - default: - break; - } - x += COLW; - col++; - } -} - -static double -scale_bytes(double val, char *q) -{ - const char *p; - - for (p = " KMGTPEZY"; *p; p++) { - if (fabs(val) < 1024.) - break; - val /= 1024.; - } - *q = *p; - return (val); -} - -static void -print_bytes(WINDOW *w, double val) -{ - char q = ' '; - - if (scale) - val = scale_bytes(val, &q); - IC(wprintw(w, " %12.2f%c", val, q)); -} - -static void -print_trunc(WINDOW *w, uintmax_t val) -{ - if (val > VALUE_MAX) { - while (val > VALUE_MAX) - val /= 1000; - IC(wprintw(w, " %9ju...", val)); - } else - IC(wprintw(w, " %12ju", val)); -} - -static void -draw_line_bytes(WINDOW *w, int y, int x, int X, const struct pt *pt) -{ - enum { - COL_CUR, - COL_CHG, - COL_AVG, - COL_MA10, - COL_MA100, - COL_MA1000, - COL_LAST - } col; - - AN(w); - AN(pt); - - col = COL_CUR; - while (col < COL_LAST) { - if (X - x < COLW) - break; - wmove(w, y, x); - switch (col) { - case COL_CUR: - if (scale && pt->cur > 1024) - print_bytes(w, (double)pt->cur); - else - print_trunc(w, (uintmax_t)pt->cur); - break; - case COL_CHG: - if (pt->t_last) - print_bytes(w, pt->chg); - else - IC(wprintw(w, " %12s", ". ")); - break; - case COL_AVG: - if (pt->avg) - print_bytes(w, pt->avg); - else - IC(wprintw(w, " %12s", ". ")); - break; - case COL_MA10: - print_bytes(w, pt->ma_10.acc); - break; - case COL_MA100: - print_bytes(w, pt->ma_100.acc); - break; - case COL_MA1000: - print_bytes(w, pt->ma_1000.acc); - break; - default: - break; - } - x += COLW; - col++; - } -} - -static void -draw_line_bitmap(WINDOW *w, int y, int x, int X, const struct pt *pt) -{ - unsigned ch; - enum { - COL_VAL, - COL_MAP, - COL_LAST - } col; - - AN(w); - AN(pt); - assert(pt->vpt->format == 'b'); - - col = COL_VAL; - while (col < COL_LAST) { - switch (col) { - case COL_VAL: - if (X - x < COLW) - return; - IC(mvwprintw(w, y, x, " %10.10jx", - (uintmax_t)((pt->cur >> 24) & 0xffffffffffLL))); - x += COLW; - break; - case COL_MAP: - if (X - x < 2 * COLW) - return; - x += (2 * COLW) - 24; - for (ch = 0x800000; ch; ch >>= 1) { - if (pt->cur & ch) - mvwaddch(w, y, x, 'V'); - else - mvwaddch(w, y, x, '_'); - x++; - } - break; - default: - break; - } - col++; - } -} - -static void -draw_line_duration(WINDOW *w, int y, int x, int X, const struct pt *pt) -{ - enum { - COL_DUR, - COL_LAST - } col; - - AN(w); - AN(pt); - - col = COL_DUR; - while (col < COL_LAST) { - if (X - x < COLW) - break; - switch (col) { - case COL_DUR: - wmove(w, y, x); - if (scale) - print_duration(w, pt->cur); - else - IC(wprintw(w, " %12ju", (uintmax_t)pt->cur)); - break; - default: - break; - } - x += COLW; - col++; - } -} - -static void -draw_line(WINDOW *w, int y, const struct pt *pt) -{ - int x, X; - - assert(colw_name >= COLW_NAME_MIN); - X = getmaxx(w); - x = 0; - if (strlen(pt->vpt->name) > colw_name) - IC(mvwprintw(w, y, x, "%.*s...", colw_name - 3, pt->vpt->name)); - else - IC(mvwprintw(w, y, x, "%.*s", colw_name, pt->vpt->name)); - x += colw_name; - - switch (pt->vpt->format) { - case 'b': - draw_line_bitmap(w, y, x, X, pt); - break; - case 'B': - draw_line_bytes(w, y, x, X, pt); - break; - case 'd': - draw_line_duration(w, y, x, X, pt); - break; - default: - draw_line_default(w, y, x, X, pt); - break; - } -} - -static void -draw_points(void) -{ - int line; - int n; - - AN(w_points); - - AC(werase(w_points)); - if (n_ptarray == 0) { - AC(wnoutrefresh(w_points)); - return; - } - - assert(current >= 0); - assert(current < n_ptarray); - assert(page_start >= 0); - assert(page_start < n_ptarray); - assert(current >= page_start); - assert(current - page_start < l_points); - - for (line = 0; line < l_points; line++) { - n = line + page_start; - if (n >= n_ptarray) - break; - if (n == current) - wattron(w_points, A_BOLD); - draw_line(w_points, line, ptarray[n]); - if (n == current) - wattroff(w_points, A_BOLD); - } - AC(wnoutrefresh(w_points)); -} - -static void -draw_help(void) -{ - const char *const *p; - int l, y, X; - - if (l_points >= bindings_help_len) { - assert(help_line == 0); - l = bindings_help_len; - } else { - assert(help_line >= 0); - assert(help_line <= bindings_help_len - l_points); - l = l_points; - } - - X = getmaxx(w_points); - AC(werase(w_points)); - - for (y = 0, p = bindings_help + help_line; y < l; y++, p++) { - if (**p == '\t') { - IC(mvwprintw(w_points, y, 0, " %.*s", X - 4, *p + 1)); - } else { - wattron(w_points, A_BOLD); - IC(mvwprintw(w_points, y, 0, "%.*s", X, *p)); - wattroff(w_points, A_BOLD); - } - } - - AC(wnoutrefresh(w_points)); -} - -static void -draw_bar_b(void) -{ - int x, X; - char buf[64]; - - AN(w_bar_b); - - x = 0; - X = getmaxx(w_bar_b); - AC(werase(w_bar_b)); - if (page_start + l_points < n_ptarray) - IC(mvwprintw(w_bar_b, 0, x, "vvv")); - x += 4; - if (current < n_ptarray) - IC(mvwprintw(w_bar_b, 0, x, "%s", ptarray[current]->vpt->name)); - - bprintf(buf, "%d-%d/%d", page_start + 1, - page_start + l_points < n_ptarray ? - page_start + l_points : n_ptarray, - n_ptarray); - IC(mvwprintw(w_bar_b, 0, X - strlen(buf), "%s", buf)); - X -= strlen(buf) + 2; - - if (verbosity != NULL) { - IC(mvwprintw(w_bar_b, 0, X - strlen(verbosity->label), "%s", - verbosity->label)); - X -= strlen(verbosity->label) + 2; - } - if (!hide_unseen) { - IC(mvwprintw(w_bar_b, 0, X - 6, "%s", "UNSEEN")); - X -= 8; - } - if (raw_vsc) - IC(mvwprintw(w_bar_b, 0, X - 3, "%s", "RAW")); - - AC(wnoutrefresh(w_bar_b)); -} - -static void -draw_info(void) -{ - - if (w_info == NULL) - return; - - AC(werase(w_info)); - if (current < n_ptarray) { - /* XXX: Word wrapping, and overflow handling? */ - IC(mvwprintw(w_info, 0, 0, "%s:", - ptarray[current]->vpt->sdesc)); - IC(mvwprintw(w_info, 1, 0, "%s", - ptarray[current]->vpt->ldesc)); - } - AC(wnoutrefresh(w_info)); -} - -static void -draw_screen(void) -{ - draw_status(); - if (show_help) { - AC(werase(w_bar_t)); - AC(werase(w_bar_b)); - AC(werase(w_info)); - AC(wnoutrefresh(w_bar_t)); - AC(wnoutrefresh(w_bar_b)); - AC(wnoutrefresh(w_info)); - draw_help(); - } else { - draw_bar_t(); - draw_points(); - draw_bar_b(); - draw_info(); - } - AC(doupdate()); - redraw = 0; -} - -static void -handle_common_keypress(enum kb_e kb) -{ - - switch (kb) { - case KB_QUIT: - keep_running = 0; - return; - case KB_SIG_INT: - AZ(raise(SIGINT)); - return; - case KB_SIG_TSTP: - AZ(raise(SIGTSTP)); - return; - default: - WRONG("unexpected key binding"); - } -} - -static void -handle_points_keypress(struct vsc *vsc, enum kb_e kb) -{ - - switch (kb) { - case KB_HELP: - show_help = 1; - help_line = 0; - redraw = 1; - return; - case KB_UP: - if (current == 0) - return; - current--; - break; - case KB_DOWN: - if (current == n_ptarray - 1) - return; - current++; - break; - case KB_PAGEUP: - current -= l_points; - page_start -= l_points; - break; - case KB_PAGEDOWN: - current += l_points; - if (page_start + l_points < n_ptarray - 1) - page_start += l_points; - break; - case KB_TOP: - current = 0; - break; - case KB_BOTTOM: - current = n_ptarray - 1; - break; - case KB_UNSEEN: - hide_unseen = 1 - hide_unseen; - rebuild = REBUILD_NEXT; - break; - case KB_RAW: - AN(VSC_Arg(vsc, 'r', NULL)); - raw_vsc = VSC_IsRaw(vsc); - rebuild = REBUILD_NEXT; - break; - case KB_SCALE: - scale = 1 - scale; - rebuild = REBUILD_NEXT; - break; - case KB_ACCEL: - interval += 0.1; - (void)snprintf(notification_message, NOTIF_MAXLEN, - "Refresh interval set to %.1f seconds.", interval); - - notification_eol = VTIM_mono() + 1.25; - break; - case KB_DECEL: - interval -= 0.1; - if (interval < 0.1) - interval = 0.1; - (void)snprintf(notification_message, NOTIF_MAXLEN, - "Refresh interval set to %.1f seconds.", interval); - - notification_eol = VTIM_mono() + 1.25; - break; - case KB_VERBOSE: - verbosity = VSC_ChangeLevel(verbosity, 1); - rebuild = REBUILD_NEXT; - break; - case KB_QUIET: - verbosity = VSC_ChangeLevel(verbosity, -1); - rebuild = REBUILD_NEXT; - break; - case KB_SAMPLE: - sample = 1; - return; - case KB_RESET_AVERAGES: - reset_averages = 1; - return; - case KB_QUIT: - case KB_SIG_INT: - case KB_SIG_TSTP: - handle_common_keypress(kb); - return; - default: - WRONG("unhandled key binding"); - } - - update_position(); - redraw = 1; -} - -static void -handle_help_keypress(enum kb_e kb) -{ - int hl = help_line; - - switch (kb) { - case KB_HELP: - show_help = 0; - redraw = 1; - return; - case KB_UP: - help_line--; - break; - case KB_DOWN: - help_line++; - break; - case KB_PAGEUP: - help_line -= l_points; - break; - case KB_PAGEDOWN: - help_line += l_points; - break; - case KB_TOP: - help_line = 0; - break; - case KB_BOTTOM: - help_line = bindings_help_len; - break; - case KB_UNSEEN: - case KB_RAW: - case KB_SCALE: - case KB_ACCEL: - case KB_DECEL: - case KB_VERBOSE: - case KB_QUIET: - case KB_SAMPLE: - case KB_RESET_AVERAGES: - break; - case KB_QUIT: - case KB_SIG_INT: - case KB_SIG_TSTP: - handle_common_keypress(kb); - return; - default: - WRONG("unhandled key binding"); - } - - help_line = vlimit_t(int, help_line, 0, bindings_help_len - l_points); - redraw = (help_line != hl); -} - -static void -handle_keypress(struct vsc *vsc, int ch) -{ - enum kb_e kb; - - switch (ch) { -#define BINDING_KEY(chr, name, or) \ - case chr: -#define BINDING(name, desc) \ - kb = KB_ ## name; \ - break; -#define BINDING_SIG -#include "varnishstat_bindings.h" - default: - return; - } - - if (show_help) - handle_help_keypress(kb); - else - handle_points_keypress(vsc, kb); -} - -static void * v_matchproto_(VSC_new_f) -newpt(void *priv, const struct VSC_point *const vpt) -{ - struct pt *pt; - - AZ(priv); - ALLOC_OBJ(pt, PT_MAGIC); - rebuild |= REBUILD_NEXT; - AN(pt); - pt->vpt = vpt; - pt->last = VSC_Value(vpt); - pt->ma_10.nmax = 10; - pt->ma_100.nmax = 100; - pt->ma_1000.nmax = 1000; - - VTAILQ_INSERT_TAIL(&ptlist, pt, list); - n_ptlist++; - - AZ(strcmp(vpt->ctype, "uint64_t")); - - if (!strcmp(vpt->name, "MGT.uptime")) - mgt_uptime = vpt->ptr; - if (!strcmp(vpt->name, "MAIN.uptime")) - main_uptime = vpt->ptr; - if (!strcmp(vpt->name, "MAIN.cache_hit")) - main_cache_hit = vpt->ptr; - if (!strcmp(vpt->name, "MAIN.cache_miss")) - main_cache_miss = vpt->ptr; - return (pt); -} - -static void v_matchproto_(VSC_destroy_f) -delpt(void *priv, const struct VSC_point *const vpt) -{ - struct pt *pt; - - AZ(priv); - CAST_OBJ_NOTNULL(pt, vpt->priv, PT_MAGIC); - rebuild |= REBUILD_NEXT; - VTAILQ_REMOVE(&ptlist, pt, list); - n_ptlist--; - FREE_OBJ(pt); - if (vpt->ptr == mgt_uptime) - mgt_uptime = NULL; - if (vpt->ptr == main_uptime) - main_uptime = NULL; - if (vpt->ptr == main_cache_hit) - main_cache_hit = NULL; - if (vpt->ptr == main_cache_miss) - main_cache_miss = NULL; -} - -void -do_curses(struct vsm *vsm, struct vsc *vsc) -{ - long t; - int ch; - double now; - - verbosity = VSC_ChangeLevel(NULL, 0); - - (void)initscr(); - AC(raw()); - AC(noecho()); - AC(nonl()); - IC(curs_set(0)); - - make_windows(); - AC(doupdate()); - - VSC_State(vsc, newpt, delpt, NULL); - - raw_vsc = VSC_IsRaw(vsc); - rebuild |= REBUILD_FIRST; - (void)VSC_Iter(vsc, vsm, NULL, NULL); - build_pt_array(); - init_hitrate(); - - while (keep_running && !VSIG_int && !VSIG_term && !VSIG_hup) { - (void)VSC_Iter(vsc, vsm, NULL, NULL); - vsm_status = VSM_Status(vsm); - if (vsm_status & (VSM_MGT_RESTARTED|VSM_WRK_RESTARTED)) - init_hitrate(); - if (rebuild) - build_pt_array(); - - now = VTIM_mono(); - if (now - t_sample > interval) - sample = 1; - if (sample) - sample_data(); - if (redraw) - draw_screen(); - - t = (long)((t_sample + interval - now) * 1000); - wtimeout(w_status, t); - - ch = wgetch(w_status); - switch (ch) { - case ERR: - break; -#ifdef KEY_RESIZE /* sigh, Solaris lacks this.. */ - case KEY_RESIZE: - make_windows(); - update_position(); - break; -#endif - default: - handle_keypress(vsc, ch); - break; - } - } - VSC_Destroy(&vsc, vsm); - AN(VTAILQ_EMPTY(&ptlist)); - VSM_Destroy(&vsm); - AZ(endwin()); -} diff --git a/bin/varnishstat/varnishstat_help_gen.c b/bin/varnishstat/varnishstat_help_gen.c deleted file mode 100644 index bef1ebb6ef9..00000000000 --- a/bin/varnishstat/varnishstat_help_gen.c +++ /dev/null @@ -1,89 +0,0 @@ -/*- - * Copyright (c) 2020 Varnish Software AS - * All rights reserved. - * - * Author: Dridi Boukelmoune - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include - -#include -#include -#include - -static const char help[] = "\n\n" -#define BINDING_KEY(key, name, next) "<" name ">" next -#define BINDING(name, desc) "\n\n" desc "\n\n" -#include "varnishstat_bindings.h" -; - -int -main(void) -{ - struct vsb *vsb; - const char *p, *n; - unsigned u; - - vsb = VSB_new_auto(); - AN(vsb); - VSB_cat(vsb, - "/*\n" - " * NB: This file is machine generated, DO NOT EDIT!\n" - " *\n" - " * Edit varnishstat_bindings.h and run make instead\n" - " */\n" - "\n" - "#include \n" - "#include \"vdef.h\"\n" - "#include \"varnishstat.h\"\n" - "\n" - "const char *const bindings_help[] = {\n"); - - n = help; - u = 0; - do { - p = n + 1; - n = strchr(p, '\n'); - if (n != NULL && n > p) { - VSB_putc(vsb, '\t'); - VSB_quote(vsb, p, (int)(n - p), VSB_QUOTE_CSTR); - VSB_cat(vsb, ",\n"); - u++; - } - } while (n != NULL); - - VSB_printf(vsb, - "\tNULL\n" - "};\n" - "\n" - "const int bindings_help_len = %u;\n", u); - AZ(VSB_finish(vsb)); - AZ(VSB_tofile(vsb, STDOUT_FILENO)); - VSB_destroy(&vsb); - return (0); -} diff --git a/bin/varnishstat/varnishstat_options.h b/bin/varnishstat/varnishstat_options.h deleted file mode 100644 index 72dddadc24f..00000000000 --- a/bin/varnishstat/varnishstat_options.h +++ /dev/null @@ -1,78 +0,0 @@ -/*- - * Copyright (c) 2016 Varnish Software AS - * All rights reserved. - * - * Author: Federico G. Schwindt - * - * SPDX-License-Identifier: BSD-2-Clause - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Option definitions for varnishstat - */ - -#include "vapi/vapi_options.h" -#include "vut_options.h" - -#define STAT_OPT_1 \ - VOPT("1", "[-1]", "Print the statistics to stdout", \ - "Instead of presenting a continuously updated display," \ - " print the statistics to stdout. This is the default when" \ - "standard output is being redirected" \ - ) -#define STAT_OPT_c \ - VOPT("c", "[-c]", "Live (curses) mode", \ - "Presents a continuously updated, interactive display." \ - " This is the default when the standard output isn't" \ - " redirected." \ - ) -#define STAT_OPT_j \ - VOPT("j", "[-j]", "Print statistics to stdout as JSON", \ - "Print statistics to stdout as JSON." \ - ) -#define STAT_OPT_l \ - VOPT("l", "[-l]", \ - "Lists the available fields to use with the -f option", \ - "Lists the available fields to use with the -f option." \ - ) -#define STAT_OPT_r \ - VOPT("r", "[-r]", "Toggle raw or adjusted gauges", \ - "Toggle raw or adjusted gauges, adjusted is the default." \ - ) -#define STAT_OPT_x \ - VOPT("x", "[-x]", "Print statistics to stdout as XML", \ - "Print statistics to stdout as XML." \ - ) - -STAT_OPT_1 -STAT_OPT_c -VSC_OPT_f -VUT_OPT_h -VSC_OPT_I -STAT_OPT_j -STAT_OPT_l -VUT_OPT_n -STAT_OPT_r -VUT_OPT_t -VUT_GLOBAL_OPT_V -VSC_OPT_X -STAT_OPT_x diff --git a/bin/varnishtest/Makefile.am b/bin/varnishtest/Makefile.am deleted file mode 100644 index 86328732464..00000000000 --- a/bin/varnishtest/Makefile.am +++ /dev/null @@ -1,114 +0,0 @@ -# - -TESTS = @VTC_TESTS@ - -include $(top_srcdir)/vtc.am - -DISTCLEANFILES = _.ok - -AM_CPPFLAGS = \ - -I$(top_srcdir)/include \ - -I$(top_builddir)/include \ - -I$(top_builddir) \ - -I$(top_srcdir)/lib/libvgz \ - -I$(srcdir)/vtest2/lib \ - -I$(srcdir)/vtest2/src - -bin_PROGRAMS = varnishtest - -# for -i invocation / a00000.vtc -all-local: vtest - -vtest: varnishtest - ln -f varnishtest vtest - -install-exec-hook: - ln -f $(DESTDIR)$(bindir)/varnishtest$(EXEEXT) \ - $(DESTDIR)$(bindir)/vtest$(EXEEXT) - -uninstall-hook: - rm -f $(DESTDIR)$(bindir)/vtest$(EXEEXT) - -varnishtest_SOURCES = \ - vtest2/src/hpack.h \ - vtest2/src/cmds.h \ - vtest2/src/vtc.h \ - vtest2/src/teken.c \ - vtest2/src/teken.h \ - vtest2/src/teken_scs.h \ - vtest2/src/teken_subr.h \ - vtest2/src/teken_subr_compat.h \ - vtest2/src/teken_wcwidth.h \ - vtest2/src/vtc.c \ - vtest2/src/vtc_barrier.c \ - vtest2/src/vtc_client.c \ - vtest2/src/vtc_gzip.c \ - vtest2/src/vtc_haproxy.c \ - vtest2/src/vtc_h2_enctbl.h \ - vtest2/src/vtc_h2_hpack.c \ - vtest2/src/vtc_h2_priv.h \ - vtest2/src/vtc_h2_stattbl.h \ - vtest2/src/vtc_h2_tbl.c \ - vtest2/src/vtc_http.c \ - vtest2/src/vtc_http.h \ - vtest2/src/vtc_http2.c \ - vtest2/src/vtc_log.h \ - vtest2/src/vtc_log.c \ - vtest2/src/vtc_logexp.c \ - vtest2/src/vtc_misc.c \ - vtest2/src/vtc_main.c \ - vtest2/src/vtc_process.c \ - vtest2/src/vtc_proxy.c \ - vtest2/src/vtc_server.c \ - vtest2/src/vtc_sess.c \ - vtest2/src/vtc_subr.c \ - vtest2/src/vtc_syslog.c \ - vtest2/src/vtc_tunnel.c \ - vtest2/src/vtc_varnish.c \ - vtest2/src/vtc_vsm.c \ - vtest2/src/vtest_api.h \ - vtest2/lib/vudp.h \ - vtest2/lib/vudp.c - -varnishtest_LDADD = \ - $(top_builddir)/lib/libvarnishapi/libvarnishapi.la \ - $(top_builddir)/lib/libvarnish/libvarnish.la \ - $(top_builddir)/lib/libvgz/libvgz.la \ - ${PTHREAD_LIBS} ${NET_LIBS} ${LIBM} -ldl - -varnishtest_CFLAGS = \ - -DVTEST_WITH_VTC_LOGEXPECT \ - -DVTEST_WITH_VTC_VARNISH \ - -DVTEST_WITH_VTC_VSM \ - -DTOP_BUILDDIR='"${top_builddir}"' - -EXTRA_DIST = $(srcdir)/vtest2/src/../tests/*.vtc \ - $(top_srcdir)/bin/varnishtest/tests/*.vtc \ - $(top_srcdir)/bin/varnishtest/tests/common.pem \ - $(top_srcdir)/bin/varnishtest/tests/README \ - vtest2/src/gensequences \ - vtest2/src/sequences \ - vtest2/src/teken.3 \ - vtest2/src/huffman_gen.py \ - vtest2/src/tbl/vhp_huffman.h - -teken.c: teken_state.h - -teken_state.h: $(srcdir)/vtest2/src/sequences $(srcdir)/vtest2/src/gensequences - awk -f $(srcdir)/vtest2/src/gensequences $(srcdir)/vtest2/src/sequences \ - > $@_ - mv $@_ $@ - -vtc_h2_hpack.c: vtc_h2_dectbl.h -vtc_h2_dectbl.h: $(srcdir)/vtest2/src/huffman_gen.py $(srcdir)/vtest2/src/tbl/vhp_huffman.h - $(PYTHON) $(srcdir)/vtest2/src/huffman_gen.py \ - $(srcdir)/vtest2/src/tbl/vhp_huffman.h > $@_ - mv $@_ $@ - -BUILT_SOURCES = \ - teken_state.h \ - vtc_h2_dectbl.h - -CLEANFILES = \ - $(BUILT_SOURCES) \ - vtest diff --git a/bin/varnishtest/flint.lnt b/bin/varnishtest/flint.lnt deleted file mode 100644 index d8f8159f222..00000000000 --- a/bin/varnishtest/flint.lnt +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2008-2018 Varnish Software AS -// SPDX-License-Identifier: BSD-2-Clause -// See LICENSE file for full text of license - - -+libh(teken.h) - -// Tell FlexeLint when these don't return --function(exit, vtc_fatal) --function(__assert(1), vtc_log(2)) --function(__assert(1), vtc_dump(2)) --function(__assert(1), vtc_hexdump(2)) - --emacro({779}, ENC) // String constant in comparison operator '!=' --emacro({506}, CHKFRAME) // Constant value Boolean - --sem(http_process_cleanup, custodial(1)) - --esym(522, teken_subr_*) - --esym(850, av) - --esym(534, snprintf) // Only for varnishtest, and not really nice - --esym(765, http_cmds) // No, cannot be made static - --e712 // 14 Info 712 Loss of precision (___) (___ to ___) --e747 // 16 Info 747 Significant prototype coercion (___) ___ to ___ - --e445 // Reuse of for loop variable '___' at '___' could cause chaos --e850 // for loop index variable '___' whose type category is '___' is modified in body of the for loop that began at '___' --e443 // for clause irregularity: variable '___' initialized in 1st expression does not match '___' modified in 3rd - --emacro({506,774},FEATURE) --emacro({506,774},STRTOU32_CHECK) - --e679 // Suspicious Truncation in arithmetic expression combining with pointer - --e763 // Redundant declaration for symbol '...' previously declared - -// --e732 // Loss of sign (arg. no. 2) (int to unsigned --e713 // Loss of precision (assignment) (unsigned long long to long long) --emacro(835, STRTOU32_CHECK) // A zero has been given as ___ argument to operator '___' - --e788 // enum value not used in defaulted switch --e801 // goto - --efile(451, cmds.h) --efile(451, vmods.h) --efile(451, programs.h) --efile(451, vtc_h2_stattbl.h) diff --git a/bin/varnishtest/tests/b00000.vtc b/bin/varnishtest/tests/b00000.vtc deleted file mode 100644 index 4982d90b2c6..00000000000 --- a/bin/varnishtest/tests/b00000.vtc +++ /dev/null @@ -1,69 +0,0 @@ -varnishtest "Does anything get through at all ?" - -feature ipv4 -feature ipv6 - -server s1 -listen 127.0.0.1:0 { - rxreq - txresp -body "012345\n" -} -start - -server s2 -listen [::1]:0 { - rxreq - txresp -body "012345\n" -} -start - -varnish v1 -vcl+backend { - sub vcl_recv { - if (req.url == "/1") { - set req.backend_hint = s1; - } else { - set req.backend_hint = s2; - } - } - sub vcl_backend_response { - set beresp.do_stream = false; - } - sub vcl_deliver { - # make s_resp_hdrbytes deterministic - unset resp.http.via; - } -} -start - -varnish v1 -cliok "param.set debug +workspace" -varnish v1 -cliok "param.set debug +witness" - -#varnish v1 -vsc * - -varnish v1 -expect MAIN.n_object == 0 -varnish v1 -expect MAIN.sess_conn == 0 -varnish v1 -expect MAIN.client_req == 0 -varnish v1 -expect MAIN.cache_miss == 0 - -client c1 { - txreq -url "/1" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect n_object == 1 -varnish v1 -expect sess_conn == 1 -varnish v1 -expect client_req == 1 -varnish v1 -expect cache_miss == 1 -varnish v1 -expect s_sess == 1 -varnish v1 -expect s_resp_bodybytes == 7 -varnish v1 -expect s_resp_hdrbytes == 158 -client c1 { - txreq -url "/2" - rxresp - expect resp.status == 200 -} -run - -# varnish v1 -vsc * -varnish v1 -expect n_object == 2 -varnish v1 -expect sess_conn == 2 -varnish v1 -expect client_req == 2 -varnish v1 -expect cache_miss == 2 -varnish v1 -expect s_sess == 2 -varnish v1 -expect s_resp_bodybytes == 14 -varnish v1 -expect s_resp_hdrbytes == 316 diff --git a/bin/varnishtest/tests/b00001.vtc b/bin/varnishtest/tests/b00001.vtc deleted file mode 100644 index db16d4bddad..00000000000 --- a/bin/varnishtest/tests/b00001.vtc +++ /dev/null @@ -1,40 +0,0 @@ -varnishtest "Check that a pipe transaction works" - -server s1 -repeat 1 { - rxreq - expect req.proto == "HTTP/1.0" - expect req.http.connection == "close" - txresp - rxreq - expect req.proto == "nonsense" - expect req.http.connection == "keep-alive" - txresp -} -start - -varnish v1 -vcl+backend { - sub vcl_recv { - return(pipe); - } - - sub vcl_pipe { - if (req.url == "/2") { - set bereq.http.connection = req.http.connection; - } - set bereq.http.xid = bereq.xid; - } -} -start - -client c1 { - txreq -proto HTTP/1.0 -url /1 -hdr "Connection: keep-alive" - rxresp - expect resp.status == 200 - txreq -proto nonsense -url /2 -hdr "Connection: keep-alive" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect n_object == 0 -varnish v1 -expect sess_conn == 1 -varnish v1 -expect client_req == 1 -varnish v1 -expect s_sess == 1 -varnish v1 -expect s_pipe == 1 diff --git a/bin/varnishtest/tests/b00003.vtc b/bin/varnishtest/tests/b00003.vtc deleted file mode 100644 index 435d3efa82d..00000000000 --- a/bin/varnishtest/tests/b00003.vtc +++ /dev/null @@ -1,32 +0,0 @@ -varnishtest "Check that a cache fetch + hit transaction works" - -server s1 { - rxreq - txresp -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 -vcl+backend { } -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1001" -} -run - -client c2 { - txreq -url "/" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1004 1002" -} -run - -# Give varnish a chance to update stats -delay .1 - -varnish v1 -expect sess_conn == 2 -varnish v1 -expect cache_hit == 1 -varnish v1 -expect cache_miss == 1 -varnish v1 -expect client_req == 2 -varnish v1 -expect s_sess == 2 -varnish v1 -expect s_fetch == 1 diff --git a/bin/varnishtest/tests/b00004.vtc b/bin/varnishtest/tests/b00004.vtc deleted file mode 100644 index 2ed2c10ff89..00000000000 --- a/bin/varnishtest/tests/b00004.vtc +++ /dev/null @@ -1,30 +0,0 @@ -varnishtest "Torture Varnish with start/stop commands" - -server s1 { - rxreq -} -start - -varnish v1 -vcl+backend { } - -varnish v1 -start -varnish v1 -cliexpect "running" status -varnish v1 -clijson "status -j" -varnish v1 -stop -varnish v1 -cliexpect "stopped" status -varnish v1 -clijson "status -j" - -varnish v1 -start -varnish v1 -stop - -varnish v1 -start -varnish v1 -stop - -varnish v1 -cliok start -varnish v1 -clierr 300 start -varnish v1 -clierr 300 start - -varnish v1 -cliok stop -varnish v1 -clierr 300 stop -varnish v1 -clierr 300 stop - -varnish v1 -wait diff --git a/bin/varnishtest/tests/b00005.vtc b/bin/varnishtest/tests/b00005.vtc deleted file mode 100644 index 4f83cdcac09..00000000000 --- a/bin/varnishtest/tests/b00005.vtc +++ /dev/null @@ -1,21 +0,0 @@ -varnishtest "Check that -s works" - -server s1 { - rxreq - txresp -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 \ - -arg "-s file,${tmpdir}/varnishtest_backing,10M" \ - -vcl+backend {} -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 -} -run - -server s1 -wait - -varnish v1 -stop -shell "rm ${tmpdir}/varnishtest_backing" diff --git a/bin/varnishtest/tests/b00006.vtc b/bin/varnishtest/tests/b00006.vtc deleted file mode 100644 index c89915b31a7..00000000000 --- a/bin/varnishtest/tests/b00006.vtc +++ /dev/null @@ -1,14 +0,0 @@ -varnishtest "Check that -s default works" - -server s1 { - rxreq - txresp -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 -arg "-s default" -vcl+backend {} -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 -} -run diff --git a/bin/varnishtest/tests/b00008.vtc b/bin/varnishtest/tests/b00008.vtc deleted file mode 100644 index 49d54b37511..00000000000 --- a/bin/varnishtest/tests/b00008.vtc +++ /dev/null @@ -1,53 +0,0 @@ -varnishtest "Test CLI commands and parameter functions" - -varnish v1 -arg "-b ${bad_ip}:9080" - -varnish v1 -cliok "help" - -varnish v1 -cliok "-help" - -varnish v1 -cliok "help -a" - -varnish v1 -cliok "help -d" - -varnish v1 -clierr 101 "help -x" - -varnish v1 -cliok "help vcl.load" - -varnish v1 -clierr 101 "help ban" - -varnish v1 -clierr 101 "FOO?" - -varnish v1 -clierr 100 "\x22" - -varnish v1 -clierr 105 "help 1 2 3" - -varnish v1 -cliok "param.show" - -varnish v1 -start - -varnish v1 -cliok "help" - -varnish v1 -clijson "help -j" - -varnish v1 -cliok "backend.list" - -varnish v1 -clijson "backend.list -j" - -varnish v1 -cliok "ping" - -varnish v1 -clijson "ping -j" - -varnish v1 -clierr 106 "param.set waiter HASH(0x8839c4c)" - -varnish v1 -cliexpect 60 "param.show first_byte_timeout" -varnish v1 -cliok "param.set first_byte_timeout 120" -varnish v1 -cliexpect 120 "param.show first_byte_timeout" -varnish v1 -cliok "param.reset first_byte_timeout" -varnish v1 -cliexpect 60 "param.show first_byte_timeout" - -varnish v1 -cliok "param.set cli_limit 128" - -varnish v1 -clierr 201 "param.show" - -varnish v1 -cliok "\"help\" \"help\"" diff --git a/bin/varnishtest/tests/b00009.vtc b/bin/varnishtest/tests/b00009.vtc deleted file mode 100644 index cbd4b1e722e..00000000000 --- a/bin/varnishtest/tests/b00009.vtc +++ /dev/null @@ -1,18 +0,0 @@ -varnishtest "Check poll acceptor" - -server s1 { - rxreq - txresp -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 -arg "-Wpoll" -vcl+backend {} -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 - delay .1 - txreq -url "/" - rxresp - expect resp.status == 200 -} -run diff --git a/bin/varnishtest/tests/b00010.vtc b/bin/varnishtest/tests/b00010.vtc deleted file mode 100644 index d3654dcf5ed..00000000000 --- a/bin/varnishtest/tests/b00010.vtc +++ /dev/null @@ -1,18 +0,0 @@ -varnishtest "Check simple list hasher" - -server s1 { - rxreq - txresp -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 -arg "-h simple_list" -vcl+backend {} -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 - txreq -url "/" - rxresp - expect resp.status == 200 - expect resp.http.x-varnish == "1003 1002" -} -run diff --git a/bin/varnishtest/tests/b00012.vtc b/bin/varnishtest/tests/b00012.vtc deleted file mode 100644 index 6f81802eab2..00000000000 --- a/bin/varnishtest/tests/b00012.vtc +++ /dev/null @@ -1,30 +0,0 @@ -varnishtest "Check pipelining" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -body "foo" - rxreq - expect req.url == "/bar" - txresp -body "foobar" -} -start - -varnish v1 -vcl+backend {} -start - -client c1 { - send "GET /foo HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\n" - rxresp - expect resp.status == 200 - expect resp.bodylen == 3 - expect resp.http.x-varnish == "1001" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1003" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1005 1004" -} -run - -varnish v1 -expect sess_readahead == 2 diff --git a/bin/varnishtest/tests/b00013.vtc b/bin/varnishtest/tests/b00013.vtc deleted file mode 100644 index 46f56414550..00000000000 --- a/bin/varnishtest/tests/b00013.vtc +++ /dev/null @@ -1,36 +0,0 @@ -varnishtest "Check read-head / partial pipelining" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -body "foo" - rxreq - expect req.url == "/bar" - txresp -body "foobar" -} -start - -varnish v1 -vcl+backend {} - -# NB: The accept_filter param may not exist. -varnish v1 -cli "param.set accept_filter false" -varnish v1 -start - -client c1 { - send "GET /foo HTTP/1.1\r\nHost: foo\r\n\r\nGET " - rxresp - expect resp.status == 200 - expect resp.bodylen == 3 - expect resp.http.x-varnish == "1001" - send "/bar HTTP/1.1\nHost: foo\n\nGET /bar " - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1003" - send "HTTP/1.1\nHost: foo\n\n" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1005 1004" -} -run - -varnish v1 -expect sess_readahead == 2 diff --git a/bin/varnishtest/tests/b00014.vtc b/bin/varnishtest/tests/b00014.vtc deleted file mode 100644 index eb75dfbc6e8..00000000000 --- a/bin/varnishtest/tests/b00014.vtc +++ /dev/null @@ -1,25 +0,0 @@ -varnishtest "Check -f command line arg" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -body "foo" - rxreq - expect req.url == "/bar" - txresp -body "bar" -} -start - -shell "echo 'vcl 4.0; backend foo { .host = \"${s1_addr}\"; .port = \"${s1_port}\"; }' > ${tmpdir}/_b00014.vcl" -varnish v1 -arg "-f ${tmpdir}/_b00014.vcl" -start - -client c1 { - txreq -url /foo - rxresp -} -run - -varnish v1 -cliok "vcl.load foo ${tmpdir}/_b00014.vcl" -cliok "vcl.use foo" - -client c1 { - txreq -url /bar - rxresp -} -run diff --git a/bin/varnishtest/tests/b00015.vtc b/bin/varnishtest/tests/b00015.vtc deleted file mode 100644 index 4e7ff3f3eb1..00000000000 --- a/bin/varnishtest/tests/b00015.vtc +++ /dev/null @@ -1,83 +0,0 @@ -varnishtest "Check synthetic error page caching" - -# First test that an internally generated error is not cached - -varnish v1 -cliok "param.set backend_remote_error_holddown 60" - -varnish v1 -vcl { - backend foo { - .host = "${bad_backend}"; - } -} -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 503 - expect resp.http.X-varnish == "1001" - - txreq -url "/" - rxresp - expect resp.status == 503 - expect resp.http.X-varnish == "1003" -} -run - -varnish v1 -expect VBE.vcl1.foo.fail_econnrefused > 0 -varnish v1 -expect VBE.vcl1.foo.helddown > 0 - -# Then check that a cacheable error from the backend is - -varnish v1 -cliok "ban req.url ~ .*" - -server s1 { - rxreq - txresp -status 301 -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.http.ttl = beresp.ttl; - set beresp.http.uncacheable = beresp.uncacheable; - } -} - -client c2 { - txreq -url "/" - rxresp - expect resp.status == 301 - expect resp.http.X-varnish == "1006" - - txreq -url "/" - rxresp - expect resp.status == 301 - expect resp.http.X-varnish == "1008 1007" -} -run - -server s1 -wait - -# Then check that a non-cacheable error from the backend can be - -server s1 { - rxreq - txresp -status 502 -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - if (beresp.status == 502) { - set beresp.ttl = 10m; - } - } -} - -client c3 { - txreq -url "/2" - rxresp - expect resp.status == 502 - expect resp.http.X-varnish == "1010" - - txreq -url "/2" - rxresp - expect resp.status == 502 - expect resp.http.X-varnish == "1012 1011" -} -run diff --git a/bin/varnishtest/tests/b00017.vtc b/bin/varnishtest/tests/b00017.vtc deleted file mode 100644 index b205a80644e..00000000000 --- a/bin/varnishtest/tests/b00017.vtc +++ /dev/null @@ -1,26 +0,0 @@ -varnishtest "Check set resp.body in vcl_synth" - -varnish v1 -arg "-sTransient=debug,lessspace" -vcl { - backend foo { - .host = "${bad_backend}"; - } - sub vcl_recv { - return (synth(888)); - } - - sub vcl_synth { - set resp.body = "Custom vcl_synth's body"; - return (deliver); - } -} -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 888 - expect resp.http.connection != close - expect resp.bodylen == 23 - expect resp.body == "Custom vcl_synth's body" -} -run - -varnish v1 -expect s_synth == 1 diff --git a/bin/varnishtest/tests/b00018.vtc b/bin/varnishtest/tests/b00018.vtc deleted file mode 100644 index 682c19ca6a9..00000000000 --- a/bin/varnishtest/tests/b00018.vtc +++ /dev/null @@ -1,30 +0,0 @@ -varnishtest "Check that synth response in vcl_backend_response works" - -server s1 { - rxreq - txresp -body "012345\n" -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.http.Foo = "bar"; - set beresp.status = 523; - set beresp.reason = "not ok"; - set beresp.uncacheable = true; - set beresp.ttl = 0s; - return (deliver); - } -} -start - -varnish v1 -cliok "param.set default_grace 0" -varnish v1 -cliok "param.set default_keep 0" - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 523 -} -run - -delay 4 - -varnish v1 -expect n_object == 0 diff --git a/bin/varnishtest/tests/b00019.vtc b/bin/varnishtest/tests/b00019.vtc deleted file mode 100644 index 2ad5849a0f9..00000000000 --- a/bin/varnishtest/tests/b00019.vtc +++ /dev/null @@ -1,51 +0,0 @@ -varnishtest "Check that max_restarts outside vcl_recv works and that we don't fall over" - -server s1 { - rxreq - txresp -body "012345\n" -} -start - -varnish v1 -vcl+backend { - sub vcl_hit { - return (restart); - } - - sub vcl_synth { - # when we end up here, we have _exceeded_ the number - # allowed restarts - if (req.restarts == 3) { - set resp.status = 200; - set resp.reason = "restart=3"; - } elsif (req.restarts > 3) { - set resp.status = 501; - set resp.reason = "restart>3"; - } elsif (req.restarts < 3) { - set resp.status = 500; - set resp.reason = "restart<3"; - } - } -} -start - -varnish v1 -cliok "param.set max_restarts 2" - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -cliok "param.set max_restarts 3" - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 501 -} -run - -varnish v1 -cliok "param.set max_restarts 1" - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 500 -} -run diff --git a/bin/varnishtest/tests/b00020.vtc b/bin/varnishtest/tests/b00020.vtc deleted file mode 100644 index fc7c7c2d888..00000000000 --- a/bin/varnishtest/tests/b00020.vtc +++ /dev/null @@ -1,47 +0,0 @@ -varnishtest "Check that between_bytes_timeout behaves from parameters" - -server s1 { - rxreq - send "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" - delay 1.5 - # send "Baba\n" -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.do_stream = false; - } -} -start -varnish v1 -cliok "param.set between_bytes_timeout 1" - -client c1 { - txreq - rxresp - expect resp.status == 503 -} -run - -delay 1 - -varnish v1 -expect n_object == 0 -varnish v1 -expect n_objectcore == 0 - -server s1 -wait { - non_fatal - rxreq - send "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" - delay 0.5 - send "Baba\n" - delay 0.5 - send "Baba\n" -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - expect resp.bodylen == 10 -} -run - -varnish v1 -expect n_object == 1 -varnish v1 -expect n_objectcore == 1 -varnish v1 -expect fetch_failed == 1 diff --git a/bin/varnishtest/tests/b00024.vtc b/bin/varnishtest/tests/b00024.vtc deleted file mode 100644 index e34817d31a3..00000000000 --- a/bin/varnishtest/tests/b00024.vtc +++ /dev/null @@ -1,48 +0,0 @@ -varnishtest "Check that max_restarts from vcl_recv works and that we don't fall over" - -varnish v1 -vcl { - backend dummy { .host = "${bad_backend}"; } - - sub vcl_recv { - return (restart); - } - - sub vcl_synth { - # when we end up here, we have _exceeded_ the number - # allowed restarts - if (req.restarts == 3) { - set resp.status = 200; - set resp.reason = "restart=3"; - } elsif (req.restarts > 3) { - set resp.status = 501; - set resp.reason = "restart>3"; - } elsif (req.restarts < 3) { - set resp.status = 500; - set resp.reason = "restart<3"; - } - } -} -start - -varnish v1 -cliok "param.set max_restarts 2" - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -cliok "param.set max_restarts 3" - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 501 -} -run - -varnish v1 -cliok "param.set max_restarts 1" - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 500 -} -run diff --git a/bin/varnishtest/tests/b00026.vtc b/bin/varnishtest/tests/b00026.vtc deleted file mode 100644 index e12676985e1..00000000000 --- a/bin/varnishtest/tests/b00026.vtc +++ /dev/null @@ -1,51 +0,0 @@ -varnishtest "Check the precedence for timeouts" - -server s1 { - rxreq - expect req.url == "from_backend" - delay 1 - txresp -} -start -server s2 { - rxreq - expect req.url == "from_vcl" - delay 1.5 - txresp -} -start - -varnish v1 -vcl { - backend b1 { - .host = "${s1_addr}"; - .port = "${s1_port}"; - .first_byte_timeout = 2s; - } - backend b2 { - .host = "${s2_addr}"; - .port = "${s2_port}"; - .first_byte_timeout = 1s; - } - - sub vcl_recv { - if (req.url == "from_backend") { - return(pass); - } - } - sub vcl_backend_fetch { - set bereq.first_byte_timeout = 2s; - if (bereq.url == "from_backend") { - set bereq.backend = b1; - } else { - set bereq.backend = b2; - } - } -} -start -varnish v1 -cliok "param.set first_byte_timeout 0.5" - -client c1 { - txreq -url "from_backend" - rxresp - expect resp.status == 200 - txreq -url "from_vcl" - rxresp - expect resp.status == 200 -} -run diff --git a/bin/varnishtest/tests/b00032.vtc b/bin/varnishtest/tests/b00032.vtc deleted file mode 100644 index 1222339a3b3..00000000000 --- a/bin/varnishtest/tests/b00032.vtc +++ /dev/null @@ -1,38 +0,0 @@ -varnishtest "CLI coverage test" - -varnish v1 -cliok storage.list -varnish v1 -clijson "storage.list -j" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -varnish v1 -cliok vcl.list -varnish v1 -clijson "vcl.list -j" - -varnish v1 -vcl+backend {} -varnish v1 -vcl+backend {} - -varnish v1 -cliok vcl.list -varnish v1 -clijson "vcl.list -j" - -varnish v1 -cliok start - -varnish v1 -cliok vcl.list -varnish v1 -clijson "vcl.list -j" - -varnish v1 -cliok "vcl.use vcl1" - -varnish v1 -clierr 300 "vcl.discard vcl1" - -varnish v1 -clierr 106 "vcl.discard vcl0" - -varnish v1 -clierr 106 {vcl.inline vcl2 "vcl 4.0; backend foo {.host = \"${localhost}\";} "} - -varnish v1 -clierr 106 {vcl.load vcl3 ./nonexistent.vcl} - -varnish v1 -cliok "vcl.discard vcl2" - -varnish v1 -clierr 106 {vcl.load /invalid/name.vcl vcl4} diff --git a/bin/varnishtest/tests/b00034.vtc b/bin/varnishtest/tests/b00034.vtc deleted file mode 100644 index e3ba26b415a..00000000000 --- a/bin/varnishtest/tests/b00034.vtc +++ /dev/null @@ -1,13 +0,0 @@ -varnishtest "mempool param handling" - -server s1 { -} -start - -varnish v1 -vcl+backend {} - -varnish v1 -cliok "param.set pool_req 1,10,1" -varnish v1 -clierr 106 "param.set pool_req 10" -varnish v1 -clierr 106 "param.set pool_req 10,1,1" -varnish v1 -clierr 106 "param.set pool_req a,10,10" -varnish v1 -clierr 106 "param.set pool_req 10,a,10" -varnish v1 -clierr 106 "param.set pool_req 10,10,a" diff --git a/bin/varnishtest/tests/b00036.vtc b/bin/varnishtest/tests/b00036.vtc deleted file mode 100644 index fc1ad0519db..00000000000 --- a/bin/varnishtest/tests/b00036.vtc +++ /dev/null @@ -1,43 +0,0 @@ -varnishtest "builtin purge from vcl_recv{}" - -server s1 { - rxreq - txresp -hdr "foo: 1" - rxreq - txresp -hdr "foo: 2" -} -start - -varnish v1 -vcl+backend { - sub vcl_recv { - if (req.method == "PURGE") { - return (purge); - } - } -} -start - -client c1 { - txreq - rxresp - expect resp.http.foo == 1 - - txreq - rxresp - expect resp.http.foo == 1 - - txreq -req PURGE - rxresp - expect resp.reason == "Purged" - - txreq - rxresp - expect resp.http.foo == 2 - -} -run - -varnish v1 -vsl_catchup - -varnish v1 -expect MAIN.n_purges == 1 -varnish v1 -expect MAIN.n_obj_purged == 1 - -# NB: a purge used to increase n_expired -varnish v1 -expect MAIN.n_expired == 0 diff --git a/bin/varnishtest/tests/b00037.vtc b/bin/varnishtest/tests/b00037.vtc deleted file mode 100644 index e6185bd0764..00000000000 --- a/bin/varnishtest/tests/b00037.vtc +++ /dev/null @@ -1,41 +0,0 @@ -varnishtest "Error on multiple Host headers" - -varnish v1 -vcl {backend be none;} -start -varnish v1 -cliok "param.set debug +syncvsl" - -client c1 { - txreq -hdr "Host: foo" -hdr "Host: bar" - rxresp - expect resp.status == 400 -} -run - -varnish v1 -vsl_catchup -varnish v1 -expect client_req_400 == 1 -varnish v1 -expect sc_rx_bad == 1 - -client c1 { - txreq -method POST -hdr "Content-Length: 12" -hdr "Content-Length: 12" -bodylen 12 - rxresp - expect resp.status == 400 -} -run - -varnish v1 -vsl_catchup -varnish v1 -expect client_req_400 == 2 -varnish v1 -expect sc_rx_bad == 2 - -varnish v1 -cliok "param.set feature +http2" - -client c2 { - stream 7 { - txreq -hdr host foo -hdr host bar - rxresp - expect resp.status == 400 - } -run -} -run - -varnish v1 -vsl_catchup -varnish v1 -expect client_req_400 == 3 - -# H2 with multiple content-length runs into thread-scheduling differences, -# and is unnecessary, as we know the check works from H1 and that it -# will be hit, because H2 with multiple Host: triggered. diff --git a/bin/varnishtest/tests/b00041.vtc b/bin/varnishtest/tests/b00041.vtc deleted file mode 100644 index 8f3107424b2..00000000000 --- a/bin/varnishtest/tests/b00041.vtc +++ /dev/null @@ -1,97 +0,0 @@ -varnishtest "Test varnishadm and the Telnet CLI" - -varnish v1 -vcl {backend foo { .host = "${localhost}"; } } -start - -shell -err -expect {Usage: varnishadm} \ - "varnishadm -7" - -shell -err -expect {Could not get hold of varnishd, is it running?} \ - "varnishadm -n ${v1_name}/nonexistent" - -shell -err -expect {Connection failed} \ - "varnishadm -t 4 -T ${bad_ip}:1 -S ${v1_name}/_.secret" - -server s1 { - send "FOO\n" -} -start - -shell -err -expect {Rejected 400} \ - {varnishadm -T ${s1_sock} -S /etc/group} - -server s1 { - send "107 59 \n" - send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" - send "Authentication required.\n" - send "\n" -} -start - -shell -err -expect {Authentication required} \ - {varnishadm -T ${s1_sock}} - -server s1 { - send "107 59 \n" - send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" - send "Authentication required.\n" - send "\n" -} -start - -shell -err -expect {Cannot open } \ - {varnishadm -T ${s1_sock} -S ${v1_name}/_.nonexistent} - -server s1 { - send "107 59 \n" - send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" - send "Authentication required.\n" - send "\n" - - recv 70 - send "599 0 \n" - send "\n" -} -start - -shell -err -expect {Rejected 599} \ - {varnishadm -T ${s1_sock} -S ${v1_name}/_.secret} - -server s1 { - send "107 59 \n" - send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" - send "Authentication required.\n" - send "\n" - - recv 70 - send "200 0 \n" - send "\n" - - recv 5 -} -start - -shell -err -expect {No pong received from server} \ - {varnishadm -T ${s1_sock} -S ${v1_name}/_.secret} - -server s1 { - send "107 59 \n" - send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" - send "Authentication required.\n" - send "\n" - - recv 70 - send "200 0 \n" - send "\n" - - recv 5 - send "200 8 \n" - send "PONG 12\n" - send "\n" - - recv 5 - send "200 7 \n" - send "Tested\n" - send "\n" -} -start - -shell -expect {Tested} \ - {varnishadm -T ${s1_sock} -S ${v1_name}/_.secret test} - -shell "varnishadm -n ${v1_name} help > /dev/null" - -shell {VARNISH_DEFAULT_N="${v1_name}" varnishadm help > /dev/null} diff --git a/bin/varnishtest/tests/b00042.vtc b/bin/varnishtest/tests/b00042.vtc deleted file mode 100644 index b506139ef81..00000000000 --- a/bin/varnishtest/tests/b00042.vtc +++ /dev/null @@ -1,50 +0,0 @@ -varnishtest "param edge cases" - -varnish v1 -vcl {backend be none;} -start - - -varnish v1 -clierr 106 "param.set default_ttl -1" -varnish v1 -clierr 106 "param.set default_ttl 1x" -varnish v1 -cliok "param.set default_ttl 1s" -varnish v1 -clierr 106 {param.set default_ttl "1 x"} -varnish v1 -cliok {param.set default_ttl "1 s"} -varnish v1 -clierr 106 {param.set acceptor_sleep_decay "0.42 is not a number"} -varnish v1 -clierr 106 "param.set acceptor_sleep_max 20" -varnish v1 -cliok "param.set prefer_ipv6 off" -varnish v1 -cliok "param.set prefer_ipv6 no" -varnish v1 -cliok "param.set prefer_ipv6 disable" -varnish v1 -cliok "param.set prefer_ipv6 false" -varnish v1 -cliok "param.set prefer_ipv6 on" -varnish v1 -cliok "param.set prefer_ipv6 yes" -varnish v1 -cliok "param.set prefer_ipv6 enable" -varnish v1 -cliok "param.set prefer_ipv6 true" -varnish v1 -clierr 106 "param.set prefer_ipv6 foobar" -varnish v1 -clierr 106 "param.set http_max_hdr 0" -varnish v1 -clierr 106 "param.set http_max_hdr 1000000" -varnish v1 -clierr 106 "param.set workspace_thread 1b" -varnish v1 -clierr 106 "param.set workspace_thread 1m" -varnish v1 -clierr 106 "param.set workspace_thread 1x" -varnish v1 -clierr 106 "param.set workspace_thread x" -varnish v1 -clierr 106 "param.set user ///" -varnish v1 -clierr 106 "param.set user ///" -varnish v1 -clierr 106 {param.set pool_sess "\""} -varnish v1 -cliok {param.set thread_pool_max 110} -varnish v1 -clierr 106 {param.set thread_pool_min 111} -varnish v1 -cliok {param.set thread_pool_min 51} -varnish v1 -clierr 106 {param.set thread_pool_max 50} -varnish v1 -cliok {param.set thread_pool_max 51} -varnish v1 -cliok {param.set thread_pool_max unlimited} -varnish v1 -clierr 106 {param.show fofofofo} -varnish v1 -cliok "param.show changed" -varnish v1 -cliok "param.show " -varnish v1 -cliok "param.show -l" - -varnish v1 -clijson "param.show -j pool_req" -varnish v1 -clijson "param.show -j pool_sess" -varnish v1 -clijson "param.show -j changed" -varnish v1 -clijson "param.show -j" -varnish v1 -clijson "param.set -j default_ttl 0" -varnish v1 -clierr 106 "param.show -j -l" -varnish v1 -clierr 106 "param.show -j fofofofo" -varnish v1 -clierr 105 "param.show debug debug" -varnish v1 -clierr 105 "param.show -j debug debug" diff --git a/bin/varnishtest/tests/b00044.vtc b/bin/varnishtest/tests/b00044.vtc deleted file mode 100644 index 463e3830f7a..00000000000 --- a/bin/varnishtest/tests/b00044.vtc +++ /dev/null @@ -1,19 +0,0 @@ -varnishtest "Test/coverage of varnish master signal handling" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -vcl+backend { } -start - -client c1 { - txreq - rxresp -} -run - -server s1 -wait - -shell "kill -15 ${v1_pid}" - -varnish v1 -cleanup diff --git a/bin/varnishtest/tests/b00045.vtc b/bin/varnishtest/tests/b00045.vtc deleted file mode 100644 index 183d30e2f10..00000000000 --- a/bin/varnishtest/tests/b00045.vtc +++ /dev/null @@ -1,31 +0,0 @@ -varnishtest "Check Pid file locking" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -vcl+backend {} -start - -client c1 { - txreq - rxresp -} -run - -delay .2 - -shell -err -expect {Error: Could not open pid-file} { - varnishd -P /dev/tty -b None -a :0 -} - -shell -err -expect {Error: Varnishd is already running} { - varnishd -P ${v1_name}/varnishd.pid -b None -a :0 -} - -shell -err -expect {Error: Varnishd is already running} { - varnishd -b None -a:0 -n ${tmpdir}/v1 -F -} - -shell -err -expect {Error: Varnishd is already running} { - VARNISH_DEFAULT_N="${tmpdir}/v1" varnishd -b None -a:0 -F -} diff --git a/bin/varnishtest/tests/b00046.vtc b/bin/varnishtest/tests/b00046.vtc deleted file mode 100644 index bcdecf27119..00000000000 --- a/bin/varnishtest/tests/b00046.vtc +++ /dev/null @@ -1,36 +0,0 @@ -varnishtest "Check that TCP OOB urgent data doesn't cause ill effects" - -server s1 { - rxreq - send_urgent " " - txresp - send_urgent " " - - rxreq - send_urgent " " - txresp - send_urgent " " -} -start - -# -cli because accept_filter may not be supported -varnish v1 -cli "param.set accept_filter off" - -varnish v1 -vcl+backend {} -start - -client c1 { - delay 0.5 - send_urgent " " - expect_close -} -run - -client c1 { - send_urgent " " - txreq -url /1 - send_urgent " " - rxresp - send_urgent " " - txreq -url /2 - send_urgent " " - rxresp - send_urgent " " -} -run diff --git a/bin/varnishtest/tests/b00050.vtc b/bin/varnishtest/tests/b00050.vtc deleted file mode 100644 index ef9918b5429..00000000000 --- a/bin/varnishtest/tests/b00050.vtc +++ /dev/null @@ -1,61 +0,0 @@ -varnishtest "VXID log filtering" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -arg "-p thread_pools=1" -vcl+backend { } -start - -logexpect l1 -v v1 -q "vxid == 1001" { - expect 0 1001 Begin "req 1000 rxreq" -} -start - -client c1 { - txreq - rxresp -} -run - -logexpect l1 -wait - -# vxid only supports integer operations - -shell -err -expect "Expected vxid operator got '~'" { - varnishlog -n ${v1_name} -d -q 'vxid ~ 1001' -} - -shell -err -expect "Expected vxid operator got '!~'" { - varnishlog -n ${v1_name} -d -q 'vxid !~ 1001' -} - -shell -err -expect "Expected vxid operator got 'eq'" { - varnishlog -n ${v1_name} -d -q 'vxid eq 1001' -} - -shell -err -expect "Expected vxid operator got 'ne'" { - varnishlog -n ${v1_name} -d -q 'vxid ne 1001' -} - -# vxid only supports integer operands - -shell -err -expect "Expected integer got '1001.5'" { - varnishlog -n ${v1_name} -d -q 'vxid != 1001.5' -} - -# vxid doesn't support taglist selection - -shell -err -expect "Unexpected taglist selection for vxid" { - varnishlog -n ${v1_name} -d -q 'vxid[1] >= 1001' -} - -shell -err -expect "Unexpected taglist selection for vxid" { - varnishlog -n ${v1_name} -d -q '{1}vxid <= 1001' -} - -shell -err -expect "Unexpected taglist selection for vxid" { - varnishlog -n ${v1_name} -d -q 'vxid,Link > 1001' -} - -shell -err -expect "Unexpected taglist selection for vxid" { - varnishlog -n ${v1_name} -d -q 'vxid,vxid < 1001' -} diff --git a/bin/varnishtest/tests/b00052.vtc b/bin/varnishtest/tests/b00052.vtc deleted file mode 100644 index 90cba6988c3..00000000000 --- a/bin/varnishtest/tests/b00052.vtc +++ /dev/null @@ -1,60 +0,0 @@ -varnishtest "The cache_hit_grace counter" - -server s1 { - rxreq - expect req.url == "/1" - expect req.http.bgfetch == false - txresp -hdr "Age: 1" -hdr "Cache-Control: max-age=2" -body "1" - - rxreq - expect req.url == "/1" - expect req.http.bgfetch == true - txresp -body "2" - - rxreq - expect req.url == "/2" - expect req.http.bgfetch == false - txresp -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_fetch { - set bereq.http.bgfetch = bereq.is_bgfetch; - } -} -start - -client c1 { - txreq -url "/1" - rxresp - expect resp.body == "1" -} -run - -delay 2 - -# Get a grace hit, will trigger a background fetch - -client c2 { - txreq -url "/1" - rxresp - expect resp.body == "1" -} -run - -varnish v1 -expect cache_hit >= cache_hit_grace - -delay 2 - -client c3 { - txreq -url "/2" - rxresp - txreq -url "/1" - rxresp - expect resp.body == "2" -} -run - -varnish v1 -expect cache_hit >= cache_hit_grace - -# Check that counters are correct: - -varnish v1 -expect cache_hit == 2 -varnish v1 -expect cache_hit_grace == 1 -varnish v1 -expect cache_miss == 2 diff --git a/bin/varnishtest/tests/b00053.vtc b/bin/varnishtest/tests/b00053.vtc deleted file mode 100644 index 166875d235b..00000000000 --- a/bin/varnishtest/tests/b00053.vtc +++ /dev/null @@ -1,84 +0,0 @@ -varnishtest "Does anything get through Unix domain sockets at all ?" - -server s1 -listen "${tmpdir}/s1.sock" { - rxreq - txresp -body "012345\n" -} -start - -varnish v1 -arg "-a ${tmpdir}/v1.sock -a ${listen_addr}" -vcl+backend { - sub vcl_backend_response { - set beresp.do_stream = false; - } - sub vcl_deliver { - # make s_resp_hdrbytes deterministic - unset resp.http.via; - } -} -start - -varnish v1 -cliok "param.set debug +workspace" -varnish v1 -cliok "param.set debug +witness" - -varnish v1 -expect n_object == 0 -varnish v1 -expect sess_conn == 0 -varnish v1 -expect client_req == 0 -varnish v1 -expect cache_miss == 0 - -client c1 -connect "${v1_sock}" { - txreq -url "/" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect n_object == 1 -varnish v1 -expect sess_conn == 1 -varnish v1 -expect client_req == 1 -varnish v1 -expect cache_miss == 1 -varnish v1 -expect s_sess == 1 -varnish v1 -expect s_resp_bodybytes == 7 -varnish v1 -expect s_resp_hdrbytes == 158 - -# varnishtest "vtc v_* macros when the listen address is UDS" (a00019) - -varnish v2 -arg "-a ${tmpdir}/v1.sock -b '${bad_backend}'" -start - -varnish v2 -syntax 4.0 -errvcl {Compiled VCL version (4.0) not supported.} { - backend default None; -} - -varnish v2 -syntax 4.0 -errvcl \ - {Unix socket backends only supported in VCL4.1 and higher.} \ - {backend default { .path = "${tmpdir}/v1.sock"; }} - -varnish v3 -vcl { - backend default None; - - sub vcl_recv { - return(synth(200)); - } - - sub vcl_synth { - set resp.http.addr = "${v1_addr}"; - set resp.http.port = "${v1_port}"; - set resp.http.sock = "${v1_sock}"; - set resp.http.a0_addr = "${v1_a0_addr}"; - set resp.http.a0_port = "${v1_a0_port}"; - set resp.http.a0_sock = "${v1_a0_sock}"; - set resp.http.a1_addr = "${v1_a1_addr}"; - set resp.http.a1_port = "${v1_a1_port}"; - set resp.http.a1_sock = "${v1_a1_sock}"; - } -} -start - -client c1 -connect ${v3_sock} { - txreq - rxresp - expect resp.http.addr == "0.0.0.0" - expect resp.http.port == "0" - expect resp.http.sock == "${tmpdir}/v1.sock" - expect resp.http.a0_addr == "0.0.0.0" - expect resp.http.a0_port == "0" - expect resp.http.a0_sock == "${tmpdir}/v1.sock" - expect resp.http.a1_addr != "0.0.0.0" - expect resp.http.a1_port != "0" - expect resp.http.a1_sock ~ "[^ ]+:[^ ]+" -} -run diff --git a/bin/varnishtest/tests/b00054.vtc b/bin/varnishtest/tests/b00054.vtc deleted file mode 100644 index 4850a563503..00000000000 --- a/bin/varnishtest/tests/b00054.vtc +++ /dev/null @@ -1,18 +0,0 @@ -varnishtest "Check poll acceptor on a UDS listen address" - -server s1 { - rxreq - txresp -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 -arg "-a ${tmpdir}/v1.sock -Wpoll" -vcl+backend {} -start - -client c1 -connect "${tmpdir}/v1.sock" { - txreq -url "/" - rxresp - expect resp.status == 200 - delay .1 - txreq -url "/" - rxresp - expect resp.status == 200 -} -run diff --git a/bin/varnishtest/tests/b00055.vtc b/bin/varnishtest/tests/b00055.vtc deleted file mode 100644 index 076eb1b0665..00000000000 --- a/bin/varnishtest/tests/b00055.vtc +++ /dev/null @@ -1,30 +0,0 @@ -varnishtest "Check pipelining over a UDS listen address" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -body "foo" - rxreq - expect req.url == "/bar" - txresp -body "foobar" -} -start - -varnish v1 -arg "-a ${tmpdir}/v1.sock" -vcl+backend {} -start - -client c1 -connect "${tmpdir}/v1.sock" { - send "GET /foo HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\n" - rxresp - expect resp.status == 200 - expect resp.bodylen == 3 - expect resp.http.x-varnish == "1001" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1003" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1005 1004" -} -run - -varnish v1 -expect sess_readahead == 2 diff --git a/bin/varnishtest/tests/b00056.vtc b/bin/varnishtest/tests/b00056.vtc deleted file mode 100644 index 4da3c7c679b..00000000000 --- a/bin/varnishtest/tests/b00056.vtc +++ /dev/null @@ -1,36 +0,0 @@ -varnishtest "Check read-head / partial pipelining over a UDS listen address" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -body "foo" - rxreq - expect req.url == "/bar" - txresp -body "foobar" -} -start - -varnish v1 -arg "-a ${tmpdir}/v1.sock" -vcl+backend {} - -# NB: The accept_filter param may not exist. -varnish v1 -cli "param.set accept_filter false" -varnish v1 -start - -client c1 -connect "${tmpdir}/v1.sock" { - send "GET /foo HTTP/1.1\r\nHost: foo\r\n\r\nGET " - rxresp - expect resp.status == 200 - expect resp.bodylen == 3 - expect resp.http.x-varnish == "1001" - send "/bar HTTP/1.1\nHost: foo\n\nGET /bar " - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1003" - send "HTTP/1.1\nHost: foo\n\n" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1005 1004" -} -run - -varnish v1 -expect sess_readahead == 2 diff --git a/bin/varnishtest/tests/b00057.vtc b/bin/varnishtest/tests/b00057.vtc deleted file mode 100644 index 9f75edbc57a..00000000000 --- a/bin/varnishtest/tests/b00057.vtc +++ /dev/null @@ -1,22 +0,0 @@ -varnishtest "Test orderly connection closure of a UDS listen socket" - - -server s1 -listen "${tmpdir}/s1.sock" { - rxreq - txresp -nolen -hdr "Transfer-encoding: chunked" - delay .2 - chunkedlen 30000 - delay .2 - chunkedlen 100000 - delay .2 - chunkedlen 0 -} -start - -varnish v1 -arg "-a ${tmpdir}/v1.sock" -vcl+backend { } -start - -client c1 -connect "${tmpdir}/v1.sock" { - txreq -hdr "Connection: close" - delay 3 - rxresp - expect resp.bodylen == 130000 -} -run diff --git a/bin/varnishtest/tests/b00058.vtc b/bin/varnishtest/tests/b00058.vtc deleted file mode 100644 index 034727395d3..00000000000 --- a/bin/varnishtest/tests/b00058.vtc +++ /dev/null @@ -1,12 +0,0 @@ -varnishtest "Test backend definition documentation examples" - -feature cmd {getent hosts localhost && getent services http} - -varnish v1 -arg "-p vcc_feature=-err_unref" -vcl { - backend b1 {.host = "127.0.0.1";} - backend b2 {.host = "[::1]:8080";} - backend b3 {.host = "${localhost} 8081";} - backend b4 {.host = "${localhost} http";} - backend b5 {.host = "127.0.0.1";.port = "8081";} - backend b6 {.host = "127.0.0.1";.port = "http";} -} diff --git a/bin/varnishtest/tests/b00061.vtc b/bin/varnishtest/tests/b00061.vtc deleted file mode 100644 index d06f3c64675..00000000000 --- a/bin/varnishtest/tests/b00061.vtc +++ /dev/null @@ -1,15 +0,0 @@ -varnishtest "-b arg with a Unix domain socket" - -server s1 -listen "${tmpdir}/s1.sock" { - rxreq - txresp -hdr "s1: got it" -} -start - -varnish v1 -arg "-b ${s1_sock}" -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - expect resp.http.s1 == "got it" -} -run diff --git a/bin/varnishtest/tests/b00071.vtc b/bin/varnishtest/tests/b00071.vtc deleted file mode 100644 index e69a9251001..00000000000 --- a/bin/varnishtest/tests/b00071.vtc +++ /dev/null @@ -1,9 +0,0 @@ -varnishtest "varnish-cli pid command" - -varnish v1 -cliexpect "^Master: +[0-9]+\n$" pid -varnish v1 -cliok "pid -j" - -varnish v1 -vcl {backend be none;} -start - -varnish v1 -cliexpect "^Master: +[0-9]+\nWorker: +[0-9]+\n$" pid -varnish v1 -cliok "pid -j" diff --git a/bin/varnishtest/tests/b00078.vtc b/bin/varnishtest/tests/b00078.vtc deleted file mode 100644 index 86178d8a88e..00000000000 --- a/bin/varnishtest/tests/b00078.vtc +++ /dev/null @@ -1,27 +0,0 @@ -varnishtest "deprecated parameters" - -varnish v1 -arg "-b none" -start - -# permanent alias - -varnish v1 -cliok "param.set debug +syncvsl" -varnish v1 -cliexpect "[+]syncvsl" "param.show deprecated_dummy" -varnish v1 -cliexpect "[+]syncvsl" "param.show -j deprecated_dummy" - -shell -err { - varnishadm -n ${v1_name} "param.show" | grep deprecated_dummy -} - -shell -err { - varnishadm -n ${v1_name} "param.show -l" | grep deprecated_dummy -} - -shell -err { - varnishadm -n ${v1_name} "param.show -j" | grep deprecated_dummy -} - -# temporary aliases - -varnish v1 -cliexpect vcc_feature "param.show vcc_allow_inline_c" -varnish v1 -cliexpect vcc_feature "param.show vcc_err_unref" -varnish v1 -cliexpect vcc_feature "param.show vcc_unsafe_path" diff --git a/bin/varnishtest/tests/b00083.vtc b/bin/varnishtest/tests/b00083.vtc deleted file mode 100644 index f648c30e1c9..00000000000 --- a/bin/varnishtest/tests/b00083.vtc +++ /dev/null @@ -1,47 +0,0 @@ -varnishtest "VCP FIN-WAIT2" - -server s1 { - rxreq - txresp - - # Leave the TCP connection open in the FIN-WAIT2 state - delay 1000 -} -start - -server s2 { - rxreq - txresp -} -start - -varnish v1 -vcl { - backend s1 { - .host = "${s1_sock}"; - } -} -start - -# The waiter depend on the backend_idle_timeout for when to give up and -# close the connection, so bump it up a bit. -varnish v1 -cliok "param.set backend_idle_timeout 120" - -# The shutdown is done on the CLI thread, and it blocks until the waiter has -# killed the connection. So bump cli_timeout up as well -varnish v1 -cliok "param.set cli_timeout 120" - -client c1 { - txreq -url "/" - rxresp -} -run - -varnish v1 -vcl { - backend s2 { - .host = "${s2_sock}"; - } -} - -varnish v1 -cliok "vcl.use vcl2" -varnish v1 -cliok "vcl.discard vcl1" - -varnish v1 -expect n_backend == 1 -varnish v1 -expect backend_conn == 1 -varnish v1 -expect backend_reuse == 0 -varnish v1 -expect backend_recycle == 1 diff --git a/bin/varnishtest/tests/b00084.vtc b/bin/varnishtest/tests/b00084.vtc deleted file mode 100644 index d3d5e17f906..00000000000 --- a/bin/varnishtest/tests/b00084.vtc +++ /dev/null @@ -1,44 +0,0 @@ -varnishtest "make sure an already setup secret file remains protected" - -varnish v1 -vcl { backend default none; } -start - -shell -match _.secret { - find "${tmpdir}"/v1/_.secret -perm 0640 -size 256c -} - -varnish v1 -stop -wait - -shell { - test ! -f "${tmpdir}"/v1/_.secret -} - -# since varnishtest destroys workdir silently before startup -# this must fool varnishtest to not manage the workdir -shell -match _.secret { - set -e - mkdir -p "${tmpdir}"/v2/ - touch "${tmpdir}"/v2/_.secret - chmod 0666 "${tmpdir}"/v2/_.secret - find "${tmpdir}"/v2/_.secret -perm 0666 -size 0c -} - -process p1 "exec varnishd -n ${tmpdir}/v2 -F -f '' -a :0" -start - -# wait for startup and check permissions have changed -shell -match _.secret { - set -e - t=50 - while [ "$t" -gt 0 ] && [ ! -d "${tmpdir}"/v2/_.vsm_mgt ]; do - sleep 0.1 - t=$(($t - 1)) - done - find "${tmpdir}"/v2/_.secret -perm 0640 -size 256c -} - -shell "varnishadm -n ${tmpdir}/v2 ping" - -process p1 -stop -wait - -shell { - test ! -f "${tmpdir}"/v2/_.secret -} diff --git a/bin/varnishtest/tests/b00087.vtc b/bin/varnishtest/tests/b00087.vtc deleted file mode 100644 index 75396539836..00000000000 --- a/bin/varnishtest/tests/b00087.vtc +++ /dev/null @@ -1,91 +0,0 @@ -varnishtest "waiter counters" - -# XXX: Waiter implementation for poll & ports do not signal WAITER_REMCLOSE -feature cmd {test $(uname) != SunOS} - -barrier b1 cond 2 -barrier b2 cond 2 -barrier b3 cond 2 -barrier b4 cond 2 -barrier b5 cond 2 - -server s1 { - rxreq - txresp -} -start - -varnish v1 -arg "-p thread_pools=1" -vcl+backend {} -start -varnish v1 -cliok "param.set timeout_linger 0.5" - -varnish v1 -expect WAITER.pool0.conns == 0 -varnish v1 -expect WAITER.pool0.remclose == 0 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 0 - -client c1 { - txreq - rxresp - expect resp.status == 200 - - # Wait so the client has to take a detour to the waiter - barrier b1 sync - barrier b2 sync - - txreq - rxresp - expect resp.status == 200 - - # Wait so the client has to take a detour to the waiter - barrier b3 sync - barrier b4 sync -} -start - -server s1 -wait -barrier b1 sync - -# client c1: conns -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 1 -varnish v1 -expect WAITER.pool0.remclose == 1 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 0 - -barrier b2 sync -barrier b3 sync - -# client c1: conns, action -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 1 -varnish v1 -expect WAITER.pool0.remclose == 1 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 1 - -barrier b4 sync -client c1 -wait - -# client c1: remclose, action -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 0 -varnish v1 -expect WAITER.pool0.remclose == 2 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 1 - -varnish v1 -cliok "param.set timeout_idle 1" - -client c2 { - txreq - rxresp - expect resp.status == 200 - - barrier b5 sync -} -start - -# client c1: remclose, action -# client c2: timeout -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 0 -varnish v1 -expect WAITER.pool0.remclose == 2 -varnish v1 -expect WAITER.pool0.timeout == 1 -varnish v1 -expect WAITER.pool0.action == 1 - -barrier b5 sync diff --git a/bin/varnishtest/tests/b00088.vtc b/bin/varnishtest/tests/b00088.vtc deleted file mode 100644 index 026f6e62734..00000000000 --- a/bin/varnishtest/tests/b00088.vtc +++ /dev/null @@ -1,108 +0,0 @@ -varnishtest "waiter & shutdown" - -# XXX: Waiter implementation for poll & ports do not signal WAITER_REMCLOSE -feature cmd {test $(uname) != SunOS} - -barrier b1 cond 2 -barrier b2 cond 2 -barrier b3 cond 3 -barrier b4 cond 3 - -server s1 { - rxreq - txresp -} -start - -varnish v1 -arg "-p thread_pools=1" -vcl+backend {} -start -varnish v1 -cliok "param.set timeout_linger 0.5" - -varnish v1 -expect WAITER.pool0.conns == 0 -varnish v1 -expect WAITER.pool0.remclose == 0 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 0 - -client c1 { - txreq - rxresp - expect resp.status == 200 - - # Wait so the client has to take a detour to the waiter - barrier b1 sync - barrier b2 sync - - txreq - shutdown -write - rxresp - expect resp.status == 200 - expect_close -} -start - -server s1 -wait -barrier b1 sync - -# client c1: conns -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 1 -varnish v1 -expect WAITER.pool0.remclose == 1 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 0 - -barrier b2 sync -client c1 -wait - -# client c1: action -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 0 -varnish v1 -expect WAITER.pool0.remclose == 1 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 1 - -client c2 { - txreq - rxresp - expect resp.status == 200 - - # Wait so the client has to take a detour to the waiter - barrier b3 sync - barrier b4 sync - - shutdown -read - expect_close -} -start - -client c3 { - txreq - rxresp - expect resp.status == 200 - - # Wait so the client has to take a detour to the waiter - barrier b3 sync - barrier b4 sync - - shutdown - expect_close -} -start - -barrier b3 sync - -# client c1: action -# client c2: conns -# client c3: conns -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 2 -varnish v1 -expect WAITER.pool0.remclose == 1 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 1 - -barrier b4 sync -client c2 -wait -client c3 -wait - -# client c1: action -# client c2: remclose -# client c3: remclose -# server s1: remclose -varnish v1 -expect WAITER.pool0.conns == 0 -varnish v1 -expect WAITER.pool0.remclose == 3 -varnish v1 -expect WAITER.pool0.timeout == 0 -varnish v1 -expect WAITER.pool0.action == 1 diff --git a/bin/varnishtest/tests/b00093.vtc b/bin/varnishtest/tests/b00093.vtc deleted file mode 100644 index 06f05d43f50..00000000000 --- a/bin/varnishtest/tests/b00093.vtc +++ /dev/null @@ -1,43 +0,0 @@ -varnishtest "Check connection pool counters" - -server s1 {} -start -server s2 {} -start - -shell { - cat >${tmpdir}/simple.vcl <<-EOF - vcl 4.1; - backend default { - .host = "${s2_sock}"; - } - EOF -} - -varnish v1 -vcl { - backend default { - .host = "${s1_sock}"; - } -} -start - -# Initially expect a miss -varnish v1 -expect VCP.ref_hit == 0 -varnish v1 -expect VCP.ref_miss == 1 - -varnish v1 -vcl+backend { - sub vcl_recv { - if (req.url ~ "^/blah$") { - set req.backend_hint = s1; - } else { - set req.backend_hint = s2; - } - } -} - -# Expect a hit and a miss -varnish v1 -expect VCP.ref_hit == 1 -varnish v1 -expect VCP.ref_miss == 2 - -varnish v1 -cliok "vcl.load foo ${tmpdir}/simple.vcl" - -# Pure hit -varnish v1 -expect VCP.ref_hit == 2 -varnish v1 -expect VCP.ref_miss == 2 diff --git a/bin/varnishtest/tests/c00000.vtc b/bin/varnishtest/tests/c00000.vtc deleted file mode 100644 index 9da814c4493..00000000000 --- a/bin/varnishtest/tests/c00000.vtc +++ /dev/null @@ -1,32 +0,0 @@ -varnishtest "Built-in split subroutine" - -server s1 { - rxreq - txresp -hdr "age: 12" \ - -hdr "cache-control: public, max-age=10, stale-while-revalidate=20" -} -start - -varnish v1 -vcl+backend { - sub vcl_req_cookie { - return; # trust beresp headers - } - - sub vcl_beresp_stale { - if (beresp.ttl + beresp.grace > 0s) { - return; # cache stale responses - } - } -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - - txreq -hdr "cookie: unrelated=analytics" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect cache_hit == 1 -varnish v1 -expect cache_hit == cache_hit_grace diff --git a/bin/varnishtest/tests/c00002.vtc b/bin/varnishtest/tests/c00002.vtc deleted file mode 100644 index 22cf4641db4..00000000000 --- a/bin/varnishtest/tests/c00002.vtc +++ /dev/null @@ -1,22 +0,0 @@ -varnishtest "Check that all thread pools all get started and get minimum threads" - -server s1 { - rxreq - txresp -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 \ - -arg "-p thread_pool_min=10" \ - -arg "-p thread_pool_max=10" \ - -arg "-p thread_pools=2" - -varnish v1 -vcl+backend {} -start - - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect threads == 20 diff --git a/bin/varnishtest/tests/c00003.vtc b/bin/varnishtest/tests/c00003.vtc deleted file mode 100644 index 6592e2044af..00000000000 --- a/bin/varnishtest/tests/c00003.vtc +++ /dev/null @@ -1,135 +0,0 @@ -varnishtest "Check that we fail to start with erroneous -a/-b arguments" - -# Duplicate -a arguments -# XXX: this cannot be tested reliably, we tolerate port collision -shell -err -match "have same address|already in use|Address in use" { - if echo "${localhost}" | grep ":" >/dev/null ; then - varnishd -d -a "[${localhost}]":38484 -a "[${localhost}]":38484 -b None - else - varnishd -d -a ${localhost}:38484 -a ${localhost}:38484 -b None - fi -} - -shell -err -match "have same address|already in use|Address in use" { - varnishd -d -a ${tmpdir}/vtc.sock -a ${tmpdir}/vtc.sock -b None -} - -# -a bad protocol specs -shell -err -expect "Too many protocol sub-args" { - varnishd -a ${localhost}:80000,PROXY,FOO -d -} -shell -err -expect "Too many protocol sub-args" { - varnishd -a ${localhost}:80000,HTTP,FOO -d -} - -# -a UDS path too long -shell -err -match "Got no socket" { - varnishd -a /Although/sizeof/sockaddr_un/sun_path/is/platform/specific/this/path/is/really/definitely/and/most/assuredly/too/long/on/any/platform/--/any/length/that/results/in/sizeof/sockaddr_un/being/greater/than/128/will/probably/be/enough/to/blow/it/up. -d -} - -# -a relative path for a UDS address not permitted -shell -err -expect "Unix domain socket addresses must be absolute paths" { - varnishd -a foo/bar.sock -d -} - -# -a args for UDS permissions not permitted with IP addresses -shell -err -expect "Invalid sub-arg user=u" { - varnishd -a ${localhost}:80000,user=u -d -} - -shell -err -expect "Invalid sub-arg group=g" { - varnishd -a ${localhost}:80000,group=g -d -} - -shell -err -expect "Invalid sub-arg mode=660" { - varnishd -a ${localhost}:80000,mode=660 -d -} - -shell -err -expect "Invalid sub-arg mode=660" { - varnishd -a @abstract,mode=660 -d -} - -# Illegal mode sub-args -shell -err -expect "Too many mode sub-args" { - varnishd -a ${tmpdir}/vtc.sock,mode=660,mode=600 -d -} - -shell -err -expect "Empty mode sub-arg" { - varnishd -a ${tmpdir}/vtc.sock,mode= -d -} - -shell -err -expect "Invalid mode sub-arg 666devilish" { - varnishd -a ${tmpdir}/vtc.sock,mode=666devilish -d -} - -shell -err -expect "Invalid mode sub-arg devilish" { - varnishd -a ${tmpdir}/vtc.sock,mode=devilish -d -} - -shell -err -expect "Invalid mode sub-arg 999" { - varnishd -a ${tmpdir}/vtc.sock,mode=999 -d -} - -shell -err -expect "Cannot parse mode sub-arg 7" { - varnishd -a ${tmpdir}/vtc.sock,mode=77777777777777777777777777777777 -d -} - -shell -err -expect "Cannot parse mode sub-arg -7" { - varnishd -a ${tmpdir}/vtc.sock,mode=-77777777777777777777777777777777 -d -} - -shell -err -expect "Mode sub-arg 1666 out of range" { - varnishd -a ${tmpdir}/vtc.sock,mode=1666 -d -} - -shell -err -expect "Mode sub-arg 0 out of range" { - varnishd -a ${tmpdir}/vtc.sock,mode=0 -d -} - -shell -err -expect "Mode sub-arg -1 out of range" { - varnishd -a ${tmpdir}/vtc.sock,mode=-1 -d -} - -## -## user and group sub-args tested in c00086.vtc, where the user and group -## features are enabled. -## - -# Invalid sub-arg -shell -err -expect "Invalid sub-arg foo=bar" { - varnishd -a ${tmpdir}/vtc.sock,foo=bar -d -} - -# A sub-arg without '=' is interpreted as a protocol name. -shell -err -expect "Unknown protocol" { - varnishd -a ${tmpdir}/vtc.sock,foobar -d -} - -shell -err -expect "Invalid sub-arg userfoo=u" { - varnishd -a ${tmpdir}/vtc.sock,userfoo=u -d -} - -shell -err -expect "Invalid sub-arg groupfoo=g" { - varnishd -a ${tmpdir}/vtc.sock,groupfoo=g -d -} - -shell -err -expect "Invalid sub-arg modefoo=666" { - varnishd -a ${tmpdir}/vtc.sock,modefoo=666 -d -} - -shell -err -expect "Invalid sub-arg =foo" { - varnishd -a ${tmpdir}/vtc.sock,=foo -d -} - -# This requires non-local binds to be disabled. If you see this fail -# and are on Linux, ensure /proc/net/ipv4/ip_nonlocal_bind is set to 0. - -# All bad listen addresses -shell -err -expect "Error: Could not get socket" { - varnishd -F -a "${bad_ip}:0" -b '***' -} - -# old style address list -shell -err -expect "Unknown protocol" { - varnishd -F -a "${listen_addr},${bad_ip}:0" -b '***' -} diff --git a/bin/varnishtest/tests/c00007.vtc b/bin/varnishtest/tests/c00007.vtc deleted file mode 100644 index ec780cec21d..00000000000 --- a/bin/varnishtest/tests/c00007.vtc +++ /dev/null @@ -1,5 +0,0 @@ -varnishtest "Test banning a hash" - -varnish v1 -arg "-b None" -start - -varnish v1 -clierr 101 "ban.hash foo" diff --git a/bin/varnishtest/tests/c00013.vtc b/bin/varnishtest/tests/c00013.vtc deleted file mode 100644 index be2a734c954..00000000000 --- a/bin/varnishtest/tests/c00013.vtc +++ /dev/null @@ -1,53 +0,0 @@ -varnishtest "Test parking second request on backend delay (waitinglist)" - -barrier b1 cond 2 -barrier b2 cond 2 - -server s1 { - rxreq - expect req.url == "/foo" - send "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" - delay .2 - barrier b1 sync - delay .2 - send "line1\n" - delay .2 - barrier b2 sync - send "line2\n" -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.do_stream = false; - } -} -start - -varnish v1 -cliok "param.set debug +syncvsl" - -client c1 { - txreq -url "/foo" -hdr "client: c1" - rxresp - expect resp.status == 200 - expect resp.bodylen == 12 - expect resp.http.x-varnish == "1001" -} -start - -barrier b1 sync - -client c2 { - txreq -url "/foo" -hdr "client: c2" - delay .2 - barrier b2 sync - rxresp - expect resp.status == 200 - expect resp.bodylen == 12 - expect resp.http.x-varnish == "1004 1002" -} -run - -client c1 -wait - -varnish v1 -vsl_catchup -varnish v1 -expect client_req == 2 -varnish v1 -expect busy_sleep >= 1 -varnish v1 -expect busy_wakeup >= 1 -varnish v1 -stop diff --git a/bin/varnishtest/tests/c00014.vtc b/bin/varnishtest/tests/c00014.vtc deleted file mode 100644 index 6fc238813c6..00000000000 --- a/bin/varnishtest/tests/c00014.vtc +++ /dev/null @@ -1,56 +0,0 @@ -varnishtest "Test parking second request on backend delay, then pass" - -barrier b1 cond 2 - -server s1 { - rxreq - expect req.url == "/foo" - barrier b1 sync - send "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\n" - send "line1\n" - send "line2\n" - - rxreq - expect req.url == "/foo" - txresp -body "foobar" -} -start - -varnish v1 -vcl+backend { - sub vcl_miss { - set req.http.hitmiss = req.is_hitmiss; - } - sub vcl_deliver { - set resp.http.hitmiss = req.http.hitmiss; - } - sub vcl_backend_response { - set beresp.do_stream = false; - set beresp.uncacheable = true; - } -} -start - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.bodylen == 12 - expect resp.http.x-varnish == "1001" - expect resp.http.hitmiss == "false" -} -start - -barrier b1 sync -delay .2 - -client c2 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1004" - expect resp.http.hitmiss == "true" -} -run - -client c1 -wait - -varnish v1 -expect cache_hitpass == 0 -varnish v1 -expect cache_hitmiss == 1 -varnish v1 -expect cache_miss == 2 diff --git a/bin/varnishtest/tests/c00015.vtc b/bin/varnishtest/tests/c00015.vtc deleted file mode 100644 index 1f1e1a47932..00000000000 --- a/bin/varnishtest/tests/c00015.vtc +++ /dev/null @@ -1,62 +0,0 @@ -varnishtest "Test switching VCLs" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -body "foobar" - rxreq - expect req.url == "/foo" - txresp -body "foobar1" -} -start - -varnish v1 -vcl+backend { -} -start - -varnish v1 -vcl+backend { - sub vcl_recv { - return (pass); - } -} - -varnish v1 -cli "vcl.list" -varnish v1 -cli "vcl.use vcl1" - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1001" -} -run - -varnish v1 -cli "vcl.use vcl2" - -client c2 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.bodylen == 7 - expect resp.http.x-varnish == "1004" -} -run - -varnish v1 -cli "vcl.use vcl1" - -client c3 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.bodylen == 6 - expect resp.http.x-varnish == "1007 1002" -} -run - -varnish v1 -cli "vcl.show vcl2" -varnish v1 -cli "vcl.show -v vcl2" -varnish v1 -cli "vcl.discard vcl2" -varnish v1 -cli "vcl.list" -varnish v1 -cli "vcl.show" -varnish v1 -cli "vcl.show -v" -varnish v1 -clierr 106 "vcl.show -x nowhere" -varnish v1 -clierr 106 "vcl.show nothere" -varnish v1 -clierr 106 "vcl.use nothere" -varnish v1 -clierr 106 "vcl.discard nowhere" -varnish v1 -clierr 300 "vcl.discard vcl1" diff --git a/bin/varnishtest/tests/c00019.vtc b/bin/varnishtest/tests/c00019.vtc deleted file mode 100644 index 9c8bd4e559f..00000000000 --- a/bin/varnishtest/tests/c00019.vtc +++ /dev/null @@ -1,96 +0,0 @@ -varnishtest "Check ban counters and duplicate ban elimination" - -server s1 { - rxreq - txresp -hdr "foo: 0" -body "foo0" - rxreq - txresp -hdr "foo: 1" -body "foo1" - rxreq - txresp -hdr "foo: 2" -body "foo2" - rxreq - txresp -hdr "foo: 3" -body "foo3" -} -start - -varnish v1 -vcl+backend {} -start - -varnish v1 -cliok "ban req.url ~ FOO" - -# There is one "magic" ban from boot -varnish v1 -expect bans_added == 2 -varnish v1 -cliok "ban.list" - -# Our fetch is not affected by the ban -# as the FOO-ban was preexisting -client c1 { - txreq -url /BAR - rxresp - expect resp.http.foo == 0 - txreq -url /FOO - rxresp - expect resp.http.foo == 1 -} -run - -varnish v1 -cliok "ban.list" -varnish v1 -expect bans_tested == 0 -varnish v1 -expect bans_tests_tested == 0 - -# Add another ban -varnish v1 -cliok "ban req.url ~ FOO" -varnish v1 -expect bans_added == 3 -varnish v1 -cliok "ban.list" - -# The cached object will be band, and a new -# fetched from the backend -client c1 { - txreq -url /FOO - rxresp - expect resp.http.foo == 2 -} -run - -varnish v1 -expect bans_tested == 1 -varnish v1 -expect bans_tests_tested == 1 -varnish v1 -cliok "ban.list" - -# Fetch the cached copy, just for grins -client c1 { - txreq -url /FOO - rxresp - expect resp.http.foo == 2 -} -run - - -# Now add another two bans, Kilroy should not be hit -varnish v1 -cliok "ban req.url ~ KILROY" -varnish v1 -cliok "ban req.url ~ FOO" -varnish v1 -expect bans_added == 5 - -# Enable dup removal of bans -varnish v1 -cliok "param.set ban_dups on" - -# This should incapacitate the two previous FOO bans. -varnish v1 -cliok "ban req.url ~ FOO" -varnish v1 -expect bans_added == 6 -varnish v1 -expect bans_dups == 3 -varnish v1 -cliok "ban.list" - -# And we should get a fresh object from backend -client c1 { - txreq -url /FOO - rxresp - expect resp.http.foo == 3 -} -run - -# With only two objects having ever been compared -varnish v1 -expect bans_tested == 2 -varnish v1 -expect bans_tests_tested == 2 -varnish v1 -cliok "ban.list" -varnish v1 -clijson "ban.list -j" - -# Test a bogus regexp -varnish v1 -clierr 106 "ban req.url ~ [[[" - -# Ban expression with quoting -varnish v1 -cliok {ban req.url ~ "BAR"} -shell {varnishadm -n ${tmpdir}/v1 ban 'obj.http.Host ~ \"Foo\"'} -varnish v1 -cliexpect {(?s)\d+\.\d+\s+\d+\s+-\s+\Qobj.http.Host ~ "Foo"\E} "ban.list" -varnish v1 -clijson "ban.list -j" diff --git a/bin/varnishtest/tests/c00020.vtc b/bin/varnishtest/tests/c00020.vtc deleted file mode 100644 index efcfe2454be..00000000000 --- a/bin/varnishtest/tests/c00020.vtc +++ /dev/null @@ -1,72 +0,0 @@ -varnishtest "Test -h critbit a bit" - -server s1 { - rxreq - expect req.url == "/" - txresp -hdr "ID: slash" -hdr "Connection: close" -body "012345\n" -} -start - -varnish v1 -arg "-hcritbit" -vcl+backend { } -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1001" - expect resp.http.ID == "slash" -} -run -delay .1 - -client c2 { - txreq -url "/" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1004 1002" - expect resp.http.ID == "slash" -} -run -delay .1 - -server s1 { - rxreq - expect req.url == "/foo" - txresp -hdr "ID: foo" -body "012345\n" - rxreq - expect req.url == "/bar" - txresp -hdr "ID: bar" -body "012345\n" -} -start - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1006" - expect resp.http.ID == "foo" - delay .1 - - txreq -url "/" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1008 1002" - expect resp.http.ID == "slash" - delay .1 - - txreq -url "/bar" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1009" - expect resp.http.ID == "bar" - delay .1 - - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.X-Varnish == "1011 1007" - expect resp.http.ID == "foo" -} -run - -varnish v1 -expect sess_conn == 3 -varnish v1 -expect cache_hit == 3 -varnish v1 -expect cache_miss == 3 -varnish v1 -expect client_req == 6 -varnish v1 -expect s_sess == 3 -varnish v1 -expect s_fetch == 3 diff --git a/bin/varnishtest/tests/c00021.vtc b/bin/varnishtest/tests/c00021.vtc deleted file mode 100644 index d1aff787587..00000000000 --- a/bin/varnishtest/tests/c00021.vtc +++ /dev/null @@ -1,123 +0,0 @@ -varnishtest "Test banning a url with cli:ban" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -hdr "foo: bar5" -body "1111\n" - - rxreq - expect req.url == "/foo" - txresp -hdr "foo: bar6" -body "11111\n" - - rxreq - expect req.url == "/foo" - txresp -hdr "foo: bar7" -body "111111\n" - - rxreq - expect req.url == "/foo" - txresp -hdr "foo: bar8" -body "1111111\n" -} -start - -varnish v1 -vcl+backend { } -start - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar5 - expect resp.bodylen == 5 -} -run - -# syntax checks -varnish v1 -clierr 104 "ban" -varnish v1 -clierr 104 "ban foo" -varnish v1 -clierr 104 "ban foo bar" -varnish v1 -clierr 106 "ban a b c && a" -varnish v1 -clierr 106 "ban a b c && a b" -varnish v1 -clierr 106 "ban a b c || a b c" -varnish v1 -cliok "ban.list" - -# exact match, not matching -varnish v1 -cliok "ban req.url == foo" -varnish v1 -cliok "ban.list" - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar5 - expect resp.bodylen == 5 -} -run - -# exact match, matching -varnish v1 -cliok "ban req.url == /foo" -varnish v1 -cliok "ban.list" -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar6 - expect resp.bodylen == 6 -} -run - -# regexp nonmatch -varnish v1 -cliok "ban req.url ~ bar" -varnish v1 -cliok "ban.list" - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar6 - expect resp.bodylen == 6 -} -run - - -# regexp match -varnish v1 -cliok "ban req.url ~ foo" -varnish v1 -cliok "ban.list" - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar7 - expect resp.bodylen == 7 -} -run - -# header check, nonmatch -varnish v1 -cliok "ban obj.http.foo != bar7" -varnish v1 -cliok "ban.list" - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar7 - expect resp.bodylen == 7 -} -run - -# header check, match -varnish v1 -cliok "ban req.http.foo == barcheck" -varnish v1 -cliok "ban.list" - -client c1 { - txreq -url "/foo" -hdr "foo: barcheck" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar8 - expect resp.bodylen == 8 -} -run - -# header check, no header -varnish v1 -cliok "ban req.url ~ foo && obj.http.bar == barcheck" -varnish v1 -cliok "ban.list" -varnish v1 -clijson "ban.list -j" - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 - expect resp.http.foo == bar8 - expect resp.bodylen == 8 -} -run diff --git a/bin/varnishtest/tests/c00023.vtc b/bin/varnishtest/tests/c00023.vtc deleted file mode 100644 index 74b3cc09aad..00000000000 --- a/bin/varnishtest/tests/c00023.vtc +++ /dev/null @@ -1,152 +0,0 @@ -varnishtest "Test -h critbit for digest edges" - -server s1 { - rxreq - expect req.url == "/1" - txresp -body "\n" - rxreq - expect req.url == "/2" - txresp -body "x\n" - rxreq - expect req.url == "/3" - txresp -body "xx\n" - rxreq - expect req.url == "/4" - txresp -body "xxx\n" - rxreq - expect req.url == "/5" - txresp -body "xxxx\n" - rxreq - expect req.url == "/6" - txresp -body "xxxxx\n" - rxreq - expect req.url == "/7" - txresp -body "xxxxxx\n" - rxreq - expect req.url == "/8" - txresp -body "xxxxxxx\n" - rxreq - expect req.url == "/9" - txresp -body "xxxxxxxx\n" -} -start - -varnish v1 -arg "-hcritbit" -vcl+backend { } -start -varnish v1 -cliok "param.set debug +hashedge" - -client c1 { - txreq -url "/1" - rxresp - expect resp.status == 200 - expect resp.bodylen == 1 - expect resp.http.X-Varnish == "1001" - - txreq -url "/2" - rxresp - expect resp.bodylen == 2 - expect resp.status == 200 - expect resp.http.X-Varnish == "1003" - - txreq -url "/3" - rxresp - expect resp.bodylen == 3 - expect resp.status == 200 - expect resp.http.X-Varnish == "1005" - - txreq -url "/4" - rxresp - expect resp.bodylen == 4 - expect resp.status == 200 - expect resp.http.X-Varnish == "1007" - - txreq -url "/5" - rxresp - expect resp.bodylen == 5 - expect resp.status == 200 - expect resp.http.X-Varnish == "1009" - - txreq -url "/6" - rxresp - expect resp.bodylen == 6 - expect resp.status == 200 - expect resp.http.X-Varnish == "1011" - - txreq -url "/7" - rxresp - expect resp.bodylen == 7 - expect resp.status == 200 - expect resp.http.X-Varnish == "1013" - - txreq -url "/8" - rxresp - expect resp.bodylen == 8 - expect resp.status == 200 - expect resp.http.X-Varnish == "1015" - - txreq -url "/9" - rxresp - expect resp.bodylen == 9 - expect resp.status == 200 - expect resp.http.X-Varnish == "1017" -} -run - - -client c1 { - txreq -url "/1" - rxresp - expect resp.status == 200 - expect resp.bodylen == 1 - expect resp.http.X-Varnish == "1020 1002" - - txreq -url "/2" - rxresp - expect resp.bodylen == 2 - expect resp.status == 200 - expect resp.http.X-Varnish == "1021 1004" - - txreq -url "/3" - rxresp - expect resp.bodylen == 3 - expect resp.status == 200 - expect resp.http.X-Varnish == "1022 1006" - - txreq -url "/4" - rxresp - expect resp.bodylen == 4 - expect resp.status == 200 - expect resp.http.X-Varnish == "1023 1008" - - txreq -url "/5" - rxresp - expect resp.bodylen == 5 - expect resp.status == 200 - expect resp.http.X-Varnish == "1024 1010" - - txreq -url "/6" - rxresp - expect resp.bodylen == 6 - expect resp.status == 200 - expect resp.http.X-Varnish == "1025 1012" - - txreq -url "/7" - rxresp - expect resp.bodylen == 7 - expect resp.status == 200 - expect resp.http.X-Varnish == "1026 1014" - - txreq -url "/8" - rxresp - expect resp.bodylen == 8 - expect resp.status == 200 - expect resp.http.X-Varnish == "1027 1016" - - txreq -url "/9" - rxresp - expect resp.bodylen == 9 - expect resp.status == 200 - expect resp.http.X-Varnish == "1028 1018" -} -run - -varnish v1 -expect sess_conn == 2 -varnish v1 -expect cache_hit == 9 -varnish v1 -expect cache_miss == 9 -varnish v1 -expect client_req == 18 diff --git a/bin/varnishtest/tests/c00029.vtc b/bin/varnishtest/tests/c00029.vtc deleted file mode 100644 index abec8d85a2d..00000000000 --- a/bin/varnishtest/tests/c00029.vtc +++ /dev/null @@ -1,21 +0,0 @@ -varnishtest "Out of thread workspace when opening V1L on the backend side" - -server s1 { - non_fatal - rxreq -} -start - -varnish v1 -vcl+backend { - import debug; - - sub vcl_backend_fetch { - set bereq.filters += " debug.awshog"; - return (fetch); - } -} -start - -client c1 { - txreq -req "POST" -body "abc" - rxresp - expect resp.status == 503 -} -run diff --git a/bin/varnishtest/tests/c00031.vtc b/bin/varnishtest/tests/c00031.vtc deleted file mode 100644 index de30c6d6b01..00000000000 --- a/bin/varnishtest/tests/c00031.vtc +++ /dev/null @@ -1,14 +0,0 @@ -varnishtest "Worker thread stack size setting" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -arg "-p thread_pool_stack=262144" -vcl+backend {} -start - -client c1 { - txreq -url "/" - rxresp - expect resp.status == 200 -} -run diff --git a/bin/varnishtest/tests/c00035.vtc b/bin/varnishtest/tests/c00035.vtc deleted file mode 100644 index f063096e7bd..00000000000 --- a/bin/varnishtest/tests/c00035.vtc +++ /dev/null @@ -1,42 +0,0 @@ -varnishtest "Dropping polling of a backend" - -server s1 -repeat 40 { - non_fatal - rxreq - txresp -} -start - -varnish v1 -vcl { - probe default { - .window = 8; - .initial = 7; - .threshold = 8; - .interval = 0.1s; - } - backend s1 { - .host = "${s1_addr}"; - .port = "${s1_port}"; - } -} -start - -delay 1 - -varnish v1 -vcl+backend { } -cliok "vcl.use vcl2" -cliok "vcl.discard vcl1" - -delay 1 - -varnish v1 -cliok "vcl.list" -varnish v1 -cliok "backend.list -p" - -server s1 -break { - rxreq - expect req.url == /foo - txresp -bodylen 4 -} -start - -client c1 { - txreq -url /foo - rxresp - expect resp.status == 200 - expect resp.bodylen == 4 -} -run diff --git a/bin/varnishtest/tests/c00044.vtc b/bin/varnishtest/tests/c00044.vtc deleted file mode 100644 index 5701cf47f4f..00000000000 --- a/bin/varnishtest/tests/c00044.vtc +++ /dev/null @@ -1,95 +0,0 @@ -varnishtest "Object/LRU/Stevedores" - -server s1 { - rxreq - txresp -bodylen 1048290 - - rxreq - txresp -bodylen 1048291 - - rxreq - txresp -bodylen 1048292 - - rxreq - txresp -bodylen 1047293 - - rxreq - txresp -bodylen 1047294 -} -start - -varnish v1 \ - -arg "-ss1=default,1m" \ - -arg "-ss2=default,1m" \ - -arg "-ss0=default,1m" \ - -arg "-sTransient=default" \ - -vcl+backend { - sub vcl_backend_response { - set beresp.do_stream = false; - # Unset Date header to not change the object sizes - unset beresp.http.Date; - } -} -start - - -client c1 { - txreq -url /foo - rxresp - expect resp.status == 200 - expect resp.bodylen == 1048290 -} -run - -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes == 0 -varnish v1 -expect SM?.s0.g_space > 1000000 -varnish v1 -expect SM?.s1.g_bytes > 1000000 -varnish v1 -expect SM?.s1.g_space < 200 -varnish v1 -expect SM?.s2.g_bytes == 0 -varnish v1 -expect SM?.s2.g_space > 1000000 - -client c1 { - txreq -url /bar - rxresp - expect resp.status == 200 - expect resp.bodylen == 1048291 -} -run - -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes == 0 -varnish v1 -expect SM?.s0.g_space > 1000000 -varnish v1 -expect SM?.s1.g_bytes > 1000000 -varnish v1 -expect SM?.s1.g_space < 200 -varnish v1 -expect SM?.s2.g_bytes > 1000000 -varnish v1 -expect SM?.s2.g_space < 200 - -client c1 { - txreq -url /burp - rxresp - expect resp.status == 200 - expect resp.bodylen == 1048292 -} -run - -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes > 1000000 -varnish v1 -expect SM?.s0.g_space < 200 -varnish v1 -expect SM?.s1.g_bytes > 1000000 -varnish v1 -expect SM?.s1.g_space < 200 -varnish v1 -expect SM?.s2.g_bytes > 1000000 -varnish v1 -expect SM?.s2.g_space < 200 - -client c1 { - txreq -url /foo1 - rxresp - expect resp.status == 200 - expect resp.bodylen == 1047293 -} -run - -varnish v1 -expect n_lru_nuked == 1 - -client c1 { - txreq -url /foo - rxresp - expect resp.status == 200 - expect resp.bodylen == 1047294 -} -run - -varnish v1 -expect n_lru_nuked == 2 diff --git a/bin/varnishtest/tests/c00045.vtc b/bin/varnishtest/tests/c00045.vtc deleted file mode 100644 index 64750332c66..00000000000 --- a/bin/varnishtest/tests/c00045.vtc +++ /dev/null @@ -1,73 +0,0 @@ -varnishtest "Object/LRU/Stevedores with storage set" - -server s1 { - rxreq - txresp -bodylen 1048288 - rxreq - txresp -bodylen 1047289 - rxreq - txresp -bodylen 1047290 -} -start - -varnish v1 \ - -arg "-sdefault,1m" \ - -arg "-sdefault,1m" \ - -arg "-sdefault,1m" \ - -arg "-sTransient=default" \ - -syntax 4.0 \ - -vcl+backend { - sub vcl_backend_response { - set beresp.do_stream = false; - set beresp.storage = storage.s0; - # Unset Date header to not change the object sizes - unset beresp.http.Date; - } -} -start - - -client c1 { - txreq -url /foo - rxresp - expect resp.status == 200 - expect resp.bodylen == 1048288 -} -run - -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes > 1000000 -varnish v1 -expect SM?.s0.g_space < 193 -varnish v1 -expect SM?.s1.g_bytes == 0 -varnish v1 -expect SM?.s1.g_space > 1000000 -varnish v1 -expect SM?.s2.g_bytes == 0 -varnish v1 -expect SM?.s2.g_space > 1000000 - -client c1 { - txreq -url /bar - rxresp - expect resp.status == 200 - expect resp.bodylen == 1047289 -} -run - -varnish v1 -expect n_lru_nuked == 1 -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes > 1000000 -varnish v1 -expect SM?.s0.g_space < 1192 -varnish v1 -expect SM?.s1.g_bytes == 0 -varnish v1 -expect SM?.s1.g_space > 1000000 -varnish v1 -expect SM?.s2.g_bytes == 0 -varnish v1 -expect SM?.s2.g_space > 1000000 - -client c1 { - txreq -url /foo - rxresp - expect resp.status == 200 - expect resp.bodylen == 1047290 -} -run - -varnish v1 -expect n_lru_nuked == 2 -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes > 1000000 -varnish v1 -expect SM?.s0.g_space < 1194 -varnish v1 -expect SM?.s1.g_bytes == 0 -varnish v1 -expect SM?.s1.g_space > 1000000 -varnish v1 -expect SM?.s2.g_bytes == 0 -varnish v1 -expect SM?.s2.g_space > 1000000 diff --git a/bin/varnishtest/tests/c00046.vtc b/bin/varnishtest/tests/c00046.vtc deleted file mode 100644 index a3ce00fa969..00000000000 --- a/bin/varnishtest/tests/c00046.vtc +++ /dev/null @@ -1,78 +0,0 @@ -varnishtest "Object/LRU/Stevedores with storage set and body alloc failures" - -server s1 { - rxreq - txresp -hdr "Connection: close" -bodylen 1000000 -} -start - -varnish v1 \ - -arg "-sdefault,1m" \ - -arg "-sdefault,1m" \ - -arg "-sdefault,1m" \ - -arg "-sTransient=default" \ - -syntax 4.0 \ - -vcl+backend { - sub vcl_backend_response { - set beresp.storage = storage.s0; - } -} -start - - -client c1 { - txreq -url /foo - rxresp - expect resp.status == 200 - expect resp.bodylen == 1000000 -} -run - -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes > 1000000 -varnish v1 -expect SM?.s0.g_space < 100000 -varnish v1 -expect SM?.s1.g_bytes == 0 -varnish v1 -expect SM?.s1.g_space > 1000000 -varnish v1 -expect SM?.s2.g_bytes == 0 -varnish v1 -expect SM?.s2.g_space > 1000000 - -server s1 -wait { - rxreq - non_fatal - txresp -hdr "Connection: close" -bodylen 1000001 -} -start - -client c1 { - txreq -url /bar - rxresp - expect resp.status == 200 - expect resp.bodylen == 1000001 -} -run - -varnish v1 -expect n_lru_nuked == 1 -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes > 1000000 -varnish v1 -expect SM?.s0.g_space < 100000 -varnish v1 -expect SM?.s1.g_bytes == 0 -varnish v1 -expect SM?.s1.g_space > 1000000 -varnish v1 -expect SM?.s2.g_bytes == 0 -varnish v1 -expect SM?.s2.g_space > 1000000 - -server s1 -wait { - rxreq - # non_fatal - txresp -hdr "Connection: close" -bodylen 1000002 -} -start - -client c1 { - txreq -url /foo - rxresp - expect resp.status == 200 - expect resp.bodylen == 1000002 -} -run - -varnish v1 -expect n_lru_nuked == 2 -varnish v1 -expect SM?.Transient.g_bytes == 0 -varnish v1 -expect SM?.s0.g_bytes > 1000000 -varnish v1 -expect SM?.s0.g_space < 100000 -varnish v1 -expect SM?.s1.g_bytes == 0 -varnish v1 -expect SM?.s1.g_space > 1000000 -varnish v1 -expect SM?.s2.g_bytes == 0 -varnish v1 -expect SM?.s2.g_space > 1000000 diff --git a/bin/varnishtest/tests/c00048.vtc b/bin/varnishtest/tests/c00048.vtc deleted file mode 100644 index a5739503ba5..00000000000 --- a/bin/varnishtest/tests/c00048.vtc +++ /dev/null @@ -1,105 +0,0 @@ -varnishtest "Forcing health of backends" - -barrier b1 cond 2 - -server s1 { - # probe - rxreq - txresp - - # req - accept - rxreq - txresp - rxreq - txresp -hdr "Connection: close" - - # probe sick - accept - rxreq - txresp -status 500 - barrier b1 sync - - accept - # req - rxreq - txresp -} -start - -varnish v1 -vcl { - backend s1 { - .host = "${s1_addr}"; - .port = "${s1_port}"; - .probe = { - .window = 8; - .initial = 7; - .threshold = 8; - .interval = 5s; - } - } - - sub vcl_recv { - return(pass); - } - -} -start - -varnish v1 -vsl_catchup - -varnish v1 -cliok "vcl.list" -varnish v1 -cliok "backend.list -p" -varnish v1 -cliok "backend.set_health s1 auto" -varnish v1 -cliok "backend.list -p" - -client c1 { - txreq - rxresp - expect resp.status == 200 -} -run - -varnish v1 -vsl_catchup - -varnish v1 -cliok "backend.list" -varnish v1 -cliok "backend.set_health s1 sick" -varnish v1 -cliok "backend.list" - -client c1 { - txreq - rxresp - expect resp.status == 503 -} -run - -varnish v1 -vsl_catchup - -varnish v1 -cliok "backend.list" -varnish v1 -cliok "backend.set_health s1 healthy" -varnish v1 -cliok "backend.list" - -client c1 { - txreq - rxresp - expect resp.status == 200 -} -run - -# wait for sick probe -barrier b1 sync - -# healthy overrides probe -varnish v1 -cliok "backend.list" - -client c1 { - txreq - rxresp - expect resp.status == 200 -} -run - -varnish v1 -vsl_catchup - -varnish v1 -clierr 106 "backend.set_health s1 foo" -varnish v1 -clierr 106 "backend.set_health s2 foo" -varnish v1 -clierr 106 "backend.set_health s2 auto" -varnish v1 -cliok "vcl.list" -varnish v1 -cliok "backend.list *" -varnish v1 -cliok "backend.list *.foo" -varnish v1 -cliok "backend.list vcl1.*" - diff --git a/bin/varnishtest/tests/c00049.vtc b/bin/varnishtest/tests/c00049.vtc deleted file mode 100644 index 3e6ac286b45..00000000000 --- a/bin/varnishtest/tests/c00049.vtc +++ /dev/null @@ -1,266 +0,0 @@ -varnishtest "New ban-lurker test" - -server s1 { - rxreq - expect req.url == /1 - txresp -hdr "Foo: bar1" - - rxreq - expect req.url == /2 - txresp -hdr "Foo: bar2" - - rxreq - expect req.url == /3 - txresp -hdr "Foo: bar3" - - rxreq - expect req.url == /4 - txresp -hdr "Foo: bar4" - - rxreq - expect req.url == /5 - txresp -hdr "Foo: bar5" - - rxreq - expect req.url == /6 - txresp -hdr "Foo: bar6" - - rxreq - expect req.url == /7 - txresp -hdr "Foo: bar7" - - rxreq - expect req.url == /4 - txresp -hdr "Foo: bar4.1" - - rxreq - expect req.url == /r1 - txresp - rxreq - expect req.url == /r2 - txresp - rxreq - expect req.url == /r3 - txresp -} -start - -varnish v1 -vcl+backend {} -start - -varnish v1 -cliok "param.set ban_lurker_age 0" -varnish v1 -cliok "param.set ban_lurker_sleep 0" -varnish v1 -cliok "param.set debug +lurker" -varnish v1 -cliok "param.set debug +syncvsl" - - -client c1 { - txreq -url /1 - rxresp - expect resp.http.foo == bar1 - - txreq -url /2 - rxresp - expect resp.http.foo == bar2 -} -run - -varnish v1 -cliok "ban obj.http.foo == bar1" - -client c1 { - txreq -url /3 - rxresp - expect resp.http.foo == bar3 -} -run - -varnish v1 -cliok "ban obj.http.foo == bar2 && obj.http.foo != foof" - -client c1 { - txreq -url /4 - rxresp - expect resp.http.foo == bar4 -} -run - -varnish v1 -cliok "ban req.http.kill == yes" - -client c1 { - txreq -url /5 - rxresp - expect resp.http.foo == bar5 -} -run - -varnish v1 -cliok "ban obj.http.foo == bar5" - -client c1 { - txreq -url /6 - rxresp - expect resp.http.foo == bar6 -} -run - -varnish v1 -cliok "ban obj.http.foo == bar6" - -client c1 { - txreq -url /7 - rxresp - expect resp.http.foo == bar7 -} -run - -# Get the VSL out of the way -delay 1 - -varnish v1 -cliok "ban.list" - -varnish v1 -expect bans == 6 -varnish v1 -expect bans_completed == 1 -varnish v1 -expect bans_req == 1 -varnish v1 -expect bans_obj == 4 -varnish v1 -expect bans_added == 6 -varnish v1 -expect bans_deleted == 0 -varnish v1 -expect bans_tested == 0 -varnish v1 -expect bans_tests_tested == 0 -varnish v1 -expect bans_obj_killed == 0 -varnish v1 -expect bans_lurker_tested == 0 -varnish v1 -expect bans_lurker_tests_tested == 0 -varnish v1 -expect bans_lurker_obj_killed == 0 -varnish v1 -expect bans_dups == 0 - - -varnish v1 -cliok "param.set ban_lurker_sleep .01" - -delay 1 - -varnish v1 -cliok "ban.list" - -delay 1 - -varnish v1 -cliok "ban.list" - -varnish v1 -expect bans == 4 -varnish v1 -expect bans_completed == 3 -varnish v1 -expect bans_req == 1 -varnish v1 -expect bans_obj == 3 -varnish v1 -expect bans_added == 6 -varnish v1 -expect bans_deleted == 2 -varnish v1 -expect bans_tested == 0 -varnish v1 -expect bans_tests_tested == 0 -varnish v1 -expect bans_obj_killed == 0 -varnish v1 -expect bans_lurker_tested == 10 -varnish v1 -expect bans_lurker_tests_tested == 11 -varnish v1 -expect bans_lurker_obj_killed == 4 -varnish v1 -expect bans_dups == 0 - -client c1 { - txreq -url /3 - rxresp - expect resp.http.foo == bar3 -} -run - -# Give lurker time to trim tail -delay 1 - -varnish v1 -cliok "ban.list" - -varnish v1 -expect bans == 4 -varnish v1 -expect bans_completed == 3 -varnish v1 -expect bans_req == 1 -varnish v1 -expect bans_obj == 3 -varnish v1 -expect bans_added == 6 -varnish v1 -expect bans_deleted == 2 -varnish v1 -expect bans_tested == 1 -varnish v1 -expect bans_tests_tested == 1 -varnish v1 -expect bans_obj_killed == 0 -varnish v1 -expect bans_lurker_tested == 10 -varnish v1 -expect bans_lurker_tests_tested == 11 -varnish v1 -expect bans_lurker_obj_killed == 4 -varnish v1 -expect bans_dups == 0 - -client c1 { - txreq -url /4 -hdr "kill: yes" - rxresp - expect resp.http.foo == bar4.1 -} -run - -# Give lurker time to trim tail -delay 1 - -varnish v1 -cliok "ban.list" - -varnish v1 -expect bans == 1 -varnish v1 -expect bans_completed == 1 -varnish v1 -expect bans_req == 0 -varnish v1 -expect bans_obj == 1 -varnish v1 -expect bans_added == 6 -varnish v1 -expect bans_deleted == 5 -varnish v1 -expect bans_tested == 2 -varnish v1 -expect bans_tests_tested == 2 -varnish v1 -expect bans_obj_killed == 1 -varnish v1 -expect bans_lurker_tested == 10 -varnish v1 -expect bans_lurker_tests_tested == 11 -varnish v1 -expect bans_lurker_obj_killed == 4 -varnish v1 -expect bans_dups == 0 - -varnish v1 -expect n_object == 3 - -# adding more bans than the cutoff purges all untested objects -# (here: all objects) - -varnish v1 -cliok "param.set ban_lurker_age 2" -varnish v1 -cliok "param.set ban_cutoff 4" - -varnish v1 -cliok "ban.list" -varnish v1 -cliok "ban obj.http.nomatch == 1" -varnish v1 -cliok "ban obj.http.nomatch == 2" -varnish v1 -cliok "ban obj.http.nomatch == 3" -varnish v1 -cliok "ban obj.http.nomatch == 4" -varnish v1 -cliok "ban obj.http.nomatch == 5" -varnish v1 -cliok "ban.list" -varnish v1 -cliok "param.set ban_lurker_age .1" -delay 3 - -varnish v1 -clijson "ban.list -j" -varnish v1 -cliok "ban.list" - -varnish v1 -expect bans == 1 -varnish v1 -expect bans_completed == 1 -varnish v1 -expect bans_req == 0 -varnish v1 -expect bans_obj == 1 -varnish v1 -expect bans_added == 11 -varnish v1 -expect bans_deleted == 10 -varnish v1 -expect bans_tested == 2 -varnish v1 -expect bans_tests_tested == 2 -varnish v1 -expect bans_obj_killed == 1 -varnish v1 -expect bans_lurker_tested == 10 -varnish v1 -expect bans_lurker_tests_tested == 11 -varnish v1 -expect bans_lurker_obj_killed == 4 -varnish v1 -expect bans_lurker_obj_killed_cutoff == 3 -varnish v1 -expect bans_dups == 0 - -varnish v1 -expect n_object == 0 - -client c1 { - txreq -url /r1 - rxresp -} -run - -varnish v1 -cliok "ban req.http.nevermatch == 1" - -client c1 { - txreq -url /r2 - rxresp -} -run - -varnish v1 -cliok "ban req.http.nevermatch == 2" - -client c1 { - txreq -url /r3 - rxresp -} -run - -varnish v1 -cliok "ban req.http.nevermatch == 3" - -varnish v1 -cliok "ban.list" - -varnish v1 -cliok "ban obj.http.status != 0" - -delay 1 - -varnish v1 -cliok "ban.list" - -varnish v1 -expect n_object == 0 diff --git a/bin/varnishtest/tests/c00050.vtc b/bin/varnishtest/tests/c00050.vtc deleted file mode 100644 index 6a3b35d4e13..00000000000 --- a/bin/varnishtest/tests/c00050.vtc +++ /dev/null @@ -1,29 +0,0 @@ -varnishtest "Memory pool gymnastics" - -server s1 { } -start - -varnish v1 -vcl+backend {} -start - -delay 2 - -varnish v1 -expect MEMPOOL.req0.pool == 10 - -varnish v1 -cliok "param.set pool_req 90,100,100" - -delay 2 - -varnish v1 -expect MEMPOOL.req0.pool == 90 - -varnish v1 -cliok "param.set pool_req 50,80,100" - -delay 2 - -varnish v1 -expect MEMPOOL.req0.pool == 80 -varnish v1 -expect MEMPOOL.req0.surplus == 10 - -varnish v1 -cliok "param.set pool_req 10,80,1" - -delay 2 - -varnish v1 -expect MEMPOOL.req0.pool == 10 -varnish v1 -expect MEMPOOL.req0.timeout == 70 diff --git a/bin/varnishtest/tests/c00051.vtc b/bin/varnishtest/tests/c00051.vtc deleted file mode 100644 index 91184d17255..00000000000 --- a/bin/varnishtest/tests/c00051.vtc +++ /dev/null @@ -1,6 +0,0 @@ -varnishtest "test parameter protection" - -varnish v1 -arg "-r cli_timeout" - -varnish v1 -cliok "param.show cli_timeout" -varnish v1 -clierr 107 "param.set cli_timeout 1m" diff --git a/bin/varnishtest/tests/c00052.vtc b/bin/varnishtest/tests/c00052.vtc deleted file mode 100644 index 30a21c8eb78..00000000000 --- a/bin/varnishtest/tests/c00052.vtc +++ /dev/null @@ -1,51 +0,0 @@ -varnishtest "Test disabling inline C code" - -server s1 { - rxreq - txresp -} -start - -varnish v1 - -varnish v1 -cliok "param.set vcc_feature +allow_inline_c" - -varnish v1 -vcl+backend { - C{ /*...*/ }C -} - -varnish v1 -cliok "param.set vcc_feature -allow_inline_c" - -varnish v1 -errvcl {Inline-C not allowed} { - backend default { - .host = "${s1_sock}"; - } - C{ /*...*/ }C -} - -varnish v1 -errvcl {Inline-C not allowed} { - backend default { - .host = "${s1_sock}"; - } - sub vcl_recv { - C{ /*...*/ }C - } -} - -varnish v1 -cliok "param.set vcc_feature +allow_inline_c" - -varnish v1 -vcl+backend { - sub vcl_recv { - C{ /*...*/ }C - } -} - -varnish v1 -vcl+backend { - C{ /*...*/ }C -} - -varnish v1 -start - -client c1 { - txreq - rxresp -} -run diff --git a/bin/varnishtest/tests/c00053.vtc b/bin/varnishtest/tests/c00053.vtc deleted file mode 100644 index 9d10dec2021..00000000000 --- a/bin/varnishtest/tests/c00053.vtc +++ /dev/null @@ -1,74 +0,0 @@ -varnishtest "Test include vs. unsafe_path and include glob-ing" - -server s1 { - rxreq - txresp -} -start - -shell "echo > ${tmpdir}/_.c00053" - -varnish v1 -vcl+backend { - include "${tmpdir}/_.c00053"; -} - -varnish v1 -cliok "param.set vcc_feature -unsafe_path" - -varnish v1 -errvcl {' is unsafe} { - backend default { .host = "${s1_sock}"; } - include "${tmpdir}/_.c00053"; -} - -varnish v1 -cliok "param.set vcl_path ${tmpdir}" - -varnish v1 -vcl+backend { - include "_.c00053"; -} - -shell "rm -f ${tmpdir}/_.c00053" - -# Testing of include +glob - -varnish v1 -cliok "param.set vcc_feature +unsafe_path" - -varnish v1 -errvcl "glob pattern matched no files." { - vcl 4.0; - - include +glob "${tmpdir}/Q*.vcl"; -} - -shell { - echo 'sub vcl_deliver { set resp.http.foo = "foo"; }' > ${tmpdir}/sub_foo.vcl - echo 'sub vcl_deliver { set resp.http.bar = "bar"; }' > ${tmpdir}/sub_bar.vcl - echo 'vcl 4.0; backend default { .host = "0:0"; } include +glob "./sub_*.vcl";' > ${tmpdir}/top.vcl -} - -varnish v1 -vcl+backend { - include +glob "${tmpdir}/sub_*.vcl"; -} -start - -client c1 { - txreq - rxresp - expect resp.http.foo == foo - expect resp.http.bar == bar -} -run - -varnish v1 -errvcl {needs absolute filename of including file.} { - include +glob "./sub_*.vcl"; - backend default none; -} - -varnish v1 -cliok "vcl.load foo ${tmpdir}/top.vcl" -varnish v1 -cliok "vcl.use foo" - -client c1 { - txreq - rxresp - expect resp.http.foo == foo - expect resp.http.bar == bar -} -run - -varnish v1 -errvcl "+glob can only be used with absolute paths or relative paths starting with './'" { - include +glob "sub_*.vcl"; - backend default none; -} diff --git a/bin/varnishtest/tests/c00054.vtc b/bin/varnishtest/tests/c00054.vtc deleted file mode 100644 index b6663977926..00000000000 --- a/bin/varnishtest/tests/c00054.vtc +++ /dev/null @@ -1,25 +0,0 @@ -varnishtest "bitmap params masking" - -varnish v1 -cliok "param.show vsl_mask" -varnish v1 -cliok "param.set vsl_mask -VCL_trace" -varnish v1 -cliok "param.show vsl_mask" -varnish v1 -cliok "param.set vsl_mask -WorkThread,-TTL" -varnish v1 -cliok "param.show vsl_mask" -varnish v1 -cliok "param.set vsl_mask +WorkThread,+TTL,+Hash" -varnish v1 -cliok "param.show vsl_mask" - -varnish v1 -cliexpect {"value": "none"} "param.set -j feature none" -varnish v1 -cliexpect {"value": "all"} "param.set -j feature all" -varnish v1 -cliexpect {"value": "none"} "param.set -j vsl_mask none" -varnish v1 -cliexpect {"value": "all"} "param.set -j vsl_mask all" -varnish v1 -cliexpect {"value": "all(,-\w+)+"} "param.reset -j vsl_mask" - -varnish v1 -clierr 106 "param.set vsl_mask FooBar" -varnish v1 -clierr 106 "param.set vsl_mask -FooBar" -varnish v1 -clierr 106 {param.set vsl_mask \"} - -varnish v1 -cliok "param.set debug +workspace" -varnish v1 -cliok "param.show debug" -varnish v1 -cliok "param.show feature" -varnish v1 -cliok "param.set feature +short_panic" -varnish v1 -cliok "param.show feature" diff --git a/bin/varnishtest/tests/c00057.vtc b/bin/varnishtest/tests/c00057.vtc deleted file mode 100644 index 15e8ad74e25..00000000000 --- a/bin/varnishtest/tests/c00057.vtc +++ /dev/null @@ -1,94 +0,0 @@ -varnishtest "test sigsegv handler" - -# Under ASAN, the stack layout is different and STACK OVERFLOW is -# never printed. -feature !asan - -server s1 { - rxreq - txresp -} -start - -varnish v1 \ - -arg "-p feature=+no_coredump" \ - -arg "-p vcc_feature=+allow_inline_c" \ - -arg "-p thread_pool_stack=128k" \ - -vcl+backend { - C{ -#include -#include -#include - -static void _accessor(volatile char *p) { - p[0] = 'V'; p[1] = '\0'; - fprintf(stderr, "%p %s\n", p, p); -} -static void (*accessor)(volatile char *p) = _accessor; - -}C - sub vcl_recv { C{ - const int stkkb = 128; - int i; - volatile char overflow[stkkb * 1024]; - - /* for downwards stack, take care to hit a single guard page */ - for (i = (stkkb - 1) * 1024; i >= 0; i -= 1024) - accessor(overflow + i); - /* NOTREACHED */ - sleep(2); - }C } -} -start - -client c1 { - txreq - expect_close -} -run - -delay 3 - -varnish v1 -cliexpect "STACK OVERFLOW" "panic.show" -varnish v1 -clijson "panic.show -j" - -varnish v1 -cliok "panic.clear" - -# Also check without the handler -varnish v1 -cliok "param.set sigsegv_handler off" -varnish v1 -vcl+backend {} -start - -client c1 { - txreq - rxresp -} -run - -varnish v1 -expectexit 0x40 - -#################### - -varnish v2 \ - -arg "-p feature=+no_coredump" \ - -arg "-p vcc_feature=+allow_inline_c" \ - -vcl+backend { - - C{ - #include - }C - - sub vcl_recv { C{ - int *i = (void *)VRT_GetHdr; - *i = 42; - }C } -} -start - -client c2 -connect ${v2_sock} { - txreq - expect_close -} -run - -delay 3 - -varnish v2 -cliexpect "[bB]us error|Segmentation [fF]ault" "panic.show" -varnish v2 -clijson "panic.show -j" - -varnish v2 -cliok "panic.clear" - -varnish v2 -expectexit 0x40 diff --git a/bin/varnishtest/tests/c00059.vtc b/bin/varnishtest/tests/c00059.vtc deleted file mode 100644 index 4bee69addcb..00000000000 --- a/bin/varnishtest/tests/c00059.vtc +++ /dev/null @@ -1,194 +0,0 @@ -varnishtest "test ban obj.* except obj.http.*" - -# see c00021.vtc for obj.http.* tests - -server s1 { - rxreq - expect req.url == "/old" - txresp -status 204 - rxreq - txresp -bodylen 1 - rxreq - txresp -bodylen 2 - rxreq - txresp -bodylen 3 - rxreq - txresp -bodylen 4 - rxreq - txresp -bodylen 5 - rxreq - txresp -bodylen 6 - rxreq - txresp -bodylen 7 -} -start - -varnish v1 -vcl+backend { - sub vcl_deliver { - set resp.http.hits = obj.hits; - } -} -start - -client c1 { - txreq -url "/old" - rxresp - expect resp.status == 204 - - txreq -url "/old" - rxresp - expect resp.status == 204 - - txreq - rxresp - expect resp.bodylen == 1 -} -run - -varnish v1 -cliok "ban obj.status == 201" - -client c1 { - txreq - rxresp - expect resp.bodylen == 1 -} -run - -varnish v1 -cliok "ban obj.status == 200" -varnish v1 -cliok "ban.list" -varnish v1 -clijson "ban.list -j" - -client c1 { - txreq - rxresp - expect resp.bodylen == 2 -} -run - -varnish v1 -cliok "ban obj.keep == 0s && obj.ttl > 1d" -varnish v1 -cliok "ban obj.keep == 0s && obj.ttl > 1d" - -# BANS_FLAG_NODEDUP -varnish v1 -cliexpect {(?s) obj\.ttl > 1d\b.*obj\.ttl > 1d\b} "ban.list" - -client c1 { - txreq - rxresp - expect resp.bodylen == 2 -} -run - -varnish v1 -cliok "ban obj.status == 200 && obj.ttl <= 2m" - -client c1 { - txreq - rxresp - expect resp.bodylen == 3 -} -run - -varnish v1 -cliok "ban obj.age > 1d" -varnish v1 -cliok "ban obj.age > 1d" - -# BANS_FLAG_NODEDUP -varnish v1 -cliexpect {(?s) obj\.age > 1d\b.*obj\.age > 1d\b} "ban.list" - -client c1 { - txreq - rxresp - expect resp.bodylen == 3 -} -run - -varnish v1 -cliok "ban obj.status == 200 && obj.age < 1m" - -client c1 { - txreq - rxresp - expect resp.bodylen == 4 -} -run - -varnish v1 -cliok "ban obj.grace != 10s" -varnish v1 -cliok "ban obj.grace != 10s" - -# ! BANS_FLAG_NODEDUP -varnish v1 -cliexpect {(?s) obj\.grace != 10s\b.* \d C\b} "ban.list" - -client c1 { - txreq - rxresp - expect resp.bodylen == 4 -} -run - -varnish v1 -cliok "ban obj.status == 200 && obj.grace == 10s" - -client c1 { - txreq - rxresp - expect resp.bodylen == 5 -} -run - -varnish v1 -cliok "ban obj.keep != 0s" -varnish v1 -cliok "ban obj.keep != 0s" - -# ! BANS_FLAG_NODEDUP -varnish v1 -cliexpect {(?s) obj\.keep != 0s\b.* \d C\b} "ban.list" - -client c1 { - txreq - rxresp - expect resp.bodylen == 5 -} -run - -varnish v1 -cli "param.set ban_lurker_age 0.1" -varnish v1 -cliok "ban obj.status == 200 && obj.keep == 0s" -delay 1 - -client c1 { - txreq - rxresp - expect resp.bodylen == 6 - - txreq - rxresp - expect resp.bodylen == 6 - expect resp.http.hits == 1 -} -run - -# now we should have two objects, /old from the beginning and the len==6 object -varnish v1 -cliexpect { 2 C} "ban.list" -varnish v1 -cli "param.set ban_lurker_age 600" -varnish v1 -cliok "ban obj.last_hit < 1s" - -# /old survives, but len==6 gets removed -client c1 { - txreq -url "/old" - rxresp - expect resp.http.age > 0 - expect resp.http.hits == 2 - - txreq - rxresp - expect resp.bodylen == 7 - expect resp.http.hits == 0 -} -run - -# duration formatting - 0s is being tested above -varnish v1 -cliok "ban obj.keep == 123ms" -varnish v1 -cliexpect {(?s) obj\.keep == 123ms\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 0.456s" -varnish v1 -cliexpect {(?s) obj\.keep == 456ms\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 6.789s" -varnish v1 -cliexpect {(?s) obj\.keep == 6.789s\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 42y" -varnish v1 -cliexpect {(?s) obj\.keep == 42y\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 365d" -varnish v1 -cliexpect {(?s) obj\.keep == 1y\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 9w" -varnish v1 -cliexpect {(?s) obj\.keep == 9w\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 7d" -varnish v1 -cliexpect {(?s) obj\.keep == 1w\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 3d" -varnish v1 -cliexpect {(?s) obj\.keep == 3d\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 24h" -varnish v1 -cliexpect {(?s) obj\.keep == 1d\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 18h" -varnish v1 -cliexpect {(?s) obj\.keep == 18h\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 1.5h" -varnish v1 -cliexpect {(?s) obj\.keep == 90m\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 10m" -varnish v1 -cliexpect {(?s) obj\.keep == 10m\b} "ban.list" -varnish v1 -cliok "ban obj.keep == 0.5m" -varnish v1 -cliexpect {(?s) obj\.keep == 30s\b} "ban.list" diff --git a/bin/varnishtest/tests/c00061.vtc b/bin/varnishtest/tests/c00061.vtc deleted file mode 100644 index 1dba103320e..00000000000 --- a/bin/varnishtest/tests/c00061.vtc +++ /dev/null @@ -1,27 +0,0 @@ -varnishtest "retry in vcl_backend_error" - -varnish v1 -vcl { - - backend b1 { .host = "${bad_backend}"; } - - sub vcl_backend_error { - return (retry); - } - - sub vcl_synth { - set resp.status = 504; - } -} -start - -varnish v1 -cliok "param.set debug +syncvsl" -varnish v1 -cliok "param.set connect_timeout 1" -varnish v1 -cliok "param.set max_retries 2" - -client c1 { - txreq - rxresp - expect resp.status == 504 -} -run - -varnish v1 -expect backend_fail == 3 -varnish v1 -expect fetch_failed == 3 diff --git a/bin/varnishtest/tests/c00062.vtc b/bin/varnishtest/tests/c00062.vtc deleted file mode 100644 index 54e031808d0..00000000000 --- a/bin/varnishtest/tests/c00062.vtc +++ /dev/null @@ -1,32 +0,0 @@ -varnishtest "Check that aborted backend body aborts client in streaming mode" - -barrier b1 cond 2 -barrier b2 cond 2 - -server s1 { - rxreq - txresp -nolen -hdr "Transfer-encoding: chunked" - chunked {} - barrier b1 sync - chunked {} - barrier b2 sync -} -start - -varnish v1 -cliok "param.set debug +syncvsl" -vcl+backend { - -} -start - - -client c1 { - txreq - rxresphdrs - expect resp.status == 200 - rxchunk - barrier b1 sync - rxchunk - barrier b2 sync - expect_close -} -run - - - diff --git a/bin/varnishtest/tests/c00065.vtc b/bin/varnishtest/tests/c00065.vtc deleted file mode 100644 index aed48cd12e8..00000000000 --- a/bin/varnishtest/tests/c00065.vtc +++ /dev/null @@ -1,24 +0,0 @@ -varnishtest "Connection: close in vcl_deliver{}" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -vcl+backend { - sub vcl_deliver { - set resp.http.Connection = "close"; - } -} -start - -client c1 { - txreq - rxresp - expect_close -} -run - -client c1 { - txreq - rxresp - expect_close -} -run diff --git a/bin/varnishtest/tests/c00073.vtc b/bin/varnishtest/tests/c00073.vtc deleted file mode 100644 index 812ac989726..00000000000 --- a/bin/varnishtest/tests/c00073.vtc +++ /dev/null @@ -1,30 +0,0 @@ -varnishtest "Test object trimming" - -barrier b1 cond 2 -barrier b2 cond 2 - -server s1 { - rxreq - txresp -nolen -hdr "Transfer-encoding: chunked" - delay .2 - chunkedlen 4096 - barrier b1 sync - barrier b2 sync - chunkedlen 0 -} -start - -varnish v1 \ - -arg "-s default,1m" -vcl+backend { } -start - -client c1 { - txreq - rxresp -} -start - -barrier b1 sync -varnish v1 -expect SM?.s0.g_bytes > 10000 - -barrier b2 sync - -client c1 -wait -varnish v1 -expect SM?.s0.g_bytes < 6000 diff --git a/bin/varnishtest/tests/c00077.vtc b/bin/varnishtest/tests/c00077.vtc deleted file mode 100644 index d360b78b1bd..00000000000 --- a/bin/varnishtest/tests/c00077.vtc +++ /dev/null @@ -1,70 +0,0 @@ -varnishtest "Switching VCL from VCL" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -vcl+backend { - sub vcl_deliver { - set resp.http.vcl = "vclA"; - } -} -start - -varnish v1 -clierr 106 "vcl.label vcl.A vcl1" -varnish v1 -cliok "vcl.label vclA vcl1" -# labeling twice #2834 -varnish v1 -cliok "vcl.label vclA vcl1" -varnish v1 -cliok "backend.list vcl1.*" - -varnish v1 -vcl+backend { - sub vcl_recv { - if (req.http.vcl == "vcl1") { - return (vcl(vclA)); - } - } - sub vcl_deliver { - set resp.http.vcl = "vcl2"; - } -} -varnish v1 -cliok "vcl.label vclB vcl2" -varnish v1 -cliok "vcl.list" - -client c1 { - txreq - rxresp - expect resp.http.vcl == vcl2 - - txreq -hdr "vcl: vcl1" - rxresp - expect resp.http.vcl == vclA -} -run - -varnish v1 -clierr 300 "vcl.discard vcl1" - -varnish v1 -vcl+backend { sub vcl_recv { return (vcl(vclB)); } } - -client c1 { - txreq -hdr "vcl: vcl1" - rxresp - expect resp.status == 503 -} -run - -delay .2 - -varnish v1 -vcl+backend { import std; sub vcl_recv { return (vcl(vclA)); } } -varnish v1 -vcl+backend { import debug; sub vcl_recv { return (vcl(vclA)); } } -varnish v1 -vcl+backend { sub vcl_recv { return (vcl(vclA)); } } -varnish v1 -vcl+backend { sub vcl_recv { return (vcl(vclA)); } } - -varnish v1 -clierr 300 "vcl.discard vclA" - -varnish v1 -vcl+backend { } - -varnish v1 -clierr 106 "vcl.label vclA vcl3" - -varnish v1 -cliok "vcl.symtab" - -varnish v1 -clierr 300 "vcl.discard vcl*" -varnish v1 -clierr 300 "vcl.discard vcl[1-7]" -varnish v1 -cliok "vcl.discard vcl[1-7] vcl[A-B]" diff --git a/bin/varnishtest/tests/c00078.vtc b/bin/varnishtest/tests/c00078.vtc deleted file mode 100644 index 9f14a77204b..00000000000 --- a/bin/varnishtest/tests/c00078.vtc +++ /dev/null @@ -1,66 +0,0 @@ -varnishtest "Stevedores RR, beresp.storage" - -server s1 -repeat 7 { - rxreq - txresp -} -start - -varnish v1 \ - -arg "-ss1=default,1m" \ - -arg "-ss2=default,1m" \ - -arg "-ss0=default,1m" \ - -syntax 4.0 \ - -vcl+backend { - import vtc; - sub vcl_backend_response { - if (bereq.url == "/2") { - set beresp.storage = storage.s1; - } else if (bereq.url == "/6") { - set beresp.storage = vtc.no_stevedore(); - } else if (bereq.url == "/deprecated") { - set beresp.storage_hint = "s1"; - } - set beresp.http.storage = beresp.storage; - set beresp.http.storage-hint = beresp.storage_hint; - } -} -start - -client c1 { - txreq -url /1 - rxresp - expect resp.http.storage == "storage.s1" - expect resp.http.storage == resp.http.storage-hint - txreq -url /2 - rxresp - expect resp.http.storage == "storage.s1" - expect resp.http.storage == resp.http.storage-hint - txreq -url /3 - rxresp - expect resp.http.storage == "storage.s0" - expect resp.http.storage == resp.http.storage-hint - txreq -url /4 - rxresp - expect resp.http.storage == "storage.s1" - expect resp.http.storage == resp.http.storage-hint - txreq -url /5 - rxresp - expect resp.http.storage == "storage.s2" - expect resp.http.storage == resp.http.storage-hint - txreq -url /6 - rxresp - expect resp.http.storage == - expect resp.http.storage == resp.http.storage-hint - txreq -url /deprecated - rxresp - expect resp.http.storage == "storage.s1" - expect resp.http.storage == resp.http.storage-hint -} -run - -varnish v1 \ - -syntax 4.1 \ - -errvcl "Only available when VCL syntax <= 4.0" { - import vtc; - sub vcl_backend_response { - set beresp.storage_hint = "foo"; - } -} diff --git a/bin/varnishtest/tests/c00079.vtc b/bin/varnishtest/tests/c00079.vtc deleted file mode 100644 index a0d4c2eef00..00000000000 --- a/bin/varnishtest/tests/c00079.vtc +++ /dev/null @@ -1,23 +0,0 @@ -varnishtest "thread_pool_reserve max adjustment" - -server s1 { -} -start - -varnish v1 \ - -arg "-p thread_pool_min=10" \ - -arg "-p thread_pool_max=100" \ - -arg "-p thread_pools=1" \ - -arg "-p thread_pool_timeout=10" \ - -vcl+backend {} -varnish v1 -start - -varnish v1 -cliok "param.set thread_pool_reserve 0" -varnish v1 -cliok "param.set thread_pool_reserve 1" -varnish v1 -cliok "param.set thread_pool_reserve 9" -varnish v1 -clierr 106 "param.set thread_pool_reserve 10" - -varnish v1 -cliok "param.set thread_pool_min 100" -varnish v1 -cliok "param.set thread_pool_reserve 0" -varnish v1 -cliok "param.set thread_pool_reserve 1" -varnish v1 -cliok "param.set thread_pool_reserve 95" -varnish v1 -clierr 106 "param.set thread_pool_reserve 96" diff --git a/bin/varnishtest/tests/c00080.vtc b/bin/varnishtest/tests/c00080.vtc deleted file mode 100644 index e4e15184839..00000000000 --- a/bin/varnishtest/tests/c00080.vtc +++ /dev/null @@ -1,63 +0,0 @@ -varnishtest "Deconfigure thread pool" - -# First with default waiter - -server s1 { - rxreq - txresp -} -start - -varnish v1 -vcl+backend {} -start - -varnish v1 -cliok "param.set experimental +drop_pools" -varnish v1 -cliok "param.set debug +slow_acceptor" -varnish v1 -cliok "param.set thread_pools 1" - -delay 2 - -client c1 -repeat 2 { - txreq - rxresp -} -run - -delay 2 - -varnish v1 -vsc *thr* -varnish v1 -vsc *poo* -varnish v1 -expect MAIN.pools == 1 - -client c1 { - txreq - rxresp -} -run - -# Then with poll waiter - -server s1 { - rxreq - txresp -} -start - -varnish v2 -arg "-Wpoll" -vcl+backend {} -start - -varnish v2 -cliok "param.set experimental +drop_pools" -varnish v2 -cliok "param.set debug +slow_acceptor" -varnish v2 -cliok "param.set thread_pools 1" - -delay 2 - -client c2 -connect ${v2_sock} -repeat 2 { - txreq - rxresp -} -run - -delay 2 - -varnish v2 -vsc *thr* -varnish v2 -vsc *poo* -varnish v2 -expect MAIN.pools == 1 - -client c2 -connect ${v2_sock} { - txreq - rxresp -} -run diff --git a/bin/varnishtest/tests/c00086.vtc b/bin/varnishtest/tests/c00086.vtc deleted file mode 100644 index 0991ee23f79..00000000000 --- a/bin/varnishtest/tests/c00086.vtc +++ /dev/null @@ -1,67 +0,0 @@ -varnishtest "-a sub-args user, group and mode; and warn if stat(EACCES) fails for UDS" - -feature user_vcache -feature group_varnish -feature root - -shell -err -expect "Too many user sub-args" { - varnishd -a ${tmpdir}/vtc.sock,user=vcache,user=vcache -d -} - -shell -err -expect "Too many group sub-args" { - varnishd -a ${tmpdir}/vtc.sock,group=varnish,group=varnish -d -} - -# Assuming that empty user and group names always fail getpwnam and getgrnam -shell -err -expect "Unknown user " { - varnishd -a ${tmpdir}/vtc.sock,user= -d -} - -shell -err -expect "Unknown group " { - varnishd -a ${tmpdir}/vtc.sock,group= -d -} - -server s1 {} -start - -varnish v1 -arg "-a ${tmpdir}/v1.sock,user=vcache,group=varnish,mode=660" \ - -vcl+backend {} - -shell -match "rw-rw----.+vcache.+varnish" { ls -l ${tmpdir}/v1.sock } - -varnish v2 -arg "-a ${tmpdir}/v2.sock,user=vcache,mode=600" -vcl+backend {} - -shell -match "rw-------.+vcache" { ls -l ${tmpdir}/v2.sock } - -varnish v3 -arg "-a ${tmpdir}/v3.sock,group=varnish,mode=660" -vcl+backend {} - -shell -match "rw---- .+root.+varnish" { ls -l ${tmpdir}/v3.sock } - -varnish v4 -arg "-a ${tmpdir}/v4.sock,mode=666" -vcl+backend {} - -shell -match "rw-rw-rw-.+root" { ls -l ${tmpdir}/v4.sock } - -varnish v5 -arg "-a ${tmpdir}/v5.sock,user=vcache,group=varnish" -vcl+backend {} - -shell -match "vcache.+varnish" { ls -l ${tmpdir}/v5.sock } - -varnish v6 -arg "-a ${tmpdir}/v6.sock,user=vcache" -vcl+backend {} - -shell -match "vcache" { ls -l ${tmpdir}/v6.sock } - -varnish v7 -arg "-a ${tmpdir}/v7.sock,group=varnish" -vcl+backend {} - -shell -match "root.+varnish" { ls -l ${tmpdir}/v7.sock } - -# VCC warns, but does not fail, if stat(UDS) fails with EACCES. -shell { mkdir ${tmpdir}/dir } -server s2 -listen ${tmpdir}/dir/s1.sock {} -start - -shell { chmod go-rx ${tmpdir}/dir } - -varnish v8 \ - -jail "-junix,user=varnish,ccgroup=varnish,workuser=vcache" \ - -vcl { backend b None; -} - -varnish v8 -cliexpect "(?s)Cannot stat:.+That was just a warning" \ - {vcl.inline test "vcl 4.1; backend b {.path=\"${tmpdir}/dir/s1.sock\";}"} diff --git a/bin/varnishtest/tests/c00090.vtc b/bin/varnishtest/tests/c00090.vtc deleted file mode 100644 index 189748b78ca..00000000000 --- a/bin/varnishtest/tests/c00090.vtc +++ /dev/null @@ -1,65 +0,0 @@ -varnishtest "Forcing health of backends listening at UDS" - -server s1 -listen "${tmpdir}/s1.sock" -repeat 3 { - rxreq - txresp -} -start - -varnish v1 -vcl { - backend s1 { - .path = "${s1_sock}"; - .probe = { - .window = 8; - .initial = 7; - .threshold = 8; - .interval = 10s; - } - } - - sub vcl_recv { - return(pass); - } - -} -start - -delay 1 - -varnish v1 -cliok "vcl.list" -varnish v1 -cliok "backend.list -p" -varnish v1 -cliok "backend.set_health s1 auto" -varnish v1 -cliok "backend.list -p" - -client c1 { - txreq - rxresp - expect resp.status == 200 -} -run - -varnish v1 -cliok "backend.list" -varnish v1 -cliok "backend.set_health s1 sick" -varnish v1 -cliok "backend.list" - -client c1 { - txreq - rxresp - expect resp.status == 503 -} -run - -varnish v1 -cliok "backend.list" -varnish v1 -cliok "backend.set_health s1 healthy" -varnish v1 -cliok "backend.list" - -client c1 { - txreq - rxresp - expect resp.status == 200 -} -run - -varnish v1 -clierr 106 "backend.set_health s1 foo" -varnish v1 -clierr 106 "backend.set_health s2 foo" -varnish v1 -clierr 106 "backend.set_health s2 auto" -varnish v1 -cliok "vcl.list" -varnish v1 -cliok "backend.list *" -varnish v1 -cliok "backend.list *.foo" -varnish v1 -cliok "backend.list vcl1.*" - diff --git a/bin/varnishtest/tests/c00092.vtc b/bin/varnishtest/tests/c00092.vtc deleted file mode 100644 index 7860d20758c..00000000000 --- a/bin/varnishtest/tests/c00092.vtc +++ /dev/null @@ -1,23 +0,0 @@ -varnishtest "Check aborted backend body with a backend listening at UDS" - -barrier b1 cond 2 - -server s1 -listen "${tmpdir}/s1.sock" { - rxreq - txresp -nolen -hdr "Transfer-encoding: chunked" - chunked {} - barrier b1 sync -} -start - -varnish v1 -cliok "param.set debug +syncvsl" -vcl+backend { - -} -start - -client c1 { - txreq - rxresphdrs - expect resp.status == 200 - rxchunk - barrier b1 sync - expect_close -} -run diff --git a/bin/varnishtest/tests/c00094.vtc b/bin/varnishtest/tests/c00094.vtc deleted file mode 100644 index d0b35efd96e..00000000000 --- a/bin/varnishtest/tests/c00094.vtc +++ /dev/null @@ -1,57 +0,0 @@ -varnishtest "Test Backend Polling with a backend listening at a UDS" - -barrier b1 cond 2 - -server s1 -listen "${tmpdir}/s1.sock" { - timeout 8 - fatal - - # Probes - - loop 8 { - rxreq - expect req.url == "/" - txresp -hdr "Bar: foo" -body "foobar" - accept - } - - loop 3 { - rxreq - expect req.url == "/" - txresp -status 404 -hdr "Bar: foo" -body "foobar" - accept - } - loop 2 { - rxreq - expect req.url == "/" - txresp -proto "FROBOZ" -status 200 -hdr "Bar: foo" -body "foobar" - accept - } - loop 2 { - rxreq - expect req.url == "/" - send "HTTP/1.1 200 \r\n" - accept - } - - barrier b1 sync -} -start - -varnish v1 -cliok "param.set debug +syncvsl" - -varnish v1 -vcl { - - backend foo { - .path = "${s1_sock}"; - .probe = { - .timeout = 7 s; - .interval = 0.5 s; - } - } - -} -start - -barrier b1 sync - -varnish v1 -cliexpect "^CLI RX| -+U+-{0,5} Good UNIX" "backend.list -p" -varnish v1 -cliexpect "^CLI RX| -+H{10}-{5}H{2}-{0,5} Happy" "backend.list -p" diff --git a/bin/varnishtest/tests/c00095.vtc b/bin/varnishtest/tests/c00095.vtc deleted file mode 100644 index 93ce3c8b6f7..00000000000 --- a/bin/varnishtest/tests/c00095.vtc +++ /dev/null @@ -1,84 +0,0 @@ -varnishtest "vcl_keep and vmod_so_keep debug bits" - -feature topbuild - -server s1 { -} -start - -varnish v1 -vcl+backend { -} -start - -# Test valid and invalid VCL with vcl_keep unset - -varnish v1 -cliok "param.set debug -vcl_keep" - -varnish v1 -vcl+backend { -} - -shell -err "test -f ./v1/vcl_vcl2.*/vgc.c" - -varnish v1 -errvcl {No backends or directors found} { -} - -shell -err "test -f ./v1/vcl_vcl3.*/vgc.c" - -# Same but with vcl_keep set - -varnish v1 -cliok "param.set debug +vcl_keep" - -varnish v1 -vcl+backend { -} - -shell { - test -f ./v1/vcl_vcl4.*/vgc.c && - test -f ./v1/vcl_vcl4.*/vgc.so -} - -varnish v1 -errvcl {No backends or directors found} { -} - -shell { - test -f ./v1/vcl_vcl5.*/vgc.c && - test -f ./v1/vcl_vcl5.*/vgc.so -} - -# Test vmod with vmod_so_keep set - -varnish v1 -cliok "param.set debug +vmod_so_keep" - -varnish v1 -vcl+backend { - import std; -} - -shell "test -f ./v1/vmod_cache/_vmod_std.*" - -varnish v1 -stop -varnish v1 -cleanup - -# Ensure these are not deleted on exit - -shell { - test -f ./v1/vcl_vcl4.*/vgc.c && - test -f ./v1/vcl_vcl4.*/vgc.so && - test -f ./v1/vcl_vcl5.*/vgc.c && - test -f ./v1/vcl_vcl5.*/vgc.so && - test -f ./v1/vmod_cache/_vmod_std.* -} - -varnish v2 -vcl+backend { -} -start - -# And test vmod with vmod_so_keep unset - -varnish v2 -cliok "param.set debug -vmod_so_keep" - -varnish v2 -vcl+backend { - import std; -} - -shell "test -f ./v2/vmod_cache/_vmod_std.*" - -varnish v2 -stop -varnish v2 -cleanup - -shell -err "test -f ./v2/vmod_cache/_vmod_std.*" diff --git a/bin/varnishtest/tests/c00102.vtc b/bin/varnishtest/tests/c00102.vtc deleted file mode 100644 index a2ad7c672dc..00000000000 --- a/bin/varnishtest/tests/c00102.vtc +++ /dev/null @@ -1,64 +0,0 @@ -varnishtest "TCP pool teardown with open connection" - -feature ipv6 - -# when c1's request has gotten to s1 -barrier b1 cond 3 - -# when vcls have been swizzled -barrier b2 cond 3 - -server s1 -listen "::1" { - rxreq - expect req.url == "/s1" - barrier b1 sync - barrier b2 sync - txresp -hdr "Host: s1" - expect_close -} -start - -varnish v1 -cliok "param.set debug +vclrel" - -varnish v1 -vcl+backend {} -start - -client c1 { - txreq -url /s1 - barrier b1 sync - barrier b2 sync - rxresp - expect resp.http.host == "s1" - - txreq -url /s2 - rxresp - expect resp.http.host == "s2" -} -start - -barrier b1 sync - -varnish v1 -cliok "param.set debug +vclrel" - -server s2 -listen "::1" { - rxreq - expect req.url == "/s2" - txresp -hdr "Host: s2" -} -start - -varnish v1 -vcl { - backend b2 { - .host = "${s2_sock}"; - } -} - -varnish v1 -vsc LCK.conn_pool.* -varnish v1 -cliok "vcl.discard vcl1" -varnish v1 -cliok "vcl.list" -varnish v1 -vsc LCK.conn_pool.* -varnish v1 -expect LCK.conn_pool.destroy == 0 - -barrier b2 sync - -client c1 -wait -varnish v1 -cliok "vcl.list" -server s1 -wait -varnish v1 -vsc LCK.conn_pool.* -varnish v1 -expect LCK.conn_pool.destroy == 1 diff --git a/bin/varnishtest/tests/c00104.vtc b/bin/varnishtest/tests/c00104.vtc deleted file mode 100644 index 3af498179e5..00000000000 --- a/bin/varnishtest/tests/c00104.vtc +++ /dev/null @@ -1,32 +0,0 @@ -varnishtest "Test watchdog only active on queue 0" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -cliok "param.set thread_pools 1" -varnish v1 -cliok "param.set thread_pool_min 5" -varnish v1 -cliok "param.set thread_pool_max 5" -varnish v1 -cliok "param.set thread_pool_watchdog 1" -varnish v1 -cliok "param.set feature +http2" - -varnish v1 -vcl+backend { -} -start - -client c1 { - txpri - delay 2 -} -start - -client c2 { - txpri - delay 2 -} -start - -client c3 { - txpri - delay 2 -} -start - -delay 2 diff --git a/bin/varnishtest/tests/c00108.vtc b/bin/varnishtest/tests/c00108.vtc deleted file mode 100644 index 9c2014329b5..00000000000 --- a/bin/varnishtest/tests/c00108.vtc +++ /dev/null @@ -1,53 +0,0 @@ -varnishtest "Session pipelining exceeding available workspace" - -server s1 { - loop 2 { - rxreq - expect req.bodylen == 32769 - txresp - } - - rxreq - expect req.bodylen == 32768 - txresp -} -start - -varnish v1 -cliok "param.set workspace_client 24k" -varnish v1 -cliok "param.set http_req_size 1k" -varnish v1 -cliok "param.set http_resp_size 1k" -varnish v1 -cliok "param.set vsl_buffer 1k" -varnish v1 -vcl+backend { } -start - -client c1 { - # Multi-line strings aren't escaped, the send argument - # below contains actual carriage returns. The extra body - # byte on top of the 32kB is a line feed. - send { -POST / HTTP/1.1 -host: ${localhost} -content-length: 32769 - -${string,repeat,1024,abcdefghijklmnopqrstuvwxyz012345} -POST / HTTP/1.1 -host: ${localhost} -content-length: 32769 - -${string,repeat,1024,abcdefghijklmnopqrstuvwxyz012345} -} - - loop 2 { - rxresp - expect resp.status == 200 - } -} -run - -varnish v1 -cliok "param.set feature +http2" - -client c2 { - stream 1 { - txreq -method POST -hdr content-length 32768 -nostrend - txdata -datalen 16384 -nostrend - txdata -datalen 16384 - rxresp - } -run -} -run diff --git a/bin/varnishtest/tests/c00109.vtc b/bin/varnishtest/tests/c00109.vtc deleted file mode 100644 index aff4b4ab4d8..00000000000 --- a/bin/varnishtest/tests/c00109.vtc +++ /dev/null @@ -1,18 +0,0 @@ -varnishtest "cc_command and cc_warnings" - -varnish v1 -cliok {param.set debug +vcl_keep} -varnish v1 -cliok {param.set cc_warnings hello} -varnish v1 -cliok {param.set cc_command << EOF -printf 'd="%%s" D="%%s" w="%%s"' '%d' '%D' '%w' >world -printf '%%s' '%n' >v1_name -EOF} - -varnish v1 -errvcl "VCL compilation failed" "backend be none;" - -shell -match {d=".+" D=".+hello.+" w="hello"} { - exec cat v1/vcl_*/world -} - -shell -expect "Value is: hello" { - exec varnishadm -n "$(cat v1/vcl_*/v1_name)" param.show cc_warnings -} diff --git a/bin/varnishtest/tests/c00110.vtc b/bin/varnishtest/tests/c00110.vtc deleted file mode 100644 index ea841c5055c..00000000000 --- a/bin/varnishtest/tests/c00110.vtc +++ /dev/null @@ -1,22 +0,0 @@ -varnishtest "Transit buffering with early close" - -feature cmd {test $(uname) != SunOS} - -server s1 { - non_fatal - rxreq - txresp -bodylen 2000000 -} -start - -varnish v1 -cliok "param.set transit_buffer 1k" -varnish v1 -vcl+backend { } -start - -client c1 -rcvbuf 128 { - txreq -method POST - rxresphdrs - expect resp.status == 200 - recv 100 -} -run - -varnish v1 -expect VBE.vcl1.s1.conn == 0 -varnish v1 -expect VBE.vcl1.s1.busy == 0 diff --git a/bin/varnishtest/tests/c00111.vtc b/bin/varnishtest/tests/c00111.vtc deleted file mode 100644 index 52df80b6771..00000000000 --- a/bin/varnishtest/tests/c00111.vtc +++ /dev/null @@ -1,36 +0,0 @@ -varnishtest "LRU error without transit buffer" - -server s1 -repeat 2 { - non_fatal - rxreq - txresp -bodylen 1850000 -} -start - -varnish v1 -arg "-s Transient=malloc,1m" -vcl+backend { } -start - -client c1 { - non_fatal - txreq -method POST - rxresp -} -run - -varnish v1 -vsl_catchup -# with vai, this no longer fails systematically (which is good) -varnish v1 -expect fetch_failed <= 1 -varnish v1 -expect transit_stored > 0 -varnish v1 -expect transit_stored <= 1850000 -varnish v1 -expect transit_buffered == 0 - -varnish v1 -cliok "param.set transit_buffer 4k" - -client c2 { - txreq -method POST - rxresp - expect resp.bodylen == 1850000 -} -run - -varnish v1 -vsl_catchup -varnish v1 -expect s_fetch == 2 -varnish v1 -expect fetch_failed <= 1 -varnish v1 -expect transit_stored <= 1850000 -varnish v1 -expect transit_buffered == 1850000 diff --git a/bin/varnishtest/tests/c00112.vtc b/bin/varnishtest/tests/c00112.vtc deleted file mode 100644 index 5ad76ac84b6..00000000000 --- a/bin/varnishtest/tests/c00112.vtc +++ /dev/null @@ -1,41 +0,0 @@ -varnishtest "Transit buffering deadlock test" - -server s1 { - rxreq - txresp -status 404 -} -start - -server s2 { - non_fatal - rxreq - txresp -bodylen 2000000 -} -start - -varnish v1 -vcl+backend { - sub vcl_recv { - set req.backend_hint = s2; - if (req.restarts == 1) { - set req.backend_hint = s1; - } - } - sub vcl_backend_response { - set beresp.transit_buffer = 1k; - } - sub vcl_deliver { - if (req.restarts < 1) { - return (restart); - } - } -} -start - -client c1 { - txreq -method POST - rxresp - expect resp.bodylen == 0 - expect resp.status == 404 -} -run - -varnish v1 -expect VBE.vcl1.s1.conn == 0 -varnish v1 -expect VBE.vcl1.s1.busy == 0 -varnish v1 -expect VBE.vcl1.s2.conn == 0 -varnish v1 -expect VBE.vcl1.s2.busy == 0 diff --git a/bin/varnishtest/tests/c00113.vtc b/bin/varnishtest/tests/c00113.vtc deleted file mode 100644 index 96b7405aeee..00000000000 --- a/bin/varnishtest/tests/c00113.vtc +++ /dev/null @@ -1,32 +0,0 @@ -varnishtest "probe expect close" - -server s0 { - rxreq - txresp - expect_close -} -dispatch - -varnish v1 -vcl+backend { - probe default { - .window = 3; - .threshold = 1; - .timeout = 0.5s; - .interval = 0.1s; - .expect_close = true; - } -} -start - -varnish v2 -vcl+backend { - probe default { - .window = 3; - .threshold = 1; - .timeout = 0.5s; - .interval = 0.1s; - .expect_close = false; - } -} -start - -delay 2.0 - -varnish v1 -cliexpect sick backend.list -varnish v2 -cliexpect healthy backend.list diff --git a/bin/varnishtest/tests/c00120.vtc b/bin/varnishtest/tests/c00120.vtc deleted file mode 100644 index ff9e41a1ca4..00000000000 --- a/bin/varnishtest/tests/c00120.vtc +++ /dev/null @@ -1,38 +0,0 @@ -varnishtest "bgfetch_no_thread" - -server s1 { - rxreq - txresp -} -start - -varnish v1 -cliok "param.set thread_pools 1" -varnish v1 -cliok "param.set thread_pool_min 5" -varnish v1 -cliok "param.set thread_pool_max 5" -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.ttl = 1ms; - set beresp.grace = 1h; - } -} -start - -logexpect l1 -v v1 { - expect * * FetchError "No thread available for bgfetch" -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - - delay 0.1 - - # At this point the thread reserve is too low to - # allow a low-priority task like a bgfetch. - txreq - rxresp - expect resp.status == 200 -} -start - -logexpect l1 -wait - -varnish v1 -expect MAIN.bgfetch_no_thread == 1 diff --git a/bin/varnishtest/tests/c00123.vtc b/bin/varnishtest/tests/c00123.vtc deleted file mode 100644 index 2875e2cd32f..00000000000 --- a/bin/varnishtest/tests/c00123.vtc +++ /dev/null @@ -1,79 +0,0 @@ -varnishtest "Low req.body streaming pressure on storage" - -server s0 { - rxreq - txresp -status 200 - expect req.bodylen == 100000 -} -dispatch - -varnish v1 -vcl+backend { - import std; - - sub vcl_recv { - set req.storage = storage.s0; - if (req.http.cache) { - std.cache_req_body(100000b); - } - } -} -start - -# explicit setting to be robust against changes to the default value -varnish v1 -cliok "param.set fetch_chunksize 16k" - -# chunked req.body streaming uses approximately one fetch_chunksize'd chunk -client c1 { - txreq -req PUT -hdr "Transfer-encoding: chunked" - chunkedlen 100000 - chunkedlen 0 - rxresp - expect resp.status == 200 -} -run - -# in practice a little over fetch_chunksize is allocated -varnish v1 -expect SM?.s0.c_bytes < 20000 -varnish v1 -vsl_catchup - -# reset s0 counters -varnish v1 -stop -varnish v1 -start -varnish v1 -expect SM?.s0.c_bytes == 0 - -# content-length req.body streaming also needs one chunk -client c2 { - txreq -req PUT -bodylen 100000 - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect SM?.s0.c_bytes < 20000 -varnish v1 -vsl_catchup - -# reset s0 counters -varnish v1 -stop -varnish v1 -start - -# chunked req.body caching allocates storage for the entire body -client c3 { - txreq -req PUT -hdr "cache: body" -hdr "Transfer-encoding: chunked" - chunkedlen 100000 - chunkedlen 0 - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect SM?.s0.c_bytes > 100000 -varnish v1 -vsl_catchup - -# reset s0 counters -varnish v1 -stop -varnish v1 -start - -# content-length req.body caching allocates storage for the entire body -client c4 { - txreq -req PUT -hdr "cache: body" -bodylen 100000 - rxresp - expect resp.status == 200 -} -run - -varnish v1 -expect SM?.s0.c_bytes > 100000 -varnish v1 -vsl_catchup diff --git a/bin/varnishtest/tests/c00125.vtc b/bin/varnishtest/tests/c00125.vtc deleted file mode 100644 index 8fbca4f46b2..00000000000 --- a/bin/varnishtest/tests/c00125.vtc +++ /dev/null @@ -1,156 +0,0 @@ -varnishtest "successful expired waiting list hit" - -barrier b1 cond 2 -barrier b2 cond 2 -barrier b3 cond 2 -barrier b4 cond 2 - - -server s1 { - rxreq - expect req.http.user-agent == c1 - expect req.http.bgfetch == false - barrier b1 sync - barrier b2 sync - txresp -hdr "Cache-Control: max-age=60" -hdr "Age: 120" - - rxreq - expect req.http.user-agent == c3 - expect req.http.bgfetch == true - txresp - - # The no-cache case only works with a complicit VCL, for now. - rxreq - expect req.http.user-agent == c4 - expect req.http.bgfetch == false - barrier b3 sync - barrier b4 sync - txresp -hdr "Cache-Control: no-cache" - - rxreq - expect req.http.user-agent == c6 - expect req.http.bgfetch == false - txresp -hdr "Cache-Control: no-cache" -} -start - -varnish v1 -cliok "param.set default_grace 1h" -varnish v1 -cliok "param.set thread_pools 1" -varnish v1 -cliok "param.set debug +syncvsl,+waitinglist" -varnish v1 -vcl+backend { - sub vcl_backend_fetch { - set bereq.http.bgfetch = bereq.is_bgfetch; - } - sub vcl_beresp_stale { - # We just validated a stale object, do not mark it as - # uncacheable. The object remains available for grace - # hits and background fetches. - return; - } - sub vcl_beresp_control { - if (beresp.http.cache-control == "no-cache") { - # Keep beresp.uncacheable clear. - return; - } - } - sub vcl_deliver { - set resp.http.obj-hits = obj.hits; - set resp.http.obj-ttl = obj.ttl; - } -} -start - -client c1 { - txreq -url "/stale-hit" - rxresp - expect resp.status == 200 - expect resp.http.x-varnish == 1001 - expect resp.http.obj-hits == 0 - expect resp.http.obj-ttl < 0 -} -start - -barrier b1 sync - -client c2 { - txreq -url "/stale-hit" - rxresp - expect resp.status == 200 - expect resp.http.x-varnish == "1004 1002" - expect resp.http.obj-hits == 1 - expect resp.http.obj-ttl < 0 -} -start - -varnish v1 -expect busy_sleep == 1 -barrier b2 sync - -client c1 -wait -client c2 -wait - -varnish v1 -vsl_catchup - -varnish v1 -expect cache_miss == 1 -varnish v1 -expect cache_hit == 1 -varnish v1 -expect cache_hit_grace == 0 -varnish v1 -expect s_bgfetch == 0 - -client c3 { - txreq -url "/stale-hit" - rxresp - expect resp.status == 200 - expect resp.http.x-varnish == "1006 1002" - expect resp.http.obj-hits == 2 - expect resp.http.obj-ttl < 0 -} -run - -varnish v1 -vsl_catchup - -varnish v1 -expect cache_miss == 1 -varnish v1 -expect cache_hit == 2 -varnish v1 -expect cache_hit_grace == 1 -varnish v1 -expect s_bgfetch == 1 - -# The only way for a plain no-cache to be hit is to have a non-zero keep. -varnish v1 -cliok "param.set default_ttl 0" -varnish v1 -cliok "param.set default_grace 0" -varnish v1 -cliok "param.set default_keep 1h" - -client c4 { - txreq -url "/no-cache-hit" - rxresp - expect resp.status == 200 - expect resp.http.x-varnish == 1009 - expect resp.http.obj-hits == 0 - expect resp.http.obj-ttl <= 0 -} -start - -barrier b3 sync - -client c5 { - txreq -url "/no-cache-hit" - rxresp - expect resp.status == 200 - expect resp.http.x-varnish == "1012 1010" - expect resp.http.obj-hits == 1 - expect resp.http.obj-ttl <= 0 -} -start - -varnish v1 -expect busy_sleep == 2 -barrier b4 sync - -client c4 -wait -client c5 -wait - -varnish v1 -vsl_catchup - -varnish v1 -expect cache_miss == 2 -varnish v1 -expect cache_hit == 3 -varnish v1 -expect cache_hit_grace == 1 -varnish v1 -expect s_bgfetch == 1 - -# No hit when not on the waiting list -client c6 { - txreq -url "/no-cache-hit" - rxresp - expect resp.status == 200 - expect resp.http.x-varnish == 1014 - expect resp.http.obj-hits == 0 - expect resp.http.obj-ttl <= 0 -} -run diff --git a/bin/varnishtest/tests/c00126.vtc b/bin/varnishtest/tests/c00126.vtc deleted file mode 100644 index 7403f758526..00000000000 --- a/bin/varnishtest/tests/c00126.vtc +++ /dev/null @@ -1,42 +0,0 @@ -varnishtest "Make sure EXP_Removed is logged correctly" - -server s1 -repeat 4 { - rxreq - txresp -bodylen 500000 -} -start - -varnish v1 -arg "-ss1=default,1m" -vcl+backend { } -start -varnish v1 -cliok "param.set vsl_mask +ExpKill" - -logexpect l1 -v v1 -g raw { - expect * 0 ExpKill "EXP_Removed x=1002 t=.* h=1" - expect * 0 ExpKill "EXP_Removed x=1005 t=.* h=0" -} -start - -client c1 { - loop 2 { - txreq -url "/1" - rxresp - expect resp.status == 200 - } - - txreq -url "/2" - rxresp - expect resp.status == 200 - - txreq -url "/3" - rxresp - expect resp.status == 200 - - txreq -url "/4" - rxresp - expect resp.status == 200 -} -run - -# NOTE: Nuked objects are mailed twice -varnish v1 -expect n_lru_nuked == 2 -varnish v1 -expect MAIN.n_object == 2 -varnish v1 -expect MAIN.exp_mailed == 6 -varnish v1 -expect MAIN.exp_received == 6 - -logexpect l1 -wait diff --git a/bin/varnishtest/tests/c00134.vtc b/bin/varnishtest/tests/c00134.vtc deleted file mode 100644 index f88c4ba88db..00000000000 --- a/bin/varnishtest/tests/c00134.vtc +++ /dev/null @@ -1,86 +0,0 @@ -varnishtest "Optimized HSH_Lookup - ban is checked after Vary is matched" - -server s1 { - rxreq - expect req.url == /foo - expect req.http.foobar == "1" - txresp -hdr "Vary: Foobar" -body "1111" - - rxreq - expect req.url == /foo - expect req.http.foobar == "2" - txresp -hdr "Vary: Foobar" -body "2222" - - rxreq - expect req.url == /foo - expect req.http.foobar == "3" - txresp -hdr "Vary: Foobar" -body "3333" - - rxreq - expect req.url == /foo - expect req.http.foobar == "1" - txresp -hdr "Vary: Foobar" -body "1111" - - rxreq - expect req.url == /foo - expect req.http.foobar == "1" - txresp -hdr "Vary: Foobar" -body "1111" - -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.http.url = bereq.url; - } -} -start - - -client c1 { - txreq -url /foo -hdr "Foobar: 1" - rxresp - expect resp.body == "1111" -} -run - -client c1 { - txreq -url /foo -hdr "Foobar: 2" - rxresp - expect resp.body == "2222" -} -run - -client c1 { - txreq -url /foo -hdr "Foobar: 3" - rxresp - expect resp.body == "3333" - -} -run - -varnish v1 -expect n_object == 3 -varnish v1 -expect cache_hit == 0 -varnish v1 -expect cache_miss == 3 - -client c1 { - txreq -url /foo -hdr "Foobar: 1" - rxresp -} -run - -varnish v1 -expect cache_hit == 1 -varnish v1 -expect cache_miss == 3 - -varnish v1 -cliok "ban obj.http.url == /foo" -varnish v1 -cliok "ban obj.http.url == /bar" -varnish v1 -cliok "ban obj.http.url == /baz" - -client c1 { - txreq -url /foo -hdr "Foobar: 1" - rxresp -} -run - -varnish v1 -expect bans_tested == 1 -varnish v1 -expect bans_tests_tested == 3 -varnish v1 -expect bans_obj_killed == 1 -varnish v1 -expect n_object == 3 - - -varnish v1 -expect cache_hit == 1 -varnish v1 -expect cache_miss == 4 -varnish v1 -expect client_req == 5 diff --git a/bin/varnishtest/tests/c00136.vtc b/bin/varnishtest/tests/c00136.vtc deleted file mode 100644 index 0e97be57ffd..00000000000 --- a/bin/varnishtest/tests/c00136.vtc +++ /dev/null @@ -1,34 +0,0 @@ -varnishtest "Rearm timeout_idle upon HTTP/1 keep-alive" - -barrier b1 cond 2 -barrier b2 cond 2 - -varnish v1 -cliok "param.set timeout_idle 1h" -varnish v1 -vcl { - backend be none; - sub vcl_recv { - set sess.timeout_idle = param.timeout_idle; - return (synth(200)); - } -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - - barrier b1 sync - barrier b2 sync - - txreq - rxresp - expect resp.status == 200 - - expect_close -} -start - -barrier b1 sync -varnish v1 -cliok "param.set timeout_idle 1ms" -barrier b2 sync - -client c1 -wait diff --git a/bin/varnishtest/tests/c00137.vtc b/bin/varnishtest/tests/c00137.vtc deleted file mode 100644 index c0435c1bcd6..00000000000 --- a/bin/varnishtest/tests/c00137.vtc +++ /dev/null @@ -1,35 +0,0 @@ -varnishtest "Tweak uncacheable_ttl for built-in VCL" - -server s1 { - loop 3 { - rxreq - expect req.http.is-hitmiss == false - txresp - } - - rxreq - expect req.http.is-hitmiss == true - txresp -} -start - -varnish v1 -cliok "param.set default_ttl 0s" -varnish v1 -cliok "param.set default_grace 0s" -varnish v1 -cliok "param.set default_keep 0s" -varnish v1 -cliok "param.set uncacheable_ttl 1ms" -varnish v1 -vcl+backend { - sub vcl_miss { - set req.http.is-hitmiss = req.is_hitmiss; - } -} -start - -client c1 -repeat 2 { - txreq - rxresp - expect resp.status == 200 - delay 0.5 -} -run - -varnish v1 -cliok "param.set uncacheable_ttl 1m" - -client c1 -run -server s1 -wait diff --git a/bin/varnishtest/tests/c00138.vtc b/bin/varnishtest/tests/c00138.vtc deleted file mode 100644 index cf0cb8c1986..00000000000 --- a/bin/varnishtest/tests/c00138.vtc +++ /dev/null @@ -1,64 +0,0 @@ -varnishtest "subsequent rush on rush miss" - -barrier b1 cond 2 -barrier b2 cond 2 -barrier b3 cond 2 -barrier b4 cond 2 - -server s1 { - rxreq - expect req.http.user-agent == c1 - barrier b1 sync - barrier b2 sync - txresp -hdr "Vary: accept" - - rxreq - expect req.http.user-agent == c2 - txresp -hdr "Vary: accept" -} -start - -varnish v1 -cliok "param.set thread_pools 1" -varnish v1 -cliok "param.set rush_exponent 1" -varnish v1 -cliok "param.set debug +syncvsl,+waitinglist" -varnish v1 -vcl+backend "" -start - -client c1 { - txreq - rxresp - expect resp.http.x-varnish == 1001 -} -start - -barrier b1 sync - -logexpect l1 -v v1 -q Debug -g raw { - expect * * Debug "on waiting list" -} -start - -client c2 { - txreq -hdr "accept: nothing" - rxresp - expect resp.http.x-varnish == 1004 -} -start - -logexpect l1 -wait -start - -client c3 { - txreq - rxresp - expect resp.http.x-varnish == "1006 1002" -} -start - -logexpect l1 -wait - -barrier b2 sync - -client c1 -wait -client c2 -wait -client c3 -wait - -varnish v1 -expect cache_miss == 2 -varnish v1 -expect cache_hit == 1 -varnish v1 -expect cache_hit_grace == 0 -varnish v1 -expect s_bgfetch == 0 -varnish v1 -expect busy_sleep == 2 -varnish v1 -expect busy_wakeup == 2 diff --git a/bin/varnishtest/tests/d00012.vtc b/bin/varnishtest/tests/d00012.vtc deleted file mode 100644 index 8e5f25fa238..00000000000 --- a/bin/varnishtest/tests/d00012.vtc +++ /dev/null @@ -1,85 +0,0 @@ -varnishtest "Test a dynamic backend discard during a request" - -# vcl.discard testing inspired by v00006.vtc from commit e1f7207 - -barrier b1 cond 2 -barrier b2 cond 2 - -server s1 { - rxreq - expect req.url == "/foo" - barrier b1 sync - barrier b2 sync - txresp -} -start - -varnish v1 -arg "-p thread_pools=1" -vcl { - import debug; - - backend dummy { .host = "${bad_backend}"; } - - sub vcl_init { - new s1 = debug.dyn("${s1_addr}", "${s1_port}"); - } - - sub vcl_recv { - set req.backend_hint = s1.backend(); - } -} -start - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 -} -start - -varnish v1 -expect MAIN.n_backend == 2 -# expected: vcl1.dummy, vcl1.s1 - -server s2 { - rxreq - expect req.url == "/bar" - txresp -} -start - -barrier b1 sync - -varnish v1 -vcl { - import debug; - - backend dummy { .host = "${bad_backend}"; } - - sub vcl_init { - new s2 = debug.dyn("${s2_addr}", "${s2_port}"); - } - - sub vcl_recv { - set req.backend_hint = s2.backend(); - } -} - -varnish v1 -cli "vcl.discard vcl1" -barrier b2 sync - -client c1 -wait -delay 2 - -varnish v1 -expect MAIN.n_backend == 4 -# expected: vcl1.dummy, vcl1.s1, vcl2.dummy, vcl2.s2 - -varnish v1 -expect n_vcl_avail == 1 -varnish v1 -expect n_vcl_discard == 1 - -client c1 { - txreq -url "/bar" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -cli "vcl.list" -#varnish v1 -expect MAIN.n_backend == 2 -# expected: vcl2.dummy, vcl2.s2 -varnish v1 -expect n_vcl_avail == 1 - -# XXX This test fails on FreeBSD -# XXX varnish v1 -expect n_vcl_discard == 0 diff --git a/bin/varnishtest/tests/d00032.vtc b/bin/varnishtest/tests/d00032.vtc deleted file mode 100644 index 52039132d62..00000000000 --- a/bin/varnishtest/tests/d00032.vtc +++ /dev/null @@ -1,70 +0,0 @@ -varnishtest "Test dynamic backends listening at Unix domain sockets" - -server s1 -listen "${tmpdir}/s1.sock" { - rxreq - txresp -} -start - -varnish v1 -vcl { - import debug; - - backend dummy None; - - sub vcl_init { - new s1 = debug.dyn_uds("${s1_sock}"); - } - - sub vcl_recv { - set req.backend_hint = s1.backend(); - } -} -start - -varnish v1 -expect MAIN.n_backend == 1 - -client c1 { - txreq - rxresp - expect resp.status == 200 -} -run - -varnish v1 -errvcl {path must be an absolute path} { - import debug; - - backend dummy None; - - sub vcl_init { - new s1 = debug.dyn_uds(""); - } -} - -varnish v1 -errvcl {path must be an absolute path} { - import debug; - - backend dummy None; - - sub vcl_init { - new s1 = debug.dyn_uds("s1.sock"); - } -} - -shell { rm -f ${tmpdir}/foo } - -varnish v1 -errvcl {Cannot stat path} { - import debug; - - backend dummy None; - - sub vcl_init { - new s1 = debug.dyn_uds("${tmpdir}/foo"); - } -} - -varnish v1 -errvcl {is not a socket} { - import debug; - - backend dummy None; - - sub vcl_init { - new s1 = debug.dyn_uds("${tmpdir}"); - } -} diff --git a/bin/varnishtest/tests/d00037.vtc b/bin/varnishtest/tests/d00037.vtc deleted file mode 100644 index 66c9b725828..00000000000 --- a/bin/varnishtest/tests/d00037.vtc +++ /dev/null @@ -1,76 +0,0 @@ -varnishtest "Test a dynamic UDS backend discard during a request" - -barrier b1 cond 2 -barrier b2 cond 2 - -server s1 -listen "${tmpdir}/s1.sock" { - rxreq - expect req.url == "/foo" - barrier b1 sync - barrier b2 sync - txresp -} -start - -varnish v1 -arg "-p thread_pools=1" -vcl { - import debug; - - backend dummy None; - - sub vcl_init { - new s1 = debug.dyn_uds("${s1_sock}"); - } - - sub vcl_recv { - set req.backend_hint = s1.backend(); - } -} -start - -client c1 { - txreq -url "/foo" - rxresp - expect resp.status == 200 -} -start - -varnish v1 -expect MAIN.n_backend == 1 - -server s2 -listen "${tmpdir}/s2.sock" { - rxreq - expect req.url == "/bar" - txresp -} -start - -barrier b1 sync - -varnish v1 -vcl { - import debug; - - backend dummy None; - - sub vcl_init { - new s2 = debug.dyn_uds("${s2_sock}"); - } - - sub vcl_recv { - set req.backend_hint = s2.backend(); - } -} - -varnish v1 -cli "vcl.discard vcl1" -barrier b2 sync - -client c1 -wait -delay 2 - -varnish v1 -expect MAIN.n_backend == 2 - -varnish v1 -expect n_vcl_avail == 1 -varnish v1 -expect n_vcl_discard == 1 - -client c1 { - txreq -url "/bar" - rxresp - expect resp.status == 200 -} -run - -varnish v1 -cli "vcl.list" -varnish v1 -expect n_vcl_avail == 1 diff --git a/bin/varnishtest/tests/e00000.vtc b/bin/varnishtest/tests/e00000.vtc deleted file mode 100644 index 47bcdc574cb..00000000000 --- a/bin/varnishtest/tests/e00000.vtc +++ /dev/null @@ -1,35 +0,0 @@ -varnishtest "ESI test with no ESI content" - - -server s1 { - rxreq - txresp -body { - -This is a test: Hello world - } -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.do_esi = true; - } - sub vcl_deliver { - set resp.http.can_esi = obj.can_esi; - } -} -start - -logexpect l1 -v v1 -g raw { - expect * * ESI_xmlerror esi_disable_xml_check -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - expect resp.bodylen == 33 - expect resp.http.can_esi == "false" -} - -client c1 -run -logexpect l1 -wait -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 33 diff --git a/bin/varnishtest/tests/e00002.vtc b/bin/varnishtest/tests/e00002.vtc deleted file mode 100644 index 2ca2b1352f8..00000000000 --- a/bin/varnishtest/tests/e00002.vtc +++ /dev/null @@ -1,30 +0,0 @@ -varnishtest "ESI CDATA" - - -server s1 { - rxreq - txresp -body { - - ]]> - This is a test: Unseen University - - This is a test: Hello world - } -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.do_esi = true; - } -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - expect resp.bodylen == 35 -} - -client c1 -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 35 diff --git a/bin/varnishtest/tests/e00003.vtc b/bin/varnishtest/tests/e00003.vtc deleted file mode 100644 index c6b6dbbda14..00000000000 --- a/bin/varnishtest/tests/e00003.vtc +++ /dev/null @@ -1,169 +0,0 @@ -varnishtest "ESI include" - -feature cmd "command -v diff" - -server s1 { - rxreq - expect req.http.esi0 == "foo" - txresp -body { - - Before include - After include - - } - rxreq - expect req.url == "/body1" - expect req.http.esi0 != "foo" - txresp -body { - Included file - } -} -start - -varnish v1 -vcl+backend { - sub vcl_synth { - set resp.body = """ - """; - return (deliver); - } - sub vcl_recv { - if (req.esi_level > 0) { - set req.url = req.url + req.esi_level; - if (req.url ~ "^/synth") { - return (synth(3200)); - } - } else { - set req.http.esi0 = "foo"; - } - } - sub vcl_backend_response { - if (bereq.url == "/") { - set beresp.do_esi = true; - } - } - sub vcl_deliver { - set resp.http.can_esi = obj.can_esi; - - # make ReqAcct deterministic - unset resp.http.via; - } -} -start - -logexpect l1 -v v1 -g request { - expect 0 1001 Begin "^req .* rxreq" - expect * = ReqAcct "^45 0 45 182 75 257$" - expect 0 = End -} -start - -logexpect l2 -v v1 -g request { - expect * 1002 Begin "^bereq " - expect * = End -} -start - -logexpect l3 -v v1 -g request { - expect * 1003 Begin "^req .* esi" - expect * = ReqAcct "^0 0 0 0 18 18$" - expect 0 = End -} -start - -logexpect l4 -v v1 -g request { - expect * 1004 Begin "^bereq " - expect * = End -} -start - -logexpect l5 -v v1 -g request { - expect * 1006 Begin "^req .* rxreq" - # Header bytes is 5 larger than in l1 due to two item X-Varnish hdr - expect * = ReqAcct "^45 0 45 187 75 262$" - expect 0 = End -} -start - -client c1 { - txreq -hdr "Host: foo" - rxresp - expect resp.bodylen == 75 - expect resp.status == 200 - expect resp.http.can_esi == "true" - - delay .1 - # test that there is no difference on miss/hit - txreq -hdr "Host: foo" - rxresp - expect resp.bodylen == 75 - expect resp.status == 200 - expect resp.http.can_esi == "true" -} - -client c1 -run -varnish v1 -expect esi_req == 4 -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 150 - -logexpect l1 -wait -logexpect l2 -wait -logexpect l3 -wait -logexpect l4 -wait -logexpect l5 -wait - -shell { - varnishncsa -n ${v1_name} -d \ - -F '%{Varnish:vxid}x %{Varnish:side}x %{VSL:Begin[3]}x' | - sort > ncsa.txt - - cat >expected.txt <<-EOF - 1001 c rxreq - 1006 c rxreq - EOF - diff -u expected.txt ncsa.txt -} - -shell { - varnishncsa -n ${v1_name} -d -b \ - -F '%{Varnish:vxid}x %{Varnish:side}x %{VSL:Begin[3]}x' | - sort > ncsa.txt - - cat >expected.txt <<-EOF - 1002 b fetch - 1004 b fetch - EOF - diff -u expected.txt ncsa.txt -} - -shell { - varnishncsa -n ${v1_name} -d -E \ - -F '%{Varnish:vxid}x %{Varnish:side}x %{VSL:Begin[3]}x' | - sort > ncsa.txt - - cat >expected.txt <<-EOF - 1001 c rxreq - 1003 c esi - 1005 c esi - 1006 c rxreq - 1007 c esi - 1008 c esi - EOF - diff -u expected.txt ncsa.txt -} - -shell { - varnishncsa -n ${v1_name} -d -b -E \ - -F '%{Varnish:vxid}x %{Varnish:side}x %{VSL:Begin[3]}x' | - sort > ncsa.txt - - cat >expected.txt <<-EOF - 1001 c rxreq - 1002 b fetch - 1003 c esi - 1004 b fetch - 1005 c esi - 1006 c rxreq - 1007 c esi - 1008 c esi - EOF - diff -u expected.txt ncsa.txt -} - -shell -err {varnishlog -n ${v1_name} -d -c -i Begin | grep esi} -shell -err {varnishlog -n ${v1_name} -d -c -i Begin -g request | grep esi} -shell {varnishlog -n ${v1_name} -d -c -i Begin -g raw | grep esi} -shell {varnishlog -n ${v1_name} -d -E -i Begin | grep esi} -shell {varnishlog -n ${v1_name} -d -E -i Begin | grep rxreq} diff --git a/bin/varnishtest/tests/e00004.vtc b/bin/varnishtest/tests/e00004.vtc deleted file mode 100644 index 44a31c7605e..00000000000 --- a/bin/varnishtest/tests/e00004.vtc +++ /dev/null @@ -1,36 +0,0 @@ -varnishtest "ESI commented include" - - -server s1 { - rxreq - txresp -body { - - Before include - - After include - } - rxreq - expect req.url == "/body" - txresp -body { - Included file - } -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - if (bereq.url != "/body") { - set beresp.do_esi = true; - } - } -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - expect resp.bodylen == 67 -} - -client c1 -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 67 diff --git a/bin/varnishtest/tests/e00009.vtc b/bin/varnishtest/tests/e00009.vtc deleted file mode 100644 index e15e56ae7fb..00000000000 --- a/bin/varnishtest/tests/e00009.vtc +++ /dev/null @@ -1,50 +0,0 @@ -varnishtest "ESI binary detector" - -server s1 { - rxreq - txresp -body { - Before include - - bar - - } - rxreq - txresp -body { - Before include - - bar - - } -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.do_esi = true; - } -} -start - -logexpect l1 -v v1 -g raw { - expect * 1002 ESI_xmlerror esi_disable_xml_check -} -start - -client c1 { - txreq - rxresp - expect resp.status == 200 - expect resp.bodylen == 57 -} -run - -logexpect l1 -wait -varnish v1 -expect MAIN.s_resp_bodybytes == 57 - -varnish v1 -cli "param.set feature +esi_disable_xml_check" - -client c1 { - txreq -url bar - rxresp - expect resp.status == 200 - expect resp.bodylen == 22 - expect resp.http.transfer-encoding == "chunked" -} -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 79 diff --git a/bin/varnishtest/tests/e00013.vtc b/bin/varnishtest/tests/e00013.vtc deleted file mode 100644 index bf3ca8dee41..00000000000 --- a/bin/varnishtest/tests/e00013.vtc +++ /dev/null @@ -1,24 +0,0 @@ -varnishtest "All white-space object, in multiple storage segments" - -server s1 { - rxreq - expect req.url == "/foo" - txresp -nolen -hdr "Transfer-Encoding: chunked" - chunked { } - chunkedlen 0 -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.do_esi = true; - } -} -start - -varnish v1 -cliok "debug.fragfetch 4" - -client c1 { - txreq -url /foo - rxresp -} -run - -varnish v1 -expect esi_errors == 0 diff --git a/bin/varnishtest/tests/e00014.vtc b/bin/varnishtest/tests/e00014.vtc deleted file mode 100644 index 0f90331da1c..00000000000 --- a/bin/varnishtest/tests/e00014.vtc +++ /dev/null @@ -1,26 +0,0 @@ -varnishtest "Check } -} -start - -varnish v1 -vcl+backend { - sub vcl_backend_response { - set beresp.do_esi = true; - } -} -start - -varnish v1 -cliok "debug.fragfetch 4" - -client c1 { - txreq -url /foo - rxresp - expect resp.bodylen == 49 -} -run - -varnish v1 -expect esi_errors == 0 diff --git a/bin/varnishtest/tests/e00016.vtc b/bin/varnishtest/tests/e00016.vtc deleted file mode 100644 index a096c4f12c4..00000000000 --- a/bin/varnishtest/tests/e00016.vtc +++ /dev/null @@ -1,54 +0,0 @@ -varnishtest "ESI request can't be turned off midstream" - -server s1 { - rxreq - txresp -body { - - Before include - - - After include - } - rxreq - expect req.url == "/body" - txresp -body { - - } - rxreq - expect req.url == "/body2" - txresp -body { - included - } - rxreq - expect req.url == "/body3" - txresp -body { - included body3 - } -} -start - -# give enough stack to 32bit systems -varnish v1 -cliok "param.set thread_pool_stack 128k" -varnish v1 -cliok "param.set feature +esi_disable_xml_check" - -varnish v1 -syntax 4.0 -vcl+backend { - sub vcl_backend_response { - set beresp.do_esi = true; - } - sub vcl_deliver { - set req.esi = true; - if (req.url == "/body") { - set req.esi = false; - } - } -} -start - -client c1 { - txreq - rxresp - expect resp.bodylen == 105 - expect resp.status == 200 -} - -client c1 -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 105 diff --git a/bin/varnishtest/tests/e00021.vtc b/bin/varnishtest/tests/e00021.vtc deleted file mode 100644 index 81999371f8f..00000000000 --- a/bin/varnishtest/tests/e00021.vtc +++ /dev/null @@ -1,39 +0,0 @@ -varnishtest "ESI ability to stitch gzip files together" - - -server s1 { - rxreq - txresp -body { - - This is a test: Unseen University - - - - This is a test: Hello world - } -} -start - -varnish v1 -syntax 4.0 -vcl+backend { - sub vcl_recv { - set req.esi = true; - } - sub vcl_backend_response { - set beresp.do_esi = true; - set beresp.do_gzip = true; - } -} -start - -varnish v1 -cliok "param.set debug +esi_chop" -varnish v1 -cliok "param.set http_gzip_support true" - -client c1 { - txreq -hdr "Accept-Encoding: gzip" - rxresp - expect resp.http.content-encoding == gzip - gunzip - expect resp.status == 200 - expect resp.bodylen == 40 -} - -client c1 -run -varnish v1 -expect esi_errors == 2 diff --git a/bin/varnishtest/tests/e00022.vtc b/bin/varnishtest/tests/e00022.vtc deleted file mode 100644 index e2caab769e0..00000000000 --- a/bin/varnishtest/tests/e00022.vtc +++ /dev/null @@ -1,50 +0,0 @@ -varnishtest "ESI ability to stitch gzip files together" - - -server s1 { - rxreq - expect req.http.accept-encoding == gzip - txresp -gzipbody { - - This is a test: Unseen University - - - - This is a test: Hello world - } -} -start - -varnish v1 -syntax 4.0 -arg "-p thread_pool_stack=262144" -vcl+backend { - sub vcl_recv { - set req.esi = true; - } - sub vcl_backend_response { - set beresp.do_esi = true; - } -} -start - -varnish v1 -cliok "param.set debug +esi_chop" -varnish v1 -cliok "param.set http_gzip_support true" -varnish v1 -cliok "param.set gzip_memlevel 1" - -logexpect l1 -v v1 -g vxid { - expect * * Fetch_Body - expect 0 = ESI_xmlerror {^ERR: after 24 ESI 1.0 element nested in $} - expect 0 = ESI_xmlerror {^ERR: after 24 ESI 1.0 Nested varnishtest(1) tests + id ~ ^a --> vinyltest(1) tests id ~ ^a02 --> HTTP2 id ~ ^b --> Basic functionality tests id ~ ^c --> Complex functionality tests diff --git a/bin/vinyltest/tests/b00000.vtc b/bin/vinyltest/tests/b00000.vtc new file mode 100644 index 00000000000..32faa1439a3 --- /dev/null +++ b/bin/vinyltest/tests/b00000.vtc @@ -0,0 +1,69 @@ +vtest "Does anything get through at all ?" + +feature ipv4 +feature ipv6 + +server s1 -listen 127.0.0.1:0 { + rxreq + txresp -body "012345\n" +} -start + +server s2 -listen [::1]:0 { + rxreq + txresp -body "012345\n" +} -start + +vinyl v1 -vcl+backend { + sub vcl_recv { + if (req.url == "/1") { + set req.backend_hint = s1; + } else { + set req.backend_hint = s2; + } + } + sub vcl_backend_response { + set beresp.do_stream = false; + } + sub vcl_deliver { + # make s_resp_hdrbytes deterministic + unset resp.http.via; + } +} -start + +vinyl v1 -cliok "param.set debug +workspace" +vinyl v1 -cliok "param.set debug +witness" + +#vinyl v1 -vsc * + +vinyl v1 -expect MAIN.n_object == 0 +vinyl v1 -expect MAIN.sess_conn == 0 +vinyl v1 -expect MAIN.client_req == 0 +vinyl v1 -expect MAIN.cache_miss == 0 + +client c1 { + txreq -url "/1" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect n_object == 1 +vinyl v1 -expect sess_conn == 1 +vinyl v1 -expect client_req == 1 +vinyl v1 -expect cache_miss == 1 +vinyl v1 -expect s_sess == 1 +vinyl v1 -expect s_resp_bodybytes == 7 +vinyl v1 -expect s_resp_hdrbytes == 156 +client c1 { + txreq -url "/2" + rxresp + expect resp.status == 200 +} -run + +# vinyl v1 -vsc * +vinyl v1 -expect n_object == 2 +vinyl v1 -expect sess_conn == 2 +vinyl v1 -expect client_req == 2 +vinyl v1 -expect cache_miss == 2 +vinyl v1 -expect s_sess == 2 +vinyl v1 -expect s_resp_bodybytes == 14 +vinyl v1 -expect s_resp_hdrbytes == 312 diff --git a/bin/vinyltest/tests/b00001.vtc b/bin/vinyltest/tests/b00001.vtc new file mode 100644 index 00000000000..d5b8498a063 --- /dev/null +++ b/bin/vinyltest/tests/b00001.vtc @@ -0,0 +1,40 @@ +vtest "Check that a pipe transaction works" + +server s1 -repeat 1 { + rxreq + expect req.proto == "HTTP/1.0" + expect req.http.connection == "close" + txresp + rxreq + expect req.proto == "nonsense" + expect req.http.connection == "keep-alive" + txresp +} -start + +vinyl v1 -vcl+backend { + sub vcl_recv { + return(pipe); + } + + sub vcl_pipe { + if (req.url == "/2") { + set bereq.http.connection = req.http.connection; + } + set bereq.http.xid = bereq.xid; + } +} -start + +client c1 { + txreq -proto HTTP/1.0 -url /1 -hdr "Connection: keep-alive" + rxresp + expect resp.status == 200 + txreq -proto nonsense -url /2 -hdr "Connection: keep-alive" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect n_object == 0 +vinyl v1 -expect sess_conn == 1 +vinyl v1 -expect client_req == 1 +vinyl v1 -expect s_sess == 1 +vinyl v1 -expect s_pipe == 1 diff --git a/bin/varnishtest/tests/b00002.vtc b/bin/vinyltest/tests/b00002.vtc similarity index 75% rename from bin/varnishtest/tests/b00002.vtc rename to bin/vinyltest/tests/b00002.vtc index 63fde07a29c..c35f64c21e5 100644 --- a/bin/varnishtest/tests/b00002.vtc +++ b/bin/vinyltest/tests/b00002.vtc @@ -1,4 +1,4 @@ -varnishtest "Check that a pass transaction works" +vtest "Check that a pass transaction works" server s1 { rxreq @@ -6,7 +6,7 @@ server s1 { txresp -hdr "Cache-Control: max-age=120" -hdr "Connection: close" -nodate -body "012345\n" } -start -varnish v1 -arg "-sTransient=default,1m" -vcl+backend { +vinyl v1 -arg "-sTransient=default,1m" -vcl+backend { sub vcl_recv { return(pass); } @@ -40,11 +40,11 @@ client c1 { expect resp.http.xport == HTTP/1 } -run -varnish v1 -expect n_object == 0 -varnish v1 -expect SM?.Transient.g_alloc == 0 -varnish v1 -expect sess_conn == 1 -varnish v1 -expect client_req == 1 -varnish v1 -expect s_sess == 1 -varnish v1 -expect s_pass == 1 +vinyl v1 -expect n_object == 0 +vinyl v1 -expect SM?.Transient.g_alloc == 0 +vinyl v1 -expect sess_conn == 1 +vinyl v1 -expect client_req == 1 +vinyl v1 -expect s_sess == 1 +vinyl v1 -expect s_pass == 1 logexpect l1 -wait diff --git a/bin/vinyltest/tests/b00003.vtc b/bin/vinyltest/tests/b00003.vtc new file mode 100644 index 00000000000..5d053a07265 --- /dev/null +++ b/bin/vinyltest/tests/b00003.vtc @@ -0,0 +1,32 @@ +vtest "Check that a cache fetch + hit transaction works" + +server s1 { + rxreq + txresp -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 -vcl+backend { } -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1001" +} -run + +client c2 { + txreq -url "/" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1004 1002" +} -run + +# Give vinyl a chance to update stats +delay .1 + +vinyl v1 -expect sess_conn == 2 +vinyl v1 -expect cache_hit == 1 +vinyl v1 -expect cache_miss == 1 +vinyl v1 -expect client_req == 2 +vinyl v1 -expect s_sess == 2 +vinyl v1 -expect s_fetch == 1 diff --git a/bin/vinyltest/tests/b00004.vtc b/bin/vinyltest/tests/b00004.vtc new file mode 100644 index 00000000000..38292b50929 --- /dev/null +++ b/bin/vinyltest/tests/b00004.vtc @@ -0,0 +1,30 @@ +vtest "Torture Vinyl with start/stop commands" + +server s1 { + rxreq +} -start + +vinyl v1 -vcl+backend { } + +vinyl v1 -start +vinyl v1 -cliexpect "running" status +vinyl v1 -clijson "status -j" +vinyl v1 -stop +vinyl v1 -cliexpect "stopped" status +vinyl v1 -clijson "status -j" + +vinyl v1 -start +vinyl v1 -stop + +vinyl v1 -start +vinyl v1 -stop + +vinyl v1 -cliok start +vinyl v1 -clierr 300 start +vinyl v1 -clierr 300 start + +vinyl v1 -cliok stop +vinyl v1 -clierr 300 stop +vinyl v1 -clierr 300 stop + +vinyl v1 -wait diff --git a/bin/vinyltest/tests/b00005.vtc b/bin/vinyltest/tests/b00005.vtc new file mode 100644 index 00000000000..b2a50270265 --- /dev/null +++ b/bin/vinyltest/tests/b00005.vtc @@ -0,0 +1,21 @@ +vtest "Check that -s works" + +server s1 { + rxreq + txresp -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 \ + -arg "-s file,${tmpdir}/vinyltest_backing,10M" \ + -vcl+backend {} -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run + +server s1 -wait + +vinyl v1 -stop +shell "rm ${tmpdir}/vinyltest_backing" diff --git a/bin/vinyltest/tests/b00006.vtc b/bin/vinyltest/tests/b00006.vtc new file mode 100644 index 00000000000..b1d2123b8f1 --- /dev/null +++ b/bin/vinyltest/tests/b00006.vtc @@ -0,0 +1,14 @@ +vtest "Check that -s default works" + +server s1 { + rxreq + txresp -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 -arg "-s default" -vcl+backend {} -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run diff --git a/bin/varnishtest/tests/b00007.vtc b/bin/vinyltest/tests/b00007.vtc similarity index 86% rename from bin/varnishtest/tests/b00007.vtc rename to bin/vinyltest/tests/b00007.vtc index 02babe71b25..37f292fa687 100644 --- a/bin/varnishtest/tests/b00007.vtc +++ b/bin/vinyltest/tests/b00007.vtc @@ -1,4 +1,4 @@ -varnishtest "Check chunked encoding from backend works" +vtest "Check chunked encoding from backend works" server s1 { rxreq @@ -20,7 +20,7 @@ server s1 { chunked "" } -start -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start client c1 { txreq -url "/bar" diff --git a/bin/vinyltest/tests/b00008.vtc b/bin/vinyltest/tests/b00008.vtc new file mode 100644 index 00000000000..c00565be136 --- /dev/null +++ b/bin/vinyltest/tests/b00008.vtc @@ -0,0 +1,53 @@ +vtest "Test CLI commands and parameter functions" + +vinyl v1 -arg "-b ${bad_ip}:9080" + +vinyl v1 -cliok "help" + +vinyl v1 -cliok "-help" + +vinyl v1 -cliok "help -a" + +vinyl v1 -cliok "help -d" + +vinyl v1 -clierr 101 "help -x" + +vinyl v1 -cliok "help vcl.load" + +vinyl v1 -clierr 101 "help ban" + +vinyl v1 -clierr 101 "FOO?" + +vinyl v1 -clierr 100 "\x22" + +vinyl v1 -clierr 105 "help 1 2 3" + +vinyl v1 -cliok "param.show" + +vinyl v1 -start + +vinyl v1 -cliok "help" + +vinyl v1 -clijson "help -j" + +vinyl v1 -cliok "backend.list" + +vinyl v1 -clijson "backend.list -j" + +vinyl v1 -cliok "ping" + +vinyl v1 -clijson "ping -j" + +vinyl v1 -clierr 106 "param.set waiter HASH(0x8839c4c)" + +vinyl v1 -cliexpect 60 "param.show first_byte_timeout" +vinyl v1 -cliok "param.set first_byte_timeout 120" +vinyl v1 -cliexpect 120 "param.show first_byte_timeout" +vinyl v1 -cliok "param.reset first_byte_timeout" +vinyl v1 -cliexpect 60 "param.show first_byte_timeout" + +vinyl v1 -cliok "param.set cli_limit 128" + +vinyl v1 -clierr 201 "param.show" + +vinyl v1 -cliok "\"help\" \"help\"" diff --git a/bin/vinyltest/tests/b00009.vtc b/bin/vinyltest/tests/b00009.vtc new file mode 100644 index 00000000000..ec4d85eb1c8 --- /dev/null +++ b/bin/vinyltest/tests/b00009.vtc @@ -0,0 +1,18 @@ +vtest "Check poll acceptor" + +server s1 { + rxreq + txresp -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 -arg "-Wpoll" -vcl+backend {} -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 + delay .1 + txreq -url "/" + rxresp + expect resp.status == 200 +} -run diff --git a/bin/vinyltest/tests/b00010.vtc b/bin/vinyltest/tests/b00010.vtc new file mode 100644 index 00000000000..fa0585f6175 --- /dev/null +++ b/bin/vinyltest/tests/b00010.vtc @@ -0,0 +1,18 @@ +vtest "Check simple list hasher" + +server s1 { + rxreq + txresp -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 -arg "-h simple_list" -vcl+backend {} -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 + txreq -url "/" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1003 1002" +} -run diff --git a/bin/varnishtest/tests/b00011.vtc b/bin/vinyltest/tests/b00011.vtc similarity index 76% rename from bin/varnishtest/tests/b00011.vtc rename to bin/vinyltest/tests/b00011.vtc index d6c9eabba20..2e93aa20a38 100644 --- a/bin/varnishtest/tests/b00011.vtc +++ b/bin/vinyltest/tests/b00011.vtc @@ -1,4 +1,4 @@ -varnishtest "Check HTTP/1.0 EOF transmission" +vtest "Check HTTP/1.0 EOF transmission" server s1 { rxreq @@ -10,7 +10,7 @@ server s1 { send "Body line 3\n" } -start -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start client c1 { txreq -url "/" diff --git a/bin/vinyltest/tests/b00012.vtc b/bin/vinyltest/tests/b00012.vtc new file mode 100644 index 00000000000..bf176a42d18 --- /dev/null +++ b/bin/vinyltest/tests/b00012.vtc @@ -0,0 +1,30 @@ +vtest "Check pipelining" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -body "foo" + rxreq + expect req.url == "/bar" + txresp -body "foobar" +} -start + +vinyl v1 -vcl+backend {} -start + +client c1 { + send "GET /foo HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\n" + rxresp + expect resp.status == 200 + expect resp.bodylen == 3 + expect resp.http.X-Vinyl == "1001" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1003" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1005 1004" +} -run + +vinyl v1 -expect sess_readahead == 2 diff --git a/bin/vinyltest/tests/b00013.vtc b/bin/vinyltest/tests/b00013.vtc new file mode 100644 index 00000000000..af54b772d80 --- /dev/null +++ b/bin/vinyltest/tests/b00013.vtc @@ -0,0 +1,36 @@ +vtest "Check read-head / partial pipelining" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -body "foo" + rxreq + expect req.url == "/bar" + txresp -body "foobar" +} -start + +vinyl v1 -vcl+backend {} + +# NB: The accept_filter param may not exist. +vinyl v1 -cli "param.set accept_filter false" +vinyl v1 -start + +client c1 { + send "GET /foo HTTP/1.1\r\nHost: foo\r\n\r\nGET " + rxresp + expect resp.status == 200 + expect resp.bodylen == 3 + expect resp.http.X-Vinyl == "1001" + send "/bar HTTP/1.1\nHost: foo\n\nGET /bar " + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1003" + send "HTTP/1.1\nHost: foo\n\n" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1005 1004" +} -run + +vinyl v1 -expect sess_readahead == 2 diff --git a/bin/vinyltest/tests/b00014.vtc b/bin/vinyltest/tests/b00014.vtc new file mode 100644 index 00000000000..5656af6ab2d --- /dev/null +++ b/bin/vinyltest/tests/b00014.vtc @@ -0,0 +1,25 @@ +vtest "Check -f command line arg" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -body "foo" + rxreq + expect req.url == "/bar" + txresp -body "bar" +} -start + +shell "echo 'vcl 4.0; backend foo { .host = \"${s1_addr}\"; .port = \"${s1_port}\"; }' > ${tmpdir}/_b00014.vcl" +vinyl v1 -arg "-f ${tmpdir}/_b00014.vcl" -start + +client c1 { + txreq -url /foo + rxresp +} -run + +vinyl v1 -cliok "vcl.load foo ${tmpdir}/_b00014.vcl" -cliok "vcl.use foo" + +client c1 { + txreq -url /bar + rxresp +} -run diff --git a/bin/vinyltest/tests/b00015.vtc b/bin/vinyltest/tests/b00015.vtc new file mode 100644 index 00000000000..ecd64b1925f --- /dev/null +++ b/bin/vinyltest/tests/b00015.vtc @@ -0,0 +1,83 @@ +vtest "Check synthetic error page caching" + +# First test that an internally generated error is not cached + +vinyl v1 -cliok "param.set backend_remote_error_holddown 60" + +vinyl v1 -vcl { + backend foo { + .host = "${bad_backend}"; + } +} -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 503 + expect resp.http.X-Vinyl == "1001" + + txreq -url "/" + rxresp + expect resp.status == 503 + expect resp.http.X-Vinyl == "1003" +} -run + +vinyl v1 -expect VBE.vcl1.foo.fail_econnrefused > 0 +vinyl v1 -expect VBE.vcl1.foo.helddown > 0 + +# Then check that a cacheable error from the backend is + +vinyl v1 -cliok "ban req.url ~ .*" + +server s1 { + rxreq + txresp -status 301 +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.http.ttl = beresp.ttl; + set beresp.http.uncacheable = beresp.uncacheable; + } +} + +client c2 { + txreq -url "/" + rxresp + expect resp.status == 301 + expect resp.http.X-Vinyl == "1006" + + txreq -url "/" + rxresp + expect resp.status == 301 + expect resp.http.X-Vinyl == "1008 1007" +} -run + +server s1 -wait + +# Then check that a non-cacheable error from the backend can be + +server s1 { + rxreq + txresp -status 502 +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + if (beresp.status == 502) { + set beresp.ttl = 10m; + } + } +} + +client c3 { + txreq -url "/2" + rxresp + expect resp.status == 502 + expect resp.http.X-Vinyl == "1010" + + txreq -url "/2" + rxresp + expect resp.status == 502 + expect resp.http.X-Vinyl == "1012 1011" +} -run diff --git a/bin/varnishtest/tests/b00016.vtc b/bin/vinyltest/tests/b00016.vtc similarity index 85% rename from bin/varnishtest/tests/b00016.vtc rename to bin/vinyltest/tests/b00016.vtc index c7ea399394f..1170f7254ec 100644 --- a/bin/varnishtest/tests/b00016.vtc +++ b/bin/vinyltest/tests/b00016.vtc @@ -1,11 +1,11 @@ -varnishtest "Check naming of backends" +vtest "Check naming of backends" server s1 -repeat 2 -keepalive { rxreq txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import directors; sub vcl_recv { @@ -23,7 +23,7 @@ client c1 { expect resp.http.X-Backend-Name == "s1" } -run -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import directors; sub vcl_init { @@ -49,7 +49,7 @@ client c1 { expect resp.http.X-Backend-Name == "s1" } -run -varnish v1 -errvcl "Not available in subroutine 'vcl_recv'" { +vinyl v1 -errvcl "Not available in subroutine 'vcl_recv'" { import directors; backend dummy None; diff --git a/bin/vinyltest/tests/b00017.vtc b/bin/vinyltest/tests/b00017.vtc new file mode 100644 index 00000000000..8daa4e3046c --- /dev/null +++ b/bin/vinyltest/tests/b00017.vtc @@ -0,0 +1,26 @@ +vtest "Check set resp.body in vcl_synth" + +vinyl v1 -arg "-sTransient=debug,lessspace" -vcl { + backend foo { + .host = "${bad_backend}"; + } + sub vcl_recv { + return (synth(888)); + } + + sub vcl_synth { + set resp.body = "Custom vcl_synth's body"; + return (deliver); + } +} -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 888 + expect resp.http.connection != close + expect resp.bodylen == 23 + expect resp.body == "Custom vcl_synth's body" +} -run + +vinyl v1 -expect s_synth == 1 diff --git a/bin/vinyltest/tests/b00018.vtc b/bin/vinyltest/tests/b00018.vtc new file mode 100644 index 00000000000..756ebb7753d --- /dev/null +++ b/bin/vinyltest/tests/b00018.vtc @@ -0,0 +1,30 @@ +vtest "Check that synth response in vcl_backend_response works" + +server s1 { + rxreq + txresp -body "012345\n" +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.http.Foo = "bar"; + set beresp.status = 523; + set beresp.reason = "not ok"; + set beresp.uncacheable = true; + set beresp.ttl = 0s; + return (deliver); + } +} -start + +vinyl v1 -cliok "param.set default_grace 0" +vinyl v1 -cliok "param.set default_keep 0" + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 523 +} -run + +delay 4 + +vinyl v1 -expect n_object == 0 diff --git a/bin/vinyltest/tests/b00019.vtc b/bin/vinyltest/tests/b00019.vtc new file mode 100644 index 00000000000..02fb0a8e714 --- /dev/null +++ b/bin/vinyltest/tests/b00019.vtc @@ -0,0 +1,51 @@ +vtest "Check that max_restarts outside vcl_recv works and that we don't fall over" + +server s1 { + rxreq + txresp -body "012345\n" +} -start + +vinyl v1 -vcl+backend { + sub vcl_hit { + return (restart); + } + + sub vcl_synth { + # when we end up here, we have _exceeded_ the number + # allowed restarts + if (req.restarts == 3) { + set resp.status = 200; + set resp.reason = "restart=3"; + } elsif (req.restarts > 3) { + set resp.status = 501; + set resp.reason = "restart>3"; + } elsif (req.restarts < 3) { + set resp.status = 500; + set resp.reason = "restart<3"; + } + } +} -start + +vinyl v1 -cliok "param.set max_restarts 2" + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -cliok "param.set max_restarts 3" + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 501 +} -run + +vinyl v1 -cliok "param.set max_restarts 1" + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 500 +} -run diff --git a/bin/vinyltest/tests/b00020.vtc b/bin/vinyltest/tests/b00020.vtc new file mode 100644 index 00000000000..08cc2976669 --- /dev/null +++ b/bin/vinyltest/tests/b00020.vtc @@ -0,0 +1,47 @@ +vtest "Check that between_bytes_timeout behaves from parameters" + +server s1 { + rxreq + send "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" + delay 1.5 + # send "Baba\n" +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.do_stream = false; + } +} -start +vinyl v1 -cliok "param.set between_bytes_timeout 1" + +client c1 { + txreq + rxresp + expect resp.status == 503 +} -run + +delay 1 + +vinyl v1 -expect n_object == 0 +vinyl v1 -expect n_objectcore == 0 + +server s1 -wait { + non_fatal + rxreq + send "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" + delay 0.5 + send "Baba\n" + delay 0.5 + send "Baba\n" +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + expect resp.bodylen == 10 +} -run + +vinyl v1 -expect n_object == 1 +vinyl v1 -expect n_objectcore == 1 +vinyl v1 -expect fetch_failed == 1 diff --git a/bin/varnishtest/tests/b00021.vtc b/bin/vinyltest/tests/b00021.vtc similarity index 87% rename from bin/varnishtest/tests/b00021.vtc rename to bin/vinyltest/tests/b00021.vtc index f0c4c0ce242..ed4ce9265b3 100644 --- a/bin/varnishtest/tests/b00021.vtc +++ b/bin/vinyltest/tests/b00021.vtc @@ -1,4 +1,4 @@ -varnishtest "Check the between_bytes_timeout behaves from vcl" +vtest "Check the between_bytes_timeout behaves from vcl" server s1 { rxreq @@ -7,7 +7,7 @@ server s1 { send "Baba\n" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_fetch { set bereq.between_bytes_timeout = 2s; } diff --git a/bin/varnishtest/tests/b00022.vtc b/bin/vinyltest/tests/b00022.vtc similarity index 84% rename from bin/varnishtest/tests/b00022.vtc rename to bin/vinyltest/tests/b00022.vtc index fee5db3d992..fcb55097dbe 100644 --- a/bin/varnishtest/tests/b00022.vtc +++ b/bin/vinyltest/tests/b00022.vtc @@ -1,4 +1,4 @@ -varnishtest "Check the between_bytes_timeout behaves from backend definition" +vtest "Check the between_bytes_timeout behaves from backend definition" server s1 { rxreq @@ -7,7 +7,7 @@ server s1 { send "Baba\n" } -start -varnish v1 -vcl { +vinyl v1 -vcl { backend b1 { .host = "${s1_addr}"; .port = "${s1_port}"; diff --git a/bin/varnishtest/tests/b00023.vtc b/bin/vinyltest/tests/b00023.vtc similarity index 80% rename from bin/varnishtest/tests/b00023.vtc rename to bin/vinyltest/tests/b00023.vtc index 5948d6bef7b..0f170720e52 100644 --- a/bin/varnishtest/tests/b00023.vtc +++ b/bin/vinyltest/tests/b00023.vtc @@ -1,4 +1,4 @@ -varnishtest "Check that the first_byte_timeout works" +vtest "Check that the first_byte_timeout works" # From VCL @@ -8,7 +8,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } @@ -43,12 +43,12 @@ client c2 { # From CLI -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } } -varnish v1 -cliok "param.set first_byte_timeout 0.5" +vinyl v1 -cliok "param.set first_byte_timeout 0.5" server s1 { rxreq @@ -74,7 +74,7 @@ server s1 { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { backend b1 { .host = "${s1_addr}"; .port = "${s1_port}"; @@ -92,4 +92,4 @@ server s1 { client c2 -run -varnish v1 -expect fetch_failed == 3 +vinyl v1 -expect fetch_failed == 3 diff --git a/bin/vinyltest/tests/b00024.vtc b/bin/vinyltest/tests/b00024.vtc new file mode 100644 index 00000000000..050b1c0ed74 --- /dev/null +++ b/bin/vinyltest/tests/b00024.vtc @@ -0,0 +1,48 @@ +vtest "Check that max_restarts from vcl_recv works and that we don't fall over" + +vinyl v1 -vcl { + backend dummy { .host = "${bad_backend}"; } + + sub vcl_recv { + return (restart); + } + + sub vcl_synth { + # when we end up here, we have _exceeded_ the number + # allowed restarts + if (req.restarts == 3) { + set resp.status = 200; + set resp.reason = "restart=3"; + } elsif (req.restarts > 3) { + set resp.status = 501; + set resp.reason = "restart>3"; + } elsif (req.restarts < 3) { + set resp.status = 500; + set resp.reason = "restart<3"; + } + } +} -start + +vinyl v1 -cliok "param.set max_restarts 2" + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -cliok "param.set max_restarts 3" + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 501 +} -run + +vinyl v1 -cliok "param.set max_restarts 1" + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 500 +} -run diff --git a/bin/varnishtest/tests/b00025.vtc b/bin/vinyltest/tests/b00025.vtc similarity index 97% rename from bin/varnishtest/tests/b00025.vtc rename to bin/vinyltest/tests/b00025.vtc index 606277dbd2e..be92ecd8f2d 100644 --- a/bin/varnishtest/tests/b00025.vtc +++ b/bin/vinyltest/tests/b00025.vtc @@ -1,6 +1,6 @@ -varnishtest "more backends" +vtest "more backends" -varnish v1 -arg "-p vcc_feature=-err_unref" -vcl { +vinyl v1 -arg "-p vcc_feature=-err_unref" -vcl { backend d0 { .host = "${bad_backend}"; } backend d1 { .host = "${bad_backend}"; } backend d2 { .host = "${bad_backend}"; } @@ -110,4 +110,4 @@ client c1 { expect resp.status == 503 } -run -shell -match "d99" "varnishstat -1 -n ${v1_name}" +shell -match "d99" "vinylstat -1 -n ${v1_name}" diff --git a/bin/vinyltest/tests/b00026.vtc b/bin/vinyltest/tests/b00026.vtc new file mode 100644 index 00000000000..336417f2440 --- /dev/null +++ b/bin/vinyltest/tests/b00026.vtc @@ -0,0 +1,51 @@ +vtest "Check the precedence for timeouts" + +server s1 { + rxreq + expect req.url == "/from_backend" + delay 1 + txresp +} -start +server s2 { + rxreq + expect req.url == "/from_vcl" + delay 1.5 + txresp +} -start + +vinyl v1 -vcl { + backend b1 { + .host = "${s1_addr}"; + .port = "${s1_port}"; + .first_byte_timeout = 2s; + } + backend b2 { + .host = "${s2_addr}"; + .port = "${s2_port}"; + .first_byte_timeout = 1s; + } + + sub vcl_recv { + if (req.url == "/from_backend") { + return(pass); + } + } + sub vcl_backend_fetch { + set bereq.first_byte_timeout = 2s; + if (bereq.url == "/from_backend") { + set bereq.backend = b1; + } else { + set bereq.backend = b2; + } + } +} -start +vinyl v1 -cliok "param.set first_byte_timeout 0.5" + +client c1 { + txreq -url "/from_backend" + rxresp + expect resp.status == 200 + txreq -url "/from_vcl" + rxresp + expect resp.status == 200 +} -run diff --git a/bin/varnishtest/tests/b00027.vtc b/bin/vinyltest/tests/b00027.vtc similarity index 85% rename from bin/varnishtest/tests/b00027.vtc rename to bin/vinyltest/tests/b00027.vtc index e0674750edb..4efd426269e 100644 --- a/bin/varnishtest/tests/b00027.vtc +++ b/bin/vinyltest/tests/b00027.vtc @@ -1,4 +1,4 @@ -varnishtest "test backend transmission corner cases" +vtest "test backend transmission corner cases" server s1 { rxreq @@ -11,7 +11,7 @@ server s1 { send "\n" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_stream = false; } diff --git a/bin/varnishtest/tests/b00028.vtc b/bin/vinyltest/tests/b00028.vtc similarity index 87% rename from bin/varnishtest/tests/b00028.vtc rename to bin/vinyltest/tests/b00028.vtc index 4280e8e6c55..44e862b4642 100644 --- a/bin/varnishtest/tests/b00028.vtc +++ b/bin/vinyltest/tests/b00028.vtc @@ -1,11 +1,11 @@ -varnishtest "regexp match and no-match" +vtest "regexp match and no-match" server s1 { rxreq txresp -hdr "Foo: bar" -hdr "Bar: foo" -body "1111\n" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { if (beresp.http.foo ~ "b" + "ar") { diff --git a/bin/varnishtest/tests/b00029.vtc b/bin/vinyltest/tests/b00029.vtc similarity index 76% rename from bin/varnishtest/tests/b00029.vtc rename to bin/vinyltest/tests/b00029.vtc index 386e1569db7..0726e5cccc6 100644 --- a/bin/varnishtest/tests/b00029.vtc +++ b/bin/vinyltest/tests/b00029.vtc @@ -1,4 +1,4 @@ -varnishtest "Test orderly connection closure" +vtest "Test orderly connection closure" server s1 { @@ -12,7 +12,7 @@ server s1 { chunkedlen 0 } -start -varnish v1 -vcl+backend { } -start +vinyl v1 -vcl+backend { } -start client c1 { txreq -hdr "Connection: close" diff --git a/bin/varnishtest/tests/b00030.vtc b/bin/vinyltest/tests/b00030.vtc similarity index 97% rename from bin/varnishtest/tests/b00030.vtc rename to bin/vinyltest/tests/b00030.vtc index 72abee7da61..27cca929d69 100644 --- a/bin/varnishtest/tests/b00030.vtc +++ b/bin/vinyltest/tests/b00030.vtc @@ -1,4 +1,4 @@ -varnishtest "Test timestamps" +vtest "Test timestamps" # We can't test the value of a timestamp, but this should fail # if we can't set the header at all. @@ -18,7 +18,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; import std; diff --git a/bin/varnishtest/tests/b00031.vtc b/bin/vinyltest/tests/b00031.vtc similarity index 80% rename from bin/varnishtest/tests/b00031.vtc rename to bin/vinyltest/tests/b00031.vtc index 485cebbd53d..feca6a8354b 100644 --- a/bin/varnishtest/tests/b00031.vtc +++ b/bin/vinyltest/tests/b00031.vtc @@ -1,4 +1,4 @@ -varnishtest "Test X-Forward-For headers" +vtest "Test X-Forward-For headers" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { } -start client c1 { diff --git a/bin/vinyltest/tests/b00032.vtc b/bin/vinyltest/tests/b00032.vtc new file mode 100644 index 00000000000..4b75b6931e7 --- /dev/null +++ b/bin/vinyltest/tests/b00032.vtc @@ -0,0 +1,38 @@ +vtest "CLI coverage test" + +vinyl v1 -cliok storage.list +vinyl v1 -clijson "storage.list -j" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 +vinyl v1 -cliok vcl.list +vinyl v1 -clijson "vcl.list -j" + +vinyl v1 -vcl+backend {} +vinyl v1 -vcl+backend {} + +vinyl v1 -cliok vcl.list +vinyl v1 -clijson "vcl.list -j" + +vinyl v1 -cliok start + +vinyl v1 -cliok vcl.list +vinyl v1 -clijson "vcl.list -j" + +vinyl v1 -cliok "vcl.use vcl1" + +vinyl v1 -clierr 300 "vcl.discard vcl1" + +vinyl v1 -clierr 106 "vcl.discard vcl0" + +vinyl v1 -clierr 106 {vcl.inline vcl2 "vcl 4.0; backend foo {.host = \"${localhost}\";} "} + +vinyl v1 -clierr 106 {vcl.load vcl3 ./nonexistent.vcl} + +vinyl v1 -cliok "vcl.discard vcl2" + +vinyl v1 -clierr 106 {vcl.load /invalid/name.vcl vcl4} diff --git a/bin/varnishtest/tests/b00033.vtc b/bin/vinyltest/tests/b00033.vtc similarity index 77% rename from bin/varnishtest/tests/b00033.vtc rename to bin/vinyltest/tests/b00033.vtc index 90c143129fe..8166196f3a5 100644 --- a/bin/varnishtest/tests/b00033.vtc +++ b/bin/vinyltest/tests/b00033.vtc @@ -1,4 +1,4 @@ -varnishtest "classic hash code coverage" +vtest "classic hash code coverage" server s1 { rxreq @@ -19,7 +19,7 @@ server s1 { } -start -varnish v1 -arg "-hclassic,11" -vcl+backend {} -start +vinyl v1 -arg "-hclassic,11" -vcl+backend {} -start client c1 { txreq -url /1 @@ -30,7 +30,7 @@ client c1 { expect resp.bodylen == 6 } -run -varnish v1 -cliok "ban req.url ~ ." +vinyl v1 -cliok "ban req.url ~ ." client c1 { txreq -url /1 diff --git a/bin/vinyltest/tests/b00034.vtc b/bin/vinyltest/tests/b00034.vtc new file mode 100644 index 00000000000..6e921ba438a --- /dev/null +++ b/bin/vinyltest/tests/b00034.vtc @@ -0,0 +1,13 @@ +vtest "mempool param handling" + +server s1 { +} -start + +vinyl v1 -vcl+backend {} + +vinyl v1 -cliok "param.set pool_req 1,10,1" +vinyl v1 -clierr 106 "param.set pool_req 10" +vinyl v1 -clierr 106 "param.set pool_req 10,1,1" +vinyl v1 -clierr 106 "param.set pool_req a,10,10" +vinyl v1 -clierr 106 "param.set pool_req 10,a,10" +vinyl v1 -clierr 106 "param.set pool_req 10,10,a" diff --git a/bin/varnishtest/tests/b00035.vtc b/bin/vinyltest/tests/b00035.vtc similarity index 88% rename from bin/varnishtest/tests/b00035.vtc rename to bin/vinyltest/tests/b00035.vtc index aacb40e62d6..438b95a0e51 100644 --- a/bin/varnishtest/tests/b00035.vtc +++ b/bin/vinyltest/tests/b00035.vtc @@ -1,4 +1,4 @@ -varnishtest "Test grace object not replaced by ttl = 0s" +vtest "Test grace object not replaced by ttl = 0s" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { # bgfetch fails } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.http.X-Force-Miss) { set req.hash_always_miss = true; diff --git a/bin/vinyltest/tests/b00036.vtc b/bin/vinyltest/tests/b00036.vtc new file mode 100644 index 00000000000..12419df1489 --- /dev/null +++ b/bin/vinyltest/tests/b00036.vtc @@ -0,0 +1,43 @@ +vtest "builtin purge from vcl_recv{}" + +server s1 { + rxreq + txresp -hdr "foo: 1" + rxreq + txresp -hdr "foo: 2" +} -start + +vinyl v1 -vcl+backend { + sub vcl_recv { + if (req.method == "PURGE") { + return (purge); + } + } +} -start + +client c1 { + txreq + rxresp + expect resp.http.foo == 1 + + txreq + rxresp + expect resp.http.foo == 1 + + txreq -req PURGE + rxresp + expect resp.reason == "Purged" + + txreq + rxresp + expect resp.http.foo == 2 + +} -run + +vinyl v1 -vsl_catchup + +vinyl v1 -expect MAIN.n_purges == 1 +vinyl v1 -expect MAIN.n_obj_purged == 1 + +# NB: a purge used to increase n_expired +vinyl v1 -expect MAIN.n_expired == 0 diff --git a/bin/vinyltest/tests/b00037.vtc b/bin/vinyltest/tests/b00037.vtc new file mode 100644 index 00000000000..9e0cbc1280c --- /dev/null +++ b/bin/vinyltest/tests/b00037.vtc @@ -0,0 +1,41 @@ +vtest "Error on multiple Host headers" + +vinyl v1 -vcl {backend be none;} -start +vinyl v1 -cliok "param.set debug +syncvsl" + +client c1 { + txreq -hdr "Host: foo" -hdr "Host: bar" + rxresp + expect resp.status == 400 +} -run + +vinyl v1 -vsl_catchup +vinyl v1 -expect client_req_400 == 1 +vinyl v1 -expect sc_rx_bad == 1 + +client c1 { + txreq -method POST -hdr "Content-Length: 12" -hdr "Content-Length: 12" -bodylen 12 + rxresp + expect resp.status == 400 +} -run + +vinyl v1 -vsl_catchup +vinyl v1 -expect client_req_400 == 2 +vinyl v1 -expect sc_rx_bad == 2 + +vinyl v1 -cliok "param.set feature +http2" + +client c2 { + stream 7 { + txreq -hdr host foo -hdr host bar + rxresp + expect resp.status == 400 + } -run +} -run + +vinyl v1 -vsl_catchup +vinyl v1 -expect client_req_400 == 3 + +# H2 with multiple content-length runs into thread-scheduling differences, +# and is unnecessary, as we know the check works from H1 and that it +# will be hit, because H2 with multiple Host: triggered. diff --git a/bin/varnishtest/tests/b00038.vtc b/bin/vinyltest/tests/b00038.vtc similarity index 76% rename from bin/varnishtest/tests/b00038.vtc rename to bin/vinyltest/tests/b00038.vtc index 871ce934d9b..7724c8875f3 100644 --- a/bin/varnishtest/tests/b00038.vtc +++ b/bin/vinyltest/tests/b00038.vtc @@ -1,4 +1,4 @@ -varnishtest "Test abandon from vcl_backend_xxx" +vtest "Test abandon from vcl_backend_xxx" server s1 { rxreq @@ -6,7 +6,7 @@ server s1 { txresp } -start -varnish v1 -arg "-pfirst_byte_timeout=0.1" -vcl+backend { +vinyl v1 -arg "-pfirst_byte_timeout=0.1" -vcl+backend { sub vcl_backend_fetch { if (bereq.url == "/foo") { return (abandon); @@ -36,4 +36,4 @@ client c1 { expect resp.status == 503 } -run -varnish v1 -expect fetch_failed == 1 +vinyl v1 -expect fetch_failed == 1 diff --git a/bin/varnishtest/tests/b00039.vtc b/bin/vinyltest/tests/b00039.vtc similarity index 89% rename from bin/varnishtest/tests/b00039.vtc rename to bin/vinyltest/tests/b00039.vtc index d5a9afb2735..0bb848be9a7 100644 --- a/bin/varnishtest/tests/b00039.vtc +++ b/bin/vinyltest/tests/b00039.vtc @@ -1,4 +1,4 @@ -varnishtest "Test Backend IMS" +vtest "Test Backend IMS" server s1 { rxreq @@ -11,8 +11,8 @@ server s1 { txresp -status 304 } -start -varnish v1 -cliok "param.set vsl_mask +ExpKill" -varnish v1 -vcl+backend { +vinyl v1 -cliok "param.set vsl_mask +ExpKill" +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 2s; set beresp.grace = 20s; @@ -68,4 +68,4 @@ client c1 { logexpect l1 -wait -varnish v1 -expect MAIN.n_superseded == 2 +vinyl v1 -expect MAIN.n_superseded == 2 diff --git a/bin/varnishtest/tests/b00040.vtc b/bin/vinyltest/tests/b00040.vtc similarity index 93% rename from bin/varnishtest/tests/b00040.vtc rename to bin/vinyltest/tests/b00040.vtc index 7edce650947..aab818f9ebd 100644 --- a/bin/varnishtest/tests/b00040.vtc +++ b/bin/vinyltest/tests/b00040.vtc @@ -1,4 +1,4 @@ -varnishtest "test certain malformed requests and validate_headers" +vtest "test certain malformed requests and validate_headers" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import debug; sub vcl_recv { @@ -109,7 +109,7 @@ client c1 { logexpect l1 -wait -varnish v1 -cliok "param.set feature -validate_headers" +vinyl v1 -cliok "param.set feature -validate_headers" client c1 { txreq -url /9 diff --git a/bin/vinyltest/tests/b00041.vtc b/bin/vinyltest/tests/b00041.vtc new file mode 100644 index 00000000000..8f03e0c0509 --- /dev/null +++ b/bin/vinyltest/tests/b00041.vtc @@ -0,0 +1,97 @@ +vtest "Test vinyladm and the Telnet CLI" + +vinyl v1 -vcl {backend foo { .host = "${localhost}"; } } -start + +shell -err -expect {Usage: vinyladm} \ + "vinyladm -7" + +shell -err -expect {Could not get hold of vinyld, is it running?} \ + "vinyladm -n ${v1_name}/nonexistent" + +shell -err -expect {Connection failed} \ + "vinyladm -t 4 -T ${bad_ip}:1 -S ${v1_name}/_.secret" + +server s1 { + send "FOO\n" +} -start + +shell -err -expect {Rejected 400} \ + {vinyladm -T ${s1_sock} -S /etc/group} + +server s1 { + send "107 59 \n" + send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" + send "Authentication required.\n" + send "\n" +} -start + +shell -err -expect {Authentication required} \ + {vinyladm -T ${s1_sock}} + +server s1 { + send "107 59 \n" + send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" + send "Authentication required.\n" + send "\n" +} -start + +shell -err -expect {Cannot open } \ + {vinyladm -T ${s1_sock} -S ${v1_name}/_.nonexistent} + +server s1 { + send "107 59 \n" + send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" + send "Authentication required.\n" + send "\n" + + recv 70 + send "599 0 \n" + send "\n" +} -start + +shell -err -expect {Rejected 599} \ + {vinyladm -T ${s1_sock} -S ${v1_name}/_.secret} + +server s1 { + send "107 59 \n" + send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" + send "Authentication required.\n" + send "\n" + + recv 70 + send "200 0 \n" + send "\n" + + recv 5 +} -start + +shell -err -expect {No pong received from server} \ + {vinyladm -T ${s1_sock} -S ${v1_name}/_.secret} + +server s1 { + send "107 59 \n" + send "qbvnnftpkgubadqpzznkkazoxlyqbcbj\n\n" + send "Authentication required.\n" + send "\n" + + recv 70 + send "200 0 \n" + send "\n" + + recv 5 + send "200 8 \n" + send "PONG 12\n" + send "\n" + + recv 5 + send "200 7 \n" + send "Tested\n" + send "\n" +} -start + +shell -expect {Tested} \ + {vinyladm -T ${s1_sock} -S ${v1_name}/_.secret test} + +shell "vinyladm -n ${v1_name} help > /dev/null" + +shell {VINYL_DEFAULT_N="${v1_name}" vinyladm help > /dev/null} diff --git a/bin/vinyltest/tests/b00042.vtc b/bin/vinyltest/tests/b00042.vtc new file mode 100644 index 00000000000..94857c0f60f --- /dev/null +++ b/bin/vinyltest/tests/b00042.vtc @@ -0,0 +1,50 @@ +vtest "param edge cases" + +vinyl v1 -vcl {backend be none;} -start + + +vinyl v1 -clierr 106 "param.set default_ttl -1" +vinyl v1 -clierr 106 "param.set default_ttl 1x" +vinyl v1 -cliok "param.set default_ttl 1s" +vinyl v1 -clierr 106 {param.set default_ttl "1 x"} +vinyl v1 -cliok {param.set default_ttl "1 s"} +vinyl v1 -clierr 106 {param.set acceptor_sleep_decay "0.42 is not a number"} +vinyl v1 -clierr 106 "param.set acceptor_sleep_max 20" +vinyl v1 -cliok "param.set prefer_ipv6 off" +vinyl v1 -cliok "param.set prefer_ipv6 no" +vinyl v1 -cliok "param.set prefer_ipv6 disable" +vinyl v1 -cliok "param.set prefer_ipv6 false" +vinyl v1 -cliok "param.set prefer_ipv6 on" +vinyl v1 -cliok "param.set prefer_ipv6 yes" +vinyl v1 -cliok "param.set prefer_ipv6 enable" +vinyl v1 -cliok "param.set prefer_ipv6 true" +vinyl v1 -clierr 106 "param.set prefer_ipv6 foobar" +vinyl v1 -clierr 106 "param.set http_max_hdr 0" +vinyl v1 -clierr 106 "param.set http_max_hdr 1000000" +vinyl v1 -clierr 106 "param.set workspace_thread 1b" +vinyl v1 -clierr 106 "param.set workspace_thread 1m" +vinyl v1 -clierr 106 "param.set workspace_thread 1x" +vinyl v1 -clierr 106 "param.set workspace_thread x" +vinyl v1 -clierr 106 "param.set user ///" +vinyl v1 -clierr 106 "param.set user ///" +vinyl v1 -clierr 106 {param.set pool_sess "\""} +vinyl v1 -cliok {param.set thread_pool_max 110} +vinyl v1 -clierr 106 {param.set thread_pool_min 111} +vinyl v1 -cliok {param.set thread_pool_min 51} +vinyl v1 -clierr 106 {param.set thread_pool_max 50} +vinyl v1 -cliok {param.set thread_pool_max 51} +vinyl v1 -cliok {param.set thread_pool_max unlimited} +vinyl v1 -clierr 106 {param.show fofofofo} +vinyl v1 -cliok "param.show changed" +vinyl v1 -cliok "param.show " +vinyl v1 -cliok "param.show -l" + +vinyl v1 -clijson "param.show -j pool_req" +vinyl v1 -clijson "param.show -j pool_sess" +vinyl v1 -clijson "param.show -j changed" +vinyl v1 -clijson "param.show -j" +vinyl v1 -clijson "param.set -j default_ttl 0" +vinyl v1 -clierr 106 "param.show -j -l" +vinyl v1 -clierr 106 "param.show -j fofofofo" +vinyl v1 -clierr 105 "param.show debug debug" +vinyl v1 -clierr 105 "param.show -j debug debug" diff --git a/bin/varnishtest/tests/b00043.vtc b/bin/vinyltest/tests/b00043.vtc similarity index 92% rename from bin/varnishtest/tests/b00043.vtc rename to bin/vinyltest/tests/b00043.vtc index 1591a031554..9aa55c3a1fb 100644 --- a/bin/varnishtest/tests/b00043.vtc +++ b/bin/vinyltest/tests/b00043.vtc @@ -1,4 +1,4 @@ -varnishtest "Test stale-while-revalidate" +vtest "Test stale-while-revalidate" server s1 { rxreq @@ -11,7 +11,7 @@ server s1 { txresp -status 500 -hdr "Cache-Control: max-age=30, stale-while-revalidate=30" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.http.grace = beresp.grace; set beresp.http.ttl = beresp.ttl; diff --git a/bin/vinyltest/tests/b00044.vtc b/bin/vinyltest/tests/b00044.vtc new file mode 100644 index 00000000000..5f5e404ebf0 --- /dev/null +++ b/bin/vinyltest/tests/b00044.vtc @@ -0,0 +1,19 @@ +vtest "Test/coverage of vinyl master signal handling" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -vcl+backend { } -start + +client c1 { + txreq + rxresp +} -run + +server s1 -wait + +shell "kill -15 ${v1_pid}" + +vinyl v1 -cleanup diff --git a/bin/vinyltest/tests/b00045.vtc b/bin/vinyltest/tests/b00045.vtc new file mode 100644 index 00000000000..c4a1e5a0812 --- /dev/null +++ b/bin/vinyltest/tests/b00045.vtc @@ -0,0 +1,31 @@ +vtest "Check Pid file locking" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -vcl+backend {} -start + +client c1 { + txreq + rxresp +} -run + +delay .2 + +shell -err -expect {Error: Could not open pid-file} { + vinyld -P /dev/tty -b None -a :0 -n ${tmpdir}/v1 +} + +shell -err -expect {Error: vinyld is already running} { + vinyld -P ${v1_name}/vinyld.pid -b None -a :0 -n ${tmpdir}/v1 +} + +shell -err -expect {Error: vinyld is already running} { + vinyld -b None -a:0 -n ${tmpdir}/v1 -F +} + +shell -err -expect {Error: vinyld is already running} { + VINYL_DEFAULT_N="${tmpdir}/v1" vinyld -b None -a:0 -F +} diff --git a/bin/vinyltest/tests/b00046.vtc b/bin/vinyltest/tests/b00046.vtc new file mode 100644 index 00000000000..37b9502569b --- /dev/null +++ b/bin/vinyltest/tests/b00046.vtc @@ -0,0 +1,36 @@ +vtest "Check that TCP OOB urgent data doesn't cause ill effects" + +server s1 { + rxreq + send_urgent " " + txresp + send_urgent " " + + rxreq + send_urgent " " + txresp + send_urgent " " +} -start + +# -cli because accept_filter may not be supported +vinyl v1 -cli "param.set accept_filter off" + +vinyl v1 -vcl+backend {} -start + +client c1 { + delay 0.5 + send_urgent " " + expect_close +} -run + +client c1 { + send_urgent " " + txreq -url /1 + send_urgent " " + rxresp + send_urgent " " + txreq -url /2 + send_urgent " " + rxresp + send_urgent " " +} -run diff --git a/bin/varnishtest/tests/b00047.vtc b/bin/vinyltest/tests/b00047.vtc similarity index 81% rename from bin/varnishtest/tests/b00047.vtc rename to bin/vinyltest/tests/b00047.vtc index 081cb0e6751..02c51348897 100644 --- a/bin/varnishtest/tests/b00047.vtc +++ b/bin/vinyltest/tests/b00047.vtc @@ -1,11 +1,11 @@ -varnishtest "Check that all but HTTP/1.0 and HTTP/1.1 get 400" +vtest "Check that all but HTTP/1.0 and HTTP/1.1 get 400" server s1 { rxreq txresp -body "FOO" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { } -start client c1 { diff --git a/bin/varnishtest/tests/b00048.vtc b/bin/vinyltest/tests/b00048.vtc similarity index 87% rename from bin/varnishtest/tests/b00048.vtc rename to bin/vinyltest/tests/b00048.vtc index e2deb71b9cd..93b6f9e87d9 100644 --- a/bin/varnishtest/tests/b00048.vtc +++ b/bin/vinyltest/tests/b00048.vtc @@ -1,4 +1,4 @@ -varnishtest "Run a lot of transactions through" +vtest "Run a lot of transactions through" server s0 { loop 10 { @@ -10,7 +10,7 @@ server s0 { expect_close } -dispatch -varnish v1 -arg "-Wpoll" -vcl+backend { +vinyl v1 -arg "-Wpoll" -vcl+backend { sub vcl_recv { return (pass); } diff --git a/bin/varnishtest/tests/b00049.vtc b/bin/vinyltest/tests/b00049.vtc similarity index 92% rename from bin/varnishtest/tests/b00049.vtc rename to bin/vinyltest/tests/b00049.vtc index b21d01b64a9..ee2af073021 100644 --- a/bin/varnishtest/tests/b00049.vtc +++ b/bin/vinyltest/tests/b00049.vtc @@ -1,11 +1,11 @@ -varnishtest "RFC 9110 compliance" +vtest "RFC 9110 compliance" server s1 { rxreq txresp -gzipbody "FOOOOOOBAR" } -start -varnish v1 -vcl+backend { } -start +vinyl v1 -vcl+backend { } -start logexpect l1 -v v1 -g raw { expect * 1004 BogoHeader "Illegal char 0x20 in header name" diff --git a/bin/vinyltest/tests/b00050.vtc b/bin/vinyltest/tests/b00050.vtc new file mode 100644 index 00000000000..2d0104bba1e --- /dev/null +++ b/bin/vinyltest/tests/b00050.vtc @@ -0,0 +1,61 @@ +vtest "VXID log filtering" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -arg "-p thread_pools=1" -vcl+backend { } -start + +logexpect l1 -v v1 -q "vxid == 1001" { + expect 0 1001 Begin "req 1000 rxreq" +} -start + +client c1 { + txreq + rxresp +} -run + +logexpect l1 -wait + +# vxid only supports integer operations + +shell -err -expect "Expected vxid operator got '~'" { + vinyllog -n ${v1_name} -d -q 'vxid ~ 1001' +} + +shell -err -expect "Expected vxid operator got '!~'" { + vinyllog -n ${v1_name} -d -q 'vxid !~ 1001' +} + +shell -err -expect "Expected vxid operator got 'eq'" { + vinyllog -n ${v1_name} -d -q 'vxid eq 1001' +} + +shell -err -expect "Expected vxid operator got 'ne'" { + vinyllog -n ${v1_name} -d -q 'vxid ne 1001' +} + +# vxid only supports integer operands + +shell -err -expect "Expected integer got '1001.5'" { + vinyllog -n ${v1_name} -d -q 'vxid != 1001.5' +} + +# vxid doesn't support taglist selection + +shell -err -expect "Unexpected taglist selection for vxid" { + vinyllog -n ${v1_name} -d -q 'vxid[1] >= 1001' +} + +shell -err -expect "Unexpected taglist selection for vxid" { + vinyllog -n ${v1_name} -d -q '{1}vxid <= 1001' +} + +shell -err -expect "Unexpected taglist selection for vxid" { + vinyllog -n ${v1_name} -d -q 'vxid,Link > 1001' +} + +shell -err -expect "Unexpected taglist selection for vxid" { + vinyllog -n ${v1_name} -d -q 'vxid,vxid < 1001' +} diff --git a/bin/varnishtest/tests/b00051.vtc b/bin/vinyltest/tests/b00051.vtc similarity index 88% rename from bin/varnishtest/tests/b00051.vtc rename to bin/vinyltest/tests/b00051.vtc index 3681ad2b363..1f0b2083050 100644 --- a/bin/varnishtest/tests/b00051.vtc +++ b/bin/vinyltest/tests/b00051.vtc @@ -1,11 +1,11 @@ -varnishtest "Test req.hash and bereq.hash" +vtest "Test req.hash and bereq.hash" server s1 { rxreq txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import blob; sub vcl_backend_response { diff --git a/bin/vinyltest/tests/b00052.vtc b/bin/vinyltest/tests/b00052.vtc new file mode 100644 index 00000000000..340473ceea4 --- /dev/null +++ b/bin/vinyltest/tests/b00052.vtc @@ -0,0 +1,60 @@ +vtest "The cache_hit_grace counter" + +server s1 { + rxreq + expect req.url == "/1" + expect req.http.bgfetch == false + txresp -hdr "Age: 1" -hdr "Cache-Control: max-age=2" -body "1" + + rxreq + expect req.url == "/1" + expect req.http.bgfetch == true + txresp -body "2" + + rxreq + expect req.url == "/2" + expect req.http.bgfetch == false + txresp +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_fetch { + set bereq.http.bgfetch = bereq.is_bgfetch; + } +} -start + +client c1 { + txreq -url "/1" + rxresp + expect resp.body == "1" +} -run + +delay 2 + +# Get a grace hit, will trigger a background fetch + +client c2 { + txreq -url "/1" + rxresp + expect resp.body == "1" +} -run + +vinyl v1 -expect cache_hit >= cache_hit_grace + +delay 2 + +client c3 { + txreq -url "/2" + rxresp + txreq -url "/1" + rxresp + expect resp.body == "2" +} -run + +vinyl v1 -expect cache_hit >= cache_hit_grace + +# Check that counters are correct: + +vinyl v1 -expect cache_hit == 2 +vinyl v1 -expect cache_hit_grace == 1 +vinyl v1 -expect cache_miss == 2 diff --git a/bin/vinyltest/tests/b00053.vtc b/bin/vinyltest/tests/b00053.vtc new file mode 100644 index 00000000000..287c45df52b --- /dev/null +++ b/bin/vinyltest/tests/b00053.vtc @@ -0,0 +1,84 @@ +vtest "Does anything get through Unix domain sockets at all ?" + +server s1 -listen "${tmpdir}/s1.sock" { + rxreq + txresp -body "012345\n" +} -start + +vinyl v1 -arg "-a ${tmpdir}/v1.sock -a ${listen_addr}" -vcl+backend { + sub vcl_backend_response { + set beresp.do_stream = false; + } + sub vcl_deliver { + # make s_resp_hdrbytes deterministic + unset resp.http.via; + } +} -start + +vinyl v1 -cliok "param.set debug +workspace" +vinyl v1 -cliok "param.set debug +witness" + +vinyl v1 -expect n_object == 0 +vinyl v1 -expect sess_conn == 0 +vinyl v1 -expect client_req == 0 +vinyl v1 -expect cache_miss == 0 + +client c1 -connect "${v1_sock}" { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect n_object == 1 +vinyl v1 -expect sess_conn == 1 +vinyl v1 -expect client_req == 1 +vinyl v1 -expect cache_miss == 1 +vinyl v1 -expect s_sess == 1 +vinyl v1 -expect s_resp_bodybytes == 7 +vinyl v1 -expect s_resp_hdrbytes == 156 + +# vinyltest "vtc v_* macros when the listen address is UDS" (a00019) + +vinyl v2 -arg "-a ${tmpdir}/v1.sock -b '${bad_backend}'" -start + +vinyl v2 -syntax 4.0 -errvcl {Compiled VCL version (4.0) not supported.} { + backend default None; +} + +vinyl v2 -syntax 4.0 -errvcl \ + {Unix socket backends only supported in VCL4.1 and higher.} \ + {backend default { .path = "${tmpdir}/v1.sock"; }} + +vinyl v3 -vcl { + backend default None; + + sub vcl_recv { + return(synth(200)); + } + + sub vcl_synth { + set resp.http.addr = "${v1_addr}"; + set resp.http.port = "${v1_port}"; + set resp.http.sock = "${v1_sock}"; + set resp.http.a0_addr = "${v1_a0_addr}"; + set resp.http.a0_port = "${v1_a0_port}"; + set resp.http.a0_sock = "${v1_a0_sock}"; + set resp.http.a1_addr = "${v1_a1_addr}"; + set resp.http.a1_port = "${v1_a1_port}"; + set resp.http.a1_sock = "${v1_a1_sock}"; + } +} -start + +client c1 -connect ${v3_sock} { + txreq + rxresp + expect resp.http.addr == "0.0.0.0" + expect resp.http.port == "0" + expect resp.http.sock == "${tmpdir}/v1.sock" + expect resp.http.a0_addr == "0.0.0.0" + expect resp.http.a0_port == "0" + expect resp.http.a0_sock == "${tmpdir}/v1.sock" + expect resp.http.a1_addr != "0.0.0.0" + expect resp.http.a1_port != "0" + expect resp.http.a1_sock ~ "[^ ]+:[^ ]+" +} -run diff --git a/bin/vinyltest/tests/b00054.vtc b/bin/vinyltest/tests/b00054.vtc new file mode 100644 index 00000000000..9ed8e8b6d25 --- /dev/null +++ b/bin/vinyltest/tests/b00054.vtc @@ -0,0 +1,18 @@ +vtest "Check poll acceptor on a UDS listen address" + +server s1 { + rxreq + txresp -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 -arg "-a ${tmpdir}/v1.sock -Wpoll" -vcl+backend {} -start + +client c1 -connect "${tmpdir}/v1.sock" { + txreq -url "/" + rxresp + expect resp.status == 200 + delay .1 + txreq -url "/" + rxresp + expect resp.status == 200 +} -run diff --git a/bin/vinyltest/tests/b00055.vtc b/bin/vinyltest/tests/b00055.vtc new file mode 100644 index 00000000000..50f9fd4cd99 --- /dev/null +++ b/bin/vinyltest/tests/b00055.vtc @@ -0,0 +1,30 @@ +vtest "Check pipelining over a UDS listen address" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -body "foo" + rxreq + expect req.url == "/bar" + txresp -body "foobar" +} -start + +vinyl v1 -arg "-a ${tmpdir}/v1.sock" -vcl+backend {} -start + +client c1 -connect "${tmpdir}/v1.sock" { + send "GET /foo HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\nGET /bar HTTP/1.1\nHost: foo\n\n" + rxresp + expect resp.status == 200 + expect resp.bodylen == 3 + expect resp.http.X-Vinyl == "1001" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1003" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1005 1004" +} -run + +vinyl v1 -expect sess_readahead == 2 diff --git a/bin/vinyltest/tests/b00056.vtc b/bin/vinyltest/tests/b00056.vtc new file mode 100644 index 00000000000..c1a0c0a3a50 --- /dev/null +++ b/bin/vinyltest/tests/b00056.vtc @@ -0,0 +1,36 @@ +vtest "Check read-head / partial pipelining over a UDS listen address" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -body "foo" + rxreq + expect req.url == "/bar" + txresp -body "foobar" +} -start + +vinyl v1 -arg "-a ${tmpdir}/v1.sock" -vcl+backend {} + +# NB: The accept_filter param may not exist. +vinyl v1 -cli "param.set accept_filter false" +vinyl v1 -start + +client c1 -connect "${tmpdir}/v1.sock" { + send "GET /foo HTTP/1.1\r\nHost: foo\r\n\r\nGET " + rxresp + expect resp.status == 200 + expect resp.bodylen == 3 + expect resp.http.X-Vinyl == "1001" + send "/bar HTTP/1.1\nHost: foo\n\nGET /bar " + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1003" + send "HTTP/1.1\nHost: foo\n\n" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1005 1004" +} -run + +vinyl v1 -expect sess_readahead == 2 diff --git a/bin/vinyltest/tests/b00057.vtc b/bin/vinyltest/tests/b00057.vtc new file mode 100644 index 00000000000..b0ccabb27bb --- /dev/null +++ b/bin/vinyltest/tests/b00057.vtc @@ -0,0 +1,22 @@ +vtest "Test orderly connection closure of a UDS listen socket" + + +server s1 -listen "${tmpdir}/s1.sock" { + rxreq + txresp -nolen -hdr "Transfer-encoding: chunked" + delay .2 + chunkedlen 30000 + delay .2 + chunkedlen 100000 + delay .2 + chunkedlen 0 +} -start + +vinyl v1 -arg "-a ${tmpdir}/v1.sock" -vcl+backend { } -start + +client c1 -connect "${tmpdir}/v1.sock" { + txreq -hdr "Connection: close" + delay 3 + rxresp + expect resp.bodylen == 130000 +} -run diff --git a/bin/vinyltest/tests/b00058.vtc b/bin/vinyltest/tests/b00058.vtc new file mode 100644 index 00000000000..b3403666b8f --- /dev/null +++ b/bin/vinyltest/tests/b00058.vtc @@ -0,0 +1,12 @@ +vtest "Test backend definition documentation examples" + +feature cmd {getent hosts localhost && getent services http} + +vinyl v1 -arg "-p vcc_feature=-err_unref" -vcl { + backend b1 {.host = "127.0.0.1";} + backend b2 {.host = "[::1]:8080";} + backend b3 {.host = "${localhost} 8081";} + backend b4 {.host = "${localhost} http";} + backend b5 {.host = "127.0.0.1";.port = "8081";} + backend b6 {.host = "127.0.0.1";.port = "http";} +} diff --git a/bin/varnishtest/tests/b00059.vtc b/bin/vinyltest/tests/b00059.vtc similarity index 85% rename from bin/varnishtest/tests/b00059.vtc rename to bin/vinyltest/tests/b00059.vtc index c529a5f8246..e29298d54da 100644 --- a/bin/varnishtest/tests/b00059.vtc +++ b/bin/vinyltest/tests/b00059.vtc @@ -1,4 +1,4 @@ -varnishtest "Run a lot of transactions through Unix domain sockets" +vtest "Run a lot of transactions through Unix domain sockets" server s0 -listen "${tmpdir}/s1.sock" { loop 10 { @@ -10,7 +10,7 @@ server s0 -listen "${tmpdir}/s1.sock" { expect_close } -dispatch -varnish v1 -arg "-a ${tmpdir}/v1.sock -Wpoll" -vcl+backend { +vinyl v1 -arg "-a ${tmpdir}/v1.sock -Wpoll" -vcl+backend { sub vcl_recv { return (pass); } diff --git a/bin/varnishtest/tests/b00060.vtc b/bin/vinyltest/tests/b00060.vtc similarity index 78% rename from bin/varnishtest/tests/b00060.vtc rename to bin/vinyltest/tests/b00060.vtc index a8bfba9504b..dd0bb59b95a 100644 --- a/bin/varnishtest/tests/b00060.vtc +++ b/bin/vinyltest/tests/b00060.vtc @@ -1,11 +1,11 @@ -varnishtest "VSL tags affected by the use of UDS addresses" +vtest "VSL tags affected by the use of UDS addresses" server s1 -listen "${tmpdir}/s1.sock" { rxreq txresp } -start -varnish v1 -arg "-a foo=${tmpdir}/v1.sock" -vcl+backend {} -start +vinyl v1 -arg "-a foo=${tmpdir}/v1.sock" -vcl+backend {} -start client c1 -connect "${tmpdir}/v1.sock" { txreq diff --git a/bin/vinyltest/tests/b00061.vtc b/bin/vinyltest/tests/b00061.vtc new file mode 100644 index 00000000000..b9926f2bea2 --- /dev/null +++ b/bin/vinyltest/tests/b00061.vtc @@ -0,0 +1,15 @@ +vtest "-b arg with a Unix domain socket" + +server s1 -listen "${tmpdir}/s1.sock" { + rxreq + txresp -hdr "s1: got it" +} -start + +vinyl v1 -arg "-b ${s1_sock}" -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + expect resp.http.s1 == "got it" +} -run diff --git a/bin/varnishtest/tests/b00062.vtc b/bin/vinyltest/tests/b00062.vtc similarity index 85% rename from bin/varnishtest/tests/b00062.vtc rename to bin/vinyltest/tests/b00062.vtc index 4a828a53bab..b9a802c49e1 100644 --- a/bin/varnishtest/tests/b00062.vtc +++ b/bin/vinyltest/tests/b00062.vtc @@ -1,4 +1,4 @@ -varnishtest "Test that we properly wait for certain 304 cases" +vtest "Test that we properly wait for certain 304 cases" server s1 { rxreq @@ -15,13 +15,13 @@ server s1 { delay 1 txresp -status 304 - # Last request, to a different URL to catch it if varnish asks for "/" too many times + # Last request, to a different URL to catch it if vinyl asks for "/" too many times rxreq expect req.url == "/2" txresp -body "x" } -start -varnish v1 -arg "-p fetch_maxchunksize=64k" -vcl+backend { +vinyl v1 -arg "-p fetch_maxchunksize=64k" -vcl+backend { sub vcl_backend_response { set beresp.ttl = 1s; set beresp.grace = 1s; @@ -66,7 +66,7 @@ client c2 -wait client c3 -wait # Finally the request to "/2". The expect in the server block makes sure that -# there were no extra requests to "/" from varnish. +# there were no extra requests to "/" from vinyl. client c4 { txreq -url "/2" diff --git a/bin/varnishtest/tests/b00063.vtc b/bin/vinyltest/tests/b00063.vtc similarity index 88% rename from bin/varnishtest/tests/b00063.vtc rename to bin/vinyltest/tests/b00063.vtc index d88b38cd070..cd96d04f370 100644 --- a/bin/varnishtest/tests/b00063.vtc +++ b/bin/vinyltest/tests/b00063.vtc @@ -1,4 +1,4 @@ -varnishtest "Abandon background fetch when backend serves 5xx" +vtest "Abandon background fetch when backend serves 5xx" barrier b1 cond 2 barrier b2 cond 3 @@ -14,11 +14,11 @@ server s1 { expect req.url == "/1" txresp -status 503 -body "2" - # varnish will disconnect on a 503 + # vinyl will disconnect on a 503 accept rxreq expect req.url == "/1" - # wait until varnish has delivered 200 before replying + # wait until vinyl has delivered 200 before replying # with the 404 barrier b2 sync delay .1 @@ -31,8 +31,8 @@ server s1 { txresp -body "4" } -start -varnish v1 -cliok "param.set vsl_mask +ExpKill" -varnish v1 -vcl+backend { +vinyl v1 -cliok "param.set vsl_mask +ExpKill" +vinyl v1 -vcl+backend { sub vcl_backend_response { if (beresp.status >= 500 && bereq.is_bgfetch) { return (abandon); diff --git a/bin/varnishtest/tests/b00064.vtc b/bin/vinyltest/tests/b00064.vtc similarity index 92% rename from bin/varnishtest/tests/b00064.vtc rename to bin/vinyltest/tests/b00064.vtc index 73c7d2dff33..f0e6f81535c 100644 --- a/bin/varnishtest/tests/b00064.vtc +++ b/bin/vinyltest/tests/b00064.vtc @@ -1,4 +1,4 @@ -varnishtest "Test that req.grace will hold a client when a miss is anticipated" +vtest "Test that req.grace will hold a client when a miss is anticipated" barrier b1 cond 2 @@ -18,13 +18,13 @@ server s1 { delay .1 txresp -body "2" - # Last request, to a different URL to catch it if varnish asks for "/" too many times + # Last request, to a different URL to catch it if vinyl asks for "/" too many times rxreq expect req.url == "/2" txresp -body "x" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import std; sub vcl_recv { @@ -78,7 +78,7 @@ client c1 { # let the latest object's ttl expire. delay .2 -varnish v1 -expect n_object == 1 +vinyl v1 -expect n_object == 1 # c2 asks for the object under grace client c2 { diff --git a/bin/varnishtest/tests/b00065.vtc b/bin/vinyltest/tests/b00065.vtc similarity index 81% rename from bin/varnishtest/tests/b00065.vtc rename to bin/vinyltest/tests/b00065.vtc index daf030659b2..ead77ec2b0e 100644 --- a/bin/varnishtest/tests/b00065.vtc +++ b/bin/vinyltest/tests/b00065.vtc @@ -1,4 +1,4 @@ -varnishtest "Check that HEAD+pass returns Content-Length if backend provides it" +vtest "Check that HEAD+pass returns Content-Length if backend provides it" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp -nolen -hdr "Content-Length: 6" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.url == "/2") { return (pass); diff --git a/bin/varnishtest/tests/b00066.vtc b/bin/vinyltest/tests/b00066.vtc similarity index 88% rename from bin/varnishtest/tests/b00066.vtc rename to bin/vinyltest/tests/b00066.vtc index d1c224e0466..3716ce3fc00 100644 --- a/bin/varnishtest/tests/b00066.vtc +++ b/bin/vinyltest/tests/b00066.vtc @@ -1,4 +1,4 @@ -varnishtest "Test CC:max-age, CC:s-maxage and Expires handling" +vtest "Test CC:max-age, CC:s-maxage and Expires handling" server s1 { rxreq @@ -29,7 +29,7 @@ server s1 { -hdr "Cache-Control: s-maxage=3" } -start -varnish v1 -arg "-pdefault_ttl=0" -vcl+backend { +vinyl v1 -arg "-pdefault_ttl=0" -vcl+backend { sub vcl_backend_response { set beresp.http.ttl = beresp.ttl; set beresp.uncacheable = true; @@ -99,6 +99,6 @@ client c1 { } -run -varnish v1 -expect *.s1.req == 12 -varnish v1 -expect beresp_uncacheable == 12 -varnish v1 -expect beresp_shortlived == 0 +vinyl v1 -expect *.s1.req == 12 +vinyl v1 -expect beresp_uncacheable == 12 +vinyl v1 -expect beresp_shortlived == 0 diff --git a/bin/varnishtest/tests/b00067.vtc b/bin/vinyltest/tests/b00067.vtc similarity index 94% rename from bin/varnishtest/tests/b00067.vtc rename to bin/vinyltest/tests/b00067.vtc index 1b53348df93..12265db63f6 100644 --- a/bin/varnishtest/tests/b00067.vtc +++ b/bin/vinyltest/tests/b00067.vtc @@ -1,6 +1,6 @@ -varnishtest "Check timeout_idle" +vtest "Check timeout_idle" -varnish v1 -arg "-p timeout_idle=2" \ +vinyl v1 -arg "-p timeout_idle=2" \ -arg "-a ${listen_addr}" \ -arg "-a ${tmpdir}/v1.sock" \ -vcl { diff --git a/bin/varnishtest/tests/b00068.vtc b/bin/vinyltest/tests/b00068.vtc similarity index 96% rename from bin/varnishtest/tests/b00068.vtc rename to bin/vinyltest/tests/b00068.vtc index 57ab597ed46..04df1ea76b6 100644 --- a/bin/varnishtest/tests/b00068.vtc +++ b/bin/vinyltest/tests/b00068.vtc @@ -1,4 +1,4 @@ -varnishtest "Check timeout_linger" +vtest "Check timeout_linger" feature !workspace_emulator @@ -9,7 +9,7 @@ feature !workspace_emulator # Would we want VSL Info about waiter involvement? # -varnish v1 -arg "-p timeout_linger=1" \ +vinyl v1 -arg "-p timeout_linger=1" \ -arg "-a ${listen_addr}" \ -arg "-a ${tmpdir}/v1.sock" \ -vcl { diff --git a/bin/varnishtest/tests/b00069.vtc b/bin/vinyltest/tests/b00069.vtc similarity index 90% rename from bin/varnishtest/tests/b00069.vtc rename to bin/vinyltest/tests/b00069.vtc index 9d4145dc92e..863ba6707c9 100644 --- a/bin/varnishtest/tests/b00069.vtc +++ b/bin/vinyltest/tests/b00069.vtc @@ -1,4 +1,4 @@ -varnishtest "HTTP/1 parsing checks" +vtest "HTTP/1 parsing checks" # Some tricky requests that have been known to cause parsing errors in the past. @@ -7,7 +7,7 @@ server s1 -repeat 3 { txresp } -start -varnish v1 -vcl+backend "" -start +vinyl v1 -vcl+backend "" -start # This test checks a bug that was dependent on the contents of the buffer left behind # by the previous request diff --git a/bin/varnishtest/tests/b00070.vtc b/bin/vinyltest/tests/b00070.vtc similarity index 85% rename from bin/varnishtest/tests/b00070.vtc rename to bin/vinyltest/tests/b00070.vtc index df7d3d5f72b..a933db17e8c 100644 --- a/bin/varnishtest/tests/b00070.vtc +++ b/bin/vinyltest/tests/b00070.vtc @@ -1,6 +1,6 @@ -varnishtest "client.ip vs. string session attrs" +vtest "client.ip vs. string session attrs" -varnish v1 -vcl { +vinyl v1 -vcl { import debug; import std; backend dummy None; diff --git a/bin/vinyltest/tests/b00071.vtc b/bin/vinyltest/tests/b00071.vtc new file mode 100644 index 00000000000..e6ab08b1a7d --- /dev/null +++ b/bin/vinyltest/tests/b00071.vtc @@ -0,0 +1,9 @@ +vtest "vinyl-cli pid command" + +vinyl v1 -cliexpect "^Master: +[0-9]+\n$" pid +vinyl v1 -cliok "pid -j" + +vinyl v1 -vcl {backend be none;} -start + +vinyl v1 -cliexpect "^Master: +[0-9]+\nWorker: +[0-9]+\n$" pid +vinyl v1 -cliok "pid -j" diff --git a/bin/varnishtest/tests/b00072.vtc b/bin/vinyltest/tests/b00072.vtc similarity index 78% rename from bin/varnishtest/tests/b00072.vtc rename to bin/vinyltest/tests/b00072.vtc index 55e19b9d950..6d8918bc687 100644 --- a/bin/varnishtest/tests/b00072.vtc +++ b/bin/vinyltest/tests/b00072.vtc @@ -1,6 +1,6 @@ -varnishtest "failure in vcl_recv" +vtest "failure in vcl_recv" -varnish v1 -vcl { +vinyl v1 -vcl { import vtc; backend be none; diff --git a/bin/varnishtest/tests/b00073.vtc b/bin/vinyltest/tests/b00073.vtc similarity index 81% rename from bin/varnishtest/tests/b00073.vtc rename to bin/vinyltest/tests/b00073.vtc index 3372ba094e0..ac5d77d6d92 100644 --- a/bin/varnishtest/tests/b00073.vtc +++ b/bin/vinyltest/tests/b00073.vtc @@ -1,4 +1,4 @@ -varnishtest "backend connection close" +vtest "backend connection close" server s1 { rxreq @@ -29,7 +29,7 @@ server s1 { expect_close } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } @@ -46,11 +46,11 @@ varnish v1 -vcl+backend { } -start client c1 { - txreq -hdr "bereq-connection: close, x-varnish" + txreq -hdr "bereq-connection: close, X-Vinyl" rxresp expect resp.status == 200 - txreq -hdr "beresp-connection: close, x-varnish" + txreq -hdr "beresp-connection: close, X-Vinyl" rxresp expect resp.status == 200 @@ -65,5 +65,5 @@ client c1 { server s1 -wait -varnish v1 -expect MAIN.backend_recycle == 0 -varnish v1 -expect VBE.vcl1.s1.conn == 0 +vinyl v1 -expect MAIN.backend_recycle == 0 +vinyl v1 -expect VBE.vcl1.s1.conn == 0 diff --git a/bin/varnishtest/tests/b00074.vtc b/bin/vinyltest/tests/b00074.vtc similarity index 88% rename from bin/varnishtest/tests/b00074.vtc rename to bin/vinyltest/tests/b00074.vtc index 8a0d0f0ae90..108c32a1b7d 100644 --- a/bin/varnishtest/tests/b00074.vtc +++ b/bin/vinyltest/tests/b00074.vtc @@ -1,10 +1,10 @@ -varnishtest "Test logexpect fail command" +vtest "Test logexpect fail command" -# NOTE: this is a test of varnishtest itself, so it would fall under +# NOTE: this is a test of vinyltest itself, so it would fall under # the "a" category, but has been filed under the "b" category because -# it needs varnishd +# it needs vinyld -varnish v1 -vcl { +vinyl v1 -vcl { import std; backend proforma None; diff --git a/bin/varnishtest/tests/b00075.vtc b/bin/vinyltest/tests/b00075.vtc similarity index 88% rename from bin/varnishtest/tests/b00075.vtc rename to bin/vinyltest/tests/b00075.vtc index bea1b6db20e..755552b8080 100644 --- a/bin/varnishtest/tests/b00075.vtc +++ b/bin/vinyltest/tests/b00075.vtc @@ -1,4 +1,4 @@ -varnishtest "Test backend preamble" +vtest "Test backend preamble" server s1 { rxreq @@ -13,7 +13,7 @@ server s1 { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { backend s1 { .host = "${s1_sock}"; .preamble = :UE9TVCAvcHJlYW1ibGUgSFRUUC83LjMKSGVhZGVyOiA0MgoKCg==: ; diff --git a/bin/varnishtest/tests/b00076.vtc b/bin/vinyltest/tests/b00076.vtc similarity index 77% rename from bin/varnishtest/tests/b00076.vtc rename to bin/vinyltest/tests/b00076.vtc index dbb01e81f29..d75bd990362 100644 --- a/bin/varnishtest/tests/b00076.vtc +++ b/bin/vinyltest/tests/b00076.vtc @@ -1,6 +1,6 @@ -varnishtest "Non-symbolic HTTP headers names" +vtest "Non-symbolic HTTP headers names" -varnish v1 -errvcl "Invalid character '\\n' in header name" { +vinyl v1 -errvcl "Invalid character '\\n' in header name" { backend be none; sub vcl_recv { set req.http.{"line @@ -8,21 +8,21 @@ break"} = "invalid"; } } -varnish v1 -errvcl "Expected '=' got '.'" { +vinyl v1 -errvcl "Expected '=' got '.'" { backend be none; sub vcl_recv { set req."http".wrong-quote = "invalid"; } } -varnish v1 -syntax 4.0 -errvcl "Quoted headers are available for VCL >= 4.1" { +vinyl v1 -syntax 4.0 -errvcl "Quoted headers are available for VCL >= 4.1" { backend be none; sub vcl_recv { set req.http."quoted" = "invalid"; } } -varnish v1 -vcl { +vinyl v1 -vcl { import std; backend be none; sub vcl_recv { diff --git a/bin/varnishtest/tests/b00077.vtc b/bin/vinyltest/tests/b00077.vtc similarity index 83% rename from bin/varnishtest/tests/b00077.vtc rename to bin/vinyltest/tests/b00077.vtc index d44cc107315..af1d767e5c2 100644 --- a/bin/varnishtest/tests/b00077.vtc +++ b/bin/vinyltest/tests/b00077.vtc @@ -1,4 +1,4 @@ -varnishtest "SLT_Hit ongoing fetch" +vtest "SLT_Hit ongoing fetch" barrier b1 cond 2 -cyclic barrier b2 cond 2 -cyclic @@ -20,9 +20,9 @@ server s1 { chunked "" } -start -varnish v1 -cliok "param.set debug +syncvsl" -varnish v1 -cliok "param.set thread_pools 1" -varnish v1 -vcl+backend "" -start +vinyl v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set thread_pools 1" +vinyl v1 -vcl+backend "" -start client c1 { txreq @@ -52,7 +52,7 @@ client c2 -wait # Recycle almost everything for the chunked variant -varnish v1 -cliok "ban obj.status != 0" +vinyl v1 -cliok "ban obj.status != 0" client c1 -start diff --git a/bin/vinyltest/tests/b00078.vtc b/bin/vinyltest/tests/b00078.vtc new file mode 100644 index 00000000000..92fa298f209 --- /dev/null +++ b/bin/vinyltest/tests/b00078.vtc @@ -0,0 +1,27 @@ +vtest "deprecated parameters" + +vinyl v1 -arg "-b none" -start + +# permanent alias + +vinyl v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliexpect "[+]syncvsl" "param.show deprecated_dummy" +vinyl v1 -cliexpect "[+]syncvsl" "param.show -j deprecated_dummy" + +shell -err { + vinyladm -n ${v1_name} "param.show" | grep deprecated_dummy +} + +shell -err { + vinyladm -n ${v1_name} "param.show -l" | grep deprecated_dummy +} + +shell -err { + vinyladm -n ${v1_name} "param.show -j" | grep deprecated_dummy +} + +# temporary aliases + +vinyl v1 -cliexpect vcc_feature "param.show vcc_allow_inline_c" +vinyl v1 -cliexpect vcc_feature "param.show vcc_err_unref" +vinyl v1 -cliexpect vcc_feature "param.show vcc_unsafe_path" diff --git a/bin/varnishtest/tests/b00079.vtc b/bin/vinyltest/tests/b00079.vtc similarity index 92% rename from bin/varnishtest/tests/b00079.vtc rename to bin/vinyltest/tests/b00079.vtc index efb4512617f..bf24ea89536 100644 --- a/bin/varnishtest/tests/b00079.vtc +++ b/bin/vinyltest/tests/b00079.vtc @@ -1,10 +1,10 @@ -varnishtest "Test backend IMS with weak and strong LM" +vtest "Test backend IMS with weak and strong LM" server s1 { rxreq txresp -hdr "Last-Modified: Wed, 11 Sep 2013 13:36:55 GMT" -nodate -body "1" - # When origin does not send a Date, varnish inserts one, prompting IMS + # When origin does not send a Date, vinyl inserts one, prompting IMS rxreq expect req.http.if-modified-since == "Wed, 11 Sep 2013 13:36:55 GMT" txresp -status 304 -hdr "Last-Modified: Wed, 11 Sep 2013 13:36:55 GMT" \ @@ -33,7 +33,7 @@ server s1 { -hdr {ETag: "foo"} } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 1ms; set beresp.grace = 0s; diff --git a/bin/varnishtest/tests/b00080.vtc b/bin/vinyltest/tests/b00080.vtc similarity index 96% rename from bin/varnishtest/tests/b00080.vtc rename to bin/vinyltest/tests/b00080.vtc index d1227f1be4f..ec8aaf7a7b3 100644 --- a/bin/varnishtest/tests/b00080.vtc +++ b/bin/vinyltest/tests/b00080.vtc @@ -1,4 +1,4 @@ -varnishtest "Keep-Alive is a hop-by-hop header" +vtest "Keep-Alive is a hop-by-hop header" server s1 { rxreq @@ -28,7 +28,7 @@ server s1 { txresp -hdr "Connection: Keep-Alive" -hdr "Keep-Alive: 4" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { set req.http.req-keep-alive = !(!req.http.Keep-Alive); } diff --git a/bin/varnishtest/tests/b00081.vtc b/bin/vinyltest/tests/b00081.vtc similarity index 80% rename from bin/varnishtest/tests/b00081.vtc rename to bin/vinyltest/tests/b00081.vtc index 6b334f0cd46..e8a29a626d8 100644 --- a/bin/varnishtest/tests/b00081.vtc +++ b/bin/vinyltest/tests/b00081.vtc @@ -1,4 +1,4 @@ -varnishtest "test iovec flush counter" +vtest "test iovec flush counter" server s0 { rxreq @@ -8,34 +8,34 @@ server s0 { # http1_iovs # Simple request/response -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start -varnish v1 -cliok "param.set http1_iovs 30" +vinyl v1 -cliok "param.set http1_iovs 30" client c1 { txreq rxresp } -run -varnish v1 -expect MAIN.http1_iovs_flush == 0 +vinyl v1 -expect MAIN.http1_iovs_flush == 0 # Decreasing http1_iovs causes premature flushes -varnish v1 -cliok "param.set http1_iovs 5" +vinyl v1 -cliok "param.set http1_iovs 5" client c1 { txreq rxresp } -run -varnish v1 -expect MAIN.http1_iovs_flush > 0 +vinyl v1 -expect MAIN.http1_iovs_flush > 0 ################################################## # Increase number of headers on fetch side -varnish v1 -cliok "param.set http1_iovs 30" +vinyl v1 -cliok "param.set http1_iovs 30" -varnish v1 -stop -varnish v1 -vcl+backend { +vinyl v1 -stop +vinyl v1 -vcl+backend { sub vcl_backend_fetch { set bereq.http.hdr1 = "hdr"; set bereq.http.hdr2 = "hdr"; @@ -67,13 +67,13 @@ client c1 { } -run # http1_iovs parameter does not affect fetch -varnish v1 -expect MAIN.http1_iovs_flush == 0 +vinyl v1 -expect MAIN.http1_iovs_flush == 0 ##################################################### # Increase number of headers on deliver side -varnish v1 -stop -varnish v1 -vcl+backend { +vinyl v1 -stop +vinyl v1 -vcl+backend { sub vcl_deliver { set resp.http.hdr1 = "hdr"; set resp.http.hdr2 = "hdr"; @@ -98,7 +98,7 @@ varnish v1 -vcl+backend { } } -start -varnish v1 -cliok "param.set http1_iovs 30" +vinyl v1 -cliok "param.set http1_iovs 30" client c1 { txreq @@ -106,28 +106,28 @@ client c1 { } -run # http1_iovs parameter affects deliver -varnish v1 -expect MAIN.http1_iovs_flush > 0 +vinyl v1 -expect MAIN.http1_iovs_flush > 0 ################################################## # Compare with workspace_thread # 0.5k is enough for simplest request/response -varnish v1 -cliok "param.reset http1_iovs" -varnish v1 -stop +vinyl v1 -cliok "param.reset http1_iovs" +vinyl v1 -stop -varnish v1 -cliok "param.set workspace_thread 0.5k" -varnish v1 -vcl+backend {} -start +vinyl v1 -cliok "param.set workspace_thread 0.5k" +vinyl v1 -vcl+backend {} -start client c1 { txreq rxresp } -run -varnish v1 -expect MAIN.http1_iovs_flush == 0 +vinyl v1 -expect MAIN.http1_iovs_flush == 0 # Increase number of headers on fetch side -varnish v1 -stop -varnish v1 -vcl+backend { +vinyl v1 -stop +vinyl v1 -vcl+backend { sub vcl_backend_fetch { set bereq.http.hdr1 = "hdr"; set bereq.http.hdr2 = "hdr"; @@ -158,11 +158,11 @@ client c1 { } -run # workspace_thread parameter affects fetch -varnish v1 -expect MAIN.http1_iovs_flush > 0 +vinyl v1 -expect MAIN.http1_iovs_flush > 0 # Increase number of headers on deliver side -varnish v1 -stop -varnish v1 -vcl+backend { +vinyl v1 -stop +vinyl v1 -vcl+backend { sub vcl_deliver { set resp.http.hdr1 = "hdr"; set resp.http.hdr2 = "hdr"; @@ -193,4 +193,4 @@ client c1 { } -run # workspace_thread parameter affects deliver -varnish v1 -expect MAIN.http1_iovs_flush > 0 +vinyl v1 -expect MAIN.http1_iovs_flush > 0 diff --git a/bin/varnishtest/tests/b00082.vtc b/bin/vinyltest/tests/b00082.vtc similarity index 83% rename from bin/varnishtest/tests/b00082.vtc rename to bin/vinyltest/tests/b00082.vtc index c22344d3166..ff0e91fbaaf 100644 --- a/bin/varnishtest/tests/b00082.vtc +++ b/bin/vinyltest/tests/b00082.vtc @@ -1,4 +1,4 @@ -varnishtest "Backend IMS 304 response with Content-Length 0" +vtest "Backend IMS 304 response with Content-Length 0" # this case tests invalid behaviour, which we should handle gracefully anyway @@ -10,7 +10,7 @@ server s1 { txresp -status 304 -nolen -hdr "Content-Length: 0" -hdr {Etag: "foo"} } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 1s; } diff --git a/bin/vinyltest/tests/b00083.vtc b/bin/vinyltest/tests/b00083.vtc new file mode 100644 index 00000000000..39ccd049652 --- /dev/null +++ b/bin/vinyltest/tests/b00083.vtc @@ -0,0 +1,47 @@ +vtest "VCP FIN-WAIT2" + +server s1 { + rxreq + txresp + + # Leave the TCP connection open in the FIN-WAIT2 state + delay 1000 +} -start + +server s2 { + rxreq + txresp +} -start + +vinyl v1 -vcl { + backend s1 { + .host = "${s1_sock}"; + } +} -start + +# The waiter depend on the backend_idle_timeout for when to give up and +# close the connection, so bump it up a bit. +vinyl v1 -cliok "param.set backend_idle_timeout 120" + +# The shutdown is done on the CLI thread, and it blocks until the waiter has +# killed the connection. So bump cli_timeout up as well +vinyl v1 -cliok "param.set cli_timeout 120" + +client c1 { + txreq -url "/" + rxresp +} -run + +vinyl v1 -vcl { + backend s2 { + .host = "${s2_sock}"; + } +} + +vinyl v1 -cliok "vcl.use vcl2" +vinyl v1 -cliok "vcl.discard vcl1" + +vinyl v1 -expect n_backend == 1 +vinyl v1 -expect backend_conn == 1 +vinyl v1 -expect backend_reuse == 0 +vinyl v1 -expect backend_recycle == 1 diff --git a/bin/vinyltest/tests/b00084.vtc b/bin/vinyltest/tests/b00084.vtc new file mode 100644 index 00000000000..6d04533069b --- /dev/null +++ b/bin/vinyltest/tests/b00084.vtc @@ -0,0 +1,45 @@ +vtest "make sure an already setup secret file remains protected" + +vinyl v1 -vcl { backend default none; } -start + +shell -match _.secret { + find "${tmpdir}"/v1/_.secret -perm 0640 -size 256c +} + +vinyl v1 -stop -wait + +shell { + test ! -f "${tmpdir}"/v1/_.secret +} + +# since vinyltest destroys workdir silently before startup +# this must fool vinyltest to not manage the workdir +shell -match _.secret { + set -e + mkdir -p "${tmpdir}"/v2/ + touch "${tmpdir}"/v2/_.secret + chmod 0666 "${tmpdir}"/v2/_.secret + find "${tmpdir}"/v2/_.secret -perm 0666 -size 0c +} + +process p1 "exec vinyld -n ${tmpdir}/v2 -F -f '' -a :0" -start + +# wait for startup and check permissions have changed +shell -match _.secret { + set -e + t=50 + while [ "$t" -gt 0 ] && [ ! -d "${tmpdir}"/v2/_.vsm_mgt ]; do + sleep 0.1 + t=$(($t - 1)) + done + sleep 0.2 + find "${tmpdir}"/v2/_.secret -perm 0640 -size 256c +} + +shell "vinyladm -n ${tmpdir}/v2 ping" + +process p1 -stop -wait + +shell { + test ! -f "${tmpdir}"/v2/_.secret +} diff --git a/bin/varnishtest/tests/b00085.vtc b/bin/vinyltest/tests/b00085.vtc similarity index 92% rename from bin/varnishtest/tests/b00085.vtc rename to bin/vinyltest/tests/b00085.vtc index 18b869000a2..15a0724d0ef 100644 --- a/bin/varnishtest/tests/b00085.vtc +++ b/bin/vinyltest/tests/b00085.vtc @@ -1,6 +1,6 @@ -varnishtest "Test VSS_resolver_range" +vtest "Test VSS_resolver_range" -varnish v1 -vcl { +vinyl v1 -vcl { backend default none; import debug; @@ -110,19 +110,19 @@ client c1 { txreq -hdr "resolve: :80" rxresp - expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80|0\.0\.0\.0:80, :::80)$} + expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80|0\.0\.0\.0:80(, :::80)?)$} txreq -hdr "resolve: :http" rxresp - expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80|0\.0\.0\.0:80, :::80)$} + expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80|0\.0\.0\.0:80(, :::80)?)$} txreq -hdr "resolve: :80-81" rxresp - expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80, :::81, 0\.0\.0\.0:81|0\.0\.0\.0:80, :::80, 0\.0\.0\.0:81, :::81)$} + expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80, :::81, 0\.0\.0\.0:81|0\.0\.0\.0:80(, :::80)?, 0\.0\.0\.0:81(, :::81)?)$} txreq -hdr "resolve: :80-81" -hdr "def-port: 8001" rxresp - expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80, :::81, 0\.0\.0\.0:81|0\.0\.0\.0:80, :::80, 0\.0\.0\.0:81, :::81)$} + expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80, :::81, 0\.0\.0\.0:81|0\.0\.0\.0:80(, :::80)?, 0\.0\.0\.0:81(, :::81)?)$} # No port @@ -214,5 +214,5 @@ client c1 { txreq -hdr "resolve: :80-82" -hdr "fail-port: 81" rxresp - expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80, bad port|0\.0\.0\.0:80, :::80, bad port)$} + expect resp.reason ~ {^(:::80, 0\.0\.0\.0:80, bad port|0\.0\.0\.0:80(, :::80)?, bad port)$} } -run diff --git a/bin/vinyltest/tests/b00087.vtc b/bin/vinyltest/tests/b00087.vtc new file mode 100644 index 00000000000..0444566daab --- /dev/null +++ b/bin/vinyltest/tests/b00087.vtc @@ -0,0 +1,91 @@ +vtest "waiter counters" + +# XXX: Waiter implementation for poll & ports do not signal WAITER_REMCLOSE +feature cmd {test $(uname) != SunOS} + +barrier b1 cond 2 +barrier b2 cond 2 +barrier b3 cond 2 +barrier b4 cond 2 +barrier b5 cond 2 + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -arg "-p thread_pools=1" -vcl+backend {} -start +vinyl v1 -cliok "param.set timeout_linger 0.5" + +vinyl v1 -expect WAITER.pool0.conns == 0 +vinyl v1 -expect WAITER.pool0.remclose == 0 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 0 + +client c1 { + txreq + rxresp + expect resp.status == 200 + + # Wait so the client has to take a detour to the waiter + barrier b1 sync + barrier b2 sync + + txreq + rxresp + expect resp.status == 200 + + # Wait so the client has to take a detour to the waiter + barrier b3 sync + barrier b4 sync +} -start + +server s1 -wait +barrier b1 sync + +# client c1: conns +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 1 +vinyl v1 -expect WAITER.pool0.remclose == 1 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 0 + +barrier b2 sync +barrier b3 sync + +# client c1: conns, action +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 1 +vinyl v1 -expect WAITER.pool0.remclose == 1 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 1 + +barrier b4 sync +client c1 -wait + +# client c1: remclose, action +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 0 +vinyl v1 -expect WAITER.pool0.remclose == 2 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 1 + +vinyl v1 -cliok "param.set timeout_idle 1" + +client c2 { + txreq + rxresp + expect resp.status == 200 + + barrier b5 sync +} -start + +# client c1: remclose, action +# client c2: timeout +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 0 +vinyl v1 -expect WAITER.pool0.remclose == 2 +vinyl v1 -expect WAITER.pool0.timeout == 1 +vinyl v1 -expect WAITER.pool0.action == 1 + +barrier b5 sync diff --git a/bin/vinyltest/tests/b00088.vtc b/bin/vinyltest/tests/b00088.vtc new file mode 100644 index 00000000000..561e20c5c02 --- /dev/null +++ b/bin/vinyltest/tests/b00088.vtc @@ -0,0 +1,108 @@ +vtest "waiter & shutdown" + +# XXX: Waiter implementation for poll & ports do not signal WAITER_REMCLOSE +feature cmd {test $(uname) != SunOS} + +barrier b1 cond 2 +barrier b2 cond 2 +barrier b3 cond 3 +barrier b4 cond 3 + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -arg "-p thread_pools=1" -vcl+backend {} -start +vinyl v1 -cliok "param.set timeout_linger 0.5" + +vinyl v1 -expect WAITER.pool0.conns == 0 +vinyl v1 -expect WAITER.pool0.remclose == 0 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 0 + +client c1 { + txreq + rxresp + expect resp.status == 200 + + # Wait so the client has to take a detour to the waiter + barrier b1 sync + barrier b2 sync + + txreq + shutdown -write + rxresp + expect resp.status == 200 + expect_close +} -start + +server s1 -wait +barrier b1 sync + +# client c1: conns +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 1 +vinyl v1 -expect WAITER.pool0.remclose == 1 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 0 + +barrier b2 sync +client c1 -wait + +# client c1: action +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 0 +vinyl v1 -expect WAITER.pool0.remclose == 1 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 1 + +client c2 { + txreq + rxresp + expect resp.status == 200 + + # Wait so the client has to take a detour to the waiter + barrier b3 sync + barrier b4 sync + + shutdown -read + expect_close +} -start + +client c3 { + txreq + rxresp + expect resp.status == 200 + + # Wait so the client has to take a detour to the waiter + barrier b3 sync + barrier b4 sync + + shutdown + expect_close +} -start + +barrier b3 sync + +# client c1: action +# client c2: conns +# client c3: conns +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 2 +vinyl v1 -expect WAITER.pool0.remclose == 1 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 1 + +barrier b4 sync +client c2 -wait +client c3 -wait + +# client c1: action +# client c2: remclose +# client c3: remclose +# server s1: remclose +vinyl v1 -expect WAITER.pool0.conns == 0 +vinyl v1 -expect WAITER.pool0.remclose == 3 +vinyl v1 -expect WAITER.pool0.timeout == 0 +vinyl v1 -expect WAITER.pool0.action == 1 diff --git a/bin/varnishtest/tests/b00089.vtc b/bin/vinyltest/tests/b00089.vtc similarity index 81% rename from bin/varnishtest/tests/b00089.vtc rename to bin/vinyltest/tests/b00089.vtc index 7fa8fb21296..c7c18e0d2ff 100644 --- a/bin/varnishtest/tests/b00089.vtc +++ b/bin/vinyltest/tests/b00089.vtc @@ -1,9 +1,9 @@ -varnishtest "connect: blackhole" +vtest "connect: blackhole" # XXX: This test case relies on a way for us to never successed in connecting # to a backend. We need the connect syscall to hang forever. For TCP this means # that the backend must not respond to the three-way handshake initiated by -# Varnish. +# Vinyl. # # One way to achieve this is to use an IP address non-routeable over the # Internet, but this is not always a bullet-proof solution across all the @@ -15,7 +15,7 @@ varnishtest "connect: blackhole" feature cmd false -varnish v1 -vcl { +vinyl v1 -vcl { backend default { # Non-routeable IPv4 address to simulate connect_timeout # XXX: $\{blackhole_backend} @@ -24,7 +24,7 @@ varnish v1 -vcl { } } -start -varnish v1 -cli "param.set connect_timeout 2" +vinyl v1 -cli "param.set connect_timeout 2" client c1 { txreq -url "/blackhole" @@ -41,6 +41,6 @@ client c2 { client c1 -wait client c2 -wait -varnish v1 -expect MAIN.backend_conn == 0 -varnish v1 -expect MAIN.backend_busy == 1 -varnish v1 -expect MAIN.backend_fail == 1 +vinyl v1 -expect MAIN.backend_conn == 0 +vinyl v1 -expect MAIN.backend_busy == 1 +vinyl v1 -expect MAIN.backend_fail == 1 diff --git a/bin/varnishtest/tests/b00090.vtc b/bin/vinyltest/tests/b00090.vtc similarity index 77% rename from bin/varnishtest/tests/b00090.vtc rename to bin/vinyltest/tests/b00090.vtc index dd0c0da20a2..e4b5bf558f3 100644 --- a/bin/varnishtest/tests/b00090.vtc +++ b/bin/vinyltest/tests/b00090.vtc @@ -1,9 +1,9 @@ -varnishtest "connect: blackhole with queueing" +vtest "connect: blackhole with queueing" # XXX: This test case relies on a way for us to never successed in connecting # to a backend. We need the connect syscall to hang forever. For TCP this means # that the backend must not respond to the three-way handshake initiated by -# Varnish. +# Vinyl. # # One way to achieve this is to use an IP address non-routeable over the # Internet, but this is not always a bullet-proof solution across all the @@ -15,7 +15,7 @@ varnishtest "connect: blackhole with queueing" feature cmd false -varnish v1 -vcl { +vinyl v1 -vcl { backend default { # Non-routeable IPv4 address to simulate connect_timeout # XXX: $\{blackhole_backend} @@ -26,7 +26,7 @@ varnish v1 -vcl { } } -start -varnish v1 -cli "param.set connect_timeout 2" +vinyl v1 -cli "param.set connect_timeout 2" client c1 { txreq -url "/blackhole" @@ -43,7 +43,7 @@ client c2 { client c1 -wait client c2 -wait -varnish v1 -expect MAIN.backend_conn == 0 -varnish v1 -expect MAIN.backend_busy == 1 -varnish v1 -expect MAIN.backend_wait_fail == 1 -varnish v1 -expect MAIN.backend_fail == 1 +vinyl v1 -expect MAIN.backend_conn == 0 +vinyl v1 -expect MAIN.backend_busy == 1 +vinyl v1 -expect MAIN.backend_wait_fail == 1 +vinyl v1 -expect MAIN.backend_fail == 1 diff --git a/bin/varnishtest/tests/b00091.vtc b/bin/vinyltest/tests/b00091.vtc similarity index 80% rename from bin/varnishtest/tests/b00091.vtc rename to bin/vinyltest/tests/b00091.vtc index 9bc1b98ea14..251aff72db2 100644 --- a/bin/varnishtest/tests/b00091.vtc +++ b/bin/vinyltest/tests/b00091.vtc @@ -1,4 +1,4 @@ -varnishtest "IPs/port in varnishadm backend.list -j" +vtest "IPs/port in vinyladm backend.list -j" feature cmd "jq -V" @@ -6,7 +6,7 @@ server s0 { } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { backend s1 { .host = "127.0.0.1"; .port = "2222"; @@ -27,8 +27,8 @@ varnish v1 -vcl+backend { shell { set -e -varnishadm -n ${v1_name} backend.list -j - varnishadm -n ${v1_name} backend.list -jp > result.json +vinyladm -n ${v1_name} backend.list -j + vinyladm -n ${v1_name} backend.list -jp > result.json jq ' .[3]["vcl1.s0"].ipv4 == "${s0_addr}" or error("wrong s0 ipv4"), .[3]["vcl1.s1"].ipv4 == "127.0.0.1" or error("wrong s2 ipv4"), diff --git a/bin/varnishtest/tests/b00092.vtc b/bin/vinyltest/tests/b00092.vtc similarity index 92% rename from bin/varnishtest/tests/b00092.vtc rename to bin/vinyltest/tests/b00092.vtc index 878c68dd650..c1be0b19da1 100644 --- a/bin/varnishtest/tests/b00092.vtc +++ b/bin/vinyltest/tests/b00092.vtc @@ -1,4 +1,4 @@ -varnishtest "Use multiple objects for a single request" +vtest "Use multiple objects for a single request" server s0 { rxreq @@ -15,7 +15,7 @@ server s0 { # copy anyway to (re)generate the header name (we could avoid that by special # casing copies from workspaces and objects) -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import debug; sub vcl_recv { diff --git a/bin/vinyltest/tests/b00093.vtc b/bin/vinyltest/tests/b00093.vtc new file mode 100644 index 00000000000..968dda7e80d --- /dev/null +++ b/bin/vinyltest/tests/b00093.vtc @@ -0,0 +1,43 @@ +vtest "Check connection pool counters" + +server s1 {} -start +server s2 {} -start + +shell { + cat >${tmpdir}/simple.vcl <<-EOF + vcl 4.1; + backend default { + .host = "${s2_sock}"; + } + EOF +} + +vinyl v1 -vcl { + backend default { + .host = "${s1_sock}"; + } +} -start + +# Initially expect a miss +vinyl v1 -expect VCP.ref_hit == 0 +vinyl v1 -expect VCP.ref_miss == 1 + +vinyl v1 -vcl+backend { + sub vcl_recv { + if (req.url ~ "^/blah$") { + set req.backend_hint = s1; + } else { + set req.backend_hint = s2; + } + } +} + +# Expect a hit and a miss +vinyl v1 -expect VCP.ref_hit == 1 +vinyl v1 -expect VCP.ref_miss == 2 + +vinyl v1 -cliok "vcl.load foo ${tmpdir}/simple.vcl" + +# Pure hit +vinyl v1 -expect VCP.ref_hit == 2 +vinyl v1 -expect VCP.ref_miss == 2 diff --git a/bin/varnishtest/tests/b00094.vtc b/bin/vinyltest/tests/b00094.vtc similarity index 96% rename from bin/varnishtest/tests/b00094.vtc rename to bin/vinyltest/tests/b00094.vtc index 9058c19a6fe..f88fee16e52 100644 --- a/bin/varnishtest/tests/b00094.vtc +++ b/bin/vinyltest/tests/b00094.vtc @@ -1,4 +1,4 @@ -varnishtest "Test vcl_backend_refresh" +vtest "Test vcl_backend_refresh" barrier b1 sock 2 barrier b2 sock 2 @@ -21,7 +21,7 @@ server s1 { } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 1ms; @@ -102,7 +102,7 @@ server s1 { txresp -status 304 -hdr "be304-4: true" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; @@ -160,7 +160,7 @@ server s1 { txresp -status 304 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 0.01s; set beresp.grace = 0s; @@ -192,7 +192,7 @@ server s1 { txresp -status 304 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 0.01s; @@ -229,7 +229,7 @@ server s1 { txresp -status 304 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 0.01s; diff --git a/bin/varnishtest/tests/b00095.vtc b/bin/vinyltest/tests/b00095.vtc similarity index 96% rename from bin/varnishtest/tests/b00095.vtc rename to bin/vinyltest/tests/b00095.vtc index 681da0fc32f..565af58857c 100644 --- a/bin/varnishtest/tests/b00095.vtc +++ b/bin/vinyltest/tests/b00095.vtc @@ -1,4 +1,4 @@ -varnishtest "Test obj_stale vcl variables" +vtest "Test obj_stale vcl variables" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { txresp -status 304 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.http.vbresp = "true"; diff --git a/bin/varnishtest/tests/b00096.vtc b/bin/vinyltest/tests/b00096.vtc similarity index 92% rename from bin/varnishtest/tests/b00096.vtc rename to bin/vinyltest/tests/b00096.vtc index 079e5b21999..c579b3e1100 100644 --- a/bin/varnishtest/tests/b00096.vtc +++ b/bin/vinyltest/tests/b00096.vtc @@ -1,4 +1,4 @@ -varnishtest "Test vcl_backend_refresh on streaming object" +vtest "Test vcl_backend_refresh on streaming object" barrier b1 sock 2 barrier b2 sock 2 @@ -18,7 +18,7 @@ server s2 { txresp -status 304 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { diff --git a/bin/varnishtest/tests/b00097.vtc b/bin/vinyltest/tests/b00097.vtc similarity index 92% rename from bin/varnishtest/tests/b00097.vtc rename to bin/vinyltest/tests/b00097.vtc index a18ae7b4f9d..4cfc49d925e 100644 --- a/bin/varnishtest/tests/b00097.vtc +++ b/bin/vinyltest/tests/b00097.vtc @@ -1,4 +1,4 @@ -varnishtest "Test bereq.retry_connect aka extrachance" +vtest "Test bereq.retry_connect aka extrachance" server s0 { rxreq @@ -11,7 +11,7 @@ server s0 { txresp -hdr "Connection: keep-alive" -body "hello" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } @@ -47,7 +47,7 @@ client c2 { server s0 -break server s0 -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } @@ -73,7 +73,7 @@ client c3 { server s0 -break server s0 -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } @@ -98,7 +98,7 @@ client c4 { server s0 -break server s0 -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } diff --git a/bin/varnishtest/tests/b00098.vtc b/bin/vinyltest/tests/b00098.vtc similarity index 77% rename from bin/varnishtest/tests/b00098.vtc rename to bin/vinyltest/tests/b00098.vtc index da5c37a7b7f..7c1097e900b 100644 --- a/bin/varnishtest/tests/b00098.vtc +++ b/bin/vinyltest/tests/b00098.vtc @@ -1,4 +1,4 @@ -varnishtest "VSL tags backend age & reuse" +vtest "VSL tags backend age & reuse" server s1 { rxreq @@ -7,8 +7,8 @@ server s1 { txresp } -start -varnish v1 -vcl+backend {} -start -varnish v1 -cliok "param.set debug +syncvsl" +vinyl v1 -vcl+backend {} -start +vinyl v1 -cliok "param.set debug +syncvsl" client c1 { txreq diff --git a/bin/vinyltest/tests/c00000.vtc b/bin/vinyltest/tests/c00000.vtc new file mode 100644 index 00000000000..2291c5d8f8e --- /dev/null +++ b/bin/vinyltest/tests/c00000.vtc @@ -0,0 +1,32 @@ +vtest "Built-in split subroutine" + +server s1 { + rxreq + txresp -hdr "age: 12" \ + -hdr "cache-control: public, max-age=10, stale-while-revalidate=20" +} -start + +vinyl v1 -vcl+backend { + sub vcl_req_cookie { + return; # trust beresp headers + } + + sub vcl_beresp_stale { + if (beresp.ttl + beresp.grace > 0s) { + return; # cache stale responses + } + } +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + + txreq -hdr "cookie: unrelated=analytics" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect cache_hit == 1 +vinyl v1 -expect cache_hit == cache_hit_grace diff --git a/bin/varnishtest/tests/c00001.vtc b/bin/vinyltest/tests/c00001.vtc similarity index 93% rename from bin/varnishtest/tests/c00001.vtc rename to bin/vinyltest/tests/c00001.vtc index 5a338b2fbf6..7a2978ee14f 100644 --- a/bin/varnishtest/tests/c00001.vtc +++ b/bin/vinyltest/tests/c00001.vtc @@ -1,4 +1,4 @@ -varnishtest "Test VCL regsub()" +vtest "Test VCL regsub()" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { -body "012345\n" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.http.Snafu1 = regsub(beresp.http.Foobar, "ar", "\0\0"); set beresp.http.Snafu2 = @@ -32,7 +32,7 @@ client c1 { txreq -url "/" rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1001" + expect resp.http.X-Vinyl == "1001" expect resp.http.foobar == "_barf_" expect resp.http.snafu1 == "_bararf_" expect resp.http.snafu2 == "_frap_" diff --git a/bin/vinyltest/tests/c00002.vtc b/bin/vinyltest/tests/c00002.vtc new file mode 100644 index 00000000000..81f96042d2b --- /dev/null +++ b/bin/vinyltest/tests/c00002.vtc @@ -0,0 +1,22 @@ +vtest "Check that all thread pools all get started and get minimum threads" + +server s1 { + rxreq + txresp -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 \ + -arg "-p thread_pool_min=10" \ + -arg "-p thread_pool_max=10" \ + -arg "-p thread_pools=2" + +vinyl v1 -vcl+backend {} -start + + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect threads == 20 diff --git a/bin/vinyltest/tests/c00003.vtc b/bin/vinyltest/tests/c00003.vtc new file mode 100644 index 00000000000..01a89704b07 --- /dev/null +++ b/bin/vinyltest/tests/c00003.vtc @@ -0,0 +1,135 @@ +vtest "Check that we fail to start with erroneous -a/-b arguments" + +# Duplicate -a arguments +# XXX: this cannot be tested reliably, we tolerate port collision +shell -err -match "have same address|already in use|Address in use" { + if echo "${localhost}" | grep ":" >/dev/null ; then + vinyld -d -a "[${localhost}]":38484 -a "[${localhost}]":38484 -b None + else + vinyld -d -a ${localhost}:38484 -a ${localhost}:38484 -b None + fi +} + +shell -err -match "have same address|already in use|Address in use" { + vinyld -d -a ${tmpdir}/vtc.sock -a ${tmpdir}/vtc.sock -b None +} + +# -a bad protocol specs +shell -err -expect "Too many protocol sub-args" { + vinyld -a ${localhost}:80000,PROXY,FOO -d +} +shell -err -expect "Too many protocol sub-args" { + vinyld -a ${localhost}:80000,HTTP,FOO -d +} + +# -a UDS path too long +shell -err -match "Got no socket" { + vinyld -a /Although/sizeof/sockaddr_un/sun_path/is/platform/specific/this/path/is/really/definitely/and/most/assuredly/too/long/on/any/platform/--/any/length/that/results/in/sizeof/sockaddr_un/being/greater/than/128/will/probably/be/enough/to/blow/it/up. -d +} + +# -a relative path for a UDS address not permitted +shell -err -expect "Unix domain socket addresses must be absolute paths" { + vinyld -a foo/bar.sock -d +} + +# -a args for UDS permissions not permitted with IP addresses +shell -err -expect "Invalid sub-arg user=u" { + vinyld -a ${localhost}:80000,user=u -d +} + +shell -err -expect "Invalid sub-arg group=g" { + vinyld -a ${localhost}:80000,group=g -d +} + +shell -err -expect "Invalid sub-arg mode=660" { + vinyld -a ${localhost}:80000,mode=660 -d +} + +shell -err -expect "Invalid sub-arg mode=660" { + vinyld -a @abstract,mode=660 -d +} + +# Illegal mode sub-args +shell -err -expect "Too many mode sub-args" { + vinyld -a ${tmpdir}/vtc.sock,mode=660,mode=600 -d +} + +shell -err -expect "Empty mode sub-arg" { + vinyld -a ${tmpdir}/vtc.sock,mode= -d +} + +shell -err -expect "Invalid mode sub-arg 666devilish" { + vinyld -a ${tmpdir}/vtc.sock,mode=666devilish -d +} + +shell -err -expect "Invalid mode sub-arg devilish" { + vinyld -a ${tmpdir}/vtc.sock,mode=devilish -d +} + +shell -err -expect "Invalid mode sub-arg 999" { + vinyld -a ${tmpdir}/vtc.sock,mode=999 -d +} + +shell -err -expect "Cannot parse mode sub-arg 7" { + vinyld -a ${tmpdir}/vtc.sock,mode=77777777777777777777777777777777 -d +} + +shell -err -expect "Cannot parse mode sub-arg -7" { + vinyld -a ${tmpdir}/vtc.sock,mode=-77777777777777777777777777777777 -d +} + +shell -err -expect "Mode sub-arg 1666 out of range" { + vinyld -a ${tmpdir}/vtc.sock,mode=1666 -d +} + +shell -err -expect "Mode sub-arg 0 out of range" { + vinyld -a ${tmpdir}/vtc.sock,mode=0 -d +} + +shell -err -expect "Mode sub-arg -1 out of range" { + vinyld -a ${tmpdir}/vtc.sock,mode=-1 -d +} + +## +## user and group sub-args tested in c00086.vtc, where the user and group +## features are enabled. +## + +# Invalid sub-arg +shell -err -expect "Invalid sub-arg foo=bar" { + vinyld -a ${tmpdir}/vtc.sock,foo=bar -d +} + +# A sub-arg without '=' is interpreted as a protocol name. +shell -err -expect "Unknown protocol" { + vinyld -a ${tmpdir}/vtc.sock,foobar -d +} + +shell -err -expect "Invalid sub-arg userfoo=u" { + vinyld -a ${tmpdir}/vtc.sock,userfoo=u -d +} + +shell -err -expect "Invalid sub-arg groupfoo=g" { + vinyld -a ${tmpdir}/vtc.sock,groupfoo=g -d +} + +shell -err -expect "Invalid sub-arg modefoo=666" { + vinyld -a ${tmpdir}/vtc.sock,modefoo=666 -d +} + +shell -err -expect "Invalid sub-arg =foo" { + vinyld -a ${tmpdir}/vtc.sock,=foo -d +} + +# This requires non-local binds to be disabled. If you see this fail +# and are on Linux, ensure /proc/net/ipv4/ip_nonlocal_bind is set to 0. + +# All bad listen addresses +shell -err -expect "Error: Could not get socket" { + vinyld -F -a "${bad_ip}:0" -b '***' +} + +# old style address list +shell -err -expect "Unknown protocol" { + vinyld -F -a "${listen_addr},${bad_ip}:0" -b '***' +} diff --git a/bin/varnishtest/tests/c00004.vtc b/bin/vinyltest/tests/c00004.vtc similarity index 83% rename from bin/varnishtest/tests/c00004.vtc rename to bin/vinyltest/tests/c00004.vtc index 0af46c8b985..c84ae25165f 100644 --- a/bin/varnishtest/tests/c00004.vtc +++ b/bin/vinyltest/tests/c00004.vtc @@ -1,4 +1,4 @@ -varnishtest "Test Vary functionality" +vtest "Test Vary functionality" barrier b1 cond 3 @@ -35,50 +35,50 @@ server s1 { txresp -hdr "Cache-Control: no-cache" } -start -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start client c1 { txreq -hdr "Foobar: 1" rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1001" + expect resp.http.X-Vinyl == "1001" expect resp.http.snafu == "1" txreq -hdr "Foobar: 2" rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1003" + expect resp.http.X-Vinyl == "1003" expect resp.http.snafu == "2" txreq -hdr "Foobar: 3" rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1005" + expect resp.http.X-Vinyl == "1005" expect resp.http.snafu == "3" txreq rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1007" + expect resp.http.X-Vinyl == "1007" expect resp.http.snafu == "4" txreq -hdr "Foobar: 1 " rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1009 1002" + expect resp.http.X-Vinyl == "1009 1002" expect resp.http.snafu == "1" txreq -hdr "Foobar: 1 " rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1010 1002" + expect resp.http.X-Vinyl == "1010 1002" expect resp.http.snafu == "1" # empty header != no header txreq -hdr "Foobar: " rxresp expect resp.status == 200 - expect resp.http.X-Varnish == "1011" + expect resp.http.X-Vinyl == "1011" expect resp.http.snafu == "5" } -run diff --git a/bin/varnishtest/tests/c00005.vtc b/bin/vinyltest/tests/c00005.vtc similarity index 94% rename from bin/varnishtest/tests/c00005.vtc rename to bin/vinyltest/tests/c00005.vtc index cc995788eb2..b3f0f7cf9c5 100644 --- a/bin/varnishtest/tests/c00005.vtc +++ b/bin/vinyltest/tests/c00005.vtc @@ -1,17 +1,17 @@ -varnishtest "Test ACLs" +vtest "Test ACLs" server s1 { rxreq expect req.url == "/" txresp -body "1111\n" rxreq - expect req.url == "foo" + expect req.url == "/foo" txresp -body "2222\n" } -start -varnish v1 -arg "-p feature=+trace" +vinyl v1 -arg "-p feature=+trace" -varnish v1 -errvcl {Name acl1 must have type 'acl'.} { +vinyl v1 -errvcl {Name acl1 must have type 'acl'.} { sub vcl_recv { if (client.ip ~ acl1) { set req.url = "/"; @@ -23,7 +23,7 @@ varnish v1 -errvcl {Name acl1 must have type 'acl'.} { } } -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (client.ip ~ acl1) { set req.url = "/"; @@ -40,13 +40,13 @@ varnish v1 -vcl+backend { } -start client c1 { - txreq -url "foo" + txreq -url "/foo" rxresp expect resp.status == 200 expect resp.http.acl == acl1 } -run -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { acl acl1 { ! "${localhost}"; "0.0.0.0" / 0; @@ -65,9 +65,9 @@ varnish v1 -vcl+backend { client c1 -run -varnish v1 -cliok "param.set vsl_mask -VCL_trace" +vinyl v1 -cliok "param.set vsl_mask -VCL_trace" -varnish v1 -vcl { +vinyl v1 -vcl { import std; backend dummy None; @@ -172,7 +172,7 @@ client c1 { logexpect l1 -wait -varnish v1 -errvcl {Non-zero bits in masked part} { +vinyl v1 -errvcl {Non-zero bits in masked part} { import std; backend dummy None; @@ -186,7 +186,7 @@ varnish v1 -errvcl {Non-zero bits in masked part} { } } -varnish v1 -errvcl {Non-zero bits in masked part} { +vinyl v1 -errvcl {Non-zero bits in masked part} { import std; backend dummy None; @@ -201,7 +201,7 @@ varnish v1 -errvcl {Non-zero bits in masked part} { } # this is both an OK test for pedantic and fold -varnish v1 -vcl { +vinyl v1 -vcl { import std; backend dummy None; @@ -377,7 +377,7 @@ client c1 { logexpect l1 -wait # test +fold(-report) -varnish v1 -cliexpect ! "fold" {vcl.inline silent << EOF +vinyl v1 -cliexpect ! "fold" {vcl.inline silent << EOF vcl 4.1; backend dummy None; @@ -396,7 +396,7 @@ varnish v1 -cliexpect ! "fold" {vcl.inline silent << EOF EOF } -varnish v1 -errvcl "-fold(...) is invalid, use -fold" { +vinyl v1 -errvcl "-fold(...) is invalid, use -fold" { backend dummy None; acl acl1 +log +pedantic -fold(+foo) { @@ -404,7 +404,7 @@ varnish v1 -errvcl "-fold(...) is invalid, use -fold" { } } -varnish v1 -errvcl "The only ACL fold sub-flag is `report`" { +vinyl v1 -errvcl "The only ACL fold sub-flag is `report`" { backend dummy None; acl acl1 +log +pedantic +fold(+foo) { diff --git a/bin/varnishtest/tests/c00006.vtc b/bin/vinyltest/tests/c00006.vtc similarity index 77% rename from bin/varnishtest/tests/c00006.vtc rename to bin/vinyltest/tests/c00006.vtc index 7486271421b..d5cb35272e3 100644 --- a/bin/varnishtest/tests/c00006.vtc +++ b/bin/vinyltest/tests/c00006.vtc @@ -1,4 +1,4 @@ -varnishtest "Test banning a url" +vtest "Test banning a url" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp -body "11111\n" } -start -varnish v1 -vcl+backend { } -start +vinyl v1 -vcl+backend { } -start client c1 { txreq -url "/foo" @@ -20,7 +20,7 @@ client c1 { client c1 -run -varnish v1 -cli "ban req.url ~ foo" +vinyl v1 -cli "ban req.url ~ foo" client c1 { txreq -url "/foo" diff --git a/bin/vinyltest/tests/c00007.vtc b/bin/vinyltest/tests/c00007.vtc new file mode 100644 index 00000000000..3f9df7c86f6 --- /dev/null +++ b/bin/vinyltest/tests/c00007.vtc @@ -0,0 +1,5 @@ +vtest "Test banning a hash" + +vinyl v1 -arg "-b None" -start + +vinyl v1 -clierr 101 "ban.hash foo" diff --git a/bin/varnishtest/tests/c00008.vtc b/bin/vinyltest/tests/c00008.vtc similarity index 96% rename from bin/varnishtest/tests/c00008.vtc rename to bin/vinyltest/tests/c00008.vtc index eb3c472493f..243474f1e31 100644 --- a/bin/varnishtest/tests/c00008.vtc +++ b/bin/vinyltest/tests/c00008.vtc @@ -1,4 +1,4 @@ -varnishtest "Test Client IMS" +vtest "Test Client IMS" server s1 { rxreq @@ -12,7 +12,7 @@ server s1 { -hdr {ETag: "bar"} } -start -varnish v1 -vcl+backend { } -start +vinyl v1 -vcl+backend { } -start client c1 { txreq -url "/foo" diff --git a/bin/varnishtest/tests/c00009.vtc b/bin/vinyltest/tests/c00009.vtc similarity index 95% rename from bin/varnishtest/tests/c00009.vtc rename to bin/vinyltest/tests/c00009.vtc index 601b9403aca..434c39fe8ba 100644 --- a/bin/varnishtest/tests/c00009.vtc +++ b/bin/vinyltest/tests/c00009.vtc @@ -1,4 +1,4 @@ -varnishtest "Test restarts" +vtest "Test restarts" server s1 { rxreq @@ -12,7 +12,7 @@ server s2 { txresp -body "foobar" } -start -varnish v1 -syntax 4.0 -arg "-smysteve=malloc,1m" -vcl+backend { +vinyl v1 -syntax 4.0 -arg "-smysteve=malloc,1m" -vcl+backend { sub vcl_recv { if (req.restarts == 0) { set req.url = "/foo"; diff --git a/bin/varnishtest/tests/c00010.vtc b/bin/vinyltest/tests/c00010.vtc similarity index 79% rename from bin/varnishtest/tests/c00010.vtc rename to bin/vinyltest/tests/c00010.vtc index 5e8b087da90..7ec61da2e6a 100644 --- a/bin/varnishtest/tests/c00010.vtc +++ b/bin/vinyltest/tests/c00010.vtc @@ -1,4 +1,4 @@ -varnishtest "Test pass from hit" +vtest "Test pass from hit" server s1 { rxreq @@ -12,7 +12,7 @@ server s1 { txresp -body foobar12 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.url == "/foo") { return(hash); @@ -30,13 +30,13 @@ client c1 { rxresp expect resp.status == 200 expect resp.bodylen == 6 - expect resp.http.x-varnish == "1001" + expect resp.http.X-Vinyl == "1001" txreq -url "/foo" rxresp expect resp.status == 200 expect resp.bodylen == 7 - expect resp.http.x-varnish == "1003 1004" + expect resp.http.X-Vinyl == "1003 1004" # a pass following a hit on the same wrk should not be # reported as a hit @@ -44,7 +44,7 @@ client c1 { rxresp expect resp.status == 200 expect resp.bodylen == 8 - expect resp.http.x-varnish == "1005" + expect resp.http.X-Vinyl == "1005" } client c1 -run diff --git a/bin/varnishtest/tests/c00011.vtc b/bin/vinyltest/tests/c00011.vtc similarity index 87% rename from bin/varnishtest/tests/c00011.vtc rename to bin/vinyltest/tests/c00011.vtc index b183f0dc2d0..818480bfb52 100644 --- a/bin/varnishtest/tests/c00011.vtc +++ b/bin/vinyltest/tests/c00011.vtc @@ -1,4 +1,4 @@ -varnishtest "Test hit for miss (beresp.uncacheable = true)" +vtest "Test hit for miss (beresp.uncacheable = true)" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp -body foobar1 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.uncacheable = true; } @@ -31,7 +31,7 @@ client c1 { rxresp expect resp.status == 200 expect resp.bodylen == 6 - expect resp.http.x-varnish == "1001" + expect resp.http.X-Vinyl == "1001" expect resp.http.o_age >= 0 expect resp.http.o_age < 0.5 expect resp.http.o_ttl > 119.5 @@ -44,7 +44,7 @@ client c1 { rxresp expect resp.status == 200 expect resp.bodylen == 7 - expect resp.http.x-varnish == "1003" + expect resp.http.X-Vinyl == "1003" expect resp.http.o_age >= 0 expect resp.http.o_age < 0.5 expect resp.http.o_ttl > 119.5 diff --git a/bin/varnishtest/tests/c00012.vtc b/bin/vinyltest/tests/c00012.vtc similarity index 88% rename from bin/varnishtest/tests/c00012.vtc rename to bin/vinyltest/tests/c00012.vtc index 67c6b2a6602..858bbfb22aa 100644 --- a/bin/varnishtest/tests/c00012.vtc +++ b/bin/vinyltest/tests/c00012.vtc @@ -1,4 +1,4 @@ -varnishtest "Test pass from miss" +vtest "Test pass from miss" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp -body foobar1 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_miss { return(pass); } @@ -27,7 +27,7 @@ client c1 { rxresp expect resp.status == 200 expect resp.bodylen == 6 - expect resp.http.x-varnish == "1001" + expect resp.http.X-Vinyl == "1001" expect resp.http.o_age >= 0 expect resp.http.o_age < 0.5 expect resp.http.o_ttl <= -0 @@ -40,7 +40,7 @@ client c1 { rxresp expect resp.status == 200 expect resp.bodylen == 7 - expect resp.http.x-varnish == "1003" + expect resp.http.X-Vinyl == "1003" expect resp.http.o_age >= 0 expect resp.http.o_age < 0.5 expect resp.http.o_ttl <= -0 diff --git a/bin/vinyltest/tests/c00013.vtc b/bin/vinyltest/tests/c00013.vtc new file mode 100644 index 00000000000..941dd4f1187 --- /dev/null +++ b/bin/vinyltest/tests/c00013.vtc @@ -0,0 +1,53 @@ +vtest "Test parking second request on backend delay (waitinglist)" + +barrier b1 cond 2 +barrier b2 cond 2 + +server s1 { + rxreq + expect req.url == "/foo" + send "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" + delay .2 + barrier b1 sync + delay .2 + send "line1\n" + delay .2 + barrier b2 sync + send "line2\n" +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.do_stream = false; + } +} -start + +vinyl v1 -cliok "param.set debug +syncvsl" + +client c1 { + txreq -url "/foo" -hdr "client: c1" + rxresp + expect resp.status == 200 + expect resp.bodylen == 12 + expect resp.http.X-Vinyl == "1001" +} -start + +barrier b1 sync + +client c2 { + txreq -url "/foo" -hdr "client: c2" + delay .2 + barrier b2 sync + rxresp + expect resp.status == 200 + expect resp.bodylen == 12 + expect resp.http.X-Vinyl == "1004 1002" +} -run + +client c1 -wait + +vinyl v1 -vsl_catchup +vinyl v1 -expect client_req == 2 +vinyl v1 -expect busy_sleep >= 1 +vinyl v1 -expect busy_wakeup >= 1 +vinyl v1 -stop diff --git a/bin/vinyltest/tests/c00014.vtc b/bin/vinyltest/tests/c00014.vtc new file mode 100644 index 00000000000..5cc39e14955 --- /dev/null +++ b/bin/vinyltest/tests/c00014.vtc @@ -0,0 +1,56 @@ +vtest "Test parking second request on backend delay, then pass" + +barrier b1 cond 2 + +server s1 { + rxreq + expect req.url == "/foo" + barrier b1 sync + send "HTTP/1.1 200 OK\r\nContent-Length: 12\r\n\r\n" + send "line1\n" + send "line2\n" + + rxreq + expect req.url == "/foo" + txresp -body "foobar" +} -start + +vinyl v1 -vcl+backend { + sub vcl_miss { + set req.http.hitmiss = req.is_hitmiss; + } + sub vcl_deliver { + set resp.http.hitmiss = req.http.hitmiss; + } + sub vcl_backend_response { + set beresp.do_stream = false; + set beresp.uncacheable = true; + } +} -start + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.bodylen == 12 + expect resp.http.X-Vinyl == "1001" + expect resp.http.hitmiss == "false" +} -start + +barrier b1 sync +delay .2 + +client c2 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1004" + expect resp.http.hitmiss == "true" +} -run + +client c1 -wait + +vinyl v1 -expect cache_hitpass == 0 +vinyl v1 -expect cache_hitmiss == 1 +vinyl v1 -expect cache_miss == 2 diff --git a/bin/vinyltest/tests/c00015.vtc b/bin/vinyltest/tests/c00015.vtc new file mode 100644 index 00000000000..9934fedc2d6 --- /dev/null +++ b/bin/vinyltest/tests/c00015.vtc @@ -0,0 +1,62 @@ +vtest "Test switching VCLs" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -body "foobar" + rxreq + expect req.url == "/foo" + txresp -body "foobar1" +} -start + +vinyl v1 -vcl+backend { +} -start + +vinyl v1 -vcl+backend { + sub vcl_recv { + return (pass); + } +} + +vinyl v1 -cli "vcl.list" +vinyl v1 -cli "vcl.use vcl1" + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1001" +} -run + +vinyl v1 -cli "vcl.use vcl2" + +client c2 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.bodylen == 7 + expect resp.http.X-Vinyl == "1004" +} -run + +vinyl v1 -cli "vcl.use vcl1" + +client c3 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.bodylen == 6 + expect resp.http.X-Vinyl == "1007 1002" +} -run + +vinyl v1 -cli "vcl.show vcl2" +vinyl v1 -cli "vcl.show -v vcl2" +vinyl v1 -cli "vcl.discard vcl2" +vinyl v1 -cli "vcl.list" +vinyl v1 -cli "vcl.show" +vinyl v1 -cli "vcl.show -v" +vinyl v1 -clierr 106 "vcl.show -x nowhere" +vinyl v1 -clierr 106 "vcl.show nothere" +vinyl v1 -clierr 106 "vcl.use nothere" +vinyl v1 -clierr 106 "vcl.discard nowhere" +vinyl v1 -clierr 300 "vcl.discard vcl1" diff --git a/bin/varnishtest/tests/c00016.vtc b/bin/vinyltest/tests/c00016.vtc similarity index 93% rename from bin/varnishtest/tests/c00016.vtc rename to bin/vinyltest/tests/c00016.vtc index 54316a62796..4831a632551 100644 --- a/bin/varnishtest/tests/c00016.vtc +++ b/bin/vinyltest/tests/c00016.vtc @@ -1,4 +1,4 @@ -varnishtest "Test header filtering Table/Connection header" +vtest "Test header filtering Table/Connection header" server s1 { rxreq @@ -21,7 +21,7 @@ server s1 { -body "foobar" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { set req.http.FromVCL = "123"; } @@ -61,7 +61,7 @@ server s1 { txresp -hdr "Foox: 1" -hdr "foox: 2" -hdr "Connection: foox" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_fetch { set bereq.http.baa = bereq.http.baax; } diff --git a/bin/varnishtest/tests/c00017.vtc b/bin/vinyltest/tests/c00017.vtc similarity index 82% rename from bin/varnishtest/tests/c00017.vtc rename to bin/vinyltest/tests/c00017.vtc index 42960d0a861..94fc13951a2 100644 --- a/bin/varnishtest/tests/c00017.vtc +++ b/bin/vinyltest/tests/c00017.vtc @@ -1,4 +1,4 @@ -varnishtest "Test Backend Polling" +vtest "Test Backend Polling" barrier b1 cond 2 @@ -33,7 +33,7 @@ server s1 { barrier b1 sync } -start -varnish v1 -vcl { +vinyl v1 -vcl { backend foo { .host = "${s1_addr}"; @@ -48,4 +48,4 @@ varnish v1 -vcl { barrier b1 sync -varnish v1 -cliexpect "^CLI RX| -+H{10}-{5}H{2}-{0,5} Happy" "backend.list -p" +vinyl v1 -cliexpect "^CLI RX| -+H{10}-{5}H{2}-{0,5} Happy" "backend.list -p" diff --git a/bin/varnishtest/tests/c00018.vtc b/bin/vinyltest/tests/c00018.vtc similarity index 96% rename from bin/varnishtest/tests/c00018.vtc rename to bin/vinyltest/tests/c00018.vtc index bb542b48f65..5943cf8b602 100644 --- a/bin/varnishtest/tests/c00018.vtc +++ b/bin/vinyltest/tests/c00018.vtc @@ -1,4 +1,4 @@ -varnishtest "Check Expect headers / 100 Continue" +vtest "Check Expect headers / 100 Continue" server s1 { rxreq @@ -13,7 +13,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import std; sub vcl_recv { @@ -126,8 +126,8 @@ logexpect l1 -v v1 -g raw { expect 0 1011 RespStatus {^405$} expect 0 1011 RespReason {^Method Not Allowed$} expect 0 1011 RespHeader {^Date:} - expect 0 1011 RespHeader {^Server: Varnish$} - expect 0 1011 RespHeader {^X-Varnish: 1011$} + expect 0 1011 RespHeader {^Server: Vinyl-Cache$} + expect 0 1011 RespHeader {^X-Vinyl: 1011$} expect * 1011 Timestamp {^Process:} } -start diff --git a/bin/vinyltest/tests/c00019.vtc b/bin/vinyltest/tests/c00019.vtc new file mode 100644 index 00000000000..e48b454c81f --- /dev/null +++ b/bin/vinyltest/tests/c00019.vtc @@ -0,0 +1,96 @@ +vtest "Check ban counters and duplicate ban elimination" + +server s1 { + rxreq + txresp -hdr "foo: 0" -body "foo0" + rxreq + txresp -hdr "foo: 1" -body "foo1" + rxreq + txresp -hdr "foo: 2" -body "foo2" + rxreq + txresp -hdr "foo: 3" -body "foo3" +} -start + +vinyl v1 -vcl+backend {} -start + +vinyl v1 -cliok "ban req.url ~ FOO" + +# There is one "magic" ban from boot +vinyl v1 -expect bans_added == 2 +vinyl v1 -cliok "ban.list" + +# Our fetch is not affected by the ban +# as the FOO-ban was preexisting +client c1 { + txreq -url /BAR + rxresp + expect resp.http.foo == 0 + txreq -url /FOO + rxresp + expect resp.http.foo == 1 +} -run + +vinyl v1 -cliok "ban.list" +vinyl v1 -expect bans_tested == 0 +vinyl v1 -expect bans_tests_tested == 0 + +# Add another ban +vinyl v1 -cliok "ban req.url ~ FOO" +vinyl v1 -expect bans_added == 3 +vinyl v1 -cliok "ban.list" + +# The cached object will be band, and a new +# fetched from the backend +client c1 { + txreq -url /FOO + rxresp + expect resp.http.foo == 2 +} -run + +vinyl v1 -expect bans_tested == 1 +vinyl v1 -expect bans_tests_tested == 1 +vinyl v1 -cliok "ban.list" + +# Fetch the cached copy, just for grins +client c1 { + txreq -url /FOO + rxresp + expect resp.http.foo == 2 +} -run + + +# Now add another two bans, Kilroy should not be hit +vinyl v1 -cliok "ban req.url ~ KILROY" +vinyl v1 -cliok "ban req.url ~ FOO" +vinyl v1 -expect bans_added == 5 + +# Enable dup removal of bans +vinyl v1 -cliok "param.set ban_dups on" + +# This should incapacitate the two previous FOO bans. +vinyl v1 -cliok "ban req.url ~ FOO" +vinyl v1 -expect bans_added == 6 +vinyl v1 -expect bans_dups == 3 +vinyl v1 -cliok "ban.list" + +# And we should get a fresh object from backend +client c1 { + txreq -url /FOO + rxresp + expect resp.http.foo == 3 +} -run + +# With only two objects having ever been compared +vinyl v1 -expect bans_tested == 2 +vinyl v1 -expect bans_tests_tested == 2 +vinyl v1 -cliok "ban.list" +vinyl v1 -clijson "ban.list -j" + +# Test a bogus regexp +vinyl v1 -clierr 106 "ban req.url ~ [[[" + +# Ban expression with quoting +vinyl v1 -cliok {ban req.url ~ "BAR"} +shell {vinyladm -n ${tmpdir}/v1 ban 'obj.http.Host ~ \"Foo\"'} +vinyl v1 -cliexpect {(?s)\d+\.\d+\s+\d+\s+-\s+\Qobj.http.Host ~ "Foo"\E} "ban.list" +vinyl v1 -clijson "ban.list -j" diff --git a/bin/vinyltest/tests/c00020.vtc b/bin/vinyltest/tests/c00020.vtc new file mode 100644 index 00000000000..a23f9ebab84 --- /dev/null +++ b/bin/vinyltest/tests/c00020.vtc @@ -0,0 +1,72 @@ +vtest "Test -h critbit a bit" + +server s1 { + rxreq + expect req.url == "/" + txresp -hdr "ID: slash" -hdr "Connection: close" -body "012345\n" +} -start + +vinyl v1 -arg "-hcritbit" -vcl+backend { } -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1001" + expect resp.http.ID == "slash" +} -run +delay .1 + +client c2 { + txreq -url "/" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1004 1002" + expect resp.http.ID == "slash" +} -run +delay .1 + +server s1 { + rxreq + expect req.url == "/foo" + txresp -hdr "ID: foo" -body "012345\n" + rxreq + expect req.url == "/bar" + txresp -hdr "ID: bar" -body "012345\n" +} -start + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1006" + expect resp.http.ID == "foo" + delay .1 + + txreq -url "/" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1008 1002" + expect resp.http.ID == "slash" + delay .1 + + txreq -url "/bar" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1009" + expect resp.http.ID == "bar" + delay .1 + + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1011 1007" + expect resp.http.ID == "foo" +} -run + +vinyl v1 -expect sess_conn == 3 +vinyl v1 -expect cache_hit == 3 +vinyl v1 -expect cache_miss == 3 +vinyl v1 -expect client_req == 6 +vinyl v1 -expect s_sess == 3 +vinyl v1 -expect s_fetch == 3 diff --git a/bin/vinyltest/tests/c00021.vtc b/bin/vinyltest/tests/c00021.vtc new file mode 100644 index 00000000000..fff5aae51aa --- /dev/null +++ b/bin/vinyltest/tests/c00021.vtc @@ -0,0 +1,123 @@ +vtest "Test banning a url with cli:ban" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -hdr "foo: bar5" -body "1111\n" + + rxreq + expect req.url == "/foo" + txresp -hdr "foo: bar6" -body "11111\n" + + rxreq + expect req.url == "/foo" + txresp -hdr "foo: bar7" -body "111111\n" + + rxreq + expect req.url == "/foo" + txresp -hdr "foo: bar8" -body "1111111\n" +} -start + +vinyl v1 -vcl+backend { } -start + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar5 + expect resp.bodylen == 5 +} -run + +# syntax checks +vinyl v1 -clierr 104 "ban" +vinyl v1 -clierr 104 "ban foo" +vinyl v1 -clierr 104 "ban foo bar" +vinyl v1 -clierr 106 "ban a b c && a" +vinyl v1 -clierr 106 "ban a b c && a b" +vinyl v1 -clierr 106 "ban a b c || a b c" +vinyl v1 -cliok "ban.list" + +# exact match, not matching +vinyl v1 -cliok "ban req.url == foo" +vinyl v1 -cliok "ban.list" + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar5 + expect resp.bodylen == 5 +} -run + +# exact match, matching +vinyl v1 -cliok "ban req.url == /foo" +vinyl v1 -cliok "ban.list" +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar6 + expect resp.bodylen == 6 +} -run + +# regexp nonmatch +vinyl v1 -cliok "ban req.url ~ bar" +vinyl v1 -cliok "ban.list" + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar6 + expect resp.bodylen == 6 +} -run + + +# regexp match +vinyl v1 -cliok "ban req.url ~ foo" +vinyl v1 -cliok "ban.list" + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar7 + expect resp.bodylen == 7 +} -run + +# header check, nonmatch +vinyl v1 -cliok "ban obj.http.foo != bar7" +vinyl v1 -cliok "ban.list" + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar7 + expect resp.bodylen == 7 +} -run + +# header check, match +vinyl v1 -cliok "ban req.http.foo == barcheck" +vinyl v1 -cliok "ban.list" + +client c1 { + txreq -url "/foo" -hdr "foo: barcheck" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar8 + expect resp.bodylen == 8 +} -run + +# header check, no header +vinyl v1 -cliok "ban req.url ~ foo && obj.http.bar == barcheck" +vinyl v1 -cliok "ban.list" +vinyl v1 -clijson "ban.list -j" + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 + expect resp.http.foo == bar8 + expect resp.bodylen == 8 +} -run diff --git a/bin/varnishtest/tests/c00022.vtc b/bin/vinyltest/tests/c00022.vtc similarity index 90% rename from bin/varnishtest/tests/c00022.vtc rename to bin/vinyltest/tests/c00022.vtc index 2ec23c2aa42..5472a325b6d 100644 --- a/bin/varnishtest/tests/c00022.vtc +++ b/bin/vinyltest/tests/c00022.vtc @@ -1,4 +1,4 @@ -varnishtest "Test banning a url with VCL ban" +vtest "Test banning a url with VCL ban" server s1 { rxreq @@ -19,7 +19,7 @@ server s1 { } -start # code from purging.rst -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import std; sub vcl_recv { @@ -58,7 +58,7 @@ client c1 { rxresp expect resp.status == 204 } -run -varnish v1 -cliok "ban.list" +vinyl v1 -cliok "ban.list" # Still in cache client c1 { @@ -75,7 +75,7 @@ client c1 { rxresp expect resp.status == 204 } -run -varnish v1 -cliok "ban.list" +vinyl v1 -cliok "ban.list" # New obj client c1 { @@ -92,7 +92,7 @@ client c1 { rxresp expect resp.status == 204 } -run -varnish v1 -cliok "ban.list" +vinyl v1 -cliok "ban.list" # still there client c1 { @@ -109,7 +109,7 @@ client c1 { rxresp expect resp.status == 204 } -run -varnish v1 -cliok "ban.list" +vinyl v1 -cliok "ban.list" # New one client c1 { @@ -127,7 +127,7 @@ client c1 { expect resp.status == 204 } -run -varnish v1 -cliok "ban.list" +vinyl v1 -cliok "ban.list" # Still there client c1 { @@ -144,7 +144,7 @@ client c1 { rxresp expect resp.status == 204 } -run -varnish v1 -cliok "ban.list" +vinyl v1 -cliok "ban.list" client c1 { txreq -url "/foo" -hdr "foo: barcheck" @@ -160,8 +160,8 @@ client c1 { rxresp expect resp.status == 204 } -run -varnish v1 -cliok "ban.list" -varnish v1 -clijson "ban.list -j" +vinyl v1 -cliok "ban.list" +vinyl v1 -clijson "ban.list -j" client c1 { txreq -url "/foo" diff --git a/bin/vinyltest/tests/c00023.vtc b/bin/vinyltest/tests/c00023.vtc new file mode 100644 index 00000000000..6c63d61b2e3 --- /dev/null +++ b/bin/vinyltest/tests/c00023.vtc @@ -0,0 +1,152 @@ +vtest "Test -h critbit for digest edges" + +server s1 { + rxreq + expect req.url == "/1" + txresp -body "\n" + rxreq + expect req.url == "/2" + txresp -body "x\n" + rxreq + expect req.url == "/3" + txresp -body "xx\n" + rxreq + expect req.url == "/4" + txresp -body "xxx\n" + rxreq + expect req.url == "/5" + txresp -body "xxxx\n" + rxreq + expect req.url == "/6" + txresp -body "xxxxx\n" + rxreq + expect req.url == "/7" + txresp -body "xxxxxx\n" + rxreq + expect req.url == "/8" + txresp -body "xxxxxxx\n" + rxreq + expect req.url == "/9" + txresp -body "xxxxxxxx\n" +} -start + +vinyl v1 -arg "-hcritbit" -vcl+backend { } -start +vinyl v1 -cliok "param.set debug +hashedge" + +client c1 { + txreq -url "/1" + rxresp + expect resp.status == 200 + expect resp.bodylen == 1 + expect resp.http.X-Vinyl == "1001" + + txreq -url "/2" + rxresp + expect resp.bodylen == 2 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1003" + + txreq -url "/3" + rxresp + expect resp.bodylen == 3 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1005" + + txreq -url "/4" + rxresp + expect resp.bodylen == 4 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1007" + + txreq -url "/5" + rxresp + expect resp.bodylen == 5 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1009" + + txreq -url "/6" + rxresp + expect resp.bodylen == 6 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1011" + + txreq -url "/7" + rxresp + expect resp.bodylen == 7 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1013" + + txreq -url "/8" + rxresp + expect resp.bodylen == 8 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1015" + + txreq -url "/9" + rxresp + expect resp.bodylen == 9 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1017" +} -run + + +client c1 { + txreq -url "/1" + rxresp + expect resp.status == 200 + expect resp.bodylen == 1 + expect resp.http.X-Vinyl == "1020 1002" + + txreq -url "/2" + rxresp + expect resp.bodylen == 2 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1021 1004" + + txreq -url "/3" + rxresp + expect resp.bodylen == 3 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1022 1006" + + txreq -url "/4" + rxresp + expect resp.bodylen == 4 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1023 1008" + + txreq -url "/5" + rxresp + expect resp.bodylen == 5 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1024 1010" + + txreq -url "/6" + rxresp + expect resp.bodylen == 6 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1025 1012" + + txreq -url "/7" + rxresp + expect resp.bodylen == 7 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1026 1014" + + txreq -url "/8" + rxresp + expect resp.bodylen == 8 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1027 1016" + + txreq -url "/9" + rxresp + expect resp.bodylen == 9 + expect resp.status == 200 + expect resp.http.X-Vinyl == "1028 1018" +} -run + +vinyl v1 -expect sess_conn == 2 +vinyl v1 -expect cache_hit == 9 +vinyl v1 -expect cache_miss == 9 +vinyl v1 -expect client_req == 18 diff --git a/bin/varnishtest/tests/c00024.vtc b/bin/vinyltest/tests/c00024.vtc similarity index 82% rename from bin/varnishtest/tests/c00024.vtc rename to bin/vinyltest/tests/c00024.vtc index 0fd0034f6b0..779cd851525 100644 --- a/bin/varnishtest/tests/c00024.vtc +++ b/bin/vinyltest/tests/c00024.vtc @@ -1,11 +1,11 @@ -varnishtest "Test restart in vcl_synth" +vtest "Test restart in vcl_synth" server s1 { rxreq txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.restarts == 0) { return (synth(701, "FOO")); diff --git a/bin/varnishtest/tests/c00025.vtc b/bin/vinyltest/tests/c00025.vtc similarity index 95% rename from bin/varnishtest/tests/c00025.vtc rename to bin/vinyltest/tests/c00025.vtc index f5b8988e596..2f6ec30e889 100644 --- a/bin/varnishtest/tests/c00025.vtc +++ b/bin/vinyltest/tests/c00025.vtc @@ -1,4 +1,4 @@ -varnishtest "Test If-None-Match" +vtest "Test If-None-Match" server s1 { rxreq @@ -10,7 +10,7 @@ server s1 { txresp -hdr {ETag: W/"123456789"} -bodylen 10 } -start -varnish v1 -vcl+backend { } -start +vinyl v1 -vcl+backend { } -start client c1 { txreq diff --git a/bin/varnishtest/tests/c00026.vtc b/bin/vinyltest/tests/c00026.vtc similarity index 90% rename from bin/varnishtest/tests/c00026.vtc rename to bin/vinyltest/tests/c00026.vtc index 82019bd2b58..e310618244d 100644 --- a/bin/varnishtest/tests/c00026.vtc +++ b/bin/vinyltest/tests/c00026.vtc @@ -1,4 +1,4 @@ -varnishtest "Test client If-None-Match and If-Modified-Since together" +vtest "Test client If-None-Match and If-Modified-Since together" server s1 { rxreq @@ -13,7 +13,7 @@ server s1 { -bodylen 10 } -start -varnish v1 -vcl+backend { } -start +vinyl v1 -vcl+backend { } -start client c1 { txreq diff --git a/bin/varnishtest/tests/c00027.vtc b/bin/vinyltest/tests/c00027.vtc similarity index 90% rename from bin/varnishtest/tests/c00027.vtc rename to bin/vinyltest/tests/c00027.vtc index 246aef15f3a..3a125956f12 100644 --- a/bin/varnishtest/tests/c00027.vtc +++ b/bin/vinyltest/tests/c00027.vtc @@ -1,4 +1,4 @@ -varnishtest "Test eviction" +vtest "Test eviction" server s1 { rxreq @@ -18,7 +18,7 @@ server s1 { txresp -body "${string,repeat,1024,1}" } -start -varnish v1 -arg "-s default,1M" -vcl+backend { +vinyl v1 -arg "-s default,1M" -vcl+backend { sub vcl_backend_response { set beresp.ttl = 10m; } diff --git a/bin/varnishtest/tests/c00028.vtc b/bin/vinyltest/tests/c00028.vtc similarity index 82% rename from bin/varnishtest/tests/c00028.vtc rename to bin/vinyltest/tests/c00028.vtc index 7862e89e614..d5bb1884aa7 100644 --- a/bin/varnishtest/tests/c00028.vtc +++ b/bin/vinyltest/tests/c00028.vtc @@ -1,6 +1,6 @@ -varnishtest "Test that we can't recurse restarts forever" +vtest "Test that we can't recurse restarts forever" -varnish v1 -vcl { +vinyl v1 -vcl { backend bad { .host = "${bad_backend}"; } diff --git a/bin/vinyltest/tests/c00029.vtc b/bin/vinyltest/tests/c00029.vtc new file mode 100644 index 00000000000..e998547f32e --- /dev/null +++ b/bin/vinyltest/tests/c00029.vtc @@ -0,0 +1,21 @@ +vtest "Out of thread workspace when opening V1L on the backend side" + +server s1 { + non_fatal + rxreq +} -start + +vinyl v1 -vcl+backend { + import debug; + + sub vcl_backend_fetch { + set bereq.filters += " debug.awshog"; + return (fetch); + } +} -start + +client c1 { + txreq -req "POST" -body "abc" + rxresp + expect resp.status == 503 +} -run diff --git a/bin/varnishtest/tests/c00030.vtc b/bin/vinyltest/tests/c00030.vtc similarity index 76% rename from bin/varnishtest/tests/c00030.vtc rename to bin/vinyltest/tests/c00030.vtc index 852a0201391..a47feff76ad 100644 --- a/bin/varnishtest/tests/c00030.vtc +++ b/bin/vinyltest/tests/c00030.vtc @@ -1,13 +1,13 @@ -varnishtest "debug storage" +vtest "debug storage" shell -err -expect {Error: Only one -sdebug instance supported} \ - "varnishd -b none -a ${tmpdir}/vtc.sock -sdebug -sdebug" + "vinyld -b none -a ${tmpdir}/vtc.sock -n ${tmpdir}/v1 -sdebug -sdebug" shell -err -expect {Error: -sdebug conflicting options} \ - "varnishd -b none -a ${tmpdir}/vtc.sock -sdebug,lessspace,maxspace=1KB" + "vinyld -b none -a ${tmpdir}/vtc.sock -n ${tmpdir}/v1 -sdebug,lessspace,maxspace=1KB" shell -err -expect {Error: Unknown BYTES} \ - "varnishd -b none -a ${tmpdir}/vtc.sock -sdebug,maxspace=1DJT" + "vinyld -b none -a ${tmpdir}/vtc.sock -n ${tmpdir}/v1 -sdebug,maxspace=1DJT" # lessspace is implicitly tested in b00017.vtc @@ -29,7 +29,7 @@ server s1 { } -start -varnish v1 -arg "-sTransient=debug,maxspace=1KB" -vcl+backend { +vinyl v1 -arg "-sTransient=debug,maxspace=1KB" -vcl+backend { sub vcl_recv { return(pass); } diff --git a/bin/vinyltest/tests/c00031.vtc b/bin/vinyltest/tests/c00031.vtc new file mode 100644 index 00000000000..70fbfe1f2de --- /dev/null +++ b/bin/vinyltest/tests/c00031.vtc @@ -0,0 +1,14 @@ +vtest "Worker thread stack size setting" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -arg "-p thread_pool_stack=262144" -vcl+backend {} -start + +client c1 { + txreq -url "/" + rxresp + expect resp.status == 200 +} -run diff --git a/bin/varnishtest/tests/c00034.vtc b/bin/vinyltest/tests/c00034.vtc similarity index 92% rename from bin/varnishtest/tests/c00034.vtc rename to bin/vinyltest/tests/c00034.vtc index 394a7a91ec8..3afd5c449d5 100644 --- a/bin/varnishtest/tests/c00034.vtc +++ b/bin/vinyltest/tests/c00034.vtc @@ -1,4 +1,4 @@ -varnishtest "Range headers" +vtest "Range headers" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { ######################################################################## # VCL control over range processing with built-in range support disabled -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_stream = false; } @@ -20,7 +20,7 @@ varnish v1 -vcl+backend { } } -start -varnish v1 -cliok "param.set http_range_support off" +vinyl v1 -cliok "param.set http_range_support off" client c1 { txreq -hdr "Range: bytes=0-9" @@ -34,7 +34,7 @@ client c1 { ######################################################################## # Neither explicit range processing nor built-in -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_stream = false; } @@ -48,14 +48,14 @@ client c1 { expect resp.bodylen == 100 } -run -varnish v1 -expect s_resp_bodybytes == 110 +vinyl v1 -expect s_resp_bodybytes == 110 -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup ######################################################################## # Only built-in processing -varnish v1 -cliok "param.set http_range_support on" +vinyl v1 -cliok "param.set http_range_support on" client c2 { # Invalid range requests @@ -104,9 +104,9 @@ client c2 { expect resp.bodylen == 0 } -run -varnish v1 -expect s_resp_bodybytes == 110 +vinyl v1 -expect s_resp_bodybytes == 110 -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup client c3 { # Valid range requests @@ -155,9 +155,9 @@ client c3 { expect resp.http.content-range == "bytes 0-99/100" } -run -varnish v1 -expect s_resp_bodybytes == 511 +vinyl v1 -expect s_resp_bodybytes == 511 -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup # Test Range streaming with streaming objects with C-L @@ -179,7 +179,7 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { if (bereq.url == "/2") { set beresp.do_gzip = true; @@ -200,7 +200,7 @@ client c4 { expect_close } -run -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup client c5 { # Closed C-L because we cannot use C-L @@ -222,8 +222,8 @@ server s1 { txresp -hdr "Content-length: 3" -body "BLA" } -start -varnish v1 -cliok "param.set feature +http2" -varnish v1 -vcl+backend "" +vinyl v1 -cliok "param.set feature +http2" +vinyl v1 -vcl+backend "" client c6 { stream 1 { @@ -235,7 +235,7 @@ client c6 { } -run } -run -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup server s1 { rxreq @@ -244,7 +244,7 @@ server s1 { txresp -hdr "Accept-Ranges: foobar" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } @@ -297,7 +297,7 @@ server s1 { txresp -hdr "content-range: bytes */*" -bodylen 100 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.http.return == "pass") { return (pass); @@ -348,7 +348,7 @@ server s1 { txresp -bodylen 256 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_deliver { set resp.filters = "range"; } @@ -382,7 +382,7 @@ server s1 { } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } diff --git a/bin/vinyltest/tests/c00035.vtc b/bin/vinyltest/tests/c00035.vtc new file mode 100644 index 00000000000..d36b71add3b --- /dev/null +++ b/bin/vinyltest/tests/c00035.vtc @@ -0,0 +1,42 @@ +vtest "Dropping polling of a backend" + +server s1 -repeat 40 { + non_fatal + rxreq + txresp +} -start + +vinyl v1 -vcl { + probe default { + .window = 8; + .initial = 7; + .threshold = 8; + .interval = 0.1s; + } + backend s1 { + .host = "${s1_addr}"; + .port = "${s1_port}"; + } +} -start + +delay 1 + +vinyl v1 -vcl+backend { } -cliok "vcl.use vcl2" -cliok "vcl.discard vcl1" + +delay 1 + +vinyl v1 -cliok "vcl.list" +vinyl v1 -cliok "backend.list -p" + +server s1 -break { + rxreq + expect req.url == /foo + txresp -bodylen 4 +} -start + +client c1 { + txreq -url /foo + rxresp + expect resp.status == 200 + expect resp.bodylen == 4 +} -run diff --git a/bin/varnishtest/tests/c00036.vtc b/bin/vinyltest/tests/c00036.vtc similarity index 92% rename from bin/varnishtest/tests/c00036.vtc rename to bin/vinyltest/tests/c00036.vtc index a229b74f0ac..2c6ddb9275e 100644 --- a/bin/varnishtest/tests/c00036.vtc +++ b/bin/vinyltest/tests/c00036.vtc @@ -1,4 +1,4 @@ -varnishtest "Backend close retry" +vtest "Backend close retry" server s1 -repeat 1 { rxreq @@ -12,7 +12,7 @@ server s1 -repeat 1 { } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return(pass); } @@ -52,5 +52,5 @@ client c1 { expect resp.bodylen == 6 } -run -varnish v1 -expect backend_retry == 1 +vinyl v1 -expect backend_retry == 1 logexpect l1 -wait diff --git a/bin/varnishtest/tests/c00037.vtc b/bin/vinyltest/tests/c00037.vtc similarity index 87% rename from bin/varnishtest/tests/c00037.vtc rename to bin/vinyltest/tests/c00037.vtc index 019ed0b9b04..2e0f2514f84 100644 --- a/bin/varnishtest/tests/c00037.vtc +++ b/bin/vinyltest/tests/c00037.vtc @@ -1,4 +1,4 @@ -varnishtest "Test req.hash_always_miss in vcl_recv" +vtest "Test req.hash_always_miss in vcl_recv" server s1 { rxreq @@ -7,7 +7,7 @@ server s1 { txresp -hdr "Inc: 2" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.http.x-missit == "1") { set req.hash_always_miss = true; diff --git a/bin/varnishtest/tests/c00038.vtc b/bin/vinyltest/tests/c00038.vtc similarity index 90% rename from bin/varnishtest/tests/c00038.vtc rename to bin/vinyltest/tests/c00038.vtc index 1e81f262d79..0c32bfb45ca 100644 --- a/bin/varnishtest/tests/c00038.vtc +++ b/bin/vinyltest/tests/c00038.vtc @@ -1,4 +1,4 @@ -varnishtest "Test req.hash_ignore_busy in vcl_recv" +vtest "Test req.hash_ignore_busy in vcl_recv" barrier b1 cond 2 @@ -14,7 +14,7 @@ server s2 { txresp -hdr "Server: 2" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.http.x-ignorebusy == "1") { set req.hash_ignore_busy = true; diff --git a/bin/varnishtest/tests/c00039.vtc b/bin/vinyltest/tests/c00039.vtc similarity index 88% rename from bin/varnishtest/tests/c00039.vtc rename to bin/vinyltest/tests/c00039.vtc index 1c3b2a9dae0..2fc39cb3aa3 100644 --- a/bin/varnishtest/tests/c00039.vtc +++ b/bin/vinyltest/tests/c00039.vtc @@ -1,4 +1,4 @@ -varnishtest "request req and hdr length limits" +vtest "request req and hdr length limits" server s1 { rxreq @@ -13,12 +13,12 @@ server s1 { txresp -bodylen 5 } -start -varnish v1 \ +vinyl v1 \ -vcl+backend { } -start -varnish v1 -cliok "param.set http_req_size 256" -varnish v1 -cliok "param.set http_req_hdr_len 40" +vinyl v1 -cliok "param.set http_req_size 256" +vinyl v1 -cliok "param.set http_req_hdr_len 40" client c1 { txreq -url "/1" -hdr "host: 127.0.0.1" -hdr "1...5: ..0....5....0....5....0....5....0" @@ -63,7 +63,7 @@ client c1 { expect_close } -run -varnish v1 -cliok "param.set http_req_overflow_status 414" +vinyl v1 -cliok "param.set http_req_overflow_status 414" client c1 { # Each line is 32 except last, which is 33. Total: 32 * 7 + 33 == 257 send "GET /..... HTTP/1.1\r\nHost: foo\r\n" @@ -78,4 +78,4 @@ client c1 { expect resp.status == 414 } -run -varnish v1 -clierr 106 "param.set http_req_overflow_status 200" +vinyl v1 -clierr 106 "param.set http_req_overflow_status 200" diff --git a/bin/varnishtest/tests/c00040.vtc b/bin/vinyltest/tests/c00040.vtc similarity index 91% rename from bin/varnishtest/tests/c00040.vtc rename to bin/vinyltest/tests/c00040.vtc index 157caa173df..9de2f061c0a 100644 --- a/bin/varnishtest/tests/c00040.vtc +++ b/bin/vinyltest/tests/c00040.vtc @@ -1,4 +1,4 @@ -varnishtest "request resp and hdr length limits" +vtest "request resp and hdr length limits" server s1 { rxreq @@ -53,12 +53,12 @@ server s1 { send "asdf" } -start -varnish v1 \ +vinyl v1 \ -vcl+backend { } -start -varnish v1 -cliok "param.set http_resp_size 256" -varnish v1 -cliok "param.set http_resp_hdr_len 40" +vinyl v1 -cliok "param.set http_resp_size 256" +vinyl v1 -cliok "param.set http_resp_hdr_len 40" client c1 { txreq -url "/1" diff --git a/bin/varnishtest/tests/c00041.vtc b/bin/vinyltest/tests/c00041.vtc similarity index 90% rename from bin/varnishtest/tests/c00041.vtc rename to bin/vinyltest/tests/c00041.vtc index c46e95b86a0..a07824c6a4f 100644 --- a/bin/varnishtest/tests/c00041.vtc +++ b/bin/vinyltest/tests/c00041.vtc @@ -1,4 +1,4 @@ -varnishtest "test purging from vcl" +vtest "test purging from vcl" server s1 { rxreq @@ -38,7 +38,7 @@ server s1 { } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.http.purge == "yes") { return(purge); } } sub vcl_purge { if (req.http.restart == "yes") { @@ -53,28 +53,28 @@ client c1 { txreq -url "/1" -hdr "foo: foo1" rxresp expect resp.status == 200 - expect resp.http.x-varnish == 1001 + expect resp.http.X-Vinyl == 1001 expect resp.bodylen == 1 delay .1 txreq -url "/1" -hdr "Foo: foo2" rxresp expect resp.status == 200 - expect resp.http.x-varnish == 1003 + expect resp.http.X-Vinyl == 1003 expect resp.bodylen == 2 delay .1 txreq -url "/1" -hdr "foo: foo1" rxresp expect resp.status == 200 - expect resp.http.x-varnish == "1005 1002" + expect resp.http.X-Vinyl == "1005 1002" expect resp.bodylen == 1 delay .1 txreq -url "/1" -hdr "Foo: foo2" rxresp expect resp.status == 200 - expect resp.http.x-varnish == "1006 1004" + expect resp.http.X-Vinyl == "1006 1004" expect resp.bodylen == 2 delay .1 diff --git a/bin/varnishtest/tests/c00042.vtc b/bin/vinyltest/tests/c00042.vtc similarity index 86% rename from bin/varnishtest/tests/c00042.vtc rename to bin/vinyltest/tests/c00042.vtc index 6268cded9c8..32c3467fbd2 100644 --- a/bin/varnishtest/tests/c00042.vtc +++ b/bin/vinyltest/tests/c00042.vtc @@ -1,4 +1,4 @@ -varnishtest "Test vcl defined via backends" +vtest "Test vcl defined via backends" server s1 { loop 5 { @@ -14,11 +14,11 @@ server s2 { # the use case for via-proxy is to have a(n ha)proxy make a (TLS) # connection on our behalf. For the purpose of testing, we use another -# varnish in place - but we are behaving realistically in that we do +# vinyl in place - but we are behaving realistically in that we do # not use any prior information for the actual backend connection - # just the information from the proxy protocol -varnish v2 -proto PROXY -vcl+backend { +vinyl v2 -proto PROXY -vcl+backend { import std; import proxy; @@ -43,9 +43,9 @@ varnish v2 -proto PROXY -vcl+backend { } } -start -varnish v2 -cliok "param.set debug +syncvsl" +vinyl v2 -cliok "param.set debug +syncvsl" -varnish v1 -vcl { +vinyl v1 -vcl { backend v2 { .host = "${v2_addr}"; .port = "${v2_port}"; } backend s1 { .via = v2; .authority = "1.2.3.4.example.com"; .host = "${s1_addr}"; .port = "${s1_port}"; } backend s2 { .via = v2; .authority = "s2"; .host = "${s2_addr}"; .port = "${s2_port}"; } @@ -81,7 +81,7 @@ client c1 { expect resp.http.Server == "s1" } -run -varnish v1 -vcl { +vinyl v1 -vcl { backend v2 { .host = "${v2_addr}"; .port = "${v2_port}"; } backend s1 { @@ -103,7 +103,7 @@ client c1 { expect resp.http.Authority == "authority.com" } -run -varnish v1 -vcl { +vinyl v1 -vcl { backend v2 { .host = "${v2_addr}"; .port = "${v2_port}"; } backend s1 { @@ -126,7 +126,7 @@ client c1 { } -run # Setting .authority = "" disables sending the TLV. -varnish v1 -vcl { +vinyl v1 -vcl { backend v2 { .host = "${v2_addr}"; .port = "${v2_port}"; } backend s1 { @@ -150,7 +150,7 @@ client c1 { expect resp.http.Authority == "" } -run -varnish v1 -errvcl ".host used as authority can not be an ip address with .via" { +vinyl v1 -errvcl ".host used as authority can not be an ip address with .via" { backend v2 { .host = "${v2_addr}"; .port = "${v2_port}"; } backend s1 { @@ -160,7 +160,7 @@ varnish v1 -errvcl ".host used as authority can not be an ip address with .via" } } -varnish v1 -errvcl ".host_header used as authority can not be an ip address with .via" { +vinyl v1 -errvcl ".host_header used as authority can not be an ip address with .via" { backend v2 { .host = "${v2_addr}"; .port = "${v2_port}"; } backend s1 { @@ -171,7 +171,7 @@ varnish v1 -errvcl ".host_header used as authority can not be an ip address with } } -varnish v1 -errvcl "Cannot set both .via and .path" { +vinyl v1 -errvcl "Cannot set both .via and .path" { backend v2 { .host = "${v2_addr}"; .port = "${v2_port}"; } backend s1 { @@ -180,7 +180,7 @@ varnish v1 -errvcl "Cannot set both .via and .path" { } } -varnish v1 -errvcl "Cannot stack .via backends" { +vinyl v1 -errvcl "Cannot stack .via backends" { backend a { .host = "${v2_addr}"; .port = "${v2_port}"; } backend b { @@ -201,7 +201,7 @@ varnish v1 -errvcl "Cannot stack .via backends" { } # issue #4177: backend named default with .via property -varnish v1 -vcl { +vinyl v1 -vcl { backend via { .host = "${localhost}"; } backend default { .via = via; .authority = "localhost"; .host = "${localhost}"; } } diff --git a/bin/varnishtest/tests/c00043.vtc b/bin/vinyltest/tests/c00043.vtc similarity index 91% rename from bin/varnishtest/tests/c00043.vtc rename to bin/vinyltest/tests/c00043.vtc index 15d87c7953c..41a94f88c70 100644 --- a/bin/varnishtest/tests/c00043.vtc +++ b/bin/vinyltest/tests/c00043.vtc @@ -1,4 +1,4 @@ -varnishtest "predictive vary" +vtest "predictive vary" barrier b1 cond 2 barrier b2 cond 2 @@ -17,7 +17,7 @@ server s2 { txresp -hdr "Vary: foo" -bodylen 3 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_fetch { if (bereq.http.bar) { set bereq.backend = s2; diff --git a/bin/vinyltest/tests/c00044.vtc b/bin/vinyltest/tests/c00044.vtc new file mode 100644 index 00000000000..213ebd05325 --- /dev/null +++ b/bin/vinyltest/tests/c00044.vtc @@ -0,0 +1,95 @@ +vtest "Object/LRU/Stevedores" + +server s1 { + rxreq + txresp -bodylen 1048290 + + rxreq + txresp -bodylen 1048291 + + rxreq + txresp -bodylen 1048292 + + rxreq + txresp -bodylen 1047293 + + rxreq + txresp -bodylen 1047294 +} -start + +vinyl v1 \ + -arg "-ss1=default,1m" \ + -arg "-ss2=default,1m" \ + -arg "-ss0=default,1m" \ + -arg "-sTransient=default" \ + -vcl+backend { + sub vcl_backend_response { + set beresp.do_stream = false; + # Unset Date header to not change the object sizes + unset beresp.http.Date; + } +} -start + + +client c1 { + txreq -url /foo + rxresp + expect resp.status == 200 + expect resp.bodylen == 1048290 +} -run + +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_space > 1000000 +vinyl v1 -expect SM?.s1.g_bytes > 1000000 +vinyl v1 -expect SM?.s1.g_space < 200 +vinyl v1 -expect SM?.s2.g_bytes == 0 +vinyl v1 -expect SM?.s2.g_space > 1000000 + +client c1 { + txreq -url /bar + rxresp + expect resp.status == 200 + expect resp.bodylen == 1048291 +} -run + +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_space > 1000000 +vinyl v1 -expect SM?.s1.g_bytes > 1000000 +vinyl v1 -expect SM?.s1.g_space < 200 +vinyl v1 -expect SM?.s2.g_bytes > 1000000 +vinyl v1 -expect SM?.s2.g_space < 200 + +client c1 { + txreq -url /burp + rxresp + expect resp.status == 200 + expect resp.bodylen == 1048292 +} -run + +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes > 1000000 +vinyl v1 -expect SM?.s0.g_space < 200 +vinyl v1 -expect SM?.s1.g_bytes > 1000000 +vinyl v1 -expect SM?.s1.g_space < 200 +vinyl v1 -expect SM?.s2.g_bytes > 1000000 +vinyl v1 -expect SM?.s2.g_space < 200 + +client c1 { + txreq -url /foo1 + rxresp + expect resp.status == 200 + expect resp.bodylen == 1047293 +} -run + +vinyl v1 -expect n_lru_nuked == 1 + +client c1 { + txreq -url /foo + rxresp + expect resp.status == 200 + expect resp.bodylen == 1047294 +} -run + +vinyl v1 -expect n_lru_nuked == 2 diff --git a/bin/vinyltest/tests/c00045.vtc b/bin/vinyltest/tests/c00045.vtc new file mode 100644 index 00000000000..f329e47e5f1 --- /dev/null +++ b/bin/vinyltest/tests/c00045.vtc @@ -0,0 +1,73 @@ +vtest "Object/LRU/Stevedores with storage set" + +server s1 { + rxreq + txresp -bodylen 1048288 + rxreq + txresp -bodylen 1047289 + rxreq + txresp -bodylen 1047290 +} -start + +vinyl v1 \ + -arg "-sdefault,1m" \ + -arg "-sdefault,1m" \ + -arg "-sdefault,1m" \ + -arg "-sTransient=default" \ + -syntax 4.0 \ + -vcl+backend { + sub vcl_backend_response { + set beresp.do_stream = false; + set beresp.storage = storage.s0; + # Unset Date header to not change the object sizes + unset beresp.http.Date; + } +} -start + + +client c1 { + txreq -url /foo + rxresp + expect resp.status == 200 + expect resp.bodylen == 1048288 +} -run + +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes > 1000000 +vinyl v1 -expect SM?.s0.g_space < 193 +vinyl v1 -expect SM?.s1.g_bytes == 0 +vinyl v1 -expect SM?.s1.g_space > 1000000 +vinyl v1 -expect SM?.s2.g_bytes == 0 +vinyl v1 -expect SM?.s2.g_space > 1000000 + +client c1 { + txreq -url /bar + rxresp + expect resp.status == 200 + expect resp.bodylen == 1047289 +} -run + +vinyl v1 -expect n_lru_nuked == 1 +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes > 1000000 +vinyl v1 -expect SM?.s0.g_space < 1192 +vinyl v1 -expect SM?.s1.g_bytes == 0 +vinyl v1 -expect SM?.s1.g_space > 1000000 +vinyl v1 -expect SM?.s2.g_bytes == 0 +vinyl v1 -expect SM?.s2.g_space > 1000000 + +client c1 { + txreq -url /foo + rxresp + expect resp.status == 200 + expect resp.bodylen == 1047290 +} -run + +vinyl v1 -expect n_lru_nuked == 2 +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes > 1000000 +vinyl v1 -expect SM?.s0.g_space < 1194 +vinyl v1 -expect SM?.s1.g_bytes == 0 +vinyl v1 -expect SM?.s1.g_space > 1000000 +vinyl v1 -expect SM?.s2.g_bytes == 0 +vinyl v1 -expect SM?.s2.g_space > 1000000 diff --git a/bin/vinyltest/tests/c00046.vtc b/bin/vinyltest/tests/c00046.vtc new file mode 100644 index 00000000000..20931ff64a3 --- /dev/null +++ b/bin/vinyltest/tests/c00046.vtc @@ -0,0 +1,78 @@ +vtest "Object/LRU/Stevedores with storage set and body alloc failures" + +server s1 { + rxreq + txresp -hdr "Connection: close" -bodylen 1000000 +} -start + +vinyl v1 \ + -arg "-sdefault,1m" \ + -arg "-sdefault,1m" \ + -arg "-sdefault,1m" \ + -arg "-sTransient=default" \ + -syntax 4.0 \ + -vcl+backend { + sub vcl_backend_response { + set beresp.storage = storage.s0; + } +} -start + + +client c1 { + txreq -url /foo + rxresp + expect resp.status == 200 + expect resp.bodylen == 1000000 +} -run + +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes > 1000000 +vinyl v1 -expect SM?.s0.g_space < 100000 +vinyl v1 -expect SM?.s1.g_bytes == 0 +vinyl v1 -expect SM?.s1.g_space > 1000000 +vinyl v1 -expect SM?.s2.g_bytes == 0 +vinyl v1 -expect SM?.s2.g_space > 1000000 + +server s1 -wait { + rxreq + non_fatal + txresp -hdr "Connection: close" -bodylen 1000001 +} -start + +client c1 { + txreq -url /bar + rxresp + expect resp.status == 200 + expect resp.bodylen == 1000001 +} -run + +vinyl v1 -expect n_lru_nuked == 1 +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes > 1000000 +vinyl v1 -expect SM?.s0.g_space < 100000 +vinyl v1 -expect SM?.s1.g_bytes == 0 +vinyl v1 -expect SM?.s1.g_space > 1000000 +vinyl v1 -expect SM?.s2.g_bytes == 0 +vinyl v1 -expect SM?.s2.g_space > 1000000 + +server s1 -wait { + rxreq + # non_fatal + txresp -hdr "Connection: close" -bodylen 1000002 +} -start + +client c1 { + txreq -url /foo + rxresp + expect resp.status == 200 + expect resp.bodylen == 1000002 +} -run + +vinyl v1 -expect n_lru_nuked == 2 +vinyl v1 -expect SM?.Transient.g_bytes == 0 +vinyl v1 -expect SM?.s0.g_bytes > 1000000 +vinyl v1 -expect SM?.s0.g_space < 100000 +vinyl v1 -expect SM?.s1.g_bytes == 0 +vinyl v1 -expect SM?.s1.g_space > 1000000 +vinyl v1 -expect SM?.s2.g_bytes == 0 +vinyl v1 -expect SM?.s2.g_space > 1000000 diff --git a/bin/varnishtest/tests/c00047.vtc b/bin/vinyltest/tests/c00047.vtc similarity index 93% rename from bin/varnishtest/tests/c00047.vtc rename to bin/vinyltest/tests/c00047.vtc index e25d9122a63..fd6f73c531d 100644 --- a/bin/varnishtest/tests/c00047.vtc +++ b/bin/vinyltest/tests/c00047.vtc @@ -1,4 +1,4 @@ -varnishtest "Test VCL regsuball()" +vtest "Test VCL regsuball()" server s1 { rxreq @@ -7,7 +7,7 @@ server s1 { -hdr "bar: bbbar" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.http.baz1 = regsuball(beresp.http.foo, "barb", "zz"); set beresp.http.baz2 = regsuball(beresp.http.foo, "ar", "zz"); diff --git a/bin/vinyltest/tests/c00048.vtc b/bin/vinyltest/tests/c00048.vtc new file mode 100644 index 00000000000..08525bfa60d --- /dev/null +++ b/bin/vinyltest/tests/c00048.vtc @@ -0,0 +1,105 @@ +vtest "Forcing health of backends" + +barrier b1 cond 2 + +server s1 { + # probe + rxreq + txresp + + # req + accept + rxreq + txresp + rxreq + txresp -hdr "Connection: close" + + # probe sick + accept + rxreq + txresp -status 500 + barrier b1 sync + + accept + # req + rxreq + txresp +} -start + +vinyl v1 -vcl { + backend s1 { + .host = "${s1_addr}"; + .port = "${s1_port}"; + .probe = { + .window = 8; + .initial = 7; + .threshold = 8; + .interval = 5s; + } + } + + sub vcl_recv { + return(pass); + } + +} -start + +vinyl v1 -vsl_catchup + +vinyl v1 -cliok "vcl.list" +vinyl v1 -cliok "backend.list -p" +vinyl v1 -cliok "backend.set_health s1 auto" +vinyl v1 -cliok "backend.list -p" + +client c1 { + txreq + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -vsl_catchup + +vinyl v1 -cliok "backend.list" +vinyl v1 -cliok "backend.set_health s1 sick" +vinyl v1 -cliok "backend.list" + +client c1 { + txreq + rxresp + expect resp.status == 503 +} -run + +vinyl v1 -vsl_catchup + +vinyl v1 -cliok "backend.list" +vinyl v1 -cliok "backend.set_health s1 healthy" +vinyl v1 -cliok "backend.list" + +client c1 { + txreq + rxresp + expect resp.status == 200 +} -run + +# wait for sick probe +barrier b1 sync + +# healthy overrides probe +vinyl v1 -cliok "backend.list" + +client c1 { + txreq + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -vsl_catchup + +vinyl v1 -clierr 106 "backend.set_health s1 foo" +vinyl v1 -clierr 106 "backend.set_health s2 foo" +vinyl v1 -clierr 106 "backend.set_health s2 auto" +vinyl v1 -cliok "vcl.list" +vinyl v1 -cliok "backend.list *" +vinyl v1 -cliok "backend.list *.foo" +vinyl v1 -cliok "backend.list vcl1.*" + diff --git a/bin/vinyltest/tests/c00049.vtc b/bin/vinyltest/tests/c00049.vtc new file mode 100644 index 00000000000..5f0448b1947 --- /dev/null +++ b/bin/vinyltest/tests/c00049.vtc @@ -0,0 +1,266 @@ +vtest "New ban-lurker test" + +server s1 { + rxreq + expect req.url == /1 + txresp -hdr "Foo: bar1" + + rxreq + expect req.url == /2 + txresp -hdr "Foo: bar2" + + rxreq + expect req.url == /3 + txresp -hdr "Foo: bar3" + + rxreq + expect req.url == /4 + txresp -hdr "Foo: bar4" + + rxreq + expect req.url == /5 + txresp -hdr "Foo: bar5" + + rxreq + expect req.url == /6 + txresp -hdr "Foo: bar6" + + rxreq + expect req.url == /7 + txresp -hdr "Foo: bar7" + + rxreq + expect req.url == /4 + txresp -hdr "Foo: bar4.1" + + rxreq + expect req.url == /r1 + txresp + rxreq + expect req.url == /r2 + txresp + rxreq + expect req.url == /r3 + txresp +} -start + +vinyl v1 -vcl+backend {} -start + +vinyl v1 -cliok "param.set ban_lurker_age 0" +vinyl v1 -cliok "param.set ban_lurker_sleep 0" +vinyl v1 -cliok "param.set debug +lurker" +vinyl v1 -cliok "param.set debug +syncvsl" + + +client c1 { + txreq -url /1 + rxresp + expect resp.http.foo == bar1 + + txreq -url /2 + rxresp + expect resp.http.foo == bar2 +} -run + +vinyl v1 -cliok "ban obj.http.foo == bar1" + +client c1 { + txreq -url /3 + rxresp + expect resp.http.foo == bar3 +} -run + +vinyl v1 -cliok "ban obj.http.foo == bar2 && obj.http.foo != foof" + +client c1 { + txreq -url /4 + rxresp + expect resp.http.foo == bar4 +} -run + +vinyl v1 -cliok "ban req.http.kill == yes" + +client c1 { + txreq -url /5 + rxresp + expect resp.http.foo == bar5 +} -run + +vinyl v1 -cliok "ban obj.http.foo == bar5" + +client c1 { + txreq -url /6 + rxresp + expect resp.http.foo == bar6 +} -run + +vinyl v1 -cliok "ban obj.http.foo == bar6" + +client c1 { + txreq -url /7 + rxresp + expect resp.http.foo == bar7 +} -run + +# Get the VSL out of the way +delay 1 + +vinyl v1 -cliok "ban.list" + +vinyl v1 -expect bans == 6 +vinyl v1 -expect bans_completed == 1 +vinyl v1 -expect bans_req == 1 +vinyl v1 -expect bans_obj == 4 +vinyl v1 -expect bans_added == 6 +vinyl v1 -expect bans_deleted == 0 +vinyl v1 -expect bans_tested == 0 +vinyl v1 -expect bans_tests_tested == 0 +vinyl v1 -expect bans_obj_killed == 0 +vinyl v1 -expect bans_lurker_tested == 0 +vinyl v1 -expect bans_lurker_tests_tested == 0 +vinyl v1 -expect bans_lurker_obj_killed == 0 +vinyl v1 -expect bans_dups == 0 + + +vinyl v1 -cliok "param.set ban_lurker_sleep .01" + +delay 1 + +vinyl v1 -cliok "ban.list" + +delay 1 + +vinyl v1 -cliok "ban.list" + +vinyl v1 -expect bans == 4 +vinyl v1 -expect bans_completed == 3 +vinyl v1 -expect bans_req == 1 +vinyl v1 -expect bans_obj == 3 +vinyl v1 -expect bans_added == 6 +vinyl v1 -expect bans_deleted == 2 +vinyl v1 -expect bans_tested == 0 +vinyl v1 -expect bans_tests_tested == 0 +vinyl v1 -expect bans_obj_killed == 0 +vinyl v1 -expect bans_lurker_tested == 10 +vinyl v1 -expect bans_lurker_tests_tested == 11 +vinyl v1 -expect bans_lurker_obj_killed == 4 +vinyl v1 -expect bans_dups == 0 + +client c1 { + txreq -url /3 + rxresp + expect resp.http.foo == bar3 +} -run + +# Give lurker time to trim tail +delay 1 + +vinyl v1 -cliok "ban.list" + +vinyl v1 -expect bans == 4 +vinyl v1 -expect bans_completed == 3 +vinyl v1 -expect bans_req == 1 +vinyl v1 -expect bans_obj == 3 +vinyl v1 -expect bans_added == 6 +vinyl v1 -expect bans_deleted == 2 +vinyl v1 -expect bans_tested == 1 +vinyl v1 -expect bans_tests_tested == 1 +vinyl v1 -expect bans_obj_killed == 0 +vinyl v1 -expect bans_lurker_tested == 10 +vinyl v1 -expect bans_lurker_tests_tested == 11 +vinyl v1 -expect bans_lurker_obj_killed == 4 +vinyl v1 -expect bans_dups == 0 + +client c1 { + txreq -url /4 -hdr "kill: yes" + rxresp + expect resp.http.foo == bar4.1 +} -run + +# Give lurker time to trim tail +delay 1 + +vinyl v1 -cliok "ban.list" + +vinyl v1 -expect bans == 1 +vinyl v1 -expect bans_completed == 1 +vinyl v1 -expect bans_req == 0 +vinyl v1 -expect bans_obj == 1 +vinyl v1 -expect bans_added == 6 +vinyl v1 -expect bans_deleted == 5 +vinyl v1 -expect bans_tested == 2 +vinyl v1 -expect bans_tests_tested == 2 +vinyl v1 -expect bans_obj_killed == 1 +vinyl v1 -expect bans_lurker_tested == 10 +vinyl v1 -expect bans_lurker_tests_tested == 11 +vinyl v1 -expect bans_lurker_obj_killed == 4 +vinyl v1 -expect bans_dups == 0 + +vinyl v1 -expect n_object == 3 + +# adding more bans than the cutoff purges all untested objects +# (here: all objects) + +vinyl v1 -cliok "param.set ban_lurker_age 2" +vinyl v1 -cliok "param.set ban_cutoff 4" + +vinyl v1 -cliok "ban.list" +vinyl v1 -cliok "ban obj.http.nomatch == 1" +vinyl v1 -cliok "ban obj.http.nomatch == 2" +vinyl v1 -cliok "ban obj.http.nomatch == 3" +vinyl v1 -cliok "ban obj.http.nomatch == 4" +vinyl v1 -cliok "ban obj.http.nomatch == 5" +vinyl v1 -cliok "ban.list" +vinyl v1 -cliok "param.set ban_lurker_age .1" +delay 3 + +vinyl v1 -clijson "ban.list -j" +vinyl v1 -cliok "ban.list" + +vinyl v1 -expect bans == 1 +vinyl v1 -expect bans_completed == 1 +vinyl v1 -expect bans_req == 0 +vinyl v1 -expect bans_obj == 1 +vinyl v1 -expect bans_added == 11 +vinyl v1 -expect bans_deleted == 10 +vinyl v1 -expect bans_tested == 2 +vinyl v1 -expect bans_tests_tested == 2 +vinyl v1 -expect bans_obj_killed == 1 +vinyl v1 -expect bans_lurker_tested == 10 +vinyl v1 -expect bans_lurker_tests_tested == 11 +vinyl v1 -expect bans_lurker_obj_killed == 4 +vinyl v1 -expect bans_lurker_obj_killed_cutoff == 3 +vinyl v1 -expect bans_dups == 0 + +vinyl v1 -expect n_object == 0 + +client c1 { + txreq -url /r1 + rxresp +} -run + +vinyl v1 -cliok "ban req.http.nevermatch == 1" + +client c1 { + txreq -url /r2 + rxresp +} -run + +vinyl v1 -cliok "ban req.http.nevermatch == 2" + +client c1 { + txreq -url /r3 + rxresp +} -run + +vinyl v1 -cliok "ban req.http.nevermatch == 3" + +vinyl v1 -cliok "ban.list" + +vinyl v1 -cliok "ban obj.http.status != 0" + +delay 1 + +vinyl v1 -cliok "ban.list" + +vinyl v1 -expect n_object == 0 diff --git a/bin/vinyltest/tests/c00050.vtc b/bin/vinyltest/tests/c00050.vtc new file mode 100644 index 00000000000..47a62ace376 --- /dev/null +++ b/bin/vinyltest/tests/c00050.vtc @@ -0,0 +1,29 @@ +vtest "Memory pool gymnastics" + +server s1 { } -start + +vinyl v1 -vcl+backend {} -start + +delay 2 + +vinyl v1 -expect MEMPOOL.req0.pool == 10 + +vinyl v1 -cliok "param.set pool_req 90,100,100" + +delay 2 + +vinyl v1 -expect MEMPOOL.req0.pool == 90 + +vinyl v1 -cliok "param.set pool_req 50,80,100" + +delay 2 + +vinyl v1 -expect MEMPOOL.req0.pool == 80 +vinyl v1 -expect MEMPOOL.req0.surplus == 10 + +vinyl v1 -cliok "param.set pool_req 10,80,1" + +delay 2 + +vinyl v1 -expect MEMPOOL.req0.pool == 10 +vinyl v1 -expect MEMPOOL.req0.timeout == 70 diff --git a/bin/vinyltest/tests/c00051.vtc b/bin/vinyltest/tests/c00051.vtc new file mode 100644 index 00000000000..97db10037aa --- /dev/null +++ b/bin/vinyltest/tests/c00051.vtc @@ -0,0 +1,6 @@ +vtest "test parameter protection" + +vinyl v1 -arg "-r cli_timeout" + +vinyl v1 -cliok "param.show cli_timeout" +vinyl v1 -clierr 107 "param.set cli_timeout 1m" diff --git a/bin/vinyltest/tests/c00052.vtc b/bin/vinyltest/tests/c00052.vtc new file mode 100644 index 00000000000..fe2178ace4a --- /dev/null +++ b/bin/vinyltest/tests/c00052.vtc @@ -0,0 +1,51 @@ +vtest "Test disabling inline C code" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 + +vinyl v1 -cliok "param.set vcc_feature +allow_inline_c" + +vinyl v1 -vcl+backend { + C{ /*...*/ }C +} + +vinyl v1 -cliok "param.set vcc_feature -allow_inline_c" + +vinyl v1 -errvcl {Inline-C not allowed} { + backend default { + .host = "${s1_sock}"; + } + C{ /*...*/ }C +} + +vinyl v1 -errvcl {Inline-C not allowed} { + backend default { + .host = "${s1_sock}"; + } + sub vcl_recv { + C{ /*...*/ }C + } +} + +vinyl v1 -cliok "param.set vcc_feature +allow_inline_c" + +vinyl v1 -vcl+backend { + sub vcl_recv { + C{ /*...*/ }C + } +} + +vinyl v1 -vcl+backend { + C{ /*...*/ }C +} + +vinyl v1 -start + +client c1 { + txreq + rxresp +} -run diff --git a/bin/vinyltest/tests/c00053.vtc b/bin/vinyltest/tests/c00053.vtc new file mode 100644 index 00000000000..d8a3b345741 --- /dev/null +++ b/bin/vinyltest/tests/c00053.vtc @@ -0,0 +1,74 @@ +vtest "Test include vs. unsafe_path and include glob-ing" + +server s1 { + rxreq + txresp +} -start + +shell "echo > ${tmpdir}/_.c00053" + +vinyl v1 -vcl+backend { + include "${tmpdir}/_.c00053"; +} + +vinyl v1 -cliok "param.set vcc_feature -unsafe_path" + +vinyl v1 -errvcl {' is unsafe} { + backend default { .host = "${s1_sock}"; } + include "${tmpdir}/_.c00053"; +} + +vinyl v1 -cliok "param.set vcl_path ${tmpdir}" + +vinyl v1 -vcl+backend { + include "_.c00053"; +} + +shell "rm -f ${tmpdir}/_.c00053" + +# Testing of include +glob + +vinyl v1 -cliok "param.set vcc_feature +unsafe_path" + +vinyl v1 -errvcl "glob pattern matched no files." { + vcl 4.0; + + include +glob "${tmpdir}/Q*.vcl"; +} + +shell { + echo 'sub vcl_deliver { set resp.http.foo = "foo"; }' > ${tmpdir}/sub_foo.vcl + echo 'sub vcl_deliver { set resp.http.bar = "bar"; }' > ${tmpdir}/sub_bar.vcl + echo 'vcl 4.0; backend default { .host = "0:0"; } include +glob "./sub_*.vcl";' > ${tmpdir}/top.vcl +} + +vinyl v1 -vcl+backend { + include +glob "${tmpdir}/sub_*.vcl"; +} -start + +client c1 { + txreq + rxresp + expect resp.http.foo == foo + expect resp.http.bar == bar +} -run + +vinyl v1 -errvcl {needs absolute filename of including file.} { + include +glob "./sub_*.vcl"; + backend default none; +} + +vinyl v1 -cliok "vcl.load foo ${tmpdir}/top.vcl" +vinyl v1 -cliok "vcl.use foo" + +client c1 { + txreq + rxresp + expect resp.http.foo == foo + expect resp.http.bar == bar +} -run + +vinyl v1 -errvcl "+glob can only be used with absolute paths or relative paths starting with './'" { + include +glob "sub_*.vcl"; + backend default none; +} diff --git a/bin/vinyltest/tests/c00054.vtc b/bin/vinyltest/tests/c00054.vtc new file mode 100644 index 00000000000..3ff6cd32bf2 --- /dev/null +++ b/bin/vinyltest/tests/c00054.vtc @@ -0,0 +1,25 @@ +vtest "bitmap params masking" + +vinyl v1 -cliok "param.show vsl_mask" +vinyl v1 -cliok "param.set vsl_mask -VCL_trace" +vinyl v1 -cliok "param.show vsl_mask" +vinyl v1 -cliok "param.set vsl_mask -WorkThread,-TTL" +vinyl v1 -cliok "param.show vsl_mask" +vinyl v1 -cliok "param.set vsl_mask +WorkThread,+TTL,+Hash" +vinyl v1 -cliok "param.show vsl_mask" + +vinyl v1 -cliexpect {"value": "none"} "param.set -j feature none" +vinyl v1 -cliexpect {"value": "all"} "param.set -j feature all" +vinyl v1 -cliexpect {"value": "none"} "param.set -j vsl_mask none" +vinyl v1 -cliexpect {"value": "all"} "param.set -j vsl_mask all" +vinyl v1 -cliexpect {"value": "all(,-\w+)+"} "param.reset -j vsl_mask" + +vinyl v1 -clierr 106 "param.set vsl_mask FooBar" +vinyl v1 -clierr 106 "param.set vsl_mask -FooBar" +vinyl v1 -clierr 106 {param.set vsl_mask \"} + +vinyl v1 -cliok "param.set debug +workspace" +vinyl v1 -cliok "param.show debug" +vinyl v1 -cliok "param.show feature" +vinyl v1 -cliok "param.set feature +short_panic" +vinyl v1 -cliok "param.show feature" diff --git a/bin/varnishtest/tests/c00055.vtc b/bin/vinyltest/tests/c00055.vtc similarity index 87% rename from bin/varnishtest/tests/c00055.vtc rename to bin/vinyltest/tests/c00055.vtc index a84f61f902a..6804bf989ad 100644 --- a/bin/varnishtest/tests/c00055.vtc +++ b/bin/vinyltest/tests/c00055.vtc @@ -1,4 +1,4 @@ -varnishtest "test caching of req.body" +vtest "test caching of req.body" server s1 { rxreq @@ -13,7 +13,7 @@ server s1 { txresp -hdr "Foo: Foo" -body "56" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import std; sub vcl_recv { @@ -30,7 +30,7 @@ varnish v1 -vcl+backend { } -start -varnish v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set debug +syncvsl" client c1 { txreq -req "POST" -body "FOO" @@ -54,7 +54,7 @@ logexpect l1 -wait delay .1 -varnish v1 -expect MGT.child_died == 0 +vinyl v1 -expect MGT.child_died == 0 # no req body server s1 { diff --git a/bin/varnishtest/tests/c00056.vtc b/bin/vinyltest/tests/c00056.vtc similarity index 79% rename from bin/varnishtest/tests/c00056.vtc rename to bin/vinyltest/tests/c00056.vtc index 694e6c81f6f..9c43535a50e 100644 --- a/bin/varnishtest/tests/c00056.vtc +++ b/bin/vinyltest/tests/c00056.vtc @@ -1,4 +1,4 @@ -varnishtest "vcl_backend_response{} retry" +vtest "vcl_backend_response{} retry" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { txresp -hdr "foo: 2" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } sub vcl_backend_response { set beresp.http.bar = bereq.retries; @@ -18,7 +18,7 @@ varnish v1 -vcl+backend { } } -start -varnish v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set debug +syncvsl" client c1 { txreq -hdr "stop: 2" @@ -39,7 +39,7 @@ server s1 { txresp -hdr "foo: 3" } -start -varnish v1 -cliok "param.set max_retries 2" +vinyl v1 -cliok "param.set max_retries 2" client c1 { txreq -hdr "stop: 3" diff --git a/bin/vinyltest/tests/c00057.vtc b/bin/vinyltest/tests/c00057.vtc new file mode 100644 index 00000000000..0447f1873eb --- /dev/null +++ b/bin/vinyltest/tests/c00057.vtc @@ -0,0 +1,94 @@ +vtest "test sigsegv handler" + +# Under ASAN, the stack layout is different and STACK OVERFLOW is +# never printed. +feature !asan + +server s1 { + rxreq + txresp +} -start + +vinyl v1 \ + -arg "-p feature=+no_coredump" \ + -arg "-p vcc_feature=+allow_inline_c" \ + -arg "-p thread_pool_stack=128k" \ + -vcl+backend { + C{ +#include +#include +#include + +static void _accessor(volatile char *p) { + p[0] = 'V'; p[1] = '\0'; + fprintf(stderr, "%p %s\n", p, p); +} +static void (*accessor)(volatile char *p) = _accessor; + +}C + sub vcl_recv { C{ + #define STKKB 128 + int i; + volatile char overflow[STKKB * 1024]; + + /* for downwards stack, take care to hit a single guard page */ + for (i = (STKKB - 1) * 1024; i >= 0; i -= 1024) + accessor(overflow + i); + /* NOTREACHED */ + sleep(2); + }C } +} -start + +client c1 { + txreq + expect_close +} -run + +delay 3 + +vinyl v1 -cliexpect "STACK OVERFLOW" "panic.show" +vinyl v1 -clijson "panic.show -j" + +vinyl v1 -cliok "panic.clear" + +# Also check without the handler +vinyl v1 -cliok "param.set sigsegv_handler off" +vinyl v1 -vcl+backend {} -start + +client c1 { + txreq + rxresp +} -run + +vinyl v1 -expectexit 0x40 + +#################### + +vinyl v2 \ + -arg "-p feature=+no_coredump" \ + -arg "-p vcc_feature=+allow_inline_c" \ + -vcl+backend { + + C{ + #include + }C + + sub vcl_recv { C{ + int *i = (void *)VRT_GetHdr; + *i = 42; + }C } +} -start + +client c2 -connect ${v2_sock} { + txreq + expect_close +} -run + +delay 3 + +vinyl v2 -cliexpect "[bB]us error|Segmentation [fF]ault" "panic.show" +vinyl v2 -clijson "panic.show -j" + +vinyl v2 -cliok "panic.clear" + +vinyl v2 -expectexit 0x40 diff --git a/bin/varnishtest/tests/c00058.vtc b/bin/vinyltest/tests/c00058.vtc similarity index 83% rename from bin/varnishtest/tests/c00058.vtc rename to bin/vinyltest/tests/c00058.vtc index daf8548a01e..10b4b2b5c0a 100644 --- a/bin/varnishtest/tests/c00058.vtc +++ b/bin/vinyltest/tests/c00058.vtc @@ -1,4 +1,4 @@ -varnishtest "Test v4 grace" +vtest "Test v4 grace" barrier b1 cond 2 @@ -10,7 +10,7 @@ server s1 { barrier b1 sync } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 0.5s; set beresp.grace = 10s; @@ -26,7 +26,7 @@ client c1 { delay 1 } -run -varnish v1 -expect n_object == 1 +vinyl v1 -expect n_object == 1 client c1 { # We still get old object @@ -46,4 +46,4 @@ client c1 { } -run # and the old one has got superseded -varnish v1 -expect n_object == 1 +vinyl v1 -expect n_object == 1 diff --git a/bin/vinyltest/tests/c00059.vtc b/bin/vinyltest/tests/c00059.vtc new file mode 100644 index 00000000000..c2725d2e708 --- /dev/null +++ b/bin/vinyltest/tests/c00059.vtc @@ -0,0 +1,194 @@ +vtest "test ban obj.* except obj.http.*" + +# see c00021.vtc for obj.http.* tests + +server s1 { + rxreq + expect req.url == "/old" + txresp -status 204 + rxreq + txresp -bodylen 1 + rxreq + txresp -bodylen 2 + rxreq + txresp -bodylen 3 + rxreq + txresp -bodylen 4 + rxreq + txresp -bodylen 5 + rxreq + txresp -bodylen 6 + rxreq + txresp -bodylen 7 +} -start + +vinyl v1 -vcl+backend { + sub vcl_deliver { + set resp.http.hits = obj.hits; + } +} -start + +client c1 { + txreq -url "/old" + rxresp + expect resp.status == 204 + + txreq -url "/old" + rxresp + expect resp.status == 204 + + txreq + rxresp + expect resp.bodylen == 1 +} -run + +vinyl v1 -cliok "ban obj.status == 201" + +client c1 { + txreq + rxresp + expect resp.bodylen == 1 +} -run + +vinyl v1 -cliok "ban obj.status == 200" +vinyl v1 -cliok "ban.list" +vinyl v1 -clijson "ban.list -j" + +client c1 { + txreq + rxresp + expect resp.bodylen == 2 +} -run + +vinyl v1 -cliok "ban obj.keep == 0s && obj.ttl > 1d" +vinyl v1 -cliok "ban obj.keep == 0s && obj.ttl > 1d" + +# BANS_FLAG_NODEDUP +vinyl v1 -cliexpect {(?s) obj\.ttl > 1d\b.*obj\.ttl > 1d\b} "ban.list" + +client c1 { + txreq + rxresp + expect resp.bodylen == 2 +} -run + +vinyl v1 -cliok "ban obj.status == 200 && obj.ttl <= 2m" + +client c1 { + txreq + rxresp + expect resp.bodylen == 3 +} -run + +vinyl v1 -cliok "ban obj.age > 1d" +vinyl v1 -cliok "ban obj.age > 1d" + +# BANS_FLAG_NODEDUP +vinyl v1 -cliexpect {(?s) obj\.age > 1d\b.*obj\.age > 1d\b} "ban.list" + +client c1 { + txreq + rxresp + expect resp.bodylen == 3 +} -run + +vinyl v1 -cliok "ban obj.status == 200 && obj.age < 1m" + +client c1 { + txreq + rxresp + expect resp.bodylen == 4 +} -run + +vinyl v1 -cliok "ban obj.grace != 10s" +vinyl v1 -cliok "ban obj.grace != 10s" + +# ! BANS_FLAG_NODEDUP +vinyl v1 -cliexpect {(?s) obj\.grace != 10s\b.* \d C\b} "ban.list" + +client c1 { + txreq + rxresp + expect resp.bodylen == 4 +} -run + +vinyl v1 -cliok "ban obj.status == 200 && obj.grace == 10s" + +client c1 { + txreq + rxresp + expect resp.bodylen == 5 +} -run + +vinyl v1 -cliok "ban obj.keep != 0s" +vinyl v1 -cliok "ban obj.keep != 0s" + +# ! BANS_FLAG_NODEDUP +vinyl v1 -cliexpect {(?s) obj\.keep != 0s\b.* \d C\b} "ban.list" + +client c1 { + txreq + rxresp + expect resp.bodylen == 5 +} -run + +vinyl v1 -cli "param.set ban_lurker_age 0.1" +vinyl v1 -cliok "ban obj.status == 200 && obj.keep == 0s" +delay 1 + +client c1 { + txreq + rxresp + expect resp.bodylen == 6 + + txreq + rxresp + expect resp.bodylen == 6 + expect resp.http.hits == 1 +} -run + +# now we should have two objects, /old from the beginning and the len==6 object +vinyl v1 -cliexpect { 2 C} "ban.list" +vinyl v1 -cli "param.set ban_lurker_age 600" +vinyl v1 -cliok "ban obj.last_hit < 1s" + +# /old survives, but len==6 gets removed +client c1 { + txreq -url "/old" + rxresp + expect resp.http.age > 0 + expect resp.http.hits == 2 + + txreq + rxresp + expect resp.bodylen == 7 + expect resp.http.hits == 0 +} -run + +# duration formatting - 0s is being tested above +vinyl v1 -cliok "ban obj.keep == 123ms" +vinyl v1 -cliexpect {(?s) obj\.keep == 12[1-3]ms\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 0.456s" +vinyl v1 -cliexpect {(?s) obj\.keep == 45[3-6]ms\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 6.789s" +vinyl v1 -cliexpect {(?s) obj\.keep == 6.78[5-9]s\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 42y" +vinyl v1 -cliexpect {(?s) obj\.keep == 42y\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 365d" +vinyl v1 -cliexpect {(?s) obj\.keep == 1y\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 9w" +vinyl v1 -cliexpect {(?s) obj\.keep == 9w\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 7d" +vinyl v1 -cliexpect {(?s) obj\.keep == 1w\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 3d" +vinyl v1 -cliexpect {(?s) obj\.keep == 3d\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 24h" +vinyl v1 -cliexpect {(?s) obj\.keep == 1d\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 18h" +vinyl v1 -cliexpect {(?s) obj\.keep == 18h\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 1.5h" +vinyl v1 -cliexpect {(?s) obj\.keep == 90m\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 10m" +vinyl v1 -cliexpect {(?s) obj\.keep == 10m\b} "ban.list" +vinyl v1 -cliok "ban obj.keep == 0.5m" +vinyl v1 -cliexpect {(?s) obj\.keep == 30s\b} "ban.list" diff --git a/bin/varnishtest/tests/c00060.vtc b/bin/vinyltest/tests/c00060.vtc similarity index 92% rename from bin/varnishtest/tests/c00060.vtc rename to bin/vinyltest/tests/c00060.vtc index 8fdb04e855a..138c4467079 100644 --- a/bin/varnishtest/tests/c00060.vtc +++ b/bin/vinyltest/tests/c00060.vtc @@ -1,4 +1,4 @@ -varnishtest "Backend IMS header merging" +vtest "Backend IMS header merging" server s1 { rxreq @@ -16,7 +16,7 @@ server s1 { } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.grace = 0s; set beresp.keep = 60s; diff --git a/bin/vinyltest/tests/c00061.vtc b/bin/vinyltest/tests/c00061.vtc new file mode 100644 index 00000000000..f6d184953b9 --- /dev/null +++ b/bin/vinyltest/tests/c00061.vtc @@ -0,0 +1,27 @@ +vtest "retry in vcl_backend_error" + +vinyl v1 -vcl { + + backend b1 { .host = "${bad_backend}"; } + + sub vcl_backend_error { + return (retry); + } + + sub vcl_synth { + set resp.status = 504; + } +} -start + +vinyl v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set connect_timeout 1" +vinyl v1 -cliok "param.set max_retries 2" + +client c1 { + txreq + rxresp + expect resp.status == 504 +} -run + +vinyl v1 -expect backend_fail == 3 +vinyl v1 -expect fetch_failed == 3 diff --git a/bin/vinyltest/tests/c00062.vtc b/bin/vinyltest/tests/c00062.vtc new file mode 100644 index 00000000000..4db8cba71fb --- /dev/null +++ b/bin/vinyltest/tests/c00062.vtc @@ -0,0 +1,32 @@ +vtest "Check that aborted backend body aborts client in streaming mode" + +barrier b1 cond 2 +barrier b2 cond 2 + +server s1 { + rxreq + txresp -nolen -hdr "Transfer-encoding: chunked" + chunked {} + barrier b1 sync + chunked {} + barrier b2 sync +} -start + +vinyl v1 -cliok "param.set debug +syncvsl" -vcl+backend { + +} -start + + +client c1 { + txreq + rxresphdrs + expect resp.status == 200 + rxchunk + barrier b1 sync + rxchunk + barrier b2 sync + expect_close +} -run + + + diff --git a/bin/varnishtest/tests/c00063.vtc b/bin/vinyltest/tests/c00063.vtc similarity index 77% rename from bin/varnishtest/tests/c00063.vtc rename to bin/vinyltest/tests/c00063.vtc index c784079da14..848cc28b69e 100644 --- a/bin/varnishtest/tests/c00063.vtc +++ b/bin/vinyltest/tests/c00063.vtc @@ -1,6 +1,6 @@ -varnishtest "cache backend synth object" +vtest "cache backend synth object" -varnish v1 -vcl { +vinyl v1 -vcl { backend b { .host = "${bad_backend}"; } @@ -13,7 +13,7 @@ varnish v1 -vcl { } } -start -varnish v1 -cliok "param.set connect_timeout 1.0" +vinyl v1 -cliok "param.set connect_timeout 1.0" client c1 { txreq @@ -35,4 +35,4 @@ client c1 { delay 4 -varnish v1 -expect n_objectcore == 0 +vinyl v1 -expect n_objectcore == 0 diff --git a/bin/varnishtest/tests/c00064.vtc b/bin/vinyltest/tests/c00064.vtc similarity index 86% rename from bin/varnishtest/tests/c00064.vtc rename to bin/vinyltest/tests/c00064.vtc index 4791597cae8..6fe8d2b4745 100644 --- a/bin/varnishtest/tests/c00064.vtc +++ b/bin/vinyltest/tests/c00064.vtc @@ -1,11 +1,11 @@ -varnishtest "Connection: close in vcl_synth{}" +vtest "Connection: close in vcl_synth{}" server s1 { rxreq txresp -status 400 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_miss { if (req.url == "/333") { return (synth(333, "FOO")); diff --git a/bin/vinyltest/tests/c00065.vtc b/bin/vinyltest/tests/c00065.vtc new file mode 100644 index 00000000000..15fadbbb258 --- /dev/null +++ b/bin/vinyltest/tests/c00065.vtc @@ -0,0 +1,24 @@ +vtest "Connection: close in vcl_deliver{}" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -vcl+backend { + sub vcl_deliver { + set resp.http.Connection = "close"; + } +} -start + +client c1 { + txreq + rxresp + expect_close +} -run + +client c1 { + txreq + rxresp + expect_close +} -run diff --git a/bin/varnishtest/tests/c00066.vtc b/bin/vinyltest/tests/c00066.vtc similarity index 88% rename from bin/varnishtest/tests/c00066.vtc rename to bin/vinyltest/tests/c00066.vtc index 0472415dd2a..f7fc3d3cda9 100644 --- a/bin/varnishtest/tests/c00066.vtc +++ b/bin/vinyltest/tests/c00066.vtc @@ -1,11 +1,11 @@ -varnishtest "Check that we always deliver Date headers" +vtest "Check that we always deliver Date headers" server s1 { rxreq txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { backend bad { .host = "${bad_backend}"; } sub vcl_recv { if (req.url == "/synth") { @@ -20,7 +20,7 @@ varnish v1 -vcl+backend { } } -start -varnish v1 -cliok "param.set connect_timeout 1" +vinyl v1 -cliok "param.set connect_timeout 1" logexpect l1 -v v1 -g request { expect 0 1001 Begin "^req .* rxreq" diff --git a/bin/varnishtest/tests/c00067.vtc b/bin/vinyltest/tests/c00067.vtc similarity index 93% rename from bin/varnishtest/tests/c00067.vtc rename to bin/vinyltest/tests/c00067.vtc index ebfeebff79d..99ff4d94cd6 100644 --- a/bin/varnishtest/tests/c00067.vtc +++ b/bin/vinyltest/tests/c00067.vtc @@ -1,4 +1,4 @@ -varnishtest "chunked req.body" +vtest "chunked req.body" server s1 { rxreq @@ -19,10 +19,10 @@ server s1 { # does not reach the backend } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { } -start -varnish v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set debug +syncvsl" client c1 { txreq -req POST -nolen -hdr "Transfer-encoding: chunked" @@ -40,7 +40,7 @@ client c1 { delay .2 -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import std; sub vcl_recv { diff --git a/bin/varnishtest/tests/c00068.vtc b/bin/vinyltest/tests/c00068.vtc similarity index 95% rename from bin/varnishtest/tests/c00068.vtc rename to bin/vinyltest/tests/c00068.vtc index 5fb3b48f9f8..a1528585377 100644 --- a/bin/varnishtest/tests/c00068.vtc +++ b/bin/vinyltest/tests/c00068.vtc @@ -1,4 +1,4 @@ -varnishtest "synth in deliver" +vtest "synth in deliver" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp -status 200 } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import std; sub vcl_backend_response { diff --git a/bin/varnishtest/tests/c00069.vtc b/bin/vinyltest/tests/c00069.vtc similarity index 93% rename from bin/varnishtest/tests/c00069.vtc rename to bin/vinyltest/tests/c00069.vtc index 6963d4cdc6b..02aff1886bf 100644 --- a/bin/varnishtest/tests/c00069.vtc +++ b/bin/vinyltest/tests/c00069.vtc @@ -1,4 +1,4 @@ -varnishtest "Test resp.is_streaming" +vtest "Test resp.is_streaming" barrier b1 sock 2 barrier b2 sock 2 @@ -11,7 +11,7 @@ server s1 { send "1234567890" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { if (req.url == "/synth") { diff --git a/bin/varnishtest/tests/c00070.vtc b/bin/vinyltest/tests/c00070.vtc similarity index 88% rename from bin/varnishtest/tests/c00070.vtc rename to bin/vinyltest/tests/c00070.vtc index 7b1ec34fbdd..3085a862a42 100644 --- a/bin/varnishtest/tests/c00070.vtc +++ b/bin/vinyltest/tests/c00070.vtc @@ -1,4 +1,4 @@ -varnishtest "Test workspace functions in vmod_vtc" +vtest "Test workspace functions in vmod_vtc" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { if (req.url == "/overflow") { @@ -68,5 +68,5 @@ client c1 { logexpect l2 -wait -varnish v1 -expect client_resp_500 == 1 -varnish v1 -expect ws_client_overflow == 2 +vinyl v1 -expect client_resp_500 == 1 +vinyl v1 -expect ws_client_overflow == 2 diff --git a/bin/varnishtest/tests/c00071.vtc b/bin/vinyltest/tests/c00071.vtc similarity index 86% rename from bin/varnishtest/tests/c00071.vtc rename to bin/vinyltest/tests/c00071.vtc index 09e5ccf8bb8..1c41fc98258 100644 --- a/bin/varnishtest/tests/c00071.vtc +++ b/bin/vinyltest/tests/c00071.vtc @@ -1,4 +1,4 @@ -varnishtest "Test actual client workspace overflow" +vtest "Test actual client workspace overflow" server s1 { rxreq @@ -11,7 +11,7 @@ server s1 { txresp } -start -varnish v1 -arg "-p debug=+workspace" -vcl+backend { +vinyl v1 -arg "-p debug=+workspace" -vcl+backend { import vtc; import std; sub vcl_deliver { @@ -42,7 +42,7 @@ client c1 { expect resp.http.x-of == } -run -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup logexpect l1 -v v1 -g vxid -q "vxid == 1006" { expect * 1006 VCL_call {^DELIVER$} @@ -65,5 +65,5 @@ client c2 { logexpect l1 -wait -varnish v1 -expect client_resp_500 == 2 -varnish v1 -expect ws_client_overflow == 2 +vinyl v1 -expect client_resp_500 == 2 +vinyl v1 -expect ws_client_overflow == 2 diff --git a/bin/varnishtest/tests/c00072.vtc b/bin/vinyltest/tests/c00072.vtc similarity index 86% rename from bin/varnishtest/tests/c00072.vtc rename to bin/vinyltest/tests/c00072.vtc index 093711c29bd..77a60d8a1b3 100644 --- a/bin/varnishtest/tests/c00072.vtc +++ b/bin/vinyltest/tests/c00072.vtc @@ -1,4 +1,4 @@ -varnishtest "purge stale on refresh with and without IMS" +vtest "purge stale on refresh with and without IMS" server s1 { rxreq @@ -15,7 +15,7 @@ server s1 { txresp -status 304 -nolen -hdr "foo: bazf" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 0.1s; set beresp.grace = 0s; @@ -37,7 +37,7 @@ client c1 { # Wait for ttl to expire on both objects delay 0.2 -varnish v1 -expect n_object == 2 +vinyl v1 -expect n_object == 2 client c1 { txreq -url /no-ims @@ -55,4 +55,4 @@ client c1 { delay 1 # Only one of each of /no-ims and /ims should be left -varnish v1 -expect n_object == 2 +vinyl v1 -expect n_object == 2 diff --git a/bin/vinyltest/tests/c00073.vtc b/bin/vinyltest/tests/c00073.vtc new file mode 100644 index 00000000000..4cee8d7b74f --- /dev/null +++ b/bin/vinyltest/tests/c00073.vtc @@ -0,0 +1,30 @@ +vtest "Test object trimming" + +barrier b1 cond 2 +barrier b2 cond 2 + +server s1 { + rxreq + txresp -nolen -hdr "Transfer-encoding: chunked" + delay .2 + chunkedlen 4096 + barrier b1 sync + barrier b2 sync + chunkedlen 0 +} -start + +vinyl v1 \ + -arg "-s default,1m" -vcl+backend { } -start + +client c1 { + txreq + rxresp +} -start + +barrier b1 sync +vinyl v1 -expect SM?.s0.g_bytes > 10000 + +barrier b2 sync + +client c1 -wait +vinyl v1 -expect SM?.s0.g_bytes < 6000 diff --git a/bin/varnishtest/tests/c00074.vtc b/bin/vinyltest/tests/c00074.vtc similarity index 89% rename from bin/varnishtest/tests/c00074.vtc rename to bin/vinyltest/tests/c00074.vtc index 2231ba1a93a..b35fbab885c 100644 --- a/bin/varnishtest/tests/c00074.vtc +++ b/bin/vinyltest/tests/c00074.vtc @@ -1,11 +1,11 @@ -varnishtest "Test WS_Reset off-by-one when workspace is full" +vtest "Test WS_Reset off-by-one when workspace is full" server s1 { rxreq txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import std; import vtc; diff --git a/bin/varnishtest/tests/c00075.vtc b/bin/vinyltest/tests/c00075.vtc similarity index 85% rename from bin/varnishtest/tests/c00075.vtc rename to bin/vinyltest/tests/c00075.vtc index 4609862ba29..e9ebc482139 100644 --- a/bin/varnishtest/tests/c00075.vtc +++ b/bin/vinyltest/tests/c00075.vtc @@ -1,4 +1,4 @@ -varnishtest "Test large pass deleted during streaming" +vtest "Test large pass deleted during streaming" barrier ba1 cond 3 barrier ba2 cond 2 @@ -50,7 +50,7 @@ server s1 { chunkedlen 0 } -start -varnish v1 \ +vinyl v1 \ -arg "-s default,1m" -vcl+backend { sub vcl_backend_response { set beresp.http.be-hitmiss = bereq.is_hitmiss; @@ -65,7 +65,7 @@ varnish v1 \ } } -start -varnish v1 -cliok "debug.fragfetch 8192" +vinyl v1 -cliok "debug.fragfetch 8192" client c1 { txreq -url "/hfm" @@ -83,13 +83,13 @@ client c1 { } -start barrier ba1 sync -varnish v1 -expect SM?.Transient.g_bytes < 24576 +vinyl v1 -expect SM?.Transient.g_bytes < 24576 barrier ba2 sync client c1 -wait # HFM object -varnish v1 -expect SM?.Transient.g_bytes < 500 +vinyl v1 -expect SM?.Transient.g_bytes < 500 # pass on the HFM client c1 { @@ -108,13 +108,13 @@ client c1 { } -start barrier bb1 sync -varnish v1 -expect SM?.Transient.g_bytes < 24576 +vinyl v1 -expect SM?.Transient.g_bytes < 24576 barrier bb2 sync client c1 -wait # HFM object -varnish v1 -expect SM?.Transient.g_bytes < 500 +vinyl v1 -expect SM?.Transient.g_bytes < 500 ##### hfp @@ -134,13 +134,13 @@ client c1 { } -start barrier bc1 sync -varnish v1 -expect SM?.Transient.g_bytes < 24576 +vinyl v1 -expect SM?.Transient.g_bytes < 24576 barrier bc2 sync client c1 -wait # HFM + HFP object -varnish v1 -expect SM?.Transient.g_bytes < 1000 +vinyl v1 -expect SM?.Transient.g_bytes < 1000 # pass on the HFP client c1 { @@ -159,10 +159,10 @@ client c1 { } -start barrier bd1 sync -varnish v1 -expect SM?.Transient.g_bytes < 24576 +vinyl v1 -expect SM?.Transient.g_bytes < 24576 barrier bd2 sync client c1 -wait # HFM + HFP object -varnish v1 -expect SM?.Transient.g_bytes < 1000 +vinyl v1 -expect SM?.Transient.g_bytes < 1000 diff --git a/bin/varnishtest/tests/c00076.vtc b/bin/vinyltest/tests/c00076.vtc similarity index 95% rename from bin/varnishtest/tests/c00076.vtc rename to bin/vinyltest/tests/c00076.vtc index 7c7d83156fe..19230814511 100644 --- a/bin/varnishtest/tests/c00076.vtc +++ b/bin/vinyltest/tests/c00076.vtc @@ -1,11 +1,11 @@ -varnishtest "Complex son-of-hit-for-miss test" +vtest "Complex son-of-hit-for-miss test" server s1 { rxreq txresp -hdr "Connection: close" -hdr "Set-Cookie: c1" -bodylen 1 } -start -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start client c1 { txreq diff --git a/bin/vinyltest/tests/c00077.vtc b/bin/vinyltest/tests/c00077.vtc new file mode 100644 index 00000000000..ec7b09b9655 --- /dev/null +++ b/bin/vinyltest/tests/c00077.vtc @@ -0,0 +1,70 @@ +vtest "Switching VCL from VCL" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -vcl+backend { + sub vcl_deliver { + set resp.http.vcl = "vclA"; + } +} -start + +vinyl v1 -clierr 106 "vcl.label vcl.A vcl1" +vinyl v1 -cliok "vcl.label vclA vcl1" +# labeling twice #2834 +vinyl v1 -cliok "vcl.label vclA vcl1" +vinyl v1 -cliok "backend.list vcl1.*" + +vinyl v1 -vcl+backend { + sub vcl_recv { + if (req.http.vcl == "vcl1") { + return (vcl(vclA)); + } + } + sub vcl_deliver { + set resp.http.vcl = "vcl2"; + } +} +vinyl v1 -cliok "vcl.label vclB vcl2" +vinyl v1 -cliok "vcl.list" + +client c1 { + txreq + rxresp + expect resp.http.vcl == vcl2 + + txreq -hdr "vcl: vcl1" + rxresp + expect resp.http.vcl == vclA +} -run + +vinyl v1 -clierr 300 "vcl.discard vcl1" + +vinyl v1 -vcl+backend { sub vcl_recv { return (vcl(vclB)); } } + +client c1 { + txreq -hdr "vcl: vcl1" + rxresp + expect resp.status == 503 +} -run + +delay .2 + +vinyl v1 -vcl+backend { import std; sub vcl_recv { return (vcl(vclA)); } } +vinyl v1 -vcl+backend { import debug; sub vcl_recv { return (vcl(vclA)); } } +vinyl v1 -vcl+backend { sub vcl_recv { return (vcl(vclA)); } } +vinyl v1 -vcl+backend { sub vcl_recv { return (vcl(vclA)); } } + +vinyl v1 -clierr 300 "vcl.discard vclA" + +vinyl v1 -vcl+backend { } + +vinyl v1 -clierr 106 "vcl.label vclA vcl3" + +vinyl v1 -cliok "vcl.symtab" + +vinyl v1 -clierr 300 "vcl.discard vcl*" +vinyl v1 -clierr 300 "vcl.discard vcl[1-7]" +vinyl v1 -cliok "vcl.discard vcl[1-7] vcl[A-B]" diff --git a/bin/vinyltest/tests/c00078.vtc b/bin/vinyltest/tests/c00078.vtc new file mode 100644 index 00000000000..377c0058325 --- /dev/null +++ b/bin/vinyltest/tests/c00078.vtc @@ -0,0 +1,44 @@ +vtest "Stevedores RR, beresp.storage" + +server s1 -repeat 7 { + rxreq + txresp +} -start + +vinyl v1 \ + -arg "-ss1=default,1m" \ + -arg "-ss2=default,1m" \ + -arg "-ss0=default,1m" \ + -syntax 4.0 \ + -vcl+backend { + import vtc; + sub vcl_backend_response { + if (bereq.url == "/2") { + set beresp.storage = storage.s1; + } else if (bereq.url == "/6") { + set beresp.storage = vtc.no_stevedore(); + } + set beresp.http.storage = beresp.storage; + } +} -start + +client c1 { + txreq -url /1 + rxresp + expect resp.http.storage == "storage.s1" + txreq -url /2 + rxresp + expect resp.http.storage == "storage.s1" + txreq -url /3 + rxresp + expect resp.http.storage == "storage.s0" + txreq -url /4 + rxresp + expect resp.http.storage == "storage.s1" + txreq -url /5 + rxresp + expect resp.http.storage == "storage.s2" + txreq -url /6 + rxresp + expect resp.http.storage == +} -run diff --git a/bin/vinyltest/tests/c00079.vtc b/bin/vinyltest/tests/c00079.vtc new file mode 100644 index 00000000000..e8849944050 --- /dev/null +++ b/bin/vinyltest/tests/c00079.vtc @@ -0,0 +1,23 @@ +vtest "thread_pool_reserve max adjustment" + +server s1 { +} -start + +vinyl v1 \ + -arg "-p thread_pool_min=10" \ + -arg "-p thread_pool_max=100" \ + -arg "-p thread_pools=1" \ + -arg "-p thread_pool_timeout=10" \ + -vcl+backend {} +vinyl v1 -start + +vinyl v1 -cliok "param.set thread_pool_reserve 0" +vinyl v1 -cliok "param.set thread_pool_reserve 1" +vinyl v1 -cliok "param.set thread_pool_reserve 9" +vinyl v1 -clierr 106 "param.set thread_pool_reserve 10" + +vinyl v1 -cliok "param.set thread_pool_min 100" +vinyl v1 -cliok "param.set thread_pool_reserve 0" +vinyl v1 -cliok "param.set thread_pool_reserve 1" +vinyl v1 -cliok "param.set thread_pool_reserve 95" +vinyl v1 -clierr 106 "param.set thread_pool_reserve 96" diff --git a/bin/vinyltest/tests/c00080.vtc b/bin/vinyltest/tests/c00080.vtc new file mode 100644 index 00000000000..633da89ffe5 --- /dev/null +++ b/bin/vinyltest/tests/c00080.vtc @@ -0,0 +1,63 @@ +vtest "Deconfigure thread pool" + +# First with default waiter + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -vcl+backend {} -start + +vinyl v1 -cliok "param.set experimental +drop_pools" +vinyl v1 -cliok "param.set debug +slow_acceptor" +vinyl v1 -cliok "param.set thread_pools 1" + +delay 2 + +client c1 -repeat 2 { + txreq + rxresp +} -run + +delay 2 + +vinyl v1 -vsc *thr* +vinyl v1 -vsc *poo* +vinyl v1 -expect MAIN.pools == 1 + +client c1 { + txreq + rxresp +} -run + +# Then with poll waiter + +server s1 { + rxreq + txresp +} -start + +vinyl v2 -arg "-Wpoll" -vcl+backend {} -start + +vinyl v2 -cliok "param.set experimental +drop_pools" +vinyl v2 -cliok "param.set debug +slow_acceptor" +vinyl v2 -cliok "param.set thread_pools 1" + +delay 2 + +client c2 -connect ${v2_sock} -repeat 2 { + txreq + rxresp +} -run + +delay 2 + +vinyl v2 -vsc *thr* +vinyl v2 -vsc *poo* +vinyl v2 -expect MAIN.pools == 1 + +client c2 -connect ${v2_sock} { + txreq + rxresp +} -run diff --git a/bin/varnishtest/tests/c00081.vtc b/bin/vinyltest/tests/c00081.vtc similarity index 77% rename from bin/varnishtest/tests/c00081.vtc rename to bin/vinyltest/tests/c00081.vtc index ffd3440804c..f857eaef279 100644 --- a/bin/varnishtest/tests/c00081.vtc +++ b/bin/vinyltest/tests/c00081.vtc @@ -1,4 +1,4 @@ -varnishtest "Hit-for-pass (mk II)" +vtest "Hit-for-pass (mk II)" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp -hdr "foo: 3" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_miss { set req.http.miss = true; @@ -51,6 +51,6 @@ client c1 { logexpect l1 -wait -varnish v1 -expect MAIN.cache_hitpass == 1 -varnish v1 -expect MAIN.cache_miss == 2 -varnish v1 -expect MAIN.cache_hitmiss == 0 +vinyl v1 -expect MAIN.cache_hitpass == 1 +vinyl v1 -expect MAIN.cache_miss == 2 +vinyl v1 -expect MAIN.cache_hitmiss == 0 diff --git a/bin/varnishtest/tests/c00082.vtc b/bin/vinyltest/tests/c00082.vtc similarity index 93% rename from bin/varnishtest/tests/c00082.vtc rename to bin/vinyltest/tests/c00082.vtc index d9c687e5675..a7c81123f0e 100644 --- a/bin/varnishtest/tests/c00082.vtc +++ b/bin/vinyltest/tests/c00082.vtc @@ -1,4 +1,4 @@ -varnishtest "hash_always_miss overrides hit-for-pass" +vtest "hash_always_miss overrides hit-for-pass" server s1 { rxreq @@ -14,7 +14,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { set req.hash_always_miss = (req.http.Hash == "always-miss"); } diff --git a/bin/varnishtest/tests/c00083.vtc b/bin/vinyltest/tests/c00083.vtc similarity index 88% rename from bin/varnishtest/tests/c00083.vtc rename to bin/vinyltest/tests/c00083.vtc index fe09555e944..1a3b3d674ec 100644 --- a/bin/varnishtest/tests/c00083.vtc +++ b/bin/vinyltest/tests/c00083.vtc @@ -1,6 +1,6 @@ -varnishtest "Test VSM _.index rewrite when too many deletes" +vtest "Test VSM _.index rewrite when too many deletes" -varnish v1 -vcl { +vinyl v1 -vcl { backend default { .host = "${bad_ip}"; } } -start @@ -16,7 +16,7 @@ process p1 { #process p2 {tail -F ${tmpdir}/v1/_.vsm_child/_.index} -dump -start #process p3 {tail -F ${tmpdir}/v1/_.vsm_mgt/_.index} -dump -start -varnish v1 -vcl { +vinyl v1 -vcl { backend b00 { .host = "${bad_ip}"; } backend b01 { .host = "${bad_ip}"; } backend b02 { .host = "${bad_ip}"; } @@ -30,12 +30,12 @@ varnish v1 -vcl { } } -varnish v1 -cliok vcl.list +vinyl v1 -cliok vcl.list process p1 -run -varnish v1 -cliok "vcl.use vcl1" -varnish v1 -cliok "vcl.discard vcl2" +vinyl v1 -cliok "vcl.use vcl1" +vinyl v1 -cliok "vcl.discard vcl2" delay 1 @@ -45,7 +45,7 @@ process p1 -run # and spent 10 lines on vcl2, so it takes ~ 15 backends to # cause a _.index rewrite. # Make it 20 to be on the safe side. -varnish v1 -vcl { +vinyl v1 -vcl { backend b00 { .host = "${bad_ip}"; } backend b01 { .host = "${bad_ip}"; } backend b02 { .host = "${bad_ip}"; } @@ -91,15 +91,15 @@ varnish v1 -vcl { } } -varnish v1 -cliok vcl.list -varnish v1 -cliok backend.list +vinyl v1 -cliok vcl.list +vinyl v1 -cliok backend.list delay 1 process p1 -run -varnish v1 -cliok "vcl.use vcl1" -varnish v1 -cliok "vcl.discard vcl3" +vinyl v1 -cliok "vcl.use vcl1" +vinyl v1 -cliok "vcl.discard vcl3" delay 1 @@ -123,7 +123,7 @@ process p1 { test $nminus -eq 0 } -run -varnish v1 -cliok "stop" +vinyl v1 -cliok "stop" delay 1 @@ -135,7 +135,7 @@ process p1 { test $nminus -eq 2 } -run -varnish v1 -cliok "start" +vinyl v1 -cliok "start" delay 1 diff --git a/bin/varnishtest/tests/c00084.vtc b/bin/vinyltest/tests/c00084.vtc similarity index 83% rename from bin/varnishtest/tests/c00084.vtc rename to bin/vinyltest/tests/c00084.vtc index dff306944ef..fecb04c6f40 100644 --- a/bin/varnishtest/tests/c00084.vtc +++ b/bin/vinyltest/tests/c00084.vtc @@ -1,6 +1,6 @@ -varnishtest "legal symbol names" +vtest "legal symbol names" -varnish v1 \ +vinyl v1 \ -syntax 4.0 \ -arg "-s my-store=default" \ -vcl { @@ -30,9 +30,9 @@ varnish v1 \ } } -start -varnish v1 -cli "vcl.label my-label vcl1" +vinyl v1 -cli "vcl.label my-label vcl1" -varnish v1 -vcl { +vinyl v1 -vcl { backend dummy { .host = "${bad_backend}"; } sub vcl_recv { diff --git a/bin/varnishtest/tests/c00085.vtc b/bin/vinyltest/tests/c00085.vtc similarity index 83% rename from bin/varnishtest/tests/c00085.vtc rename to bin/vinyltest/tests/c00085.vtc index ba305f504a5..c00dc3b740f 100644 --- a/bin/varnishtest/tests/c00085.vtc +++ b/bin/vinyltest/tests/c00085.vtc @@ -1,4 +1,4 @@ -varnishtest "relaxed date parsing" +vtest "relaxed date parsing" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { -hdr "Expires: Fri, 2 Mar 2018 14:26:02 GMT" } -start -varnish v1 -arg "-p feature=+http_date_postel" -vcl+backend { +vinyl v1 -arg "-p feature=+http_date_postel" -vcl+backend { import std; sub vcl_backend_response { diff --git a/bin/vinyltest/tests/c00086.vtc b/bin/vinyltest/tests/c00086.vtc new file mode 100644 index 00000000000..9392841e718 --- /dev/null +++ b/bin/vinyltest/tests/c00086.vtc @@ -0,0 +1,67 @@ +vtest "-a sub-args user, group and mode; and warn if stat(EACCES) fails for UDS" + +feature user_vcache +feature group_vinyl +feature root + +shell -err -expect "Too many user sub-args" { + vinyld -a ${tmpdir}/vtc.sock,user=vcache,user=vcache -d +} + +shell -err -expect "Too many group sub-args" { + vinyld -a ${tmpdir}/vtc.sock,group=vinyl,group=vinyl -d +} + +# Assuming that empty user and group names always fail getpwnam and getgrnam +shell -err -expect "Unknown user " { + vinyld -a ${tmpdir}/vtc.sock,user= -d +} + +shell -err -expect "Unknown group " { + vinyld -a ${tmpdir}/vtc.sock,group= -d +} + +server s1 {} -start + +vinyl v1 -arg "-a ${tmpdir}/v1.sock,user=vcache,group=vinyl,mode=660" \ + -vcl+backend {} + +shell -match "rw-rw----.+vcache.+vinyl" { ls -l ${tmpdir}/v1.sock } + +vinyl v2 -arg "-a ${tmpdir}/v2.sock,user=vcache,mode=600" -vcl+backend {} + +shell -match "rw-------.+vcache" { ls -l ${tmpdir}/v2.sock } + +vinyl v3 -arg "-a ${tmpdir}/v3.sock,group=vinyl,mode=660" -vcl+backend {} + +shell -match "rw---- .+root.+vinyl" { ls -l ${tmpdir}/v3.sock } + +vinyl v4 -arg "-a ${tmpdir}/v4.sock,mode=666" -vcl+backend {} + +shell -match "rw-rw-rw-.+root" { ls -l ${tmpdir}/v4.sock } + +vinyl v5 -arg "-a ${tmpdir}/v5.sock,user=vcache,group=vinyl" -vcl+backend {} + +shell -match "vcache.+vinyl" { ls -l ${tmpdir}/v5.sock } + +vinyl v6 -arg "-a ${tmpdir}/v6.sock,user=vcache" -vcl+backend {} + +shell -match "vcache" { ls -l ${tmpdir}/v6.sock } + +vinyl v7 -arg "-a ${tmpdir}/v7.sock,group=vinyl" -vcl+backend {} + +shell -match "root.+vinyl" { ls -l ${tmpdir}/v7.sock } + +# VCC warns, but does not fail, if stat(UDS) fails with EACCES. +shell { mkdir ${tmpdir}/dir } +server s2 -listen ${tmpdir}/dir/s1.sock {} -start + +shell { chmod go-rx ${tmpdir}/dir } + +vinyl v8 \ + -jail "-junix,user=vinyl,ccgroup=vinyl,workuser=vcache" \ + -vcl { backend b None; +} + +vinyl v8 -cliexpect "(?s)Cannot stat:.+That was just a warning" \ + {vcl.inline test "vcl 4.1; backend b {.path=\"${tmpdir}/dir/s1.sock\";}"} diff --git a/bin/varnishtest/tests/c00087.vtc b/bin/vinyltest/tests/c00087.vtc similarity index 92% rename from bin/varnishtest/tests/c00087.vtc rename to bin/vinyltest/tests/c00087.vtc index 832f63993b6..fa6f0a4adf5 100644 --- a/bin/varnishtest/tests/c00087.vtc +++ b/bin/vinyltest/tests/c00087.vtc @@ -1,11 +1,11 @@ -varnishtest "VCL *.ip vars as bogo-IPs when -a is UDS, and test ACL matches" +vtest "VCL *.ip vars as bogo-IPs when -a is UDS, and test ACL matches" server s1 -listen "${tmpdir}/s1.sock" { rxreq txresp } -start -varnish v1 -syntax 4.1 -arg "-a foo=${tmpdir}/v1.sock" -vcl+backend { +vinyl v1 -syntax 4.1 -arg "-a foo=${tmpdir}/v1.sock" -vcl+backend { acl acl1 +log { "${localhost}"; } @@ -68,7 +68,7 @@ logexpect l1 -v v1 -d 1 -g vxid -q "VCL_acl" { expect * = End } -run -varnish v1 -vcl { +vinyl v1 -vcl { backend b None; acl acl1 { @@ -96,7 +96,7 @@ client c1 -connect "${tmpdir}/v1.sock" { expect resp.http.remote == "true" } -run -varnish v1 -errvcl {.../mask is not numeric.} { +vinyl v1 -errvcl {.../mask is not numeric.} { backend b None; acl acl1 { @@ -114,7 +114,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend {} +vinyl v1 -vcl+backend {} client c1 -connect "${tmpdir}/v1.sock" { txreq -url /1 diff --git a/bin/varnishtest/tests/c00088.vtc b/bin/vinyltest/tests/c00088.vtc similarity index 83% rename from bin/varnishtest/tests/c00088.vtc rename to bin/vinyltest/tests/c00088.vtc index 1fe0b768eb8..7046f13bfee 100644 --- a/bin/varnishtest/tests/c00088.vtc +++ b/bin/vinyltest/tests/c00088.vtc @@ -1,4 +1,4 @@ -varnishtest "Change UDS backend: change path, drop poll" +vtest "Change UDS backend: change path, drop poll" server s1 -listen "${tmpdir}/s1.sock" { non_fatal @@ -20,7 +20,7 @@ server s2 -listen "${tmpdir}/s2.sock" { } } -start -varnish v1 -vcl { +vinyl v1 -vcl { probe default { .window = 8; .initial = 7; @@ -34,7 +34,7 @@ varnish v1 -vcl { delay 1 -varnish v1 -vcl { +vinyl v1 -vcl { probe default { .window = 8; .initial = 7; @@ -48,7 +48,7 @@ varnish v1 -vcl { delay 1 -varnish v1 -vcl { +vinyl v1 -vcl { backend s1 { .path = "${s1_sock}"; } @@ -56,8 +56,8 @@ varnish v1 -vcl { delay 1 -varnish v1 -cliok "vcl.list" -varnish v1 -cliok "backend.list -p" +vinyl v1 -cliok "vcl.list" +vinyl v1 -cliok "backend.list -p" server s1 -break { rxreq diff --git a/bin/varnishtest/tests/c00089.vtc b/bin/vinyltest/tests/c00089.vtc similarity index 75% rename from bin/varnishtest/tests/c00089.vtc rename to bin/vinyltest/tests/c00089.vtc index 960741be00b..d4f946917b3 100644 --- a/bin/varnishtest/tests/c00089.vtc +++ b/bin/vinyltest/tests/c00089.vtc @@ -1,4 +1,4 @@ -varnishtest "Backend close retry with a UDS" +vtest "Backend close retry with a UDS" server s1 -listen "${tmpdir}/s1.sock" -repeat 1 { rxreq @@ -12,7 +12,7 @@ server s1 -listen "${tmpdir}/s1.sock" -repeat 1 { } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return(pass); } @@ -30,4 +30,4 @@ client c1 { expect resp.bodylen == 6 } -run -varnish v1 -expect backend_retry == 1 +vinyl v1 -expect backend_retry == 1 diff --git a/bin/vinyltest/tests/c00090.vtc b/bin/vinyltest/tests/c00090.vtc new file mode 100644 index 00000000000..a837f161b58 --- /dev/null +++ b/bin/vinyltest/tests/c00090.vtc @@ -0,0 +1,65 @@ +vtest "Forcing health of backends listening at UDS" + +server s1 -listen "${tmpdir}/s1.sock" -repeat 3 { + rxreq + txresp +} -start + +vinyl v1 -vcl { + backend s1 { + .path = "${s1_sock}"; + .probe = { + .window = 8; + .initial = 7; + .threshold = 8; + .interval = 10s; + } + } + + sub vcl_recv { + return(pass); + } + +} -start + +delay 1 + +vinyl v1 -cliok "vcl.list" +vinyl v1 -cliok "backend.list -p" +vinyl v1 -cliok "backend.set_health s1 auto" +vinyl v1 -cliok "backend.list -p" + +client c1 { + txreq + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -cliok "backend.list" +vinyl v1 -cliok "backend.set_health s1 sick" +vinyl v1 -cliok "backend.list" + +client c1 { + txreq + rxresp + expect resp.status == 503 +} -run + +vinyl v1 -cliok "backend.list" +vinyl v1 -cliok "backend.set_health s1 healthy" +vinyl v1 -cliok "backend.list" + +client c1 { + txreq + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -clierr 106 "backend.set_health s1 foo" +vinyl v1 -clierr 106 "backend.set_health s2 foo" +vinyl v1 -clierr 106 "backend.set_health s2 auto" +vinyl v1 -cliok "vcl.list" +vinyl v1 -cliok "backend.list *" +vinyl v1 -cliok "backend.list *.foo" +vinyl v1 -cliok "backend.list vcl1.*" + diff --git a/bin/varnishtest/tests/c00091.vtc b/bin/vinyltest/tests/c00091.vtc similarity index 78% rename from bin/varnishtest/tests/c00091.vtc rename to bin/vinyltest/tests/c00091.vtc index 4979a0eb1d7..3bc7d19f0e7 100644 --- a/bin/varnishtest/tests/c00091.vtc +++ b/bin/vinyltest/tests/c00091.vtc @@ -1,11 +1,11 @@ -varnishtest "vcl_backend_response{} retry with a UDS backend" +vtest "vcl_backend_response{} retry with a UDS backend" server s0 -listen "${tmpdir}/s1.sock" { rxreq txresp -hdr "connection: close" } -dispatch -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } sub vcl_backend_response { set beresp.http.retries = bereq.retries; @@ -22,7 +22,7 @@ client c1 { expect resp.http.retries == 2 } -run -varnish v1 -cliok "param.set max_retries 2" +vinyl v1 -cliok "param.set max_retries 2" client c2 { txreq -hdr "stop: 2" @@ -38,4 +38,4 @@ client c3 { expect resp.http.retries == } -run -varnish v1 -expect backend_conn == 9 +vinyl v1 -expect backend_conn == 9 diff --git a/bin/vinyltest/tests/c00092.vtc b/bin/vinyltest/tests/c00092.vtc new file mode 100644 index 00000000000..7f814f8b311 --- /dev/null +++ b/bin/vinyltest/tests/c00092.vtc @@ -0,0 +1,23 @@ +vtest "Check aborted backend body with a backend listening at UDS" + +barrier b1 cond 2 + +server s1 -listen "${tmpdir}/s1.sock" { + rxreq + txresp -nolen -hdr "Transfer-encoding: chunked" + chunked {} + barrier b1 sync +} -start + +vinyl v1 -cliok "param.set debug +syncvsl" -vcl+backend { + +} -start + +client c1 { + txreq + rxresphdrs + expect resp.status == 200 + rxchunk + barrier b1 sync + expect_close +} -run diff --git a/bin/varnishtest/tests/c00093.vtc b/bin/vinyltest/tests/c00093.vtc similarity index 89% rename from bin/varnishtest/tests/c00093.vtc rename to bin/vinyltest/tests/c00093.vtc index 002b6893062..fd8dc4d6e77 100644 --- a/bin/varnishtest/tests/c00093.vtc +++ b/bin/vinyltest/tests/c00093.vtc @@ -1,4 +1,4 @@ -varnishtest "Test resp.is_streaming with a UDS backend" +vtest "Test resp.is_streaming with a UDS backend" # Same as c00069 without the synth case @@ -13,7 +13,7 @@ server s1 -listen "${tmpdir}/s1.sock" { send "1234567890" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_backend_response { vtc.barrier_sync("${b1_sock}"); diff --git a/bin/vinyltest/tests/c00094.vtc b/bin/vinyltest/tests/c00094.vtc new file mode 100644 index 00000000000..71a1a0c2fd5 --- /dev/null +++ b/bin/vinyltest/tests/c00094.vtc @@ -0,0 +1,57 @@ +vtest "Test Backend Polling with a backend listening at a UDS" + +barrier b1 cond 2 + +server s1 -listen "${tmpdir}/s1.sock" { + timeout 8 + fatal + + # Probes + + loop 8 { + rxreq + expect req.url == "/" + txresp -hdr "Bar: foo" -body "foobar" + accept + } + + loop 3 { + rxreq + expect req.url == "/" + txresp -status 404 -hdr "Bar: foo" -body "foobar" + accept + } + loop 2 { + rxreq + expect req.url == "/" + txresp -proto "FROBOZ" -status 200 -hdr "Bar: foo" -body "foobar" + accept + } + loop 2 { + rxreq + expect req.url == "/" + send "HTTP/1.1 200 \r\n" + accept + } + + barrier b1 sync +} -start + +vinyl v1 -cliok "param.set debug +syncvsl" + +vinyl v1 -vcl { + + backend foo { + .path = "${s1_sock}"; + .probe = { + .timeout = 7 s; + .interval = 0.5 s; + } + } + +} -start + +barrier b1 sync + +vinyl v1 -cliexpect "^CLI RX| -+U+-{0,5} Good UNIX" "backend.list -p" +vinyl v1 -cliexpect "^CLI RX| -+H{10}-{5}H{2}-{0,5} Happy" "backend.list -p" diff --git a/bin/vinyltest/tests/c00095.vtc b/bin/vinyltest/tests/c00095.vtc new file mode 100644 index 00000000000..abe1cb3596c --- /dev/null +++ b/bin/vinyltest/tests/c00095.vtc @@ -0,0 +1,84 @@ +vtest "vcl_keep and vmod_so_keep debug bits" + +feature topbuild + +server s1 { +} -start + +vinyl v1 -vcl+backend { +} -start + +# Test valid and invalid VCL with vcl_keep unset + +vinyl v1 -cliok "param.set debug -vcl_keep" + +vinyl v1 -vcl+backend { +} + +shell -err "test -f ./v1/vcl_vcl2.*/vgc.c" + +vinyl v1 -errvcl {No backends or directors found} { +} + +shell -err "test -f ./v1/vcl_vcl3.*/vgc.c" + +# Same but with vcl_keep set + +vinyl v1 -cliok "param.set debug +vcl_keep" + +vinyl v1 -vcl+backend { +} + +shell { + test -f ./v1/vcl_vcl4.*/vgc.c && + test -f ./v1/vcl_vcl4.*/vgc.so +} + +vinyl v1 -errvcl {No backends or directors found} { +} + +shell { + test -f ./v1/vcl_vcl5.*/vgc.c && + test -f ./v1/vcl_vcl5.*/vgc.so +} + +# Test vmod with vmod_so_keep set + +vinyl v1 -cliok "param.set debug +vmod_so_keep" + +vinyl v1 -vcl+backend { + import std; +} + +shell "test -f ./v1/vmod_cache/_vmod_std.*" + +vinyl v1 -stop +vinyl v1 -cleanup + +# Ensure these are not deleted on exit + +shell { + test -f ./v1/vcl_vcl4.*/vgc.c && + test -f ./v1/vcl_vcl4.*/vgc.so && + test -f ./v1/vcl_vcl5.*/vgc.c && + test -f ./v1/vcl_vcl5.*/vgc.so && + test -f ./v1/vmod_cache/_vmod_std.* +} + +vinyl v2 -vcl+backend { +} -start + +# And test vmod with vmod_so_keep unset + +vinyl v2 -cliok "param.set debug -vmod_so_keep" + +vinyl v2 -vcl+backend { + import std; +} + +shell "test -f ./v2/vmod_cache/_vmod_std.*" + +vinyl v2 -stop +vinyl v2 -cleanup + +shell -err "test -f ./v2/vmod_cache/_vmod_std.*" diff --git a/bin/varnishtest/tests/c00096.vtc b/bin/vinyltest/tests/c00096.vtc similarity index 87% rename from bin/varnishtest/tests/c00096.vtc rename to bin/vinyltest/tests/c00096.vtc index 23f6a4c879b..4651a6a4969 100644 --- a/bin/varnishtest/tests/c00096.vtc +++ b/bin/vinyltest/tests/c00096.vtc @@ -1,4 +1,4 @@ -varnishtest "Test thread creation on acceptor thread queuing" +vtest "Test thread creation on acceptor thread queuing" # This tests that we are able to spawn new threads in the event that the # cache acceptor has been queued. It does this by starting 6 long lasting @@ -29,10 +29,10 @@ server stest { txresp -body "All good" } -start -varnish v1 -arg "-p debug=+syncvsl -p debug=+flush_head" -varnish v1 -arg "-p thread_pools=1 -p thread_pool_min=10" -varnish v1 -arg "-p thread_pool_add_delay=0.01" -varnish v1 -vcl+backend { +vinyl v1 -arg "-p debug=+syncvsl -p debug=+flush_head" +vinyl v1 -arg "-p thread_pools=1 -p thread_pool_min=10" +vinyl v1 -arg "-p thread_pool_add_delay=0.01" +vinyl v1 -vcl+backend { sub vcl_backend_fetch { if (bereq.url == "/test") { set bereq.backend = stest; @@ -47,7 +47,7 @@ varnish v1 -vcl+backend { # threads. This is currently mitigated by increasing the # thread_pool_add_delay parameter. -varnish v1 -expect MAIN.threads == 10 +vinyl v1 -expect MAIN.threads == 10 client c1 { txreq -url /1 diff --git a/bin/varnishtest/tests/c00097.vtc b/bin/vinyltest/tests/c00097.vtc similarity index 77% rename from bin/varnishtest/tests/c00097.vtc rename to bin/vinyltest/tests/c00097.vtc index 796c6481cc6..c4eb5442ba9 100644 --- a/bin/varnishtest/tests/c00097.vtc +++ b/bin/vinyltest/tests/c00097.vtc @@ -1,4 +1,4 @@ -varnishtest "Streaming delivery and waitinglist rushing" +vtest "Streaming delivery and waitinglist rushing" # Barrier to make sure that c1 connects to s1 barrier b1 cond 2 @@ -23,7 +23,7 @@ server s1 { chunkedlen 0 } -start -varnish v1 -arg "-p thread_pools=1" -arg "-p thread_pool_min=20" -arg "-p rush_exponent=2" -arg "-p debug=+syncvsl" -arg "-p debug=+waitinglist" -vcl+backend { +vinyl v1 -arg "-p thread_pools=1" -arg "-p thread_pool_min=20" -arg "-p rush_exponent=2" -arg "-p debug=+syncvsl" -arg "-p debug=+waitinglist" -vcl+backend { import vtc; sub vcl_hit { vtc.barrier_sync("${b3_sock}"); @@ -53,8 +53,8 @@ client c4 { } -start # Wait until c2-c4 are on the waitinglist -varnish v1 -vsl_catchup -varnish v1 -expect busy_sleep == 3 +vinyl v1 -vsl_catchup +vinyl v1 -expect busy_sleep == 3 # Open up the response headers from s1, and as a result HSH_Unbusy barrier b2 sync diff --git a/bin/varnishtest/tests/c00098.vtc b/bin/vinyltest/tests/c00098.vtc similarity index 89% rename from bin/varnishtest/tests/c00098.vtc rename to bin/vinyltest/tests/c00098.vtc index 14824527521..f1e45f0061f 100644 --- a/bin/varnishtest/tests/c00098.vtc +++ b/bin/vinyltest/tests/c00098.vtc @@ -1,4 +1,4 @@ -varnishtest "Hit-for-pass and waitinglist rushing" +vtest "Hit-for-pass and waitinglist rushing" # Barrier to make sure that s1 is run first barrier b1 cond 2 @@ -68,7 +68,7 @@ server s6 { chunkedlen 0 } -start -varnish v1 -arg "-p thread_pools=1" -arg "-p thread_pool_min=30" -arg "-p rush_exponent=2" -arg "-p debug=+syncvsl" -arg "-p debug=+waitinglist" -vcl+backend { +vinyl v1 -arg "-p thread_pools=1" -arg "-p thread_pool_min=30" -arg "-p rush_exponent=2" -arg "-p debug=+syncvsl" -arg "-p debug=+waitinglist" -vcl+backend { sub vcl_backend_fetch { if (bereq.http.user-agent == "c1") { set bereq.backend = s1; @@ -123,8 +123,8 @@ client c6 { } -start # Wait until c2-c6 are on the waitinglist -varnish v1 -vsl_catchup -varnish v1 -expect busy_sleep == 5 +vinyl v1 -vsl_catchup +vinyl v1 -expect busy_sleep == 5 # Open up the response headers from s1, and as a result HSH_Unbusy barrier b2 sync diff --git a/bin/varnishtest/tests/c00099.vtc b/bin/vinyltest/tests/c00099.vtc similarity index 89% rename from bin/varnishtest/tests/c00099.vtc rename to bin/vinyltest/tests/c00099.vtc index 9ee17759756..9838db7495c 100644 --- a/bin/varnishtest/tests/c00099.vtc +++ b/bin/vinyltest/tests/c00099.vtc @@ -1,4 +1,4 @@ -varnishtest "Hit-for-miss and waitinglist rushing" +vtest "Hit-for-miss and waitinglist rushing" # Barrier to make sure that s1 is run first barrier b1 cond 2 @@ -68,7 +68,7 @@ server s6 { chunkedlen 0 } -start -varnish v1 -arg "-p thread_pools=1" -arg "-p thread_pool_min=30" -arg "-p rush_exponent=2" -arg "-p debug=+syncvsl" -arg "-p debug=+waitinglist" -vcl+backend { +vinyl v1 -arg "-p thread_pools=1" -arg "-p thread_pool_min=30" -arg "-p rush_exponent=2" -arg "-p debug=+syncvsl" -arg "-p debug=+waitinglist" -vcl+backend { sub vcl_backend_fetch { if (bereq.http.user-agent == "c1") { set bereq.backend = s1; @@ -123,8 +123,8 @@ client c6 { } -start # Wait until c2-c6 are on the waitinglist -varnish v1 -vsl_catchup -varnish v1 -expect busy_sleep == 5 +vinyl v1 -vsl_catchup +vinyl v1 -expect busy_sleep == 5 # Open up the response headers from s1, and as a result HSH_Unbusy barrier b2 sync diff --git a/bin/varnishtest/tests/c00100.vtc b/bin/vinyltest/tests/c00100.vtc similarity index 94% rename from bin/varnishtest/tests/c00100.vtc rename to bin/vinyltest/tests/c00100.vtc index ebf6904305f..e66ccc5c52b 100644 --- a/bin/varnishtest/tests/c00100.vtc +++ b/bin/vinyltest/tests/c00100.vtc @@ -1,4 +1,4 @@ -varnishtest "if-range header" +vtest "if-range header" server s1 { rxreq @@ -8,7 +8,7 @@ server s1 { txresp -bodylen 16 } -start -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start client c1 { txreq @@ -53,7 +53,7 @@ client c1 { expect resp.bodylen == 5 }-run -varnish v1 -cliok "ban obj.status != x" +vinyl v1 -cliok "ban obj.status != x" # no etag/LM header client c1 { diff --git a/bin/varnishtest/tests/c00101.vtc b/bin/vinyltest/tests/c00101.vtc similarity index 92% rename from bin/varnishtest/tests/c00101.vtc rename to bin/vinyltest/tests/c00101.vtc index c75f73749e6..045946d13ab 100644 --- a/bin/varnishtest/tests/c00101.vtc +++ b/bin/vinyltest/tests/c00101.vtc @@ -1,4 +1,4 @@ -varnishtest "bo_* with effect on filters" +vtest "bo_* with effect on filters" server s1 -repeat 2 -keepalive { @@ -8,7 +8,7 @@ server s1 -repeat 2 -keepalive { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub backend_response_filter { set beresp.http.filter0 = beresp.filters; set beresp.do_esi = true; diff --git a/bin/vinyltest/tests/c00102.vtc b/bin/vinyltest/tests/c00102.vtc new file mode 100644 index 00000000000..da7a46f215d --- /dev/null +++ b/bin/vinyltest/tests/c00102.vtc @@ -0,0 +1,64 @@ +vtest "TCP pool teardown with open connection" + +feature ipv6 + +# when c1's request has gotten to s1 +barrier b1 cond 3 + +# when vcls have been swizzled +barrier b2 cond 3 + +server s1 -listen "::1" { + rxreq + expect req.url == "/s1" + barrier b1 sync + barrier b2 sync + txresp -hdr "Host: s1" + expect_close +} -start + +vinyl v1 -cliok "param.set debug +vclrel" + +vinyl v1 -vcl+backend {} -start + +client c1 { + txreq -url /s1 + barrier b1 sync + barrier b2 sync + rxresp + expect resp.http.host == "s1" + + txreq -url /s2 + rxresp + expect resp.http.host == "s2" +} -start + +barrier b1 sync + +vinyl v1 -cliok "param.set debug +vclrel" + +server s2 -listen "::1" { + rxreq + expect req.url == "/s2" + txresp -hdr "Host: s2" +} -start + +vinyl v1 -vcl { + backend b2 { + .host = "${s2_sock}"; + } +} + +vinyl v1 -vsc LCK.conn_pool.* +vinyl v1 -cliok "vcl.discard vcl1" +vinyl v1 -cliok "vcl.list" +vinyl v1 -vsc LCK.conn_pool.* +vinyl v1 -expect LCK.conn_pool.destroy == 0 + +barrier b2 sync + +client c1 -wait +vinyl v1 -cliok "vcl.list" +server s1 -wait +vinyl v1 -vsc LCK.conn_pool.* +vinyl v1 -expect LCK.conn_pool.destroy == 1 diff --git a/bin/varnishtest/tests/c00103.vtc b/bin/vinyltest/tests/c00103.vtc similarity index 91% rename from bin/varnishtest/tests/c00103.vtc rename to bin/vinyltest/tests/c00103.vtc index 75dc18ed39e..a73fa43ffc2 100644 --- a/bin/varnishtest/tests/c00103.vtc +++ b/bin/vinyltest/tests/c00103.vtc @@ -1,6 +1,6 @@ -varnishtest "REGEX expressions in VCL" +vtest "REGEX expressions in VCL" -varnish v1 -vcl { +vinyl v1 -vcl { import debug; backend be none; sub vcl_recv { diff --git a/bin/vinyltest/tests/c00104.vtc b/bin/vinyltest/tests/c00104.vtc new file mode 100644 index 00000000000..618ddb53e27 --- /dev/null +++ b/bin/vinyltest/tests/c00104.vtc @@ -0,0 +1,32 @@ +vtest "Test watchdog only active on queue 0" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -cliok "param.set thread_pools 1" +vinyl v1 -cliok "param.set thread_pool_min 5" +vinyl v1 -cliok "param.set thread_pool_max 5" +vinyl v1 -cliok "param.set thread_pool_watchdog 1" +vinyl v1 -cliok "param.set feature +http2" + +vinyl v1 -vcl+backend { +} -start + +client c1 { + txpri + delay 2 +} -start + +client c2 { + txpri + delay 2 +} -start + +client c3 { + txpri + delay 2 +} -start + +delay 2 diff --git a/bin/varnishtest/tests/c00105.vtc b/bin/vinyltest/tests/c00105.vtc similarity index 85% rename from bin/varnishtest/tests/c00105.vtc rename to bin/vinyltest/tests/c00105.vtc index a5c198d5ead..4b72bc562e2 100644 --- a/bin/varnishtest/tests/c00105.vtc +++ b/bin/vinyltest/tests/c00105.vtc @@ -1,4 +1,4 @@ -varnishtest "Failed post-streaming revalidation" +vtest "Failed post-streaming revalidation" barrier b1 cond 3 barrier b2 sock 2 @@ -16,9 +16,9 @@ server s2 { txresp -status 304 -nolen -hdr {Etag: "abc"} -hdr "Content-Length: 100" } -start -varnish v1 -cliok "param.set vsl_mask +ExpKill" +vinyl v1 -cliok "param.set vsl_mask +ExpKill" -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { @@ -49,7 +49,7 @@ client c1 { logexpect l1 -wait -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup barrier b1 sync diff --git a/bin/varnishtest/tests/c00106.vtc b/bin/vinyltest/tests/c00106.vtc similarity index 91% rename from bin/varnishtest/tests/c00106.vtc rename to bin/vinyltest/tests/c00106.vtc index 0461e04f40e..071d668fefb 100644 --- a/bin/varnishtest/tests/c00106.vtc +++ b/bin/vinyltest/tests/c00106.vtc @@ -1,4 +1,4 @@ -varnishtest "tunnel basic coverage" +vtest "tunnel basic coverage" barrier b1 cond 2 -cyclic barrier b2 sock 2 -cyclic @@ -9,7 +9,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { vtc.barrier_sync("${b2_sock}"); diff --git a/bin/varnishtest/tests/c00107.vtc b/bin/vinyltest/tests/c00107.vtc similarity index 90% rename from bin/varnishtest/tests/c00107.vtc rename to bin/vinyltest/tests/c00107.vtc index 6f3dced1f25..499b89c0a6f 100644 --- a/bin/varnishtest/tests/c00107.vtc +++ b/bin/vinyltest/tests/c00107.vtc @@ -1,4 +1,4 @@ -varnishtest req.hash_ignore_vary +vtest req.hash_ignore_vary server s1 { rxreq @@ -10,7 +10,7 @@ server s1 { txresp -hdr "vary: cookie" -body b } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { set req.hash_ignore_vary = req.http.user-agent ~ "bot"; } diff --git a/bin/vinyltest/tests/c00108.vtc b/bin/vinyltest/tests/c00108.vtc new file mode 100644 index 00000000000..254ace4d1d9 --- /dev/null +++ b/bin/vinyltest/tests/c00108.vtc @@ -0,0 +1,53 @@ +vtest "Session pipelining exceeding available workspace" + +server s1 { + loop 2 { + rxreq + expect req.bodylen == 32769 + txresp + } + + rxreq + expect req.bodylen == 32768 + txresp +} -start + +vinyl v1 -cliok "param.set workspace_client 24k" +vinyl v1 -cliok "param.set http_req_size 1k" +vinyl v1 -cliok "param.set http_resp_size 1k" +vinyl v1 -cliok "param.set vsl_buffer 1k" +vinyl v1 -vcl+backend { } -start + +client c1 { + # Multi-line strings aren't escaped, the send argument + # below contains actual carriage returns. The extra body + # byte on top of the 32kB is a line feed. + send { +POST / HTTP/1.1 +host: ${localhost} +content-length: 32769 + +${string,repeat,1024,abcdefghijklmnopqrstuvwxyz012345} +POST / HTTP/1.1 +host: ${localhost} +content-length: 32769 + +${string,repeat,1024,abcdefghijklmnopqrstuvwxyz012345} +} + + loop 2 { + rxresp + expect resp.status == 200 + } +} -run + +vinyl v1 -cliok "param.set feature +http2" + +client c2 { + stream 1 { + txreq -method POST -hdr content-length 32768 -nostrend + txdata -datalen 16384 -nostrend + txdata -datalen 16384 + rxresp + } -run +} -run diff --git a/bin/vinyltest/tests/c00109.vtc b/bin/vinyltest/tests/c00109.vtc new file mode 100644 index 00000000000..0976bc49478 --- /dev/null +++ b/bin/vinyltest/tests/c00109.vtc @@ -0,0 +1,18 @@ +vtest "cc_command and cc_warnings" + +vinyl v1 -cliok {param.set debug +vcl_keep} +vinyl v1 -cliok {param.set cc_warnings hello} +vinyl v1 -cliok {param.set cc_command << EOF +printf 'd="%%s" D="%%s" w="%%s"' '%d' '%D' '%w' >world +printf '%%s' '%n' >v1_name +EOF} + +vinyl v1 -errvcl "VCL compilation failed" "backend be none;" + +shell -match {d=".+" D=".+hello.+" w="hello"} { + exec cat v1/vcl_*/world +} + +shell -expect "Value is: hello" { + exec vinyladm -n "$(cat v1/vcl_*/v1_name)" param.show cc_warnings +} diff --git a/bin/vinyltest/tests/c00110.vtc b/bin/vinyltest/tests/c00110.vtc new file mode 100644 index 00000000000..b8d2e67b2ea --- /dev/null +++ b/bin/vinyltest/tests/c00110.vtc @@ -0,0 +1,22 @@ +vtest "Transit buffering with early close" + +feature cmd {test $(uname) != SunOS} + +server s1 { + non_fatal + rxreq + txresp -bodylen 2000000 +} -start + +vinyl v1 -cliok "param.set transit_buffer 1k" +vinyl v1 -vcl+backend { } -start + +client c1 -rcvbuf 128 { + txreq -method POST + rxresphdrs + expect resp.status == 200 + recv 100 +} -run + +vinyl v1 -expect VBE.vcl1.s1.conn == 0 +vinyl v1 -expect VBE.vcl1.s1.busy == 0 diff --git a/bin/vinyltest/tests/c00111.vtc b/bin/vinyltest/tests/c00111.vtc new file mode 100644 index 00000000000..a0289f31478 --- /dev/null +++ b/bin/vinyltest/tests/c00111.vtc @@ -0,0 +1,36 @@ +vtest "LRU error without transit buffer" + +server s1 -repeat 2 { + non_fatal + rxreq + txresp -bodylen 1850000 +} -start + +vinyl v1 -arg "-s Transient=malloc,1m" -vcl+backend { } -start + +client c1 { + non_fatal + txreq -method POST + rxresp +} -run + +vinyl v1 -vsl_catchup +# with vai, this no longer fails systematically (which is good) +vinyl v1 -expect fetch_failed <= 1 +vinyl v1 -expect transit_stored > 0 +vinyl v1 -expect transit_stored <= 1850000 +vinyl v1 -expect transit_buffered == 0 + +vinyl v1 -cliok "param.set transit_buffer 4k" + +client c2 { + txreq -method POST + rxresp + expect resp.bodylen == 1850000 +} -run + +vinyl v1 -vsl_catchup +vinyl v1 -expect s_fetch == 2 +vinyl v1 -expect fetch_failed <= 1 +vinyl v1 -expect transit_stored <= 1850000 +vinyl v1 -expect transit_buffered == 1850000 diff --git a/bin/vinyltest/tests/c00112.vtc b/bin/vinyltest/tests/c00112.vtc new file mode 100644 index 00000000000..6614ba4dbf6 --- /dev/null +++ b/bin/vinyltest/tests/c00112.vtc @@ -0,0 +1,41 @@ +vtest "Transit buffering deadlock test" + +server s1 { + rxreq + txresp -status 404 +} -start + +server s2 { + non_fatal + rxreq + txresp -bodylen 2000000 +} -start + +vinyl v1 -vcl+backend { + sub vcl_recv { + set req.backend_hint = s2; + if (req.restarts == 1) { + set req.backend_hint = s1; + } + } + sub vcl_backend_response { + set beresp.transit_buffer = 1k; + } + sub vcl_deliver { + if (req.restarts < 1) { + return (restart); + } + } +} -start + +client c1 { + txreq -method POST + rxresp + expect resp.bodylen == 0 + expect resp.status == 404 +} -run + +vinyl v1 -expect VBE.vcl1.s1.conn == 0 +vinyl v1 -expect VBE.vcl1.s1.busy == 0 +vinyl v1 -expect VBE.vcl1.s2.conn == 0 +vinyl v1 -expect VBE.vcl1.s2.busy == 0 diff --git a/bin/vinyltest/tests/c00113.vtc b/bin/vinyltest/tests/c00113.vtc new file mode 100644 index 00000000000..5eb238c7577 --- /dev/null +++ b/bin/vinyltest/tests/c00113.vtc @@ -0,0 +1,32 @@ +vtest "probe expect close" + +server s0 { + rxreq + txresp + expect_close +} -dispatch + +vinyl v1 -vcl+backend { + probe default { + .window = 3; + .threshold = 1; + .timeout = 0.5s; + .interval = 0.1s; + .expect_close = true; + } +} -start + +vinyl v2 -vcl+backend { + probe default { + .window = 3; + .threshold = 1; + .timeout = 0.5s; + .interval = 0.1s; + .expect_close = false; + } +} -start + +delay 2.0 + +vinyl v1 -cliexpect sick backend.list +vinyl v2 -cliexpect healthy backend.list diff --git a/bin/varnishtest/tests/c00114.vtc b/bin/vinyltest/tests/c00114.vtc similarity index 86% rename from bin/varnishtest/tests/c00114.vtc rename to bin/vinyltest/tests/c00114.vtc index 85f73a3699e..146ec278a72 100644 --- a/bin/varnishtest/tests/c00114.vtc +++ b/bin/vinyltest/tests/c00114.vtc @@ -1,4 +1,4 @@ -varnishtest "TLV authority over via backends used as SNI for haproxy backend/1" +vtest "TLV authority over via backends used as SNI for haproxy backend/1" # This test is skipped unless haproxy is available. It fails unless # that binary implements the fc_pp_authority fetch, to return the TLV @@ -6,9 +6,9 @@ varnishtest "TLV authority over via backends used as SNI for haproxy backend/1" # In this version of the test, we set port 0 in the server config of # the "ssl-onloading" haproxy, and set the destination port in the -# backend config for Varnish. The onloader sets its destination port +# backend config for Vinyl. The onloader sets its destination port # from the address forwarded via PROXY, which in turn is set from the -# Varnish backend config. See c00101.vtc for another config method. +# Vinyl backend config. See c00101.vtc for another config method. feature ignore_unknown_macro @@ -38,7 +38,7 @@ haproxy h2 -conf { server s0 0.0.0.0:0 ssl verify none sni fc_pp_authority } -start -varnish v1 -vcl { +vinyl v1 -vcl { backend h2 { .path = "${tmpdir}/h2.sock"; } # The ssl-onloader uses the port number set here. diff --git a/bin/vinyltest/tests/c00120.vtc b/bin/vinyltest/tests/c00120.vtc new file mode 100644 index 00000000000..22e699e1d05 --- /dev/null +++ b/bin/vinyltest/tests/c00120.vtc @@ -0,0 +1,38 @@ +vtest "bgfetch_no_thread" + +server s1 { + rxreq + txresp +} -start + +vinyl v1 -cliok "param.set thread_pools 1" +vinyl v1 -cliok "param.set thread_pool_min 5" +vinyl v1 -cliok "param.set thread_pool_max 5" +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.ttl = 1ms; + set beresp.grace = 1h; + } +} -start + +logexpect l1 -v v1 { + expect * * FetchError "No thread available for bgfetch" +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + + delay 0.1 + + # At this point the thread reserve is too low to + # allow a low-priority task like a bgfetch. + txreq + rxresp + expect resp.status == 200 +} -start + +logexpect l1 -wait + +vinyl v1 -expect MAIN.bgfetch_no_thread == 1 diff --git a/bin/varnishtest/tests/c00121.vtc b/bin/vinyltest/tests/c00121.vtc similarity index 77% rename from bin/varnishtest/tests/c00121.vtc rename to bin/vinyltest/tests/c00121.vtc index 29812c91fab..52f2792edbe 100644 --- a/bin/varnishtest/tests/c00121.vtc +++ b/bin/vinyltest/tests/c00121.vtc @@ -1,4 +1,4 @@ -varnishtest "Abstract UDS backend: change path, drop poll" +vtest "Abstract UDS backend: change path, drop poll" feature abstract_uds @@ -22,7 +22,7 @@ server s2 -listen "@${vtcid}.s2.sock" { } } -start -varnish v1 -arg "-a @${vtcid}.v1.sock" -vcl { +vinyl v1 -arg "-a @${vtcid}.v1.sock" -vcl { probe default { .window = 8; .initial = 7; @@ -36,7 +36,7 @@ varnish v1 -arg "-a @${vtcid}.v1.sock" -vcl { delay 1 -varnish v1 -vcl { +vinyl v1 -vcl { probe default { .window = 8; .initial = 7; @@ -50,7 +50,7 @@ varnish v1 -vcl { delay 1 -varnish v1 -vcl { +vinyl v1 -vcl { backend s1 { .path = "@${vtcid}.s1.sock"; } @@ -58,8 +58,8 @@ varnish v1 -vcl { delay 1 -varnish v1 -cliok "vcl.list" -varnish v1 -cliok "backend.list -p" +vinyl v1 -cliok "vcl.list" +vinyl v1 -cliok "backend.list -p" server s1 -break { rxreq @@ -81,11 +81,11 @@ client c1 -connect "@${vtcid}.v1.sock" { ######################################## # coverage -varnish v1 -errvcl {Backend path: The empty abstract socket name is not supported} { +vinyl v1 -errvcl {Backend path: The empty abstract socket name is not supported} { backend s1 { .path = "@"; } } shell -err -expect "Error: Got no socket(s) for a0=@ (The empty abstract socket name is not supported)" \ - "varnishd -n ${tmpdir}/v0 -a @ -b None" + "vinyld -n ${tmpdir}/v0 -a @ -b None" diff --git a/bin/varnishtest/tests/c00122.vtc b/bin/vinyltest/tests/c00122.vtc similarity index 83% rename from bin/varnishtest/tests/c00122.vtc rename to bin/vinyltest/tests/c00122.vtc index d624df22452..8dad0c51a01 100644 --- a/bin/varnishtest/tests/c00122.vtc +++ b/bin/vinyltest/tests/c00122.vtc @@ -1,4 +1,4 @@ -varnishtest "test 64 bit vxid rollover" +vtest "test 64 bit vxid rollover" server s1 { rxreq @@ -10,7 +10,7 @@ server s1 { txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { if (bereq.url == "/retry" && bereq.retries == 0) { @@ -26,11 +26,11 @@ varnish v1 -vcl+backend { } -start -process p1 -winsz 100 200 {exec varnishlog -n ${v1_name} -g raw} -start +process p1 -winsz 100 200 {exec vinyllog -n ${v1_name} -g raw} -start process p1 -expect-text 0 0 CLI -varnish v1 -cliok "param.set debug +syncvsl" -varnish v1 -cliok "debug.xid 999999999999998" +vinyl v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "debug.xid 999999999999998" logexpect l1 -v v1 -g request -T 2 { expect 0 1 Begin "req 999999999999998" @@ -57,7 +57,7 @@ client c1 { expect resp.status == 200 } -run -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup logexpect l1 -wait process p1 -expect-text 0 1 "999999999999998 SessClose" @@ -71,8 +71,8 @@ server s1 { txresp } -start -varnish v1 -cliok "param.set debug +syncvsl" -varnish v1 -cliok "debug.xid 999999999999997" +vinyl v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "debug.xid 999999999999997" logexpect l1 -v v1 -g request { expect 0 999999999999998 Begin "req 999999999999997" @@ -98,7 +98,7 @@ client c1 { expect resp.status == 200 } -run -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup logexpect l1 -wait process p1 -expect-text 0 1 "999999999999998 Link c req 2 restart" diff --git a/bin/vinyltest/tests/c00123.vtc b/bin/vinyltest/tests/c00123.vtc new file mode 100644 index 00000000000..d7e51aa78bb --- /dev/null +++ b/bin/vinyltest/tests/c00123.vtc @@ -0,0 +1,79 @@ +vtest "Low req.body streaming pressure on storage" + +server s0 { + rxreq + txresp -status 200 + expect req.bodylen == 100000 +} -dispatch + +vinyl v1 -vcl+backend { + import std; + + sub vcl_recv { + set req.storage = storage.s0; + if (req.http.cache) { + std.cache_req_body(100000b); + } + } +} -start + +# explicit setting to be robust against changes to the default value +vinyl v1 -cliok "param.set fetch_chunksize 16k" + +# chunked req.body streaming uses approximately one fetch_chunksize'd chunk +client c1 { + txreq -req PUT -hdr "Transfer-encoding: chunked" + chunkedlen 100000 + chunkedlen 0 + rxresp + expect resp.status == 200 +} -run + +# in practice a little over fetch_chunksize is allocated +vinyl v1 -expect SM?.s0.c_bytes < 20000 +vinyl v1 -vsl_catchup + +# reset s0 counters +vinyl v1 -stop +vinyl v1 -start +vinyl v1 -expect SM?.s0.c_bytes == 0 + +# content-length req.body streaming also needs one chunk +client c2 { + txreq -req PUT -bodylen 100000 + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect SM?.s0.c_bytes < 20000 +vinyl v1 -vsl_catchup + +# reset s0 counters +vinyl v1 -stop +vinyl v1 -start + +# chunked req.body caching allocates storage for the entire body +client c3 { + txreq -req PUT -hdr "cache: body" -hdr "Transfer-encoding: chunked" + chunkedlen 100000 + chunkedlen 0 + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect SM?.s0.c_bytes > 100000 +vinyl v1 -vsl_catchup + +# reset s0 counters +vinyl v1 -stop +vinyl v1 -start + +# content-length req.body caching allocates storage for the entire body +client c4 { + txreq -req PUT -hdr "cache: body" -bodylen 100000 + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -expect SM?.s0.c_bytes > 100000 +vinyl v1 -vsl_catchup diff --git a/bin/varnishtest/tests/c00124.vtc.disabled b/bin/vinyltest/tests/c00124.vtc.disabled similarity index 76% rename from bin/varnishtest/tests/c00124.vtc.disabled rename to bin/vinyltest/tests/c00124.vtc.disabled index 898d678e3ec..b063e9ea12a 100644 --- a/bin/varnishtest/tests/c00124.vtc.disabled +++ b/bin/vinyltest/tests/c00124.vtc.disabled @@ -1,4 +1,4 @@ -varnishtest "rushed task queued" +vinyltest "rushed task queued" # this does not work reliably because the acceptor task may # be queued during the child startup if not all threads are @@ -33,13 +33,13 @@ server s2 { chunkedlen 0 } -start -varnish v1 -cliok "param.set thread_pools 1" -varnish v1 -cliok "param.set thread_pool_min 5" -varnish v1 -cliok "param.set thread_pool_max 5" -varnish v1 -cliok "param.set debug +syncvsl" -varnish v1 -cliok "param.set debug +waitinglist" +vinyl v1 -cliok "param.set thread_pools 1" +vinyl v1 -cliok "param.set thread_pool_min 5" +vinyl v1 -cliok "param.set thread_pool_max 5" +vinyl v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set debug +waitinglist" -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { @@ -59,7 +59,7 @@ varnish v1 -vcl+backend { } -start # wait for all threads to be started -varnish v1 -expect threads == 5 +vinyl v1 -expect threads == 5 # 2 threads client c1 { @@ -86,8 +86,8 @@ logexpect l2 -v v1 -g raw { expect * 1007 Debug "off waiting list" } -start -varnish v1 -expect sess_dropped == 0 -varnish v1 -expect sess_queued == 0 +vinyl v1 -expect sess_dropped == 0 +vinyl v1 -expect sess_queued == 0 # At this point, we are thread-starved and c3 below will steal the # acceptor thread that will queue itself. @@ -99,9 +99,9 @@ client c3 { logexpect l1 -wait -varnish v1 -expect sess_dropped == 0 -varnish v1 -expect sess_queued == 1 -varnish v1 -expect busy_sleep == 1 +vinyl v1 -expect sess_dropped == 0 +vinyl v1 -expect sess_queued == 1 +vinyl v1 -expect busy_sleep == 1 # Wake up c2, This will in turn trigger a waitinglist rush and wake up c3. barrier b2 sync @@ -118,5 +118,5 @@ client c1 -wait client c2 -wait client c3 -wait -varnish v1 -expect sess_dropped == 0 -varnish v1 -expect sess_queued == 2 +vinyl v1 -expect sess_dropped == 0 +vinyl v1 -expect sess_queued == 2 diff --git a/bin/vinyltest/tests/c00125.vtc b/bin/vinyltest/tests/c00125.vtc new file mode 100644 index 00000000000..4ce77d073fe --- /dev/null +++ b/bin/vinyltest/tests/c00125.vtc @@ -0,0 +1,156 @@ +vtest "successful expired waiting list hit" + +barrier b1 cond 2 +barrier b2 cond 2 +barrier b3 cond 2 +barrier b4 cond 2 + + +server s1 { + rxreq + expect req.http.user-agent == c1 + expect req.http.bgfetch == false + barrier b1 sync + barrier b2 sync + txresp -hdr "Cache-Control: max-age=60" -hdr "Age: 120" + + rxreq + expect req.http.user-agent == c3 + expect req.http.bgfetch == true + txresp + + # The no-cache case only works with a complicit VCL, for now. + rxreq + expect req.http.user-agent == c4 + expect req.http.bgfetch == false + barrier b3 sync + barrier b4 sync + txresp -hdr "Cache-Control: no-cache" + + rxreq + expect req.http.user-agent == c6 + expect req.http.bgfetch == false + txresp -hdr "Cache-Control: no-cache" +} -start + +vinyl v1 -cliok "param.set default_grace 1h" +vinyl v1 -cliok "param.set thread_pools 1" +vinyl v1 -cliok "param.set debug +syncvsl,+waitinglist" +vinyl v1 -vcl+backend { + sub vcl_backend_fetch { + set bereq.http.bgfetch = bereq.is_bgfetch; + } + sub vcl_beresp_stale { + # We just validated a stale object, do not mark it as + # uncacheable. The object remains available for grace + # hits and background fetches. + return; + } + sub vcl_beresp_control { + if (beresp.http.cache-control == "no-cache") { + # Keep beresp.uncacheable clear. + return; + } + } + sub vcl_deliver { + set resp.http.obj-hits = obj.hits; + set resp.http.obj-ttl = obj.ttl; + } +} -start + +client c1 { + txreq -url "/stale-hit" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == 1001 + expect resp.http.obj-hits == 0 + expect resp.http.obj-ttl < 0 +} -start + +barrier b1 sync + +client c2 { + txreq -url "/stale-hit" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1004 1002" + expect resp.http.obj-hits == 1 + expect resp.http.obj-ttl < 0 +} -start + +vinyl v1 -expect busy_sleep == 1 +barrier b2 sync + +client c1 -wait +client c2 -wait + +vinyl v1 -vsl_catchup + +vinyl v1 -expect cache_miss == 1 +vinyl v1 -expect cache_hit == 1 +vinyl v1 -expect cache_hit_grace == 0 +vinyl v1 -expect s_bgfetch == 0 + +client c3 { + txreq -url "/stale-hit" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1006 1002" + expect resp.http.obj-hits == 2 + expect resp.http.obj-ttl < 0 +} -run + +vinyl v1 -vsl_catchup + +vinyl v1 -expect cache_miss == 1 +vinyl v1 -expect cache_hit == 2 +vinyl v1 -expect cache_hit_grace == 1 +vinyl v1 -expect s_bgfetch == 1 + +# The only way for a plain no-cache to be hit is to have a non-zero keep. +vinyl v1 -cliok "param.set default_ttl 0" +vinyl v1 -cliok "param.set default_grace 0" +vinyl v1 -cliok "param.set default_keep 1h" + +client c4 { + txreq -url "/no-cache-hit" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == 1009 + expect resp.http.obj-hits == 0 + expect resp.http.obj-ttl <= 0 +} -start + +barrier b3 sync + +client c5 { + txreq -url "/no-cache-hit" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == "1012 1010" + expect resp.http.obj-hits == 1 + expect resp.http.obj-ttl <= 0 +} -start + +vinyl v1 -expect busy_sleep == 2 +barrier b4 sync + +client c4 -wait +client c5 -wait + +vinyl v1 -vsl_catchup + +vinyl v1 -expect cache_miss == 2 +vinyl v1 -expect cache_hit == 3 +vinyl v1 -expect cache_hit_grace == 1 +vinyl v1 -expect s_bgfetch == 1 + +# No hit when not on the waiting list +client c6 { + txreq -url "/no-cache-hit" + rxresp + expect resp.status == 200 + expect resp.http.X-Vinyl == 1014 + expect resp.http.obj-hits == 0 + expect resp.http.obj-ttl <= 0 +} -run diff --git a/bin/vinyltest/tests/c00126.vtc b/bin/vinyltest/tests/c00126.vtc new file mode 100644 index 00000000000..08dfee74eb8 --- /dev/null +++ b/bin/vinyltest/tests/c00126.vtc @@ -0,0 +1,42 @@ +vtest "Make sure EXP_Removed is logged correctly" + +server s1 -repeat 4 { + rxreq + txresp -bodylen 500000 +} -start + +vinyl v1 -arg "-ss1=default,1m" -vcl+backend { } -start +vinyl v1 -cliok "param.set vsl_mask +ExpKill" + +logexpect l1 -v v1 -g raw { + expect * 0 ExpKill "EXP_Removed x=1002 t=.* h=1" + expect * 0 ExpKill "EXP_Removed x=1005 t=.* h=0" +} -start + +client c1 { + loop 2 { + txreq -url "/1" + rxresp + expect resp.status == 200 + } + + txreq -url "/2" + rxresp + expect resp.status == 200 + + txreq -url "/3" + rxresp + expect resp.status == 200 + + txreq -url "/4" + rxresp + expect resp.status == 200 +} -run + +# NOTE: Nuked objects are mailed twice +vinyl v1 -expect n_lru_nuked == 2 +vinyl v1 -expect MAIN.n_object == 2 +vinyl v1 -expect MAIN.exp_mailed == 6 +vinyl v1 -expect MAIN.exp_received == 6 + +logexpect l1 -wait diff --git a/bin/varnishtest/tests/c00128.vtc b/bin/vinyltest/tests/c00128.vtc similarity index 78% rename from bin/varnishtest/tests/c00128.vtc rename to bin/vinyltest/tests/c00128.vtc index e39b1a9cfc9..e8d809619a3 100644 --- a/bin/varnishtest/tests/c00128.vtc +++ b/bin/vinyltest/tests/c00128.vtc @@ -1,11 +1,11 @@ -varnishtest "Withdraw graced hit's busy objcore" +vtest "Withdraw graced hit's busy objcore" server s1 { rxreq txresp } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.ttl = 1ms; } diff --git a/bin/varnishtest/tests/c00129.vtc b/bin/vinyltest/tests/c00129.vtc similarity index 93% rename from bin/varnishtest/tests/c00129.vtc rename to bin/vinyltest/tests/c00129.vtc index 073e8a46913..c6658d6a37a 100644 --- a/bin/varnishtest/tests/c00129.vtc +++ b/bin/vinyltest/tests/c00129.vtc @@ -1,4 +1,4 @@ -varnishtest "304 on invalidated stale object" +vtest "304 on invalidated stale object" barrier b1 cond 2 barrier b2 cond 2 @@ -21,7 +21,7 @@ server s1 { txresp -hdr {ETag: "foo"} -body valid } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { if (req.method == "PURGE") { return (purge); diff --git a/bin/varnishtest/tests/c00130.vtc b/bin/vinyltest/tests/c00130.vtc similarity index 90% rename from bin/varnishtest/tests/c00130.vtc rename to bin/vinyltest/tests/c00130.vtc index c75f2462121..c73604305f4 100644 --- a/bin/varnishtest/tests/c00130.vtc +++ b/bin/vinyltest/tests/c00130.vtc @@ -1,4 +1,4 @@ -varnishtest "Demote condfetch to fetch on invalidated stale object" +vtest "Demote condfetch to fetch on invalidated stale object" barrier b1 sock 2 barrier b2 sock 2 @@ -12,7 +12,7 @@ server s1 { txresp -hdr {ETag: "foo"} -body valid } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { if (req.method == "PURGE") { diff --git a/bin/varnishtest/tests/c00131.vtc b/bin/vinyltest/tests/c00131.vtc similarity index 83% rename from bin/varnishtest/tests/c00131.vtc rename to bin/vinyltest/tests/c00131.vtc index c9ce19bd588..6a1412990c4 100644 --- a/bin/varnishtest/tests/c00131.vtc +++ b/bin/vinyltest/tests/c00131.vtc @@ -1,4 +1,4 @@ -varnishtest "waiting list rush from vcl_backend_error" +vtest "waiting list rush from vcl_backend_error" barrier b1 sock 2 barrier b2 sock 2 @@ -8,8 +8,8 @@ server s1 { send garbage } -start -varnish v1 -cliok "param.set debug +syncvsl,+waitinglist" -varnish v1 -vcl+backend { +vinyl v1 -cliok "param.set debug +syncvsl,+waitinglist" +vinyl v1 -vcl+backend { import vtc; sub vcl_backend_fetch { vtc.barrier_sync("${b1_sock}"); @@ -68,4 +68,4 @@ client c3 -wait client c4 -wait client c5 -wait -varnish v1 -expect n_expired == 1 +vinyl v1 -expect n_expired == 1 diff --git a/bin/varnishtest/tests/c00132.vtc b/bin/vinyltest/tests/c00132.vtc similarity index 87% rename from bin/varnishtest/tests/c00132.vtc rename to bin/vinyltest/tests/c00132.vtc index 8ad1492d79f..1331b59d7e4 100644 --- a/bin/varnishtest/tests/c00132.vtc +++ b/bin/vinyltest/tests/c00132.vtc @@ -1,4 +1,4 @@ -varnishtest "304 revalidations with purge.soft()" +vtest "304 revalidations with purge.soft()" server s1 { rxreq @@ -9,7 +9,7 @@ server s1 { txresp -status 304 -hdr "etag: foo" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import purge; sub vcl_hit { diff --git a/bin/varnishtest/tests/c00133.vtc b/bin/vinyltest/tests/c00133.vtc similarity index 84% rename from bin/varnishtest/tests/c00133.vtc rename to bin/vinyltest/tests/c00133.vtc index 9e94827b658..bedc66977d3 100644 --- a/bin/varnishtest/tests/c00133.vtc +++ b/bin/vinyltest/tests/c00133.vtc @@ -1,4 +1,4 @@ -varnishtest "test ban + vary behavior" +vtest "test ban + vary behavior" server s0 { rxreq @@ -11,7 +11,7 @@ server s0 { txresp -hdr "vary: version" -body "New variant B" } -start -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start client c1 { txreq -hdr "version: a" @@ -25,7 +25,7 @@ client c2 { expect resp.body == "Variant B" } -run -varnish v1 -cliok "ban req.http.version == a" +vinyl v1 -cliok "ban req.http.version == a" # Should this remove a single variant from cache client c3 { diff --git a/bin/vinyltest/tests/c00134.vtc b/bin/vinyltest/tests/c00134.vtc new file mode 100644 index 00000000000..618a4ebc31d --- /dev/null +++ b/bin/vinyltest/tests/c00134.vtc @@ -0,0 +1,86 @@ +vtest "Optimized HSH_Lookup - ban is checked after Vary is matched" + +server s1 { + rxreq + expect req.url == /foo + expect req.http.foobar == "1" + txresp -hdr "Vary: Foobar" -body "1111" + + rxreq + expect req.url == /foo + expect req.http.foobar == "2" + txresp -hdr "Vary: Foobar" -body "2222" + + rxreq + expect req.url == /foo + expect req.http.foobar == "3" + txresp -hdr "Vary: Foobar" -body "3333" + + rxreq + expect req.url == /foo + expect req.http.foobar == "1" + txresp -hdr "Vary: Foobar" -body "1111" + + rxreq + expect req.url == /foo + expect req.http.foobar == "1" + txresp -hdr "Vary: Foobar" -body "1111" + +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.http.url = bereq.url; + } +} -start + + +client c1 { + txreq -url /foo -hdr "Foobar: 1" + rxresp + expect resp.body == "1111" +} -run + +client c1 { + txreq -url /foo -hdr "Foobar: 2" + rxresp + expect resp.body == "2222" +} -run + +client c1 { + txreq -url /foo -hdr "Foobar: 3" + rxresp + expect resp.body == "3333" + +} -run + +vinyl v1 -expect n_object == 3 +vinyl v1 -expect cache_hit == 0 +vinyl v1 -expect cache_miss == 3 + +client c1 { + txreq -url /foo -hdr "Foobar: 1" + rxresp +} -run + +vinyl v1 -expect cache_hit == 1 +vinyl v1 -expect cache_miss == 3 + +vinyl v1 -cliok "ban obj.http.url == /foo" +vinyl v1 -cliok "ban obj.http.url == /bar" +vinyl v1 -cliok "ban obj.http.url == /baz" + +client c1 { + txreq -url /foo -hdr "Foobar: 1" + rxresp +} -run + +vinyl v1 -expect bans_tested == 1 +vinyl v1 -expect bans_tests_tested == 3 +vinyl v1 -expect bans_obj_killed == 1 +vinyl v1 -expect n_object == 3 + + +vinyl v1 -expect cache_hit == 1 +vinyl v1 -expect cache_miss == 4 +vinyl v1 -expect client_req == 5 diff --git a/bin/varnishtest/tests/c00135.vtc b/bin/vinyltest/tests/c00135.vtc similarity index 75% rename from bin/varnishtest/tests/c00135.vtc rename to bin/vinyltest/tests/c00135.vtc index 76d877ec3e9..91c258ffa32 100644 --- a/bin/varnishtest/tests/c00135.vtc +++ b/bin/vinyltest/tests/c00135.vtc @@ -1,11 +1,11 @@ -varnishtest "Range 0-0 (1B) on empty response" +vtest "Range 0-0 (1B) on empty response" server s1 { rxreq txresp } -start -varnish v1 -vcl+backend {} -start +vinyl v1 -vcl+backend {} -start client c1 { txreq diff --git a/bin/vinyltest/tests/c00136.vtc b/bin/vinyltest/tests/c00136.vtc new file mode 100644 index 00000000000..fd4317b9ce2 --- /dev/null +++ b/bin/vinyltest/tests/c00136.vtc @@ -0,0 +1,34 @@ +vtest "Rearm timeout_idle upon HTTP/1 keep-alive" + +barrier b1 cond 2 +barrier b2 cond 2 + +vinyl v1 -cliok "param.set timeout_idle 1h" +vinyl v1 -vcl { + backend be none; + sub vcl_recv { + set sess.timeout_idle = param.timeout_idle; + return (synth(200)); + } +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + + barrier b1 sync + barrier b2 sync + + txreq + rxresp + expect resp.status == 200 + + expect_close +} -start + +barrier b1 sync +vinyl v1 -cliok "param.set timeout_idle 1ms" +barrier b2 sync + +client c1 -wait diff --git a/bin/vinyltest/tests/c00137.vtc b/bin/vinyltest/tests/c00137.vtc new file mode 100644 index 00000000000..e7590cd7d42 --- /dev/null +++ b/bin/vinyltest/tests/c00137.vtc @@ -0,0 +1,35 @@ +vtest "Tweak uncacheable_ttl for built-in VCL" + +server s1 { + loop 3 { + rxreq + expect req.http.is-hitmiss == false + txresp + } + + rxreq + expect req.http.is-hitmiss == true + txresp +} -start + +vinyl v1 -cliok "param.set default_ttl 0s" +vinyl v1 -cliok "param.set default_grace 0s" +vinyl v1 -cliok "param.set default_keep 0s" +vinyl v1 -cliok "param.set uncacheable_ttl 1ms" +vinyl v1 -vcl+backend { + sub vcl_miss { + set req.http.is-hitmiss = req.is_hitmiss; + } +} -start + +client c1 -repeat 2 { + txreq + rxresp + expect resp.status == 200 + delay 0.5 +} -run + +vinyl v1 -cliok "param.set uncacheable_ttl 1m" + +client c1 -run +server s1 -wait diff --git a/bin/vinyltest/tests/c00138.vtc b/bin/vinyltest/tests/c00138.vtc new file mode 100644 index 00000000000..52da71a671a --- /dev/null +++ b/bin/vinyltest/tests/c00138.vtc @@ -0,0 +1,64 @@ +vtest "subsequent rush on rush miss" + +barrier b1 cond 2 +barrier b2 cond 2 +barrier b3 cond 2 +barrier b4 cond 2 + +server s1 { + rxreq + expect req.http.user-agent == c1 + barrier b1 sync + barrier b2 sync + txresp -hdr "Vary: accept" + + rxreq + expect req.http.user-agent == c2 + txresp -hdr "Vary: accept" +} -start + +vinyl v1 -cliok "param.set thread_pools 1" +vinyl v1 -cliok "param.set rush_exponent 1" +vinyl v1 -cliok "param.set debug +syncvsl,+waitinglist" +vinyl v1 -vcl+backend "" -start + +client c1 { + txreq + rxresp + expect resp.http.X-Vinyl == 1001 +} -start + +barrier b1 sync + +logexpect l1 -v v1 -q Debug -g raw { + expect * * Debug "on waiting list" +} -start + +client c2 { + txreq -hdr "accept: nothing" + rxresp + expect resp.http.X-Vinyl == 1004 +} -start + +logexpect l1 -wait -start + +client c3 { + txreq + rxresp + expect resp.http.X-Vinyl == "1006 1002" +} -start + +logexpect l1 -wait + +barrier b2 sync + +client c1 -wait +client c2 -wait +client c3 -wait + +vinyl v1 -expect cache_miss == 2 +vinyl v1 -expect cache_hit == 1 +vinyl v1 -expect cache_hit_grace == 0 +vinyl v1 -expect s_bgfetch == 0 +vinyl v1 -expect busy_sleep == 2 +vinyl v1 -expect busy_wakeup == 2 diff --git a/bin/varnishtest/tests/common.pem b/bin/vinyltest/tests/common.pem similarity index 100% rename from bin/varnishtest/tests/common.pem rename to bin/vinyltest/tests/common.pem diff --git a/bin/varnishtest/tests/d00007.vtc b/bin/vinyltest/tests/d00007.vtc similarity index 88% rename from bin/varnishtest/tests/d00007.vtc rename to bin/vinyltest/tests/d00007.vtc index 8c6794f1a5e..6a0549afb1f 100644 --- a/bin/varnishtest/tests/d00007.vtc +++ b/bin/vinyltest/tests/d00007.vtc @@ -1,12 +1,12 @@ -varnishtest "Test dynamic backends" +vtest "Test dynamic backends" # the use case for via-proxy is to have a(n ha)proxy make a(n ssl) # connection on our behalf. For the purpose of testing, we use another -# varnish in place - but we are behaving realistically in that we do +# vinyl in place - but we are behaving realistically in that we do # not use any prior information for the actual backend connection - # just the information from the proxy protocol -varnish v2 -proto PROXY -vcl { +vinyl v2 -proto PROXY -vcl { import debug; import std; import proxy; @@ -66,11 +66,11 @@ server s1 { # # we vtc.sleep to make sure that the health check is done and server # s1 has accepted again. We would rather want to use barriers, but -# there is a (yet not understood) bug in varnishtest which prevents -# the bX_sock macros from being available in the second varnish +# there is a (yet not understood) bug in vinyltest which prevents +# the bX_sock macros from being available in the second vinyl # instance -varnish v1 -vcl { +vinyl v1 -vcl { import debug; import vtc; @@ -117,7 +117,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 3 +vinyl v1 -expect MAIN.n_backend == 3 client c1 { txreq -url /1 diff --git a/bin/varnishtest/tests/d00008.vtc b/bin/vinyltest/tests/d00008.vtc similarity index 79% rename from bin/varnishtest/tests/d00008.vtc rename to bin/vinyltest/tests/d00008.vtc index 8fd71b936b2..d3fd5d862be 100644 --- a/bin/varnishtest/tests/d00008.vtc +++ b/bin/vinyltest/tests/d00008.vtc @@ -1,4 +1,4 @@ -varnishtest "Test dynamic backends hot swap" +vtest "Test dynamic backends hot swap" server s1 { rxreq @@ -12,7 +12,7 @@ server s2 { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import debug; backend dummy { .host = "${bad_backend}"; } @@ -30,7 +30,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -expect MAIN.n_backend == 2 client c1 { txreq -url "/foo" @@ -48,5 +48,5 @@ client c1 { delay 1 -varnish v1 -cli backend.list -# varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -cli backend.list +# vinyl v1 -expect MAIN.n_backend == 2 diff --git a/bin/varnishtest/tests/d00009.vtc b/bin/vinyltest/tests/d00009.vtc similarity index 81% rename from bin/varnishtest/tests/d00009.vtc rename to bin/vinyltest/tests/d00009.vtc index 1318e7a4d25..6577857db3b 100644 --- a/bin/varnishtest/tests/d00009.vtc +++ b/bin/vinyltest/tests/d00009.vtc @@ -1,4 +1,4 @@ -varnishtest "Test dynamic backends hot swap while being used" +vtest "Test dynamic backends hot swap while being used" barrier b1 cond 2 barrier b2 cond 2 @@ -18,7 +18,7 @@ server s2 { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import debug; backend dummy { .host = "${bad_backend}"; } @@ -36,7 +36,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -expect MAIN.n_backend == 2 client c1 { txreq -url "/foo" @@ -57,5 +57,5 @@ client c2 { client c1 -wait -varnish v1 -cli backend.list -# varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -cli backend.list +# vinyl v1 -expect MAIN.n_backend == 2 diff --git a/bin/varnishtest/tests/d00010.vtc b/bin/vinyltest/tests/d00010.vtc similarity index 81% rename from bin/varnishtest/tests/d00010.vtc rename to bin/vinyltest/tests/d00010.vtc index 6963e59fb80..5d0bf4a6329 100644 --- a/bin/varnishtest/tests/d00010.vtc +++ b/bin/vinyltest/tests/d00010.vtc @@ -1,4 +1,4 @@ -varnishtest "Test dynamic backends hot swap during a pipe" +vtest "Test dynamic backends hot swap during a pipe" barrier b1 cond 2 barrier b2 cond 2 @@ -18,7 +18,7 @@ server s2 { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import debug; backend dummy { .host = "${bad_backend}"; } @@ -37,7 +37,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -expect MAIN.n_backend == 2 client c1 { txreq -url "/foo" @@ -58,5 +58,5 @@ client c2 { client c1 -wait -varnish v1 -cli backend.list -#varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -cli backend.list +#vinyl v1 -expect MAIN.n_backend == 2 diff --git a/bin/varnishtest/tests/d00011.vtc b/bin/vinyltest/tests/d00011.vtc similarity index 81% rename from bin/varnishtest/tests/d00011.vtc rename to bin/vinyltest/tests/d00011.vtc index 14e7369b3a0..e317aa0eed6 100644 --- a/bin/varnishtest/tests/d00011.vtc +++ b/bin/vinyltest/tests/d00011.vtc @@ -1,4 +1,4 @@ -varnishtest "Test a dynamic backend hot swap after it was picked by a bereq" +vtest "Test a dynamic backend hot swap after it was picked by a bereq" barrier b1 cond 2 @@ -10,7 +10,7 @@ server s2 { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import std; import debug; import vtc; @@ -40,7 +40,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -expect MAIN.n_backend == 2 client c1 { txreq @@ -61,5 +61,5 @@ client c1 -start client c2 -run client c1 -wait -varnish v1 -cli backend.list -#varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -cli backend.list +#vinyl v1 -expect MAIN.n_backend == 2 diff --git a/bin/vinyltest/tests/d00012.vtc b/bin/vinyltest/tests/d00012.vtc new file mode 100644 index 00000000000..874676476ce --- /dev/null +++ b/bin/vinyltest/tests/d00012.vtc @@ -0,0 +1,85 @@ +vtest "Test a dynamic backend discard during a request" + +# vcl.discard testing inspired by v00006.vtc from commit e1f7207 + +barrier b1 cond 2 +barrier b2 cond 2 + +server s1 { + rxreq + expect req.url == "/foo" + barrier b1 sync + barrier b2 sync + txresp +} -start + +vinyl v1 -arg "-p thread_pools=1" -vcl { + import debug; + + backend dummy { .host = "${bad_backend}"; } + + sub vcl_init { + new s1 = debug.dyn("${s1_addr}", "${s1_port}"); + } + + sub vcl_recv { + set req.backend_hint = s1.backend(); + } +} -start + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 +} -start + +vinyl v1 -expect MAIN.n_backend == 2 +# expected: vcl1.dummy, vcl1.s1 + +server s2 { + rxreq + expect req.url == "/bar" + txresp +} -start + +barrier b1 sync + +vinyl v1 -vcl { + import debug; + + backend dummy { .host = "${bad_backend}"; } + + sub vcl_init { + new s2 = debug.dyn("${s2_addr}", "${s2_port}"); + } + + sub vcl_recv { + set req.backend_hint = s2.backend(); + } +} + +vinyl v1 -cli "vcl.discard vcl1" +barrier b2 sync + +client c1 -wait +delay 2 + +vinyl v1 -expect MAIN.n_backend == 4 +# expected: vcl1.dummy, vcl1.s1, vcl2.dummy, vcl2.s2 + +vinyl v1 -expect n_vcl_avail == 1 +vinyl v1 -expect n_vcl_discard == 1 + +client c1 { + txreq -url "/bar" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -cli "vcl.list" +#vinyl v1 -expect MAIN.n_backend == 2 +# expected: vcl2.dummy, vcl2.s2 +vinyl v1 -expect n_vcl_avail == 1 + +# XXX This test fails on FreeBSD +# XXX vinyl v1 -expect n_vcl_discard == 0 diff --git a/bin/varnishtest/tests/d00013.vtc b/bin/vinyltest/tests/d00013.vtc similarity index 81% rename from bin/varnishtest/tests/d00013.vtc rename to bin/vinyltest/tests/d00013.vtc index 1a5a610548c..563b8cf07f3 100644 --- a/bin/varnishtest/tests/d00013.vtc +++ b/bin/vinyltest/tests/d00013.vtc @@ -1,4 +1,4 @@ -varnishtest "Test a dynamic backend hot swap after it was hinted to a req" +vtest "Test a dynamic backend hot swap after it was hinted to a req" barrier b1 cond 2 @@ -10,7 +10,7 @@ server s2 { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import std; import debug; import vtc; @@ -37,7 +37,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -expect MAIN.n_backend == 2 client c1 { txreq @@ -58,5 +58,5 @@ client c1 -start client c2 -run client c1 -wait -varnish v1 -cli backend.list -#varnish v1 -expect MAIN.n_backend == 2 +vinyl v1 -cli backend.list +#vinyl v1 -expect MAIN.n_backend == 2 diff --git a/bin/varnishtest/tests/d00014.vtc b/bin/vinyltest/tests/d00014.vtc similarity index 75% rename from bin/varnishtest/tests/d00014.vtc rename to bin/vinyltest/tests/d00014.vtc index 437cb954aba..18810d8d895 100644 --- a/bin/varnishtest/tests/d00014.vtc +++ b/bin/vinyltest/tests/d00014.vtc @@ -1,8 +1,8 @@ -varnishtest "Backend as a boolean expression" +vtest "Backend as a boolean expression" server s1 -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { import vtc; sub vcl_recv { diff --git a/bin/vinyltest/tests/d00032.vtc b/bin/vinyltest/tests/d00032.vtc new file mode 100644 index 00000000000..fd29a5abf30 --- /dev/null +++ b/bin/vinyltest/tests/d00032.vtc @@ -0,0 +1,70 @@ +vtest "Test dynamic backends listening at Unix domain sockets" + +server s1 -listen "${tmpdir}/s1.sock" { + rxreq + txresp +} -start + +vinyl v1 -vcl { + import debug; + + backend dummy None; + + sub vcl_init { + new s1 = debug.dyn_uds("${s1_sock}"); + } + + sub vcl_recv { + set req.backend_hint = s1.backend(); + } +} -start + +vinyl v1 -expect MAIN.n_backend == 1 + +client c1 { + txreq + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -errvcl {path must be an absolute path} { + import debug; + + backend dummy None; + + sub vcl_init { + new s1 = debug.dyn_uds(""); + } +} + +vinyl v1 -errvcl {path must be an absolute path} { + import debug; + + backend dummy None; + + sub vcl_init { + new s1 = debug.dyn_uds("s1.sock"); + } +} + +shell { rm -f ${tmpdir}/foo } + +vinyl v1 -errvcl {Cannot stat path} { + import debug; + + backend dummy None; + + sub vcl_init { + new s1 = debug.dyn_uds("${tmpdir}/foo"); + } +} + +vinyl v1 -errvcl {is not a socket} { + import debug; + + backend dummy None; + + sub vcl_init { + new s1 = debug.dyn_uds("${tmpdir}"); + } +} diff --git a/bin/varnishtest/tests/d00033.vtc b/bin/vinyltest/tests/d00033.vtc similarity index 85% rename from bin/varnishtest/tests/d00033.vtc rename to bin/vinyltest/tests/d00033.vtc index 877005ea831..e99cfcec80d 100644 --- a/bin/varnishtest/tests/d00033.vtc +++ b/bin/vinyltest/tests/d00033.vtc @@ -1,4 +1,4 @@ -varnishtest "Test dynamic UDS backends hot swap" +vtest "Test dynamic UDS backends hot swap" server s1 -listen "${tmpdir}/s1.sock" { rxreq @@ -12,7 +12,7 @@ server s2 -listen "${tmpdir}/s2.sock" { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import debug; backend dummy None; @@ -30,7 +30,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 1 +vinyl v1 -expect MAIN.n_backend == 1 client c1 { txreq -url "/foo" diff --git a/bin/varnishtest/tests/d00034.vtc b/bin/vinyltest/tests/d00034.vtc similarity index 86% rename from bin/varnishtest/tests/d00034.vtc rename to bin/vinyltest/tests/d00034.vtc index 7e99eca116f..453bebcbb2e 100644 --- a/bin/varnishtest/tests/d00034.vtc +++ b/bin/vinyltest/tests/d00034.vtc @@ -1,4 +1,4 @@ -varnishtest "Test dynamic UDS backends hot swap while being used" +vtest "Test dynamic UDS backends hot swap while being used" barrier b1 cond 2 barrier b2 cond 2 @@ -18,7 +18,7 @@ server s2 -listen "${tmpdir}/s2.sock" { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import debug; backend dummy None; @@ -36,7 +36,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 1 +vinyl v1 -expect MAIN.n_backend == 1 client c1 { txreq -url "/foo" diff --git a/bin/varnishtest/tests/d00035.vtc b/bin/vinyltest/tests/d00035.vtc similarity index 87% rename from bin/varnishtest/tests/d00035.vtc rename to bin/vinyltest/tests/d00035.vtc index 338dd5888b1..efa7e9b07d5 100644 --- a/bin/varnishtest/tests/d00035.vtc +++ b/bin/vinyltest/tests/d00035.vtc @@ -1,4 +1,4 @@ -varnishtest "Test dynamic UDS backends hot swap during a pipe" +vtest "Test dynamic UDS backends hot swap during a pipe" barrier b1 cond 2 barrier b2 cond 2 @@ -18,7 +18,7 @@ server s2 -listen "${tmpdir}/s2.sock" { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import debug; backend dummy None; @@ -37,7 +37,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 1 +vinyl v1 -expect MAIN.n_backend == 1 client c1 { txreq -url "/foo" diff --git a/bin/varnishtest/tests/d00036.vtc b/bin/vinyltest/tests/d00036.vtc similarity index 86% rename from bin/varnishtest/tests/d00036.vtc rename to bin/vinyltest/tests/d00036.vtc index d21646bf8ed..a5e6569485b 100644 --- a/bin/varnishtest/tests/d00036.vtc +++ b/bin/vinyltest/tests/d00036.vtc @@ -1,4 +1,4 @@ -varnishtest "Test dynamic UDS backend hot swap after it was picked by a bereq" +vtest "Test dynamic UDS backend hot swap after it was picked by a bereq" barrier b1 sock 2 @@ -10,7 +10,7 @@ server s2 -listen "${tmpdir}/s2.sock" { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import std; import debug; import vtc; @@ -40,7 +40,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 1 +vinyl v1 -expect MAIN.n_backend == 1 client c1 { txreq diff --git a/bin/vinyltest/tests/d00037.vtc b/bin/vinyltest/tests/d00037.vtc new file mode 100644 index 00000000000..8e350ab8c88 --- /dev/null +++ b/bin/vinyltest/tests/d00037.vtc @@ -0,0 +1,76 @@ +vtest "Test a dynamic UDS backend discard during a request" + +barrier b1 cond 2 +barrier b2 cond 2 + +server s1 -listen "${tmpdir}/s1.sock" { + rxreq + expect req.url == "/foo" + barrier b1 sync + barrier b2 sync + txresp +} -start + +vinyl v1 -arg "-p thread_pools=1" -vcl { + import debug; + + backend dummy None; + + sub vcl_init { + new s1 = debug.dyn_uds("${s1_sock}"); + } + + sub vcl_recv { + set req.backend_hint = s1.backend(); + } +} -start + +client c1 { + txreq -url "/foo" + rxresp + expect resp.status == 200 +} -start + +vinyl v1 -expect MAIN.n_backend == 1 + +server s2 -listen "${tmpdir}/s2.sock" { + rxreq + expect req.url == "/bar" + txresp +} -start + +barrier b1 sync + +vinyl v1 -vcl { + import debug; + + backend dummy None; + + sub vcl_init { + new s2 = debug.dyn_uds("${s2_sock}"); + } + + sub vcl_recv { + set req.backend_hint = s2.backend(); + } +} + +vinyl v1 -cli "vcl.discard vcl1" +barrier b2 sync + +client c1 -wait +delay 2 + +vinyl v1 -expect MAIN.n_backend == 2 + +vinyl v1 -expect n_vcl_avail == 1 +vinyl v1 -expect n_vcl_discard == 1 + +client c1 { + txreq -url "/bar" + rxresp + expect resp.status == 200 +} -run + +vinyl v1 -cli "vcl.list" +vinyl v1 -expect n_vcl_avail == 1 diff --git a/bin/varnishtest/tests/d00038.vtc b/bin/vinyltest/tests/d00038.vtc similarity index 83% rename from bin/varnishtest/tests/d00038.vtc rename to bin/vinyltest/tests/d00038.vtc index c3ce7cbb908..840a3d0cc56 100644 --- a/bin/varnishtest/tests/d00038.vtc +++ b/bin/vinyltest/tests/d00038.vtc @@ -1,4 +1,4 @@ -varnishtest "Test a dynamic UDS backend hot swap after it was hinted to a req" +vtest "Test a dynamic UDS backend hot swap after it was hinted to a req" barrier b1 cond 2 @@ -10,7 +10,7 @@ server s2 -listen "${tmpdir}/s2.sock" { txresp } -start -varnish v1 -vcl { +vinyl v1 -vcl { import std; import debug; import vtc; @@ -37,7 +37,7 @@ varnish v1 -vcl { } } -start -varnish v1 -expect MAIN.n_backend == 1 +vinyl v1 -expect MAIN.n_backend == 1 client c1 { txreq @@ -58,4 +58,4 @@ client c1 -start client c2 -run client c1 -wait -varnish v1 -cli backend.list +vinyl v1 -cli backend.list diff --git a/bin/varnishtest/tests/d00040.vtc b/bin/vinyltest/tests/d00040.vtc similarity index 86% rename from bin/varnishtest/tests/d00040.vtc rename to bin/vinyltest/tests/d00040.vtc index 2f16e9ed672..6b3392f7555 100644 --- a/bin/varnishtest/tests/d00040.vtc +++ b/bin/vinyltest/tests/d00040.vtc @@ -1,6 +1,6 @@ -varnishtest "Test failing in director callbacks" +vtest "Test failing in director callbacks" -varnish v1 -vcl { +vinyl v1 -vcl { import debug; import std; diff --git a/bin/vinyltest/tests/e00000.vtc b/bin/vinyltest/tests/e00000.vtc new file mode 100644 index 00000000000..9253825bb38 --- /dev/null +++ b/bin/vinyltest/tests/e00000.vtc @@ -0,0 +1,35 @@ +vtest "ESI test with no ESI content" + + +server s1 { + rxreq + txresp -body { + -This is a test: Hello world + } +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.do_esi = true; + } + sub vcl_deliver { + set resp.http.can_esi = obj.can_esi; + } +} -start + +logexpect l1 -v v1 -g raw { + expect * * ESI_xmlerror esi_disable_xml_check +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + expect resp.bodylen == 33 + expect resp.http.can_esi == "false" +} + +client c1 -run +logexpect l1 -wait +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 33 diff --git a/bin/varnishtest/tests/e00001.vtc b/bin/vinyltest/tests/e00001.vtc similarity index 84% rename from bin/varnishtest/tests/e00001.vtc rename to bin/vinyltest/tests/e00001.vtc index 9e4cf52860a..aadbb0ef20b 100644 --- a/bin/varnishtest/tests/e00001.vtc +++ b/bin/vinyltest/tests/e00001.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI:remove" +vtest "ESI:remove" server s1 { @@ -13,7 +13,7 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_esi = true; } @@ -37,5 +37,5 @@ client c1 { client c1 -run logexpect l1 -wait -varnish v1 -expect esi_errors == 2 -varnish v1 -expect MAIN.s_resp_bodybytes == 40 +vinyl v1 -expect esi_errors == 2 +vinyl v1 -expect MAIN.s_resp_bodybytes == 40 diff --git a/bin/vinyltest/tests/e00002.vtc b/bin/vinyltest/tests/e00002.vtc new file mode 100644 index 00000000000..d200f7b512d --- /dev/null +++ b/bin/vinyltest/tests/e00002.vtc @@ -0,0 +1,30 @@ +vtest "ESI CDATA" + + +server s1 { + rxreq + txresp -body { + + ]]> + This is a test: Unseen University + + This is a test: Hello world + } +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.do_esi = true; + } +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + expect resp.bodylen == 35 +} + +client c1 -run +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 35 diff --git a/bin/vinyltest/tests/e00003.vtc b/bin/vinyltest/tests/e00003.vtc new file mode 100644 index 00000000000..cc95919e22a --- /dev/null +++ b/bin/vinyltest/tests/e00003.vtc @@ -0,0 +1,169 @@ +vtest "ESI include" + +feature cmd "command -v diff" + +server s1 { + rxreq + expect req.http.esi0 == "foo" + txresp -body { + + Before include + After include + + } + rxreq + expect req.url == "/body1" + expect req.http.esi0 != "foo" + txresp -body { + Included file + } +} -start + +vinyl v1 -vcl+backend { + sub vcl_synth { + set resp.body = """ + """; + return (deliver); + } + sub vcl_recv { + if (req.esi_level > 0) { + set req.url = req.url + req.esi_level; + if (req.url ~ "^/synth") { + return (synth(3200)); + } + } else { + set req.http.esi0 = "foo"; + } + } + sub vcl_backend_response { + if (bereq.url == "/") { + set beresp.do_esi = true; + } + } + sub vcl_deliver { + set resp.http.can_esi = obj.can_esi; + + # make ReqAcct deterministic + unset resp.http.via; + } +} -start + +logexpect l1 -v v1 -g request { + expect 0 1001 Begin "^req .* rxreq" + expect * = ReqAcct "^45 0 45 180 75 255$" + expect 0 = End +} -start + +logexpect l2 -v v1 -g request { + expect * 1002 Begin "^bereq " + expect * = End +} -start + +logexpect l3 -v v1 -g request { + expect * 1003 Begin "^req .* esi" + expect * = ReqAcct "^0 0 0 0 18 18$" + expect 0 = End +} -start + +logexpect l4 -v v1 -g request { + expect * 1004 Begin "^bereq " + expect * = End +} -start + +logexpect l5 -v v1 -g request { + expect * 1006 Begin "^req .* rxreq" + # Header bytes is 5 larger than in l1 due to two item X-Vinyl hdr + expect * = ReqAcct "^45 0 45 185 75 260$" + expect 0 = End +} -start + +client c1 { + txreq -hdr "Host: foo" + rxresp + expect resp.bodylen == 75 + expect resp.status == 200 + expect resp.http.can_esi == "true" + + delay .1 + # test that there is no difference on miss/hit + txreq -hdr "Host: foo" + rxresp + expect resp.bodylen == 75 + expect resp.status == 200 + expect resp.http.can_esi == "true" +} + +client c1 -run +vinyl v1 -expect esi_req == 4 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 150 + +logexpect l1 -wait +logexpect l2 -wait +logexpect l3 -wait +logexpect l4 -wait +logexpect l5 -wait + +shell { + vinylncsa -n ${v1_name} -d \ + -F '%{Vinyl:vxid}x %{Vinyl:side}x %{VSL:Begin[3]}x' | + sort > ncsa.txt + + cat >expected.txt <<-EOF + 1001 c rxreq + 1006 c rxreq + EOF + diff -u expected.txt ncsa.txt +} + +shell { + vinylncsa -n ${v1_name} -d -b \ + -F '%{Vinyl:vxid}x %{Vinyl:side}x %{VSL:Begin[3]}x' | + sort > ncsa.txt + + cat >expected.txt <<-EOF + 1002 b fetch + 1004 b fetch + EOF + diff -u expected.txt ncsa.txt +} + +shell { + vinylncsa -n ${v1_name} -d -E \ + -F '%{Vinyl:vxid}x %{Vinyl:side}x %{VSL:Begin[3]}x' | + sort > ncsa.txt + + cat >expected.txt <<-EOF + 1001 c rxreq + 1003 c esi + 1005 c esi + 1006 c rxreq + 1007 c esi + 1008 c esi + EOF + diff -u expected.txt ncsa.txt +} + +shell { + vinylncsa -n ${v1_name} -d -b -E \ + -F '%{Vinyl:vxid}x %{Vinyl:side}x %{VSL:Begin[3]}x' | + sort > ncsa.txt + + cat >expected.txt <<-EOF + 1001 c rxreq + 1002 b fetch + 1003 c esi + 1004 b fetch + 1005 c esi + 1006 c rxreq + 1007 c esi + 1008 c esi + EOF + diff -u expected.txt ncsa.txt +} + +shell -err {vinyllog -n ${v1_name} -d -c -i Begin | grep esi} +shell -err {vinyllog -n ${v1_name} -d -c -i Begin -g request | grep esi} +shell {vinyllog -n ${v1_name} -d -c -i Begin -g raw | grep esi} +shell {vinyllog -n ${v1_name} -d -E -i Begin | grep esi} +shell {vinyllog -n ${v1_name} -d -E -i Begin | grep rxreq} diff --git a/bin/vinyltest/tests/e00004.vtc b/bin/vinyltest/tests/e00004.vtc new file mode 100644 index 00000000000..fb6d16129dd --- /dev/null +++ b/bin/vinyltest/tests/e00004.vtc @@ -0,0 +1,36 @@ +vtest "ESI commented include" + + +server s1 { + rxreq + txresp -body { + + Before include + + After include + } + rxreq + expect req.url == "/body" + txresp -body { + Included file + } +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + if (bereq.url != "/body") { + set beresp.do_esi = true; + } + } +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + expect resp.bodylen == 67 +} + +client c1 -run +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 67 diff --git a/bin/varnishtest/tests/e00005.vtc b/bin/vinyltest/tests/e00005.vtc similarity index 76% rename from bin/varnishtest/tests/e00005.vtc rename to bin/vinyltest/tests/e00005.vtc index 7137195b669..87275aa4d7e 100644 --- a/bin/varnishtest/tests/e00005.vtc +++ b/bin/vinyltest/tests/e00005.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI relative include" +vtest "ESI relative include" server s1 { @@ -17,7 +17,7 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { if (bereq.url != "/foo/body") { set beresp.do_esi = true; @@ -33,5 +33,5 @@ client c1 { } client c1 -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 67 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 67 diff --git a/bin/varnishtest/tests/e00006.vtc b/bin/vinyltest/tests/e00006.vtc similarity index 79% rename from bin/varnishtest/tests/e00006.vtc rename to bin/vinyltest/tests/e00006.vtc index 82cf5c9f3e3..4273495d0a3 100644 --- a/bin/varnishtest/tests/e00006.vtc +++ b/bin/vinyltest/tests/e00006.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI include with http://" +vtest "ESI include with http://" server s1 { @@ -21,7 +21,7 @@ server s2 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_fetch { if (bereq.http.host == "bozz") { set bereq.backend = s2; @@ -42,8 +42,8 @@ client c1 { } client c1 -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 78 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 78 # Now try with invalid URLs @@ -56,7 +56,7 @@ server s1 { txresp -body {123456} } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { set req.backend_hint = s2; set req.backend_hint = s1; @@ -66,7 +66,7 @@ varnish v1 -vcl+backend { } } -varnish v1 -cliok "param.set feature +esi_ignore_https" +vinyl v1 -cliok "param.set feature +esi_ignore_https" logexpect l1 -v v1 -g raw { expect * * ESI_xmlerror "^ERR: after 0 ESI 1.0 invalid src= URL" @@ -81,8 +81,8 @@ client c1 { expect resp.bodylen == 4 } -run -varnish v1 -expect esi_errors == 1 -varnish v1 -expect MAIN.s_resp_bodybytes == 82 +vinyl v1 -expect esi_errors == 1 +vinyl v1 -expect MAIN.s_resp_bodybytes == 82 client c1 { txreq -url /https @@ -93,5 +93,5 @@ client c1 { logexpect l1 -wait -varnish v1 -expect esi_errors == 2 -varnish v1 -expect MAIN.s_resp_bodybytes == 88 +vinyl v1 -expect esi_errors == 2 +vinyl v1 -expect MAIN.s_resp_bodybytes == 88 diff --git a/bin/varnishtest/tests/e00007.vtc b/bin/vinyltest/tests/e00007.vtc similarity index 86% rename from bin/varnishtest/tests/e00007.vtc rename to bin/vinyltest/tests/e00007.vtc index 6e4e0e9df4e..889ab0a358b 100644 --- a/bin/varnishtest/tests/e00007.vtc +++ b/bin/vinyltest/tests/e00007.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI spanning storage bits" +vtest "ESI spanning storage bits" # The layout of the body in the response is very carefully # tuned to give the desired code coverage. @@ -32,13 +32,13 @@ server s1 { } } -start -varnish v1 -arg "-sdefault,2m" -vcl+backend { +vinyl v1 -arg "-sdefault,2m" -vcl+backend { sub vcl_backend_response { set beresp.do_esi = true; } } -start -varnish v1 -cliok "debug.fragfetch 32" +vinyl v1 -cliok "debug.fragfetch 32" client c1 { txreq -url /foo/bar -hdr "Host: froboz" @@ -49,5 +49,5 @@ client c1 { } client c1 -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 120 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 120 diff --git a/bin/varnishtest/tests/e00008.vtc b/bin/vinyltest/tests/e00008.vtc similarity index 92% rename from bin/varnishtest/tests/e00008.vtc rename to bin/vinyltest/tests/e00008.vtc index 775e45f18c7..183471b6ccf 100644 --- a/bin/varnishtest/tests/e00008.vtc +++ b/bin/vinyltest/tests/e00008.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI parsing errors" +vtest "ESI parsing errors" server s1 { rxreq @@ -59,7 +59,7 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_esi = true; } @@ -98,9 +98,9 @@ logexpect l3 -v v1 -g vxid { expect 0 = BackendClose } -start -varnish v1 -cliok "param.set debug +esi_chop" +vinyl v1 -cliok "param.set debug +esi_chop" -varnish v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set debug +syncvsl" client c1 { txreq @@ -113,5 +113,5 @@ client c1 -run logexpect l1 -wait logexpect l2 -wait logexpect l3 -wait -varnish v1 -expect esi_errors == 18 -varnish v1 -expect MAIN.s_resp_bodybytes == 472 +vinyl v1 -expect esi_errors == 18 +vinyl v1 -expect MAIN.s_resp_bodybytes == 472 diff --git a/bin/vinyltest/tests/e00009.vtc b/bin/vinyltest/tests/e00009.vtc new file mode 100644 index 00000000000..47993d8483c --- /dev/null +++ b/bin/vinyltest/tests/e00009.vtc @@ -0,0 +1,50 @@ +vtest "ESI binary detector" + +server s1 { + rxreq + txresp -body { + Before include + + bar + + } + rxreq + txresp -body { + Before include + + bar + + } +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.do_esi = true; + } +} -start + +logexpect l1 -v v1 -g raw { + expect * 1002 ESI_xmlerror esi_disable_xml_check +} -start + +client c1 { + txreq + rxresp + expect resp.status == 200 + expect resp.bodylen == 57 +} -run + +logexpect l1 -wait +vinyl v1 -expect MAIN.s_resp_bodybytes == 57 + +vinyl v1 -cli "param.set feature +esi_disable_xml_check" + +client c1 { + txreq -url /bar + rxresp + expect resp.status == 200 + expect resp.bodylen == 22 + expect resp.http.transfer-encoding == "chunked" +} -run +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 79 diff --git a/bin/varnishtest/tests/e00010.vtc b/bin/vinyltest/tests/e00010.vtc similarity index 75% rename from bin/varnishtest/tests/e00010.vtc rename to bin/vinyltest/tests/e00010.vtc index feffe0167a2..099c1e34c87 100644 --- a/bin/varnishtest/tests/e00010.vtc +++ b/bin/vinyltest/tests/e00010.vtc @@ -1,4 +1,4 @@ -varnishtest "Ignoring non esi elements" +vtest "Ignoring non esi elements" server s1 { rxreq @@ -11,7 +11,7 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_esi = true; } @@ -23,4 +23,4 @@ client c1 { expect resp.status == 200 expect resp.bodylen == 21 } -run -varnish v1 -expect esi_errors == 0 +vinyl v1 -expect esi_errors == 0 diff --git a/bin/varnishtest/tests/e00011.vtc b/bin/vinyltest/tests/e00011.vtc similarity index 81% rename from bin/varnishtest/tests/e00011.vtc rename to bin/vinyltest/tests/e00011.vtc index 0e655fc6579..77a4eb72ae5 100644 --- a/bin/varnishtest/tests/e00011.vtc +++ b/bin/vinyltest/tests/e00011.vtc @@ -1,4 +1,4 @@ -varnishtest "Make sure that PASS'ed ESI requests use GET for includes" +vtest "Make sure that PASS'ed ESI requests use GET for includes" server s1 { rxreq @@ -15,7 +15,7 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.uncacheable = true; set beresp.do_esi = true; @@ -32,4 +32,4 @@ client c1 { expect resp.status == 200 expect resp.bodylen == 31 } -run -varnish v1 -expect esi_errors == 0 +vinyl v1 -expect esi_errors == 0 diff --git a/bin/varnishtest/tests/e00012.vtc b/bin/vinyltest/tests/e00012.vtc similarity index 76% rename from bin/varnishtest/tests/e00012.vtc rename to bin/vinyltest/tests/e00012.vtc index e73f535b1b6..78d53698b49 100644 --- a/bin/varnishtest/tests/e00012.vtc +++ b/bin/vinyltest/tests/e00012.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI includes for pre HTTP/1.1 cannot used chunked encoding" +vtest "ESI includes for pre HTTP/1.1 cannot used chunked encoding" server s1 { rxreq @@ -16,7 +16,7 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { if (bereq.url != "/foo/body") { set beresp.do_esi = true; @@ -32,7 +32,7 @@ client c1 { expect resp.http.Transfer-Encoding == "chunked" } -run -varnish v1 -expect MAIN.s_resp_bodybytes == 67 +vinyl v1 -expect MAIN.s_resp_bodybytes == 67 client c1 { txreq -url /foo/bar -proto HTTP/1.0 @@ -44,5 +44,5 @@ client c1 { expect resp.http.Connection == "close" } -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 134 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 134 diff --git a/bin/vinyltest/tests/e00013.vtc b/bin/vinyltest/tests/e00013.vtc new file mode 100644 index 00000000000..7a1027a9312 --- /dev/null +++ b/bin/vinyltest/tests/e00013.vtc @@ -0,0 +1,24 @@ +vtest "All white-space object, in multiple storage segments" + +server s1 { + rxreq + expect req.url == "/foo" + txresp -nolen -hdr "Transfer-Encoding: chunked" + chunked { } + chunkedlen 0 +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.do_esi = true; + } +} -start + +vinyl v1 -cliok "debug.fragfetch 4" + +client c1 { + txreq -url /foo + rxresp +} -run + +vinyl v1 -expect esi_errors == 0 diff --git a/bin/vinyltest/tests/e00014.vtc b/bin/vinyltest/tests/e00014.vtc new file mode 100644 index 00000000000..75508775349 --- /dev/null +++ b/bin/vinyltest/tests/e00014.vtc @@ -0,0 +1,26 @@ +vtest "Check } +} -start + +vinyl v1 -vcl+backend { + sub vcl_backend_response { + set beresp.do_esi = true; + } +} -start + +vinyl v1 -cliok "debug.fragfetch 4" + +client c1 { + txreq -url /foo + rxresp + expect resp.bodylen == 49 +} -run + +vinyl v1 -expect esi_errors == 0 diff --git a/bin/varnishtest/tests/e00015.vtc b/bin/vinyltest/tests/e00015.vtc similarity index 86% rename from bin/varnishtest/tests/e00015.vtc rename to bin/vinyltest/tests/e00015.vtc index 9f90bd3c2e7..3df9f167214 100644 --- a/bin/varnishtest/tests/e00015.vtc +++ b/bin/vinyltest/tests/e00015.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI requests turned off and other filters with esi" +vtest "ESI requests turned off and other filters with esi" server s1 { rxreq @@ -23,7 +23,7 @@ server s1 { } } -start -varnish v1 -syntax 4.0 -vcl+backend { +vinyl v1 -syntax 4.0 -vcl+backend { sub vcl_recv { if (req.url == "/") { set req.esi = false; @@ -45,10 +45,10 @@ client c1 { expect resp.status == 200 } -run -varnish v1 -vsl_catchup +vinyl v1 -vsl_catchup -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 149 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 149 server s1 { rxreq @@ -69,7 +69,7 @@ server s1 { } } -start -varnish v1 -syntax 4.1 -vcl+backend { +vinyl v1 -syntax 4.1 -vcl+backend { sub vcl_deliver { set resp.http.was = resp.do_esi; set resp.http.filter0 = resp.filters; @@ -128,8 +128,8 @@ client c1 { txreq -url /top2 -hdr "fiddle: do_esi" rxresp expect resp.status == 503 - expect resp.bodylen == 251 + expect resp.bodylen == 249 } -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 673 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 671 diff --git a/bin/vinyltest/tests/e00016.vtc b/bin/vinyltest/tests/e00016.vtc new file mode 100644 index 00000000000..bd7b8545ff9 --- /dev/null +++ b/bin/vinyltest/tests/e00016.vtc @@ -0,0 +1,54 @@ +vtest "ESI request can't be turned off midstream" + +server s1 { + rxreq + txresp -body { + + Before include + + + After include + } + rxreq + expect req.url == "/body" + txresp -body { + + } + rxreq + expect req.url == "/body2" + txresp -body { + included + } + rxreq + expect req.url == "/body3" + txresp -body { + included body3 + } +} -start + +# give enough stack to 32bit systems +vinyl v1 -cliok "param.set thread_pool_stack 128k" +vinyl v1 -cliok "param.set feature +esi_disable_xml_check" + +vinyl v1 -syntax 4.0 -vcl+backend { + sub vcl_backend_response { + set beresp.do_esi = true; + } + sub vcl_deliver { + set req.esi = true; + if (req.url == "/body") { + set req.esi = false; + } + } +} -start + +client c1 { + txreq + rxresp + expect resp.bodylen == 105 + expect resp.status == 200 +} + +client c1 -run +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 105 diff --git a/bin/varnishtest/tests/e00017.vtc b/bin/vinyltest/tests/e00017.vtc similarity index 97% rename from bin/varnishtest/tests/e00017.vtc rename to bin/vinyltest/tests/e00017.vtc index 09333378e91..68ae8c2bed9 100644 --- a/bin/varnishtest/tests/e00017.vtc +++ b/bin/vinyltest/tests/e00017.vtc @@ -1,4 +1,4 @@ -varnishtest "Aggressive use of ESI include" +vtest "Aggressive use of ESI include" server s1 { @@ -70,7 +70,7 @@ server s1 { txresp -body {
Included file 19
} } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_esi = true; } @@ -85,5 +85,5 @@ client c1 { } client c1 -run -varnish v1 -expect esi_errors == 0 -varnish v1 -expect MAIN.s_resp_bodybytes == 684 +vinyl v1 -expect esi_errors == 0 +vinyl v1 -expect MAIN.s_resp_bodybytes == 684 diff --git a/bin/varnishtest/tests/e00018.vtc b/bin/vinyltest/tests/e00018.vtc similarity index 90% rename from bin/varnishtest/tests/e00018.vtc rename to bin/vinyltest/tests/e00018.vtc index bf827b50daa..b11ded4fe05 100644 --- a/bin/varnishtest/tests/e00018.vtc +++ b/bin/vinyltest/tests/e00018.vtc @@ -1,4 +1,4 @@ -varnishtest "Test XML 1.0 entity references" +vtest "Test XML 1.0 entity references" server s1 { rxreq @@ -32,7 +32,7 @@ server s1 { txresp -body "55555" } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_recv { return (pass); } diff --git a/bin/varnishtest/tests/e00019.vtc b/bin/vinyltest/tests/e00019.vtc similarity index 80% rename from bin/varnishtest/tests/e00019.vtc rename to bin/vinyltest/tests/e00019.vtc index 1fb159ec001..0749e586b6a 100644 --- a/bin/varnishtest/tests/e00019.vtc +++ b/bin/vinyltest/tests/e00019.vtc @@ -1,4 +1,4 @@ -varnishtest "Push corners in new ESI parser" +vtest "Push corners in new ESI parser" server s1 { rxreq @@ -31,29 +31,29 @@ server s1 { # The included object gets served from a different backend. # This is to avoid a race between when a backend connection # gets put up for reuse because of background fetches in -# Varnish 4 +# Vinyl 4 server s2 { rxreq - expect req.url == "bar/foo" + expect req.url == "/bar/foo" txresp -body {} } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_fetch { - if (bereq.url != "bar") { + if (bereq.url != "/bar/bazz") { set bereq.backend = s2; } } sub vcl_backend_response { - if (bereq.url == "bar") { + if (bereq.url == "/bar/bazz") { set beresp.do_esi = true; } } } -start -varnish v1 -cliok "param.set debug +esi_chop" -varnish v1 -cliok "param.set debug +syncvsl" +vinyl v1 -cliok "param.set debug +esi_chop" +vinyl v1 -cliok "param.set debug +syncvsl" logexpect l1 -v v1 -g vxid -q "vxid == 1002" { expect * * Fetch_Body @@ -67,7 +67,7 @@ logexpect l1 -v v1 -g vxid -q "vxid == 1002" { } -start client c1 { - txreq -url bar + txreq -url /bar/bazz rxresp expect resp.status == 200 expect resp.bodylen == 65856 @@ -75,6 +75,6 @@ client c1 { logexpect l1 -wait -varnish v1 -expect esi_errors == 5 -varnish v1 -expect esi_warnings == 1 -varnish v1 -expect MAIN.s_resp_bodybytes == 65856 +vinyl v1 -expect esi_errors == 5 +vinyl v1 -expect esi_warnings == 1 +vinyl v1 -expect MAIN.s_resp_bodybytes == 65856 diff --git a/bin/varnishtest/tests/e00020.vtc b/bin/vinyltest/tests/e00020.vtc similarity index 84% rename from bin/varnishtest/tests/e00020.vtc rename to bin/vinyltest/tests/e00020.vtc index 45f8be5391f..71a5555fcdb 100644 --- a/bin/varnishtest/tests/e00020.vtc +++ b/bin/vinyltest/tests/e00020.vtc @@ -1,4 +1,4 @@ -varnishtest "ESI:remove" +vtest "ESI:remove" server s1 { @@ -13,14 +13,14 @@ server s1 { } } -start -varnish v1 -vcl+backend { +vinyl v1 -vcl+backend { sub vcl_backend_response { set beresp.do_esi = true; set beresp.do_gunzip = true; } } -start -varnish v1 -cliok "param.set http_gzip_support true" +vinyl v1 -cliok "param.set http_gzip_support true" logexpect l1 -v v1 -g vxid { expect * * Fetch_Body @@ -38,5 +38,5 @@ client c1 { } client c1 -run -varnish v1 -expect esi_errors == 2 +vinyl v1 -expect esi_errors == 2 logexpect l1 -wait diff --git a/bin/vinyltest/tests/e00021.vtc b/bin/vinyltest/tests/e00021.vtc new file mode 100644 index 00000000000..a1c4de57643 --- /dev/null +++ b/bin/vinyltest/tests/e00021.vtc @@ -0,0 +1,39 @@ +vtest "ESI ability to stitch gzip files together" + + +server s1 { + rxreq + txresp -body { + + This is a test: Unseen University + + + + This is a test: Hello world + } +} -start + +vinyl v1 -syntax 4.0 -vcl+backend { + sub vcl_recv { + set req.esi = true; + } + sub vcl_backend_response { + set beresp.do_esi = true; + set beresp.do_gzip = true; + } +} -start + +vinyl v1 -cliok "param.set debug +esi_chop" +vinyl v1 -cliok "param.set http_gzip_support true" + +client c1 { + txreq -hdr "Accept-Encoding: gzip" + rxresp + expect resp.http.content-encoding == gzip + gunzip + expect resp.status == 200 + expect resp.bodylen == 40 +} + +client c1 -run +vinyl v1 -expect esi_errors == 2 diff --git a/bin/vinyltest/tests/e00022.vtc b/bin/vinyltest/tests/e00022.vtc new file mode 100644 index 00000000000..a8bc2af8a02 --- /dev/null +++ b/bin/vinyltest/tests/e00022.vtc @@ -0,0 +1,50 @@ +vtest "ESI ability to stitch gzip files together" + + +server s1 { + rxreq + expect req.http.accept-encoding == gzip + txresp -gzipbody { + + This is a test: Unseen University + + + + This is a test: Hello world + } +} -start + +vinyl v1 -syntax 4.0 -arg "-p thread_pool_stack=262144" -vcl+backend { + sub vcl_recv { + set req.esi = true; + } + sub vcl_backend_response { + set beresp.do_esi = true; + } +} -start + +vinyl v1 -cliok "param.set debug +esi_chop" +vinyl v1 -cliok "param.set http_gzip_support true" +vinyl v1 -cliok "param.set gzip_memlevel 1" + +logexpect l1 -v v1 -g vxid { + expect * * Fetch_Body + expect 0 = ESI_xmlerror {^ERR: after 24 ESI 1.0 element nested in $} + expect 0 = ESI_xmlerror {^ERR: after 24 ESI 1.0 Nested