/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) 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. * * OpenNMS(R) 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 OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.gwt.web.ui.asset; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collection; import java.util.Date; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennms.core.test.OpenNMSJUnit4ClassRunner; import org.opennms.gwt.web.ui.asset.server.AssetServiceImpl; import org.opennms.gwt.web.ui.asset.shared.AssetCommand; import org.opennms.netmgt.dao.AssetRecordDao; import org.opennms.netmgt.dao.DatabasePopulator; import org.opennms.netmgt.dao.DistPollerDao; import org.opennms.netmgt.dao.NodeDao; import org.opennms.netmgt.dao.db.JUnitConfigurationEnvironment; import org.opennms.netmgt.dao.db.JUnitTemporaryDatabase; import org.opennms.netmgt.dao.db.OpenNMSConfigurationExecutionListener; import org.opennms.netmgt.dao.db.TemporaryDatabaseExecutionListener; import org.opennms.netmgt.model.OnmsAssetRecord; import org.opennms.netmgt.model.OnmsNode; import org.opennms.web.springframework.security.Authentication; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; import org.springframework.security.core.userdetails.User; import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; import org.springframework.test.context.support.DirtiesContextTestExecutionListener; import org.springframework.test.context.transaction.TransactionalTestExecutionListener; @RunWith(OpenNMSJUnit4ClassRunner.class) @TestExecutionListeners({ OpenNMSConfigurationExecutionListener.class, TemporaryDatabaseExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class }) @ContextConfiguration(locations = { "classpath:/META-INF/opennms/applicationContext-dao.xml", "classpath:/META-INF/opennms/applicationContext-databasePopulator.xml", "classpath:/META-INF/opennms/applicationContext-setupIpLike-enabled.xml", "classpath*:/META-INF/opennms/component-dao.xml" }) @JUnitTemporaryDatabase @JUnitConfigurationEnvironment public class AssetServiceImplTest implements InitializingBean { @Autowired private DistPollerDao m_distPollerDao; @Autowired private NodeDao m_nodeDao; @Autowired private AssetRecordDao m_assetRecordDao; @Autowired private DatabasePopulator m_databasePopulator; // private SecurityContextService m_securityContextService; private final GrantedAuthority ROLE_ADMIN = new SimpleGrantedAuthority(Authentication.ROLE_ADMIN); /* private final GrantedAuthority ROLE_PROVISION = new GrantedAuthorityImpl(Authentication.ROLE_PROVISION); private final GrantedAuthority ROLE_USER = new GrantedAuthorityImpl(Authentication.ROLE_USER); */ private final String USERNAME = "opennms"; private final String PASS = "r0c|<Z"; private User validAdmin; /* private User invalidAdmin; private User validProvision; private User invalidProvision; private User validUser; private User invalidUser; private User validPower; private User invalidPower; */ private org.springframework.security.core.Authentication m_auth; private SecurityContext m_context; @Override public void afterPropertiesSet() throws Exception { org.opennms.core.utils.BeanUtils.assertAutowiring(this); } @Before public void setUp() { m_databasePopulator.populateDatabase(); m_context = new SecurityContextImpl(); validAdmin = new User(USERNAME, PASS, true, true, true, true, Arrays.asList(new GrantedAuthority[] { ROLE_ADMIN })); /* invalidAdmin = new User(USERNAME, PASS, true, true, true, true, new GrantedAuthority[] { ROLE_ADMIN }); validProvision = new User(USERNAME, PASS, true, true, true, true, new GrantedAuthority[] { ROLE_PROVISION }); invalidProvision = new User(USERNAME, PASS, true, true, true, true, new GrantedAuthority[] { ROLE_PROVISION }); validUser = new User(USERNAME, PASS, true, true, true, true, new GrantedAuthority[] { ROLE_USER }); invalidUser = new User(USERNAME, PASS, true, true, true, true, new GrantedAuthority[] { ROLE_USER }); validPower = new User(USERNAME, PASS, true, true, true, true, new GrantedAuthority[] { ROLE_ADMIN, ROLE_PROVISION }); invalidPower = new User(USERNAME, PASS, true, true, true, true, new GrantedAuthority[] { ROLE_USER, ROLE_PROVISION }); */ m_auth = new PreAuthenticatedAuthenticationToken(validAdmin, new Object()); m_context.setAuthentication(m_auth); SecurityContextHolder.setContext(m_context); // m_securityContextService = new SpringSecurityContextService(); } @After public void tearDown() { for (final OnmsNode node : m_nodeDao.findAll()) { m_nodeDao.delete(node); } m_nodeDao.flush(); } @Test public void testCreateAndGets() { OnmsNode onmsNode = new OnmsNode(m_distPollerDao.load("localhost")); onmsNode.setLabel("myNode"); m_nodeDao.save(onmsNode); OnmsAssetRecord assetRecord = onmsNode.getAssetRecord(); assetRecord.setAssetNumber("imported-id: 7"); m_assetRecordDao.update(assetRecord); m_assetRecordDao.flush(); // Test findAll method Collection<OnmsAssetRecord> assetRecords = m_assetRecordDao.findAll(); assertEquals(7, assetRecords.size()); // Test countAll method assertEquals(7, m_assetRecordDao.countAll()); } @Test public void testAssetServiceImpl() { OnmsNode onmsNode = new OnmsNode(m_distPollerDao.load("localhost")); onmsNode.setLabel("myNode"); m_nodeDao.save(onmsNode); OnmsAssetRecord assetRecord = onmsNode.getAssetRecord(); assetRecord.setAssetNumber("imported-id: " + onmsNode.getId()); assetRecord.setAdmin("supermario"); assetRecord.setZip("myzip"); m_assetRecordDao.update(assetRecord); m_assetRecordDao.flush(); onmsNode = new OnmsNode(m_distPollerDao.load("localhost")); onmsNode.setLabel("myNode2"); m_nodeDao.save(onmsNode); assetRecord = onmsNode.getAssetRecord(); assetRecord.setAssetNumber("imported-id: 23"); assetRecord.setAdmin("mediummario"); assetRecord.setZip("yourzip"); m_assetRecordDao.update(assetRecord); m_assetRecordDao.flush(); AssetServiceImpl assetServiceImpl = new AssetServiceImpl(); assetServiceImpl.setNodeDao(m_nodeDao); assetServiceImpl.setAssetRecordDao(m_assetRecordDao); System.out.println("AssetCommand: " + assetServiceImpl.getAssetByNodeId(onmsNode.getId()).toString()); System.out.println("Suggestions: " + assetServiceImpl.getAssetSuggestions()); assertTrue("Test save or update by admin.", assetServiceImpl.getAssetByNodeId(onmsNode.getId()).getAllowModify()); } // @Test // public void successAllowModifyAssetByAdmin() { // AssetServiceImpl assetServiceImpl = new AssetServiceImpl(); // assetServiceImpl.setNodeDao(m_nodeDao); // assetServiceImpl.setAssetRecordDao(m_assetRecordDao); // m_auth = new PreAuthenticatedAuthenticationToken( // validAdmin, new Object()); // m_context.setAuthentication(m_auth); // SecurityContextHolder.setContext(m_context); // m_securityContextService = new SpringSecurityContextService(); // assertTrue("Test save or update by admin.", assetServiceImpl.getAssetByNodeId(7).getAllowModify()); // } // // @Test // public void failAllowModifyAssetByAdmin() { // AssetServiceImpl assetServiceImpl = new AssetServiceImpl(); // assetServiceImpl.setNodeDao(m_nodeDao); // assetServiceImpl.setAssetRecordDao(m_assetRecordDao); // m_auth = new PreAuthenticatedAuthenticationToken( // invalidAdmin, new Object()); // m_context.setAuthentication(m_auth); // SecurityContextHolder.setContext(m_context); // m_securityContextService = new SpringSecurityContextService(); // assertFalse("Test save or update by admin.", assetServiceImpl.getAssetByNodeId(7).getAllowModify()); // } @Test public void testSaveOrUpdate() { OnmsNode onmsNode = new OnmsNode(m_distPollerDao.load("localhost")); onmsNode.setLabel("myNode"); m_nodeDao.save(onmsNode); OnmsAssetRecord assetRecord = onmsNode.getAssetRecord(); assetRecord.setAssetNumber("imported-id: " + onmsNode.getId()); assetRecord.setAdmin("supermario"); assetRecord.setLastModifiedDate(new Date()); assetRecord.setZip("myzip"); m_assetRecordDao.update(assetRecord); m_assetRecordDao.flush(); AssetCommand assetCommand = new AssetCommand(); BeanUtils.copyProperties(assetRecord, assetCommand); System.out.println("AssetCommand (Source): " + assetCommand); System.out.println("Asset to Save (Target): " + assetRecord); AssetServiceImpl assetServiceImpl = new AssetServiceImpl(); assetServiceImpl.setNodeDao(m_nodeDao); assetServiceImpl.setAssetRecordDao(m_assetRecordDao); System.out.println(); assertTrue(assetServiceImpl.saveOrUpdateAssetByNodeId(onmsNode.getId(), assetCommand)); } @Test public void testAssetSuggestion() { OnmsNode onmsNode = new OnmsNode(m_distPollerDao.load("localhost")); onmsNode.setLabel("your Node"); onmsNode.setSysObjectId("mySysOid"); m_nodeDao.save(onmsNode); OnmsAssetRecord assetRecord = onmsNode.getAssetRecord(); assetRecord.setAssetNumber("imported-id: 666"); assetRecord.setAdmin("medium mario"); assetRecord.setLastModifiedDate(new Date()); assetRecord.setZip("his zip"); m_assetRecordDao.update(assetRecord); m_assetRecordDao.flush(); onmsNode = new OnmsNode(m_distPollerDao.load("localhost")); onmsNode.setLabel("his Node"); m_nodeDao.save(onmsNode); assetRecord = onmsNode.getAssetRecord(); assetRecord.setAssetNumber("imported-id: 999"); assetRecord.setAdmin("super mario"); assetRecord.setLastModifiedDate(new Date()); assetRecord.setZip("your zip"); m_assetRecordDao.update(assetRecord); m_assetRecordDao.flush(); AssetServiceImpl assetServiceImpl = new AssetServiceImpl(); assetServiceImpl.setNodeDao(m_nodeDao); assetServiceImpl.setAssetRecordDao(m_assetRecordDao); System.out.println("Asset: " + assetServiceImpl.getAssetByNodeId(onmsNode.getId())); } }