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开发。所有可用的功能都允许选择需要篡改的工作空间,可用值为 clientbackendsessionthread

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
)

从工作区的返回数据 sf ,或 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作者与工作区操作结合使用非常有用。

BLOB PROXY_HEADER(ENUM版本、IP客户端、IP服务器、字符串授权)

BLOB proxy_header(
   ENUM {v1, v2} version,
   IP client,
   IP server,
   STRING authority=0
)

设置给定版本的代理头的格式 v1v2 和地址(VCL IP类型还包含端口号)。

还可以选择发送带有版本的授权TLV v2 (忽略版本 v1 )。

有可能进入vmod_proxy,但对接口设计有顾虑

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| 台词。

无法解析的行将被静默忽略。

另请参阅