/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2008-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.netmgt.ticketer.otrs;
import junit.framework.TestCase;
import java.rmi.RemoteException;
import org.opennms.integration.otrs.ticketservice.ArticleCore;
import org.opennms.integration.otrs.ticketservice.Credentials;
import org.opennms.integration.otrs.ticketservice.TicketCore;
import org.opennms.integration.otrs.ticketservice.TicketIDAndNumber;
import org.opennms.integration.otrs.ticketservice.TicketServiceLocator;
import org.opennms.integration.otrs.ticketservice.TicketServicePort_PortType;
import org.opennms.api.integration.ticketing.PluginException;
import org.opennms.api.integration.ticketing.Ticket;
import java.io.File;
import java.util.Date;
import javax.xml.rpc.ServiceException;
public class OtrsTicketerPluginTest extends TestCase {
// defaults for ticket
private String defaultUser = new String("root@localhost");
// defaults for article
private String defaultArticleBody = new String("default body text");
private String defaultArticleSubject = new String("default article subject");
DefaultOtrsConfigDao m_configDao;
OtrsTicketerPlugin m_ticketer;
Ticket m_ticket;
/**
* Don't run this test unless the runOtrsTests property
* is set to "true".
*/
@Override
protected void runTest() throws Throwable {
if (!isRunTest()) {
System.err.println("Skipping test '" + getName() + "' because system property '" + getRunTestProperty() + "' is not set to 'true'");
return;
}
try {
System.err.println("------------------- begin "+getName()+" ---------------------");
super.runTest();
} finally {
System.err.println("------------------- end "+getName()+" -----------------------");
}
}
private boolean isRunTest() {
return Boolean.getBoolean(getRunTestProperty());
}
private String getRunTestProperty() {
return "runOtrsTests";
}
@Override
protected void setUp() throws Exception {
System.setProperty("opennms.home", "src" + File.separatorChar + "test" + File.separatorChar + "opennms-home");
System.out.println("src" + File.separatorChar + "test" + File.separatorChar + "opennms-home");
m_ticketer = new OtrsTicketerPlugin();
m_configDao = new DefaultOtrsConfigDao();
m_ticket = new Ticket();
m_ticket.setState(Ticket.State.OPEN);
m_ticket.setSummary("Ticket Summary for ticket: " + new Date());
m_ticket.setDetails("First Article for ticket: " + new Date());
m_ticket.setUser("root@localhost");
}
public void testGet() {
TicketIDAndNumber idAndNumber = null;
Ticket newTicket = null;
String summary = new String("Ticket created by testGet()");
String details = new String("This ticketwas created by OtrsTicketerPluginTest");
try {
idAndNumber = createTicketAndArticle(summary,details);
} catch (InterruptedException e) {
e.printStackTrace();
}
// now construct a ticket by hand.
Ticket ticket = new Ticket();
ticket.setId(String.valueOf(idAndNumber.getTicketNumber()));
ticket.setState(Ticket.State.OPEN);
ticket.setSummary(summary);
ticket.setDetails(details);
ticket.setUser(defaultUser);
try {
newTicket = m_ticketer.get(ticket.getId());
} catch (PluginException e) {
e.printStackTrace();
}
assertTicketEquals(ticket, newTicket);
}
public void testSave() {
Ticket retrievedTicket = null;
try {
m_ticketer.saveOrUpdate(m_ticket);
retrievedTicket = m_ticketer.get(m_ticket.getId());
} catch (PluginException e) {
e.printStackTrace();
}
assertTicketEquals(m_ticket, retrievedTicket);
}
/*
* This test deliberately removed.
* As there is no two way update, there is no need to ensure that
* the OTRS ticket contents and the OpenNMS ticket contents match
* after the initial save.
*
* public void testUpdate() {
*
* String firstArticle = new String("First Article");
* String secondArticle = new String("Second Article");
*
* // save with first article
*
* m_ticket.setDetails(firstArticle);
*
* m_ticketer.saveOrUpdate(m_ticket);
*
* // update with first article
*
* m_ticket.setDetails(secondArticle);
*
* m_ticketer.saveOrUpdate(m_ticket);
*
* // get a clean copy from the ID
*
* Ticket retrievedTicket = m_ticketer.get(m_ticket.getId());
*
* // compare the opennms ticket to one retrieved from OTRS
*
* assertTicketEquals(m_ticket, retrievedTicket);
*
* // should also have the first article as history
*
* // ensure that old ticket details still exist somewhere in the OTRS ticket
*
* if (retrievedTicket.getDetails().indexOf(firstArticle) <= 0 ) {
* fail("could not find " + firstArticle + " in " + retrievedTicket.getDetails());
* }
*
* }
*/
public void testStateUpdate() throws InterruptedException {
try {
m_ticketer.saveOrUpdate(m_ticket);
// my new ticket should be open
assertEquals(m_ticket.getState(),Ticket.State.OPEN);
// set it cancelled
m_ticket.setState(Ticket.State.CANCELLED);
// and save it
m_ticketer.saveOrUpdate(m_ticket);
// sleep for a bit
Thread.sleep(100);
// get a new copy
Ticket retrievedTicket = m_ticketer.get(m_ticket.getId());
// my new copy should be closed
assertEquals(retrievedTicket.getState(),Ticket.State.CANCELLED);
} catch (PluginException e) {
e.printStackTrace();
}
}
private void assertTicketEquals(Ticket existing, Ticket retrieved) {
assertEquals(existing.getId(), retrieved.getId());
assertEquals(existing.getState(), retrieved.getState());
// removed the test of user until I can figure out which user!
assertEquals(existing.getUser(), retrieved.getUser());
assertEquals(existing.getSummary(), retrieved.getSummary());
if (retrieved.getDetails().indexOf(existing.getDetails()) <= 0 ) {
fail("could not find " + existing.getDetails() + " in " + retrieved.getDetails());
}
}
// This is just to bootstrap a saved ticket so that we can get it back later
private TicketIDAndNumber createTicketAndArticle(String ticketSubject, String articleBody) throws InterruptedException {
TicketIDAndNumber idAndNumber = null;
m_configDao = new DefaultOtrsConfigDao();
TicketCore otrsTicket = new TicketCore();
Credentials creds = new Credentials(m_configDao.getUserName(),m_configDao.getPassword());
otrsTicket.setLock(m_configDao.getLock());
otrsTicket.setQueue(m_configDao.getQueue());
otrsTicket.setPriority(m_configDao.getPriority());
otrsTicket.setState(m_configDao.getState());
otrsTicket.setOwnerID(m_configDao.getOwnerID());
otrsTicket.setUser(defaultUser);
otrsTicket.setTitle(ticketSubject);
Integer articleId = null;
TicketServiceLocator service = new TicketServiceLocator();
service.setTicketServicePortEndpointAddress(m_configDao.getEndpoint());
TicketServicePort_PortType port = null;
try {
port = service.getTicketServicePort();
} catch (ServiceException e1) {
e1.printStackTrace();
}
try {
idAndNumber = port.ticketCreate(otrsTicket, creds);
} catch (RemoteException e) {
e.printStackTrace();
}
ArticleCore otrsArticle = new ArticleCore();
otrsArticle.setArticleType(m_configDao.getArticleType());
otrsArticle.setSenderType(m_configDao.getArticleSenderType());
otrsArticle.setContentType(m_configDao.getArticleContentType());
otrsArticle.setHistoryType(m_configDao.getArticleHistoryType());
otrsArticle.setHistoryComment(m_configDao.getArticleHistoryComment());
otrsArticle.setSenderType(m_configDao.getArticleSenderType());
otrsArticle.setSubject(defaultArticleSubject);
otrsArticle.setFrom(m_configDao.getArticleFrom());
otrsArticle.setBody(defaultArticleBody);
otrsArticle.setUser(defaultUser);
otrsArticle.setTicketID(idAndNumber.getTicketID());
otrsArticle.setBody(articleBody);
try {
articleId = port.articleCreate(otrsArticle, creds);
assertNotNull(articleId);
} catch (RemoteException e) {
e.printStackTrace();
}
return idAndNumber;
}
}