xref: /trunk/main/package/qa/storages/RegressionTest_i61909.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 package complex.storages;
2 
3 import java.net.URI;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.util.zip.ZipInputStream;
7 import java.util.zip.ZipEntry;
8 
9 import com.sun.star.uno.XInterface;
10 import com.sun.star.lang.XMultiServiceFactory;
11 import com.sun.star.lang.XSingleServiceFactory;
12 
13 import com.sun.star.bridge.XUnoUrlResolver;
14 import com.sun.star.uno.UnoRuntime;
15 import com.sun.star.uno.XInterface;
16 import com.sun.star.io.XStream;
17 import com.sun.star.io.XInputStream;
18 
19 import com.sun.star.embed.*;
20 
21 import share.LogWriter;
22 import complex.storages.TestHelper;
23 import complex.storages.StorageTest;
24 
25 public class RegressionTest_i61909 implements StorageTest {
26 
27     XMultiServiceFactory m_xMSF;
28     XSingleServiceFactory m_xStorageFactory;
29     TestHelper m_aTestHelper;
30 
31     public RegressionTest_i61909( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
32     {
33         m_xMSF = xMSF;
34         m_xStorageFactory = xStorageFactory;
35         m_aTestHelper = new TestHelper( aLogWriter, "RegressionTest_i61909: " );
36     }
37 
38     public boolean test()
39     {
40         try
41         {
42             String sTempFileURL = m_aTestHelper.CreateTempFile( m_xMSF );
43             if ( sTempFileURL == null || sTempFileURL == "" )
44             {
45                 m_aTestHelper.Error( "No valid temporary file was created!" );
46                 return false;
47             }
48 
49             // create storage based on the temporary stream
50             Object pArgs[] = new Object[2];
51             pArgs[0] = (Object) sTempFileURL;
52             pArgs[1] = new Integer( ElementModes.WRITE );
53 
54             Object oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
55             XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
56             if ( xTempStorage == null )
57             {
58                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
59                 return false;
60             }
61 
62             byte pBytes[] = new byte[36000];
63             for ( int nInd = 0; nInd < 36000; nInd++ )
64                 pBytes[nInd] = (byte)( nInd % 128 );
65 
66             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
67             if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "SubStream1", "MediaType1", true, pBytes ) )
68                 return false;
69 
70             // open a new substorage
71             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
72                                                                         "SubStorage1",
73                                                                         ElementModes.WRITE );
74             if ( xTempSubStorage == null )
75             {
76                 m_aTestHelper.Error( "Can't create substorage!" );
77                 return false;
78             }
79 
80             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
81             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream2", "MediaType2", true, pBytes ) )
82                 return false;
83 
84             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
85             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
86                                                             "MediaType3",
87                                                             true,
88                                                             ElementModes.WRITE ) )
89                 return false;
90 
91             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
92             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
93                                                             "MediaType4",
94                                                             false,
95                                                             ElementModes.WRITE ) )
96                 return false;
97 
98             // commit substorage first
99             if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
100                 return false;
101 
102             // commit the root storage so the contents must be stored now
103             if ( !m_aTestHelper.commitStorage( xTempStorage ) )
104                 return false;
105 
106             // dispose used storage to free resources
107             if ( !m_aTestHelper.disposeStorage( xTempStorage ) )
108                 return false;
109 
110             // ================================================
111             // now reopen the storage, and insert a new stream
112             // ================================================
113 
114             Object oStep2TempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
115             XStorage xStep2TempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oStep2TempStorage );
116             if ( xStep2TempStorage == null )
117             {
118                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
119                 return false;
120             }
121 
122             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
123             if ( !m_aTestHelper.WriteBytesToSubstream( xStep2TempStorage, "SubStream3", "MediaType5", true, pBytes ) )
124                 return false;
125 
126             // commit the root storage so the contents must be stored now
127             if ( !m_aTestHelper.commitStorage( xStep2TempStorage ) )
128                 return false;
129 
130             // dispose used storage to free resources
131             if ( !m_aTestHelper.disposeStorage( xStep2TempStorage ) )
132                 return false;
133 
134             // ================================================
135             // now access the stream using ZipInputStream
136             // ================================================
137 
138             URI aUri = new URI( sTempFileURL );
139             File aFile = new File( aUri );
140             FileInputStream aFileStream = new FileInputStream( aFile );
141             ZipInputStream aZipStream = new ZipInputStream( aFileStream );
142 
143             ZipEntry aEntry;
144             int nNumber = 0;
145             m_aTestHelper.Message( "Available entries:" );
146             while ( ( aEntry = aZipStream.getNextEntry() ) != null )
147             {
148                 nNumber++;
149                 m_aTestHelper.Message( aEntry.getName() );
150             }
151 
152             if ( nNumber != 6 )
153             {
154                 m_aTestHelper.Error( "Wrong number of entries: " + nNumber + ", Expected: 6" );
155                 return false;
156             }
157 
158             return true;
159         }
160         catch( Exception e )
161         {
162             m_aTestHelper.Error( "Exception: " + e );
163             return false;
164         }
165     }
166 }
167 
168