[experimental-ims] a20b6af Add a new VMOD.debug and move the stuff varnishtest uses to get out into the obscure corners over there, making vmod.std a better copy& paste example and removing things like "panic" from the VCC.

Poul-Henning Kamp phk at FreeBSD.org
Thu Dec 18 10:27:48 CET 2014


commit a20b6af4f1d5353132d07d4baae6d9e9c822f896
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Jun 18 09:50:18 2012 +0000

    Add a new VMOD.debug and move the stuff varnishtest uses to get out
    into the obscure corners over there, making vmod.std a better copy&
    paste example and removing things like "panic" from the VCC.

diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index d227949..f172769 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -385,21 +385,6 @@ VRT_Rollback(const struct sess *sp)
 /*--------------------------------------------------------------------*/
 
 void
-VRT_panic(struct req *req, const char *str, ...)
-{
-	va_list ap;
-	char *b;
-
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	va_start(ap, str);
-	b = VRT_String(req->http->ws, "PANIC: ", str, ap);
-	va_end(ap);
-	VAS_Fail("VCL", "", 0, b, 0, 2);
-}
-
-/*--------------------------------------------------------------------*/
-
-void
 VRT_synth_page(struct req *req, unsigned flags, const char *str, ...)
 {
 	va_list ap;
diff --git a/bin/varnishd/flint.sh b/bin/varnishd/flint.sh
index 9067263..c32c01b 100755
--- a/bin/varnishd/flint.sh
+++ b/bin/varnishd/flint.sh
@@ -25,6 +25,7 @@ flexelint \
 	../../lib/libvarnishcompat/execinfo.c \
 	../../lib/libvcl/*.c \
 	../../lib/libvmod_std/*.c \
+	../../lib/libvmod_debug/*.c \
 	2>&1 | tee _.fl
 
 if [ -f _.fl.old ] ; then
diff --git a/bin/varnishtest/tests/m00000.vtc b/bin/varnishtest/tests/m00000.vtc
index 7fe2b8c..504601b 100644
--- a/bin/varnishtest/tests/m00000.vtc
+++ b/bin/varnishtest/tests/m00000.vtc
@@ -1,4 +1,4 @@
-varnishtest "Test std vmod"
+varnishtest "Test std & debug vmod"
 
 server s1 {
 	rxreq 
@@ -7,11 +7,14 @@ server s1 {
 
 varnish v1 -vcl+backend {
 	import std from "${topbuild}/lib/libvmod_std/.libs/libvmod_std.so" ;
+	import debug from "${topbuild}/lib/libvmod_debug/.libs/libvmod_debug.so" ;
 
 	sub vcl_deliver {
 		set resp.http.foo = std.toupper(resp.http.foo);
 		set resp.http.bar = std.tolower(resp.http.bar);
-		set resp.http.who = std.author(phk);
+		set resp.http.who = debug.author(phk);
+		debug.test_priv_call();
+		debug.test_priv_vcl();
 		std.log("VCL initiated log");
 		std.syslog(8 + 7, "Somebody runs varnishtest");
 	}
@@ -27,9 +30,9 @@ client c1 {
 } -run
 
 varnish v1 -badvcl {
-	import std from "${topbuild}/lib/libvmod_std/.libs/libvmod_std.so.1" ;
+	import debug from "${topbuild}/lib/libvmod_debug/.libs/libvmod_debug.so.1" ;
 	sub vcl_deliver {
-		set resp.http.who = std.author(jfk);
+		set resp.http.who = debug.author(jfk);
 	}
 }
 
diff --git a/bin/varnishtest/tests/r00878.vtc b/bin/varnishtest/tests/r00878.vtc
index 6997189..55106c9 100644
--- a/bin/varnishtest/tests/r00878.vtc
+++ b/bin/varnishtest/tests/r00878.vtc
@@ -6,9 +6,9 @@ server s1 {
 } -start
 
 varnish v1 -vcl+backend {
-        import std from "${topbuild}/lib/libvmod_std/.libs/libvmod_std.so" ;
+        import debug from "${topbuild}/lib/libvmod_debug/.libs/libvmod_debug.so" ;
 	sub vcl_deliver {
-		set resp.http.who = std.author(phk);
+		set resp.http.who = debug.author(phk);
 	}
 } -start
 
@@ -18,9 +18,9 @@ client c1 {
 	rxresp
 } -run
 varnish v1 -vcl+backend {
-        import std from "${topbuild}/lib/libvmod_std/.libs/libvmod_std.so" ;
+        import debug from "${topbuild}/lib/libvmod_debug/.libs/libvmod_debug.so" ;
 	sub vcl_deliver {
-		set resp.http.who = std.author(des);
+		set resp.http.who = debug.author(des);
 	}
 }
 
@@ -30,9 +30,9 @@ client c1 {
 } -run
 
 varnish v1 -vcl+backend {
-        import std from "${topbuild}/lib/libvmod_std/.libs/libvmod_std.so" ;
+        import debug from "${topbuild}/lib/libvmod_debug/.libs/libvmod_debug.so" ;
 	sub vcl_deliver {
-		set resp.http.who = std.author(kristian);
+		set resp.http.who = debug.author(kristian);
 	}
 }
 
diff --git a/bin/varnishtest/tests/v00010.vtc b/bin/varnishtest/tests/v00010.vtc
index b44fc13..46d778c 100644
--- a/bin/varnishtest/tests/v00010.vtc
+++ b/bin/varnishtest/tests/v00010.vtc
@@ -15,9 +15,11 @@ server s1 {
 
 varnish v1 -storage "-smalloc,1m" -vcl+backend {
 
+	import debug from "${topbuild}/lib/libvmod_debug/.libs/libvmod_debug.so";
+
 	sub vcl_deliver {
 		if (resp.http.panic) {
-			panic "Had Panic header: " + resp.http.panic;
+			debug.panic("Had Panic header: " + resp.http.panic);
 		}
 	}
 } -start
diff --git a/bin/varnishtest/tests/v00018.vtc b/bin/varnishtest/tests/v00018.vtc
index 2c129d7..d1c0d5f 100644
--- a/bin/varnishtest/tests/v00018.vtc
+++ b/bin/varnishtest/tests/v00018.vtc
@@ -101,11 +101,6 @@ varnish v1 -vcl {
 
 varnish v1 -badvcl {
 	backend b { .host = "127.0.0.1"; }
-	sub vcl_recv { panic if; }
-}
-
-varnish v1 -badvcl {
-	backend b { .host = "127.0.0.1"; }
 	sub vcl_recv { kluf ; }
 }
 
diff --git a/configure.ac b/configure.ac
index 3df1e7d..2791fd9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -550,6 +550,7 @@ AC_CONFIG_FILES([
     lib/libvarnishcompat/Makefile
     lib/libvcl/Makefile
     lib/libvgz/Makefile
+    lib/libvmod_debug/Makefile
     lib/libvmod_std/Makefile
     lib/libjemalloc/Makefile
     man/Makefile
diff --git a/include/vrt.h b/include/vrt.h
index 50d4d8b..834f972 100644
--- a/include/vrt.h
+++ b/include/vrt.h
@@ -150,7 +150,6 @@ int VRT_re_match(struct req *, const char *, void *re);
 const char *VRT_regsub(struct req *, int all, const char *,
     void *, const char *);
 
-void VRT_panic(struct req *req, const char *, ...);
 void VRT_ban(struct sess *sp, char *, ...);
 void VRT_ban_string(struct sess *sp, const char *);
 void VRT_purge(const struct sess *sp, double ttl, double grace);
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 21146dc..72bc0f8 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -6,6 +6,7 @@ SUBDIRS = \
 	libvarnishapi \
 	libvcl \
 	libvgz \
+	libvmod_debug \
 	libvmod_std \
 	@JEMALLOC_SUBDIR@
 
diff --git a/lib/libvcl/vcc_action.c b/lib/libvcl/vcc_action.c
index d60b885..81cf597 100644
--- a/lib/libvcl/vcc_action.c
+++ b/lib/libvcl/vcc_action.c
@@ -234,19 +234,6 @@ parse_hash_data(struct vcc *tl)
 /*--------------------------------------------------------------------*/
 
 static void
-parse_panic(struct vcc *tl)
-{
-	vcc_NextToken(tl);
-
-	Fb(tl, 1, "VRT_panic(req, ");
-	vcc_Expr(tl, STRING);
-	ERRCHK(tl);
-	Fb(tl, 0, ", vrt_magic_string_end);\n");
-}
-
-/*--------------------------------------------------------------------*/
-
-static void
 parse_return(struct vcc *tl)
 {
 	int retval = 0;
@@ -331,7 +318,6 @@ static struct action_table {
 	/* Keep list sorted from here */
 	{ "call",		parse_call },
 	{ "hash_data",		parse_hash_data, VCL_MET_HASH },
-	{ "panic",		parse_panic },
 	{ "ban",		parse_ban },
 	{ "ban_url",		parse_ban_url },
 	{ "remove",		parse_unset }, /* backward compatibility */
diff --git a/lib/libvmod_debug/Makefile.am b/lib/libvmod_debug/Makefile.am
new file mode 100644
index 0000000..3a342b5
--- /dev/null
+++ b/lib/libvmod_debug/Makefile.am
@@ -0,0 +1,25 @@
+#
+
+INCLUDES = \
+	-I$(top_srcdir)/include \
+	-I$(top_srcdir)/bin/varnishd \
+	-I$(top_builddir)/include
+
+vmoddir = $(pkglibdir)/vmods
+vmod_srcdir = $(top_srcdir)/lib/libvmod_debug
+vmodtool = $(top_srcdir)/lib/libvcl/vmodtool.py
+vmod_LTLIBRARIES = libvmod_debug.la
+
+libvmod_debug_la_LDFLAGS = -module -export-dynamic -avoid-version
+
+libvmod_debug_la_SOURCES = \
+	vcc_if.c \
+	vcc_if.h \
+	vmod_debug.c
+
+vcc_if.c vcc_if.h: $(vmodtool) $(vmod_srcdir)/vmod.vcc
+	@PYTHON@ $(vmodtool) $(vmod_srcdir)/vmod.vcc
+
+EXTRA_DIST = vmod.vcc
+
+CLEANFILES = $(builddir)/vcc_if.c $(builddir)/vcc_if.h
diff --git a/lib/libvmod_debug/vmod.vcc b/lib/libvmod_debug/vmod.vcc
new file mode 100644
index 0000000..2e3c33e
--- /dev/null
+++ b/lib/libvmod_debug/vmod.vcc
@@ -0,0 +1,33 @@
+#-
+# Copyright (c) 2010-2011 Varnish Software AS
+# All rights reserved.
+#
+# Author: Poul-Henning Kamp <phk at FreeBSD.org>
+#
+# 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.
+
+Module debug
+Init init_function
+Function VOID panic(STRING_LIST)
+Function STRING author(ENUM { phk, des, kristian, mithrandir })
+Function VOID test_priv_call(PRIV_CALL)
+Function VOID test_priv_vcl(PRIV_VCL)
diff --git a/lib/libvmod_debug/vmod_debug.c b/lib/libvmod_debug/vmod_debug.c
new file mode 100644
index 0000000..309664a
--- /dev/null
+++ b/lib/libvmod_debug/vmod_debug.c
@@ -0,0 +1,97 @@
+/*-
+ * Copyright (c) 2012 Varnish Software AS
+ * All rights reserved.
+ *
+ * Author: Poul-Henning Kamp <phk at FreeBSD.org>
+ *
+ * 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 <stdlib.h>
+
+#include "cache/cache.h"
+
+#include "vrt.h"
+#include "vcc_if.h"
+
+void
+vmod_panic(struct sess *sp, const char *str, ...)
+{
+	va_list ap;
+	char *b;
+
+	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+	va_start(ap, str);
+	b = VRT_String(sp->req->http->ws, "PANIC: ", str, ap);
+	va_end(ap);
+	VAS_Fail("VCL", "", 0, b, 0, 2);
+}
+
+const char * __match_proto__()
+vmod_author(struct sess *sp, const char *id)
+{
+
+	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+	if (!strcmp(id, "phk"))
+		return ("Poul-Henning");
+	if (!strcmp(id, "des"))
+		return ("Dag-Erling");
+	if (!strcmp(id, "kristian"))
+		return ("Kristian");
+	if (!strcmp(id, "mithrandir"))
+		return ("Tollef");
+	WRONG("Illegal VMOD enum");
+}
+
+int
+init_function(struct vmod_priv *priv, const struct VCL_conf *cfg)
+{
+	(void)cfg;
+
+	priv->priv = strdup("FOO");
+	priv->free = free;
+	return (0);
+}
+
+void
+vmod_test_priv_call(struct sess *sp, struct vmod_priv *priv)
+{
+
+	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+	if (priv->priv == NULL) {
+		priv->priv = strdup("BAR");
+		priv->free = free;
+	} else {
+		assert(!strcmp(priv->priv, "BAR"));
+	}
+}
+
+void
+vmod_test_priv_vcl(struct sess *sp, struct vmod_priv *priv)
+{
+
+        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+        assert(!strcmp(priv->priv, "FOO"));
+}
+
diff --git a/lib/libvmod_std/vmod.vcc b/lib/libvmod_std/vmod.vcc
index 0a71e5b..3238164 100644
--- a/lib/libvmod_std/vmod.vcc
+++ b/lib/libvmod_std/vmod.vcc
@@ -26,15 +26,13 @@
 # SUCH DAMAGE.
 
 Module std
-Init init_function
-Function STRING toupper(PRIV_CALL, STRING_LIST)
-Function STRING tolower(PRIV_VCL, STRING_LIST)
+Function STRING toupper(STRING_LIST)
+Function STRING tolower(STRING_LIST)
 Function VOID set_ip_tos(INT)
 Function REAL random(REAL, REAL)
 Function VOID log(STRING_LIST)
 Function VOID syslog(INT, STRING_LIST)
 Function STRING fileread(PRIV_CALL, STRING)
-Function STRING author(ENUM { phk, des, kristian, mithrandir })
 Function DURATION duration(STRING, DURATION)
 Function INT integer(STRING, INT)
 Function VOID collect(HEADER)
diff --git a/lib/libvmod_std/vmod_std.c b/lib/libvmod_std/vmod_std.c
index 8ae9ec1..c8937f6 100644
--- a/lib/libvmod_std/vmod_std.c
+++ b/lib/libvmod_std/vmod_std.c
@@ -89,18 +89,12 @@ vmod_updown(struct sess *sp, int up, const char *s, va_list ap)
 }
 
 const char * __match_proto__()
-vmod_toupper(struct sess *sp, struct vmod_priv *priv, const char *s, ...)
+vmod_toupper(struct sess *sp, const char *s, ...)
 {
 	const char *p;
 	va_list ap;
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
-	if (priv->priv == NULL) {
-		priv->priv = strdup("BAR");
-		priv->free = free;
-	} else {
-		assert(!strcmp(priv->priv, "BAR"));
-	}
 	va_start(ap, s);
 	p = vmod_updown(sp, 1, s, ap);
 	va_end(ap);
@@ -108,29 +102,18 @@ vmod_toupper(struct sess *sp, struct vmod_priv *priv, const char *s, ...)
 }
 
 const char * __match_proto__()
-vmod_tolower(struct sess *sp, struct vmod_priv *priv, const char *s, ...)
+vmod_tolower(struct sess *sp, const char *s, ...)
 {
 	const char *p;
 	va_list ap;
 
 	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
-	assert(!strcmp(priv->priv, "FOO"));
 	va_start(ap, s);
 	p = vmod_updown(sp, 0, s, ap);
 	va_end(ap);
 	return (p);
 }
 
-int
-init_function(struct vmod_priv *priv, const struct VCL_conf *cfg)
-{
-	(void)cfg;
-
-	priv->priv = strdup("FOO");
-	priv->free = free;
-	return (0);
-}
-
 double
 vmod_random(struct sess *sp, double lo, double hi)
 {
@@ -181,21 +164,6 @@ vmod_syslog(struct sess *sp, int fac, const char *fmt, ...)
 	WS_Release(sp->req->ws, 0);
 }
 
-const char * __match_proto__()
-vmod_author(struct sess *sp, const char *id)
-{
-	(void)sp;
-	if (!strcmp(id, "phk"))
-		return ("Poul-Henning");
-	if (!strcmp(id, "des"))
-		return ("Dag-Erling");
-	if (!strcmp(id, "kristian"))
-		return ("Kristian");
-	if (!strcmp(id, "mithrandir"))
-		return ("Tollef");
-	WRONG("Illegal VMOD enum");
-}
-
 void __match_proto__()
 vmod_collect(struct sess *sp, enum gethdr_e e, const char *h)
 {



More information about the varnish-commit mailing list