use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class ClientTest method testProcessCommandWithValidInput.
private void testProcessCommandWithValidInput(Command command, String[] parameters, String expected) throws Exception {
Client client = new Client(new String[] { "-runmode", "gendatamodel" });
File tempFile = _folder.newFile("writer");
FileWriter writer = new FileWriter(tempFile);
String[] args = ArrayUtils.addAll(new String[] { command.commandName() }, parameters);
client._logger = new BatfishLogger("output", false);
assertTrue(client.processCommand(args, writer));
assertThat(client.getLogger().getHistory().toString(500), equalTo(expected));
writer.close();
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class ClientTest method testLoadQuestionsNames.
@Test
public void testLoadQuestionsNames() throws Exception {
Client client = new Client(new String[] { "-runmode", "gendatamodel", "-prettyanswers", "false" });
JSONObject testQuestion = new JSONObject();
testQuestion.put("instance", new JSONObject().put("instanceName", "testQuestionName").put("description", "test question description"));
Path questionJsonPath = _folder.newFile("testquestion.json").toPath();
CommonUtil.writeFile(questionJsonPath, testQuestion.toString());
client._logger = new BatfishLogger("output", false);
client.processCommand(new String[] { LOAD_QUESTIONS.commandName(), questionJsonPath.getParent().toString() }, null);
// Reading the answer written by load-questions
Answer answerLoadQuestions = _mapper.readValue(client.getLogger().getHistory().toString(BatfishLogger.LEVEL_OUTPUT), Answer.class);
LoadQuestionAnswerElement ae = (LoadQuestionAnswerElement) answerLoadQuestions.getAnswerElements().get(0);
// Checking that question name in answer element matches instanceName in file
assertEquals("testQuestionName", ae.getAdded().first());
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class ClientTest method testDefaultCase.
@Test
public void testDefaultCase() throws Exception {
Client client = new Client(new String[] { "-runmode", "gendatamodel" });
File tempFile = _folder.newFile("writer");
FileWriter writer = new FileWriter(tempFile);
client._logger = new BatfishLogger("output", false);
String[] args = new String[] { "non-exist command" };
String expected = "Command failed: Not a valid command: \"non-exist command\"\n";
assertFalse(client.processCommand(args, writer));
assertThat(client.getLogger().getHistory().toString(500), equalTo(expected));
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class Driver method runBatfish.
@SuppressWarnings("deprecation")
private static String runBatfish(final Settings settings) {
final BatfishLogger logger = settings.getLogger();
try {
final Batfish batfish = new Batfish(settings, CACHED_COMPRESSED_TESTRIGS, CACHED_TESTRIGS, CACHED_COMPRESSED_DATA_PLANES, CACHED_DATA_PLANES, CACHED_ENVIRONMENT_BGP_TABLES, CACHED_ENVIRONMENT_ROUTING_TABLES, CACHED_FORWARDING_ANALYSES);
@Nullable SpanContext runBatfishSpanContext = GlobalTracer.get().activeSpan() == null ? null : GlobalTracer.get().activeSpan().context();
Thread thread = new Thread() {
@Override
public void run() {
try (ActiveSpan runBatfishSpan = GlobalTracer.get().buildSpan("Run Batfish job in a new thread and get the answer").addReference(References.FOLLOWS_FROM, runBatfishSpanContext).startActive()) {
assert runBatfishSpan != null;
Answer answer = null;
try {
answer = batfish.run();
if (answer.getStatus() == null) {
answer.setStatus(AnswerStatus.SUCCESS);
}
} catch (CleanBatfishException e) {
String msg = "FATAL ERROR: " + e.getMessage();
logger.error(msg);
batfish.setTerminatingExceptionMessage(e.getClass().getName() + ": " + e.getMessage());
answer = Answer.failureAnswer(msg, null);
} catch (QuestionException e) {
String stackTrace = ExceptionUtils.getStackTrace(e);
logger.error(stackTrace);
batfish.setTerminatingExceptionMessage(e.getClass().getName() + ": " + e.getMessage());
answer = e.getAnswer();
answer.setStatus(AnswerStatus.FAILURE);
} catch (BatfishException e) {
String stackTrace = ExceptionUtils.getStackTrace(e);
logger.error(stackTrace);
batfish.setTerminatingExceptionMessage(e.getClass().getName() + ": " + e.getMessage());
answer = new Answer();
answer.setStatus(AnswerStatus.FAILURE);
answer.addAnswerElement(e.getBatfishStackTrace());
} catch (Throwable e) {
String stackTrace = ExceptionUtils.getStackTrace(e);
logger.error(stackTrace);
batfish.setTerminatingExceptionMessage(e.getClass().getName() + ": " + e.getMessage());
answer = new Answer();
answer.setStatus(AnswerStatus.FAILURE);
answer.addAnswerElement(new BatfishException("Batfish job failed", e).getBatfishStackTrace());
} finally {
try (ActiveSpan outputAnswerSpan = GlobalTracer.get().buildSpan("Outputting answer").startActive()) {
assert outputAnswerSpan != null;
if (settings.getAnswerJsonPath() != null) {
batfish.outputAnswerWithLog(answer);
}
}
}
}
}
};
thread.start();
thread.join(settings.getMaxRuntimeMs());
if (thread.isAlive()) {
// this is deprecated but we should be safe since we don't have
// locks and such
// AF: This doesn't do what you think it does, esp. not in Java 8.
// It needs to be replaced. TODO
thread.stop();
logger.error("Batfish worker took too long. Terminated.");
batfish.setTerminatingExceptionMessage("Batfish worker took too long. Terminated.");
}
return batfish.getTerminatingExceptionMessage();
} catch (Exception e) {
String stackTrace = ExceptionUtils.getStackTrace(e);
logger.error(stackTrace);
return stackTrace;
}
}
use of org.batfish.common.BatfishLogger in project batfish by batfish.
the class WorkMgrServiceV2Test method initContainerEnvironment.
@Before
public void initContainerEnvironment() throws Exception {
BatfishLogger logger = new BatfishLogger("debug", false);
Settings settings = new Settings(new String[] {});
Main.mainInit(new String[] { "-containerslocation", _folder.getRoot().toString() });
Main.setLogger(logger);
Main.initAuthorizer();
Main.setWorkMgr(new WorkMgr(settings, logger));
}
Aggregations