xref: /trunk/main/package/qa/storages/RegressionTest_i30400.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 package complex.storages;
2 
3 import com.sun.star.uno.XInterface;
4 import com.sun.star.lang.XMultiServiceFactory;
5 import com.sun.star.lang.XSingleServiceFactory;
6 
7 import com.sun.star.bridge.XUnoUrlResolver;
8 import com.sun.star.uno.UnoRuntime;
9 import com.sun.star.uno.XInterface;
10 import com.sun.star.io.XStream;
11 import com.sun.star.io.XInputStream;
12 
13 import com.sun.star.embed.*;
14 
15 import share.LogWriter;
16 import complex.storages.TestHelper;
17 import complex.storages.StorageTest;
18 
19 public class RegressionTest_i30400 implements StorageTest {
20 
21     XMultiServiceFactory m_xMSF;
22     XSingleServiceFactory m_xStorageFactory;
23     TestHelper m_aTestHelper;
24 
25     public RegressionTest_i30400( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
26     {
27         m_xMSF = xMSF;
28         m_xStorageFactory = xStorageFactory;
29         m_aTestHelper = new TestHelper( aLogWriter, "RegressionTest_i30400: " );
30     }
31 
32     public boolean test()
33     {
34         try
35         {
36             // ================================================
37             // create a temporary stream and a storage based on it
38             // fill the storage with the data that will be used for testing
39             // ================================================
40 
41             XStream xTempFileStream = m_aTestHelper.CreateTempFileStream( m_xMSF );
42             if ( xTempFileStream == null )
43                 return false;
44 
45             // create storage based on the temporary stream
46             Object pArgs[] = new Object[2];
47             pArgs[0] = (Object) xTempFileStream;
48             pArgs[1] = new Integer( ElementModes.WRITE );
49             byte pBytes1[] = { 1, 1, 1, 1, 1 };
50             String pPass1 = "1, 2, 3, 4, 5";
51 
52             Object oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
53             XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
54             if ( xTempStorage == null )
55             {
56                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
57                 return false;
58             }
59 
60             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
61             if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "Stream1", "MediaType1", true, pBytes1 ) )
62                 return false;
63 
64             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
65             if ( !m_aTestHelper.WriteBytesToEncrSubstream( xTempStorage, "EncrStream1", "MediaType2", true, pBytes1, pPass1 ) )
66                 return false;
67 
68 
69             // open a new substorage
70             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
71                                                                     "SubStorage1",
72                                                                     ElementModes.WRITE );
73             if ( xTempSubStorage == null )
74             {
75                 m_aTestHelper.Error( "Can't create substorage!" );
76                 return false;
77             }
78 
79             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
80             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream1", "MediaType3", true, pBytes1 ) )
81                 return false;
82 
83             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
84             if ( !m_aTestHelper.WriteBytesToEncrSubstream( xTempSubStorage, "SubEncrStream1", "MediaType4", true, pBytes1, pPass1 ) )
85                 return false;
86 
87             // open a new substorage in the existing substorage
88             XStorage xTempSubSubStorage = m_aTestHelper.openSubStorage( xTempSubStorage,
89                                                                         "SubSubStorage1",
90                                                                         ElementModes.WRITE );
91             if ( xTempSubStorage == null )
92             {
93                 m_aTestHelper.Error( "Can't create substorage!" );
94                 return false;
95             }
96 
97             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
98             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubSubStorage, "SubSubStream1", "MediaType5", true, pBytes1 ) )
99                 return false;
100 
101             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
102             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubSubStorage,
103                                                             "MediaType6",
104                                                             false,
105                                                             ElementModes.WRITE ) )
106                 return false;
107 
108 
109             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
110             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
111                                                             "MediaType7",
112                                                             false,
113                                                             ElementModes.WRITE ) )
114                 return false;
115 
116             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
117             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
118                                                             "MediaType8",
119                                                             true,
120                                                             ElementModes.WRITE ) )
121                 return false;
122 
123             // ================================================
124             // check the copying with renaming
125             // ================================================
126 
127             if ( !TestCopyWithRenaming( xTempStorage, xTempSubStorage, xTempSubSubStorage ) )
128                 return false;
129 
130             // ================================================
131             // commit the storages
132             // ================================================
133 
134             // commit lowlevel substorage
135             if ( !m_aTestHelper.commitStorage( xTempSubSubStorage ) )
136                 return false;
137 
138             // commit substorage
139             if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
140                 return false;
141 
142             // commit the root storage so the contents must be stored now
143             if ( !m_aTestHelper.commitStorage( xTempStorage ) )
144                 return false;
145 
146             // ================================================
147             // dispose the storages
148             // ================================================
149 
150             // dispose lowerest substorage
151             if ( !m_aTestHelper.disposeStorage( xTempSubSubStorage ) )
152                 return false;
153 
154             // dispose substorage
155             if ( !m_aTestHelper.disposeStorage( xTempSubStorage ) )
156                 return false;
157 
158             // dispose the temporary storage
159             if ( !m_aTestHelper.disposeStorage( xTempStorage ) )
160                 return false;
161 
162             // ================================================
163             // reopen the target storage readonly, and check the copying with renaming
164             // ================================================
165 
166             pArgs[1] = new Integer( ElementModes.READ );
167             oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
168             xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
169             if ( xTempStorage == null )
170             {
171                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
172                 return false;
173             }
174 
175             // open the substorages
176 
177             xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
178                                                             "SubStorage1",
179                                                             ElementModes.READ );
180             if ( xTempSubStorage == null )
181             {
182                 m_aTestHelper.Error( "Can't create substorage!" );
183                 return false;
184             }
185 
186             // open the lowlevel substorages
187 
188             xTempSubSubStorage = m_aTestHelper.openSubStorage( xTempSubStorage,
189                                                                 "SubSubStorage1",
190                                                                 ElementModes.READ );
191             if ( xTempSubSubStorage == null )
192             {
193                 m_aTestHelper.Error( "Can't create substorage!" );
194                 return false;
195             }
196 
197             // test the copying with renaming
198             if ( !TestCopyWithRenaming( xTempStorage, xTempSubStorage, xTempSubSubStorage ) )
199                 return false;
200 
201 
202             // the storage is based on the temporary stream so it can be left undisposed, since it does not lock
203             // any resource, later the garbage collector will release the object and it must die by refcount
204 
205             return true;
206         }
207         catch( Exception e )
208         {
209             m_aTestHelper.Error( "Exception: " + e );
210             return false;
211         }
212     }
213 
214 
215     public boolean TestCopyWithRenaming( XStorage xTempStorage, XStorage xTempSubStorage, XStorage xTempSubSubStorage )
216         throws com.sun.star.uno.Exception
217     {
218         // ================================================
219         // create a second temporary stream and copy all the staff there
220         // with renaming, check the success
221         // ================================================
222 
223         XStream xTempFileStream2 = m_aTestHelper.CreateTempFileStream( m_xMSF );
224         if ( xTempFileStream2 == null )
225             return false;
226 
227         Object pArgs[] = new Object[2];
228         pArgs[0] = (Object) xTempFileStream2;
229         pArgs[1] = new Integer( ElementModes.WRITE );
230         byte pBytes1[] = { 1, 1, 1, 1, 1 };
231         String pPass1 = "1, 2, 3, 4, 5";
232 
233         Object oTempStorage2 = m_xStorageFactory.createInstanceWithArguments( pArgs );
234         XStorage xTempStorage2 = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage2 );
235         if ( xTempStorage2 == null )
236         {
237             m_aTestHelper.Error( "Can't create temporary storage representation!" );
238             return false;
239         }
240 
241         // open a new substorage
242         XStorage xTempSubStorage2 = m_aTestHelper.openSubStorage( xTempStorage2,
243                                                                 "SubStorage1_target",
244                                                                 ElementModes.WRITE );
245         if ( xTempSubStorage2 == null )
246         {
247             m_aTestHelper.Error( "Can't create substorage!" );
248             return false;
249         }
250 
251         // open a new substorage in the existing substorage
252         XStorage xTempSubSubStorage2 = m_aTestHelper.openSubStorage( xTempSubStorage2,
253                                                                     "SubSubStorage1_target",
254                                                                     ElementModes.WRITE );
255         if ( xTempSubSubStorage2 == null )
256         {
257             m_aTestHelper.Error( "Can't create substorage!" );
258             return false;
259         }
260 
261         // make a copy with renaming on lowerest level
262         if ( !m_aTestHelper.copyElementTo( xTempSubSubStorage, "SubSubStream1", xTempSubSubStorage2, "SubSubStream1_renamed" ) )
263             return false;
264 
265         // make a copy with renaming on the next level
266 
267         if ( !m_aTestHelper.copyElementTo( xTempSubStorage, "SubStream1", xTempSubStorage2, "SubStream1_renamed" ) )
268             return false;
269 
270         if ( !m_aTestHelper.copyElementTo( xTempSubStorage, "SubEncrStream1", xTempSubStorage2, "SubEncrStream1_renamed" ) )
271             return false;
272 
273         if ( !m_aTestHelper.copyElementTo( xTempSubStorage, "SubSubStorage1", xTempSubStorage2, "SubSubStorage1_renamed" ) )
274             return false;
275 
276         // make a copy with renaming of subelements of the root storage
277 
278         if ( !m_aTestHelper.copyElementTo( xTempStorage, "Stream1", xTempStorage2, "Stream1_renamed" ) )
279             return false;
280 
281         if ( !m_aTestHelper.copyElementTo( xTempStorage, "EncrStream1", xTempStorage2, "EncrStream1_renamed" ) )
282             return false;
283 
284         if ( !m_aTestHelper.copyElementTo( xTempStorage, "SubStorage1", xTempStorage2, "SubStorage1_renamed" ) )
285             return false;
286 
287         // ================================================
288         // commit the storages, and check the renaming in all stages
289         // ================================================
290 
291         // commit substorage to let the renaming take place
292         if ( !m_aTestHelper.commitStorage( xTempSubSubStorage2 ) )
293             return false;
294 
295         // commit substorage to let the renaming take place
296         if ( !m_aTestHelper.commitStorage( xTempSubStorage2 ) )
297             return false;
298 
299         // commit the root storage so the contents must be stored now
300         if ( !m_aTestHelper.commitStorage( xTempStorage2 ) )
301             return false;
302 
303         // ================================================
304         // dispose the storages
305         // ================================================
306 
307         // dispose lowerest substorage
308         if ( !m_aTestHelper.disposeStorage( xTempSubSubStorage2 ) )
309             return false;
310 
311         // dispose substorage
312         if ( !m_aTestHelper.disposeStorage( xTempSubStorage2 ) )
313             return false;
314 
315         // dispose the temporary storage
316         if ( !m_aTestHelper.disposeStorage( xTempStorage2 ) )
317             return false;
318 
319         // ================================================
320         // reopen the target storage readonly, and check the contents
321         // ================================================
322 
323         pArgs[1] = new Integer( ElementModes.READ );
324         oTempStorage2 = m_xStorageFactory.createInstanceWithArguments( pArgs );
325         xTempStorage2 = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage2 );
326         if ( xTempStorage2 == null )
327         {
328             m_aTestHelper.Error( "Can't create temporary storage representation!" );
329             return false;
330         }
331 
332         // open the substorages
333 
334         XStorage xTempSubStorage2_target = m_aTestHelper.openSubStorage( xTempStorage2,
335                                                                 "SubStorage1_target",
336                                                                 ElementModes.READ );
337         if ( xTempSubStorage2_target == null )
338         {
339             m_aTestHelper.Error( "Can't create substorage!" );
340             return false;
341         }
342 
343         XStorage xTempSubStorage2_renamed = m_aTestHelper.openSubStorage( xTempStorage2,
344                                                                 "SubStorage1_renamed",
345                                                                 ElementModes.READ );
346         if ( xTempSubStorage2_renamed == null )
347         {
348             m_aTestHelper.Error( "Can't create substorage!" );
349             return false;
350         }
351 
352         // open the lowlevel substorages
353 
354         XStorage xTempSubSubStorage2_inRenamed = m_aTestHelper.openSubStorage( xTempSubStorage2_renamed,
355                                                                                 "SubSubStorage1",
356                                                                                 ElementModes.READ );
357         if ( xTempSubSubStorage2_inRenamed == null )
358         {
359             m_aTestHelper.Error( "Can't create substorage!" );
360             return false;
361         }
362 
363         XStorage xTempSubSubStorage2_renamed = m_aTestHelper.openSubStorage( xTempSubStorage2_target,
364                                                                             "SubSubStorage1_renamed",
365                                                                             ElementModes.READ );
366         if ( xTempSubSubStorage2_renamed == null )
367         {
368             m_aTestHelper.Error( "Can't create substorage!" );
369             return false;
370         }
371 
372         XStorage xTempSubSubStorage2_target = m_aTestHelper.openSubStorage( xTempSubStorage2_target,
373                                                                             "SubSubStorage1_target",
374                                                                             ElementModes.READ );
375         if ( xTempSubSubStorage2_target == null )
376         {
377             m_aTestHelper.Error( "Can't create substorage!" );
378             return false;
379         }
380 
381         // check the storages
382 
383         if ( !m_aTestHelper.checkStorageProperties( xTempSubSubStorage2_inRenamed, "MediaType6", false, ElementModes.READ ) )
384             return false;
385 
386         if ( !m_aTestHelper.checkStorageProperties( xTempSubSubStorage2_renamed, "MediaType6", false, ElementModes.READ ) )
387             return false;
388 
389         if ( !m_aTestHelper.checkStorageProperties( xTempSubStorage2_renamed, "MediaType7", false, ElementModes.READ ) )
390             return false;
391 
392 
393         // check the streams
394 
395 
396         // sub sub level
397 
398         if ( !m_aTestHelper.checkStream( xTempSubSubStorage2_inRenamed, "SubSubStream1", "MediaType5", true, pBytes1 ) )
399             return false;
400 
401         if ( !m_aTestHelper.checkStream( xTempSubSubStorage2_renamed, "SubSubStream1", "MediaType5", true, pBytes1 ) )
402             return false;
403 
404         if ( !m_aTestHelper.checkStream( xTempSubSubStorage2_target, "SubSubStream1_renamed", "MediaType5", true, pBytes1 ) )
405             return false;
406 
407         // sub level
408 
409         if ( !m_aTestHelper.checkStream( xTempSubStorage2_renamed, "SubStream1", "MediaType3", true, pBytes1 ) )
410             return false;
411 
412         if ( !m_aTestHelper.checkEncrStream( xTempSubStorage2_renamed, "SubEncrStream1", "MediaType4", pBytes1, pPass1 ) )
413             return false;
414 
415         if ( !m_aTestHelper.checkStream( xTempSubStorage2_target, "SubStream1_renamed", "MediaType3", true, pBytes1 ) )
416             return false;
417 
418         if ( !m_aTestHelper.checkEncrStream( xTempSubStorage2_target, "SubEncrStream1_renamed", "MediaType4", pBytes1, pPass1 ) )
419             return false;
420 
421         // root storage level
422 
423         if ( !m_aTestHelper.checkStream( xTempStorage2, "Stream1_renamed", "MediaType1", true, pBytes1 ) )
424             return false;
425 
426         if ( !m_aTestHelper.checkEncrStream( xTempStorage2, "EncrStream1_renamed", "MediaType2", pBytes1, pPass1 ) )
427             return false;
428 
429         // the storage is based on the temporary stream so it can be left undisposed, since it does not lock
430         // any resource, later the garbage collector will release the object and it must die by refcount
431 
432         return true;
433     }
434 }
435 
436