Moti Asayag has uploaded a new change for review. Change subject: engine: Add NetworkAttachment dao ......................................................................
engine: Add NetworkAttachment dao Change-Id: I84187f3900b9e3f8a917fc4e4126de9e50e231b4 Signed-off-by: Moti Asayag <[email protected]> --- M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java A backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java A backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M packaging/dbscripts/network_sp.sql A packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql 9 files changed, 398 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/81/32581/1 diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java index 6fe6d86..9664cdc 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java @@ -130,6 +130,7 @@ import org.ovirt.engine.core.dao.gluster.GlusterServiceDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao; import org.ovirt.engine.core.dao.network.InterfaceDao; +import org.ovirt.engine.core.dao.network.NetworkAttachmentDao; import org.ovirt.engine.core.dao.network.NetworkClusterDao; import org.ovirt.engine.core.dao.network.NetworkDao; import org.ovirt.engine.core.dao.network.NetworkQoSDao; @@ -1145,4 +1146,14 @@ public CpuProfileDao getCpuProfileDao() { return getDao(CpuProfileDao.class); } + + /** + * Returns the singleton instance of {@link NetworkAttachmentDao}. + * + * @return the dao + */ + public NetworkAttachmentDao getNetworkAttachmentDao() { + return getDao(NetworkAttachmentDao.class); + } + } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java new file mode 100644 index 0000000..7e4c077 --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.dao.network; + +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.GenericDao; + +public interface NetworkAttachmentDao extends GenericDao<NetworkAttachment, Guid> { + + /** + * Retrieves all network attachments associated with the given network interface. + * + * @param nicId + * the network interface ID + * @return the list of network attachments + */ + List<NetworkAttachment> getAllForNic(Guid nicId); +} diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java new file mode 100644 index 0000000..5a29a6f --- /dev/null +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java @@ -0,0 +1,84 @@ +package org.ovirt.engine.core.dao.network; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.LinkedHashMap; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.network.IpConfiguration; +import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment; +import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; +import org.ovirt.engine.core.common.utils.EnumUtils; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.DefaultGenericDaoDbFacade; +import org.ovirt.engine.core.utils.SerializationFactory; +import org.springframework.jdbc.core.RowMapper; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; + +public class NetworkAttachmentDaoDbFacadeImpl extends DefaultGenericDaoDbFacade<NetworkAttachment, Guid> implements NetworkAttachmentDao { + + public NetworkAttachmentDaoDbFacadeImpl() { + super("NetworkAttachment"); + } + + @Override + public List<NetworkAttachment> getAllForNic(Guid nicId) { + return getCallsHandler().executeReadList("GetNetworkAttachmentsByNicId", + NetworkAttachmentRowMapper.INSTANCE, + getCustomMapSqlParameterSource().addValue("nic_id", nicId)); + } + + @Override + protected MapSqlParameterSource createFullParametersMapper(NetworkAttachment networkAttachment) { + MapSqlParameterSource mapper = createIdParameterMapper(networkAttachment.getId()) + .addValue("network_id", networkAttachment.getNetworkId()) + .addValue("nic_id", networkAttachment.getNicId()) + .addValue("custom_properties", + SerializationFactory.getSerializer().serialize(networkAttachment.getProperties())); + + IpConfiguration ipConfiguration = networkAttachment.getIpConfiguration(); + if (ipConfiguration != null) { + mapper.addValue("boot_protocol", EnumUtils.nameOrNull(ipConfiguration.getBootProtocol())) + .addValue("address", ipConfiguration.getAddress()) + .addValue("netmask", ipConfiguration.getNetmask()) + .addValue("gateway", ipConfiguration.getGateway()); + } + + return mapper; + } + + @Override + protected MapSqlParameterSource createIdParameterMapper(Guid id) { + return getCustomMapSqlParameterSource().addValue("id", id); + } + + @Override + protected RowMapper<NetworkAttachment> createEntityRowMapper() { + return NetworkAttachmentRowMapper.INSTANCE; + } + + private static class NetworkAttachmentRowMapper implements RowMapper<NetworkAttachment> { + + public static final NetworkAttachmentRowMapper INSTANCE = new NetworkAttachmentRowMapper(); + + @SuppressWarnings("unchecked") + @Override + public NetworkAttachment mapRow(ResultSet rs, int rowNum) throws SQLException { + NetworkAttachment entity = new NetworkAttachment(); + entity.setId(getGuid(rs, "id")); + entity.setNetworkId(getGuid(rs, "network_id")); + entity.setNicId(getGuid(rs, "nic_id")); + entity.setProperties(SerializationFactory.getDeserializer() + .deserializeOrCreateNew(rs.getString("custom_properties"), LinkedHashMap.class)); + + IpConfiguration ipConfiguration = new IpConfiguration(); + String bootProtocol = rs.getString("boot_protocol"); + ipConfiguration.setBootProtocol(bootProtocol == null ? null : NetworkBootProtocol.valueOf(bootProtocol)); + ipConfiguration.setAddress(rs.getString("address")); + ipConfiguration.setNetmask(rs.getString("netmask")); + ipConfiguration.setGateway(rs.getString("gateway")); + entity.setIpConfiguration(ipConfiguration); + return entity; + } + } +} diff --git a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties index 92dde0e..07adea2 100644 --- a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties +++ b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties @@ -88,3 +88,4 @@ VdsKdumpStatusDao=org.ovirt.engine.core.dao.VdsKdumpStatusDaoDbFacadeImpl DiskProfileDao=org.ovirt.engine.core.dao.profiles.DiskProfileDaoDbFacadeImpl CpuProfileDao=org.ovirt.engine.core.dao.profiles.CpuProfileDaoDbFacadeImpl +NetworkAttachmentDao=org.ovirt.engine.core.dao.network.NetworkAttachmentDaoDbFacadeImpl \ No newline at end of file diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java index 184e347..8b3d363 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java @@ -511,6 +511,12 @@ public static final int NUMBER_OF_VM_INTERFACES = 4; + public static final Guid NETWORK_ATTACHMENT = new Guid("fd81f1f1-785b-4579-ab75-1419ebb87051"); + + public static final Guid NETWORK_ATTACHMENT_NIC = new Guid("ba31682e-6ae7-4f9d-8c6f-04c93acca9dd"); + + public static final int NUMBER_OF_NETWORK_ATTACHMENTS = 2; + /** * Gluster Hook ID(s) */ diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java new file mode 100644 index 0000000..bb5b223 --- /dev/null +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java @@ -0,0 +1,123 @@ +package org.ovirt.engine.core.dao.network; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.network.IpConfiguration; +import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment; +import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.BaseDAOTestCase; +import org.ovirt.engine.core.dao.FixturesTool; + + +public class NetworkAttachmentDaoTest extends BaseDAOTestCase { + + private NetworkAttachment networkAttachment; + private NetworkAttachmentDao dao; + + @Override + public void setUp() throws Exception { + super.setUp(); + + dao = dbFacade.getNetworkAttachmentDao(); + networkAttachment = new NetworkAttachment(); + networkAttachment.setId(Guid.newGuid()); + networkAttachment.setNetworkId(FixturesTool.NETWORK_ENGINE); + IpConfiguration ipConfiguration = new IpConfiguration(); + ipConfiguration.setBootProtocol(NetworkBootProtocol.DHCP); + networkAttachment.setIpConfiguration(ipConfiguration); + } + + /** + * Ensures null is returned. + */ + @Test + public void testGetWithNonExistingId() { + NetworkAttachment result = dao.get(Guid.newGuid()); + + assertNull(result); + } + + /** + * Ensures that the network attachment is returned. + */ + @Test + public void testGet() { + NetworkAttachment result = dao.get(FixturesTool.NETWORK_ATTACHMENT); + + assertNotNull(result); + assertEquals(FixturesTool.NETWORK_ATTACHMENT, result.getId()); + assertEquals(NetworkBootProtocol.DHCP, result.getIpConfiguration().getBootProtocol()); + } + + /** + * Ensures that network attachments are returned. + */ + @Test + public void testGetAllForNic() { + List<NetworkAttachment> result = dao.getAllForNic(FixturesTool.NETWORK_ATTACHMENT_NIC); + + assertNotNull(result); + assertEquals(FixturesTool.NUMBER_OF_NETWORK_ATTACHMENTS, result.size()); + } + + /** + * Ensures that a populated collection is returned. + */ + @Test + public void testGetAll() { + List<NetworkAttachment> result = dao.getAll(); + + assertNotNull(result); + assertEquals(result.size(), FixturesTool.NUMBER_OF_NETWORK_ATTACHMENTS); + } + + /** + * Ensures that the save is working correctly + */ + @Test + public void testSave() { + dao.save(networkAttachment); + NetworkAttachment result = dao.get(networkAttachment.getId()); + assertNotNull(result); + assertEquals(networkAttachment.getId(), result.getId()); + assertEquals(NetworkBootProtocol.DHCP, result.getIpConfiguration().getBootProtocol()); + } + + /** + * Ensures that the update is working correctly + */ + @Test + public void testUpdate() { + dao.save(networkAttachment); + networkAttachment.getIpConfiguration().setBootProtocol(NetworkBootProtocol.NONE); + Map<String, String> properties = new HashMap<>(); + properties.put("key", "value"); + networkAttachment.setProperties(properties); + dao.update(networkAttachment); + NetworkAttachment result = dao.get(networkAttachment.getId()); + assertNotNull(result); + assertEquals(networkAttachment.getId(), result.getId()); + assertEquals(NetworkBootProtocol.NONE, result.getIpConfiguration().getBootProtocol()); + assertEquals(properties, result.getProperties()); + } + + /** + * Ensures that the remove is working correctly + */ + @Test + public void testRemove() { + dao.save(networkAttachment); + NetworkAttachment result = dao.get(networkAttachment.getId()); + assertNotNull(result); + dao.remove(networkAttachment.getId()); + assertNull(dao.get(networkAttachment.getId())); + } +} diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index b2e1360..d1df673 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -5265,6 +5265,43 @@ </row> </table> + <table name="network_attachments"> + <column>id</column> + <column>network_id</column> + <column>nic_id</column> + <column>boot_protocol</column> + <column>address</column> + <column>netmask</column> + <column>gateway</column> + <column>custom_properties</column> + <column>_create_date</column> + <column>_update_date</column> + <row> + <value>fd81f1f1-785b-4579-ab75-1419ebb87051</value> + <value>58d5c1c6-cb15-4832-b2a4-023770607189</value> + <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9dd</value> + <value>DHCP</value> + <null /> + <null /> + <null /> + <value>{ "prop1" : "true", "prop2" : "123456" }</value> + <value>2013-07-02 08:38:36</value> + <value>2013-07-02 08:38:36</value> + </row> + <row> + <value>fd81f1f1-785b-4579-ab75-1419ebb87052</value> + <value>58d5c1c6-cb15-4832-b2a4-023770607190</value> + <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9dd</value> + <value>NONE</value> + <null /> + <null /> + <null /> + <null /> + <value>2013-07-02 08:38:36</value> + <value>2013-07-02 08:38:36</value> + </row> + </table> + <table name="vm_pool_map"> <column>vm_pool_id</column> <column>vm_guid</column> diff --git a/packaging/dbscripts/network_sp.sql b/packaging/dbscripts/network_sp.sql index 9f9f5d7..7a25a2e 100644 --- a/packaging/dbscripts/network_sp.sql +++ b/packaging/dbscripts/network_sp.sql @@ -1291,3 +1291,101 @@ END; $procedure$ LANGUAGE plpgsql; +------------------------------------------------------------------------------------------- +-- Network attachments +------------------------------------------------------------------------------------------- + +Create or replace FUNCTION GetNetworkAttachmentByNetworkAttachmentId(v_id UUID) +RETURNS SETOF network_attachments STABLE + AS $procedure$ +BEGIN + + RETURN QUERY SELECT * + FROM network_attachments + WHERE id = v_id; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION InsertNetworkAttachment(v_id UUID, + v_network_id UUID NOT NULL, + v_nic_id UUID, + v_boot_protocol CHARACTER VARYING(20), + v_address CHARACTER VARYING(20), + v_netmask CHARACTER VARYING(20), + v_gateway CHARACTER VARYING(20), + v_custom_properties TEXT) +RETURNS VOID + AS $procedure$ +BEGIN + + INSERT INTO network_attachments(id, network_id, nic_id, boot_protocol, address, netmask, gateway, custom_properties) + VALUES(v_id, v_network_id, v_nic_id, v_boot_protocol, v_address, v_netmask, v_gateway, custom_properties); + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION UpdateNetworkAttachment(v_id UUID, + v_network_id UUID NOT NULL, + v_nic_id UUID, + v_boot_protocol CHARACTER VARYING(20), + v_address CHARACTER VARYING(20), + v_netmask CHARACTER VARYING(20), + v_gateway CHARACTER VARYING(20), + v_custom_properties TEXT) +RETURNS VOID + AS $procedure$ +BEGIN + + UPDATE network_attachments + SET network_id = v_network_id, + nic_id = v_nic_id, + boot_protocol = v_boot_protocol, + address = v_address, + netmask = v_netmask, + gateway = v_gateway, + custom_properties = v_custom_properties, + _update_date = LOCALTIMESTAMP + WHERE id = v_id; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION DeleteNetworkAttachment(v_id UUID) +RETURNS VOID + AS $procedure$ +BEGIN + + DELETE FROM network_attachments + WHERE id = v_id; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION GetAllFromNetworkAttachments() +RETURNS SETOF network_attachments STABLE + AS $procedure$ +BEGIN + + RETURN QUERY SELECT * + FROM network_attachments; + +END; $procedure$ +LANGUAGE plpgsql; + + +Create or replace FUNCTION GetNetworkAttachmentsByNicId(v_nic_id UUID) +RETURNS SETOF network_attachments STABLE + AS $procedure$ +BEGIN + + RETURN QUERY SELECT * + FROM network_attachments + WHERE nic_id = v_nic_id; + +END; $procedure$ +LANGUAGE plpgsql; diff --git a/packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql b/packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql new file mode 100644 index 0000000..d77c238 --- /dev/null +++ b/packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql @@ -0,0 +1,19 @@ +--------------------------------------------------------------------- +-- table network_attachments +--------------------------------------------------------------------- +CREATE TABLE network_attachments +( + id UUID NOT NULL CONSTRAINT pk_network_attachments_id PRIMARY KEY, + network_id UUID NOT NULL, + nic_id UUID, + boot_protocol CHARACTER VARYING(20), + address CHARACTER VARYING(20), + netmask CHARACTER VARYING(20), + gateway CHARACTER VARYING(20), + custom_properties TEXT, + _create_date TIMESTAMP WITH TIME ZONE DEFAULT ('now'::text)::timestamp without time zone, + _update_date TIMESTAMP WITH TIME ZONE, + FOREIGN KEY (network_id) REFERENCES network(id) ON DELETE CASCADE +); + +CREATE INDEX IDX_network_attachments_network_id ON network_attachments(network_id); -- To view, visit http://gerrit.ovirt.org/32581 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I84187f3900b9e3f8a917fc4e4126de9e50e231b4 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Moti Asayag <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
