package io.eguan.vold.model; /* * #%L * Project eguan * %% * Copyright (C) 2012 - 2017 Oodrive * %% * 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. * #L% */ import io.eguan.configuration.ConfigValidationException; import io.eguan.utils.Files; import io.eguan.vold.model.VvrMXBean; import io.eguan.vold.model.VvrManager; import java.io.File; import java.io.IOException; import java.util.UUID; import javax.management.ObjectName; import org.junit.After; import org.junit.Assert; import org.junit.Test; public class TestVvrManagerL extends TestVvrManagerAbstract { private VvrManagerHelper vvrManagerHelperTmp; private DummyMBeanServer serverTmp; private VvrMXBean vvrMXBean1; private VvrMXBean vvrMXBean2; public TestVvrManagerL(final Boolean startedKey) { super(startedKey); } @After public void deleteVvrs() throws Exception { if (vvrManagerHelperTmp != null) { vvrManagerHelperTmp.fini(serverTmp); } else { if (vvrMXBean1 != null) { voldTestHelper.deleteVvr(dummyMbeanServer, UUID.fromString(vvrMXBean1.getUuid())); vvrMXBean1 = null; } if (vvrMXBean2 != null) { voldTestHelper.deleteVvr(dummyMbeanServer, UUID.fromString(vvrMXBean2.getUuid())); vvrMXBean2 = null; } } } @Test public void testCreationOfVvrDir() throws NullPointerException, IllegalArgumentException, IOException, ConfigValidationException { Assert.assertTrue(voldTestHelper.getVvrsFile().isDirectory()); } @Test public void testCreationOfOneVvr() throws Exception { vvrMXBean1 = voldTestHelper.createVvr(dummyMbeanServer, "name", "description"); // VvrManager + VVR + root snapshot if started Assert.assertEquals(getDefaultMbeansNb(1), dummyMbeanServer.getNbMXBeans()); checkVvr(vvrMXBean1, "name", "description", voldTestHelper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, voldTestHelper.isVvrStarted(), voldTestHelper); } @Test(expected = IllegalStateException.class) public void testDeleteVvr() throws Exception { vvrMXBean1 = voldTestHelper.createVvr(dummyMbeanServer, "name", "description"); Assert.assertEquals(getDefaultMbeansNb(1), dummyMbeanServer.getNbMXBeans()); checkVvr(vvrMXBean1, "name", "description", voldTestHelper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, voldTestHelper.isVvrStarted(), voldTestHelper); if (voldTestHelper.isVvrStarted()) { vvrMXBean1.stop(); } vvrManager.delete(vvrMXBean1.getUuid()); Assert.assertTrue(Files.waitForFileDeletion(new File(voldTestHelper.getIbpFile(), vvrMXBean1.getUuid()), 5000)); Assert.assertTrue(Files.waitForFileDeletion(new File(voldTestHelper.getIbpGenFile(), vvrMXBean1.getUuid()), 5000)); Assert.assertTrue(Files.waitForFileDeletion(new File(voldTestHelper.getVvrsFile(), vvrMXBean1.getUuid()), 5000)); Assert.assertEquals(getDefaultMbeansNb(0), dummyMbeanServer.getNbMXBeans()); vvrMXBean1 = null; vvrMXBean2 = voldTestHelper.createVvr(dummyMbeanServer, "name", "description"); Assert.assertEquals(getDefaultMbeansNb(1), dummyMbeanServer.getNbMXBeans()); checkVvr(vvrMXBean2, "name", "description", voldTestHelper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, voldTestHelper.isVvrStarted(), voldTestHelper); if (!voldTestHelper.isVvrStarted()) { vvrMXBean2.start(); } // The Vvr is started, should raise an exception vvrManager.delete(vvrMXBean2.getUuid()); // should not go here vvrMXBean2 = null; } @Test public void testStopVvrUnregisterChildren() throws Exception { vvrMXBean1 = voldTestHelper.createVvr(dummyMbeanServer, "name", "description"); Assert.assertEquals(getDefaultMbeansNb(1), dummyMbeanServer.getNbMXBeans()); checkVvr(vvrMXBean1, "name", "description", voldTestHelper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, voldTestHelper.isVvrStarted(), voldTestHelper); if (!voldTestHelper.isVvrStarted()) { vvrMXBean1.start(); } Assert.assertEquals(VoldTestHelper.MXBEANS_NUMBER_INIT + 2, dummyMbeanServer.getNbMXBeans()); vvrMXBean1.stop(); Assert.assertEquals(VoldTestHelper.MXBEANS_NUMBER_INIT + 1, dummyMbeanServer.getNbMXBeans()); } private final DummyMBeanServer initVvrManagerHelperTmp() throws Exception { // use a temporary helper because vvrmanager must be fini during the test vvrManagerHelperTmp = new VvrManagerHelper(); serverTmp = new DummyMBeanServer(); // init as the current voldTestHelper vvrManagerHelperTmp.init(voldTestHelper.isVvrStarted(), serverTmp, 2); return serverTmp; } @Test public void testLoadPersistedVvrsWithParasites() throws Exception { final int NB_VVRS = 4; // use temporary helper final DummyMBeanServer server = initVvrManagerHelperTmp(); final VoldTestHelper helper = vvrManagerHelperTmp.getVoldTestHelper(); VvrManager vvrManagerTmp = vvrManagerHelperTmp.getVvrManager(); final String[][] createVvrParams = { { "name1", "description1" }, { "name2", null }, { null, "description2" }, { null, null } }; final VvrMXBean[] vvrMXBeans = new VvrMXBean[NB_VVRS]; for (int i = 0; i < NB_VVRS; i++) { vvrMXBeans[i] = helper.createVvr(server, createVvrParams[i][0], createVvrParams[i][1]); checkVvr(vvrMXBeans[i], createVvrParams[i][0], createVvrParams[i][1], helper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, helper.isVvrStarted(), helper); } // The registration of 1 VVR into the MBean server implies the registration of 2 mbeans. Assert.assertEquals(getDefaultMbeansNb(NB_VVRS), server.getNbMXBeans()); // Then terminate the VVR manager vvrManagerTmp.fini(); Assert.assertEquals(VoldTestHelper.MXBEANS_NUMBER_INIT - 1, server.getNbMXBeans()); // Create parasites into the VVRs directory final File fakeDirectory1 = new File(helper.getVvrsFile(), "zorglub"); Assert.assertTrue(fakeDirectory1.mkdir()); final File fakeDirectory2 = new File(helper.getVvrsFile(), UUID.randomUUID().toString()); Assert.assertTrue(fakeDirectory2.mkdir()); final File fakeFileWithUUID = new File(helper.getVvrsFile(), UUID.randomUUID().toString()); Assert.assertTrue(fakeFileWithUUID.createNewFile()); // Reload VVRs trough VVR manager vvrManagerTmp = VvrManagerTestUtils.createVvrManager(helper, server); vvrManagerHelperTmp.setVvrManager(vvrManagerTmp); VvrManagerHelper.initDtxManagement(vvrManagerTmp, vvrManagerHelperTmp.getDtxManager()); Assert.assertTrue(VvrManagerTestUtils.waitMXBeanNumber(server, getDefaultMbeansNb(NB_VVRS))); Assert.assertEquals(getDefaultMbeansNb(NB_VVRS), server.getNbMXBeans()); // Check the loaded VVRs for (int i = 0; i < NB_VVRS; i++) { final ObjectName vvrCreated = VvrManagerTestUtils.getVvrObjectName(helper.VOLD_OWNER_UUID_TEST, UUID.fromString(vvrMXBeans[i].getUuid())); vvrMXBeans[i] = (VvrMXBean) server.waitMXBean(vvrCreated); checkVvr(vvrMXBeans[i], createVvrParams[i][0], createVvrParams[i][1], helper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, helper.isVvrStarted(), helper); } } @Test public void testLoadPersistedVvrWithCfgChanged() throws Exception { // use temporary helper final DummyMBeanServer server = initVvrManagerHelperTmp(); final VoldTestHelper helper = vvrManagerHelperTmp.getVoldTestHelper(); VvrManager vvrManagerTmp = vvrManagerHelperTmp.getVvrManager(); // Create a VVR and modify its configuration VvrMXBean vvrMXBean = helper.createVvr(server, "name1", "description1"); Assert.assertEquals(getDefaultMbeansNb(1), server.getNbMXBeans()); checkVvr(vvrMXBean, "name1", "description1", helper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, voldTestHelper.isVvrStarted(), helper); vvrMXBean.setName("name11"); vvrMXBean.setDescription("description11"); checkVvr(vvrMXBean, "name11", "description11", helper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, voldTestHelper.isVvrStarted(), helper); if (!voldTestHelper.isVvrStarted()) { vvrMXBean.start(); } checkVvr(vvrMXBean, "name11", "description11", helper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, true, helper); vvrMXBean.stop(); checkVvr(vvrMXBean, "name11", "description11", helper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, false, helper); vvrManagerTmp.fini(); Assert.assertEquals(VoldTestHelper.MXBEANS_NUMBER_INIT - 1, server.getNbMXBeans()); // Reload VVRs vvrManagerTmp = VvrManagerTestUtils.createVvrManager(helper, server); vvrManagerHelperTmp.setVvrManager(vvrManagerTmp); VvrManagerHelper.initDtxManagement(vvrManagerTmp, vvrManagerHelperTmp.getDtxManager()); Assert.assertTrue(VvrManagerTestUtils.waitMXBeanNumber(server, VoldTestHelper.MXBEANS_NUMBER_INIT + 1)); Assert.assertEquals(VoldTestHelper.MXBEANS_NUMBER_INIT + 1, server.getNbMXBeans()); final ObjectName vvrCreated = VvrManagerTestUtils.getVvrObjectName(helper.VOLD_OWNER_UUID_TEST, UUID.fromString(vvrMXBean.getUuid())); vvrMXBean = (VvrMXBean) server.waitMXBean(vvrCreated); checkVvr(vvrMXBean, "name11", "description11", helper.VOLD_OWNER_UUID_TEST_STR, Boolean.TRUE, false, helper); } }