/* * Copyright 2014, The Sporting Exchange Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.betfair.cougar.marshalling.impl.databinding.kpi; import com.betfair.cougar.marshalling.api.databinding.DataBindingFactory; import com.betfair.cougar.marshalling.api.databinding.FaultMarshaller; import com.betfair.cougar.marshalling.api.databinding.FaultUnMarshaller; import com.betfair.cougar.marshalling.api.databinding.Marshaller; import com.betfair.cougar.marshalling.api.databinding.UnMarshaller; import com.betfair.tornjak.kpi.KPIMonitor; import org.junit.Before; import org.junit.Test; import java.io.InputStream; import static org.junit.Assert.assertSame; import static org.mockito.Matchers.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; /** * Unit test {@link KPITimingDataBindingFactory}. */ public class KPITimingDataBindingFactoryTest { private KPIMonitor monitor; private DataBindingFactory baseFactory; private Marshaller mockMarshaller; private FaultMarshaller mockFaultMarshaller; private UnMarshaller mockUnMarshaller; private FaultUnMarshaller mockFaultUnMarshaller; private KPITimingDataBindingFactory factory; @Before public void setUp() { monitor = mock(KPIMonitor.class); baseFactory = new MockFactory(); mockMarshaller = mock(Marshaller.class); mockFaultMarshaller = mock(FaultMarshaller.class); mockUnMarshaller = mock(UnMarshaller.class); mockFaultUnMarshaller = mock(FaultUnMarshaller.class); factory = new KPITimingDataBindingFactory(monitor, baseFactory, "foo"); } @Test public void testGetMarshaller() { Marshaller marshaller = factory.getMarshaller(); // remaining marshaller.marshall(null, null, null, false); assertSame(marshaller, factory.getMarshaller()); // same instance always expectMarshall(); } @Test public void testGetFaultMarshaller() { FaultMarshaller marshaller = factory.getFaultMarshaller(); // remaining marshaller.marshallFault(null, null, null); assertSame(marshaller, factory.getFaultMarshaller()); // same instance always expectFaultMarshall(); } @Test public void testGetUnmarshaller() { UnMarshaller marshaller = factory.getUnMarshaller(); // any old class // remaining marshaller.unmarshall(null,(Class)null,null, false); assertSame(marshaller, factory.getUnMarshaller()); // same instance always expectUnMarshall(); } @Test public void testGetFaultUnMarshaller() { FaultUnMarshaller faultUnMarshaller = factory.getFaultUnMarshaller(); faultUnMarshaller.unMarshallFault(null, null); assertSame(faultUnMarshaller, factory.getFaultUnMarshaller()); expectFaultUnMarshall(); } private void expectMarshall() { verify(mockMarshaller).marshall(null,null, null, false); verify(monitor).addEvent(eq("Cougar.ws.foo.marshall"), anyLong(), eq(true)); } private void expectFaultMarshall() { verify(mockFaultMarshaller).marshallFault(null, null, null); verify(monitor).addEvent(eq("Cougar.ws.foo.marshallFault"), anyLong(), eq(true)); } private void expectUnMarshall() { verify(mockUnMarshaller).unmarshall(any(InputStream.class), any(Class.class), anyString(), anyBoolean()); verify(monitor).addEvent(eq("Cougar.ws.foo.unmarshall"), anyLong(), eq(true)); } private void expectFaultUnMarshall() { verify(mockFaultUnMarshaller).unMarshallFault(any(InputStream.class), anyString()); verify(monitor).addEvent(eq("Cougar.ws.foo.unmarshallFault"), anyLong(), eq(true)); } private class MockFactory implements DataBindingFactory { @Override public FaultMarshaller getFaultMarshaller() { return mockFaultMarshaller; } @Override public FaultUnMarshaller getFaultUnMarshaller() { return mockFaultUnMarshaller; } @Override public Marshaller getMarshaller() { return mockMarshaller; } @Override public UnMarshaller getUnMarshaller() { return mockUnMarshaller; } } }