From 38107cb7956b94100cbc5a766c7bbc12dc7154a2 Mon Sep 17 00:00:00 2001 From: tang peng Date: Fri, 25 Sep 2020 15:15:00 +0800 Subject: [PATCH] Added some tools for engine instance management Issue-ID: HOLMES-365 Signed-off-by: tang peng Change-Id: Ie57ca3eaa0ffda7c3f611b07293ceedd75d08a91 --- holmes-actions/pom.xml | 2 +- .../holmes/common/engine/dao/EngineEntityDao.java | 44 ++++++++ .../common/engine/dao/EngineEntityMapper.java | 35 ++++++ .../holmes/common/engine/entity/EngineEntity.java | 74 ++++++++++++ .../common/engine/service/EngineEntityService.java | 31 ++++++ .../service/impl/EngineEntityServiceImpl.java | 62 +++++++++++ .../common/engine/dao/EngineEntityMapperTest.java | 62 +++++++++++ .../service/impl/EngineEntityServiceImplTest.java | 124 +++++++++++++++++++++ pom.xml | 4 +- 9 files changed, 435 insertions(+), 3 deletions(-) create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityDao.java create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityMapper.java create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/engine/entity/EngineEntity.java create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/engine/service/EngineEntityService.java create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImpl.java create mode 100644 holmes-actions/src/test/java/org/onap/holmes/common/engine/dao/EngineEntityMapperTest.java create mode 100644 holmes-actions/src/test/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImplTest.java diff --git a/holmes-actions/pom.xml b/holmes-actions/pom.xml index 4d6c3be..ca1310f 100644 --- a/holmes-actions/pom.xml +++ b/holmes-actions/pom.xml @@ -12,7 +12,7 @@ org.onap.holmes.common holmes-common-parent - 1.3.0-SNAPSHOT + 1.3.1-SNAPSHOT holmes-common-service 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 index 0000000..42e0bf4 --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityDao.java @@ -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 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 index 0000000..cda38a5 --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/engine/dao/EngineEntityMapper.java @@ -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 { + @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 index 0000000..9822fbc --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/engine/entity/EngineEntity.java @@ -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 index 0000000..0baa4de --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/engine/service/EngineEntityService.java @@ -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 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 index 0000000..926af13 --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImpl.java @@ -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 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 index 0000000..ad684da --- /dev/null +++ b/holmes-actions/src/test/java/org/onap/holmes/common/engine/dao/EngineEntityMapperTest.java @@ -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 index 0000000..7058943 --- /dev/null +++ b/holmes-actions/src/test/java/org/onap/holmes/common/engine/service/impl/EngineEntityServiceImplTest.java @@ -0,0 +1,124 @@ +/** + * 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 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 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 getJdbiDaoByOnDemand(Class daoClazz) { + + return (T) dao; + + } +} + +class EngineEntityDaoStub implements EngineEntityDao { + + private Set 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 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 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ holmes-common-parent pom - 1.3.0-SNAPSHOT + 1.3.1-SNAPSHOT holmes-common holmes-actions @@ -59,7 +59,7 @@ org.onap.msb.java-sdk msb-java-sdk - 1.1.1 + 1.2.5 org.glassfish.jersey.containers -- 2.16.6