package lcmc.cluster.ui;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import lcmc.AppContext;
import lcmc.common.domain.Application;
import lcmc.common.ui.main.MainPresenter;
import lcmc.common.ui.main.ProgressIndicator;
import lcmc.common.ui.utils.SwingUtils;
import lcmc.host.domain.Host;
import lcmc.testutils.IntegrationTestLauncher;
import lcmc.testutils.annotation.type.IntegrationTest;
import lcmc.common.domain.util.Tools;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public final class ClusterBrowserITest {
private IntegrationTestLauncher integrationTestLauncher;
private MainPresenter mainPresenter;
private SwingUtils swingUtils;
private ProgressIndicator progressIndicator;
@Before
public void setUp() {
integrationTestLauncher = AppContext.getBean(IntegrationTestLauncher.class);
integrationTestLauncher.initTestCluster();
mainPresenter = AppContext.getBean(MainPresenter.class);
swingUtils = AppContext.getBean(SwingUtils.class);
progressIndicator = AppContext.getBean(ProgressIndicator.class);
}
@Test
public void testProcessClusterOutput() {
final CountDownLatch nolatch = new CountDownLatch(0);
for (final Host host : integrationTestLauncher.getHosts()) {
final ClusterBrowser cb = host.getBrowser().getClusterBrowser();
assertNotNull("cb is null", cb);
StringBuffer buffer = new StringBuffer("cd");
cb.parseClusterOutput("a---reset---\r\nb", buffer, host, nolatch, Application.RunMode.LIVE);
assertEquals("cdab", buffer.toString());
buffer = new StringBuffer("");
cb.parseClusterOutput("a---reset---\r\nb", buffer, host, nolatch, Application.RunMode.LIVE);
assertEquals("ab", buffer.toString());
buffer = new StringBuffer("cd");
cb.parseClusterOutput("a---reset---\r\nb", buffer, host, nolatch, Application.RunMode.LIVE);
assertEquals("cdab", buffer.toString());
buffer = new StringBuffer("cd");
cb.parseClusterOutput("a---reset---\r\nb---reset---\r\nc", buffer, host, nolatch, Application.RunMode.LIVE);
assertEquals("cdabc", buffer.toString());
}
final List<String> files = new ArrayList<String>();
final String userHome = System.getProperty("user.home");
files.add(userHome + "/testdir/empty.xml");
for (final String dirName : new String[]{
/* userHome + "/testdir/pacemaker/shell/regression", */
userHome + "/testdir/pacemaker/pengine/test10"}) {
final File dir = new File(dirName);
if (dir.listFiles() == null) {
continue;
}
for (final File f : dir.listFiles()) {
final String file = f.getAbsolutePath();
if (file.length() > 3
&& file.substring(file.length() - 4).equals(".xml")) {
files.add(file);
}
}
}
String emptyCib = null;
final StringBuilder nodes = new StringBuilder("<nodes>\n");
for (final Host host : integrationTestLauncher.getHosts()) {
nodes.append(" <node id=\"");
nodes.append(host.getName());
nodes.append("\" uname=\"");
nodes.append(host.getName());
nodes.append("\" type=\"normal\"/>\n");
}
nodes.append("</nodes>\n");
final StringBuilder status = new StringBuilder("<status>\n");
for (final Host host : integrationTestLauncher.getHosts()) {
status.append("<node_state id=\"");
status.append(host.getName());
status.append("\" uname=\"");
status.append(host.getName());
status.append("\" ha=\"active\" in_ccm=\"true\" crmd=\"online\" "
+ "join=\"member\" expected=\"member\" "
+ "crm-debug-origin=\"do_update_resource\" "
+ "shutdown=\"0\">");
status.append("</node_state>\n");
}
status.append("</status>\n");
int i = 0;
Collections.sort(files);
for (String file : files) {
i++;
progressIndicator.startProgressIndicator(i + ": " + file);
String xml = Tools.loadFile(mainPresenter, file, true);
xml = xml.replaceAll("<nodes/>", nodes.toString())
.replaceAll("<nodes>.*?</nodes>", nodes.toString())
.replaceAll("<status>.*?</status>", status.toString())
.replaceAll("<status/>", status.toString())
.replaceAll("<\\?.*?\\?>", "");
final String cib = "---start---\n"
+ "res_status\n"
+ "ok\n"
+ "\n"
+ ">>>res_status\n"
+ "cibadmin\n"
+ "ok\n"
+ "<pcmk>\n"
+ xml
+ "</pcmk>\n"
+ ">>>cibadmin\n"
+ "---done---\n";
if (i == 1) {
emptyCib = cib;
}
final CountDownLatch firstTime = new CountDownLatch(0);
final Application.RunMode runMode = Application.RunMode.LIVE;
for (final Host host : integrationTestLauncher.getHosts()) {
final ClusterBrowser cb = host.getBrowser().getClusterBrowser();
cb.getClusterViewPanel().setDisabledDuringLoad(true);
cb.parseClusterOutput(cib, new StringBuffer(""), host, firstTime, runMode);
swingUtils.waitForSwing();
cb.getClusterViewPanel().setDisabledDuringLoad(false);
cb.getCrmGraph().repaint();
}
progressIndicator.stopProgressIndicator(i + ": " + file);
for (final Host host : integrationTestLauncher.getHosts()) {
final ClusterBrowser cb = host.getBrowser().getClusterBrowser();
swingUtils.waitForSwing();
cb.parseClusterOutput(emptyCib, new StringBuffer(""), host, firstTime, runMode);
swingUtils.waitForSwing();
}
}
}
}