]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add test of rlm_cache htrie driver
authorNick Porter <nick@portercomputing.co.uk>
Tue, 25 Mar 2025 09:32:00 +0000 (09:32 +0000)
committerNick Porter <nick@portercomputing.co.uk>
Tue, 25 Mar 2025 11:08:54 +0000 (11:08 +0000)
19 files changed:
src/tests/modules/cache_htrie/all.mk [new file with mode: 0644]
src/tests/modules/cache_htrie/cache-bin.attrs [new symlink]
src/tests/modules/cache_htrie/cache-bin.unlang [new symlink]
src/tests/modules/cache_htrie/cache-logic.attrs [new symlink]
src/tests/modules/cache_htrie/cache-logic.unlang [new symlink]
src/tests/modules/cache_htrie/cache-method-bin.attrs [new symlink]
src/tests/modules/cache_htrie/cache-method-bin.unlang [new symlink]
src/tests/modules/cache_htrie/cache-method-logic.attrs [new symlink]
src/tests/modules/cache_htrie/cache-method-logic.unlang [new symlink]
src/tests/modules/cache_htrie/cache-method-update.attrs [new symlink]
src/tests/modules/cache_htrie/cache-method-update.unlang [new symlink]
src/tests/modules/cache_htrie/cache-not-radius.unlang [new symlink]
src/tests/modules/cache_htrie/cache-subnet.unlang [new file with mode: 0644]
src/tests/modules/cache_htrie/cache-update.attrs [new symlink]
src/tests/modules/cache_htrie/cache-update.unlang [new symlink]
src/tests/modules/cache_htrie/cache-xlat.attrs [new symlink]
src/tests/modules/cache_htrie/cache-xlat.unlang [new symlink]
src/tests/modules/cache_htrie/map.attrs [new symlink]
src/tests/modules/cache_htrie/module.conf [new file with mode: 0644]

diff --git a/src/tests/modules/cache_htrie/all.mk b/src/tests/modules/cache_htrie/all.mk
new file mode 100644 (file)
index 0000000..901f5ec
--- /dev/null
@@ -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 (symlink)
index 0000000..a04d741
--- /dev/null
@@ -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 (symlink)
index 0000000..f6c1110
--- /dev/null
@@ -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 (symlink)
index 0000000..a006607
--- /dev/null
@@ -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 (symlink)
index 0000000..0324cbc
--- /dev/null
@@ -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 (symlink)
index 0000000..87ef7ff
--- /dev/null
@@ -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 (symlink)
index 0000000..d85ce08
--- /dev/null
@@ -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 (symlink)
index 0000000..a7d1045
--- /dev/null
@@ -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 (symlink)
index 0000000..48d72a8
--- /dev/null
@@ -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 (symlink)
index 0000000..d95f6f7
--- /dev/null
@@ -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 (symlink)
index 0000000..b9f8b60
--- /dev/null
@@ -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 (symlink)
index 0000000..9512b5d
--- /dev/null
@@ -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 (file)
index 0000000..6c77e97
--- /dev/null
@@ -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 (symlink)
index 0000000..9c862b6
--- /dev/null
@@ -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 (symlink)
index 0000000..04c32ea
--- /dev/null
@@ -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 (symlink)
index 0000000..6bcf20e
--- /dev/null
@@ -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 (symlink)
index 0000000..d910eab
--- /dev/null
@@ -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 (symlink)
index 0000000..514bdee
--- /dev/null
@@ -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 (file)
index 0000000..87bc486
--- /dev/null
@@ -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]
+       }
+}