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