package org.gridkit.jvmtool.bstub;
import static org.gridkit.nanocloud.test.maven.MavenClasspathConfig.MAVEN;
import java.lang.management.ManagementFactory;
import java.util.concurrent.Callable;
import org.gridkit.jvmtool.bstub.BStub;
import org.gridkit.nanocloud.Cloud;
import org.gridkit.nanocloud.CloudFactory;
import org.gridkit.nanocloud.VX;
import org.gridkit.vicluster.ViNode;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
public class BTPackCliCheck {
// static {
// BTWarmUp.prefetchClasses();
// }
Cloud cloud = CloudFactory.createCloud();
{
cloud.node("**").x(VX.TYPE).setLocal();
cloud.node("**").x(MAVEN)
.remove("org.gridkit.3rd.btrace", "asm")
.remove("org.gridkit.3rd.btrace", "btrace-agent")
.remove("org.gridkit.3rd.btrace", "btrace-boot")
.remove("org.gridkit.3rd.btrace", "client")
.remove("org.gridkit.3rd.btrace", "compiler")
.remove("org.gridkit.3rd.btrace", "core")
.remove("org.gridkit.3rd.btrace", "core-api")
// .remove("org.gridkit.3rd.btrace", "ext-collections")
.remove("org.gridkit.3rd.btrace", "ext-default")
.remove("org.gridkit.3rd.btrace", "instr")
.remove("org.gridkit.3rd.btrace", "runtime")
;
}
@After
public void cleanup() {
cloud.shutdown();
}
private static String PID;
static {
PID = ManagementFactory.getRuntimeMXBean().getName();
PID = PID.substring(0, PID.indexOf('@'));
}
static String getPID() {
String pid = ManagementFactory.getRuntimeMXBean().getName();
System.out.println(pid);
pid = pid.substring(0, pid.indexOf('@'));
return pid;
}
@Test
public void help() {
exec("--help");
}
@Test
public void list_commands() {
exec("--commands");
}
@Test
public void stub() {
ViNode node = cloud.node("slave");
String pid = node.exec(new Callable<String>() {
@Override
public String call() throws Exception {
return getPID();
}
});
node.submit(new Runnable() {
@Override
public void run() {
new DummyWorker().start();
}
});
exec("stub", "-p", pid, "--bt-debug", "-s", "target/test-classes/org/gridkit/jvmtool/bstub/TestScript.class", "-X");
}
private void exec(String... cmd) {
BStub sjk = new BStub();
sjk.suppressSystemExit();
StringBuilder sb = new StringBuilder();
sb.append("BTPack");
for(String c: cmd) {
sb.append(' ').append(escape(c));
}
System.out.println(sb);
Assert.assertTrue(sjk.start(cmd));
}
@SuppressWarnings("unused")
private void fail(String... cmd) {
BStub sjk = new BStub();
sjk.suppressSystemExit();
StringBuilder sb = new StringBuilder();
sb.append("BTPack");
for(String c: cmd) {
sb.append(' ').append(escape(c));
}
System.out.println(sb);
Assert.assertFalse(sjk.start(cmd));
}
private Object escape(String c) {
if (c.split("\\s").length > 1) {
return '\"' + c + '\"';
}
else {
return c;
}
}
}