/** * 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.config.ui; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.faces.component.UIColumn; import javax.faces.component.UICommand; import javax.faces.component.behavior.Behavior; import javax.faces.component.html.HtmlSelectOneMenu; import javax.faces.convert.Converter; import javax.faces.event.BehaviorEvent; import javax.faces.event.ValueChangeEvent; import javax.faces.validator.ValidatorException; import javax.inject.Inject; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.DependencyResolvers; import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.primefaces.event.RowEditEvent; import org.primefaces.event.SelectEvent; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.extensions.compactnotation.CompactConstructor; import com.comcast.cats.config.ui.RackService; import com.comcast.cats.config.ui.SettopController; import com.comcast.cats.config.ui.SettopSlotConfigService; import com.comcast.cats.config.ui.SettopSlotConfigServiceImpl; import com.comcast.cats.config.ui.SlotConnectionBean; import com.comcast.cats.config.utility.SlotConnectionRepresenter; import com.comcast.cats.domain.SettopDesc; import com.comcast.cats.info.ConfigServiceConstants; import com.comcast.cats.info.SettopInfo; import com.comcast.cats.local.domain.Rack; import com.comcast.cats.local.domain.SettopType; import com.comcast.cats.local.domain.Slot; import com.comcast.cats.local.domain.TraceType; import com.comcast.cats.service.util.YAMLUtils; @RunWith(Arquillian.class) public class SettopControllerTest { @Inject SettopController settopController; @Inject SettopSlotConfigService settopSlotService; @Inject RackService rackService; static String yamlFilePath = "/usr/test_tmp/"; String RACK_1 = "04-04-R09"; String RACK_2 = "dummyrack"; String[] rackNames = { RACK_1,RACK_2 }; int INITIAL_NO_OF_SLOTS = 4; String MAC_ID = "12:12:12:12:12:12"; String NAME = "Settop"; static List<SettopType> settopTypes; Behavior behaviour = new Behavior() { @Override public void broadcast( BehaviorEvent arg0 ) { } }; static{ System.setProperty(ConfigServiceConstants.CONFIG_PATH, yamlFilePath); settopTypes = new ArrayList< SettopType >(); SettopType cisco_rng150 = new SettopType(); cisco_rng150.setName( "Cisco RNG 150" ); cisco_rng150.setManufacturer( "Cisco" ); cisco_rng150.setModel( "RNG 150" ); cisco_rng150.setRemoteType( "COMCAST" ); cisco_rng150.setTraceType( TraceType.GI_TRACE_ENABLED.getRepresentation() ); settopTypes.add( cisco_rng150 ); SettopType sa_exp3100HD = new SettopType(); sa_exp3100HD.setName( "SA Explorer 3100HD" ); sa_exp3100HD.setManufacturer( "SA" ); sa_exp3100HD.setModel( "Explorer 3100HD" ); sa_exp3100HD.setRemoteType( "DTA" ); sa_exp3100HD.setTraceType( TraceType.NORMAL_TRACE.getRepresentation() ); settopTypes.add( sa_exp3100HD ); } @Deployment public static WebArchive createDeployment() { MavenDependencyResolver resolver = DependencyResolvers .use(MavenDependencyResolver.class) .loadMetadataFromPom("pom.xml"); return ShrinkWrap.create(WebArchive.class) .addClasses( HtmlSelectOneMenu.class, YAMLUtils.class, Converter.class, SettopInfo.class, DevRack.class) .addAsLibraries(resolver.artifact("org.yaml:snakeyaml:1.10").resolveAsFiles()) .addAsLibraries(resolver.artifact("commons-lang:commons-lang:2.3").resolveAsFiles()) .addAsLibraries(resolver.artifact("log4j:log4j:1.2.14").resolveAsFiles()) .addAsLibraries(resolver.artifact("org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.0.Final").resolveAsFiles()) .addAsLibraries(resolver.artifact("org.primefaces:primefaces:3.4.1").resolveAsFiles()) .addAsLibraries(resolver.artifact("com.comcast.cats:ir-common:3.2.0.5").resolveAsFiles()) /* .addAsLibraries(resolver.artifact("org.jboss.spec.javax.faces:jboss-jsf-api_2.0_spec:1.0.0.Final").resolveAsFiles())*/ .addPackage( SlotConnectionRepresenter.class.getPackage() ) .addPackage( SettopSlotConfigServiceImpl.class.getPackage() ) .addPackage( Slot.class.getPackage() ) .addAsResource(new File("src/test/resources", "rackconfig.catsrack")) .addAsResource(new File("src/test/resources", "settops.catsrack")) .addAsResource(new File("src/test/resources", "settopTypes.catsrack")) .addPackage( SettopDesc.class.getPackage() ) .addAsWebInfResource( new File("src/main/webapp/WEB-INF/beans.xml")) .addAsWebInfResource( new File("src/main/webapp/WEB-INF/faces-config.xml")) .setWebXML(new File("src/main/webapp/WEB-INF/web.xml")); } @Before public void setUp(){ int[] noOfSlots = { INITIAL_NO_OF_SLOTS,INITIAL_NO_OF_SLOTS }; DevRack devRack = new DevRack(); devRack.dumpRacksToFile( devRack.create(rackNames, noOfSlots),yamlFilePath+ System.getProperty( "file.separator" ) + RackService.RACK_CONFIG ); rackService.refresh(); Yaml yaml = new Yaml( new CompactConstructor() ); try { FileWriter fw = new FileWriter( yamlFilePath+ System.getProperty( "file.separator" ) + SettopSlotConfigServiceImpl.SETTOP_TYPE_MAPPING_CONFIG ); yaml.dump( settopTypes, fw ); fw.close(); } catch ( Exception e ) { e.printStackTrace(); } } @After public void tearDown(){ try { File file = new File(yamlFilePath+ System.getProperty( "file.separator" ) + RackService.RACK_CONFIG ); PrintWriter writer; writer = new PrintWriter(file); writer.print(""); writer.close(); File file2 = new File(yamlFilePath+ System.getProperty( "file.separator" ) + SettopSlotConfigService.SLOT_MAPPING_CONFIG ); PrintWriter writer2 = new PrintWriter(file2); writer2.print(""); writer2.close(); File file3 = new File(yamlFilePath+ System.getProperty( "file.separator" ) + SettopSlotConfigService.SETTOP_TYPE_MAPPING_CONFIG ); PrintWriter writer3 = new PrintWriter(file3); writer3.print(""); writer3.close(); rackService.refresh(); settopController.refresh(); } catch ( FileNotFoundException e ) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void getSlotConnectionListTest(){ List<SlotConnectionBean> slotConnections = settopController.getAllConnectedSlots(); assertNotNull( slotConnections ); assertEquals( 0, slotConnections.size() ); saveASlotConnection(); assertEquals( 1, settopController.getAllConnectedSlots().size() ); } @Test public void getListableSlotsTest(){ List<Slot> slots = new ArrayList< Slot >(); settopController.setListableSlots( slots ); assertEquals( slots, settopController.getListableSlots() ); } @Test public void rowEditedTest(){ SlotConnectionBean slotConnection = saveASlotConnection(); Slot slot2 = rackService.findSlotByRack( RACK_1, 2 ); slotConnection.setSlot( slot2 ); Behavior behaviour = new Behavior() { @Override public void broadcast( BehaviorEvent arg0 ) { } }; RowEditEvent event = new RowEditEvent( new UICommand(), behaviour, slotConnection ); settopController.rowEdited( event ); settopSlotService.refresh(); SlotConnectionBean slotConnection1 = settopSlotService.getSlotConnection( "1" ); assertEquals( slot2, slotConnection1.getSlot() ); } @Test public void saveSlotConnectionTest(){ SlotConnectionBean slotConnection = new SlotConnectionBean(); Rack rack = rackService.findRack( RACK_1 ); Slot slot = rackService.findSlotByRack( RACK_1, 1 ); SettopDesc settop = new SettopDesc(); settop.setId( "1" ); settop.setHostMacAddress( MAC_ID ); settop.setName( NAME ); slotConnection.setSettop( settop ); slotConnection.setRack( rack ); slotConnection.setSlot(slot ); settopController.saveSlotConnection( slotConnection ); assertEquals( 1, settopController.getAllConnectedSlots().size() ); } @Test public void saveSlotConnection1Test(){ SlotConnectionBean slotConnection = new SlotConnectionBean(); Rack rack = rackService.findRack( RACK_1 ); Slot slot = rackService.findSlotByRack( RACK_1, 1 ); SettopDesc settop = new SettopDesc(); settop.setId( "1" ); settop.setHostMacAddress( MAC_ID ); settop.setName( NAME ); slotConnection.setRack( rack ); slotConnection.setSlot(slot ); settopController.saveSlotConnection( slotConnection,settop ); assertEquals( 1, settopController.getAllConnectedSlots().size() ); } @Test public void deleteSettopAndSlotConnectionsTest(){ SlotConnectionBean slotConnection = saveASlotConnection(); assertEquals( 1, settopController.getAllConnectedSlots().size() ); settopController.deleteSettopAndSlotConnection(); assertEquals( 1, settopController.getAllConnectedSlots().size() ); SlotConnectionBean[] connections = {slotConnection}; settopController.setSelectedSlotConnections( connections ); assertEquals( connections, settopController.getSelectedSlotConnections() ); settopController.deleteSettopAndSlotConnection(); assertEquals( 0, settopController.getAllConnectedSlots().size() ); } @Test public void getAsObjectTest(){ Slot slot = rackService.findSlotByRack( RACK_1, 1 ); String value = slot.getRack().getName() + " -- " + slot.getNumber().toString(); assertEquals( slot, settopController.getAsObject( null, null, value )); } @Test public void getAsStringTest(){ Slot slot = rackService.findSlotByRack( RACK_1, 1 ); String value = slot.getRack().getName() + " -- " + slot.getNumber().toString(); assertEquals( value, settopController.getAsString( null, null, slot )); } @Test(expected = ValidatorException.class) public void validateMacAddressTest(){ settopController.validateMacAddress( null, null, "" ); } @Test public void validateMacAddress1Test(){ Behavior behaviour = new Behavior() { @Override public void broadcast( BehaviorEvent arg0 ) { } }; SlotConnectionBean slotConnection = saveASlotConnection(); // settopController.rowSelected(new SelectEvent( new UIColumn(), behaviour, slotConnection )); settopController.setSelectedSlotConnection(slotConnection); settopController.validateMacAddress( null, null, "12:23:23:23:23:23" ); } @Test(expected = ValidatorException.class) public void validateMacAddressNegativeTest(){ SlotConnectionBean slotConnection = saveASlotConnection(); // settopController.rowSelected(new SelectEvent( new UIColumn(), behaviour, slotConnection )); settopController.setSelectedSlotConnection(slotConnection); settopController.validateMacAddress( null, null, "12:23:" ); } @Test(expected = ValidatorException.class) public void validateMacAddressNegative1Test(){ saveASlotConnection(); SlotConnectionBean slotConnection2 = new SlotConnectionBean(); Rack rack = rackService.findRack( RACK_1 ); Slot slot = rackService.findSlotByRack( RACK_1, 2 ); SettopDesc settop = new SettopDesc(); settop.setId( "2" ); settop.setName( NAME ); slotConnection2.setSettop( settop ); slotConnection2.setRack( rack ); slotConnection2.setSlot(slot ); // settopController.rowSelected(new SelectEvent( new UIColumn(), behaviour, slotConnection2 )); settopController.setSelectedSlotConnection(slotConnection2); settopController.validateMacAddress( null, null, MAC_ID ); } @Test public void validateNameTest(){ settopController.validateName( null, null, "Name" ); } @Test public void validateName1Test(){ SlotConnectionBean slotConnection = saveASlotConnection(); // settopController.rowSelected(new SelectEvent( new UIColumn(), behaviour, slotConnection )); settopController.setSelectedSlotConnection(slotConnection); settopController.validateName( null, null, "Different Name" ); } @Test(expected = ValidatorException.class) public void validateNameEmptyTest(){ settopController.validateName( null, null, "" ); } @Test(expected = ValidatorException.class) public void validateNameNegativeTest(){ SlotConnectionBean slotConnection = saveASlotConnection(); // settopController.rowSelected(new SelectEvent( new UIColumn(), behaviour, slotConnection )); settopController.setSelectedSlotConnection(slotConnection); settopController.validateName( null, null, "" ); } @Test(expected = ValidatorException.class) public void validateNameNegative1Test(){ saveASlotConnection(); SlotConnectionBean slotConnection2 = new SlotConnectionBean(); Rack rack = rackService.findRack( RACK_1 ); Slot slot = rackService.findSlotByRack( RACK_1, 2 ); SettopDesc settop = new SettopDesc(); settop.setId( "2" ); slotConnection2.setSettop( settop ); slotConnection2.setRack( rack ); slotConnection2.setSlot(slot ); // settopController.rowSelected(new SelectEvent( new UIColumn(), behaviour, slotConnection2 )); settopController.setSelectedSlotConnection(slotConnection2); settopController.validateName( null, null, NAME ); } @Test public void handleRackSelectTest(){ settopController.handleRackSelect(new ValueChangeEvent( new UIColumn(), null, rackService.findRack( RACK_1 ) )); } @Test public void handleSlotSelectTest(){ settopController.setRackSelectOneMenu(new HtmlSelectOneMenu()); settopController.setSlotSelectOneMenu(new HtmlSelectOneMenu()); assertNotNull( settopController.getRackSelectOneMenu() ); assertNotNull( settopController.getSlotSelectOneMenu() ); settopController.handleSlotSelect(new ValueChangeEvent( new UIColumn(), null, rackService.findSlotByRack( RACK_1, 1) )); } @Test public void getTraceTypeTest(){ List<String> traceTypes = settopController.getTraceTypes(); assertNotNull( traceTypes ); } @Test public void getSettopTypeTest(){ List<String> settoptypes = settopController.getSettopTypes(); assertNotNull( settoptypes ); assertTrue(settoptypes.contains( "Cisco RNG 150" )); } @Test public void getSettopTypeNegativeTest(){ File file3 = new File(yamlFilePath+ System.getProperty( "file.separator" ) + SettopSlotConfigService.SETTOP_TYPE_MAPPING_CONFIG ); PrintWriter writer3; try { writer3 = new PrintWriter(file3); writer3.print(""); writer3.close(); } catch ( FileNotFoundException e ) { // TODO Auto-generated catch block e.printStackTrace(); } List<String> settoptypes = settopController.getSettopTypes(); assertNotNull( settoptypes ); } @Test public void autoPopulateTest(){ List<String> settoptypes = settopController.getSettopTypes(); SettopDesc settop = new SettopDesc(); settop.setId( "1" ); settop.setHostMacAddress( MAC_ID ); settop.setName( NAME ); settop.setComponentType( settoptypes.get( 0 ) ); settopController.autoPopulate( settop ); assertEquals( settopSlotService.getSettopTypeByName( settoptypes.get( 0 )).getModel(), settop.getModel() ); settop.setComponentType( null ); settopController.autoPopulate( settop ); assertEquals(null, settop.getModel() ); } @Test public void getTraceTypeKeyTest(){ assertEquals( SettopController.TRACE_TYPE_KEY, settopController.getTraceTypeKey()); } private SlotConnectionBean saveASlotConnection(){ SlotConnectionBean slotConnection = new SlotConnectionBean(); Rack rack = rackService.findRack( RACK_1 ); Slot slot = rackService.findSlotByRack( RACK_1, 1 ); SettopDesc settop = new SettopDesc(); settop.setId( "1" ); settop.setHostMacAddress( MAC_ID ); settop.setName( NAME ); slotConnection.setSettop( settop ); slotConnection.setRack( rack ); slotConnection.setSlot(slot ); settopSlotService.saveSlotConnection( slotConnection ); settopSlotService.refresh(); return settopSlotService.getSlotConnection( "1" ); } }