diff --git a/apisix/http/router/radixtree_host_uri.lua b/apisix/http/router/radixtree_host_uri.lua index ab3ad15513ab..25dec6589fb9 100644 --- a/apisix/http/router/radixtree_host_uri.lua +++ b/apisix/http/router/radixtree_host_uri.lua @@ -56,6 +56,7 @@ local function push_host_router(route, host_routes, only_uri_routes) local radixtree_route = { paths = route.value.uris or route.value.uri, methods = route.value.methods, + priority = route.value.priority, remote_addrs = route.value.remote_addrs or route.value.remote_addr, vars = route.value.vars, diff --git a/t/router/radixtree-host-uri-priority.t b/t/router/radixtree-host-uri-priority.t new file mode 100644 index 000000000000..a05b619fa065 --- /dev/null +++ b/t/router/radixtree-host-uri-priority.t @@ -0,0 +1,173 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. +# +use t::APISIX 'no_plan'; + +repeat_each(1); +log_level('info'); +worker_connections(256); +no_root_location(); +no_shuffle(); + +our $yaml_config = <<_EOC_; +apisix: + node_listen: 1984 + config_center: yaml + enable_admin: false + router: + http: 'radixtree_host_uri' + admin_key: null +_EOC_ + +run_tests(); + +__DATA__ + +=== TEST 1: hit routes(priority: 1 + priority: 2) +--- yaml_config eval: $::yaml_config +--- apisix_yaml +routes: + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1981": 1 + type: roundrobin + priority: 1 + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1980": 1 + type: roundrobin + priority: 2 +#END + +--- request +GET /server_port +--- more_headers +Host: test.com +--- response_body eval +qr/1980/ +--- error_log +use config_center: yaml +--- no_error_log +[error] + + + +=== TEST 2: hit routes(priority: 2 + priority: 1) +--- yaml_config eval: $::yaml_config +--- apisix_yaml +routes: + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1981": 1 + type: roundrobin + priority: 2 + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1980": 1 + type: roundrobin + priority: 1 +#END + +--- request +GET /server_port +--- more_headers +Host: test.com +--- response_body eval +qr/1981/ +--- error_log +use config_center: yaml +--- no_error_log +[error] + + + +=== TEST 3: hit routes(priority: default_value + priority: 1) +--- yaml_config eval: $::yaml_config +--- apisix_yaml +routes: + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1981": 1 + type: roundrobin + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1980": 1 + type: roundrobin + priority: 1 +#END + +--- request +GET /server_port +--- more_headers +Host: test.com +--- response_body eval +qr/1980/ +--- error_log +use config_center: yaml +--- no_error_log +[error] + + + +=== TEST 4: hit routes(priority: 1 + priority: default_value) +--- yaml_config eval: $::yaml_config +--- apisix_yaml +routes: + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1981": 1 + type: roundrobin + priority: 1 + - + uri: /server_port + host: test.com + upstream: + nodes: + "127.0.0.1:1980": 1 + type: roundrobin +#END + +--- request +GET /server_port +--- more_headers +Host: test.com +--- response_body eval +qr/1981/ +--- error_log +use config_center: yaml +--- no_error_log +[error]