This is an automated email from the ASF dual-hosted git repository.

tison 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 ee83cd2  feat: Support different environments to use different tokens 
(#500)
ee83cd2 is described below

commit ee83cd22c99c44091b3b37054cdcffec4284dadf
Author: hrzzzz <[email protected]>
AuthorDate: Thu Jun 1 23:39:10 2023 +0800

    feat: Support different environments to use different tokens (#500)
    
    Co-authored-by: ruihongzhou <[email protected]>
---
 front-end/src/lang/en.js                           |  4 +++
 front-end/src/lang/zh.js                           |  4 +++
 .../src/views/management/environments/index.vue    | 28 +++++++++++----
 .../manager/controller/EnvironmentsController.java |  4 +--
 .../pulsar/manager/entity/EnvironmentEntity.java   |  1 +
 .../pulsar/manager/mapper/EnvironmentsMapper.java  | 14 ++++----
 .../manager/service/EnvironmentCacheService.java   | 14 ++++++++
 .../pulsar/manager/service/PulsarAdminService.java |  1 +
 .../manager/service/impl/BrokersServiceImpl.java   |  9 ++++-
 .../service/impl/EnvironmentCacheServiceImpl.java  | 14 ++++++++
 .../service/impl/PulsarAdminServiceImpl.java       | 41 ++++++++++++++++++++--
 src/main/resources/META-INF/sql/herddb-schema.sql  |  3 +-
 src/main/resources/META-INF/sql/mysql-schema.sql   |  1 +
 .../resources/META-INF/sql/postgresql-schema.sql   |  1 +
 src/main/resources/META-INF/sql/sqlite-schema.sql  |  1 +
 .../dao/EnvironmentsRepositoryImplTest.java        |  6 ++++
 16 files changed, 126 insertions(+), 20 deletions(-)

diff --git a/front-end/src/lang/en.js b/front-end/src/lang/en.js
index 1161a62..5e01669 100644
--- a/front-end/src/lang/en.js
+++ b/front-end/src/lang/en.js
@@ -763,10 +763,14 @@ export default {
     updateEnvNameLabel: 'Environment Name',
     updateEnvServiceUrlPlaceHolder: 'Please input environment service url',
     updateEnvBookieUrlPlaceHolder: 'Please input environment bookie url',
+    updateEnvTokenPlaceHolder: 'Please input environment token',
     newEnvBookieUrlPlaceHolder: 'Please input environment bookie url',
+    newEnvTokenPlaceHolder: 'Please input environment token',
     updateEnvServiceUrlLabel: 'Service URL',
     updateEnvBookieUrlLabel: 'Bookie URL',
+    updateEnvTokenLabel: "Token",
     newEnvBookieUrlLabel: 'Bookie URL',
+    newEnvTokenLabel: 'Token',
     deleteEnvDialogCaption: 'Delete Environment',
     deleteEnvDialogText: 'Are you sure you want to delete this environment?',
     envNameIsRequired: 'Environment Name is required',
diff --git a/front-end/src/lang/zh.js b/front-end/src/lang/zh.js
index 610d2ba..fe7ec7a 100644
--- a/front-end/src/lang/zh.js
+++ b/front-end/src/lang/zh.js
@@ -757,14 +757,18 @@ export default {
     newEnvNameLabel: 'Environment Name',
     newEnvServiceUrlPlaceHolder: 'Please input environment service url',
     newEnvBookieUrlPlaceHolder: 'Please input environment bookie url',
+    newEnvTokenPlaceHolder: 'Please input environment token',
     newEnvServiceUrlLabel: 'Service URL',
     newEnvBookieUrlLabel: 'Bookie URL',
+    newEnvTokenLabel: 'Token',
     updateEnvDialogCaption: 'Update Environment',
     updateEnvNameLabel: 'Environment Name',
     updateEnvServiceUrlPlaceHolder: 'Please input environment service url',
     updateEnvBookieUrlPlaceHolder: 'Please input environment bookie url',
+    updateEnvTokenPlaceHolder: 'Please input environment token',
     updateEnvServiceUrlLabel: 'Service URL',
     updateEnvBookieUrlLabel: 'Bookie URL',
+    updateEnvTokenLabel: "Token",
     deleteEnvDialogCaption: 'Delete Environment',
     deleteEnvDialogText: 'Are you sure you want to delete this environment?',
     envNameIsRequired: 'Environment Name is required',
diff --git a/front-end/src/views/management/environments/index.vue 
b/front-end/src/views/management/environments/index.vue
index 2aea2d7..383544e 100644
--- a/front-end/src/views/management/environments/index.vue
+++ b/front-end/src/views/management/environments/index.vue
@@ -67,6 +67,10 @@
           <el-input v-model="form.bookie" 
:placeholder="$t('env.newEnvBookieUrlPlaceHolder')"/>
         </el-form-item>
 
+        <el-form-item v-if="dialogStatus==='create'" 
:label="$t('env.newEnvTokenLabel')" prop="token">
+          <el-input v-model="form.token" 
:placeholder="$t('env.newEnvTokenPlaceHolder')"/>
+        </el-form-item>
+
         <el-form-item v-if="dialogStatus==='update'" 
:label="$t('env.updateEnvNameLabel')">
           <el-tag type="primary" size="medium">{{ form.environment }}</el-tag>
         </el-form-item>
@@ -77,6 +81,11 @@
         <el-form-item v-if="dialogStatus==='update'" 
:label="$t('env.updateEnvBookieUrlLabel')" prop="bookie">
           <el-input v-model="form.bookie" 
:placeholder="$t('env.updateEnvBookieUrlPlaceHolder')"/>
         </el-form-item>
+
+        <el-form-item v-if="dialogStatus==='update'" 
:label="$t('env.updateEnvTokenLabel')" prop="token">
+          <el-input v-model="form.token" 
:placeholder="$t('env.updateEnvTokenPlaceHolder')"/>
+        </el-form-item>
+
         <el-form-item v-if="dialogStatus==='delete'">
           <h4>{{ $t('env.deleteEnvDialogText') }}</h4>
         </el-form-item>
@@ -111,19 +120,22 @@
         form: {
           environment: '',
           broker: '',
-          bookie: ''
+          bookie: '',
+          token: null
         },
         temp: {
           'name': '',
           'broker': '',
-          'bookie': ''
+          'bookie': '',
+          'token': '',
         },
         superUser: false,
         roles: [],
         rules: {
           environment: [{ required: true, message: 
this.$i18n.t('env.envNameIsRequired'), trigger: 'blur' }],
           broker: [{ required: true, message: 
this.$i18n.t('env.serviceUrlIsRequired'), trigger: 'blur' }],
-          bookie: [{ required: true, message: 
this.$i18n.t('env.bookieUrlIsRequired'), trigger: 'blur' }]
+          bookie: [{ required: true, message: 
this.$i18n.t('env.bookieUrlIsRequired'), trigger: 'blur' }],
+          token: [{ required: false }]
         }
       }
     },
@@ -145,7 +157,8 @@
             this.environmentList.push({
               'environment': response.data.data[i].name,
               'broker': response.data.data[i].broker,
-              'bookie': response.data.data[i].bookie
+              'bookie': response.data.data[i].bookie,
+              'token': response.data.data[i].token
             })
           }
         })
