/* ================================================================== * CommandMessageTest.java - Jul 7, 2012 8:09:47 PM * * Copyright 2007-2012 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 * ================================================================== * $Id$ * ================================================================== */ package net.solarnetwork.node.rfxcom.test; import static org.junit.Assert.*; import org.apache.commons.codec.binary.Hex; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.solarnetwork.node.rfxcom.Command; import net.solarnetwork.node.rfxcom.CommandMessage; import net.solarnetwork.node.rfxcom.Message; import net.solarnetwork.node.rfxcom.MessageFactory; import net.solarnetwork.node.rfxcom.MessageType; import net.solarnetwork.node.rfxcom.StatusMessage; import net.solarnetwork.node.rfxcom.TransceiverType; /** * Unit tests for the {@link CommandMessage} class. * * @author matt * @version $Revision$ */ public class CommandMessageTest { private final Logger log = LoggerFactory.getLogger(getClass()); @Test public void encodeResetCommand() { CommandMessage msg = new CommandMessage(Command.Reset); assertNull("Data", msg.getData()); final byte[] packet = msg.getMessagePacket(); log.debug("Got packet: " +Hex.encodeHexString(packet)); assertNotNull("Packet", packet); assertArrayEquals(TestUtils.bytesFromHexString("0D 00 00 00 00 00 00 00 00 00 00 00 00 00"), packet); } @Test public void encodeStatusCommand() { CommandMessage msg = new CommandMessage(Command.Status, (short)1); assertNull("Data", msg.getData()); final byte[] packet = msg.getMessagePacket(); log.debug("Got packet: " +Hex.encodeHexString(packet)); assertNotNull("Packet", packet); assertArrayEquals(TestUtils.bytesFromHexString("0D 00 00 01 02 00 00 00 00 00 00 00 00 00"), packet); } private void verifyStatusCommandResponse(Message m) { assertTrue("Instance of StatusMessage", m instanceof StatusMessage); StatusMessage msg = (StatusMessage)m; assertEquals(1, msg.getSequenceNumber()); assertEquals(MessageType.CommandResponse, msg.getType()); assertEquals((byte)0, msg.getSubType()); assertEquals(Command.Status, msg.getCommand()); assertEquals(TransceiverType.Type43392a, msg.getTransceiverType()); assertEquals(42, msg.getFirmwareVersion()); assertEquals(1, msg.getHardwareVersion()); assertFalse("Undecoded mode", msg.isUndecodedMode()); assertTrue("X10 enabled", msg.isX10Enabled()); assertTrue("ARC enabled", msg.isARCEnabled()); assertTrue("AC enabled", msg.isACEnabled()); assertTrue("HomeEasyEU enabled", msg.isHomeEasyEUEnabled()); assertFalse("Ikea Koppla enabled", msg.isIkeaKopplaEnabled()); assertTrue("Oregon Scientific enabled", msg.isOregonEnabled()); assertTrue("ATI enabled", msg.isATIEnabled()); assertTrue("Visonic enabled", msg.isVisonicEnabled()); assertFalse("Mertik enabled", msg.isMertikEnabled()); assertTrue("AD enabled", msg.isADEnabled()); assertTrue("Hideki enabled", msg.isHidekiEnabled()); assertTrue("LaCrosse enabled", msg.isLaCrosseEnabled()); assertFalse("FS20 enabled", msg.isFS20Enabled()); assertFalse("ProGuard enabled", msg.isProGuardEnabled()); //assertTrue("RollerTrol enabled", msg.is) } @Test public void decodeStatusCommandResponse() { final byte[] packet = TestUtils.bytesFromHexString("0D01000102532A000EEF01000000"); final byte[] data = TestUtils.extractMessageBytes(packet); verifyStatusCommandResponse(new StatusMessage((short)1, data)); // now via MessageFactory verifyStatusCommandResponse(new MessageFactory().parseMessage(packet, 0)); } private void verifyStatusCommandResponseOnlyOregonEnabled(Message m) { assertTrue("Instance of StatusMessage", m instanceof StatusMessage); StatusMessage msg = (StatusMessage)m; assertEquals(24, msg.getSequenceNumber()); assertEquals(MessageType.CommandResponse, msg.getType()); assertEquals((byte)0, msg.getSubType()); assertEquals(Command.Status, msg.getCommand()); assertEquals(TransceiverType.Type43392a, msg.getTransceiverType()); assertEquals(42, msg.getFirmwareVersion()); assertEquals(1, msg.getHardwareVersion()); assertFalse("Undecoded mode", msg.isUndecodedMode()); assertFalse("X10 enabled", msg.isX10Enabled()); assertFalse("ARC enabled", msg.isARCEnabled()); assertFalse("AC enabled", msg.isACEnabled()); assertFalse("HomeEasyEU enabled", msg.isHomeEasyEUEnabled()); assertFalse("Ikea Koppla enabled", msg.isIkeaKopplaEnabled()); assertTrue("Oregon Scientific enabled", msg.isOregonEnabled()); assertFalse("ATI enabled", msg.isATIEnabled()); assertFalse("Visonic enabled", msg.isVisonicEnabled()); assertFalse("Mertik enabled", msg.isMertikEnabled()); assertFalse("AD enabled", msg.isADEnabled()); assertFalse("Hideki enabled", msg.isHidekiEnabled()); assertFalse("LaCrosse enabled", msg.isLaCrosseEnabled()); assertFalse("FS20 enabled", msg.isFS20Enabled()); assertFalse("ProGuard enabled", msg.isProGuardEnabled()); } @Test public void decodeStatusCommandResponseOnlyOregonEnabled() { final byte[] packet = TestUtils.bytesFromHexString("0D01001802532A00002001000000"); final byte[] data = TestUtils.extractMessageBytes(packet); verifyStatusCommandResponseOnlyOregonEnabled(new StatusMessage(packet[3], data)); // now via MessageFactory verifyStatusCommandResponseOnlyOregonEnabled(new MessageFactory().parseMessage(packet, 0)); } @Test public void encodeSaveSettingsCommand() { CommandMessage msg = new CommandMessage(Command.SaveSettings, (short)31); assertNull("Data", msg.getData()); final byte[] packet = msg.getMessagePacket(); log.debug("Got packet: " +Hex.encodeHexString(packet)); assertNotNull("Packet", packet); assertArrayEquals(TestUtils.bytesFromHexString("0D 00 00 1F 06 00 00 00 00 00 00 00 00 00"), packet); } private void verifySaveSettingsResponse(Message m) { assertTrue("CommandMessage instance", m instanceof CommandMessage); CommandMessage msg = (CommandMessage)m; assertEquals(49, msg.getSequenceNumber()); assertEquals(MessageType.CommandResponse, msg.getType()); assertEquals((byte)0, msg.getSubType()); assertEquals(Command.SaveSettings, msg.getCommand()); } @Test public void decodeSaveSettingsResponse() { final byte[] packet = TestUtils.bytesFromHexString("0D01003106532A00002001000000"); final byte[] data = TestUtils.extractMessageBytes(packet); verifySaveSettingsResponse(new CommandMessage(packet[3], data)); verifySaveSettingsResponse(new MessageFactory().parseMessage(packet, 0)); } }