diff options
Diffstat (limited to 'src/tests/keywords/cast-ipaddr')
-rw-r--r-- | src/tests/keywords/cast-ipaddr | 442 |
1 files changed, 442 insertions, 0 deletions
diff --git a/src/tests/keywords/cast-ipaddr b/src/tests/keywords/cast-ipaddr new file mode 100644 index 0000000..f0dd356 --- /dev/null +++ b/src/tests/keywords/cast-ipaddr @@ -0,0 +1,442 @@ +# +# PRE: update if +# +update { + control:Cleartext-Password := 'hello' + request:NAS-IP-Address := 127.0.0.1 + request:Tmp-Integer-0 := 2130706433 + reply:Filter-Id := "filter" +} + +update request { + Tmp-String-0 := "%{request:NAS-IP-Address}" +} + +if (<ipaddr>Tmp-Integer-0 != NAS-IP-Address) { + update reply { + Filter-Id += 'Fail 0' + } +} + +# +# Update statements do implicit casts, so we can check +# cast results are correct, by using the update to perform +# the cast, and looking at the results. +# +update request { + Tmp-Cast-Ipaddr := 203.0.113.1 + Tmp-Cast-IPv4Prefix := 203.0.113.0/24 + Tmp-Cast-IPv4Prefix += 203.0.113.1/32 + Tmp-Cast-IPv6Addr := 2001:DB8::1 + Tmp-Cast-IPv6Addr += ::ffff:203.0.113.1 + Tmp-Cast-IPv6Prefix := 2001:DB8::/32 + Tmp-Cast-IPv6Prefix += ::ffff:203.0.113.1/128 + Tmp-Cast-IPv6Prefix += ::ffff:203.0.113.1/64 +} + +# +# IPv4 address to IPv6 address +# +update control { + Tmp-Cast-IPv6addr := &Tmp-Cast-IPaddr +} + +if (&control:Tmp-Cast-IPv6addr != ::ffff:203.0.113.1) { + update reply { + Filter-Id += 'Fail 1' + } +} + +# +# IPv6 address to IPv4 address +# +update control { + Tmp-Cast-IPaddr := &control:Tmp-Cast-IPv6addr +} + +if (&control:Tmp-Cast-IPaddr != 203.0.113.1) { + update reply { + Filter-Id += 'Fail 2' + } +} + +# +# IPv4 prefix to IPv6 prefix +# +update control { + Tmp-Cast-IPv6Prefix := &Tmp-Cast-IPv4Prefix +} + +if (&control:Tmp-Cast-IPv6Prefix != ::ffff:203.0.113.0/120) { + update reply { + Filter-Id += 'Fail 31' + } +} + +# +# IPv6 prefix to IPv4 prefix +# +update control { + Tmp-Cast-IPv4Prefix := &control:Tmp-Cast-IPv6Prefix +} + +if (&control:Tmp-Cast-IPv4Prefix != 203.0.113.1/24) { + update reply { + Filter-Id += 'Fail 4' + } +} + +# +# IPv4 prefix (32) to IPv6 address +# +update control { + Tmp-Cast-IPv6Addr := &Tmp-Cast-IPv4Prefix[1] +} + +if (&control:Tmp-Cast-IPv6Addr != ::ffff:203.0.113.1) { + update reply { + Filter-Id += 'Fail 5' + } +} + +# +# IPv6 prefix (128) to IPv4 address +# +update control { + Tmp-Cast-Ipaddr := &Tmp-Cast-IPv6Prefix[1] +} + +if (&control:Tmp-Cast-Ipaddr != 203.0.113.1/32) { + update reply { + Filter-Id += 'Fail 6' + } +} + +# +# IPv4 address to IPv6 prefix (128) +# +update control { + Tmp-Cast-IPv6Prefix := &Tmp-Cast-Ipaddr +} + +if (&control:Tmp-Cast-IPv6Prefix != ::ffff:203.0.113.1/128) { + update reply { + Filter-Id += 'Fail 7' + } +} + +# +# IPv6 address to IPv4 prefix (32) +# +update control { + Tmp-Cast-IPv4Prefix := &Tmp-Cast-IPv6Addr[1] +} + +if (&control:Tmp-Cast-IPv4Prefix != 203.0.113.1/32) { + update reply { + Filter-Id += 'Fail 8' + } +} + +# +# IPv4 address to IPv4 prefix (32) +# +update control { + Tmp-Cast-IPv4Prefix := &Tmp-Cast-Ipaddr +} + +if (&control:Tmp-Cast-IPv4Prefix != 203.0.113.1/32) { + update reply { + Filter-Id += 'Fail 9' + } +} + +# +# IPv6 address to IPv6 prefix (128) +# +update control { + Tmp-Cast-IPv6Prefix := Tmp-Cast-Ipv6addr +} + +if (&control:Tmp-Cast-IPv6Prefix != 2001:DB8::1/128) { + update reply { + Filter-Id += 'Fail 11' + } +} + +# +# IPv4 prefix (32) to IPv4 address +# +update control { + Tmp-Cast-Ipaddr := &Tmp-Cast-IPv4Prefix[1] +} + +if (&control:Tmp-Cast-Ipaddr != 203.0.113.1) { + update reply { + Filter-Id += 'Fail 12' + } +} + +# +# IPv6 prefix (128) to IPv6 address +# +update control { + Tmp-Cast-IPv6Addr := &Tmp-Cast-IPv6Prefix[1] +} + +if (&control:Tmp-Cast-IPv6Addr != ::ffff:203.0.113.1) { + update reply { + Filter-Id += 'Fail 13' + } +} + +# +# And the invalid cases... +# + +# +# IPv6 Prefix < 128 to IPv6 address +# +redundant { + group { + update control { + Tmp-Cast-IPv6Addr := Tmp-Cast-IPv6Prefix + } + update reply { + Filter-Id += 'Fail 14' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv6prefix to ipv6addr. Only /128 prefixes may be cast to IP address types') { + update reply { + Filter-Id += 'Fail 14.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv6 Prefix < 128 to IPv4 address +# +redundant { + group { + update control { + Tmp-Cast-Ipaddr := &Tmp-Cast-IPv6Prefix[2] + } + update reply { + Filter-Id += 'Fail 15' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv6prefix to ipaddr. Only /128 prefixes may be cast to IP address types') { + update reply { + Filter-Id += 'Fail 15.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv6 Prefix < 96 to IPv4 prefix (causes part of the IPv4/v6 mapping prefix to be masked off) +# +redundant { + group { + update control { + Tmp-Cast-Ipv4Prefix := &Tmp-Cast-IPv6Prefix[2] + } + update reply { + Filter-Id += 'Fail 16' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv6prefix to ipv4prefix. No IPv4-IPv6 mapping prefix') { + update reply { + Filter-Id += 'Fail 16.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv4 Prefix < 32 to IPv6 address +# +redundant { + group { + update control { + Tmp-Cast-IPv6Addr := &Tmp-Cast-IPv4Prefix + } + update reply { + Filter-Id += 'Fail 17' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv4prefix to ipv6addr. Only /32 prefixes may be cast to IP address types') { + update reply { + Filter-Id += 'Fail 17.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv4 Prefix < 32 to IPv4 address +# +redundant { + group { + update control { + Tmp-Cast-Ipaddr := &Tmp-Cast-IPv4Prefix + } + update reply { + Filter-Id += 'Fail 17' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv4prefix to ipaddr. Only /32 prefixes may be cast to IP address types') { + update reply { + Filter-Id += 'Fail 17.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv6 Prefix outside mapping range to IPv4 address +# +redundant { + group { + update control { + Tmp-Cast-Ipaddr := &Tmp-Cast-IPv6Prefix + } + update reply { + Filter-Id += 'Fail 18' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv6prefix to ipaddr. Only /128 prefixes may be cast to IP address types') { + update reply { + Filter-Id += 'Fail 18.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv6 Prefix outside mapping range to IPv4 prefix +# +redundant { + group { + update control { + Tmp-Cast-IPv4Prefix := &Tmp-Cast-IPv6Prefix + } + update reply { + Filter-Id += 'Fail 19' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv6prefix to ipv4prefix. No IPv4-IPv6 mapping prefix') { + update reply { + Filter-Id += 'Fail 19.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv6 Address outside mapping range to IPv4 address +# +redundant { + group { + update control { + Tmp-Cast-Ipaddr := &Tmp-Cast-IPv6Addr + } + update reply { + Filter-Id += 'Fail 20' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv6addr to ipaddr. No IPv4-IPv6 mapping prefix') { + update reply { + Filter-Id += 'Fail 20' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv6 Address outside mapping range to IPv4 prefix +# +redundant { + group { + update control { + Tmp-Cast-IPv4Prefix := &Tmp-Cast-IPv6Addr + } + update reply { + Filter-Id += 'Fail 21' + } + } + group { + if ("%{Module-Failure-Message}" != 'Attribute conversion failed: Invalid cast from ipv6addr to ipv4prefix. No IPv4-IPv6 mapping prefix') { + update reply { + Filter-Id += 'Fail 21.5' + } + } + update request { + Module-Failure-Message !* ANY + } + ok + } +} + +# +# IPv4 address to integer +# +update request { + Tmp-Integer-0 := &NAS-IP-Address +} + +if (Tmp-Integer-0 != 0x7f000001) { + update reply { + Filter-Id += 'Fail 22' + } +} + +# +# Check the decimal value just for the heck of it +# +if (Tmp-Integer-0 != 2130706433) { + update reply { + Filter-Id += 'Fail 23' + } +} |