1 /** 2 * Copyright 2005-2013 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package edu.samplu.common; 17 18 import edu.samplu.admin.test.ComponentAbstractSmokeTestBase; 19 20 import java.util.HashMap; 21 import java.util.Iterator; 22 import java.util.Map; 23 24 /** 25 * Created as a way to link Rice Smoke Test failures to existing Jiras as a html link in Jenkins. The more failures 26 * the more useful it is to not have to keep tracking down the same Jiras. Having this feature for Integration Tests 27 * as well would be a huge help for the QA team. 28 * TODO: 29 * <ol> 30 * <li>Integration Test integration. ITs often fail by the 10s tracking down existing Jiras is a huge time sink.</li> 31 * <li>Possible Extraction of jiraMatches data to property file.</li> 32 * </ol> 33 * @author Kuali Rice Team (rice.collab@kuali.org) 34 */ 35 public class JiraAwareFailureUtil { 36 /** 37 * KULRICE-8823 Fix broken smoke tests in CI 38 */ 39 public static final String KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI = "KULRICE-8823 Fix broken smoke tests in CI"; 40 41 /** 42 * https://jira.kuali.org/browse/ 43 */ 44 public static final String JIRA_BROWSE_URL = "https://jira.kuali.org/browse/"; 45 46 static Map<String, String> jiraMatches; 47 48 static { 49 jiraMatches = new HashMap<String, String>(); 50 51 jiraMatches.put(ComponentAbstractSmokeTestBase.CREATE_NEW_DOCUMENT_NOT_SUBMITTED_SUCCESSFULLY_MESSAGE_TEXT + ComponentAbstractSmokeTestBase.FOR_TEST_MESSAGE, 52 KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI); 53 54 jiraMatches.put("//*[@id='u229']", KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI); 55 56 jiraMatches.put("//a[contains(text(),'Travel Account Lookup')])[3]", KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI); 57 58 jiraMatches.put("By.linkText: Travel Account Lookup", KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI); 59 60 jiraMatches.put("//a[contains(text(),'Validation - Regex')", KULRICE_8823_FIX_BROKEN_SMOKE_TESTS_IN_CI); 61 62 // jiraMatches.put("", 63 // ""); 64 } 65 66 /** 67 * If the contents contents the jiraMatches key, call fail on failable passing in the jiraMatches value for the matched key. 68 * @param contents to check for containing of the jiraMatches keys. 69 * @param failable to fail with the jiraMatches value if the jiraMatches key is contained in the contents 70 */ 71 public static void failOnMatchedJira(String contents, Failable failable) { 72 Iterator<String> iter = jiraMatches.keySet().iterator(); 73 String key = null; 74 75 while (iter.hasNext()) { 76 key = iter.next(); 77 if (contents.contains(key)) { 78 failable.fail(JIRA_BROWSE_URL + jiraMatches.get(key)); 79 } 80 } 81 } 82 83 /** 84 * Calls failOnMatchedJira with the contents and if no match is detected then the message. 85 * @param contents to check for containing of the jiraMatches keys. 86 * @param message to check for containing of the jiraMatches keys if contents doesn't 87 * @param failable to fail with the jiraMatches value if the contents or message is detected 88 */ 89 public static void failOnMatchedJira(String contents, String message, Failable failable) { 90 failOnMatchedJira(contents, failable); 91 failOnMatchedJira(message, failable); 92 } 93 }