001 /** 002 * Copyright 2005-2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.edl.impl; 017 018 import static org.junit.Assert.assertTrue; 019 020 import org.apache.log4j.Logger; 021 import org.junit.Test; 022 import org.kuali.rice.edl.framework.workflow.EDocLitePostProcessor; 023 import org.kuali.rice.kew.test.KEWTestCase; 024 025 026 /** 027 * This is a Test class to verify the edoc lite post processor. 028 * 029 * @author Kuali Rice Team (rice.collab@kuali.org) 030 * 031 */ 032 public class EDocLitePostProcessorTest extends KEWTestCase { 033 private static final Logger LOG = Logger.getLogger(EDocLitePostProcessorTest.class); 034 035 private static final String CONTEXT_NAME = "/edl-test"; 036 037 @Test 038 public void junk() { 039 040 } 041 /* 042 @Test 043 public void testPostEvent() throws Exception { 044 String dummyData = "testing this stuff"; 045 Integer testServerPort = Integer.valueOf(getJettyServerPort() + 1); 046 WorkflowDocument document = new WorkflowDocument(getPrincipalIdForName("ewestfal"), "TestDocumentType"); 047 String applicationContent = "<data><edlContent><edl><eventNotificationURL>" + ConfigContext.getCurrentContextConfig().getProperty(KewApiConstants.KEW_URL_HOST) + ":" + testServerPort + CONTEXT_NAME + "</eventNotificationURL><testThisData>" + dummyData + "</testThisData></edl></edlContent></data>"; 048 document.setApplicationContent(applicationContent); 049 document.saveDocumentData(); 050 051 JettyServer server = null; 052 try { 053 server = new JettyServer(testServerPort.intValue(), CONTEXT_NAME, EDocLiteTestServlet.class); 054 server.setTestMode(true); 055 server.setFailOnContextFailure(true); 056 server.start(); 057 058 EDocLitePostProcessor postProcessor = new EDocLitePostProcessor(); 059 postProcessor.doActionTaken(new ActionTakenEvent(document.getDocumentId(), document.getAppDocId(), new ActionTakenValue())); 060 String eventType = EDocLitePostProcessor.EVENT_TYPE_ACTION_TAKEN; 061 testPostProcessorMethod(document.getDocumentId(), dummyData, eventType); 062 063 postProcessor = new EDocLitePostProcessor(); 064 postProcessor.doRouteLevelChange(new DocumentRouteLevelChange(document.getDocumentId(), document.getAppDocId(), 1, 2, null, null, null, null)); 065 eventType = EDocLitePostProcessor.EVENT_TYPE_ROUTE_LEVEL_CHANGE; 066 testPostProcessorMethod(document.getDocumentId(), dummyData, eventType); 067 068 postProcessor = new EDocLitePostProcessor(); 069 postProcessor.doRouteStatusChange(new DocumentRouteStatusChange(document.getDocumentId(), document.getAppDocId(), KewApiConstants.ROUTE_HEADER_INITIATED_CD, KewApiConstants.ROUTE_HEADER_ENROUTE_CD)); 070 eventType = EDocLitePostProcessor.EVENT_TYPE_ROUTE_STATUS_CHANGE; 071 testPostProcessorMethod(document.getDocumentId(), dummyData, eventType); 072 073 postProcessor = new EDocLitePostProcessor(); 074 postProcessor.doDeleteRouteHeader(new DeleteEvent(document.getDocumentId(), document.getAppDocId())); 075 eventType = EDocLitePostProcessor.EVENT_TYPE_DELETE_ROUTE_HEADER; 076 testPostProcessorMethod(document.getDocumentId(), dummyData, eventType); 077 078 } finally { 079 if (server != null) { 080 try { 081 server.stop(); 082 } catch (Exception e) { 083 LOG.warn("Failed to shutdown one of the lifecycles!", e); 084 } 085 } 086 } 087 } */ 088 089 private void testPostProcessorMethod(String documentId, String dummyData, String eventType) { 090 int maxWaitSeconds = EDocLitePostProcessor.SUBMIT_URL_MILLISECONDS_WAIT + 10000; 091 assertTrue("Test Servlet data map should not be null after wait period", waitForData(maxWaitSeconds, 5000)); 092 testForStringExistence("Document Id", documentId); 093 testForStringExistence("Dummy Data", dummyData); 094 testForStringExistence("Event Type '" + eventType + "'", eventType); 095 } 096 097 private void testForStringExistence(String dataDescriptor, String dataToFind) { 098 assertTrue(dataDescriptor = " should come back as part of the post data but didn't", EDocLiteTestServlet.postData.contains(dataToFind)); 099 } 100 101 public static boolean waitForData(int maxWaitMilliseconds, int pauseMilliseconds) { 102 boolean valueNotNull = false; 103 boolean interrupted = false; 104 long startTimeMs = System.currentTimeMillis(); 105 long endTimeMs = startTimeMs + maxWaitMilliseconds; 106 107 try { 108 Thread.sleep(pauseMilliseconds / 10); // the first time through, sleep a fraction of the specified time 109 } catch (InterruptedException e) { 110 interrupted = true; 111 } 112 valueNotNull = EDocLiteTestServlet.postData != null; 113 LOG.debug("starting wait loop"); 114 while (!interrupted && !valueNotNull && (System.currentTimeMillis() < endTimeMs)) { 115 try { 116 if (LOG.isDebugEnabled()) { 117 LOG.debug("sleeping for " + pauseMilliseconds + " ms"); 118 } 119 Thread.sleep(pauseMilliseconds); 120 } catch (InterruptedException e) { 121 interrupted = true; 122 } 123 LOG.debug("checking wait loop sentinel"); 124 valueNotNull = EDocLiteTestServlet.postData != null; 125 } 126 LOG.debug("finished wait loop (" + valueNotNull + ")"); 127 128 return valueNotNull; 129 } 130 }