VMOD VTC-用于varnishtest的实用程序模块¶
SYNOPSIS¶
import vtc [as name] [from "path"] 无效屏障_SYNC(字符串地址,持续时间超时=0) 后端no_Backend() 装卸工no_stevedore() IP编号_IP() 无效死机(字符串) 无效睡眠(持续时间) VOID WORKSPACE_ALLOC(ENUM,整数大小) 字节WORKSPACE_RESERVE(ENUM,整数大小) INT WORKSPACE_FREE(ENUM{客户端,后端,会话,线程}) 无效工作区快照(ENUM) 空WORKSPACE_RESET(ENUM) 布尔工作区_已溢出(ENUM) 无效工作区溢出(ENUM) BLOB WORKSPACE_DUMP(ENUM,ENUM,字节关闭,字节长度) 整型字号(字符串) BLOB PROXY_HEADER(ENUM版本、IP客户端、IP服务器、字符串授权) Void vsl(int vxid,字符串标签,ENUM{c,b}side,字符串S) Void vsl_replay(字符串S)
DESCRIPTION¶
此VMOD的目标是为VCL用户和VMOD作者提供使用varnishtest测试转角情况或达到特定条件的方法。
无效屏障_SYNC(字符串地址,持续时间超时=0)¶
在编写测试用例时,最常见的模式是启动模拟服务器实例、Varnish实例和启动模拟客户端。这些实体以异步方式运行,而其他实体则像后台进程一样存在 (process
)或日志读取器 (logexpect
)。虽然您可以与单个实体同步并等待其完成,但如果需要同步两个或更多实体,或者等待到某个点而不是完成,则必须使用屏障。
不仅可以在测试实体之间进行同步,还可以使用 barrier_sync
函数您甚至可以同步VCL代码::
sub vcl_recv {
# wait for some barrier b1 to complete
vtc.barrier_sync("${b1_sock}");
}
如果函数由于某种原因未能与屏障同步,或者如果它达到了可选的超时,则VCL事务失败。
MISCELLANEOUS¶
后端no_Backend()¶
后端选择失败。
装卸工no_stevedore()¶
存储选择失败。
IP编号_IP()¶
返回空IP地址,甚至不是bogo_ip。
无效死机(字符串)¶
为了测试VMOD的健壮性,将子进程崩溃是很有用的。
无效睡眠(持续时间)¶
阻止当前工作线程。
WORKSPACES¶
在测试事务的资源耗尽等特殊情况时,将工作区置于给定状态非常有用,尤其是对于VMOD开发。所有可用的功能都允许选择需要篡改的工作空间,可用值为 client
, backend
, session
和 thread
。
VOID WORKSPACE_ALLOC(ENUM,整数大小)¶
VOID workspace_alloc(
ENUM {client, backend, session, thread},
INT size
)
从工作区分配和清零内存。负值大小将分配所需数量的空闲字节数。实际分配大小可能更高,以符合CPU体系结构的内存对齐要求。失败的分配会使事务失败。
字节WORKSPACE_RESERVE(ENUM,整数大小)¶
BYTES workspace_reserve(
ENUM {client, backend, session, thread},
INT size
)
尝试预订 size 字节,清零该内存并立即释放预留空间。返回预订的大小。
看见 vtc.workspace_alloc() 的语义。 size 争论。
INT WORKSPACE_FREE(ENUM{客户端,后端,会话,线程})¶
找出工作区中还有多少未分配的空间。
无效工作区快照(ENUM)¶
VOID workspace_snapshot(ENUM {client, backend, session, thread})
为工作区创建快照。一次只能激活一个快照,每个VCL只能保存一个快照,因此不支持需要快照的并发任务。
空WORKSPACE_RESET(ENUM)¶
VOID workspace_reset(ENUM {client, backend, session, thread})
重置为工作区的上一个快照,它也必须是相同的工作区。
布尔工作区_已溢出(ENUM)¶
BOOL workspace_overflowed(ENUM {client, backend, session, thread})
查看是否设置了工作区溢出标记。
无效工作区溢出(ENUM)¶
VOID workspace_overflow(ENUM {client, backend, session, thread})
将工作区标记为已溢出。
BLOB WORKSPACE_DUMP(ENUM,ENUM,字节关闭,字节长度)¶
BLOB workspace_dump(
ENUM {client, backend, session, thread},
ENUM {s, f, r},
BYTES off=0,
BYTES len=64
)
从工作区的返回数据 s
, f
,或 r
作为斑点的指针。数据被复制到主工作区,以避免随后被覆盖。
最大值 len 是1KB。
整型字号(字符串)¶
返回C数据类型集合的大小(以字节为单位):
'p'
:指针'i'
:int
'd'
:double
'f'
:float
'l'
:long
's'
:short
'z'
:size_t
'o'
:off_t
'j'
:intmax_t
这对于VMOD作者与工作区操作结合使用非常有用。
VSL¶
这些函数允许生成任意日志条目来测试Varnish共享日志(VSL)实现和类似varnishlog的读取器。
Void vsl(int vxid,字符串标签,ENUM{c,b}side,字符串S)¶
打电话 VSLs()
使用给定的参数。
选择参数顺序以匹配VSL输出。
如果满足以下条件,则触发VCL错误 tag 无法在运行时解析或如果vxid越界。
Void vsl_replay(字符串S)¶
重播原义日志行。
解析器接受由 varnishlog -g raw
和varnishtest日志 vsl|
台词。
无法解析的行将被静默忽略。
另请参阅¶
COPYRIGHT¶
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