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 */ 016 package edu.samplu.admin.test; 017 018 import edu.samplu.common.ITUtil; 019 020 import freemarker.cache.ClassTemplateLoader; 021 import freemarker.template.Configuration; 022 import freemarker.template.Template; 023 import freemarker.template.TemplateException; 024 import org.apache.commons.io.FileUtils; 025 import org.apache.log4j.Logger; 026 import org.junit.Ignore; 027 import org.junit.Rule; 028 import org.junit.Test; 029 import org.junit.rules.TemporaryFolder; 030 import org.openqa.selenium.By; 031 import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; 032 033 import java.io.File; 034 import java.io.FileInputStream; 035 import java.io.IOException; 036 import java.io.InputStream; 037 import java.util.ArrayList; 038 import java.util.Enumeration; 039 import java.util.List; 040 import java.util.Properties; 041 042 /** 043 * tests uploads of new users and group 044 * 045 * <pre>mvn -f rice-middleware/sampleapp/pom.xml -Pstests failsafe:integration-test -Dremote.public.url=env7.rice.kuali.org -Dit.test=XMLIngesterNavIT -DXMLIngester.groupId=2008 -DXMLIngester.userIncludeDTSinPrefix=false -DXMLIngester.userCntBegin=0 -DXMLIngester.userCnt=600 -DXMLIngester.userPrefix=loadtester -Dremote.driver.dontTearDown=y</pre> 046 * 047 * @deprecated XMLIngesterSTJUnitNavGen 048 * @author Kuali Rice Team (rice.collab@kuali.org) 049 */ 050 public class XMLIngesterNavIT extends AdminTmplMthdSTNavBase { 051 052 protected final Logger LOG = Logger.getLogger(getClass()); 053 054 // File generation 055 private Configuration cfg; 056 private String PROPS_LOCATION = System.getProperty("xmlingester.props.location", null); 057 private String DEFAULT_PROPS_LOCATION = "XML/xmlingester.properties"; 058 059 // Templates for File Generation 060 private static final String DIR_TMPL = "/XML/"; 061 private static final String TMPL_USER_CONTENT = "SimpleUserContent.ftl"; 062 private static final String TMPL_GROUP_CONTENT = "SimpleGroupContent.ftl"; 063 064 @Rule 065 public TemporaryFolder folder= new TemporaryFolder(); 066 067 @Ignore 068 @Override 069 public void testCreateNewCancel() throws Exception {} 070 071 @Ignore 072 @Override 073 public void testEditCancel() throws Exception {} 074 075 076 @Override 077 protected String getLinkLocator() { 078 return "XML Ingester"; 079 } 080 081 @Override 082 public String getUserName() { 083 return "admin"; // xml ingestion requires admin permissions 084 } 085 086 @Override 087 public void testSetUp() { 088 super.testSetUp(); 089 // generated load users and group resources 090 cfg = new Configuration(); 091 cfg.setTemplateLoader(new ClassTemplateLoader(getClass().getClassLoader().getClass(), DIR_TMPL)); 092 } 093 094 private List<File> buildFileUploadList() throws Exception { 095 List<File> fileUploadList = new ArrayList<File>(); 096 try { 097 // update properties with timestamp value if includeDTSinPrefix is true 098 Properties props = loadProperties(PROPS_LOCATION, DEFAULT_PROPS_LOCATION); 099 if(props.get("userIncludeDTSinPrefix") != null 100 && "true".equalsIgnoreCase((String) props.get("userIncludeDTSinPrefix"))) { 101 props.setProperty("userPrefix", "" + props.get("userPrefix") + ITUtil.DTS); 102 } 103 systemPropertiesOverride(props); 104 105 // build files and add to array 106 fileUploadList.add( 107 writeTemplateToFile( 108 folder.newFile("loadtest-users.xml"), cfg.getTemplate(TMPL_USER_CONTENT), props)); 109 fileUploadList.add( 110 writeTemplateToFile( 111 folder.newFile("loadtest-group.xml"), cfg.getTemplate(TMPL_GROUP_CONTENT), props)); 112 } catch( Exception e) { 113 throw new Exception("Unable to generate files for upload", e); 114 } 115 return fileUploadList; 116 } 117 118 /** 119 * -DXMLIngester.userCnt=176 will override the userCnt in property files. 120 * @param props 121 */ 122 private void systemPropertiesOverride(Properties props) { 123 Enumeration<?> names = props.propertyNames(); 124 Object nameObject; 125 String name; 126 while (names.hasMoreElements()) { 127 nameObject = names.nextElement(); 128 if (nameObject instanceof String) { 129 name = (String)nameObject; 130 props.setProperty(name, System.getProperty("XMLIngester." + name, props.getProperty(name))); 131 } 132 } 133 } 134 135 /** 136 * Based on load user and groups manual tests; dynamically generates user and group file 137 * and loads into the xml ingester screen 138 * 139 */ 140 @Test 141 public void testXMLIngesterSuccessfulFileUpload() throws Exception { 142 List<File> fileUploadList = buildFileUploadList(); 143 gotoMenuLinkLocator(); 144 int cnt = 0; 145 for(File file : fileUploadList) { 146 String path = file.getAbsolutePath().toString(); 147 driver.findElement(By.name("file[" + cnt + "]")).sendKeys(path); 148 cnt++; 149 } 150 waitAndClickByXpath("//*[@id='imageField']"); 151 152 // confirm all files were uploaded successfully 153 for(File file: fileUploadList) { 154 assertTextPresent("Ingested xml doc: " + file.getName()); 155 } 156 passed(); 157 } 158 159 /** 160 * Loads properties from user defined properties file, if not available uses resource file 161 * 162 * @return 163 * @throws IOException 164 */ 165 private Properties loadProperties(String fileLocation, String resourceLocation) throws IOException { 166 Properties props = new Properties(); 167 InputStream in = null; 168 if(fileLocation != null) { 169 in = new FileInputStream(fileLocation); 170 } else { 171 in = getClass().getClassLoader().getResourceAsStream(resourceLocation); 172 } 173 if(in != null) { 174 props.load(in); 175 in.close(); 176 } 177 return props; 178 } 179 180 /** 181 * writes processed template to file 182 * 183 * @param file 184 * @param template 185 * @param props 186 * @return 187 * @throws IOException 188 * @throws TemplateException 189 */ 190 private File writeTemplateToFile(File file, Template template, Properties props) throws IOException, TemplateException { 191 String output = FreeMarkerTemplateUtils.processTemplateIntoString(template, props); 192 LOG.debug("Generated File Output: " + output); 193 FileUtils.writeStringToFile(file, output); 194 return file; 195 } 196 }