KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openi > project > ProjectTest


1 /*********************************************************************************
2  * The contents of this file are subject to the OpenI Public License Version 1.0
3  * ("License"); You may not use this file except in compliance with the
4  * License. You may obtain a copy of the License at
5  * http://www.openi.org/docs/LICENSE.txt
6  *
7  * Software distributed under the License is distributed on an "AS IS" basis,
8  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
9  * the specific language governing rights and limitations under the License.
10  *
11  * The Original Code is: OpenI Open Source
12  *
13  * The Initial Developer of the Original Code is Loyalty Matrix, Inc.
14  * Portions created by Loyalty Matrix, Inc. are
15  * Copyright (C) 2005 Loyalty Matrix, Inc.; All Rights Reserved.
16  *
17  * Contributor(s): ______________________________________.
18  *
19  ********************************************************************************/

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 JavaDoc;
42
43 import java.io.*;
44
45 import java.util.ArrayList JavaDoc;
46 import java.util.Collection JavaDoc;
47 import java.util.Collections JavaDoc;
48 import java.util.HashMap JavaDoc;
49 import java.util.Iterator JavaDoc;
50 import java.util.LinkedList JavaDoc;
51 import java.util.List JavaDoc;
52 import java.util.Map JavaDoc;
53 import java.util.zip.ZipOutputStream JavaDoc;
54
55 import javax.activation.FileTypeMap JavaDoc;
56
57
58 /**
59  * @author plucas
60  *
61  * TODO To change the template for this generated type comment go to
62  * Window - Preferences - Java - Code Style - Code Templates
63  */

64 public class ProjectTest extends TestCase {
65     public static final String JavaDoc STD_PROJECT_NAME = "standard.xml";
66     private static Logger logger = Logger.getLogger(ProjectTest.class);
67     private BeanStorage storage;
68
69     /**
70      * Constructor for ProjectTest.
71      * @param arg0
72      */

73     public ProjectTest(String JavaDoc arg0) {
74         super(arg0);
75     }
76
77     public static void main(String JavaDoc[] args) {
78     }
79
80     /*
81      * @see TestCase#setUp()
82      */

83     protected void setUp() throws Exception JavaDoc {
84         super.setUp();
85         this.storage = new BeanStorage();
86         PropertyConfigurator.configure(Util.findTestDirectory() +
87             "/log4jtest.properties");
88
89         Util.initApplicationConfig();
90     }
91
92     /*
93      * @see TestCase#tearDown()
94      */

95     protected void tearDown() throws Exception JavaDoc {
96         super.tearDown();
97     }
98
99     private String JavaDoc genDirName() {
100         String JavaDoc dirName = this.getClass().getPackage().getName();
101         dirName = Util.findTestDirectory() + "/" + dirName.replace('.', '/');
102
103         // System.out.println(dirName);
104
return dirName;
105     }
106
107     private Project createProject(String JavaDoc projName) {
108         Project proj = new Project();
109         proj.setCssName(projName + ".css");
110         proj.setExternalUrl("http://www." + projName + ".com");
111         // proj.setProjectHomeDir(projName);
112
proj.setProjectId(projName);
113         proj.setProjectName(projName);
114         proj.setLogoUrl("images/" + projName + ".jpg");
115         proj.setSplashImageUrl("images/splashimage.jpg");
116
117         List JavaDoc modules = new LinkedList JavaDoc();
118         Module module = new Module();
119         module.setFolderName("Segments");
120         modules.add(module);
121         //modules.add("Attrition_And_Migration");
122
module.setFolderName("Value_And_Growth");
123         modules.add(module);
124         //modules.add("Value_And_Growth");
125
proj.setModules(modules);
126
127         Map JavaDoc datasourceMap = new HashMap JavaDoc();
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 JavaDoc palette = new ArrayList JavaDoc();
134         palette.add(Color.BLUE);
135         palette.add(Color.BLACK);
136         palette.add(Color.WHITE);
137
138         Map JavaDoc paletteMap = new HashMap JavaDoc();
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 JavaDoc projectName) {
157         Project project = createProject(projectName);
158         String JavaDoc username = "mouser";
159         String JavaDoc baseDirectory = getTestProjectsDir();
160         ProjectContext context = new ProjectContext(project, baseDirectory,
161                 username);
162
163         return context;
164     }
165
166     private String JavaDoc getTestProjectsDir() {
167         return Util.findTestDirectory() + "/projects";
168     }
169
170     public void testSaveProjectViaBean() throws Exception JavaDoc {
171         String JavaDoc 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 JavaDoc {
181         String JavaDoc 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         // System.out.println(proj.getDataSourceMap());
192
List JavaDoc palette = (List JavaDoc) 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         // System.out.println(storage.toXmlString(root));
208
}
209
210     public void testSaveAnalysis() throws IOException {
211         ProjectContext context = createProjectContext("standard");
212         Analysis analysis = createAnalysis();
213         String JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc projectDir = this.getTestProjectsDir();
246
247         //projectDir = "/apache/jakarta-tomcat-5.0.28/webapps/mo-cvs-projects";
248
Map JavaDoc projectMap = ProjectFactory.getProjectMap(projectDir);
249
250         assertTrue("expecting some project files", projectMap.size() > 0);
251
252         // List values = new LinkedList(projectMap.values());
253
// Collections.sort(values, new ProjectComparator());
254
Iterator JavaDoc 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.getCssName());
264
assertNotNull(current.getDataSourceMap());
265         }
266     }
267
268     public void testProjectByCategory() throws IOException {
269         Iterator JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc oldProjectXml = this.getTestProjectsDir() +
308             "/oldtest/oldproject.xml";
309         String JavaDoc 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         // application config restored in setup, but verify here:
337
assertTrue(Application.getInstance().getApplicationTitle().length() > 0);
338     }
339
340     /**
341      * need to also test building two menu's in a row
342      * @throws IOException
343      */

