# # json_encode tests # # 0. Check basic xlat parsing update control { &Tmp-String-1 := "%{json_encode:&request:[*]}" &Tmp-String-2 := "%{json_encode:&request:[*] }" &Tmp-String-3 := "%{json_encode: &request:[*]}" &Tmp-String-4 := "%{json_encode: &request:[*] }" &Tmp-String-5 := "%{json_encode: &request:[*] !&Filter-Id }" &Tmp-String-6 := "%{json_encode:&request:[*] ! }" ## Check defaults are the same as output_mode "object": &Tmp-String-7 := "%{json_object_encode:&request:[*]}" &Tmp-String-8 := "%{json_object_no_encode:&request:[*]}" } if (&control:Tmp-String-1 != '{"User-Name":{"type":"string","value":"john"},"Filter-Id":{"type":"string","value":["f1","f2"]},"NAS-Port":{"type":"integer","value":999},"Service-Type":{"type":"integer","value":"Login-User"}}') { test_fail } # Check xlat input formats if (&control:Tmp-String-1 != &control:Tmp-String-2 || \ &control:Tmp-String-1 != &control:Tmp-String-3 || \ &control:Tmp-String-1 != &control:Tmp-String-4) { test_fail } # Check defaults if (&control:Tmp-String-1 != &control:Tmp-String-7 || \ &control:Tmp-String-1 != &control:Tmp-String-8) { test_fail } if (&control:Tmp-String-5 != '{"User-Name":{"type":"string","value":"john"},"NAS-Port":{"type":"integer","value":999},"Service-Type":{"type":"integer","value":"Login-User"}}') { test_fail } if (&control:Tmp-String-6 != '') { test_fail } update control { &Tmp-String-1 !* ANY &Tmp-String-2 !* ANY &Tmp-String-3 !* ANY &Tmp-String-4 !* ANY &Tmp-String-5 !* ANY &Tmp-String-6 !* ANY &Tmp-String-7 !* ANY &Tmp-String-8 !* ANY } # 1a. Output mode "object" tests # These are unsorted dictionaries. Hopefully json-c doesn't suddenly # decide that it's going to use a different ordering of the keys... update control { &Tmp-String-1 := "%{json_object_encode:&request:[*]}" &Tmp-String-2 := "%{json_object_ex_encode:&request:[*]}" } if (&control:Tmp-String-1 != '{"User-Name":{"type":"string","value":"john"},"Filter-Id":{"type":"string","value":["f1","f2"]},"NAS-Port":{"type":"integer","value":999},"Service-Type":{"type":"integer","value":"Login-User"}}') { test_fail } if (&control:Tmp-String-2 != '{"pf:User-Name":{"type":"string","value":["john"]},"pf:Filter-Id":{"type":"string","value":["f1","f2"]},"pf:NAS-Port":{"type":"integer","value":["999"]},"pf:Service-Type":{"type":"integer","value":["1"]}}') { test_fail } # 1b. "object" empty inputs update control { &Tmp-String-1 := "%{json_object_encode:!&request:[*]}" } if (&control:Tmp-String-1 != '{}') { test_fail } update control { &Tmp-String-1 !* ANY &Tmp-String-2 !* ANY &Module-Failure-Message !* ANY } # 2a. Output mode "object_simple" tests update control { &Tmp-String-1 := "%{json_object_simple_encode:&request:[*]}" &Tmp-String-2 := "%{json_object_simple_ex_encode:&request:[*]}" } if (&control:Tmp-String-1 != '{"User-Name":"john","Filter-Id":["f1","f2"],"NAS-Port":999,"Service-Type":"Login-User"}') { test_fail } if (&control:Tmp-String-2 != '{"pf:User-Name":["john"],"pf:Filter-Id":["f1","f2"],"pf:NAS-Port":["999"],"pf:Service-Type":["1"]}') { test_fail } # 2b. "object_simple" empty inputs update control { &Tmp-String-1 := "%{json_object_simple_encode:!&request:[*]}" } if (&control:Tmp-String-1 != '{}') { test_fail } update control { &Tmp-String-1 !* ANY &Tmp-String-2 !* ANY &Module-Failure-Message !* ANY } # 3a. Output mode "array" tests update control { &Tmp-String-1 := "%{json_array_encode:&request:[*]}" &Tmp-String-2 := "%{json_array_ex_encode:&request:[*]}" } if (&control:Tmp-String-1 != '[{"name":"User-Name","type":"string","value":"john"},{"name":"Filter-Id","type":"string","value":"f1"},{"name":"Filter-Id","type":"string","value":"f2"},{"name":"NAS-Port","type":"integer","value":999},{"name":"Service-Type","type":"integer","value":"Login-User"}]') { test_fail } if (&control:Tmp-String-2 != '[{"name":"pf:User-Name","type":"string","value":["john"]},{"name":"pf:Filter-Id","type":"string","value":["f1","f2"]},{"name":"pf:NAS-Port","type":"integer","value":["999"]},{"name":"pf:Service-Type","type":"integer","value":["1"]}]') { test_fail } # 3b. "array" empty inputs update control { &Tmp-String-1 := "%{json_array_encode:!&request:[*]}" } if (&control:Tmp-String-1 != '[]') { test_fail } update control { &Tmp-String-1 !* ANY &Tmp-String-2 !* ANY &Module-Failure-Message !* ANY } # 4a. Output mode "array_of_names" tests update control { &Tmp-String-1 := "%{json_array_names_encode:&request:[*]}" &Tmp-String-2 := "%{json_array_names_ex_encode:&request:[*]}" } if (&control:Tmp-String-1 != '["User-Name","Filter-Id","Filter-Id","NAS-Port","Service-Type"]') { test_fail } if (&control:Tmp-String-2 != '["pf:User-Name","pf:Filter-Id","pf:Filter-Id","pf:NAS-Port","pf:Service-Type"]') { test_fail } # 4b. "array_of_names" empty inputs update control { &Tmp-String-1 := "%{json_array_names_encode:!&request:[*]}" } if (&control:Tmp-String-1 != '[]') { test_fail } update control { &Tmp-String-1 !* ANY &Tmp-String-2 !* ANY &Module-Failure-Message !* ANY } # 5a. Output mode "array_of_values" tests update control { &Tmp-String-1 := "%{json_array_values_encode:&request:[*]}" &Tmp-String-2 := "%{json_array_values_ex_encode:&request:[*]}" } if (&control:Tmp-String-1 != '["john","f1","f2",999,"Login-User"]') { test_fail } if (&control:Tmp-String-2 != '["john","f1","f2","999","1"]') { test_fail } # 5b. "array_of_values" empty inputs update control { &Tmp-String-1 := "%{json_array_values_encode:!&request:[*]}" } if (&control:Tmp-String-1 != '[]') { test_fail } update control { &Tmp-String-1 !* ANY &Tmp-String-2 !* ANY &Module-Failure-Message !* ANY } # Convert `make json.test` unlang update output to tests, for when # things need updating. # # cat \ # | cut -c44- \ # | sed -e 's/\\"/"/g' \ # -e 's/\s*$//' \ # -e "s/:= \"/== '/" \ # -e 's/^/if (/' \ # -e "s/\"$/') {/" \ # -e "s/$/\n test_pass\n} else {\n test_fail\n}\n/" test_pass