/**
 * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.engine.fudgemsg;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;

import java.util.EnumSet;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;
import org.testng.annotations.Test;

import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.engine.calcnode.MutableExecutionLog;
import com.opengamma.engine.view.ExecutionLog;
import com.opengamma.engine.view.ExecutionLogMode;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
import com.opengamma.util.log.LogEvent;
import com.opengamma.util.log.LogLevel;
import com.opengamma.util.log.SimpleLogEvent;
import com.opengamma.util.test.TestGroup;

/**
 * Test.
 */
@Test(groups = TestGroup.UNIT)
public class ExecutionLogFudgeBuilderTest {

  @Test
  public void roundTrip() {
    MutableExecutionLog log = new MutableExecutionLog(ExecutionLogMode.FULL);
    LogEvent errorEvent = new SimpleLogEvent(LogLevel.ERROR, "error msg");
    LogEvent infoEvent1 = new SimpleLogEvent(LogLevel.INFO, "info msg");
    LogEvent infoEvent2 = new SimpleLogEvent(LogLevel.INFO, "info msg2");
    log.add(errorEvent);
    log.add(infoEvent1);
    log.add(infoEvent2);
    String execptionMsg = "exception msg";
    log.setException(new OpenGammaRuntimeException(execptionMsg));
    FudgeSerializer serializer = new FudgeSerializer(OpenGammaFudgeContext.getInstance());
    ExecutionLogFudgeBuilder builder = new ExecutionLogFudgeBuilder();
    FudgeMsg msg = builder.buildMessage(serializer, log);

    FudgeDeserializer deserializer = new FudgeDeserializer(OpenGammaFudgeContext.getInstance());
    ExecutionLog executionLog = builder.buildObject(deserializer, msg);
    assertEquals(EnumSet.<LogLevel>of(LogLevel.ERROR, LogLevel.INFO), executionLog.getLogLevels());
    List<LogEvent> events = executionLog.getEvents();
    assertTrue(events.contains(errorEvent));
    assertTrue(events.contains(infoEvent1));
    assertTrue(events.contains(infoEvent2));
    assertEquals("com.opengamma.OpenGammaRuntimeException", executionLog.getExceptionClass());
    assertEquals(execptionMsg, executionLog.getExceptionMessage());
    assertFalse(StringUtils.isEmpty(executionLog.getExceptionStackTrace()));
  }
}

@@ -1561,67 +1561,244 @@
     
-log.setException(new OpenGammaRuntimeException(execptionMsg
+assertEquals(log.getLogLevels(), EnumSet.of(LogLevel.ERROR, LogLevel.INFO));%0A    log.setException(new OpenGammaRuntimeException(execptionMsg));%0A    assertEquals(log.getLogLevels(), EnumSet.of(LogLevel.ERROR, LogLevel.INFO, LogLevel.WARN
 ));%0A
@@ -2254,16 +2254,31 @@
 vel.INFO
+, LogLevel.WARN
 ), execu

Fix test - the expected object should have WARN set following recent change.