@@ -849,3 +849,138 @@ location /sleep {
849849]
850850--- no_error_log
851851[error]
852+
853+
854+
855+ === TEST 17: dynamic etcd update with consul discovery (metadata_match)
856+ --- yaml_config eval: $::yaml_config
857+ --- apisix_yaml
858+ # 保持初始为空,由 /add 动态创建
859+ #END
860+ --- config
861+ location /v1/agent {
862+ proxy_pass http://127.0.0.1:8500;
863+ }
864+ location /add {
865+ content_by_lua_block {
866+ local t = require("lib.test_admin").test
867+ local code, body = t('/apisix/admin/routes/1001',
868+ ngx.HTTP_PUT,
869+ [[{
870+ "uri": "/*",
871+ "upstream": {
872+ "service_name": "service-b",
873+ "type": "roundrobin",
874+ "discovery_type": "consul",
875+ "discovery_args": {
876+ "metadata_match": {
877+ "version": ["v2", "v3"]
878+ }
879+ }
880+ }
881+ }]],
882+ nil
883+ )
884+ ngx.status = code
885+ ngx.say(body)
886+ }
887+ }
888+ location /update {
889+ content_by_lua_block {
890+ local t = require("lib.test_admin").test
891+ local code, body = t('/apisix/admin/routes/1001',
892+ ngx.HTTP_PUT,
893+ [[{
894+ "uri": "/*",
895+ "upstream": {
896+ "service_name": "service-b",
897+ "type": "roundrobin",
898+ "discovery_type": "consul",
899+ "discovery_args": {
900+ "metadata_match": {
901+ "version": ["v3"]
902+ }
903+ }
904+ }
905+ }]],
906+ nil
907+ )
908+ ngx.status = code
909+ ngx.say(body)
910+ }
911+ }
912+ location /delete {
913+ content_by_lua_block {
914+ local t = require("lib.test_admin").test
915+ local code, body = t('/apisix/admin/routes/1001', ngx.HTTP_DELETE)
916+ ngx.status = code
917+ ngx.say(body)
918+ }
919+ }
920+ location /sleep {
921+ content_by_lua_block {
922+ ngx.sleep(1)
923+ ngx.say("ok")
924+ }
925+ }
926+ --- timeout: 10
927+ --- pipelined_requests eval
928+ [
929+ # 1. 注册服务实例(四个版本)
930+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b1\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30611,\"Meta\":{\"version\":\"v1\"}}",
931+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b2\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30612,\"Meta\":{\"version\":\"v2\"}}",
932+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b3\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30613,\"Meta\":{\"version\":\"v3\"}}",
933+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b4\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30614,\"Meta\":{\"version\":\"v4\"}}",
934+
935+ "GET /sleep",
936+
937+ "GET /add",
938+ "GET /hello?first",
939+ "GET /hello?second",
940+
941+ "GET /update",
942+ "GET /hello?updated",
943+
944+ "GET /delete",
945+ "GET /hello?deleted",
946+
947+ "PUT /v1/agent/service/deregister/service-b1",
948+ "PUT /v1/agent/service/deregister/service-b2",
949+ "PUT /v1/agent/service/deregister/service-b3",
950+ "PUT /v1/agent/service/deregister/service-b4"
951+ ]
952+ --- response_body_like eval
953+ [
954+ qr//,
955+ qr//,
956+ qr//,
957+ qr//,
958+
959+ qr/ok\n/,
960+
961+ qr/passed\n/,
962+ qr/[2-3]/,
963+ qr/[2-3]/,
964+
965+ qr/passed\n/,
966+ qr/3/,
967+
968+ qr/passed\n/,
969+ qr/404 Route Not Found/,
970+
971+ qr//,
972+ qr//,
973+ qr//,
974+ qr//
975+ ]
976+ --- error_code eval
977+ [
978+ 200,200,200,200,
979+ 200,
980+ 201,200,200,
981+ 200,200,
982+ 200,404,
983+ 200,200,200,200
984+ ]
985+ --- no_error_log
986+ [error]
0 commit comments