| # | 
 | # 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'; | 
 |  | 
 | add_block_preprocessor(sub { | 
 |     my ($block) = @_; | 
 |  | 
 |     if (!defined $block->request) { | 
 |         $block->set_value("request", "GET /t"); | 
 |     } | 
 |  | 
 | }); | 
 |  | 
 | run_tests(); | 
 |  | 
 | __DATA__ | 
 |  | 
 | === TEST 1: json body with duplicate key | 
 | --- config | 
 |     location /t { | 
 |         content_by_lua_block { | 
 |             local json = require("toolkit.json") | 
 |             local t = require("lib.test_admin").test | 
 |             local data = { | 
 |                 plugins = { | 
 |                     ["request-validation"] = { | 
 |                         body_schema = { | 
 |                             type = "object", | 
 |                             properties = { | 
 |                                 k = {pattern = "^good$"} | 
 |                             } | 
 |                         } | 
 |                     } | 
 |                 }, | 
 |                 upstream = { | 
 |                     nodes = { | 
 |                         ["127.0.0.1:1980"] = 1 | 
 |                     }, | 
 |                     type = "roundrobin" | 
 |                 }, | 
 |                 uri = "/echo" | 
 |             } | 
 |             local code, body = t('/apisix/admin/routes/1', | 
 |                  ngx.HTTP_PUT, | 
 |                  json.encode(data) | 
 |             ) | 
 |  | 
 |             if code >= 300 then | 
 |                 ngx.status = code | 
 |             end | 
 |             ngx.say(body) | 
 |         } | 
 |     } | 
 | --- response_body | 
 | passed | 
 |  | 
 |  | 
 |  | 
 | === TEST 2: hit | 
 | --- request | 
 | POST /echo | 
 | {"k":"bad","k":"good"} | 
 | --- response_body chomp | 
 | {"k":"good"} |