VMOD vtc — Утилитарный модуль для varnishtest
СИНОПСИС
import vtc [as name] [from "path"] VOID barrier_sync(STRING addr, DURATION timeout=0) BACKEND no_backend() STEVEDORE no_stevedore() IP no_ip() VOID panic(STRING) VOID sleep(DURATION) VOID workspace_alloc(ENUM, INT size) BYTES workspace_reserve(ENUM, INT size) INT workspace_free(ENUM {client, backend, session, thread}) VOID workspace_snapshot(ENUM) VOID workspace_reset(ENUM) BOOL workspace_overflowed(ENUM) VOID workspace_overflow(ENUM) BLOB workspace_dump(ENUM, ENUM, BYTES off, BYTES len) INT typesize(STRING) BLOB proxy_header(ENUM version, IP client, IP server, STRING authority) VOID vsl(INT vxid, STRING tag, ENUM {c, b} side, STRING s) VOID vsl_replay(STRING s)
ОПИСАНИЕ
Цель данного VMOD — предоставить пользователям VCL и авторам VMOD средства для тестирования граничных случаев или достижения определённых условий с помощью varnishtest.
VOID barrier_sync(STRING addr, DURATION timeout=0)
При написании тестовых случаев наиболее распространённым шаблоном является запуск экземпляра имитирующего сервера, экземпляра Varnish и запуска имитируемого клиента. Эти сущности работают асинхронно, и существуют другие, такие как фоновые процессы (process) или читатели логов (logexpect). Хотя вы можете синхронизироваться с отдельными сущностями и ждать их завершения, вы должны использовать барьер, если вам нужно синхронизировать две или более сущностей или ждать определённой точки, а не завершения.
Не только возможна синхронизация между тестовыми сущностями, с помощью функции barrier_sync вы даже можете синхронизировать код VCL:
sub vcl_recv {
# wait for some barrier b1 to complete
vtc.barrier_sync("${b1_sock}");
}
Если по какой-либо причине функция не сможет синхронизироваться с барьером или достигнет необязательного таймаута, то транзакция VCL завершится ошибкой.
РАЗНОЕ
BACKEND no_backend()
Отказ на этапе выбора бэкэнда.
STEVEDORE no_stevedore()
Отказ на этапе выбора хранилища.
IP no_ip()
Возвращает нулевой IP-адрес, даже не bogo_ip.
VOID panic(STRING)
Это может быть полезно для аварийного завершения дочернего процесса, чтобы протестировать надёжность VMOD.
VOID sleep(DURATION)
Заблокировать текущий поток-работник.
РАБОЧИЕ ПРОСТРАНСТВА
Может быть полезно поместить рабочее пространство в заданное состояние при тестировании граничных случаев, таких как исчерпание ресурсов для транзакции, особенно для разработки VMOD. Все доступные функции позволяют выбрать нужное рабочее пространство, доступные значения — client, backend, session и thread.
VOID workspace_alloc(ENUM, INT size)
VOID workspace_alloc(
ENUM {client, backend, session, thread},
INT size
)
Выделить и обнулить память из рабочего пространства. Отрицательный размер выделит столько памяти, сколько нужно, чтобы освободить указанное количество байтов. Фактический размер выделения может быть больше для соответствия требованиям выравнивания памяти архитектуры процессора. Неудачное выделение приводит к ошибке транзакции.
BYTES workspace_reserve(ENUM, INT size)
BYTES workspace_reserve(
ENUM {client, backend, session, thread},
INT size
)
Попытаться зарезервировать size байтов, обнулить эту память и сразу же освободить резервацию. Возвратить размер резервации.
См. vtc.workspace_alloc() для семантики аргумента size.
INT workspace_free(ENUM {client, backend, session, thread})
Определить, сколько невыделенной памяти осталось в рабочем пространстве.
VOID workspace_snapshot(ENUM)
VOID workspace_snapshot(ENUM {client, backend, session, thread})
Создать снимок рабочего пространства. Одновременно может быть активен только один снимок, и каждый VCL может сохранить только один снимок, поэтому одновременные задачи, требующие снимков, не поддерживаются.
VOID workspace_reset(ENUM)
VOID workspace_reset(ENUM {client, backend, session, thread})
Восстановить предыдущий снимок рабочего пространства, причём оно должно быть тем же рабочим пространством.
BOOL workspace_overflowed(ENUM)
BOOL workspace_overflowed(ENUM {client, backend, session, thread})
Определить, установлен ли флаг переполнения рабочего пространства.
VOID workspace_overflow(ENUM)
VOID workspace_overflow(ENUM {client, backend, session, thread})
Пометить рабочее пространство как переполненное.
BLOB workspace_dump(ENUM, ENUM, BYTES off, BYTES len)
BLOB workspace_dump(
ENUM {client, backend, session, thread},
ENUM {s, f, r},
BYTES off=0,
BYTES len=64
)
Возвращает данные из указателя рабочего пространства s, f, или r в виде blob. Данные копируются в основное рабочее пространство, чтобы избежать их последующей перезаписи.
Максимальное значение len составляет 1 КБ.
INT typesize(STRING)
Возвращает размер в байтах набора C-типов данных:
-
'p': указатель -
'i':int -
'd':double -
'f':float -
'l':long -
's':short -
'z':size_t -
'o':off_t -
'j':intmax_t
Это может быть полезно авторам VMOD в сочетании с операциями над рабочим пространством.
VSL
Эти функции позволяют генерировать произвольные записи логов для тестирования реализации Varnish Shared Log (VSL) и читателей, таких как varnishlog.
VOID vsl(INT vxid, STRING tag, ENUM {c, b} side, STRING s)
Вызывает VSLs() с указанными параметрами.
Порядок аргументов выбран для соответствия выводу VSL.
Ошибка VCL возникает, если tag не может быть разрешена во время выполнения или если vxid находится за пределами допустимого диапазона.
VOID vsl_replay(STRING s)
Воспроизведение литеральных строк логов.
Парсер принимает вывод, генерируемый varnishlog -g raw и строками логов varnishtest vsl|.
Неразбираемые строки игнорируются.
СМОТРИТЕ ТАКЖЕ
АВТОРСКИЕ ПРАВА
Copyright (c) 2017 Varnish Software AS All rights reserved. Author: Dridi Boukelmoune <dridi.boukelmoune@gmail.com> 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. NB: Default to strict $ABI handling, so that path is tested in vmodtool.py
Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/reference/vmod_vtc.html