package org.ovirt.engine.core.dao.gluster; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.ovirt.engine.core.common.asynctasks.gluster.GlusterAsyncTask; import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.common.businessentities.gluster.BrickDetails; import org.ovirt.engine.core.common.businessentities.gluster.BrickProperties; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.BaseDaoTestCase; import org.ovirt.engine.core.dao.FixturesTool; public class GlusterBrickDaoTest extends BaseDaoTestCase { private GlusterBrickDao dao; private VdsStatic server; @Override public void setUp() throws Exception { super.setUp(); dao = dbFacade.getGlusterBrickDao(); server = dbFacade.getVdsStaticDao().get(FixturesTool.GLUSTER_SERVER_UUID3); } @Test public void testSaveAndGetById() { GlusterBrickEntity brickToAdd = new GlusterBrickEntity(); brickToAdd.setVolumeId(FixturesTool.GLUSTER_VOLUME_UUID1); brickToAdd.setServerId(server.getId()); brickToAdd.setServerName(server.getHostName()); brickToAdd.setBrickDirectory("/export/test-vol-distribute-1/dir3"); brickToAdd.setStatus(GlusterStatus.UP); brickToAdd.setBrickOrder(0); dao.save(brickToAdd); GlusterBrickEntity retrievedBrick = dao.getById(brickToAdd.getId()); assertNotNull(retrievedBrick); assertEquals(brickToAdd, retrievedBrick); } @Test public void testAddBrickProperties() { Guid brickId = new Guid("6ccdc294-d77b-4929-809d-8afe7634b47d"); GlusterBrickEntity brickBefore = dao.getById(brickId); assertNotNull(brickBefore); assertNull(brickBefore.getBrickProperties()); BrickProperties brickProperties = new BrickProperties(); brickProperties.setBrickId(brickId); brickProperties.setFreeSize(Long.valueOf("75000")); brickProperties.setTotalSize(Long.valueOf("250000")); dao.addBrickProperties(brickProperties); GlusterBrickEntity brickAfter = dao.getById(brickId); assertNotNull(brickAfter); assertNotNull(brickAfter.getBrickProperties()); assertEquals(250000, brickAfter.getBrickProperties().getTotalSize(), 0.0); assertEquals(75000, brickAfter.getBrickProperties().getFreeSize(), 0.0); } @Test public void testAddAllBrickProperties() { // 61c94fc7-26b0-43e3-9d26-fc9d8cd6a754 Guid brickId1 = new Guid("6ccdc294-d77b-4929-809d-8afe7634b47d"); Guid brickId2 = new Guid("61c94fc7-26b0-43e3-9d26-fc9d8cd6a754"); GlusterBrickEntity brick1 = dao.getById(brickId1); GlusterBrickEntity brick2 = dao.getById(brickId2); brick1.setBrickDetails(new BrickDetails()); BrickProperties brickProperties1 = new BrickProperties(); brickProperties1.setBrickId(brickId1); brickProperties1.setFreeSize(Long.valueOf("75000")); brickProperties1.setTotalSize(Long.valueOf("250000")); brick1.getBrickDetails().setBrickProperties(brickProperties1); brick2.setBrickDetails(new BrickDetails()); BrickProperties brickProperties2 = new BrickProperties(); brickProperties2.setBrickId(brickId2); brickProperties2.setFreeSize(Long.valueOf("175000")); brickProperties2.setTotalSize(Long.valueOf("275000")); brick2.getBrickDetails().setBrickProperties(brickProperties2); List<GlusterBrickEntity> bricksToAdd = new ArrayList<>(); bricksToAdd.add(brick1); bricksToAdd.add(brick2); dao.addBrickProperties(bricksToAdd); brick1 = dao.getById(brickId1); assertNotNull(brick1); assertNotNull(brick1.getBrickProperties()); assertEquals(250000, brick1.getBrickProperties().getTotalSize(), 0.0); assertEquals(75000, brick1.getBrickProperties().getFreeSize(), 0.0); brick2 = dao.getById(brickId2); assertNotNull(brick2); assertNotNull(brick2.getBrickProperties()); assertEquals(275000, brick2.getBrickProperties().getTotalSize(), 0.0); assertEquals(175000, brick2.getBrickProperties().getFreeSize(), 0.0); } @Test public void testGlusterVolumeBricksByServerId() { List<GlusterBrickEntity> bricks = dao.getGlusterVolumeBricksByServerId(FixturesTool.GLUSTER_SERVER_UUID3); assertNotNull(bricks); } @Test public void testGetBrickByServerIdAndDirectory() { GlusterBrickEntity brick = dao.getBrickByServerIdAndDirectory(FixturesTool.GLUSTER_BRICK_SERVER1, FixturesTool.GLUSTER_BRICK_DIR1); assertNotNull(brick); assertEquals(FixturesTool.GLUSTER_BRICK_SERVER1, brick.getServerId()); assertEquals(FixturesTool.GLUSTER_BRICK_DIR1, brick.getBrickDirectory()); } @Test public void testGetBricksByTaskId() { List<GlusterBrickEntity> bricks = dao.getGlusterVolumeBricksByTaskId(FixturesTool.GLUSTER_ASYNC_TASK_ID1); assertNotNull(bricks); assertEquals(2, bricks.size()); } @Test public void testRemove() { GlusterBrickEntity existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); dao.removeBrick(FixturesTool.GLUSTER_BRICK_UUID1); assertNull(dao.getById(FixturesTool.GLUSTER_BRICK_UUID1)); } @Test public void testRemoveMultiple() { List<GlusterBrickEntity> bricks = dao.getBricksOfVolume(FixturesTool.GLUSTER_VOLUME_UUID1); assertEquals(2, bricks.size()); List<Guid> idsToRemove = new ArrayList<>(); idsToRemove.add(bricks.get(0).getId()); idsToRemove.add(bricks.get(1).getId()); dao.removeAll(idsToRemove); bricks = dao.getBricksOfVolume(FixturesTool.GLUSTER_VOLUME_UUID1); assertTrue(bricks.isEmpty()); } @Test public void testReplaceBrick() { GlusterBrickEntity firstBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertNotNull(firstBrick); GlusterBrickEntity newBrick = new GlusterBrickEntity(); newBrick.setVolumeId(FixturesTool.GLUSTER_VOLUME_UUID1); newBrick.setServerId(server.getId()); newBrick.setServerName(server.getHostName()); newBrick.setBrickDirectory("/export/test-vol-distribute-1/dir3"); GlusterAsyncTask asyncTask = new GlusterAsyncTask(); asyncTask.setTaskId(FixturesTool.GLUSTER_ASYNC_TASK_ID1); newBrick.setAsyncTask(asyncTask); newBrick.setStatus(GlusterStatus.UP); newBrick.setBrickOrder(0); assertNull(dao.getById(newBrick.getId())); dao.replaceBrick(firstBrick, newBrick); assertNull(dao.getById(FixturesTool.GLUSTER_BRICK_UUID1)); GlusterBrickEntity retrievedBrick = dao.getById(newBrick.getId()); assertNotNull(retrievedBrick); assertEquals(newBrick, retrievedBrick); } @Test public void testUpdateBrickStatus() { GlusterBrickEntity existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); assertEquals(GlusterStatus.UP, existingBrick.getStatus()); dao.updateBrickStatus(FixturesTool.GLUSTER_BRICK_UUID1, GlusterStatus.DOWN); existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); assertEquals(GlusterStatus.DOWN, existingBrick.getStatus()); } @Test public void testGetBrickProperties() { Guid GLUSTER_BRICK_UUID1 = new Guid("2ab384da-6190-4668-aa2e-37bc5c5ff014"); Guid GLUSTER_BRICK_UUID2 = new Guid("2702bb49-3037-405c-81c5-14a38793164e"); GlusterBrickEntity brick = dao.getById(GLUSTER_BRICK_UUID1); assertNotNull(brick); assertNotNull(brick.getBrickProperties()); assertEquals(20000, brick.getBrickProperties().getFreeSize(), 0.0); assertEquals(100000, brick.getBrickProperties().getTotalSize(), 0.0); brick = dao.getById(GLUSTER_BRICK_UUID2); assertNotNull(brick); assertNotNull(brick.getBrickProperties()); assertEquals(0, brick.getBrickProperties().getFreeSize(), 0.0); assertEquals(0, brick.getBrickProperties().getTotalSize(), 0.0); } @Test public void testUpdateBrickProperties() { Guid GLUSTER_BRICK_UUID1 = new Guid("2ab384da-6190-4668-aa2e-37bc5c5ff014"); GlusterBrickEntity existingBrick = dao.getById(GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); assertNotNull(existingBrick.getBrickProperties()); BrickProperties brickProperties = existingBrick.getBrickProperties(); brickProperties.setBrickId(GLUSTER_BRICK_UUID1); brickProperties.setFreeSize(100000); brickProperties.setTotalSize(200000); dao.updateBrickProperties(brickProperties); existingBrick = dao.getById(GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); assertNotNull(existingBrick.getBrickProperties()); assertEquals(100000, existingBrick.getBrickProperties().getFreeSize(), 0.0); assertEquals(200000, existingBrick.getBrickProperties().getTotalSize(), 0.0); } @Test public void testUpdateMultiBrickProperties() { Guid GLUSTER_BRICK_UUID1 = new Guid("2ab384da-6190-4668-aa2e-37bc5c5ff014"); Guid GLUSTER_BRICK_UUID2 = new Guid("65d327f8-5864-4330-be04-fe27e1ffb553"); GlusterBrickEntity existingBrick1 = dao.getById(GLUSTER_BRICK_UUID1); assertNotNull(existingBrick1); assertNotNull(existingBrick1.getBrickProperties()); GlusterBrickEntity existingBrick2 = dao.getById(GLUSTER_BRICK_UUID2); assertNotNull(existingBrick2); assertNotNull(existingBrick2.getBrickProperties()); BrickProperties brickProperties1 = existingBrick1.getBrickProperties(); brickProperties1.setBrickId(GLUSTER_BRICK_UUID1); brickProperties1.setFreeSize(1000); brickProperties1.setTotalSize(2000); BrickProperties brickProperties2 = existingBrick2.getBrickProperties(); brickProperties2.setBrickId(GLUSTER_BRICK_UUID2); brickProperties2.setFreeSize(1000); brickProperties2.setTotalSize(3000); List<GlusterBrickEntity> bricksList = new ArrayList<>(); bricksList.add(existingBrick1); bricksList.add(existingBrick2); dao.updateBrickProperties(bricksList); existingBrick1 = dao.getById(GLUSTER_BRICK_UUID1); assertNotNull(existingBrick1); assertNotNull(existingBrick1.getBrickProperties()); assertEquals(1000, existingBrick1.getBrickProperties().getFreeSize(), 0.0); assertEquals(2000, existingBrick1.getBrickProperties().getTotalSize(), 0.0); existingBrick2 = dao.getById(GLUSTER_BRICK_UUID2); assertNotNull(existingBrick2); assertNotNull(existingBrick2.getBrickProperties()); assertEquals(1000, existingBrick2.getBrickProperties().getFreeSize(), 0.0); assertEquals(3000, existingBrick2.getBrickProperties().getTotalSize(), 0.0); } @Test public void testUpdateBrickStatuses() { GlusterBrickEntity existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterBrickEntity existingBrick1 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID2); assertNotNull(existingBrick); assertNotNull(existingBrick1); assertEquals(GlusterStatus.UP, existingBrick.getStatus()); assertEquals(GlusterStatus.UP, existingBrick1.getStatus()); List<GlusterBrickEntity> bricks = new ArrayList<>(); bricks.add(existingBrick); bricks.add(existingBrick1); dao.updateBrickStatuses(bricks); } @Test public void testUpdateBrickTask() { GlusterBrickEntity existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterAsyncTask asyncTask = new GlusterAsyncTask(); asyncTask.setTaskId(new Guid("61c94fc7-26b0-43e3-9d26-fc9d8cd6a763")); assertNotNull(existingBrick); assertEquals(GlusterStatus.UP, existingBrick.getStatus()); dao.updateBrickTask(existingBrick.getId(), FixturesTool.GLUSTER_ASYNC_TASK_ID1); GlusterBrickEntity newEnity = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, newEnity.getAsyncTask().getTaskId()); } @Test public void testUpdateBrickTasksInBatch() { GlusterBrickEntity existingBrick1 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterBrickEntity existingBrick2 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID2); GlusterAsyncTask asyncTask = new GlusterAsyncTask(); asyncTask.setTaskId(new Guid("61c94fc7-26b0-43e3-9d26-fc9d8cd6a763")); assertNotNull(existingBrick1); assertNotNull(existingBrick2); assertEquals(GlusterStatus.UP, existingBrick1.getStatus()); assertEquals(GlusterStatus.UP, existingBrick2.getStatus()); existingBrick1.setAsyncTask(asyncTask); existingBrick2.setAsyncTask(asyncTask); List<GlusterBrickEntity> bricks = new ArrayList<>(); bricks.add(existingBrick1); bricks.add(existingBrick2); dao.updateBrickTasksInBatch(bricks); GlusterBrickEntity newEnity1 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterBrickEntity newEnity2 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID2); assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, newEnity1.getAsyncTask().getTaskId()); assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, newEnity2.getAsyncTask().getTaskId()); } @Test public void testRemoveBricksInBatch() { GlusterBrickEntity existingBrick1 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterBrickEntity existingBrick2 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID2); List<GlusterBrickEntity> bricks = new ArrayList<>(); bricks.add(existingBrick1); bricks.add(existingBrick2); dao.removeAllInBatch(bricks); GlusterBrickEntity newEnity1 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterBrickEntity newEnity2 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID2); assertNull(newEnity1); assertNull(newEnity2); } @Test public void testUpdateBrickTaskByHostIdBrickDir() { GlusterBrickEntity existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterAsyncTask asyncTask = new GlusterAsyncTask(); asyncTask.setTaskId(FixturesTool.GLUSTER_ASYNC_TASK_ID1); dao.updateBrickTaskByHostIdBrickDir(existingBrick.getServerId(), existingBrick.getBrickDirectory(), FixturesTool.GLUSTER_ASYNC_TASK_ID1); GlusterBrickEntity newEnity = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, newEnity.getAsyncTask().getTaskId()); } @Test public void testUpdateAllBrickTasksByHostIdBrickDir() { GlusterBrickEntity existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterBrickEntity existingBrick2 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID2); GlusterAsyncTask asyncTask = new GlusterAsyncTask(); asyncTask.setTaskId(FixturesTool.GLUSTER_ASYNC_TASK_ID1); GlusterBrickEntity updateBrick = new GlusterBrickEntity(); updateBrick.setBrickDirectory(existingBrick.getBrickDirectory()); updateBrick.setServerId(existingBrick.getServerId()); updateBrick.setAsyncTask(asyncTask); GlusterBrickEntity updateBrick2 = new GlusterBrickEntity(); updateBrick2.setBrickDirectory(existingBrick2.getBrickDirectory()); updateBrick2.setServerId(existingBrick2.getServerId()); updateBrick2.setAsyncTask(asyncTask); List<GlusterBrickEntity> bricks = new ArrayList<>(); bricks.add(updateBrick); bricks.add(updateBrick2); dao.updateAllBrickTasksByHostIdBrickDirInBatch(bricks); GlusterBrickEntity newEntity1 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); GlusterBrickEntity newEntity2 = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, newEntity1.getAsyncTask().getTaskId()); assertEquals(FixturesTool.GLUSTER_ASYNC_TASK_ID1, newEntity2.getAsyncTask().getTaskId()); } @Test public void testUpdateBrickNetworkId() { GlusterBrickEntity existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); assertNull(existingBrick.getNetworkId()); dao.updateBrickNetworkId(FixturesTool.GLUSTER_BRICK_UUID1, FixturesTool.NETWORK_ENGINE); existingBrick = dao.getById(FixturesTool.GLUSTER_BRICK_UUID1); assertNotNull(existingBrick); assertEquals(FixturesTool.NETWORK_ENGINE, existingBrick.getNetworkId()); List<GlusterBrickEntity> bricks = dao.getAllByClusterAndNetworkId(FixturesTool.GLUSTER_CLUSTER_ID, FixturesTool.NETWORK_ENGINE); assertNotNull(bricks); } @Test public void testGetAllByClusterAndNetworkId() { dao.updateBrickNetworkId(FixturesTool.GLUSTER_BRICK_UUID1, FixturesTool.NETWORK_ENGINE); List<GlusterBrickEntity> bricks = dao.getAllByClusterAndNetworkId(FixturesTool.GLUSTER_CLUSTER_ID, FixturesTool.NETWORK_ENGINE); assertNotNull(bricks); assertEquals(1, bricks.size()); assertEquals(FixturesTool.GLUSTER_BRICK_UUID1, bricks.get(0).getId()); } }