/* * Lokomo OneCMDB - An Open Source Software for Configuration * Management of Datacenter Resources * * Copyright (C) 2006 Lokomo Systems AB * * 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., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via * paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33 * Danderyd, Sweden. * */ package org.onecmdb.core.tests; import java.util.ArrayList; import java.util.List; import java.util.Set; import junit.framework.Assert; import org.onecmdb.core.IAttribute; import org.onecmdb.core.IAttributeModifiable; import org.onecmdb.core.ICcb; import org.onecmdb.core.ICi; import org.onecmdb.core.ICiModifiable; import org.onecmdb.core.ICmdbTransaction; import org.onecmdb.core.IModelService; import org.onecmdb.core.IRFC; import org.onecmdb.core.IRfcResult; import org.onecmdb.core.ISession; import org.onecmdb.core.ITicket; import org.onecmdb.core.IType; import org.onecmdb.core.IValue; import org.onecmdb.core.internal.ccb.rfc.RFC; import org.onecmdb.core.internal.job.workflow.WorkflowRelevantData; import org.onecmdb.core.internal.job.workflow.sample.UrlImportProcess; import org.onecmdb.core.internal.model.ItemId; import org.onecmdb.core.internal.model.Path; public class OnecmdbTestUtils { private ISession session; public OnecmdbTestUtils(ISession session) { this.session = session; } public ICi createTemplate(ICi blueprint, String alias) { ICi ci = createTemplate(blueprint, alias, false); return(ci); } public ICi createTemplate(ICi blueprint, String alias, boolean reject) { ICcb ccb = (ICcb) session.getService(ICcb.class); // Create a Blueprint that defines one IP Address. ICmdbTransaction tx = ccb.getTx(session); ICiModifiable instance = null; { ICiModifiable rootTemplate = tx.getTemplate(blueprint); instance = rootTemplate.createOffspring(); if (alias != null) { instance.setAlias(alias); } instance.setIsBlueprint(true); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); if (reject) { Assert.assertNotNull(result.getRejectCause()); } else { Assert.assertEquals(null, result.getRejectCause()); } ICi ci = null; if (!result.isRejected()) { IModelService cisrvc = (IModelService) session .getService(IModelService.class); if (instance instanceof IRFC) { Long id = ((IRFC)instance).getTargetId(); if (id != null) { ci = cisrvc.find(new ItemId(id)); } } else { ci = cisrvc.findCi(new Path<String>(alias)); } Assert.assertNotNull(ci); } return (ci); } public ICi createInstance(ICi ci, String alias, boolean reject) { ICcb ccb = (ICcb) session.getService(ICcb.class); ICmdbTransaction tx = ccb.getTx(session); ICiModifiable ciInstance; { ICiModifiable rootTemplate = tx.getTemplate(ci); ciInstance = rootTemplate.createOffspring(); ciInstance.setIsBlueprint(false); if (alias != null) { ciInstance.setAlias(alias); } } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); if (reject) { Assert.assertNotNull(result.getRejectCause()); } else { Assert.assertEquals(null, result.getRejectCause()); } ICi newCi = null; if (!result.isRejected()) { if (ciInstance instanceof IRFC) { IModelService mSvc = (IModelService)session.getService(IModelService.class); Long id = ((IRFC)ciInstance).getTargetId(); newCi = mSvc.find(new ItemId(id)); } } return(newCi); } public ICi createInstance(ICi ci, String alias) { ICi newCi = createInstance(ci, alias, false); return(newCi); } public void setValue(ICi source, String aName, IValue value) { setValue(source, aName, value, false); } public void setValue(ICi source, String aName, IValue value, boolean reject) { IAttribute theAttribute = null; for (IAttribute a : source.getAttributes()) { if (a.getAlias().equals(aName)) { theAttribute = a; break; } } setValue(theAttribute, value, reject); } public IAttribute setValue(IAttribute theAttribute, IValue value) { return(setValue(theAttribute, value, false)); } public IAttribute setValue(IAttribute theAttribute, IValue value, boolean reject) { ICcb ccb = (ICcb) session.getService(ICcb.class); Assert.assertNotNull(theAttribute); ICmdbTransaction tx = ccb.getTx(session); { IAttributeModifiable aTemplate = tx .getAttributeTemplate(theAttribute); aTemplate.setValue(value); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); if (reject) { Assert.assertNotNull("Change was commit ok, but was flaged as to be rejected!", result.getRejectCause()); } else { Assert.assertEquals(null, result.getRejectCause()); } IModelService model = (IModelService) session.getService(IModelService.class); IAttribute reload = (IAttribute) model.find(theAttribute.getId()); return(reload); } public IValue getValue(ICi ci, String aName) { for (IAttribute a : ci.getAttributes()) { if (a.getAlias().equals(aName)) { return (a.getValue()); } } Assert.assertNotNull(null); return (null); } public void destroyCi(ICi ci) { destroyCi(ci, false); } public void destroyCi(ICi ci, boolean reject) { ICcb ccb = (ICcb) session.getService(ICcb.class); // Create a Blueprint that defines one IP Address. ICmdbTransaction tx = ccb.getTx(session); { ICiModifiable ciTemplate = tx.getTemplate(ci); ciTemplate.delete(); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); if (reject) { Assert.assertEquals(true, result.isRejected()); System.out.println("Destroy was rejected: " + result.getRejectCause()); } else { if (result.isRejected()) { Assert.assertEquals(null, result.getRejectCause()); } IModelService cisrvc = (IModelService) session .getService(IModelService.class); ICi destroyedCi = cisrvc.find(ci.getId()); Assert.assertEquals(null, destroyedCi); } } public void addAttribute(ICi ci, String aliasName) { ICcb ccb = (ICcb) session.getService(ICcb.class); // Create a Blueprint that defines one IP Address. ICmdbTransaction tx = ccb.getTx(session); { ICiModifiable rootTemplate = tx.getTemplate(ci); rootTemplate.addAttribute(aliasName); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); Assert.assertEquals(null, result.getRejectCause()); } public IAttribute newAttribute(ICi ci, String aName, IType type, IType refTyp, int min, int max) { ICcb ccb = (ICcb) session.getService(ICcb.class); // Create a Blueprint that defines one IP Address. ICmdbTransaction tx = ccb.getTx(session); { ICiModifiable rootTemplate = tx.getTemplate(ci); ICiModifiable ipTemplate = rootTemplate.createAttribute(aName, type, refTyp, min, max, null); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); Assert.assertEquals(null, result.getRejectCause()); IAttribute newAttribute = null; for (IAttribute a : ci.getAttributes()) { if (a.getAlias().equals(aName)) { newAttribute = a; break; } } Assert.assertNotNull(newAttribute); return (newAttribute); } public ICi setDisplaynameExpression(ICi ci, String expression) { ICcb ccb = (ICcb) session.getService(ICcb.class); // Create a Blueprint that defines one IP Address. ICmdbTransaction tx = ccb.getTx(session); { ICiModifiable template = tx.getTemplate(ci); template.setDisplayNameExpression(expression); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); Assert.assertEquals(false, result.isRejected()); // Reload ci. IModelService cisrvc = (IModelService) session .getService(IModelService.class); ICi reloadCi = cisrvc.find(ci.getId()); return (reloadCi); } public ICi modifyTemplate(ICi ci, boolean isTemplate, boolean reject) { ICcb ccb = (ICcb) session.getService(ICcb.class); // Create a Blueprint that defines one IP Address. ICmdbTransaction tx = ccb.getTx(session); { ICiModifiable template = tx.getTemplate(ci); template.setIsBlueprint(isTemplate); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); ICi reloadCi = null; if (reject) { Assert.assertNotNull(result.getRejectCause()); } else { Assert.assertEquals(null, result.getRejectCause()); // Reload ci. IModelService cisrvc = (IModelService) session .getService(IModelService.class); reloadCi = cisrvc.find(ci.getId()); } return (reloadCi); } public ICi modifyTemplate(ICi ci, boolean isTemplate) { ICi reloaded = modifyTemplate(ci, isTemplate, false); return(reloaded); } public void importXml(String url) throws Throwable { UrlImportProcess process = new UrlImportProcess(); WorkflowRelevantData data = new WorkflowRelevantData(); data.put("session", this.session); process.setRelevantData(data); List<String> array = new ArrayList<String>(); array.add(url); process.setImportUrl(array); process.run(); } public ICi findAlias(String alias) { IModelService cisrvc = (IModelService) session .getService(IModelService.class); ICi ci = cisrvc.findCi(new Path(alias)); return(ci); } public String dumpOffsprings(ICi ci, int level) { StringBuffer buffer = new StringBuffer(); String cType = "I"; if (ci.isBlueprint()) { cType = "T"; } buffer.append(cType + ":<alias=" + ci.getAlias() +"><displayName=" + ci.getDisplayName() + ">"); buffer.append("\n"); level++; for (ICi o : ci.getOffsprings()) { for (int i = 0; i < level; i++) { buffer.append(" "); } buffer.append(dumpOffsprings(o, level)); } return (buffer.toString()); } public ICi setDescription(ICi ci, String desc) { ICcb ccb = (ICcb) session.getService(ICcb.class); // Create a Blueprint that defines one IP Address. ICmdbTransaction tx = ccb.getTx(session); { ICiModifiable template = tx.getTemplate(ci); template.setDescription(desc); } ITicket ticket = ccb.submitTx(tx); IRfcResult result = ccb.waitForTx(ticket); Assert.assertEquals(null, result.getRejectCause()); // Reload ci. IModelService cisrvc = (IModelService) session .getService(IModelService.class); ICi reloadCi = cisrvc.find(ci.getId()); return(reloadCi); } public IModelService getModelService() { IModelService service = (IModelService)this.session.getService(IModelService.class); return(service); } }