001/** 002 * Copyright 2005-2013 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 */ 016package edu.samplu.common; 017 018import edu.samplu.admin.test.ComponentSmokeTest; 019 020import java.util.HashMap; 021import java.util.Iterator; 022import java.util.Map; 023 024/** 025 * Created as a way to link Rice Smoke Test failures to existing Jiras as a html link in Jenkins. The more failures 026 * the more useful it is to not have to keep tracking down the same Jiras. Having this feature for Integration Tests 027 * as well would be a huge help for the QA team. 028 * TODO: 029 * <ol> 030 * <li>Integration Test integration. ITs often fail by the 10s tracking down existing Jiras is a huge time sink.</li> 031 * <li>Possible Extraction of jiraMatches data to property file.</li> 032 * </ol> 033 * @author Kuali Rice Team (rice.collab@kuali.org) 034 */ 035public class JiraAwareFailureUtil { 036 /** 037 * KULRICE-8823 Fix broken smoke tests in CI 038 */ 039 public static final String KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI = "KULRICE-8823 Fix broken smoke tests in CI"; 040 041 /** 042 * https://jira.kuali.org/browse/ 043 */ 044 public static final String JIRA_BROWSE_URL = "https://jira.kuali.org/browse/"; 045 046 static Map<String, String> jiraMatches; 047 048 static { 049 jiraMatches = new HashMap<String, String>(); 050 051 jiraMatches.put( 052 ComponentSmokeTest.CREATE_NEW_DOCUMENT_NOT_SUBMITTED_SUCCESSFULLY_MESSAGE_TEXT + ComponentSmokeTest.FOR_TEST_MESSAGE, 053 KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI); 054 055 jiraMatches.put("//*[@id='u229']", KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI); 056 057 jiraMatches.put("after clicking Expand All", "KULRICE-3833 KRAD Sampleapp (Travel) Account Inquiry Collapse all toggles all and Expand all does nothing"); 058 059 jiraMatches.put("Library Widget Suggest, CAT not suggested", "KULRICE-10365 Library Widget Suggest not suggesting"); // already in 2.4 merged back as error exists in 2.3 as well. 060 061 jiraMatches.put("Lookupable is null", "KULRICE-10207 DemoTravelAccountMultivalueLookUpSmokeTest Lookupable is null."); 062 063 jiraMatches.put("Account Maintenance (Edit)", "KULRICE-10216 KRAD Demo Account Maintenance (Edit) Incident Report RiceRuntimeException: Exception trying to invoke action ROUTE"); 064 065 jiraMatches.put("An exception occurred processing JSP page /kr/WEB-INF/jsp/KualiMaintenanceDocument.jsp", "KULRICE-10235 JasperException: An exception occurred processing JSP page /kr/WEB-INF/jsp/KualiMaintenanceDocument.jsp"); 066 067 jiraMatches.put("BusinessObjectMetaDataServiceImpl.getBusinessObjectRelationship(BusinessObjectMetaDataServiceImpl.java:267)", "KULRICE-10354 Identity links throws NullPointerException"); 068 069 jiraMatches.put("//table[@id='row']/tbody/tr[1]/td[1]/a", "KULRICE-10355 Investigate DocSearchWDIT testBasicDocSearch failure"); 070 071 jiraMatches.put("BusinessObjectDaoProxy called with non-legacy class: class org.kuali.rice.coreservice.impl.namespace.NamespaceBo", "KULRICE-10356 Agenda edit BusinessObjectDaoProxy called with non-legacy class: class org.kuali.rice.coreservice.impl.namespace.NamespaceBo"); 072 073 jiraMatches.put("annot get new instance of class to check for KualiCode", "KULRICE-10358 Component search Action List Incident Report Cannot get new instance of class to check for KualiCode"); 074 075 jiraMatches.put("Library Widget Suggest, CAT not suggested", "KULRICE-10365 Library Widget Suggest not suggesting"); 076 077 jiraMatches.put("WorkFlowRouteRulesBlanketApp expected:<[FINAL]>", "KULRICE-9051 WorkFlow Route Rules Blanket Approval submit status results in Enroute, not Final"); 078 079 jiraMatches.put("HTTP Status 404 - /kew/RouteLog.do", "KULRICE-10540 Demo Travel Account Maintenance Edit Route log inline 404"); 080 //jiraMatches.put("", ""); 081 } 082 083 /** 084 * If the contents contents the jiraMatches key, call fail on failable passing in the jiraMatches value for the matched key. 085 * @param contents to check for containing of the jiraMatches keys. 086 * @param failable to fail with the jiraMatches value if the jiraMatches key is contained in the contents 087 */ 088 public static void failOnMatchedJira(String contents, Failable failable) { 089 Iterator<String> iter = jiraMatches.keySet().iterator(); 090 String key = null; 091 092 while (iter.hasNext()) { 093 key = iter.next(); 094 if (contents.contains(key)) { 095 failable.fail(JIRA_BROWSE_URL + jiraMatches.get(key)); 096 } 097 } 098 } 099 100 /** 101 * Calls failOnMatchedJira with the contents and if no match is detected then the message. 102 * @param contents to check for containing of the jiraMatches keys. 103 * @param message to check for containing of the jiraMatches keys if contents doesn't 104 * @param failable to fail with the jiraMatches value if the contents or message is detected 105 */ 106 public static void failOnMatchedJira(String contents, String message, Failable failable) { 107 failOnMatchedJira(contents, failable); 108 failOnMatchedJira(message, failable); 109 } 110}