1 rizwank 1.1 /*
2 * Unit test suite for cabinet.dll - FDI functions
3 *
|
4 rizwank 2.5 * Copyright 2004 Rizwan Kassim, Dan Kegel, Alexander Liber
|
5 rizwank 1.1 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
|
21 rizwank 2.3 #include <stdlib.h>
22 #include <string.h>
|
23 cs130_alex 2.2 #include <sys/stat.h>
|
24 rizwank 1.1
25 #ifndef STANDALONE
26 #include <wine/test.h>
27 #define ok2 ok
28 #else
|
29 rizwank 2.5 /* To build outside Wine tree, compile with cl -DSTANDALONE -D_X86_ tvfs.c cabinet_fdi.c FDI.lib
|
30 rizwank 1.1 These are only called if standalone are used, defining ok and START_TEST, which would normally be declared in winetree */
31 #include <assert.h>
32 #include <stdio.h>
33 #define START_TEST(name) main(int argc, char **argv)
34 #define ok(condition, msg) \
35 do { if(!(condition)) { \
36 fprintf(stderr,"failed at %d, msg:" msg "\n",__LINE__); \
37 exit(1); \
38 } } while(0)
39 #define ok2(condition, msg, arg) \
40 do { if(!(condition)) { \
41 fprintf(stderr,"failed at %d, msg:" msg "\n",__LINE__, arg); \
42 exit(1); \
43 } } while(0)
44 #define todo_wine
45 #endif
46
47 #include <winerror.h>
48 #include <fdi.h>
|
49 rizwank 1.7 #include <fcntl.h>
|
50 rizwank 2.5 #include "tvfs.h"
51 #include "data.h"
|
52 rizwank 1.7
|
53 rizwank 1.8 /* Do malloc and free output debug messages?
54 #define DEBUG_ALLOC
55 */
|
56 rizwank 1.7
|
57 rizwank 1.8 #ifndef DEBUG_ALLOC
58 FNALLOC(final_alloc) {
59 return malloc(cb);
60 }
61 FNFREE(final_free) {
62 free(pv);
63 return;
64 }
65 #else
66 FNALLOC(final_alloc) {
|
67 rizwank 1.5 printf(" FNALLOC just called with %d\n",cb);
68 return malloc(cb);
|
69 rizwank 1.3 }
|
70 rizwank 1.8 FNFREE(final_free) {
|
71 rizwank 1.5 printf(" FNFREE just called with %d\n",pv);
72 free(pv);
|
73 rizwank 1.3 return;
74 }
|
75 rizwank 1.8 #endif
76
|
77 rizwank 1.3
78 FNOPEN(dummy_open) {
|
79 rizwank 1.8 printf(" FNOPEN (dummy) just called with %d, %d, %d\n",pszFile, oflag, pmode);
|
80 rizwank 1.3 return 0;
81 }
82
83 FNREAD(dummy_read) {
|
84 rizwank 1.8 printf(" FNREAD (dummy) just called with %d, %d, %d\n",hf, pv, cb);
|
85 rizwank 1.5 return 0;
|
86 rizwank 1.3 }
|
87 rizwank 1.7
|
88 rizwank 1.8 FNCLOSE(dummy_close) {
89 printf(" FNCLOSE (dummy) just called with %d - returning %d\n",hf,0);
|
90 rizwank 1.5 return 0;
|
91 rizwank 1.3 }
92
|
93 rizwank 1.8 FNWRITE(dummy_write) {
94 printf(" FNWRITE just called with %d, %d, %d\n",hf, pv, cb);
|
95 rizwank 1.5 return 0;
|
96 rizwank 1.3 }
|
97 rizwank 1.1
|
98 rizwank 1.3 FNSEEK(dummy_seek) {
|
99 rizwank 1.8 printf(" FNSEEK just called with %d, %d, %d\n",hf, dist, seektype);
|
100 rizwank 1.5 return 0;
|
101 rizwank 1.3 }
102
|
103 cs130_alex 2.1 FNFDINOTIFY(dummy_notification){
104 printf(" FNFDINOTIFY just called with %d, %d \n",fdint,pfdin);
105 return 0;
106 }
107
|
108 rizwank 2.3 FNFDINOTIFY(notification_function)
109 {
110 printf(" FNFDINOTIFY real just called with %d, %d \n",fdint,pfdin);
111 switch (fdint)
112 {
113 case fdintCABINET_INFO:
114 {
115 printf("fdintCABINET_INFO\n");
116 return 0;
117 }
118 case fdintPARTIAL_FILE:
119 {
120 printf("dintPARTIAL_FILE\n");
121 return 0;
122 }
123 case fdintCOPY_FILE:
124 {
125 int fih = 0;
126 char target[256];
127
128 printf("fdintCOPY_FILE\n");
129 rizwank 2.3 printf(" file name: %s\n", pfdin->psz1);
130 sprintf(target, "./%s",pfdin->psz1);
131 printf("%s\n",target);
132
|
133 rizwank 2.5 fih = 0;
134 /*real_open(
|
135 rizwank 2.3 target,
136 _O_BINARY | _O_CREAT | _O_WRONLY | _O_SEQUENTIAL,
137 _S_IREAD | _S_IWRITE
138 );
|
139 rizwank 2.5 */
|
140 rizwank 2.3 return fih;
|
141 rizwank 2.5 }
|
142 rizwank 2.3 case fdintCLOSE_FILE_INFO:
143 {
144
145 printf("fdintCLOSE_FILE_INFO\n");
146 return 0;
147 }
148 case fdintNEXT_CABINET:
149 {
150
151 printf("fdintNEXT_CABINET\n");
152 return 0;
153 }
154 case fdintENUMERATE:
155 {
156 printf("fdintENUMERATE\n");
157 return 0;
158 }
159 }
160 return 0;
161 }
|
162 cs130_alex 2.1
|
163 rizwank 2.3 static void printCabInfo(FDICABINETINFO cabinfo){
|
164 rizwank 2.4 printf(" Cabinet Data : cbC %d cF %d cFi %d si %d iC %d fr %d hp %d hn %d\n",
|
165 cs130_alex 2.1 cabinfo.cbCabinet,
|
166 rizwank 2.5 cabinfo.cFolders ,
|
167 cs130_alex 2.1 cabinfo.cFiles ,
168 cabinfo.setID,
169 cabinfo.iCabinet,
170 cabinfo.fReserve ,
171 cabinfo.hasprev ,
|
172 rizwank 2.3 cabinfo.hasnext );
|
173 cs130_alex 2.1 }
174
|
175 cs130_alex 2.2 static void CheckCabInfo(char * cabname,
176 FDICABINETINFO cabinfo,
|
177 rizwank 2.3 long TcbCabinet,
178 USHORT TcFolders,
179 USHORT TcFiles,
180 USHORT TsetID,
181 USHORT TiCabinet,
182 BOOL TfReserve,
183 BOOL Thasprev,
184 BOOL Thasnext){
|
185 rizwank 2.5 ok2 ( cabinfo.cbCabinet == TcbCabinet, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
186 ok2 ( cabinfo.cFolders == TcFolders, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
187 ok2 ( cabinfo.cFiles == TcFiles, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
188 ok2 ( cabinfo.setID == TsetID, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
189 ok2 ( cabinfo.iCabinet == TiCabinet, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
190 ok2 ( cabinfo.fReserve == TfReserve, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
191 ok2 ( cabinfo.hasprev == Thasprev, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
192 ok2 ( cabinfo.hasnext == Thasnext, "FDIIsCabinet,cabinfo %s data did not match! Failed!\n", cabname);
|
193 cs130_alex 2.1 }
|
194 rizwank 2.5 HFDI hfdi_unknown_dummy, hfdi_unknown_tvfs;
|
195 rizwank 1.4 /* yes its global and ugly */
196
|
197 rizwank 2.0 /* Is CPU386 or Unknown more commonly used? */
|
198 rizwank 1.1
|
199 rizwank 1.4 static void TestCreate(void) {
200
201 ERF error_structure;
202
203 printf("Starting TestCreate()\n");
204
|
205 rizwank 1.7 hfdi_unknown_dummy = FDICreate(
|
206 rizwank 1.8 final_alloc,
207 final_free,
|
208 rizwank 1.5 dummy_open,
209 dummy_read,
210 dummy_write,
211 dummy_close,
212 dummy_seek,
213 cpuUNKNOWN,
214 &error_structure
215 );
|
216 rizwank 1.7 ok(hfdi_unknown_dummy != NULL,"FDICreate (CPU = unknown) (functions=dummy) failed!\n");
217
|
218 rizwank 2.5 hfdi_unknown_tvfs = FDICreate(
|
219 rizwank 1.8 final_alloc,
220 final_free,
|
221 rizwank 2.5 tvfs_open,
222 tvfs_read,
223 tvfs_write,
224 tvfs_close,
225 tvfs_lseek,
|
226 rizwank 1.7 cpuUNKNOWN,
227 &error_structure
228 );
|
229 rizwank 2.5 ok(hfdi_unknown_tvfs != NULL,"FDICreate (CPU = unknown) (functions=tvfs) failed!\n");
|
230 rizwank 1.7
231 printf("Ending TestCreate()\n");
232 }
233
234 static void TestInfo(void) {
|
235 rizwank 1.8
|
236 rizwank 2.5 int fd;
237
|
238 rizwank 1.8 FDICABINETINFO fdi_cabinfo_dummy, fdi_cabinfo_simple, fdi_cabinfo_complex;
|
239 rizwank 1.7
240 printf("Starting TestInfo()\n");
|
241 rizwank 1.8
242 /* TEST : ERR filehandle associated, dummy functions should return FALSE */
243 ok ( FDIIsCabinet( hfdi_unknown_dummy, -1, &fdi_cabinfo_dummy) == FALSE,
|
244 rizwank 1.7 "FDIIsCabinet (File = Error) failed!\n");
|
245 rizwank 1.8
246
|
247 rizwank 2.5 tvfs_create( name_simple_cab, file_simple_cab, size_simple_cab);
248 fd = tvfs_open( name_simple_cab, _O_BINARY, 0 );
|
249 rizwank 2.0
|
250 rizwank 2.5 ok( FDIIsCabinet( hfdi_unknown_tvfs, fd, &fdi_cabinfo_simple) == TRUE,
251 "FDIIsCabinet (Virtual File = Simple.cab) failed!\n");
|
252 rizwank 2.0
|
253 rizwank 2.5 printCabInfo(fdi_cabinfo_simple);
254 CheckCabInfo("simple.cab",fdi_cabinfo_simple,121,1,1,0,0,0,0,0);
|
255 rizwank 2.0
|
256 rizwank 2.5 tvfs_close(fd);
|
257 rizwank 2.4
|
258 rizwank 2.0
|
259 rizwank 2.5 tvfs_create( name_complex_cab, file_complex_cab, size_complex_cab);
260 fd = tvfs_open( name_complex_cab, _O_BINARY, 0 );
|
261 rizwank 2.0
|
262 rizwank 2.5 ok( FDIIsCabinet( hfdi_unknown_tvfs, fd, &fdi_cabinfo_complex) == TRUE,
263 "FDIIsCabinet (Virtual File = Complex.cab) failed!\n");
|
264 rizwank 1.7
|
265 cs130_alex 2.1 printCabInfo(fdi_cabinfo_complex);
|
266 rizwank 2.5 CheckCabInfo("complex.cab",fdi_cabinfo_complex,12918,1,2,0,0,0,0,0);
|
267 rizwank 2.0
|
268 rizwank 2.5 tvfs_close(fd);
|
269 rizwank 1.7
|
270 rizwank 2.5 printf("Ending TestInfo()\n");
271 printf(" SEEK_CUR %d \n",SEEK_CUR);
|
272 rizwank 1.7 }
|
273 cs130_alex 2.1
|
274 rizwank 2.3 static void TestCopy(void){
275 printf("Starting TestCopy()\n");
276 printf("---simple.cab\n");
|
277 rizwank 2.5 FDICopy(hfdi_unknown_tvfs,
|
278 rizwank 2.3 "simple.cab",
|
279 rizwank 2.5 "",
|
280 rizwank 2.3 0,
281 notification_function,
282 NULL,
283 NULL);
284
285 printf("Ending TestCopy()\n");
|
286 cs130_alex 2.1 }
287
|
288 rizwank 1.7 static void TestDestroy(void) {
289 printf("Starting TestDestroy()\n");
|
290 rizwank 2.0
|
291 rizwank 1.7 ok(FDIDestroy(hfdi_unknown_dummy), "FDIDestroy (CPU = unknown) (functions=fake) failed!\n");
|
292 rizwank 2.5 ok(FDIDestroy(hfdi_unknown_tvfs), "FDIDestroy (CPU = unknown) (functions=tvfs) failed!\n");
|
293 rizwank 1.7 printf("Ending TestDestroy()\n");
|
294 rizwank 1.4 }
|
295 rizwank 1.1
296 START_TEST(paths)
297 {
|
298 rizwank 1.4 TestCreate();
|
299 rizwank 1.7 TestInfo();
|
300 rizwank 1.2 TestCopy();
301 TestDestroy();
|
302 rizwank 2.5 tvfs_free();
|
303 rizwank 1.1 }
|