This is an automated email from the ASF dual-hosted git repository. guangning pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pulsar-manager.git
The following commit(s) were added to refs/heads/master by this push: new c3ebbd1 Added JWT Token Support (#203) c3ebbd1 is described below commit c3ebbd1b39b0e7a1bee2403c6513641cb55e1eac Author: Yuvaraj L <uvar...@gmail.com> AuthorDate: Fri Oct 25 11:28:30 2019 +0530 Added JWT Token Support (#203) * Added JWT Token Authentication Support Upgraded Spring and gradle to 4.10.2 * Added pulsarJwtToken to Test Cases * Send token only when configured * Fixed License header formatting Signed-off-by: Yuvaraj Loganathan <uvar...@gmail.com> * Reverted Spring & gradle upgrade Will raise an separate pull request for the upgrade Signed-off-by: Yuvaraj Loganathan <uvar...@gmail.com> * Reverted Gradle Version Signed-off-by: Yuvaraj Loganathan <uvar...@gmail.com> --- .gitignore | 2 ++ front-end/src/utils/request.js | 2 +- .../pulsar/manager/controller/EnvironmentsController.java | 11 +++++++++++ .../pulsar/manager/service/impl/BookiesServiceImpl.java | 8 ++++++++ .../manager/service/impl/BrokerStatsServiceImpl.java | 15 ++++++++++++++- .../pulsar/manager/service/impl/BrokersServiceImpl.java | 7 +++++++ .../pulsar/manager/service/impl/ClustersServiceImpl.java | 8 ++++++++ .../manager/service/impl/EnvironmentCacheServiceImpl.java | 7 +++++++ .../manager/service/impl/NamespacesServiceImpl.java | 7 +++++++ .../pulsar/manager/service/impl/TenantsServiceImpl.java | 7 +++++++ .../pulsar/manager/service/impl/TopicsServiceImpl.java | 7 +++++++ .../pulsar/manager/zuul/EnvironmentForward.java | 8 ++++++-- src/main/resources/application.properties | 6 +++++- .../pulsar/manager/service/BookiesServiceImplTest.java | 8 ++++++++ .../manager/service/BrokerStatsServiceImplTest.java | 8 ++++++++ .../pulsar/manager/service/BrokersServiceImplTest.java | 10 ++++++++++ .../pulsar/manager/service/ClustersServiceImplTest.java | 8 ++++++++ .../pulsar/manager/service/NamespacesServiceImplTest.java | 11 +++++++++++ .../pulsar/manager/service/TenantsServiceImplTest.java | 8 ++++++++ .../pulsar/manager/service/TopicsServiceImplTest.java | 11 +++++++++++ 20 files changed, 154 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index a892a4f..5b37fc9 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,5 @@ build/ front-end/data/ *.log dbdata +src/main/resources/local.properties + diff --git a/front-end/src/utils/request.js b/front-end/src/utils/request.js index df7d81f..dcbe922 100644 --- a/front-end/src/utils/request.js +++ b/front-end/src/utils/request.js @@ -22,7 +22,7 @@ import router from '../router' // create an axios instance const service = axios.create({ baseURL: process.env.BASE_API, // api 的 base_url - timeout: 5000 // request timeout + timeout: 60000 // request timeout }) // request interceptor diff --git a/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java b/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java index 49d92e5..d7dea7f 100644 --- a/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java +++ b/src/main/java/io/streamnative/pulsar/manager/controller/EnvironmentsController.java @@ -24,8 +24,10 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import org.apache.commons.lang3.StringUtils; import org.hibernate.validator.constraints.Range; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; @@ -50,6 +52,9 @@ public class EnvironmentsController { @Autowired private EnvironmentsRepository environmentsRepository; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + @Autowired private EnvironmentCacheService environmentCacheService; @@ -102,6 +107,9 @@ public class EnvironmentsController { } Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } String httpTestResult = HttpUtil.doGet(environmentEntity.getBroker() + "/metrics", header); if (httpTestResult == null) { result.put("error", "This environment is error. Please check it"); @@ -129,6 +137,9 @@ public class EnvironmentsController { } Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } String httpTestResult = HttpUtil.doGet(environmentEntity.getBroker() + "/metrics", header); if (httpTestResult == null) { result.put("error", "This environment is error. Please check it"); diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java index 690f916..49e195c 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/BookiesServiceImpl.java @@ -18,6 +18,7 @@ import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import io.streamnative.pulsar.manager.service.BookiesService; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -44,8 +45,12 @@ public class BookiesServiceImpl implements BookiesService { @Value("${bookie.enable}") private Boolean bookieEnable; + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + private static final Map<String, String> header = new HashMap<String, String>(){{ put("Content-Type","application/json"); + put("Authorization", String.format("Bearer %s", pulsarJwtToken)); }}; private final Pattern pattern = Pattern.compile(" \\d+");; @@ -57,6 +62,9 @@ public class BookiesServiceImpl implements BookiesService { Gson gson = new Gson(); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } String rwBookieList = HttpUtil.doGet( bookieHost + "/api/v1/bookie/list_bookies?type=rw&print_hostnames=true", header); Map<String, String> rwBookies = gson.fromJson( diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java index 10ac073..c328e4f 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokerStatsServiceImpl.java @@ -38,6 +38,8 @@ import io.streamnative.pulsar.manager.entity.TopicsStatsRepository; import java.util.HashMap; import java.util.List; import java.util.Map; + +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,6 +63,9 @@ public class BrokerStatsServiceImpl implements BrokerStatsService { @Value("${backend.directRequestHost}") private String directRequestHost; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + @Value("${clear.stats.interval}") private Long clearStatsInterval; @@ -96,13 +101,18 @@ public class BrokerStatsServiceImpl implements BrokerStatsService { }}; public String forwarBrokerStatsMetrics(String broker, String requestHost) { + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } broker = checkServiceUrl(broker, requestHost); return HttpUtil.doGet(broker + "/admin/v2/broker-stats/metrics", header); } public String forwardBrokerStatsTopics(String broker, String requestHost) { - + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } broker = checkServiceUrl(broker, requestHost); return HttpUtil.doGet(broker + "/admin/v2/broker-stats/topics", header); } @@ -134,6 +144,9 @@ public class BrokerStatsServiceImpl implements BrokerStatsService { } public void collectStatsToDB(long unixTime, String env, String cluster, String serviceUrl) { + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } Map<String, Object> brokerObject = brokersService.getBrokersList(0, 0, cluster, serviceUrl); List<HashMap<String, Object>> brokerLists = (List<HashMap<String, Object>>) brokerObject.get("data"); brokerLists.forEach((brokerMap) -> { diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java index e8a2cc6..cd6496f 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/BrokersServiceImpl.java @@ -18,6 +18,7 @@ import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import io.streamnative.pulsar.manager.service.BrokersService; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -31,6 +32,9 @@ public class BrokersServiceImpl implements BrokersService { @Value("${backend.directRequestBroker}") private boolean directRequestBroker; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + public Map<String, Object> getBrokersList(Integer pageNum, Integer pageSize, String cluster, String requestHost) { Map<String, Object> brokersMap = Maps.newHashMap(); @@ -39,6 +43,9 @@ public class BrokersServiceImpl implements BrokersService { Gson gson = new Gson(); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } String failureDomainsResult = HttpUtil.doGet( requestHost + "/admin/v2/clusters/" + cluster + "/failureDomains", header); Map<String, Map<String, List<String>>> failureDomains = gson.fromJson( diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java index 27b160d..92820a3 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/ClustersServiceImpl.java @@ -20,6 +20,8 @@ import io.streamnative.pulsar.manager.service.BrokersService; import io.streamnative.pulsar.manager.service.ClustersService; import io.streamnative.pulsar.manager.utils.HttpUtil; import java.util.function.Function; + +import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.common.policies.data.ClusterData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -35,6 +37,9 @@ public class ClustersServiceImpl implements ClustersService { @Value("${backend.directRequestBroker}") private boolean directRequestBroker; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + @Autowired private BrokersService brokersService; @@ -49,6 +54,9 @@ public class ClustersServiceImpl implements ClustersService { Gson gson = new Gson(); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } String result = HttpUtil.doGet(envServiceUrl + "/admin/v2/clusters", header); List<String> clustersList = gson.fromJson(result, new TypeToken<List<String>>(){}.getType()); for (String cluster: clustersList) { diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java index 94c6d91..7a8dd8a 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java @@ -33,6 +33,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.common.policies.data.ClusterData; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -46,6 +47,9 @@ public class EnvironmentCacheServiceImpl implements EnvironmentCacheService { @Autowired private EnvironmentsRepository environmentsRepository; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + private final Map<String, Map<String, ClusterData>> environments; public EnvironmentCacheServiceImpl() { @@ -99,6 +103,9 @@ public class EnvironmentCacheServiceImpl implements EnvironmentCacheService { private Map<String, String> jsonHeader() { Map<String, String> header = Maps.newHashMap(); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } header.put("Content-Type", "application/json"); return header; } diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java index 3649652..e1e19e2 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/NamespacesServiceImpl.java @@ -22,6 +22,7 @@ import io.streamnative.pulsar.manager.entity.TopicsStatsRepository; import io.streamnative.pulsar.manager.service.NamespacesService; import io.streamnative.pulsar.manager.service.TopicsService; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -34,6 +35,9 @@ public class NamespacesServiceImpl implements NamespacesService { @Value("${backend.directRequestBroker}") private boolean directRequestBroker; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + @Autowired private TopicsStatsRepository topicsStatsRepository; @@ -47,6 +51,9 @@ public class NamespacesServiceImpl implements NamespacesService { Gson gson = new Gson(); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } String result = HttpUtil.doGet(requestHost + "/admin/v2/namespaces/" + tenant, header); if (result != null) { List<String> namespacesList = gson.fromJson(result, new TypeToken<List<String>>(){}.getType()); diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java index 4224398..5017e7d 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/TenantsServiceImpl.java @@ -18,6 +18,7 @@ import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import io.streamnative.pulsar.manager.service.TenantsService; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.apache.pulsar.common.policies.data.TenantInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,6 +38,9 @@ public class TenantsServiceImpl implements TenantsService { @Value("${backend.directRequestBroker}") private boolean directRequestBroker; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + public Map<String, Object> getTenantsList(Integer pageNum, Integer pageSize, String requestHost) { Map<String, Object> tenantsMap = Maps.newHashMap(); List<Map<String, Object>> tenantsArray = new ArrayList<>(); @@ -44,6 +48,9 @@ public class TenantsServiceImpl implements TenantsService { Gson gson = new Gson(); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } String result = HttpUtil.doGet( requestHost + "/admin/v2/tenants", header); if (result != null) { List<String> tenantsList = gson.fromJson(result, new TypeToken<List<String>>(){}.getType()); diff --git a/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java b/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java index dd41382..ff25b2b 100644 --- a/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java +++ b/src/main/java/io/streamnative/pulsar/manager/service/impl/TopicsServiceImpl.java @@ -22,6 +22,7 @@ import io.streamnative.pulsar.manager.entity.TopicStatsEntity.TopicStatsSummary; import io.streamnative.pulsar.manager.entity.TopicsStatsRepository; import io.streamnative.pulsar.manager.service.TopicsService; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -39,6 +40,9 @@ public class TopicsServiceImpl implements TopicsService { @Value("${backend.directRequestBroker}") private boolean directRequestBroker; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; + @Autowired private TopicsStatsRepository topicsStatsRepository; @@ -192,6 +196,9 @@ public class TopicsServiceImpl implements TopicsService { String tenant, String namespace, String persistent, String requestHost) { List<Map<String, String>> topicsArray = new ArrayList<>(); Map<String, String> header = Maps.newHashMap(); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } header.put("Content-Type", "application/json"); String prefix = "/admin/v2/" + persistent + "/" + tenant + "/" + namespace; Gson gson = new Gson(); diff --git a/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java b/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java index 5657977..96dfd77 100644 --- a/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java +++ b/src/main/java/io/streamnative/pulsar/manager/zuul/EnvironmentForward.java @@ -20,6 +20,7 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; import org.springframework.stereotype.Component; @@ -40,6 +41,8 @@ public class EnvironmentForward extends ZuulFilter { @Autowired private EnvironmentCacheService environmentCacheService; + @Value("${backend.jwt.token}") + private String pulsarJwtToken; @Override public String filterType() { @@ -89,12 +92,13 @@ public class EnvironmentForward extends ZuulFilter { private Object forwardRequest(RequestContext ctx, HttpServletRequest request, String serviceUrl) { ctx.put(REQUEST_URI_KEY, request.getRequestURI()); try { + ctx.addZuulRequestHeader("Authorization", String.format("Bearer %s", pulsarJwtToken)); ctx.setRouteHost(new URL(serviceUrl)); log.info("Forward request to {} @ path {}", - serviceUrl, request.getRequestURI()); + serviceUrl, request.getRequestURI()); } catch (MalformedURLException e) { log.error("Route forward to {} path {} error: {}", - serviceUrl, request.getRequestURI(), e.getMessage()); + serviceUrl, request.getRequestURI(), e.getMessage()); } return null; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f92afb6..5e3fc7e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -57,11 +57,14 @@ spring.datasource.initialization-mode=always #spring.datasource.password=postgres # zuul config +# https://cloud.spring.io/spring-cloud-static/Dalston.SR5/multi/multi__router_and_filter_zuul.html +# By Default Zuul adds Authorization to be dropped headers list. Below we are manually setting it +zuul.sensitive-headers=Cookie,Set-Cookie zuul.routes.admin.path=/admin/** zuul.routes.admin.url=http://localhost:8080/admin/ zuul.routes.lookup.path=/lookup/** zuul.routes.lookup.url=http://localhost:8080/lookup/ - + # pagehelper plugin #pagehelper.helperDialect=sqlite # force 'mysql' for HerdDB, comment out for postgresql @@ -69,6 +72,7 @@ pagehelper.helperDialect=mysql backend.directRequestBroker=true backend.directRequestHost=http://localhost:8080 +backend.jwt.token= jwt.secret=dab1c8ba-b01b-11e9-b384-186590e06885 jwt.sessionTime=2592000 diff --git a/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java b/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java index 2f556b3..e04aa06 100644 --- a/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java +++ b/src/test/java/io/streamnative/pulsar/manager/service/BookiesServiceImplTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.Maps; import io.streamnative.pulsar.manager.PulsarManagerApplication; import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,6 +27,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.TestPropertySource; @@ -50,11 +52,17 @@ public class BookiesServiceImplTest { @Autowired private BookiesService bookiesService; + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + @Test public void bookiesServiceTest() { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8050/api/v1/bookie/list_bookies?type=rw&print_hostnames=true", header)) .thenReturn("{\"192.168.2.116:3181\" : \"192.168.2.116\"}"); PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/brokers/standalone", header)) diff --git a/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java b/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java index 62b8336..0abe3df 100644 --- a/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java +++ b/src/test/java/io/streamnative/pulsar/manager/service/BrokerStatsServiceImplTest.java @@ -28,6 +28,7 @@ import io.streamnative.pulsar.manager.entity.ReplicationStatsEntity; import io.streamnative.pulsar.manager.entity.TopicStatsEntity; import io.streamnative.pulsar.manager.entity.TopicsStatsRepository; import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,6 +38,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -60,6 +62,9 @@ public class BrokerStatsServiceImplTest { @Autowired private BrokerStatsService brokerStatsService; + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + @Autowired private TopicsStatsRepository topicsStatsRepository; @@ -217,6 +222,9 @@ public class BrokerStatsServiceImplTest { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)){ + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters", header)) .thenReturn("[\"standalone\"]"); PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters/standalone", header)) diff --git a/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java b/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java index 825e021..a369f02 100644 --- a/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java +++ b/src/test/java/io/streamnative/pulsar/manager/service/BrokersServiceImplTest.java @@ -19,6 +19,8 @@ import io.streamnative.pulsar.manager.entity.EnvironmentEntity; import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile; import io.streamnative.pulsar.manager.utils.HttpUtil; import java.util.Map; + +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -28,6 +30,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -45,6 +48,9 @@ import org.springframework.test.context.junit4.SpringRunner; @ActiveProfiles("test") public class BrokersServiceImplTest { + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + @Autowired private BrokersService brokersService; @@ -53,6 +59,10 @@ public class BrokersServiceImplTest { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } + PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters/standalone/failureDomains", header)) .thenReturn("{\"test\":{\"brokers\":[\"tengdeMBP:8080\"]}}"); diff --git a/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java b/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java index 3c3a04d..51948e5 100644 --- a/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java +++ b/src/test/java/io/streamnative/pulsar/manager/service/ClustersServiceImplTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.Maps; import io.streamnative.pulsar.manager.PulsarManagerApplication; import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,6 +27,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -48,11 +50,17 @@ public class ClustersServiceImplTest { @Autowired private ClustersService clustersService; + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + @Test public void clusterServiceImplTest() { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters", header)) .thenReturn("[\"standalone\"]"); diff --git a/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java b/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java index 1710dde..e36b625 100644 --- a/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java +++ b/src/test/java/io/streamnative/pulsar/manager/service/NamespacesServiceImplTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.Maps; import io.streamnative.pulsar.manager.PulsarManagerApplication; import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,6 +27,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -51,11 +53,17 @@ public class NamespacesServiceImplTest { @Autowired private BrokerStatsService brokerStatsService; + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + @Test public void namespaceServiceImplTest() { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/namespaces/public", header)) .thenReturn("[\"public/default\"]"); @@ -75,6 +83,9 @@ public class NamespacesServiceImplTest { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters", header)) .thenReturn("[\"standalone\"]"); diff --git a/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java b/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java index 973f914..7c06822 100644 --- a/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java +++ b/src/test/java/io/streamnative/pulsar/manager/service/TenantsServiceImplTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.Maps; import io.streamnative.pulsar.manager.PulsarManagerApplication; import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,6 +27,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -51,11 +53,17 @@ public class TenantsServiceImplTest { @Autowired private TenantsService tenantsService; + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + @Test public void tenantsServiceImplTest() { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/tenants", header)).thenReturn("[\"public\"]"); PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/tenants/public", header)) .thenReturn("{\"adminRoles\": [\"admin\"], \"allowedClusters\": [\"standalone\"]}"); diff --git a/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java b/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java index 233b563..2ec31de 100644 --- a/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java +++ b/src/test/java/io/streamnative/pulsar/manager/service/TopicsServiceImplTest.java @@ -17,6 +17,7 @@ import com.google.common.collect.Maps; import io.streamnative.pulsar.manager.PulsarManagerApplication; import io.streamnative.pulsar.manager.profiles.HerdDBTestProfile; import io.streamnative.pulsar.manager.utils.HttpUtil; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -26,6 +27,7 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -53,6 +55,9 @@ public class TopicsServiceImplTest { @Autowired private BrokerStatsService brokerStatsService; + @Value("${backend.jwt.token}") + private static String pulsarJwtToken; + private final String topics = "[" + "\"persistent://public/default/test789\"," + "\"persistent://public/default/test900-partition-0\"," + @@ -66,6 +71,9 @@ public class TopicsServiceImplTest { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/persistent/public/default", header)) .thenReturn(topics); PowerMockito.when(HttpUtil.doGet( @@ -87,6 +95,9 @@ public class TopicsServiceImplTest { PowerMockito.mockStatic(HttpUtil.class); Map<String, String> header = Maps.newHashMap(); header.put("Content-Type", "application/json"); + if (StringUtils.isNotBlank(pulsarJwtToken)) { + header.put("Authorization", String.format("Bearer %s", pulsarJwtToken)); + } PowerMockito.when(HttpUtil.doGet("http://localhost:8080/admin/v2/clusters", header)) .thenReturn("[\"standalone\"]");