/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.livedata.normalization; import static org.testng.AssertJUnit.assertEquals; import org.fudgemsg.MutableFudgeMsg; import org.testng.annotations.Test; import com.opengamma.core.value.MarketDataRequirementNames; import com.opengamma.livedata.server.FieldHistoryStore; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class MarketValueCalculatorTest { public void bidAskLast() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.BID, 50.80); msg.add(MarketDataRequirementNames.ASK, 50.90); msg.add(MarketDataRequirementNames.LAST, 50.89); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(msg); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(4, normalized.getAllFields().size()); assertEquals(50.85, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void bidAskOnly() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.BID, 50.80); msg.add(MarketDataRequirementNames.ASK, 50.90); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(msg); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(3, normalized.getAllFields().size()); assertEquals(50.85, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void lastOnly() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.LAST, 50.89); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(msg); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(2, normalized.getAllFields().size()); assertEquals(50.89, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void bigSpread() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.BID, 50.0); msg.add(MarketDataRequirementNames.ASK, 100.0); msg.add(MarketDataRequirementNames.LAST, 55.12); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(msg); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(4, normalized.getAllFields().size()); assertEquals(55.12, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void bigSpreadHistory() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg historicalMsg = OpenGammaFudgeContext.getInstance().newMessage(); historicalMsg.add(MarketDataRequirementNames.LAST, 45); // Should never use this FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(historicalMsg); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.BID, 50.0); msg.add(MarketDataRequirementNames.ASK, 100.0); msg.add(MarketDataRequirementNames.LAST, 50.52); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(4, normalized.getAllFields().size()); assertEquals(50.52, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void bigSpreadLowLast() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.BID, 50.0); msg.add(MarketDataRequirementNames.ASK, 100.0); msg.add(MarketDataRequirementNames.LAST, 44.50); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(msg); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(4, normalized.getAllFields().size()); assertEquals(50.0, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void bigSpreadHighLast() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.BID, 50.0); msg.add(MarketDataRequirementNames.ASK, 100.0); msg.add(MarketDataRequirementNames.LAST, 120.0); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(msg); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(4, normalized.getAllFields().size()); assertEquals(100.0, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void useHistoricalBidAsk() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg historicalMsg = OpenGammaFudgeContext.getInstance().newMessage(); historicalMsg.add(MarketDataRequirementNames.BID, 50.0); historicalMsg.add(MarketDataRequirementNames.ASK, 51.0); historicalMsg.add(MarketDataRequirementNames.MARKET_VALUE, 50.52); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(historicalMsg); MutableFudgeMsg newMsg = OpenGammaFudgeContext.getInstance().newMessage(); newMsg.add(MarketDataRequirementNames.LAST, 50.89); MutableFudgeMsg normalized = calculator.apply(newMsg, "123", store); assertEquals(2, normalized.getAllFields().size()); assertEquals(50.5, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void useHistoricalMarketValueWithEmptyMsg() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg historicalMsg = OpenGammaFudgeContext.getInstance().newMessage(); historicalMsg.add(MarketDataRequirementNames.MARKET_VALUE, 50.52); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(historicalMsg); MutableFudgeMsg newMsg = OpenGammaFudgeContext.getInstance().newMessage(); MutableFudgeMsg normalized = calculator.apply(newMsg, "123", store); assertEquals(1, normalized.getAllFields().size()); assertEquals(50.52, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void noMarketValueAvailable() { MarketValueCalculator calculator = new MarketValueCalculator(); FieldHistoryStore store = new FieldHistoryStore(); MutableFudgeMsg newMsg = OpenGammaFudgeContext.getInstance().newMessage(); MutableFudgeMsg normalized = calculator.apply(newMsg, "123", store); assertEquals(0, normalized.getAllFields().size()); } public void zeroBid() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.BID, 0.0); msg.add(MarketDataRequirementNames.ASK, 1.0); msg.add(MarketDataRequirementNames.LAST, 0.57); FieldHistoryStore store = new FieldHistoryStore(); store.liveDataReceived(msg); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(4, normalized.getAllFields().size()); assertEquals(0.5, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE), 0.0001); } public void noBidAskLastOrFieldHistory() { MarketValueCalculator calculator = new MarketValueCalculator(); MutableFudgeMsg msg = OpenGammaFudgeContext.getInstance().newMessage(); msg.add(MarketDataRequirementNames.CLOSING_BID, 0.1); msg.add(MarketDataRequirementNames.CLOSING_ASK, 0.2); msg.add(MarketDataRequirementNames.CLOSE, 0.14); FieldHistoryStore store = new FieldHistoryStore(); MutableFudgeMsg normalized = calculator.apply(msg, "123", store); assertEquals(0.14, normalized.getDouble(MarketDataRequirementNames.MARKET_VALUE)); } }