Added some tools for engine instance management 47/113147/1
authortang peng <tang.peng5@zte.com.cn>
Fri, 25 Sep 2020 07:15:00 +0000 (15:15 +0800)
committertang peng <tang.peng5@zte.com.cn>
Fri, 25 Sep 2020 07:15:12 +0000 (15:15 +0800)
Issue-ID: HOLMES-365
Signed-off-by: tang peng <tang.peng5@zte.com.cn>
Change-Id: Ie57ca3eaa0ffda7c3f611b07293ceedd75d08a91

holmes-actions/pom.xml
holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityDao.java [new file with mode: 0644]
holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityMapper.java [new file with mode: 0644]
holmes-actions/src/main/java/org/onap/holmes/common/engine/entity/EngineEntity.java [new file with mode: 0644]
holmes-actions/src/main/java/org/onap/holmes/common/engine/service/EngineEntityService.java [new file with mode: 0644]
holmes-actions/src/main/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImpl.java [new file with mode: 0644]
holmes-actions/src/test/java/org/onap/holmes/common/engine/dao/EngineEntityMapperTest.java [new file with mode: 0644]
holmes-actions/src/test/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImplTest.java [new file with mode: 0644]
pom.xml

index 4d6c3be..ca1310f 100644 (file)
@@ -12,7 +12,7 @@
     <parent>\r
         <groupId>org.onap.holmes.common</groupId>\r
         <artifactId>holmes-common-parent</artifactId>\r
