| % Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| % use this file except in compliance with the License. You may obtain a copy of |
| % the License at |
| % |
| % http://www.apache.org/licenses/LICENSE-2.0 |
| % |
| % Unless required by applicable law or agreed to in writing, software |
| % distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| % WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| % License for the specific language governing permissions and limitations under |
| % the License. |
| |
| -module(ctrace_dsl_test). |
| |
| -include_lib("eunit/include/eunit.hrl"). |
| |
| simple_parse_and_compile_test() -> |
| Filter = "(#{'http.method' := Method}) when Method == get -> 1.0", |
| ctrace_dsl:compile("foo", Filter), |
| ?assertEqual(1.0, run_filter("foo", #{'http.method' => get})), |
| ?assertEqual(false, run_filter("foo", #{'httpd.method' => put})). |
| |
| empty_map_test() -> |
| Filter = "(#{}) -> true", |
| ctrace_dsl:compile("foo", Filter), |
| ?assertEqual(true, run_filter("foo", #{})), |
| ?assertEqual(true, run_filter("foo", #{foo => bar})), |
| ?assertEqual(false, run_filter("foo", nil)). |
| |
| return_false_test() -> |
| Filter = "(#{}) -> false", |
| ctrace_dsl:compile("foo", Filter), |
| ?assertEqual(false, run_filter("foo", #{})), |
| ?assertEqual(false, run_filter("foo", nil)). |
| |
| return_float_test() -> |
| Filter = "(#{}) -> 0.2", |
| ctrace_dsl:compile("foo", Filter), |
| ?assertEqual(0.2, run_filter("foo", #{})), |
| ?assertEqual(false, run_filter("foo", nil)). |
| |
| bad_filter_body_is_list_test() -> |
| Filter = "(#{}) -> []", |
| Error = "Unsupported return value '[]'", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| bad_filter_body_has_calls_test() -> |
| Filter = "(#{}) -> [module:function()]", |
| Error = "Unsupported return value '[module:function()]'", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| bad_arg_list_too_few_test() -> |
| Filter = "() -> true", |
| Error = "The arity of the filter function should be 1", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| bad_arg_list_too_many_test() -> |
| Filter = "(#{}, foo) -> true", |
| Error = "The arity of the filter function should be 1", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| bad_arg_type_test() -> |
| Filters = [ |
| "(atom) -> true", |
| "([atom]) -> true", |
| "(1) -> true", |
| "(1.0) -> true" |
| ], |
| Error = "The only argument of the filter should be map", |
| lists:foreach( |
| fun(Filter) -> |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)) |
| end, |
| Filters |
| ). |
| |
| bad_map_association_test() -> |
| Filter = "(#{foo => Var}) -> true", |
| Error = "Only #{field := Var} syntax is supported in the header", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| bad_field_variable_test() -> |
| Filter = "(#{Var := Val}) -> false", |
| Error = "Only atoms are supported as field names in the header", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| bad_field_match_test() -> |
| Filter = "(#{foo := 2}) -> true", |
| Error = |
| "Only capitalized names are supported" |
| " as matching variables in the header", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| repeated_variable_test() -> |
| Filter = "(#{foo := Val, bar := Val}) -> true", |
| Error = "'Val' variable is already in use", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| code_coverage1_test() -> |
| Filter = "foo(#{}) -> bar", |
| Error = "Unknown shape of a filter function", |
| ?assertThrow({error, Error}, ctrace_dsl:compile("foo", Filter)). |
| |
| code_coverage2_test() -> |
| Filter = "(#{}) -> true", |
| ?assertMatch([_ | _], ctrace_dsl:source("foo", Filter)). |
| |
| run_filter(OperationId, Value) -> |
| ModName = ctrace_config:filter_module_name(OperationId), |
| ModName:match(Value). |