1 20 package org.openi.project; 21 22 import junit.framework.TestCase; 23 24 import org.apache.log4j.Logger; 25 import org.apache.log4j.PropertyConfigurator; 26 27 import org.openi.analysis.Analysis; 28 import org.openi.analysis.Datasource; 29 30 import org.openi.application.Application; 31 32 import org.openi.menu.Menu; 33 34 import org.openi.test.NullOutputStream; 35 import org.openi.test.Util; 36 37 import org.openi.util.NameValue; 38 39 import org.openi.xml.BeanStorage; 40 41 import java.awt.Color ; 42 43 import java.io.*; 44 45 import java.util.ArrayList ; 46 import java.util.Collection ; 47 import java.util.Collections ; 48 import java.util.HashMap ; 49 import java.util.Iterator ; 50 import java.util.LinkedList ; 51 import java.util.List ; 52 import java.util.Map ; 53 import java.util.zip.ZipOutputStream ; 54 55 import javax.activation.FileTypeMap ; 56 57 58 64 public class ProjectTest extends TestCase { 65 public static final String STD_PROJECT_NAME = "standard.xml"; 66 private static Logger logger = Logger.getLogger(ProjectTest.class); 67 private BeanStorage storage; 68 69 73 public ProjectTest(String arg0) { 74 super(arg0); 75 } 76 77 public static void main(String [] args) { 78 } 79 80 83 protected void setUp() throws Exception { 84 super.setUp(); 85 this.storage = new BeanStorage(); 86 PropertyConfigurator.configure(Util.findTestDirectory() + 87 "/log4jtest.properties"); 88 89 Util.initApplicationConfig(); 90 } 91 92 95 protected void tearDown() throws Exception { 96 super.tearDown(); 97 } 98 99 private String genDirName() { 100 String dirName = this.getClass().getPackage().getName(); 101 dirName = Util.findTestDirectory() + "/" + dirName.replace('.', '/'); 102 103 return dirName; 105 } 106 107 private Project createProject(String projName) { 108 Project proj = new Project(); 109 proj.setCssName(projName + ".css"); 110 proj.setExternalUrl("http://www." + projName + ".com"); 111 proj.setProjectId(projName); 113 proj.setProjectName(projName); 114 proj.setLogoUrl("images/" + projName + ".jpg"); 115 proj.setSplashImageUrl("images/splashimage.jpg"); 116 117 List modules = new LinkedList (); 118 Module module = new Module(); 119 module.setFolderName("Segments"); 120 modules.add(module); 121 module.setFolderName("Value_And_Growth"); 123 modules.add(module); 124 proj.setModules(modules); 126 127 Map datasourceMap = new HashMap (); 128 Datasource datasource = new Datasource("http://moosehead.openi.local/xmla/msxisapi.dll", 129 "mo_30"); 130 datasourceMap.put("openidemo", datasource); 131 proj.setDataSourceMap(datasourceMap); 132 133 List palette = new ArrayList (); 134 palette.add(Color.BLUE); 135 palette.add(Color.BLACK); 136 palette.add(Color.WHITE); 137 138 Map paletteMap = new HashMap (); 139 paletteMap.put("standard", palette); 140 proj.setColorPaletteMap(paletteMap); 141 proj.setDefaultPaletteName("standard"); 142 143 return proj; 144 } 145 146 private Analysis createAnalysis() { 147 Analysis analysis = new Analysis(); 148 analysis.setDataSourceName("openidemo"); 149 analysis.setAnalysisTitle("Analysis Test"); 150 analysis.setMdxQuery( 151 "SELECT {[Measures]} ON COLUMNS, {[Product].[All Product].children} ON ROWS FROM [Customer Sales by Corporate]"); 152 153 return analysis; 154 } 155 156 private ProjectContext createProjectContext(String projectName) { 157 Project project = createProject(projectName); 158 String username = "mouser"; 159 String baseDirectory = getTestProjectsDir(); 160 ProjectContext context = new ProjectContext(project, baseDirectory, 161 username); 162 163 return context; 164 } 165 166 private String getTestProjectsDir() { 167 return Util.findTestDirectory() + "/projects"; 168 } 169 170 public void testSaveProjectViaBean() throws Exception { 171 String filename = genDirName() + "/openidemo.xml"; 172 this.storage.saveBeanToFile(filename, createProject("openidemo")); 173 174 Project restored = (Project) this.storage.restoreBeanFromFile(filename); 175 assertNotNull(restored); 176 assertEquals("openidemo", restored.getProjectId()); 177 assertNotNull(restored.getColorPalette("standard")); 178 } 179 180 public void testRestoreStandardProjectFile() throws Exception { 181 String filename = genDirName() + "/" + STD_PROJECT_NAME; 182 System.out.println("looking for std project file at: " + filename); 183 184 Project proj = (Project) this.storage.restoreBeanFromFile(filename); 185 assertEquals("standard.css", proj.getCssName()); 186 assertEquals("http://www.standard.com", proj.getExternalUrl()); 187 assertEquals("standard", proj.getProjectId()); 188 assertEquals("standard", proj.getProjectName()); 189 assertNotNull(proj.getDataSourceMap()); 190 191 List palette = (List ) proj.getColorPaletteMap().get("standard"); 193 assertTrue(proj.getColorPaletteMap().size() > 0); 194 assertEquals("standard", proj.getDefaultPaletteName()); 195 } 196 197 public void testCreateProjectContext() { 198 createProjectContext("standard"); 199 } 200 201 public void testCreateMenu() throws IOException { 202 System.out.println("testCreateMenu"); 203 204 ProjectContext context = createProjectContext("standard"); 205 Menu root = context.buildMenu(); 206 207 } 209 210 public void testSaveAnalysis() throws IOException { 211 ProjectContext context = createProjectContext("standard"); 212 Analysis analysis = createAnalysis(); 213 String relativeUrl = "test/Test_Save_Analysis.analysis"; 214 context.savePublic(relativeUrl, analysis, "Saving test public analysis"); 215 context.savePersonal("personal.analysis", analysis, 216 "Saving test public analysis"); 217 } 218 219 public void testDataSource() throws IOException { 220 ProjectContext context = createProjectContext("standard"); 221 Datasource ds = context.getDatasource("openidemo"); 222 assertNotNull(ds); 223 assertEquals("http://moosehead.openi.local/xmla/msxisapi.dll", 224 ds.getServer()); 225 assertEquals("mo_30", ds.getCatalog()); 226 } 227 228 public void testRestoreAnalysis() throws IOException { 229 String relativeUrl = "public/HR_Employees.analysis"; 230 ProjectContext context = createProjectContext("standard"); 231 Analysis analysis = context.restoreAnalysis(relativeUrl); 232 assertNotNull(analysis); 233 assertEquals("HR Employees", analysis.getAnalysisTitle()); 234 } 235 236 public void testDeleteAnalysis() throws IOException { 237 ProjectContext context = createProjectContext("standard"); 238 String relativeUrl = "delete.analysis"; 239 context.savePublic(relativeUrl, new Analysis(), 240 "Saving test public analysis"); 241 context.deleteAnalysis("public/" + relativeUrl); 242 } 243 244 public void testListProjects() throws IOException { 245 String projectDir = this.getTestProjectsDir(); 246 247 Map projectMap = ProjectFactory.getProjectMap(projectDir); 249 250 assertTrue("expecting some project files", projectMap.size() > 0); 251 252 Iterator projects = projectMap.values().iterator(); 255 256 while (projects.hasNext()) { 257 Project current = (Project) projects.next(); 258 logger.debug(current.getCategory() + ", " + 259 current.getProjectName()); 260 logger.debug(current.getCategory()); 261 assertNotNull(current.getProjectId()); 262 assertNotNull(current.getModules()); 263 assertNotNull(current.getDataSourceMap()); 265 } 266 } 267 268 public void testProjectByCategory() throws IOException { 269 Iterator categories = ProjectFactory.getProjectsByCategory(this.getTestProjectsDir(), 270 "stopper").values().iterator(); 271 272 while (categories.hasNext()) { 273 Category category = (Category) categories.next(); 274 logger.debug(category.getName()); 275 276 Iterator projects = category.getProjects().iterator(); 277 278 while (projects.hasNext()) { 279 Project current = (Project) projects.next(); 280 logger.debug("\t" + current.getProjectName()); 281 } 282 } 283 } 284 285 public void testProjectXmlMissing() { 286 try { 287 Project project = ProjectFactory.getProject(this.getTestProjectsDir(), 288 "missing"); 289 fail("expecting IOException"); 290 } catch (IOException e) { 291 logger.error(e); 292 } 293 } 294 295 public void testNewProject() throws IOException { 296 String projectId = "testnewproject"; 297 Project createProject = ProjectFactory.createProject(this.getTestProjectsDir(), 298 projectId); 299 assertNotNull(createProject); 300 301 Project getProject = ProjectFactory.getProject(this.getTestProjectsDir(), 302 projectId); 303 assertNotNull(getProject); 304 } 305 306 public void testOldProjectToNewFormat() throws IOException { 307 String oldProjectXml = this.getTestProjectsDir() + 308 "/oldtest/oldproject.xml"; 309 String projectXml = this.getTestProjectsDir() + "/oldtest/project.xml"; 310 logger.debug("creating old format 'project.xml' from :" + 311 oldProjectXml); 312 313 File oldFile = new File(oldProjectXml); 314 File projectFile = new File(projectXml); 315 FileWriter writer = new FileWriter(projectFile); 316 FileReader reader = new FileReader(oldFile); 317 int ch; 318 319 while ((ch = reader.read()) != -1) { 320 writer.write((char) ch); 321 } 322 323 reader.close(); 324 writer.close(); 325 logger.debug("getting project bean for project 'oldtest'"); 326 327 Project testproject = ProjectFactory.getProject(this.getTestProjectsDir(), 328 "oldtest"); 329 assertNotNull(testproject); 330 assertNotNull(testproject.getModules()); 331 assertTrue(testproject.getModules().size() > 0); 332 assertTrue(testproject.getModules().get(0) instanceof Module); 333 } 334 335 public void testApplicationRestore() throws IOException { 336 assertTrue(Application.getInstance().getApplicationTitle().length() > 0); 338 } 339 340 344 public void testBuildMenu() throws IOException { 345 String username = "projectUser"; 346 ProjectContext context = Util.createTestProjectContext(username); 347 Menu menu = context.buildMenu(); 348 logger.debug(storage.toXmlString(menu)); 349 351 assertEquals(username, context.getUsername()); 353 assertTrue("make sure project admins exist", 354 context.getProject().getProjectAdmins().length() > 0); 355 } 356 357 public void SaveNewMenu() throws IOException { 358 String baseDir = Util.findTestDirectory() + "/projects/"; 359 Project project = new Project(); 360 storage.saveBeanToFile(baseDir + "/projectwithconfig.xml", project); 361 } 362 363 public void testZipFile() throws IOException { 364 ProjectContext context = Util.createTestProjectContext("appAdmin"); 365 String projectId = context.getProject().getProjectId(); 367 368 NullOutputStream os = new NullOutputStream(); 372 ZipOutputStream zos = new ZipOutputStream (os); 373 context.zipProjectContents(zos); 374 zos.close(); 375 zos =null; 376 os.close(); 377 assertTrue(os.length()>0); 379 } 380 381 382 public void testGetContentType(){ 383 FileTypeMap map = FileTypeMap.getDefaultFileTypeMap(); 384 assertNotNull(map.getContentType("project.zip")); 385 } 387 388 public void testZipWithoutPermission() throws IOException{ 389 ProjectContext context = Util.createTestProjectContext("nobody"); 390 NullOutputStream os = new NullOutputStream(); 391 try{ 392 context.zipProjectContents(new ZipOutputStream (os)); 393 fail("should not reach previous line should throw a SecurityException"); 394 }catch(SecurityException e){ 395 }catch(Exception e){ 398 fail("unexpected exception: " + e.getMessage()); 399 } 400 } 402 } 403 | Popular Tags |