xref: /AOO41X/main/package/qa/storages/RegressionTest_i61909.java (revision a740f2aac71e58ccad9369fb423cc251ef909663)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 package complex.storages;
23 
24 import java.net.URI;
25 import java.io.File;
26 import java.io.FileInputStream;
27 import java.util.zip.ZipInputStream;
28 import java.util.zip.ZipEntry;
29 
30 import com.sun.star.uno.XInterface;
31 import com.sun.star.lang.XMultiServiceFactory;
32 import com.sun.star.lang.XSingleServiceFactory;
33 
34 import com.sun.star.bridge.XUnoUrlResolver;
35 import com.sun.star.uno.UnoRuntime;
36 import com.sun.star.uno.XInterface;
37 import com.sun.star.io.XStream;
38 import com.sun.star.io.XInputStream;
39 
40 import com.sun.star.embed.*;
41 
42 import share.LogWriter;
43 import complex.storages.TestHelper;
44 import complex.storages.StorageTest;
45 
46 public class RegressionTest_i61909 implements StorageTest {
47 
48     XMultiServiceFactory m_xMSF;
49     XSingleServiceFactory m_xStorageFactory;
50     TestHelper m_aTestHelper;
51 
RegressionTest_i61909( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )52     public RegressionTest_i61909( XMultiServiceFactory xMSF, XSingleServiceFactory xStorageFactory, LogWriter aLogWriter )
53     {
54         m_xMSF = xMSF;
55         m_xStorageFactory = xStorageFactory;
56         m_aTestHelper = new TestHelper( aLogWriter, "RegressionTest_i61909: " );
57     }
58 
test()59     public boolean test()
60     {
61         try
62         {
63             String sTempFileURL = m_aTestHelper.CreateTempFile( m_xMSF );
64             if ( sTempFileURL == null || sTempFileURL == "" )
65             {
66                 m_aTestHelper.Error( "No valid temporary file was created!" );
67                 return false;
68             }
69 
70             // create storage based on the temporary stream
71             Object pArgs[] = new Object[2];
72             pArgs[0] = (Object) sTempFileURL;
73             pArgs[1] = new Integer( ElementModes.WRITE );
74 
75             Object oTempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
76             XStorage xTempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oTempStorage );
77             if ( xTempStorage == null )
78             {
79                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
80                 return false;
81             }
82 
83             byte pBytes[] = new byte[36000];
84             for ( int nInd = 0; nInd < 36000; nInd++ )
85                 pBytes[nInd] = (byte)( nInd % 128 );
86 
87             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
88             if ( !m_aTestHelper.WriteBytesToSubstream( xTempStorage, "SubStream1", "MediaType1", true, pBytes ) )
89                 return false;
90 
91             // open a new substorage
92             XStorage xTempSubStorage = m_aTestHelper.openSubStorage( xTempStorage,
93                                                                         "SubStorage1",
94                                                                         ElementModes.WRITE );
95             if ( xTempSubStorage == null )
96             {
97                 m_aTestHelper.Error( "Can't create substorage!" );
98                 return false;
99             }
100 
101             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
102             if ( !m_aTestHelper.WriteBytesToSubstream( xTempSubStorage, "SubStream2", "MediaType2", true, pBytes ) )
103                 return false;
104 
105             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
106             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempStorage,
107                                                             "MediaType3",
108                                                             true,
109                                                             ElementModes.WRITE ) )
110                 return false;
111 
112             // set "MediaType" property for storages and check that "IsRoot" and "OpenMode" properties are set correctly
113             if ( !m_aTestHelper.setStorageTypeAndCheckProps( xTempSubStorage,
114                                                             "MediaType4",
115                                                             false,
116                                                             ElementModes.WRITE ) )
117                 return false;
118 
119             // commit substorage first
120             if ( !m_aTestHelper.commitStorage( xTempSubStorage ) )
121                 return false;
122 
123             // commit the root storage so the contents must be stored now
124             if ( !m_aTestHelper.commitStorage( xTempStorage ) )
125                 return false;
126 
127             // dispose used storage to free resources
128             if ( !m_aTestHelper.disposeStorage( xTempStorage ) )
129                 return false;
130 
131             // ================================================
132             // now reopen the storage, and insert a new stream
133             // ================================================
134 
135             Object oStep2TempStorage = m_xStorageFactory.createInstanceWithArguments( pArgs );
136             XStorage xStep2TempStorage = (XStorage) UnoRuntime.queryInterface( XStorage.class, oStep2TempStorage );
137             if ( xStep2TempStorage == null )
138             {
139                 m_aTestHelper.Error( "Can't create temporary storage representation!" );
140                 return false;
141             }
142 
143             // open a new substream, set "MediaType" and "Compressed" properties to it and write some bytes
144             if ( !m_aTestHelper.WriteBytesToSubstream( xStep2TempStorage, "SubStream3", "MediaType5", true, pBytes ) )
145                 return false;
146 
147             // commit the root storage so the contents must be stored now
148             if ( !m_aTestHelper.commitStorage( xStep2TempStorage ) )
149                 return false;
150 
151             // dispose used storage to free resources
152             if ( !m_aTestHelper.disposeStorage( xStep2TempStorage ) )
153                 return false;
154 
155             // ================================================
156             // now access the stream using ZipInputStream
157             // ================================================
158 
159             URI aUri = new URI( sTempFileURL );
160             File aFile = new File( aUri );
161             FileInputStream aFileStream = new FileInputStream( aFile );
162             ZipInputStream aZipStream = new ZipInputStream( aFileStream );
163 
164             ZipEntry aEntry;
165             int nNumber = 0;
166             m_aTestHelper.Message( "Available entries:" );
167             while ( ( aEntry = aZipStream.getNextEntry() ) != null )
168             {
169                 nNumber++;
170                 m_aTestHelper.Message( aEntry.getName() );
171             }
172 
173             if ( nNumber != 6 )
174             {
175                 m_aTestHelper.Error( "Wrong number of entries: " + nNumber + ", Expected: 6" );
176                 return false;
177             }
178 
179             return true;
180         }
181         catch( Exception e )
182         {
183             m_aTestHelper.Error( "Exception: " + e );
184             return false;
185         }
186     }
187 }
188 
189