@@ -849,3 +849,149 @@ 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
857+ apisix:
858+ node_listen: 1984
859+ deployment:
860+ admin:
861+ admin_key: null
862+ discovery:
863+ consul:
864+ servers:
865+ - "http://127.0.0.1:8500"
866+ #END
867+ --- extra_init_by_lua
868+ local health_check = require("resty.etcd.health_check")
869+ health_check.get_target_status = function()
870+ return true
871+ end
872+ --- config
873+ location /v1/agent {
874+ proxy_pass http://127.0.0.1:8500;
875+ }
876+ location /add {
877+ content_by_lua_block {
878+ local t = require("lib.test_admin").test
879+ local code, body = t('/apisix/admin/routes/1001',
880+ ngx.HTTP_PUT,
881+ [[{
882+ "uri": "/*",
883+ "upstream": {
884+ "service_name": "service-b",
885+ "type": "roundrobin",
886+ "discovery_type": "consul",
887+ "discovery_args": {
888+ "metadata_match": {
889+ "version": ["v2", "v3"]
890+ }
891+ }
892+ }
893+ }]],
894+ nil
895+ )
896+ ngx.status = code
897+ ngx.say(body)
898+ }
899+ }
900+ location /update {
901+ content_by_lua_block {
902+ local t = require("lib.test_admin").test
903+ local code, body = t('/apisix/admin/routes/1001',
904+ ngx.HTTP_PUT,
905+ [[{
906+ "uri": "/*",
907+ "upstream": {
908+ "service_name": "service-b",
909+ "type": "roundrobin",
910+ "discovery_type": "consul",
911+ "discovery_args": {
912+ "metadata_match": {
913+ "version": ["v3"]
914+ }
915+ }
916+ }
917+ }]],
918+ nil
919+ )
920+ ngx.status = code
921+ ngx.say(body)
922+ }
923+ }
924+ location /delete {
925+ content_by_lua_block {
926+ local t = require("lib.test_admin").test
927+ local code, body = t('/apisix/admin/routes/1001', ngx.HTTP_DELETE)
928+ ngx.status = code
929+ ngx.say(body)
930+ }
931+ }
932+ location /sleep {
933+ content_by_lua_block {
934+ ngx.sleep(1)
935+ ngx.say("ok")
936+ }
937+ }
938+ --- timeout: 10
939+ --- pipelined_requests eval
940+ [
941+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b1\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30511,\"Meta\":{\"version\":\"v1\"}}",
942+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b2\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30512,\"Meta\":{\"version\":\"v2\"}}",
943+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b3\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30513,\"Meta\":{\"version\":\"v3\"}}",
944+ "PUT /v1/agent/service/register\n" . "{\"ID\":\"service-b4\",\"Name\":\"service-b\",\"Address\":\"127.0.0.1\",\"Port\":30514,\"Meta\":{\"version\":\"v4\"}}",
945+
946+ "GET /sleep",
947+
948+ "GET /add",
949+ "GET /hello?run1",
950+ "GET /hello?run2",
951+
952+ "GET /update",
953+ "GET /hello?updated",
954+
955+ "GET /delete",
956+ "GET /hello?deleted",
957+
958+ "PUT /v1/agent/service/deregister/service-b1",
959+ "PUT /v1/agent/service/deregister/service-b2",
960+ "PUT /v1/agent/service/deregister/service-b3",
961+ "PUT /v1/agent/service/deregister/service-b4"
962+ ]
963+ --- response_body_like eval
964+ [
965+ qr//,
966+ qr//,
967+ qr//,
968+ qr//,
969+
970+ qr/ok\n/,
971+
972+ qr/passed\n/,
973+ qr/[2-3]/,
974+ qr/[2-3]/,
975+
976+ qr/passed\n/,
977+ qr/3/,
978+
979+ qr/passed\n/,
980+ qr/404 Route Not Found/,
981+
982+ qr//,
983+ qr//,
984+ qr//,
985+ qr//
986+ ]
987+ --- error_code eval
988+ [
989+ 200,200,200,200,
990+ 200,
991+ 201,200,200,
992+ 200,200,
993+ 200,404,
994+ 200,200,200,200
995+ ]
996+ --- no_error_log
997+ [error]
0 commit comments