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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import io.eguan.configuration.ConfigValidationException;
import io.eguan.configuration.MetaConfiguration;
import io.eguan.dtx.DtxConstants;
import io.eguan.dtx.DtxLocalNodeMXBean;
import io.eguan.dtx.DtxManager;
import io.eguan.dtx.DtxManagerConfig;
import io.eguan.dtx.DtxManagerMXBean;
import io.eguan.dtx.DtxNode;
import io.eguan.dtx.DtxNodeState;
import io.eguan.dtx.DtxPeerAdm;
import io.eguan.dtx.DtxRequestQueueAdm;
import io.eguan.dtx.DtxResourceManagerAdm;
import io.eguan.dtx.DtxResourceManagerState;
import io.eguan.dtx.DtxTaskAdm;
import io.eguan.dtx.DtxTaskStatus;
import io.eguan.dtx.DtxManager.DtxLocalNode;
import io.eguan.dtx.DtxPeerAdm.DtxPeerStatus;
import io.eguan.dtx.DtxResourceManagerAdm.DtxJournalStatus;
import io.eguan.dtx.config.DtxConfigurationContext;
import io.eguan.iscsisrv.IscsiServer;
import io.eguan.iscsisrv.IscsiServerConfigurationContext;
import io.eguan.nbdsrv.NbdServer;
import io.eguan.nbdsrv.NbdServerConfigurationContext;
import io.eguan.nrs.NrsConfigurationContext;
import io.eguan.utils.mapper.FileMapperConfigurationContext;
import io.eguan.vold.EnableIscsiConfigKey;
import io.eguan.vold.EnableNbdConfigKey;
import io.eguan.vold.NodeConfigKey;
import io.eguan.vold.OwnerConfigKey;
import io.eguan.vold.VoldConfigurationContext;
import io.eguan.vold.model.DeviceMXBean;
import io.eguan.vold.model.SnapshotMXBean;
import io.eguan.vold.model.VvrMXBean;
import io.eguan.vold.model.VvrManager;
import io.eguan.vold.model.VvrManagerMXBean;
import io.eguan.vold.model.VvrManagerTargetType;
import io.eguan.vold.model.VvrManagerTask;
import io.eguan.vold.model.VvrManagerTaskOperation;
import io.eguan.vold.model.VvrObjectNameFactory;
import io.eguan.vold.model.VvrTask;
import io.eguan.vvr.configuration.CommonConfigurationContext;
import io.eguan.vvr.configuration.IbsConfigurationContext;
import io.eguan.vvr.configuration.PersistenceConfigurationContext;
import io.eguan.vvr.persistence.repository.VvrTargetType;
import io.eguan.vvr.persistence.repository.VvrTaskOperation;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.file.FileSystems;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.junit.Assert;
public abstract class VvrManagerTestUtils {
/**
* Create a {@link VvrManager} instance using {@link DummyMBeanServer} as the MBeanServer.
*
* @param voldTestHelper
*
* @return A {@link VvrManager} object.
*/
public final static VvrManager createVvrManager(final VoldTestHelper voldTestHelper) throws NullPointerException,
IllegalArgumentException, IOException, ConfigValidationException {
final InetAddress bindAddr = InetAddress.getLoopbackAddress();
return createVvrManager(DummyMBeanServer.getMBeanServer1(), voldTestHelper, null, new IscsiServer(bindAddr),
new NbdServer(bindAddr));
}
/**
* Create a {@link VvrManager} instance using {@link DummyMBeanServer} as the MBeanServer.
*
* @param voldTestHelper
*
* @return A {@link VvrManager} object.
*/
public final static VvrManager createVvrManager(final VoldTestHelper voldTestHelper,
final DummyMBeanServer dummyMBeanServer) throws NullPointerException, IllegalArgumentException,
IOException, ConfigValidationException {
final InetAddress bindAddr = InetAddress.getLoopbackAddress();
return createVvrManager(dummyMBeanServer, voldTestHelper, null, new IscsiServer(bindAddr), new NbdServer(
bindAddr));
}
/**
* Create a {@link VvrManager}
*
* @param voldTestHelper
* @param dummyMBeanServer
* @param nodeId
* the node ID to set
* @param iscsi
* server
*
* @return A {@link VvrManager} object.
*/
public final static VvrManager createVvrManager(final DummyMBeanServer dummyMBeanServer,
final VoldTestHelper voldTestHelper, final String nodeId, final IscsiServer iscsiServer,
final NbdServer nbdServer) throws NullPointerException, IllegalArgumentException, IOException,
ConfigValidationException {
// Create the MetaConfiguration from the VVR template file
final File voldDir = voldTestHelper.getVoldFile();
final MetaConfiguration vvrTemplate = MetaConfiguration.newConfiguration(new File(voldDir,
VoldTestHelper.VVR_TEMPLATE), CommonConfigurationContext.getInstance(), FileMapperConfigurationContext
.getInstance(), IbsConfigurationContext.getInstance(), NrsConfigurationContext.getInstance(),
PersistenceConfigurationContext.getInstance());
// Create the MetaConfiguration from the VOLD file
final MetaConfiguration metaConfiguration = MetaConfiguration.newConfiguration(new File(voldDir,
VoldTestHelper.VOLD_CONFIG_FILE), VoldConfigurationContext.getInstance(),
IscsiServerConfigurationContext.getInstance(), NbdServerConfigurationContext.getInstance(),
DtxConfigurationContext.getInstance());
final UUID nodeUuid = (nodeId == null) ? NodeConfigKey.getInstance().getTypedValue(metaConfiguration) : UUID
.fromString(nodeId);
final VvrManager vvrManager = new VvrManager(dummyMBeanServer, OwnerConfigKey.getInstance().getTypedValue(
metaConfiguration), nodeUuid, voldTestHelper.getVvrsFile(), vvrTemplate, iscsiServer, nbdServer);
return vvrManager;
}
public final static DtxManager createDtxManagerStandAlone(final VoldTestHelper voldTestHelper)
throws NullPointerException, IllegalArgumentException, IOException, ConfigValidationException {
return createDtxManagerStandAlone(DummyMBeanServer.getMBeanServer1(), voldTestHelper);
}
public final static DtxManager createDtxManagerStandAlone(final DummyMBeanServer dummyMBeanServer,
final VoldTestHelper voldTestHelper) throws NullPointerException, IllegalArgumentException, IOException,
ConfigValidationException {
final File voldDir = voldTestHelper.getVoldFile();
// Create the MetaConfiguration from the VOLD file
final MetaConfiguration metaConfiguration = MetaConfiguration.newConfiguration(new File(voldDir,
VoldTestHelper.VOLD_CONFIG_FILE), VoldConfigurationContext.getInstance(),
IscsiServerConfigurationContext.getInstance(), NbdServerConfigurationContext.getInstance(),
DtxConfigurationContext.getInstance());
final UUID nodeUuid = NodeConfigKey.getInstance().getTypedValue(metaConfiguration);
final List<DtxNode> dtxNodes = Collections.emptyList();
// Local node: stand alone and dynamic port (no incoming connection)
final InetSocketAddress localPeer = new InetSocketAddress("localhost", 0);
final DtxNode localDtxNode = new DtxNode(nodeUuid, localPeer);
final String clusterName = OwnerConfigKey.getInstance().getTypedValue(metaConfiguration).toString();
final String clusterPassword = clusterName; // TODO temporary password
final DtxManagerConfig dtxManagerConfig = new DtxManagerConfig(metaConfiguration, FileSystems.getDefault()
.getPath(voldDir.getAbsolutePath()), clusterName, clusterPassword, localDtxNode,
dtxNodes.toArray(new DtxNode[dtxNodes.size()]));
final DtxManager dtxManager = new DtxManager(dtxManagerConfig);
dtxManager.init();
dtxManager.start();
return dtxManager;
}
public final static DtxManager createDtxManager(final DummyMBeanServer dummyMBeanServer,
final VoldTestHelper voldTestHelper, final DtxNode localDtxNode, final ArrayList<DtxNode> otherPeers)
throws NullPointerException, IllegalArgumentException, IOException, ConfigValidationException {
// Create the config of dtx manager
// Create the MetaConfiguration from the VVR template file
final File voldDir = voldTestHelper.getVoldFile();
// Create the MetaConfiguration from the VOLD file
final MetaConfiguration metaConfiguration = MetaConfiguration.newConfiguration(new File(voldDir,
VoldTestHelper.VOLD_CONFIG_FILE), VoldConfigurationContext.getInstance(),
IscsiServerConfigurationContext.getInstance(), NbdServerConfigurationContext.getInstance(),
DtxConfigurationContext.getInstance());
final DtxManagerConfig dtxManagerConfig = new DtxManagerConfig(metaConfiguration, FileSystems.getDefault()
.getPath(voldTestHelper.getVoldPath()), "clusterName", "clusterPassword", localDtxNode,
otherPeers.toArray(new DtxNode[otherPeers.size()]));
final DtxManager dtxManager = new DtxManager(dtxManagerConfig);
dtxManager.init();
dtxManager.start();
return dtxManager;
}
public final static ObjectName registerDtxManagerMXBean(final DummyMBeanServer dummyMBeanServer,
final VoldTestHelper voldTestHelper, final DtxManager dtxManager) {
final ObjectName dtxManagerObjectName = voldTestHelper.newDtxManagerObjectName();
dummyMBeanServer.register(dtxManager, dtxManagerObjectName);
return dtxManagerObjectName;
}
public final static ObjectName registerDtxLocalNodeMXBean(final DummyMBeanServer dummyMBeanServer,
final VoldTestHelper voldTestHelper, final DtxLocalNode dtxLocalNode) {
final ObjectName dtxLocalNodeObjectName = voldTestHelper.newDtxLocalNodeObjectName();
dummyMBeanServer.register(dtxLocalNode, dtxLocalNodeObjectName);
return dtxLocalNodeObjectName;
}
public final static IscsiServer createIscsiServer(final DummyMBeanServer dummyMBeanServer,
final VoldTestHelper voldTestHelper) throws Exception {
// Get the config of dtx manager
// Create the MetaConfiguration from the VVR template file
final File voldDir = voldTestHelper.getVoldFile();
// Create the MetaConfiguration from the VOLD file
final MetaConfiguration metaConfiguration = MetaConfiguration.newConfiguration(new File(voldDir,
VoldTestHelper.VOLD_CONFIG_FILE), VoldConfigurationContext.getInstance(),
IscsiServerConfigurationContext.getInstance(), NbdServerConfigurationContext.getInstance(),
DtxConfigurationContext.getInstance());
// Create server
final IscsiServer iscsiServer = new IscsiServer(metaConfiguration);
final boolean enableIscsiServer = EnableIscsiConfigKey.getInstance().getTypedValue(metaConfiguration)
.booleanValue();
if (enableIscsiServer) {
iscsiServer.start();
}
// Export MXBean?
// final String iscsiServerObjNameStr = iscsiServer.getClass().getPackage().getName() + ":type=Server";
// ObjectName iscsiServerObjName = new ObjectName(iscsiServerObjNameStr);
// dummyMBeanServer.registerMBean(iscsiServer, iscsiServerObjName);
return iscsiServer;
}
public final static ObjectName getIscsiServerObjectName(final IscsiServer iscsiServer)
throws MalformedObjectNameException {
return new ObjectName(iscsiServer.getClass().getPackage().getName() + ":type=Server");
}
public final static NbdServer createNbdServer(final DummyMBeanServer dummyMBeanServer,
final VoldTestHelper voldTestHelper) throws Exception {
// Get the config of dtx manager
// Create the MetaConfiguration from the VVR template file
final File voldDir = voldTestHelper.getVoldFile();
// Create the MetaConfiguration from the VOLD file
final MetaConfiguration metaConfiguration = MetaConfiguration.newConfiguration(new File(voldDir,
VoldTestHelper.VOLD_CONFIG_FILE), VoldConfigurationContext.getInstance(),
IscsiServerConfigurationContext.getInstance(), NbdServerConfigurationContext.getInstance(),
DtxConfigurationContext.getInstance());
// Create server
final NbdServer nbdServer = new NbdServer(metaConfiguration);
final boolean enableNbdServer = EnableNbdConfigKey.getInstance().getTypedValue(metaConfiguration)
.booleanValue();
if (enableNbdServer) {
nbdServer.start();
}
// Export MXBean?
// final String nbdServerObjNameStr = nbdServer.getClass().getPackage().getName() + ":type=Server";
// ObjectName nbdServerObjName = new ObjectName(nbdServerObjNameStr);
// dummyMBeanServer.registerMBean(nbdServer, nbdServerObjName);
return nbdServer;
}
public final static ObjectName getNbdServerObjectName(final NbdServer nbdServer)
throws MalformedObjectNameException {
return new ObjectName(nbdServer.getClass().getPackage().getName() + ":type=Server");
}
public final static ObjectName getVvrManagerObjectName(final UUID ownerUuid) throws MalformedObjectNameException {
return VvrObjectNameFactory.newVvrManagerObjectName(ownerUuid);
}
public final static ObjectName getDtxManagerObjectName(final UUID ownerUuid) throws MalformedObjectNameException {
return VvrObjectNameFactory.newDtxManagerObjectName(ownerUuid);
}
public final static DtxManagerMXBean getDtxManagerMXBean(final DummyMBeanServer server, final UUID ownerUuid)
throws MalformedObjectNameException {
final ObjectName dtxManagerObjectName = getDtxManagerObjectName(ownerUuid);
return (DtxManagerMXBean) server.getMXBean(dtxManagerObjectName);
}
public final static ObjectName getDtxLocalNodeObjectName(final UUID ownerUuid) throws MalformedObjectNameException {
return VvrObjectNameFactory.newDtxLocalNodeObjectName(ownerUuid);
}
public final static DtxLocalNodeMXBean getDtxLocalNodeMXBean(final DummyMBeanServer server, final UUID ownerUuid)
throws MalformedObjectNameException {
final ObjectName dtxLocalNodeObjectName = getDtxLocalNodeObjectName(ownerUuid);
return (DtxLocalNodeMXBean) server.getMXBean(dtxLocalNodeObjectName);
}
public final static VvrManagerMXBean getVvrManagerMXBean(final DummyMBeanServer server, final UUID ownerUuid)
throws MalformedObjectNameException {
final ObjectName vvrManagerObjectName = getVvrManagerObjectName(ownerUuid);
return (VvrManagerMXBean) server.getMXBean(vvrManagerObjectName);
}
public final static ObjectName getVvrObjectName(final UUID ownerUuid, final UUID vvrUuid)
throws MalformedObjectNameException {
return VvrObjectNameFactory.newVvrObjectName(ownerUuid, vvrUuid);
}
public final static VvrMXBean getVvrMXBean(final DummyMBeanServer server, final UUID ownerUuid, final UUID vvrUuid)
throws MalformedObjectNameException {
final ObjectName vvrObjectName = getVvrObjectName(ownerUuid, vvrUuid);
return (VvrMXBean) server.getMXBean(vvrObjectName);
}
public final static ObjectName getDeviceObjectName(final UUID ownerUuid, final UUID vvrUuid, final UUID deviceUuid)
throws MalformedObjectNameException {
return VvrObjectNameFactory.newDeviceObjectName(ownerUuid, vvrUuid, deviceUuid);
}
public final static DeviceMXBean getDeviceMXBean(final DummyMBeanServer server, final UUID ownerUuid,
final UUID vvrUuid, final UUID deviceUuid) throws MalformedObjectNameException {
final ObjectName deviceObjectName = getDeviceObjectName(ownerUuid, vvrUuid, deviceUuid);
return (DeviceMXBean) server.getMXBean(deviceObjectName);
}
public final static ObjectName getSnapshotObjectName(final UUID ownerUuid, final UUID vvrUuid,
final UUID snapshotUuid) throws MalformedObjectNameException {
return VvrObjectNameFactory.newSnapshotObjectName(ownerUuid, vvrUuid, snapshotUuid);
}
public final static SnapshotMXBean getSnapshotMXBean(final DummyMBeanServer server, final UUID ownerUuid,
final UUID vvrUuid, final UUID snapshotUuid) throws MalformedObjectNameException {
final ObjectName snapshotObjectName = getSnapshotObjectName(ownerUuid, vvrUuid, snapshotUuid);
return (SnapshotMXBean) server.getMXBean(snapshotObjectName);
}
public final static SnapshotMXBean getSnapshotRoot(final MBeanServer server, final VoldTestHelper voldTestHelper,
final UUID vvrUuid) {
final Set<SnapshotMXBean> snapshots = voldTestHelper.getSnapshots(server, vvrUuid);
final SnapshotMXBean snapshotRoot = snapshots.iterator().next();
Assert.assertNotNull(snapshotRoot);
return snapshotRoot;
}
public final static DeviceMXBean createDevice(final DummyMBeanServer server, final VoldTestHelper voldTestHelper,
final SnapshotMXBean snapshot, final UUID vvrUuid, final String deviceName, final long size) {
final String deviceTaskUuid = snapshot.createDevice(deviceName, size);
final DeviceMXBean device = voldTestHelper.getDevice(server, vvrUuid, deviceTaskUuid);
Assert.assertNotNull(device);
return device;
}
public final static SnapshotMXBean takeSnapshot(final DummyMBeanServer server, final VoldTestHelper voldTestHelper,
final DeviceMXBean device, final String snapshotName, final UUID ownerUuid, final UUID vvrUuid) {
final String snapshotTaskUuid = device.takeSnapshot(snapshotName);
final SnapshotMXBean snapshot = voldTestHelper.getSnapshot(server, vvrUuid, snapshotTaskUuid);
Assert.assertNotNull(snapshot);
return snapshot;
}
/**
* Wait for the apparition of MXBeans.
*
* @param server
* a dummyMBeanServer
* @param nbMXBean
* the wanted number of mx beans
*
* @return true if there are at least nbMXBean registered MXBeans, otherwise false.
*/
public final static boolean waitMXBeanNumber(final DummyMBeanServer server, final int nbMXBean)
throws InterruptedException {
int i = 0;
int currentNumber = 0;
while ((currentNumber = server.getNbMXBeans()) < nbMXBean && i < 100) {
Thread.sleep(200);
i++;
}
if (currentNumber >= nbMXBean) {
return true;
}
else {
return false;
}
}
public final static void checkVvrCreationTask(final String vvrTaskUuid, final String vvrUuid,
final VvrManagerTask task) {
Assert.assertEquals(vvrTaskUuid, task.getTaskId());
Assert.assertEquals(DtxTaskStatus.COMMITTED, task.getStatus());
Assert.assertEquals(vvrUuid, task.getInfo().getTargetId());
Assert.assertEquals(VvrManagerTaskOperation.CREATE, task.getInfo().getOperation());
Assert.assertEquals(VvrManagerTargetType.VVR, task.getInfo().getTargetType());
}
public final static void checkDeviceCreationTask(final String deviceTaskUuid, final String deviceUuid,
final VvrTask task) {
Assert.assertEquals(deviceTaskUuid, task.getTaskId());
Assert.assertEquals(DtxTaskStatus.COMMITTED, task.getStatus());
Assert.assertEquals(deviceUuid, task.getInfo().getTargetId());
Assert.assertEquals(VvrTaskOperation.CREATE, task.getInfo().getOperation());
Assert.assertEquals(VvrTargetType.DEVICE, task.getInfo().getTargetType());
}
public final static void checkResourceManagersAfterVvrCreation(final DtxManagerMXBean dtxManager,
final UUID vvrUuid, final UUID owner) {
final DtxResourceManagerAdm[] resourceManagers = dtxManager.getResourceManagers();
assertEquals(2, resourceManagers.length);
boolean foundVvr = false;
boolean foundVvrManager = false;
for (final DtxResourceManagerAdm resMgr : resourceManagers) {
assertEquals(DtxResourceManagerState.UP_TO_DATE, resMgr.getStatus());
if (resMgr.getUuid().equals(vvrUuid.toString())) {
foundVvr = true;
assertTrue(DtxConstants.DEFAULT_LAST_TX_VALUE == resMgr.getLastTransaction());
}
else if (resMgr.getUuid().equals(owner.toString())) {
foundVvrManager = true;
assertFalse(DtxConstants.DEFAULT_LAST_TX_VALUE == resMgr.getLastTransaction());
}
assertFalse("".equals(resMgr.getJournalPath()));
assertTrue(DtxJournalStatus.STARTED.equals(resMgr.getJournalStatus()));
}
assertTrue(foundVvr);
assertTrue(foundVvrManager);
}
public final static void checkResourceManagersAfterDeviceCreation(final DtxManagerMXBean dtxManager,
final UUID vvrUuid, final UUID owner) {
final DtxResourceManagerAdm[] resourceManagers = dtxManager.getResourceManagers();
assertEquals(2, resourceManagers.length);
boolean foundVvr = false;
boolean foundVvrManager = false;
for (final DtxResourceManagerAdm resMgr : resourceManagers) {
assertEquals(DtxResourceManagerState.UP_TO_DATE, resMgr.getStatus());
if (resMgr.getUuid().equals(vvrUuid.toString())) {
foundVvr = true;
assertFalse(DtxConstants.DEFAULT_LAST_TX_VALUE == resMgr.getLastTransaction());
}
else if (resMgr.getUuid().equals(owner.toString())) {
foundVvrManager = true;
assertFalse(DtxConstants.DEFAULT_LAST_TX_VALUE == resMgr.getLastTransaction());
}
assertFalse("".equals(resMgr.getJournalPath()));
assertTrue(DtxJournalStatus.STARTED.equals(resMgr.getJournalStatus()));
}
assertTrue(foundVvr);
assertTrue(foundVvrManager);
}
public static final void checkRequestQueueEmpty(final DtxManagerMXBean dtxManager) {
// No pending request
final DtxRequestQueueAdm requestQueue = dtxManager.getRequestQueue();
assertEquals(0, requestQueue.getNbOfPendingRequests());
assertEquals("", requestQueue.getNextTaskID());
assertEquals("", requestQueue.getNextResourceManagerID());
}
public static final void checkDtxTasksListAfterVvrCreation(final DtxManagerMXBean dtxManager, final UUID vvrUuid,
final UUID owner, final int before) {
// Check tasks list
final DtxTaskAdm[] vvrManagerDtxTasks = dtxManager.getResourceManagerTasks(owner.toString());
assertEquals(before + 1, vvrManagerDtxTasks.length);
final DtxTaskAdm[] vvrDtxTasks = dtxManager.getResourceManagerTasks(vvrUuid.toString());
assertEquals(0, vvrDtxTasks.length);
}
public static final void checkDtxTasksListAfterDeviceCreation(final DtxManagerMXBean dtxManager,
final UUID vvrUuid, final String deviceTaskUuidStr, final int before) {
// Check vvr Tasks
final DtxTaskAdm[] vvrDtxTasks = dtxManager.getResourceManagerTasks(vvrUuid.toString());
assertEquals(before + 3, vvrDtxTasks.length);
boolean foundTask = false;
for (final DtxTaskAdm task : vvrDtxTasks) {
if (deviceTaskUuidStr.equals(task.getTaskId())) {
assertEquals(DtxTaskStatus.COMMITTED, vvrDtxTasks[0].getStatus());
foundTask = true;
}
}
assertTrue(foundTask);
}
public static final void checkDtxLocalNode(final DtxLocalNodeMXBean dtxLocalNode,
final InetSocketAddress localPeer, final int nbPeers) {
// Node state is STARTED
assertEquals(DtxNodeState.STARTED, dtxLocalNode.getStatus());
assertEquals(localPeer.getAddress().getHostAddress(), dtxLocalNode.getIpAddress());
assertEquals(localPeer.getPort(), dtxLocalNode.getPort());
// No peers
assertEquals(nbPeers, dtxLocalNode.getPeers().length);
assertEquals(dtxLocalNode.getCurrentAtomicLong(), dtxLocalNode.getNextAtomicLong());
}
public static final void checkDtxLocalNodePeerStatus(final DtxLocalNodeMXBean dtxLocalNode, final UUID peerUuid,
final boolean isStarted) {
final DtxPeerAdm[] peers = dtxLocalNode.getPeers();
boolean found = false;
for (final DtxPeerAdm peer : peers) {
if (peer.getUuid().equals(peerUuid.toString())) {
found = true;
if (isStarted) {
assertEquals(DtxPeerStatus.ONLINE, peer.getStatus());
}
else {
assertEquals(DtxPeerStatus.OFFLINE, peer.getStatus());
}
}
}
assertTrue(found);
}
}