/* ================================================================== * SimpleSocketManagerTests.java - 31/07/2016 9:09:04 AM * * Copyright 2007-2016 SolarNetwork.net Dev Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * ================================================================== */ package net.solarnetwork.node.ocpp.socket.control.test; import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.easymock.Capture; import org.easymock.CaptureType; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import org.osgi.service.event.Event; import org.osgi.service.event.EventAdmin; import net.solarnetwork.node.ocpp.ChargeSession; import net.solarnetwork.node.ocpp.ChargeSessionManager; import net.solarnetwork.node.ocpp.socket.control.SimpleSocketManager; import net.solarnetwork.node.reactor.Instruction; import net.solarnetwork.node.reactor.InstructionHandler; import net.solarnetwork.node.reactor.InstructionStatus.InstructionState; import net.solarnetwork.util.StaticOptionalService; /** * Test cases for the {@link SimpleSocketManager} class. * * @author matt * @version 1.0 */ public class SimpleSocketManagerTests { private ChargeSessionManager chargeSessionManager; private InstructionHandler instructionHandler; private EventAdmin eventAdmin; private SimpleSocketManager manager; @Before public void setup() { chargeSessionManager = EasyMock.createMock(ChargeSessionManager.class); eventAdmin = EasyMock.createMock(EventAdmin.class); instructionHandler = EasyMock.createMock(InstructionHandler.class); manager = new SimpleSocketManager(); manager.setChargeSessionManager(chargeSessionManager); manager.setEventAdmin(new StaticOptionalService<EventAdmin>(eventAdmin)); manager.setInstructionHandlers(Collections.singleton(instructionHandler)); } private void replayAll() { replay(chargeSessionManager, eventAdmin, instructionHandler); } private void verifyAll() { verify(chargeSessionManager, eventAdmin, instructionHandler); } @Test public void verifyAllSocketsNoActiveSessions() { List<String> socketIds = Arrays.asList("/socket/test/1", "/socket/test/2"); expect(chargeSessionManager.availableSocketIds()).andReturn(socketIds); Capture<Instruction> instructionCapt = new Capture<Instruction>(CaptureType.ALL); Capture<Event> eventCapt = new Capture<Event>(CaptureType.ALL); for ( String socketId : socketIds ) { expect(chargeSessionManager.activeChargeSession(socketId)).andReturn(null); expect(instructionHandler.handlesTopic(InstructionHandler.TOPIC_SET_CONTROL_PARAMETER)) .andReturn(true); expect(instructionHandler.processInstruction(capture(instructionCapt))) .andReturn(InstructionState.Completed); eventAdmin.postEvent(capture(eventCapt)); } replayAll(); manager.verifyAllSockets(); verifyAll(); // for each socket, verify instructions / events List<Instruction> instructions = instructionCapt.getValues(); assertEquals(2, instructions.size()); List<Event> events = eventCapt.getValues(); assertEquals(2, events.size()); for ( int i = 0; i < socketIds.size(); i++ ) { String socketId = socketIds.get(i); assertEquals(InstructionHandler.TOPIC_SET_CONTROL_PARAMETER, instructions.get(i).getTopic()); assertEquals(Boolean.FALSE.toString(), instructions.get(i).getParameterValue(socketId)); assertEquals(ChargeSessionManager.EVENT_TOPIC_SOCKET_DEACTIVATED, events.get(i).getTopic()); assertEquals(socketId, events.get(i).getProperty(ChargeSessionManager.EVENT_PROPERTY_SOCKET_ID)); } } @Test public void startupServiceActiveSession() throws InterruptedException { List<String> socketIds = Arrays.asList("/socket/test/1", "/socket/test/2"); ChargeSession activeSession = new ChargeSession(); expect(chargeSessionManager.availableSocketIds()).andReturn(socketIds); Capture<Instruction> instructionCapt = new Capture<Instruction>(CaptureType.ALL); Capture<Event> eventCapt = new Capture<Event>(CaptureType.ALL); for ( String socketId : socketIds ) { expect(chargeSessionManager.activeChargeSession(socketId)) .andReturn(socketId.endsWith("1") ? activeSession : null); expect(instructionHandler.handlesTopic(InstructionHandler.TOPIC_SET_CONTROL_PARAMETER)) .andReturn(true); expect(instructionHandler.processInstruction(capture(instructionCapt))) .andReturn(InstructionState.Completed); eventAdmin.postEvent(capture(eventCapt)); } replayAll(); manager.verifyAllSockets(); verifyAll(); // for each socket, verify instructions / events List<Instruction> instructions = instructionCapt.getValues(); assertEquals(2, instructions.size()); List<Event> events = eventCapt.getValues(); assertEquals(2, events.size()); for ( int i = 0; i < socketIds.size(); i++ ) { String socketId = socketIds.get(i); assertEquals(InstructionHandler.TOPIC_SET_CONTROL_PARAMETER, instructions.get(i).getTopic()); assertEquals(i == 0 ? Boolean.TRUE.toString() : Boolean.FALSE.toString(), instructions.get(i).getParameterValue(socketId)); assertEquals( i == 0 ? ChargeSessionManager.EVENT_TOPIC_SOCKET_ACTIVATED : ChargeSessionManager.EVENT_TOPIC_SOCKET_DEACTIVATED, events.get(i).getTopic()); assertEquals(socketId, events.get(i).getProperty(ChargeSessionManager.EVENT_PROPERTY_SOCKET_ID)); } } }