-        <version>1.3.0-SNAPSHOT</version>\r
+        <version>1.3.1-SNAPSHOT</version>\r
     </parent>\r
 \r
     <name>holmes-common-service</name>\r
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityDao.java b/holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityDao.java
new file mode 100644 (file)
index 0000000..42e0bf4
--- /dev/null
@@ -0,0 +1,44 @@
+/**
+ * Copyright 2020 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.common.engine.dao;
+
+import org.onap.holmes.common.engine.entity.EngineEntity;
+import org.skife.jdbi.v2.sqlobject.Bind;
+import org.skife.jdbi.v2.sqlobject.BindBean;
+import org.skife.jdbi.v2.sqlobject.SqlQuery;
+import org.skife.jdbi.v2.sqlobject.SqlUpdate;
+import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper;
+
+import java.util.List;
+
+@RegisterMapper(EngineEntityMapper.class)
+public interface EngineEntityDao {
+    @SqlQuery("SELECT * FROM ENGINE_ENTITY WHERE ID = :id")
+    EngineEntity getEntity(@Bind("id") String id);
+
+    @SqlQuery("SELECT * FROM ENGINE_ENTITY")
+    List<EngineEntity> getAllEntities();
+
+    @SqlUpdate("INSERT INTO ENGINE_ENTITY VALUES (:id, :ip, :port, :lastModified)")
+    void insertEntity(@BindBean EngineEntity entity);
+
+    @SqlUpdate("UPDATE ENGINE_ENTITY SET LASTMODIFIED = :lastModified WHERE ID = :id")
+    void updateEntity(@BindBean EngineEntity entity);
+
+    @SqlUpdate("DELETE FROM ENGINE_ENTITY WHERE ID = :id")
+    void deleteEntity(@Bind("id") String id);
+}
\ No newline at end of file
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityMapper.java b/holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityMapper.java
new file mode 100644 (file)
index 0000000..cda38a5
--- /dev/null
@@ -0,0 +1,35 @@
+/**
+ * Copyright 2020 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.common.engine.dao;
+
+import org.onap.holmes.common.engine.entity.EngineEntity;
+import org.skife.jdbi.v2.StatementContext;
+import org.skife.jdbi.v2.tweak.ResultSetMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class EngineEntityMapper implements ResultSetMapper<EngineEntity> {
+    @Override
+    public EngineEntity map(int i, ResultSet resultSet, StatementContext statementContext) throws SQLException {
+        EngineEntity entity = new EngineEntity();
+        entity.setIp(resultSet.getString("ip"));
+        entity.setPort(resultSet.getInt("port"));
+        entity.setLastModified(resultSet.getLong("lastmodified"));
+        return entity;
+    }
+}
\ No newline at end of file
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/engine/entity/EngineEntity.java b/holmes-actions/src/main/java/org/onap/holmes/common/engine/entity/EngineEntity.java
new file mode 100644 (file)
index 0000000..9822fbc
--- /dev/null
@@ -0,0 +1,74 @@
+/**
+ * Copyright 2020 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.common.engine.entity;
+
+public class EngineEntity {
+    private String ip;
+    private int port;
+    private long lastModified;
+
+    public EngineEntity(String ip, int port) {
+        this.ip = ip;
+        this.port = port;
+        this.lastModified = System.currentTimeMillis();
+    }
+
+    public EngineEntity() {
+    }
+
+    public String getId() {
+        return ip + "_" + port;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public long getLastModified() {
+        return lastModified;
+    }
+
+    public void setLastModified(long lastModified) {
+        this.lastModified = lastModified;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == null || ! (o instanceof  EngineEntity)) {
+            return false;
+        }
+
+        return ((EngineEntity) o).getId().equals(getId());
+    }
+
+    @Override
+    public int hashCode() {
+        return getId().hashCode();
+    }
+}
\ No newline at end of file
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/engine/service/EngineEntityService.java b/holmes-actions/src/main/java/org/onap/holmes/common/engine/service/EngineEntityService.java
new file mode 100644 (file)
index 0000000..0baa4de
--- /dev/null
@@ -0,0 +1,31 @@
+/**
+ * Copyright 2020 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.common.engine.service;
+
+import org.glassfish.jersey.spi.Contract;
+import org.onap.holmes.common.engine.entity.EngineEntity;
+
+import java.util.List;
+
+@Contract
+public interface EngineEntityService {
+    EngineEntity getEntity(String id);
+    List<EngineEntity> getAllEntities();
+    void updateEntity(EngineEntity entity);
+    void insertEntity(EngineEntity entity);
+    void deleteEntity(String id);
+}
diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImpl.java b/holmes-actions/src/main/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImpl.java
new file mode 100644 (file)
index 0000000..926af13
--- /dev/null
@@ -0,0 +1,62 @@
+/**
+ * Copyright 2020 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.common.engine.service.impl;
+
+import org.jvnet.hk2.annotations.Service;
+import org.onap.holmes.common.engine.dao.EngineEntityDao;
+import org.onap.holmes.common.engine.entity.EngineEntity;
+import org.onap.holmes.common.engine.service.EngineEntityService;
+import org.onap.holmes.common.utils.DbDaoUtil;
+
+import javax.inject.Inject;
+import java.util.List;
+
+@Service
+public class EngineEntityServiceImpl implements EngineEntityService {
+
+    private EngineEntityDao engineEntityDao;
+
+    @Inject
+    public EngineEntityServiceImpl(DbDaoUtil dbDaoUtil){
+        engineEntityDao = dbDaoUtil.getJdbiDaoByOnDemand(EngineEntityDao.class);
+    }
+
+    @Override
+    public EngineEntity getEntity(String id) {
+        return engineEntityDao.getEntity(id);
+    }
+
+    @Override
+    public List<EngineEntity> getAllEntities() {
+        return engineEntityDao.getAllEntities();
+    }
+
+    @Override
+    public void updateEntity(EngineEntity entity) {
+        engineEntityDao.updateEntity(entity);
+    }
+
+    @Override
+    public void insertEntity(EngineEntity entity) {
+        engineEntityDao.insertEntity(entity);
+    }
+
+    @Override
+    public void deleteEntity(String id) {
+        engineEntityDao.deleteEntity(id);
+    }
+}
diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/engine/dao/EngineEntityMapperTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/engine/dao/EngineEntityMapperTest.java
new file mode 100644 (file)
index 0000000..ad684da
--- /dev/null
@@ -0,0 +1,62 @@
+/**
+ * Copyright 2020 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.common.engine.dao;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.holmes.common.engine.entity.EngineEntity;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.*;
+import java.util.Calendar;
+import java.util.Map;
+
+import static org.easymock.EasyMock.expect;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.*;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ResultSet.class})
+public class EngineEntityMapperTest {
+    private EngineEntityMapper mapper = new EngineEntityMapper();
+    @Test
+    public void map() throws Exception {
+        long lastModified = System.currentTimeMillis();
+        ResultSet rsMock = PowerMock.createMock(ResultSet.class);
+        expect(rsMock.getString("ip")).andReturn("127.0.0.1");
+        expect(rsMock.getInt("port")).andReturn(80);
+        expect(rsMock.getLong("lastmodified")).andReturn(lastModified);
+
+        PowerMock.replay(rsMock);
+
+        EngineEntity entity = mapper.map(0, rsMock, null);
+
+        PowerMock.verify(rsMock);
+
+        assertThat(entity.getId(), equalTo("127.0.0.1_80"));
+        assertThat(entity.getIp(), equalTo("127.0.0.1"));
+        assertThat(entity.getPort(), is(80));
+        assertThat(entity.getLastModified(), is(lastModified));
+    }
+}
\ No newline at end of file
diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImplTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImplTest.java
new file mode 100644 (file)
index 0000000..7058943
--- /dev/null
@@ -0,0 +1,124 @@
+/**
+ * Copyright 2020 ZTE Corporation.
+ * <p>
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.holmes.common.engine.service.impl;
+
+import com.google.common.base.CharMatcher;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.holmes.common.engine.dao.EngineEntityDao;
+import org.onap.holmes.common.engine.entity.EngineEntity;
+import org.onap.holmes.common.engine.service.EngineEntityService;
+import org.onap.holmes.common.utils.DbDaoUtil;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static com.google.common.base.Predicates.notNull;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNull.notNullValue;
+import static org.junit.Assert.*;
+
+public class EngineEntityServiceImplTest {
+
+    private EngineEntityService service = new EngineEntityServiceImpl(new DbDaoUtilStub());
+
+    @Test
+    public void getEntity() throws Exception {
+        EngineEntity entity = service.getEntity("org.onap.holmes_9201");
+        assertThat(entity, notNullValue());
+    }
+
+    @Test
+    public void getAllEntities() throws Exception {
+        List<EngineEntity> entities = service.getAllEntities();
+        assertThat(entities.size(), is(1));
+    }
+
+    @Test
+    public void updateEntity() throws Exception {
+        EngineEntity entity = new EngineEntity("org.onap.holmes", 9201);
+        long time = System.currentTimeMillis();
+        entity.setLastModified(time);
+        service.updateEntity(entity);
+        assertThat(service.getEntity("org.onap.holmes_9201").getLastModified(), is(time));
+    }
+
+    @Test
+    public void insertEntity() throws Exception {
+        EngineEntity entity = new EngineEntity("org.onap.holmes.another", 9201);
+        service.insertEntity(entity);
+        assertThat(service.getAllEntities().size(), is(2));
+    }
+
+    @Test
+    public void deleteEntity() throws Exception {
+        service.deleteEntity("org.onap.holmes.another_9201");
+        assertThat(service.getAllEntities().size(), is(1));
+    }
+}
+
+class DbDaoUtilStub extends DbDaoUtil {
+    private EngineEntityDao dao = new EngineEntityDaoStub();
+
+    @Override
+    public <T> T getJdbiDaoByOnDemand(Class<T> daoClazz) {
+
+        return (T) dao;
+
+    }
+}
+
+class EngineEntityDaoStub implements EngineEntityDao {
+
+    private Set<EngineEntity> entitySet = new HashSet(){
+        {
+            add(new EngineEntity("org.onap.holmes", 9201));
+        }
+    };
+
+    @Override
+    public EngineEntity getEntity(String id) {
+        return entitySet.stream().filter(e -> e.getId().equals(id)).findFirst().get();
+    }
+
+    @Override
+    public List<EngineEntity> getAllEntities() {
+        return new ArrayList<>(entitySet);
+    }
+
+    @Override
+    public void insertEntity(EngineEntity entity) {
+        entitySet.add(entity);
+    }
+
+    @Override
+    public void updateEntity(EngineEntity entity) {
+        entitySet.add(entity);
+    }
+
+    @Override
+    public void deleteEntity(String id) {
+        for (EngineEntity entity : entitySet) {
+            if (entity.getId().equals(id)) {
+                entitySet.remove(entity);
+                break;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 623104f..04098f7 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
     <artifactId>holmes-common-parent</artifactId>\r
     <packaging>pom</packaging>\r
 \r
-    <version>1.3.0-SNAPSHOT</version>\r
+    <version>1.3.1-SNAPSHOT</version>\r
     <name>holmes-common</name>\r
     <modules>\r
         <module>holmes-actions</module>\r
@@ -59,7 +59,7 @@
             <dependency>\r
                 <groupId>org.onap.msb.java-sdk</groupId>\r
                 <artifactId>msb-java-sdk</artifactId>\r
-                <version>1.1.1</version>\r
+                <version>1.2.5</version>\r
             </dependency>\r
             <dependency>\r
                 <groupId>org.glassfish.jersey.containers</groupId>\r