/** * Copyright 2014 Comcast Cable Communications Management, LLC * * This file is part of CATS. * * CATS 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 3 of the License, or * (at your option) any later version. * * CATS 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 CATS. If not, see <http://www.gnu.org/licenses/>. */ package com.comcast.cats.service.power; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URISyntaxException; import org.apache.commons.net.telnet.TelnetClient; import org.easymock.EasyMock; import org.junit.Assert; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.reflect.Whitebox; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.comcast.cats.service.power.util.PowerConstants; /** * The Class WTI_NPS_1600_PowerDeviceTest. * * @Author : Aneesh * @since : 18th Sept 2012 * Description : The class WTI_NPS_1600_PowerDeviceTest is the unit test of {@link WTI_NPS_1600_PowerDevice} */ public class WTI_NPS_1600_PowerDeviceTest { /** The nps power device. */ private WTI_NPS_1600_PowerDevice npsPowerDevice; /** The user name. */ String userName = ""; /** The password. */ String password = ""; /** The host. */ String host = ""; /** The port. */ int port = 0; /** * Sets the up. */ @BeforeMethod public void setUp() { npsPowerDevice = new WTI_NPS_1600_PowerDevice(host, port, userName, password); } /** * Test wt i_ np s_1600_ power device constructor. */ @Test public void testWTI_NPS_1600_PowerDeviceConstructor() { Assert.assertNotNull( npsPowerDevice ); Assert.assertEquals( host, Whitebox.getInternalState( npsPowerDevice, "host" ) ); Assert.assertEquals( port, Whitebox.getInternalState( npsPowerDevice, "port" ) ); Assert.assertEquals( userName, Whitebox.getInternalState( npsPowerDevice, "username" ) ); Assert.assertEquals( password, Whitebox.getInternalState( npsPowerDevice, "password" ) ); } /** * Test send cmd. * * @throws Exception the exception */ @Test public void testSendCmd() throws Exception { //Creating a fileoutput stream in order to test the behaviour of sendCmd(). OutputStream out = new FileOutputStream( new File(Thread.currentThread().getContextClassLoader().getResource( "Output.txt" ).toURI() ) ); Whitebox.setInternalState( npsPowerDevice, "out", out ); Assert.assertTrue(npsPowerDevice.sendCmd( "ON", true )); } @Test public void testSendCmdEndWithNewLine() throws Exception { //Creating a fileoutput stream in order to test the behaviour of sendCmd(). OutputStream out = new FileOutputStream( new File(Thread.currentThread().getContextClassLoader().getResource( "Output.txt" ).toURI() ) ); Whitebox.setInternalState( npsPowerDevice, "out", out ); Assert.assertTrue(npsPowerDevice.sendCmd( "ON\r\n", false )); } /** * Test send cmd stream null. * * @throws Exception the exception */ @Test public void testSendCmdStreamNull() throws Exception { OutputStream out = null; Whitebox.setInternalState( npsPowerDevice, "out", out ); Assert.assertFalse(npsPowerDevice.sendCmd( "ON", true )); } /** * Test create power dev conn. * * @throws Exception the exception * @throws IOException Signals that an I/O exception has occurred. */ @Test(expectedExceptions = UnableToCreatePowerControllerDevice.class) @PrepareForTest(WTI_NPS_1600_PowerDevice.class) public void testCreatePowerDevConn() throws Exception, IOException { TelnetClient client = EasyMock.createMock( TelnetClient.class ); client.connect( "1.1.1.1", 5000 ); EasyMock.expectLastCall(); Whitebox.setInternalState( npsPowerDevice, "client", client ); EasyMock.replay( client ); PowerMock.expectNew(TelnetClient.class, EasyMock.anyObject(TelnetClient.class)).andReturn(client).times(4); npsPowerDevice.createPowerDevConn(); } /** * Test logout. * * @throws Exception the exception */ @Test public void testLogout() throws Exception { TelnetClient client = EasyMock.createMock( TelnetClient.class ); client.disconnect(); EasyMock.expectLastCall(); Whitebox.setInternalState( npsPowerDevice, "client", client ); EasyMock.replay( client ); Assert.assertTrue( npsPowerDevice.logout()); EasyMock.verify( client ); } /** * Test get outlet status. * * @throws Exception the exception */ @Test public void testGetOutletStatus() throws Exception { //Creating a fileoutput stream in order to test the behaviour of sendCmd(). initilizeStreams(); npsPowerDevice.getOutletStatus( 2 ); } /** * Initilize streams. * * @throws FileNotFoundException the file not found exception * @throws URISyntaxException the uRI syntax exception */ private void initilizeStreams() throws FileNotFoundException, URISyntaxException { OutputStream out = new FileOutputStream( new File(Thread.currentThread().getContextClassLoader().getResource( "Output.txt" ).toURI() ) ); InputStream in = new FileInputStream( new File(Thread.currentThread().getContextClassLoader().getResource( "Output.txt" ).toURI() ) ); Whitebox.setInternalState( npsPowerDevice, "out", out ); Whitebox.setInternalState( npsPowerDevice, "in", in ); } /** * Test power on. * * @throws Exception the exception */ @Test public void testPowerOn() throws Exception { InputStream in = new FileInputStream( new File(Thread.currentThread().getContextClassLoader().getResource( "Output.txt" ).toURI() ) ); Whitebox.setInternalState( npsPowerDevice, "in", in ); npsPowerDevice.powerOn( 1 ); } /** * Test power off false return. * * @throws Exception the exception */ @Test public void testPowerOffFalseReturn() throws Exception { initilizeStreams(); npsPowerDevice.powerOff( 1 ); } /** * Test power toggle false return. * * @throws Exception the exception */ @Test public void testPowerToggleFalseReturn() throws Exception { initilizeStreams(); npsPowerDevice.powerToggle( 1 ); } /** * Test login false return. * * @throws Exception the exception */ @Test public void testLoginFalseReturn() throws Exception { OutputStream out = new FileOutputStream( new File(Thread.currentThread().getContextClassLoader().getResource( "Output.txt" ).toURI() ) ); InputStream in = EasyMock.createMock( BufferedInputStream.class ); Whitebox.setInternalState( npsPowerDevice, "out", out ); Whitebox.setInternalState( npsPowerDevice, "in", in ); TelnetClient client = EasyMock.createMock( TelnetClient.class ); client.connect( host ); EasyMock.expectLastCall(); Whitebox.setInternalState( npsPowerDevice, "client", client ); EasyMock.replay( client ); EasyMock.expect( in.read()).andReturn( 36 ).times( 2 ); EasyMock.expect( in.read()).andReturn( -1 ).times( 3 ); EasyMock.replay( in ); Assert.assertFalse( npsPowerDevice.login()); } @Test public void testLogin() throws Exception { OutputStream out = new FileOutputStream( new File(Thread.currentThread().getContextClassLoader().getResource( "Output.txt" ).toURI() ) ); String buff = new String(PowerConstants.LOGIN); byte[] loginBytes = buff.getBytes(); InputStream in = EasyMock.createMock( BufferedInputStream.class ); Whitebox.setInternalState( npsPowerDevice, "out", out ); Whitebox.setInternalState( npsPowerDevice, "in", in ); TelnetClient client = EasyMock.createMock( TelnetClient.class ); client.connect( host ); EasyMock.expectLastCall(); Whitebox.setInternalState( npsPowerDevice, "client", client ); EasyMock.replay( client ); EasyMock.expect( in.read()).andReturn( (int)loginBytes[0] ).once(); EasyMock.expect( in.read()).andReturn( (int)loginBytes[1] ).once(); EasyMock.expect( in.read()).andReturn( (int)loginBytes[2] ).once(); EasyMock.expect( in.read()).andReturn( (int)loginBytes[3] ).once(); EasyMock.expect( in.read()).andReturn( (int)loginBytes[4] ).once(); EasyMock.expect( in.read()).andReturn( (int)loginBytes[5] ).once(); EasyMock.expect( in.read()).andReturn( (int)loginBytes[6] ).once(); EasyMock.expect( in.read()).andReturn( -1 ).times( 3 ); EasyMock.replay( in ); Assert.assertFalse( npsPowerDevice.login()); } }