[master] 56fe060 extend test coverage for vmod named arguments and defaults

Nils Goroll nils.goroll at uplex.de
Sun Aug 28 14:02:07 CEST 2016


commit 56fe060cf10cd258fdbeab8193cb20cceb5d9736
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Sun Aug 28 13:58:55 2016 +0200

    extend test coverage for vmod named arguments and defaults

diff --git a/bin/varnishtest/tests/m00019.vtc b/bin/varnishtest/tests/m00019.vtc
index 1b32afe..825799c 100644
--- a/bin/varnishtest/tests/m00019.vtc
+++ b/bin/varnishtest/tests/m00019.vtc
@@ -1,4 +1,4 @@
-varnishtest "Test var args"
+varnishtest "Test vmod functions/contructor named arguments and defaults"
 
 server s1 {
 	rxreq
@@ -8,6 +8,15 @@ server s1 {
 varnish v1 -vcl+backend {
 	import debug;
 
+	sub vcl_init {
+		new obj0 = debug.obj();
+		new obj1 = debug.obj("only_argument");
+		new obj2 = debug.obj("string", one);
+		new obj3 = debug.obj(string="s_two", number=two);
+		new obj4 = debug.obj(number=three, string="s_three");
+		new obj5 = debug.obj(number=three);
+	}
+
 	sub vcl_deliver {
 		set resp.http.foo1 = debug.argtest("1", 2.1, "3a");
 		set resp.http.foo2 = debug.argtest("1", two=2.2, three="3b");
@@ -15,6 +24,13 @@ varnish v1 -vcl+backend {
 		set resp.http.foo4 = debug.argtest("1", 2.4, three="3d");
 		set resp.http.foo5 = debug.argtest("1", 2.5);
 		set resp.http.foo6 = debug.argtest("1", four=6);
+
+		set resp.http.obj0 = obj0.string() + ", " + obj0.number();
+		set resp.http.obj1 = obj1.string() + ", " + obj1.number();
+		set resp.http.obj2 = obj2.string() + ", " + obj2.number();
+		set resp.http.obj3 = obj3.string() + ", " + obj3.number();
+		set resp.http.obj4 = obj4.string() + ", " + obj4.number();
+		set resp.http.obj5 = obj5.string() + ", " + obj5.number();
 	}
 } -start
 
@@ -28,6 +44,13 @@ client c1 {
 	expect resp.http.foo4 == "1 2.4 3d , 4"
 	expect resp.http.foo5 == "1 2.5 3 , 4"
 	expect resp.http.foo6 == "1 2 3 , 6"
+
+	expect resp.http.obj0 == "default, one"
+	expect resp.http.obj1 == "only_argument, one"
+	expect resp.http.obj2 == "string, one"
+	expect resp.http.obj3 == "s_two, two"
+	expect resp.http.obj4 == "s_three, three"
+	expect resp.http.obj5 == "default, three"
 } -run
 
 delay .1
diff --git a/lib/libvmod_debug/vmod.vcc b/lib/libvmod_debug/vmod.vcc
index b057ff2..a3699bd 100644
--- a/lib/libvmod_debug/vmod.vcc
+++ b/lib/libvmod_debug/vmod.vcc
@@ -71,7 +71,7 @@ $Function BACKEND no_backend()
 
 Fails at backend selection
 
-$Object obj(STRING, ENUM { one, two, three } number="one")
+$Object obj(STRING string="default", ENUM { one, two, three } number="one")
 
 Test object
 
@@ -81,6 +81,14 @@ $Method VOID .enum(ENUM { phk, des, kristian, mithrandir, martin })
 Testing that enums work as part of object and that the parser isn't
 (too) buggy.
 
+$Method STRING .string()
+
+getter for string
+
+$Method STRING .number()
+
+getter for number
+
 $Method STRING .foo(STRING why)
 
 Foo indeed.
diff --git a/lib/libvmod_debug/vmod_debug_obj.c b/lib/libvmod_debug/vmod_debug_obj.c
index 2511f9a..0028de0 100644
--- a/lib/libvmod_debug/vmod_debug_obj.c
+++ b/lib/libvmod_debug/vmod_debug_obj.c
@@ -39,6 +39,7 @@ struct vmod_debug_obj {
 	unsigned		magic;
 #define VMOD_DEBUG_OBJ_MAGIC	0xccbd9b77
 	int foobar;
+	const char *string, *number;
 };
 
 VCL_VOID
@@ -49,14 +50,14 @@ vmod_obj__init(VRT_CTX, struct vmod_debug_obj **op,
 
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	(void)vcl_name;
-	(void)s;
-	(void)e;
 	AN(op);
 	AZ(*op);
 	ALLOC_OBJ(o, VMOD_DEBUG_OBJ_MAGIC);
 	AN(o);
 	*op = o;
 	o->foobar = 42;
+	o->string = s;
+	o->number = e;
 	AN(*op);
 }
 
@@ -99,3 +100,23 @@ vmod_obj_date(VRT_CTX, struct vmod_debug_obj *o)
 	assert(o->foobar == 42);
 	return (21.4);
 }
+
+VCL_STRING __match_proto__()
+vmod_obj_string(VRT_CTX, struct vmod_debug_obj *o)
+{
+
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(o, VMOD_DEBUG_OBJ_MAGIC);
+	assert(o->foobar == 42);
+	return (o->string);
+}
+
+VCL_STRING __match_proto__()
+vmod_obj_number(VRT_CTX, struct vmod_debug_obj *o)
+{
+
+	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+	CHECK_OBJ_NOTNULL(o, VMOD_DEBUG_OBJ_MAGIC);
+	assert(o->foobar == 42);
+	return (o->number);
+}



More information about the varnish-commit mailing list