344     public void testBuildMenu() throws IOException {
345             String JavaDoc username = "projectUser";
346             ProjectContext context = Util.createTestProjectContext(username);
347         Menu menu = context.buildMenu();
348         logger.debug(storage.toXmlString(menu));
349         // storage.saveBean(new FileWriter(Util.findTestDir() + "/menu.xml"), menu);
350

351         // assertTrue("No permission to save private", context.hasPermission(Permission.SAVE_PRIVATE));
352
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 JavaDoc 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         // logger.debug(context.getBaseDirectory());
366
String JavaDoc projectId = context.getProject().getProjectId();
367         
368         // if you want to test zip contents, change to a file output stream
369
// String filename = Util.findTestDirectory() + "/" + projectId + ".zip";
370
// OutputStream os = new FileOutputStream(filename);
371
NullOutputStream os = new NullOutputStream();
372         ZipOutputStream JavaDoc zos = new ZipOutputStream JavaDoc(os);
373         context.zipProjectContents(zos);
374         zos.close();
375         zos =null;
376         os.close();
377         // assertTrue(new File(filename).exists());
378
assertTrue(os.length()>0);
379     }
380     
381     
382     public void testGetContentType(){
383         FileTypeMap JavaDoc map = FileTypeMap.getDefaultFileTypeMap();
384         assertNotNull(map.getContentType("project.zip"));
385         // logger.debug(map.getContentType("cheesysong.mp3"));
386
}
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 JavaDoc(os));
393             fail("should not reach previous line should throw a SecurityException");
394         }catch(SecurityException JavaDoc e){
395             // this is what you want
396
// test passes
397
}catch(Exception JavaDoc e){
398             fail("unexpected exception: " + e.getMessage());
399         }
400         // logger.debug("" + os.length());
401
}
402 }
403
Popular Tags