diff --git a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java index 72af77c1070..ebc358a56e8 100755 --- a/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java +++ b/plugin/loadBalancer/src/main/java/org/zstack/network/service/lb/LoadBalancerApiInterceptor.java @@ -864,6 +864,14 @@ private void validate(APICreateLoadBalancerListenerMsg msg) { statusCode = LoadBalancerSystemTags.STATUS_CODE.getTokenByTag(tag, LoadBalancerSystemTags.STATUS_CODE_TOKEN); } + if (LoadBalancerSystemTags.HTTP_COMPRESS_ALGOS.isMatch(tag)) { + String compressAlgos = LoadBalancerSystemTags.HTTP_COMPRESS_ALGOS.getTokenByTag(tag, + LoadBalancerSystemTags.HTTP_COMPRESS_ALGOS_TOKEN); + if (DisableLbSupportHttpCompressAlgos.equals(compressAlgos)) { + throw new ApiMessageInterceptionException(argerr( + "could not create the loadbalancer listener with systemTag httpCompressAlgos::disable, please remove this tag")); + } + } } if ((redirectPort != null || statusCode != null) && (httpRedirectHttps == null || HttpRedirectHttps.disable.toString().equals(httpRedirectHttps))) { diff --git a/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/loadbalancer/OperateLoadBalancerCase.groovy b/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/loadbalancer/OperateLoadBalancerCase.groovy index dd346c6eb24..6ff630e57ea 100644 --- a/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/loadbalancer/OperateLoadBalancerCase.groovy +++ b/test/src/test/groovy/org/zstack/test/integration/networkservice/provider/flat/loadbalancer/OperateLoadBalancerCase.groovy @@ -13,6 +13,7 @@ import org.zstack.network.service.vip.VipNetworkServicesRefVO_ import org.zstack.network.service.vip.VipPeerL3NetworkRefVO import org.zstack.network.service.vip.VipPeerL3NetworkRefVO_ import org.zstack.network.service.virtualrouter.vyos.VyosConstants +import org.zstack.sdk.CreateLoadBalancerListenerAction import org.zstack.sdk.L3NetworkInventory import org.zstack.sdk.LoadBalancerInventory import org.zstack.sdk.LoadBalancerListenerInventory @@ -297,6 +298,18 @@ class OperateLoadBalancerCase extends SubCase { assert Q.New(VipNetworkServicesRefVO.class).eq(VipNetworkServicesRefVO_.vipUuid, vip.getUuid()).select(VipNetworkServicesRefVO_.serviceType).findValue() == VipUseForList.LB_NETWORK_SERVICE_TYPE assert Q.New(VipPeerL3NetworkRefVO.class).eq(VipPeerL3NetworkRefVO_.vipUuid, vip.getUuid()).count() == 0 + CreateLoadBalancerListenerAction invalidListenerAction = new CreateLoadBalancerListenerAction() + invalidListenerAction.loadBalancerUuid = lb.uuid + invalidListenerAction.name = "invalid-compression-listener" + invalidListenerAction.instancePort = 23 + invalidListenerAction.loadBalancerPort = 23 + invalidListenerAction.protocol = LoadBalancerConstants.LB_PROTOCOL_HTTP + invalidListenerAction.systemTags = ["httpCompressAlgos::disable"] + invalidListenerAction.sessionId = adminSession() + CreateLoadBalancerListenerAction.Result invalidListenerResult = invalidListenerAction.call() + assert invalidListenerResult.error != null + assert invalidListenerResult.error.details.contains("please remove this tag") + List httpAlgos = ["deflate","gzip", "raw-deflate"] List httpAlgosInput = ["deflate","gzip", "raw-deflate\n"] def listener = createLoadBalancerListener {