From: Nick Porter Date: Tue, 25 Mar 2025 09:32:00 +0000 (+0000) Subject: Add test of rlm_cache htrie driver X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1fd0efce87994c59d5d6af8947004fb86127085e;p=thirdparty%2Ffreeradius-server.git Add test of rlm_cache htrie driver --- diff --git a/src/tests/modules/cache_htrie/all.mk b/src/tests/modules/cache_htrie/all.mk new file mode 100644 index 00000000000..901f5ecf291 --- /dev/null +++ b/src/tests/modules/cache_htrie/all.mk @@ -0,0 +1,2 @@ +cache_htrie.test: + diff --git a/src/tests/modules/cache_htrie/cache-bin.attrs b/src/tests/modules/cache_htrie/cache-bin.attrs new file mode 120000 index 00000000000..a04d741a639 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-bin.attrs @@ -0,0 +1 @@ +../cache_rbtree/cache-bin.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-bin.unlang b/src/tests/modules/cache_htrie/cache-bin.unlang new file mode 120000 index 00000000000..f6c111070a9 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-bin.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-bin.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-logic.attrs b/src/tests/modules/cache_htrie/cache-logic.attrs new file mode 120000 index 00000000000..a0066073116 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-logic.attrs @@ -0,0 +1 @@ +../cache_rbtree/cache-logic.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-logic.unlang b/src/tests/modules/cache_htrie/cache-logic.unlang new file mode 120000 index 00000000000..0324cbc1458 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-logic.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-logic.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-method-bin.attrs b/src/tests/modules/cache_htrie/cache-method-bin.attrs new file mode 120000 index 00000000000..87ef7fff32f --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-method-bin.attrs @@ -0,0 +1 @@ +../cache_rbtree/cache-method-bin.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-method-bin.unlang b/src/tests/modules/cache_htrie/cache-method-bin.unlang new file mode 120000 index 00000000000..d85ce080d81 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-method-bin.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-method-bin.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-method-logic.attrs b/src/tests/modules/cache_htrie/cache-method-logic.attrs new file mode 120000 index 00000000000..a7d10459ef0 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-method-logic.attrs @@ -0,0 +1 @@ +../cache_rbtree/cache-method-logic.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-method-logic.unlang b/src/tests/modules/cache_htrie/cache-method-logic.unlang new file mode 120000 index 00000000000..48d72a8eb66 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-method-logic.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-method-logic.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-method-update.attrs b/src/tests/modules/cache_htrie/cache-method-update.attrs new file mode 120000 index 00000000000..d95f6f741f3 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-method-update.attrs @@ -0,0 +1 @@ +../cache_rbtree/cache-method-update.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-method-update.unlang b/src/tests/modules/cache_htrie/cache-method-update.unlang new file mode 120000 index 00000000000..b9f8b60d3f4 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-method-update.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-method-update.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-not-radius.unlang b/src/tests/modules/cache_htrie/cache-not-radius.unlang new file mode 120000 index 00000000000..9512b5d17b8 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-not-radius.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-not-radius.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-subnet.unlang b/src/tests/modules/cache_htrie/cache-subnet.unlang new file mode 100644 index 00000000000..6c77e97ff22 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-subnet.unlang @@ -0,0 +1,52 @@ +# Verify that subnet lookups in a htrie cache work as expected + +subrequest @dhcpv4::Discover { + control.IP-Pool.Name = 'main' + Network-Subnet := 192.168.1.10/24 + + cache_subnet.store + if (!updated) { + reject + } + + control.IP-Pool.Name := 'secondary' + Network-Subnet := 10.0.1.23/16 + + cache_subnet.store + if (!updated) { + reject + } + + control = {} + + Network-Subnet := 172.16.0.10 + cache_subnet.load + if (!notfound) { + reject + } + + Network-Subnet := 192.168.1.50/32 + cache_subnet.load + if (!updated) { + reject + } + + if (control.IP-Pool.Name != 'main') { + reject + } + + Network-Subnet := 10.0.2.50/32 + cache_subnet.load + if (!updated) { + reject + } + + if (control.IP-Pool.Name != 'secondary') { + reject + } + +} + +if (updated) { + control.Auth-Type := ::Accept +} diff --git a/src/tests/modules/cache_htrie/cache-update.attrs b/src/tests/modules/cache_htrie/cache-update.attrs new file mode 120000 index 00000000000..9c862b6ffe8 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-update.attrs @@ -0,0 +1 @@ +../cache_rbtree/cache-update.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-update.unlang b/src/tests/modules/cache_htrie/cache-update.unlang new file mode 120000 index 00000000000..04c32eaa12f --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-update.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-update.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-xlat.attrs b/src/tests/modules/cache_htrie/cache-xlat.attrs new file mode 120000 index 00000000000..6bcf20e8548 --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-xlat.attrs @@ -0,0 +1 @@ +../cache_rbtree/cache-xlat.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/cache-xlat.unlang b/src/tests/modules/cache_htrie/cache-xlat.unlang new file mode 120000 index 00000000000..d910eabbceb --- /dev/null +++ b/src/tests/modules/cache_htrie/cache-xlat.unlang @@ -0,0 +1 @@ +../cache_rbtree/cache-xlat.unlang \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/map.attrs b/src/tests/modules/cache_htrie/map.attrs new file mode 120000 index 00000000000..514bdee21a6 --- /dev/null +++ b/src/tests/modules/cache_htrie/map.attrs @@ -0,0 +1 @@ +../cache_rbtree/map.attrs \ No newline at end of file diff --git a/src/tests/modules/cache_htrie/module.conf b/src/tests/modules/cache_htrie/module.conf new file mode 100644 index 00000000000..87bc486e82d --- /dev/null +++ b/src/tests/modules/cache_htrie/module.conf @@ -0,0 +1,118 @@ +# Used by cache-logic +cache { + driver = "htrie" + + key = Filter-Id + ttl = 5 + + update { + Callback-Id := control.Callback-Id[0] + NAS-Port := control.NAS-Port[0] + control += reply + } + + add_stats = yes +} + +cache cache_update { + driver = "htrie" + + key = Filter-Id + ttl = 5 + + # + # Update sections in the cache module use very similar + # logic to update sections in unlang, except the result + # of evaluating the RHS isn't applied until the cache + # entry is merged. + # + update { + # Copy reply to session-state + session-state += reply + + # Implicit cast between types (and multivalue copy) + Filter-Id += NAS-Port[*] + + # Cache the result of an exec + Callback-Id := `/bin/echo 'echo test'` + + # Create three string values and overwrite the middle one + Login-LAT-Service += 'foo' + Login-LAT-Service += 'bar' + Login-LAT-Service += 'baz' + + Login-LAT-Service[1] := 'rab' + + # Create three string values, then remove one + Login-LAT-Node += 'foo' + Login-LAT-Node += 'bar' + Login-LAT-Node += 'baz' + + Login-LAT-Node -= 'bar' + } +} + +# +# Test some exotic keys +# +cache cache_bin_key_octets { + driver = "htrie" + + key = Class + ttl = 5 + + update { + Callback-Id := Callback-Id[0] + } +} + +cache cache_bin_key_ipaddr { + driver = "htrie" + + key = Framed-IP-Address + ttl = 5 + + update { + Callback-Id := Callback-Id[0] + } +} + +cache cache_not_radius { + driver = "htrie" + + key = parent.Gateway-IP-Address + + update { + parent.Your-IP-Address := parent.control.Your-IP-Address + outer.Framed-IP-Address := outer.control.Framed-IP-Address + } +} + +cache cache_subnet { + driver = "htrie" + + key = Network-Subnet + + update { + control.IP-Pool.Name := control.IP-Pool.Name + } +} + +cache cache_empty_update { + driver = "htrie" + + key = Filter-Id + ttl = 5 +} + +# Regression test for literal data +# Previously failed with "I-Am-A-Static-Key' expands to invalid tmpl type data-unresolved" +cache static_key { + driver = "htrie" + key = "I-Am-A-Static-Key" + ttl = 5 + + update { + Callback-Id := Callback-Id[0] + } +}