From: HuabingZhao Date: Mon, 26 Feb 2018 08:33:57 +0000 (+0800) Subject: Support HTTPS service registration X-Git-Tag: v1.1.0~5 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=342e59ba8f874e692fb508d975448e6d0abaf266;hp=97e4489fd90faf3addec24ebfe6ca87f191d99ec;p=msb%2Fjava-sdk.git Support HTTPS service registration Issue-ID: MSB-147 Change-Id: I2fa11b7869cdc512a64497482e814970b701ce33 Signed-off-by: HuabingZhao --- diff --git a/src/main/java/org/onap/msb/sdk/discovery/entity/MicroServiceInfo.java b/src/main/java/org/onap/msb/sdk/discovery/entity/MicroServiceInfo.java index 5b44369..c14d67a 100644 --- a/src/main/java/org/onap/msb/sdk/discovery/entity/MicroServiceInfo.java +++ b/src/main/java/org/onap/msb/sdk/discovery/entity/MicroServiceInfo.java @@ -33,6 +33,7 @@ public class MicroServiceInfo extends Service implements Serializable { buf.append("url:").append(getUrl()).append("\r\n"); buf.append("protocol:").append(getProtocol()).append("\r\n"); buf.append("visualRange:").append(getVisualRange()).append("\r\n"); + buf.append("enable_ssl:").append(isEnable_ssl()).append("\r\n"); buf.append("nodes:").append("\r\n"); for (Node nodeInstace : this.getNodes()) { diff --git a/src/main/java/org/onap/msb/sdk/discovery/entity/Service.java b/src/main/java/org/onap/msb/sdk/discovery/entity/Service.java index 306e59b..6a5a883 100644 --- a/src/main/java/org/onap/msb/sdk/discovery/entity/Service.java +++ b/src/main/java/org/onap/msb/sdk/discovery/entity/Service.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright 2017 ZTE, Inc. and others. + * Copyright 2017-2018 ZTE, Inc. and others. * * Licensed 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 @@ -21,164 +21,194 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown = true) public class Service implements Serializable { - private static final long serialVersionUID = 1L; - - private String serviceName; - - private String version = ""; - - private String url = ""; - - //REST、UI - private String protocol = ""; - //0: External 1: Internal - private String visualRange = "1"; - - private String lb_policy = ""; - - private String path = ""; - - private Set nodes; - - private List metadata; - - public String getPath() { - return path; - } - - /** - * The customized publish path of this service. - * If this parameter is specified when registering the service, the service will be published to api gateway under this path. - * Otherwise, the service will be published to api gateway using a fixed format: api/{serviceName} /{version}. - * Do not specific a path unless you know what you're doing. - * @param path - */ - public void setPath(String path) { - this.path = path; - } - - /** - * Load balancing method used when MSB routes the service requests. Currently, Round robin and IP hash are supported. - * @return - */ - public String getLb_policy() { - return lb_policy; - } - - /** - * Load balancing method used when MSB routes the service requests. Currently, Round robin and IP hash are supported. - * @param lb_policy (round-robin,ip_hash) - * @return void - */ - public void setLb_policy(String lb_policy) { - this.lb_policy = lb_policy; - } - - public List getMetadata() { - return metadata; - } - - public void setMetadata(List metadata) { - this.metadata = metadata; - } - - /** - * The service instance nodes - */ - public Set getNodes() { - return nodes; - } - - /** - * The service instance nodes - * @param nodes - * @return void - */ - public void setNodes(Set nodes) { - this.nodes = nodes; - } - - /** - * An unique name of the service, it should be constant so the service consumer can access the service. - */ - public String getServiceName() { - return serviceName; - } - - /** - * An unique name of the service, it should be constant so the service consumer can access the service. - * @param serviceName - */ - public void setServiceName(String serviceName) { - this.serviceName = serviceName; - } - - /** - * Service version. Only the major version of service is used in the URI. - * @return - */ - public String getVersion() { - return version; - } - - /** - * Service version. Only the major version of service is used in the URI. - * @param version - */ - public void setVersion(String version) { - this.version = version; - } - - /** - * The actual URL of the service to be registered. - * @return - */ - public String getUrl() { - return url; - } - - /** - * The actual URL of the service to be registered. - * @param url - * @return void - */ - public void setUrl(String url) { - this.url = url; - } - - /** - * supported protocols: 'REST', 'UI' - * @return - */ - public String getProtocol() { - return protocol; - } - - /** - * supported protocols: 'REST', 'UI' - * @param protocol - */ - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - /** - * Visibility of the service. - * External(can be accessed by external systems):0 - * Internal(can only be accessed by ONAP microservices):1 - */ - public String getVisualRange() { - return visualRange; - } - - /** - * Visibility of the service. - * External(can be accessed by external systems):0 - * Internal(can only be accessed by ONAP microservices):1 - * @param visualRange - */ - public void setVisualRange(String visualRange) { - this.visualRange = visualRange; - } + private static final long serialVersionUID = 1L; + + private String serviceName; + + private String version = ""; + + private String url = ""; + + // REST、UI + private String protocol = ""; + // 0: External 1: Internal + private String visualRange = "1"; + + private String lb_policy = ""; + + private String path = ""; + + private Set nodes; + + private List metadata; + + private boolean enable_ssl = false; + + /** + * @return the enable_ssl + */ + public boolean isEnable_ssl() { + return enable_ssl; + } + + /** + * @param enable_ssl the enable_ssl to set + */ + public void setEnable_ssl(boolean enable_ssl) { + this.enable_ssl = enable_ssl; + } + + public String getPath() { + return path; + } + + /** + * The customized publish path of this service. If this parameter is specified when registering + * the service, the service will be published to api gateway under this path. Otherwise, the + * service will be published to api gateway using a fixed format: api/{serviceName} /{version}. + * Do not specific a path unless you know what you're doing. + * + * @param path + */ + public void setPath(String path) { + this.path = path; + } + + /** + * Load balancing method used when MSB routes the service requests. Currently, Round robin and + * IP hash are supported. + * + * @return + */ + public String getLb_policy() { + return lb_policy; + } + + /** + * Load balancing method used when MSB routes the service requests. Currently, Round robin and + * IP hash are supported. + * + * @param lb_policy (round-robin,ip_hash) + * @return void + */ + public void setLb_policy(String lb_policy) { + this.lb_policy = lb_policy; + } + + public List getMetadata() { + return metadata; + } + + public void setMetadata(List metadata) { + this.metadata = metadata; + } + + /** + * The service instance nodes + */ + public Set getNodes() { + return nodes; + } + + /** + * The service instance nodes + * + * @param nodes + * @return void + */ + public void setNodes(Set nodes) { + this.nodes = nodes; + } + + /** + * An unique name of the service, it should be constant so the service consumer can access the + * service. + */ + public String getServiceName() { + return serviceName; + } + + /** + * An unique name of the service, it should be constant so the service consumer can access the + * service. + * + * @param serviceName + */ + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + + /** + * Service version. Only the major version of service is used in the URI. + * + * @return + */ + public String getVersion() { + return version; + } + + /** + * Service version. Only the major version of service is used in the URI. + * + * @param version + */ + public void setVersion(String version) { + this.version = version; + } + + /** + * The actual URL of the service to be registered. + * + * @return + */ + public String getUrl() { + return url; + } + + /** + * The actual URL of the service to be registered. + * + * @param url + * @return void + */ + public void setUrl(String url) { + this.url = url; + } + + /** + * supported protocols: 'REST', 'UI' + * + * @return + */ + public String getProtocol() { + return protocol; + } + + /** + * supported protocols: 'REST', 'UI' + * + * @param protocol + */ + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + /** + * Visibility of the service. External(can be accessed by external systems):0 Internal(can only + * be accessed by ONAP microservices):1 + */ + public String getVisualRange() { + return visualRange; + } + + /** + * Visibility of the service. External(can be accessed by external systems):0 Internal(can only + * be accessed by ONAP microservices):1 + * + * @param visualRange + */ + public void setVisualRange(String visualRange) { + this.visualRange = visualRange; + } } diff --git a/src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java b/src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java index e7f7cd5..7b7c6af 100644 --- a/src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java +++ b/src/main/java/org/onap/msb/sdk/httpclient/builder/impl/ClientRetrofitObjectBuilder.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright 2017 ZTE, Inc. and others. + * Copyright 2017-2018 ZTE, Inc. and others. * * Licensed 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 @@ -41,141 +41,138 @@ import retrofit2.Retrofit; public class ClientRetrofitObjectBuilder implements IRetrofitObjectBuilder { - private RetrofitServiceHandlerContext context; + private RetrofitServiceHandlerContext context; - public ClientRetrofitObjectBuilder(RetrofitServiceHandlerContext context) { - super(); - this.context = context; - } + public ClientRetrofitObjectBuilder(RetrofitServiceHandlerContext context) { + super(); + this.context = context; + } - /* - * (non-Javadoc) - * - * @see - * com.zte.ums.zenap.httpclient.retrofit.builder.IRetrofitObjectBuilder#buildRetrofitObject(java. - * util.concurrent.atomic.AtomicReference) - */ - @Override - public Map buildRetrofitObject( - AtomicReference> endPointToRetrofitRef, - ServiceHttpEndPointObject lastEndPoint) throws RetrofitServiceRuntimeException { + /* + * (non-Javadoc) + * + * @see + * com.zte.ums.zenap.httpclient.retrofit.builder.IRetrofitObjectBuilder#buildRetrofitObject( + * java. util.concurrent.atomic.AtomicReference) + */ + @Override + public Map buildRetrofitObject( + AtomicReference> endPointToRetrofitRef, + ServiceHttpEndPointObject lastEndPoint) throws RetrofitServiceRuntimeException { - Map srvEndPointToRetrofit = endPointToRetrofitRef.get(); - if (srvEndPointToRetrofit == null) { - srvEndPointToRetrofit = new LinkedHashMap<>(); - try { + Map srvEndPointToRetrofit = endPointToRetrofitRef.get(); + if (srvEndPointToRetrofit == null) { + srvEndPointToRetrofit = new LinkedHashMap<>(); + try { - ServiceHttpEndPointBeanObject srvhttpEndPointBeanObject = - context.getServiceHttpEndPointBeanObject(); + ServiceHttpEndPointBeanObject srvhttpEndPointBeanObject = context.getServiceHttpEndPointBeanObject(); - // MsbClientFactory msbClient = context.getLocator().getService(MsbClientFactory.class); + // MsbClientFactory msbClient = + // context.getLocator().getService(MsbClientFactory.class); - MicroServiceFullInfo fullInfo = null; + MicroServiceFullInfo fullInfo = null; - fullInfo = - context.getMsbClient().queryMicroServiceInfo(srvhttpEndPointBeanObject.getServiceName(), - srvhttpEndPointBeanObject.getServiceVersion()); + fullInfo = context.getMsbClient().queryMicroServiceInfo(srvhttpEndPointBeanObject.getServiceName(), + srvhttpEndPointBeanObject.getServiceVersion()); - for (NodeInfo nodeInfo : fullInfo.getNodes()) { + for (NodeInfo nodeInfo : fullInfo.getNodes()) { - MicroServiceFullInfo cloneFullInfo = cloneFullInfo(fullInfo, nodeInfo); + MicroServiceFullInfo cloneFullInfo = cloneFullInfo(fullInfo, nodeInfo); - ServiceHttpEndPointObject endPointObj = - new ServiceHttpEndPointObject(srvhttpEndPointBeanObject.getServiceName(), - srvhttpEndPointBeanObject.getServiceVersion(), nodeInfo, cloneFullInfo); + ServiceHttpEndPointObject endPointObj = new ServiceHttpEndPointObject( + srvhttpEndPointBeanObject.getServiceName(), + srvhttpEndPointBeanObject.getServiceVersion(), nodeInfo, cloneFullInfo); - // 目前支持http - String baseUrl = null; - if (fullInfo.getUrl() == null || fullInfo.getUrl().trim().length() == 0 - || fullInfo.getUrl().equals("/")) { - baseUrl = String.format("http://%s:%s/", nodeInfo.getIp(), nodeInfo.getPort()); - } else { - baseUrl = String.format("http://%s:%s%s/", nodeInfo.getIp(), nodeInfo.getPort(), - fullInfo.getUrl()); - } + // 目前支持http + String baseUrl = null; + if (fullInfo.getUrl() == null || fullInfo.getUrl().trim().length() == 0 + || fullInfo.getUrl().equals("/")) { + baseUrl = String.format("http://%s:%s/", nodeInfo.getIp(), nodeInfo.getPort()); + } else { + baseUrl = String.format("http://%s:%s%s/", nodeInfo.getIp(), nodeInfo.getPort(), + fullInfo.getUrl()); + } - OkHttpClient httpClient = null; + OkHttpClient httpClient = null; - if (context.getHttpClientConf() != null) { - if (srvhttpEndPointBeanObject.getClientProtocl().toLowerCase().equals("https")) { - httpClient = - RetrofitServiceUtils.buildDefaultOkHttpsClient(context.getHttpClientConf()); - } else { - httpClient = - RetrofitServiceUtils.buildDefaultOkHttpClient(context.getHttpClientConf()); - } - } else { - if (srvhttpEndPointBeanObject.getClientProtocl().toLowerCase().equals("https")) { - httpClient = RetrofitServiceUtils.buildDefaultOkHttpsClient( - RetrofitServiceHandlerContext.getGlobalHttpClientConf()); - } else { - httpClient = RetrofitServiceUtils.buildDefaultOkHttpClient( - RetrofitServiceHandlerContext.getGlobalHttpClientConf()); - } - } + if (context.getHttpClientConf() != null) { + if (srvhttpEndPointBeanObject.getClientProtocl().toLowerCase().equals("https")) { + httpClient = RetrofitServiceUtils.buildDefaultOkHttpsClient(context.getHttpClientConf()); + } else { + httpClient = RetrofitServiceUtils.buildDefaultOkHttpClient(context.getHttpClientConf()); + } + } else { + if (srvhttpEndPointBeanObject.getClientProtocl().toLowerCase().equals("https")) { + httpClient = RetrofitServiceUtils.buildDefaultOkHttpsClient( + RetrofitServiceHandlerContext.getGlobalHttpClientConf()); + } else { + httpClient = RetrofitServiceUtils.buildDefaultOkHttpClient( + RetrofitServiceHandlerContext.getGlobalHttpClientConf()); + } + } - Retrofit retrofit = new Retrofit.Builder().client(httpClient).baseUrl(baseUrl) - .addConverterFactory(context.getConverterFactoryBuilder().buildConverterFactory()) - .build(); + Retrofit retrofit = new Retrofit.Builder().client(httpClient).baseUrl(baseUrl) + .addConverterFactory(context.getConverterFactoryBuilder().buildConverterFactory()) + .build(); - srvEndPointToRetrofit.put(endPointObj, - retrofit.create(context.getRetrofitSrvInterfaceClazz())); + srvEndPointToRetrofit.put(endPointObj, retrofit.create(context.getRetrofitSrvInterfaceClazz())); - } + } - if (srvEndPointToRetrofit.isEmpty()) { - throw new RetrofitServiceRuntimeException( - "can't find service in msb,serviceName:" + srvhttpEndPointBeanObject.getServiceName() - + ",serviceVersion:" + srvhttpEndPointBeanObject.getServiceVersion()); - } + if (srvEndPointToRetrofit.isEmpty()) { + throw new RetrofitServiceRuntimeException("can't find service in msb,serviceName:" + + srvhttpEndPointBeanObject.getServiceName() + ",serviceVersion:" + + srvhttpEndPointBeanObject.getServiceVersion()); + } - if (lastEndPoint != null) { - srvEndPointToRetrofit.remove(lastEndPoint); - } + if (lastEndPoint != null) { + srvEndPointToRetrofit.remove(lastEndPoint); + } - if (srvEndPointToRetrofit.isEmpty()) { - throw new RetrofitServiceRuntimeException("can't find other service in msb,serviceName:" - + srvhttpEndPointBeanObject.getServiceName() + ",serviceVersion:" - + srvhttpEndPointBeanObject.getServiceVersion()); - } + if (srvEndPointToRetrofit.isEmpty()) { + throw new RetrofitServiceRuntimeException("can't find other service in msb,serviceName:" + + srvhttpEndPointBeanObject.getServiceName() + ",serviceVersion:" + + srvhttpEndPointBeanObject.getServiceVersion()); + } + + if (endPointToRetrofitRef.compareAndSet(null, srvEndPointToRetrofit)) { + context.setLastUpdateMsbTime(System.currentTimeMillis()); + } + + return endPointToRetrofitRef.get(); - if (endPointToRetrofitRef.compareAndSet(null, srvEndPointToRetrofit)) { - context.setLastUpdateMsbTime(System.currentTimeMillis()); - } - return endPointToRetrofitRef.get(); + } catch (Exception e) { + throw new RetrofitServiceRuntimeException("init Retrofit service map fail", e); + } + } else { + return endPointToRetrofitRef.get(); + } + } - } catch (Exception e) { - throw new RetrofitServiceRuntimeException("init Retrofit service map fail", e); - } - } else { - return endPointToRetrofitRef.get(); + private MicroServiceFullInfo cloneFullInfo(MicroServiceFullInfo fullInfo, NodeInfo nodeInfo) { + + MicroServiceFullInfo cloneFuleInfo = new MicroServiceFullInfo(); + cloneFuleInfo.setMetadata(fullInfo.getMetadata()); + cloneFuleInfo.setProtocol(fullInfo.getProtocol()); + cloneFuleInfo.setServiceName(fullInfo.getServiceName()); + cloneFuleInfo.setStatus(fullInfo.getStatus()); + cloneFuleInfo.setUrl(fullInfo.getUrl()); + cloneFuleInfo.setVersion(fullInfo.getVersion()); + cloneFuleInfo.setVisualRange(fullInfo.getVisualRange()); + cloneFuleInfo.setEnable_ssl(fullInfo.isEnable_ssl()); + Set nodeInfos = new HashSet<>(); + nodeInfos.add(nodeInfo); + cloneFuleInfo.setNodes(nodeInfos); + return cloneFuleInfo; } - } - - - private MicroServiceFullInfo cloneFullInfo(MicroServiceFullInfo fullInfo, NodeInfo nodeInfo) { - - MicroServiceFullInfo cloneFuleInfo = new MicroServiceFullInfo(); - cloneFuleInfo.setMetadata(fullInfo.getMetadata()); - cloneFuleInfo.setProtocol(fullInfo.getProtocol()); - cloneFuleInfo.setServiceName(fullInfo.getServiceName()); - cloneFuleInfo.setStatus(fullInfo.getStatus()); - cloneFuleInfo.setUrl(fullInfo.getUrl()); - cloneFuleInfo.setVersion(fullInfo.getVersion()); - cloneFuleInfo.setVisualRange(fullInfo.getVisualRange()); - Set nodeInfos = new HashSet<>(); - nodeInfos.add(nodeInfo); - cloneFuleInfo.setNodes(nodeInfos); - return cloneFuleInfo; - } } diff --git a/src/test/java/org/onap/msb/sdk/discovery/MSBServiceTest.java b/src/test/java/org/onap/msb/sdk/discovery/MSBServiceTest.java index e214bf1..98103e0 100644 --- a/src/test/java/org/onap/msb/sdk/discovery/MSBServiceTest.java +++ b/src/test/java/org/onap/msb/sdk/discovery/MSBServiceTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2018 ZTE Corporation. * * Licensed 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 @@ -43,7 +43,7 @@ public class MSBServiceTest { "http://127.0.0.1:10081/api/microservices/v1/services/aai/version/v8"; private static final String MOCK_REG_SERVICE_JSON = - "{\"serviceName\":\"aai\",\"version\":\"v8\",\"url\":\"/aai/v8\",\"protocol\":\"REST\",\"visualRange\":\"1\",\"lb_policy\":\"\",\"path\":\"/aai/v8\",\"nodes\":[{\"ip\":\"10.74.44.1\",\"port\":\"8443\",\"ttl\":\"20\"}],\"metadata\":[{\"key\":\"key1\",\"value\":\"value1\"}]}"; + "{\"serviceName\":\"aai\",\"version\":\"v8\",\"url\":\"/aai/v8\",\"protocol\":\"REST\",\"visualRange\":\"1\",\"lb_policy\":\"\",\"path\":\"/aai/v8\",\"nodes\":[{\"ip\":\"10.74.44.1\",\"port\":\"8443\",\"ttl\":\"20\"}],\"metadata\":[{\"key\":\"key1\",\"value\":\"value1\"}],\"enable_ssl\":false}"; @Test public void test_registration_update_true() throws RouteException { @@ -114,17 +114,16 @@ public class MSBServiceTest { MSBService msbService = new MSBService(); msbService.cancelMicroServiceInfo(msbAddress, "aai", "v8", "10.74.44.1", "8443"); } - + @Test - public void test_healthCheckbyTTL(){ - try{ - PowerMockito.mockStatic(HttpClientUtil.class); - MSBService msbService = new MSBService(); - msbService.healthCheckbyTTL("127.0.0.1:10081","aai", "v8", "10.74.44.1", "8443"); - } - catch (Exception e) { - Assert.assertTrue(e instanceof RouteException); - } + public void test_healthCheckbyTTL() { + try { + PowerMockito.mockStatic(HttpClientUtil.class); + MSBService msbService = new MSBService(); + msbService.healthCheckbyTTL("127.0.0.1:10081", "aai", "v8", "10.74.44.1", "8443"); + } catch (Exception e) { + Assert.assertTrue(e instanceof RouteException); + } } private MicroServiceFullInfo mockMicroServiceFullInfo(MicroServiceInfo info) { @@ -136,9 +135,9 @@ public class MSBServiceTest { serviceInfo.setVisualRange(info.getVisualRange()); serviceInfo.setLb_policy(info.getLb_policy()); serviceInfo.setPath(info.getPath()); - - Set nodes=new HashSet(); - NodeInfo node=new NodeInfo(); + + Set nodes = new HashSet(); + NodeInfo node = new NodeInfo(); node.setCreated_at(new Date()); node.setExpiration(new Date()); node.setIp("10.74.44.1"); @@ -147,7 +146,7 @@ public class MSBServiceTest { node.setStatus("1"); node.setTtl("20"); node.setUpdated_at(new Date()); - + nodes.add(node); serviceInfo.setNodes(nodes); return serviceInfo; diff --git a/src/test/java/org/onap/msb/sdk/httpclient/msb/MSBServiceClientTest.java b/src/test/java/org/onap/msb/sdk/httpclient/msb/MSBServiceClientTest.java index 403e44b..5ee191b 100644 --- a/src/test/java/org/onap/msb/sdk/httpclient/msb/MSBServiceClientTest.java +++ b/src/test/java/org/onap/msb/sdk/httpclient/msb/MSBServiceClientTest.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 ZTE Corporation. + * Copyright 2017-2018 ZTE Corporation. * * Licensed 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 @@ -39,7 +39,7 @@ public class MSBServiceClientTest { "http://127.0.0.1:10081/api/microservices/v1/services/aai/version/v8"; private static final String MOCK_REG_SERVICE_JSON = - "{\"serviceName\":\"aai\",\"version\":\"v8\",\"url\":\"/aai/v8\",\"protocol\":\"REST\",\"visualRange\":\"1\",\"lb_policy\":\"\",\"path\":\"/aai/v8\",\"nodes\":[{\"ip\":\"10.74.44.1\",\"port\":\"8443\",\"ttl\":\"\"}],\"metadata\":null}"; + "{\"serviceName\":\"aai\",\"version\":\"v8\",\"url\":\"/aai/v8\",\"protocol\":\"REST\",\"visualRange\":\"1\",\"lb_policy\":\"\",\"path\":\"/aai/v8\",\"nodes\":[{\"ip\":\"10.74.44.1\",\"port\":\"8443\",\"ttl\":\"\"}],\"metadata\":null,\"enable_ssl\":false}"; @Test public void test_registration_update_true() throws RouteException {