@@ -166,6 +179,7 @@
         this.form.environment = row.environment
         this.form.broker = row.broker
         this.form.bookie = row.bookie
+        this.form.token = row.token
         this.dialogFormVisible = true
         this.dialogStatus = 'update'
       },
@@ -190,7 +204,8 @@
         const data = {
           'name': this.form.environment,
           'broker': this.form.broker,
-          'bookie': this.form.bookie
+          'bookie': this.form.bookie,
+          'token': this.form.token
         }
         putEnvironment(data).then(response => {
           if (!response.data) return
@@ -243,7 +258,8 @@
         const data = {
           'name': this.form.environment,
           'broker': this.form.broker,
-          'bookie': this.form.bookie
+          'bookie': this.form.bookie,
+          'token': this.form.token
         }
         updateEnvironment(data).then(response => {
           if (!response.data) return
diff --git 
a/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java
 
b/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java
index 4b8662f..a0ce1a7 100644
--- 
a/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java
+++ 
b/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java
@@ -120,7 +120,7 @@ public class EnvironmentsController {
             return ResponseEntity.ok(result);
         }
         try {
-            
pulsarAdminService.clusters(environmentEntity.getBroker()).getClusters();
+            pulsarAdminService.clusters(environmentEntity.getBroker(), 
environmentEntity.getToken()).getClusters();
         } catch (PulsarAdminException e) {
             log.error("Failed to get clusters list.", e);
             result.put("error", "This environment is error. Please check it");
@@ -147,7 +147,7 @@ public class EnvironmentsController {
             return ResponseEntity.ok(result);
         }
         try {
-            
pulsarAdminService.clusters(environmentEntity.getBroker()).getClusters();
+            pulsarAdminService.clusters(environmentEntity.getBroker(), 
environmentEntity.getToken()).getClusters();
         } catch (PulsarAdminException e) {
             log.error("Failed to get clusters list.", e);
             result.put("error", "This environment is error. Please check it");
diff --git 
a/src/main/java/org/apache/pulsar/manager/entity/EnvironmentEntity.java 
b/src/main/java/org/apache/pulsar/manager/entity/EnvironmentEntity.java
index 26d8483..23007af 100644
--- a/src/main/java/org/apache/pulsar/manager/entity/EnvironmentEntity.java
+++ b/src/main/java/org/apache/pulsar/manager/entity/EnvironmentEntity.java
@@ -27,4 +27,5 @@ public class EnvironmentEntity {
     private String name;
     private String broker;
     private String bookie;
+    private String token;
 }
diff --git 
a/src/main/java/org/apache/pulsar/manager/mapper/EnvironmentsMapper.java 
b/src/main/java/org/apache/pulsar/manager/mapper/EnvironmentsMapper.java
index b017856..9f2f26f 100644
--- a/src/main/java/org/apache/pulsar/manager/mapper/EnvironmentsMapper.java
+++ b/src/main/java/org/apache/pulsar/manager/mapper/EnvironmentsMapper.java
@@ -22,28 +22,28 @@ import java.util.List;
 @Mapper
 public interface EnvironmentsMapper {
 
-    @Insert("INSERT INTO environments(name,broker,bookie) 
VALUES(#{name},#{broker},#{bookie})")
+    @Insert("INSERT INTO environments(name,broker,bookie,token) 
VALUES(#{name},#{broker},#{bookie},#{token})")
     void insert(EnvironmentEntity environmentEntity);
 
-    @Select("SELECT name,broker,bookie FROM environments where 
broker=#{broker}")
+    @Select("SELECT name,broker,bookie,token FROM environments where 
broker=#{broker}")
     EnvironmentEntity findByBroker(String broker);
 
-    @Select("SELECT name,broker,bookie FROM environments where name=#{name}")
+    @Select("SELECT name,broker,bookie,token FROM environments where 
name=#{name}")
     EnvironmentEntity findByName(String name);
 
-    @Select("SELECT name,broker,bookie FROM environments")
+    @Select("SELECT name,broker,bookie,token FROM environments")
     Page<EnvironmentEntity> findEnvironmentsList();
 
     @Select({"<script>",
-            "SELECT name,broker,bookie FROM environments",
+            "SELECT name,broker,bookie,token FROM environments",
             "WHERE name IN <foreach collection='nameList' item='name' open='(' 
separator=',' close=')'> #{name} </foreach>" +
                     "</script>"})
     Page<EnvironmentEntity> findEnvironmentsListByMultiName(@Param("nameList") 
List<String> nameList);
 
-    @Select("SELECT name,broker,bookie FROM environments")
+    @Select("SELECT name,broker,bookie,token FROM environments")
     List<EnvironmentEntity> getAllEnvironments();
 
-    @Update("UPDATE environments set broker=#{broker},bookie=#{bookie} where 
name=#{name}")
+    @Update("UPDATE environments set 
broker=#{broker},bookie=#{bookie},token=#{token} where name=#{name}")
     void update(EnvironmentEntity environmentEntity);
 
     @Delete("DELETE FROM environments WHERE name=#{name}")
diff --git 
a/src/main/java/org/apache/pulsar/manager/service/EnvironmentCacheService.java 
b/src/main/java/org/apache/pulsar/manager/service/EnvironmentCacheService.java
index eb33f93..f6ba388 100644
--- 
a/src/main/java/org/apache/pulsar/manager/service/EnvironmentCacheService.java
+++ 
b/src/main/java/org/apache/pulsar/manager/service/EnvironmentCacheService.java
@@ -50,6 +50,20 @@ public interface EnvironmentCacheService {
      */
     String getServiceUrl(String environment, String cluster);
 
+    /**
+     * Return the environment name for a given service url.
+     * @param serviceUrl
+     * @return
+     */
+    String getEnvironment(String serviceUrl);
+
+    /**
+     * Set the mapping of serviceUrl and environment.
+     * @param serviceUrl
+     * @param environment
+     */
+    void setServiceUrlEnvironmentMapping(String serviceUrl, String 
environment);
+
     /**
      * Refresh all the environments.
      */
diff --git 
a/src/main/java/org/apache/pulsar/manager/service/PulsarAdminService.java 
b/src/main/java/org/apache/pulsar/manager/service/PulsarAdminService.java
index ba2838f..0afdb6f 100644
--- a/src/main/java/org/apache/pulsar/manager/service/PulsarAdminService.java
+++ b/src/main/java/org/apache/pulsar/manager/service/PulsarAdminService.java
@@ -27,6 +27,7 @@ public interface PulsarAdminService {
     PulsarAdmin getPulsarAdmin(String url);
     BrokerStats brokerStats(String url);
     Clusters clusters(String url);
+    Clusters clusters(String url, String token);
     Brokers brokers(String url);
     Tenants tenants(String url);
     Namespaces namespaces(String url);
diff --git 
a/src/main/java/org/apache/pulsar/manager/service/impl/BrokersServiceImpl.java 
b/src/main/java/org/apache/pulsar/manager/service/impl/BrokersServiceImpl.java
index e632e85..2fedd11 100644
--- 
a/src/main/java/org/apache/pulsar/manager/service/impl/BrokersServiceImpl.java
+++ 
b/src/main/java/org/apache/pulsar/manager/service/impl/BrokersServiceImpl.java
@@ -19,6 +19,7 @@ import org.apache.pulsar.client.admin.PulsarAdminException;
 import org.apache.pulsar.common.policies.data.FailureDomain;
 import 
org.apache.pulsar.manager.controller.exception.PulsarAdminOperationException;
 import org.apache.pulsar.manager.service.BrokersService;
+import org.apache.pulsar.manager.service.EnvironmentCacheService;
 import org.apache.pulsar.manager.service.PulsarAdminService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -37,9 +38,12 @@ public class BrokersServiceImpl implements BrokersService {
 
     private final PulsarAdminService pulsarAdminService;
 
+    private final EnvironmentCacheService environmentCacheService;
+
     @Autowired
-    public BrokersServiceImpl(PulsarAdminService pulsarAdminService) {
+    public BrokersServiceImpl(PulsarAdminService pulsarAdminService, 
EnvironmentCacheService environmentCacheService) {
         this.pulsarAdminService = pulsarAdminService;
+        this.environmentCacheService = environmentCacheService;
     }
 
 
@@ -67,7 +71,10 @@ public class BrokersServiceImpl implements BrokersService {
                 throw pulsarAdminOperationException;
             }
 
+            String environment = 
environmentCacheService.getEnvironment(requestHost);
+
             for (String broker: brokersList) {
+                
environmentCacheService.setServiceUrlEnvironmentMapping("http://"; + broker, 
environment);
                 Map<String, Object> brokerEntity = Maps.newHashMap();
                 List<String> failureDomain = this.getFailureDomain(broker, 
failureDomains);
                 brokerEntity.put("broker", broker);
diff --git 
a/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
 
b/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
index cce6ba0..4ea07aa 100644
--- 
a/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
+++ 
b/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
@@ -51,11 +51,14 @@ public class EnvironmentCacheServiceImpl implements 
EnvironmentCacheService {
 
     private final PulsarAdminService pulsarAdminService;
 
+    private final Map<String, String> serviceUrlEnvironmentMap;
+
     @Autowired
     public EnvironmentCacheServiceImpl(EnvironmentsRepository 
environmentsRepository, PulsarAdminService pulsarAdminService) {
         this.environmentsRepository = environmentsRepository;
         this.environments = new ConcurrentHashMap<>();
         this.pulsarAdminService = pulsarAdminService;
+        this.serviceUrlEnvironmentMap = new ConcurrentHashMap<>();
     }
 
     @Override
@@ -93,6 +96,16 @@ public class EnvironmentCacheServiceImpl implements 
EnvironmentCacheService {
         }
     }
 
+    @Override
+    public void setServiceUrlEnvironmentMapping(String serviceUrl, String 
environment) {
+        serviceUrlEnvironmentMap.put(serviceUrl, environment);
+    }
+
+    @Override
+    public String getEnvironment(String serviceUrl) {
+        return serviceUrlEnvironmentMap.get(serviceUrl);
+    }
+
     private String pickOneServiceUrl(String webServiceUrl) {
         if (webServiceUrl.contains(",")) {
             String[] webServiceUrlList = webServiceUrl.split(",");
@@ -215,6 +228,7 @@ public class EnvironmentCacheServiceImpl implements 
EnvironmentCacheService {
                 environment.getName(),
                 (e) -> new ConcurrentHashMap<>());
         clusters.put(cluster, clusterData);
+        serviceUrlEnvironmentMap.put(environment.getBroker(), 
environment.getName());
         log.info("Successfully loaded cluster data for cluster {} @ 
environment {} : {}",
                 cluster, environment.getName(), clusterData);
         return clusterData;
diff --git 
a/src/main/java/org/apache/pulsar/manager/service/impl/PulsarAdminServiceImpl.java
 
b/src/main/java/org/apache/pulsar/manager/service/impl/PulsarAdminServiceImpl.java
index 3d89d75..c269dfa 100644
--- 
a/src/main/java/org/apache/pulsar/manager/service/impl/PulsarAdminServiceImpl.java
+++ 
b/src/main/java/org/apache/pulsar/manager/service/impl/PulsarAdminServiceImpl.java
@@ -17,6 +17,7 @@ import javax.annotation.PreDestroy;
 import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 
@@ -35,7 +36,11 @@ import 
org.apache.pulsar.client.api.AuthenticationDataProvider;
 import org.apache.pulsar.client.api.AuthenticationFactory;
 import org.apache.pulsar.client.api.PulsarClientException;
 import 
org.apache.pulsar.manager.controller.exception.PulsarAdminOperationException;
+import org.apache.pulsar.manager.entity.EnvironmentEntity;
+import org.apache.pulsar.manager.entity.EnvironmentsRepository;
+import org.apache.pulsar.manager.service.EnvironmentCacheService;
 import org.apache.pulsar.manager.service.PulsarAdminService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -63,6 +68,12 @@ public class PulsarAdminServiceImpl implements 
PulsarAdminService {
 
     private Map<String, PulsarAdmin> pulsarAdmins = new HashMap<>();
 
+    @Autowired
+    private EnvironmentsRepository environmentsRepository;
+
+    @Autowired
+    private EnvironmentCacheService environmentCacheService;
+
     @PreDestroy
     public void destroy() {
         pulsarAdmins.values().forEach(value -> value.close());
@@ -70,11 +81,15 @@ public class PulsarAdminServiceImpl implements 
PulsarAdminService {
 
     public synchronized PulsarAdmin getPulsarAdmin(String url) {
         if (!pulsarAdmins.containsKey(url)) {
-            pulsarAdmins.put(url, this.createPulsarAdmin(url));
+            pulsarAdmins.put(url, this.createPulsarAdmin(url, null));
         }
         return pulsarAdmins.get(url);
     }
 
+    public PulsarAdmin getPulsarAdmin(String url, String token) {
+        return this.createPulsarAdmin(url, token);
+    }
+
     public BrokerStats brokerStats(String url) {
         return getPulsarAdmin(url).brokerStats();
     }
@@ -83,6 +98,11 @@ public class PulsarAdminServiceImpl implements 
PulsarAdminService {
         return getPulsarAdmin(url).clusters();
     }
 
+    @Override
+    public Clusters clusters(String url, String token) {
+        return getPulsarAdmin(url, token).clusters();
+    }
+
     public Brokers brokers(String url) {
         return getPulsarAdmin(url).brokers();
     }
@@ -129,13 +149,28 @@ public class PulsarAdminServiceImpl implements 
PulsarAdminService {
         return result;
     }
 
-    private PulsarAdmin createPulsarAdmin(String url) {
+    private String getEnvironmentToken(String url) {
+        Optional<EnvironmentEntity> optionalEnvironmentEntity = 
environmentsRepository.findByBroker(url);
+        if (optionalEnvironmentEntity.isPresent()) {
+            return optionalEnvironmentEntity.get().getToken();
+        }
+        String environment = environmentCacheService.getEnvironment(url);
+        Optional<EnvironmentEntity> environmentEntityOptional = 
environmentsRepository.findByName(environment);
+        return 
environmentEntityOptional.map(EnvironmentEntity::getToken).orElse(null);
+    }
+
+    private PulsarAdmin createPulsarAdmin(String url, String token) {
         try {
             log.info("Create Pulsar Admin instance. url={}, authPlugin={}, 
authParams={}, tlsAllowInsecureConnection={}, tlsTrustCertsFilePath={}, 
tlsEnableHostnameVerification={}",
                     url, authPlugin, authParams, tlsAllowInsecureConnection, 
tlsTrustCertsFilePath, tlsEnableHostnameVerification);
             PulsarAdminBuilder pulsarAdminBuilder = PulsarAdmin.builder();
             pulsarAdminBuilder.serviceHttpUrl(url);
-            if (StringUtils.isNotBlank(pulsarJwtToken)) {
+            if (null == token) {
+                token = getEnvironmentToken(url);
+            }
+            if (StringUtils.isNotBlank(token)) {
+                
pulsarAdminBuilder.authentication(AuthenticationFactory.token(token));
+            } else if (StringUtils.isNotBlank(pulsarJwtToken)) {
                 
pulsarAdminBuilder.authentication(AuthenticationFactory.token(pulsarJwtToken));
             } else {
                 pulsarAdminBuilder.authentication(authPlugin, authParams);
diff --git a/src/main/resources/META-INF/sql/herddb-schema.sql 
b/src/main/resources/META-INF/sql/herddb-schema.sql
index 4d3e9c7..6dd985d 100644
--- a/src/main/resources/META-INF/sql/herddb-schema.sql
+++ b/src/main/resources/META-INF/sql/herddb-schema.sql
@@ -16,7 +16,8 @@
 CREATE TABLE IF NOT EXISTS environments (
   name varchar(256) NOT NULL PRIMARY KEY,
   broker varchar(1024) NOT NULL,
-  bookie varchar(1024) NOT NULL
+  bookie varchar(1024) NOT NULL,
+  token varchar(1024)
 );
 
 CREATE TABLE IF NOT EXISTS topics_stats (
diff --git a/src/main/resources/META-INF/sql/mysql-schema.sql 
b/src/main/resources/META-INF/sql/mysql-schema.sql
index 7b09dd1..5474f11 100644
--- a/src/main/resources/META-INF/sql/mysql-schema.sql
+++ b/src/main/resources/META-INF/sql/mysql-schema.sql
@@ -20,6 +20,7 @@ CREATE TABLE IF NOT EXISTS environments (
   name varchar(256) NOT NULL,
   broker varchar(1024) NOT NULL,
   bookie varchar(1024) NOT NULL,
+  token varchar(1024),
   CONSTRAINT PK_name PRIMARY KEY (name),
   UNIQUE (broker)
 )ENGINE=InnoDB CHARACTER SET utf8;
diff --git a/src/main/resources/META-INF/sql/postgresql-schema.sql 
b/src/main/resources/META-INF/sql/postgresql-schema.sql
index a208030..40d1d32 100644
--- a/src/main/resources/META-INF/sql/postgresql-schema.sql
+++ b/src/main/resources/META-INF/sql/postgresql-schema.sql
@@ -20,6 +20,7 @@ CREATE TABLE IF NOT EXISTS environments (
   name varchar(256) NOT NULL,
   broker varchar(1024) NOT NULL,
   bookie varchar(1024) NOT NULL,
+  token varchar(1024),
   CONSTRAINT PK_name PRIMARY KEY (name),
   UNIQUE (broker)
 );
diff --git a/src/main/resources/META-INF/sql/sqlite-schema.sql 
b/src/main/resources/META-INF/sql/sqlite-schema.sql
index 8d54416..ce8a134 100644
--- a/src/main/resources/META-INF/sql/sqlite-schema.sql
+++ b/src/main/resources/META-INF/sql/sqlite-schema.sql
@@ -16,6 +16,7 @@ CREATE TABLE IF NOT EXISTS environments (
   name varchar(256) NOT NULL,
   broker varchar(1024) NOT NULL,
   bookie varchar(1024) NOT NULL,
+  token varchar(1024),
   CONSTRAINT PK_name PRIMARY KEY (name),
   UNIQUE (broker)
 );
diff --git 
a/src/test/java/org/apache/pulsar/manager/dao/EnvironmentsRepositoryImplTest.java
 
b/src/test/java/org/apache/pulsar/manager/dao/EnvironmentsRepositoryImplTest.java
index ff7397e..9f2c6e0 100644
--- 
a/src/test/java/org/apache/pulsar/manager/dao/EnvironmentsRepositoryImplTest.java
+++ 
b/src/test/java/org/apache/pulsar/manager/dao/EnvironmentsRepositoryImplTest.java
@@ -47,12 +47,14 @@ public class EnvironmentsRepositoryImplTest {
         environmentEntity.setName("test-environment");
         environmentEntity.setBroker("http://localhost:8080";);
         environmentEntity.setBookie("http://localhost:8000";);
+        environmentEntity.setToken("token");
         environmentsRepository.save(environmentEntity);
         Page<EnvironmentEntity> environmentEntityPage = 
environmentsRepository.getEnvironmentsList(1, 1);
         environmentEntityPage.count(true);
         environmentEntityPage.getResult().forEach((result) -> {
             Assert.assertEquals("test-environment", result.getName());
             Assert.assertEquals("http://localhost:8080";, result.getBroker());
+            Assert.assertEquals("token", result.getToken());
             environmentsRepository.remove(result.getName());
         });
     }
@@ -63,21 +65,25 @@ public class EnvironmentsRepositoryImplTest {
         environmentEntity.setName("test-environment");
         environmentEntity.setBroker("https://localhost:8080";);
         environmentEntity.setBookie("https://localhost:8000";);
+        environmentEntity.setToken("token");
         environmentsRepository.save(environmentEntity);
         Optional<EnvironmentEntity> environmentEntityOptionalGet = 
environmentsRepository
                 .findByBroker("https://localhost:8080";);
         EnvironmentEntity environmentEntityGet = 
environmentEntityOptionalGet.get();
         Assert.assertEquals("test-environment", 
environmentEntityGet.getName());
         Assert.assertEquals("https://localhost:8080";, 
environmentEntityGet.getBroker());
+        Assert.assertEquals("token", environmentEntityGet.getToken());
 
         environmentEntity.setBroker("https://localhost:8081";);
         environmentEntity.setBookie("https://localhost:8001";);
+        environmentEntity.setToken("token1");
         environmentsRepository.update(environmentEntity);
         Optional<EnvironmentEntity> environmentEntityOptionalUpdate = 
environmentsRepository
                 .findByName("test-environment");
         EnvironmentEntity environmentEntityUpdate = 
environmentEntityOptionalUpdate.get();
         Assert.assertEquals("test-environment", 
environmentEntityUpdate.getName());
         Assert.assertEquals("https://localhost:8081";, 
environmentEntityUpdate.getBroker());
+        Assert.assertEquals("token1", environmentEntityUpdate.getToken());
 
         environmentsRepository.remove(environmentEntityUpdate.getName());
     }

Reply via email to