Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/test/commonal_cppunit.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.26 - (show annotations) (download) (as text)
Wed May 10 01:46:58 2006 UTC (17 years, 11 months ago) by tani
Branch: MAIN
CVS Tags: AL_PORTING, tag20070307current, tag20061130, merge_to_20060605, tag20070307, HEAD
Branch point for: XOONIPS_STABLE_32, XOONIPS_STABLE_3
Changes since 1.25: +5 -2 lines
File MIME type: text/x-c++src
insertRelatedToのテストコードを修正.

1 /*
2 *
3 * commonal.cc?????鴻??(cppunit)
4 *
5 * $Revision: 1.25 $
6 * $Log: commonal_cppunit.cc,v $
7 * Revision 1.25 2005/11/17 11:00:09 tani
8 * relatedToTest??菴遵??.
9 *
10 * Revision 1.24 2005/08/23 07:46:38 tani
11 * setLang, getLang?????鴻????菴遵??(compareItem, fillItem)
12 *
13 * Revision 1.23 2005/08/23 02:20:10 tani
14 *
15 * Revision 1.22 2005/05/23 08:01:11 tani
16 * 腟怨???≪?吾?ャ?若???????若??????????綽?.
17 * ?違???若????????茲??????翫??????篏????鴻????菴遵??.
18 *
19 * Revision 1.21 2005/03/14 06:12:11 tani
20 * __BORLANDC__絲上?.
21 *
22 * Revision 1.20 2005/02/25 07:42:06 tani
23 * index, item??imit?????鴻????菴遵??.
24 *
25 * Revision 1.19 2005/02/25 01:00:47 tani
26 * SQLite絲上??潟?若????申??.
27 *
28 * Revision 1.18 2005/02/16 10:04:35 youi
29 * publication_year/month/mday???綽?.
30 *
31 * Revision 1.17 2005/02/16 07:38:31 youi
32 * ?≪?ゃ?????????鴻?????publication_date?????鴻????菴遵??????.
33 *
34 * Revision 1.16 2005/02/09 11:10:27 youi
35 * zipText, pubmedTest菴遵??.
36 * itemTest??ublic_item_target_user?????鴻??菴遵??.
37 *
38 * Revision 1.15 2005/02/09 07:30:22 aga
39 * ??RL to My Personal Archive ??羔?????.
40 *
41 * Revision 1.14 2005/02/09 02:38:44 aga
42 * ??nitializeDB()??BTYPE_MYSQL綣??違??菴遵??.
43 *
44 * Revision 1.13 2005/01/29 09:50:08 youi
45 * getItemTypes?????鴻????菴遵??????.
46 *
47 * Revision 1.12 2005/01/24 01:55:34 youi
48 * getUncertifiedLink, getPrivateItemID?????鴻????菴遵??????.
49 *
50 * Revision 1.11 2005/01/22 05:36:26 youi
51 * ???鴻???若????d5??????菴遵??????.
52 *
53 * Revision 1.10 2005/01/21 01:42:51 youi
54 * itemTest: getItemIDByIndexID?????鴻????申??.
55 * pubmedTest??菴遵??.
56 *
57 * Revision 1.9 2005/01/19 06:15:46 youi
58 * *** empty log message ***
59 *
60 * Revision 1.8 2005/01/15 05:40:35 youi
61 * ?≪?ゃ????膊∞??膤祉???鴻???∽?違??菴遵??????.
62 *
63 * Revision 1.7 2005/01/13 04:19:23 aga
64 * ??P??XNP?????.
65 *
66 * Revision 1.6 2005/01/06 07:28:02 youi
67 * ?祉???激?с?潟?????鴻????菴遵??????.
68 * ?脂?蚊???????若?吟????????????Platform?違???若??????絮??????????????????鴻??????.
69 * deleteMember?с????????????Platform?違???若?????????ゃ?с???????????????鴻??????.
70 * ??絮??違???若???????鴻??????????????Platform?違???若??????絮????鴻????菴遵??????.
71 *
72 * Revision 1.5 2004/12/25 09:48:54 youi
73 * ???鴻????戎?????????若?帥???若?鴻??紊??眼????.
74 *
75 * Revision 1.4 2004/12/18 10:23:15 youi
76 * ???鴻????戎?????????若????????refix鐚??冴???守???劫????紊??眼????.
77 * (commonal_cppunit.sql?????????)
78 * uint??unsigned int??信罩c????.
79 * my_socket???臂???菴遵??????.
80 * windows??nix?с?ゃ?潟?????若?????<?ゃ?????翫?????????.
81 *
82 * Revision 1.3 2004/12/18 01:10:05 youi
83 * freeResult???∽?医??紊??眼??週???????鴻????篆??????.
84 *
85 * Revision 1.2 2004/12/06 07:21:17 youi
86 * xnp_insert_account, xnp_insert_group????医??眼??軸?c?????鴻????絎鴻??紊??眼????.
87 *
88 * Revision 1.1 2004/11/30 07:48:56 youi
89 * initial version
90 *
91 *
92 */
93 #ifdef __WIN__
94 #include <winsock.h>
95 #define my_socket SOCKET
96 #else
97 typedef int my_socket;
98 #endif
99
100 #define DBPREFIX "x"
101 #define ODBC_DSN "cppunit_test"
102 #define DBTYPE DBTYPE_MYSQL
103 //#define DBTYPE DBTYPE_SQLITE
104
105 #include <time.h>
106 #include <stdio.h>
107 #include <string.h>
108 #if defined(__BORLANDC__)
109 #else
110 #include <unistd.h>
111 #endif
112 #include <cppunit/extensions/HelperMacros.h>
113 #include <cppunit/TestAssert.h>
114 #include <cppunit/TestResult.h>
115 #include <cppunit/ui/text/TestRunner.h>
116 #include <cppunit/extensions/HelperMacros.h>
117
118 #include <string>
119 using namespace std;
120
121 #include "../session.h"
122 #include "../common.h"
123 #include "../commonal.h"
124 #include "common.h"
125 #include "../item.h"
126
127 #define TEST( x ) test( x, #x )
128
129 indexid_t getPrivateIndexByUID( sessionid_t sid, userid_t uid )
130 {
131 const account_t* puser;
132 if( getAccount( sid, uid, &puser ) == RES_OK ){
133 indexid_t iid;
134 iid = puser -> getPrivateIndexID();
135 freeAccount( puser );
136 //fprintf( stderr, "getPrivateIndexByUID=%d\n", iid );
137 return iid;
138 }
139 return 0;
140 }
141
142 indexid_t getGroupIndexByGID( sessionid_t sid, groupid_t gid )
143 {
144 const group_t* pgroup;
145 if( getGroup( sid, gid, &pgroup ) == RES_OK ){
146 indexid_t iid;
147 iid = pgroup -> getGroupIndexID();
148 freeGroup( pgroup );
149 //fprintf( stderr, "getGroupIndexByGID=%d\n", iid );
150 return iid;
151 }
152 return 0;
153 }
154
155 // 筝?????????group????????若???若?帥???祉????????
156 void fillGroup( int no, group_t* g )
157 {
158 char buf[ 1024 ];
159 snprintf( buf, 1024, "MyGroup No.%d", no );
160 g -> setGname( buf );
161
162 snprintf( buf, 1024, "Description of MyGroup No.%d", no );
163 g -> setDesc( buf );
164
165 g -> setItemNumberLimit( no );
166 g -> setIndexNumberLimit( no );
167 g -> setItemStorageLimit( no );
168 }
169
170
171 // 筝?????????account????????若???若?帥???祉????????
172 void fillAccount( int no , account_t* a )
173 {
174 char buf[ 1024 ];
175 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
176
177 snprintf( buf, 1023, "My Address %d", no );
178 a -> setAddress( buf );
179
180 snprintf( buf, 1023, "My 'Division' %d", no );
181 a -> setDivision( buf );
182
183 snprintf( buf, 1023, "My Telephone %d", no );
184 a -> setTel( buf );
185
186 snprintf( buf, 1023, "My CompanyName %d", no );
187 a -> setCompanyName( buf );
188
189 snprintf( buf, 1023, "My Country %d", no );
190 a -> setCountry( buf );
191
192 snprintf( buf, 1023, "My Zipcode %d", no );
193 a -> setZipcode( buf );
194
195 snprintf( buf, 1023, "My Fax number %d", no );
196 a -> setFax( buf );
197
198 snprintf( buf, 1023, "My Uname %d", no );
199 a -> setUname( buf );
200
201 snprintf( buf, 1023, "My Name %d", no );
202 a -> setName( buf );
203
204 snprintf( buf, 1023, "My Email address %d", no );
205 a -> setEmail( buf );
206
207 snprintf( buf, 1023, "My URL %d", no );
208 a -> setURL( buf );
209
210 snprintf( buf, 1023, "pass%d", no );
211 a -> setPass( md5str( md5buf, ( unsigned char* )buf, strlen( buf ) ) );
212
213 a -> setTimezoneOffset( 9.5 );
214
215 a -> setItemNumberLimit( no );
216 a -> setIndexNumberLimit( no );
217 a -> setItemStorageLimit( no );
218 }
219
220 // 筝?????????item????????若???若?帥???祉????????
221 void fillItem( int no , item_t* a )
222 {
223 char buf[ 1024 ];
224
225 a -> setContributorUID( no );
226 a -> setItemID( no );
227 a -> setItemTypeID( no );
228
229 snprintf( buf, 1023, "My Item Title %d", no );
230 a -> setTitle( buf );
231
232 snprintf( buf, 1023, "My Item Keywords %d", no );
233 a -> setKeywords( buf );
234
235 snprintf( buf, 1023, "My Item Description %d", no );
236 a -> setDescription( buf );
237
238 snprintf( buf, 1023, "My Item DOI %d", no );
239 a -> setDOI( buf );
240
241 // a -> setCreationDate( time( NULL ) );
242 // a -> setLastUpdateDate( time( NULL ) );
243 a -> setPublicationYear( no );
244 a -> setPublicationMonth( no );
245 a -> setPublicationMday( no );
246
247 a -> setLang( "jpn" );
248 }
249
250 class AbstractLayerTest : public CppUnit::TestFixture
251 {
252 CPPUNIT_TEST_SUITE( AbstractLayerTest );
253 CPPUNIT_TEST( pubmedTest );
254 CPPUNIT_TEST( zipTest );
255 CPPUNIT_TEST( executeBeforeDBInitialize );
256 CPPUNIT_TEST( invalidSessionID );
257 CPPUNIT_TEST( loginUserTest );
258 CPPUNIT_TEST( accountTest );
259 CPPUNIT_TEST( getAccountsTest );
260 CPPUNIT_TEST( dumpGroupAdminsTest );
261 CPPUNIT_TEST( isGroupAdminTest );
262 CPPUNIT_TEST( isModeratorTest );
263 CPPUNIT_TEST( groupTest );
264 CPPUNIT_TEST( getGroupsTest );
265 CPPUNIT_TEST( memberTest );
266 CPPUNIT_TEST( memberManipulateTest );
267 CPPUNIT_TEST( getGroupsByUidTest );
268 CPPUNIT_TEST( getSessionTest );
269 CPPUNIT_TEST( changelogTest );
270 CPPUNIT_TEST( itemTest );
271 CPPUNIT_TEST( binderTest );
272 CPPUNIT_TEST( isAdminTest );
273 CPPUNIT_TEST( relatedToTest );
274 CPPUNIT_TEST_SUITE_END();
275
276 public:
277 /*
278 void errorStringTest() {
279 //LastErrorString?????鴻??
280 CPPUNIT_ASSERT( strcmp( getLastErrorString( ), "" ) == 0 );
281 setLastErrorString( "no such user" );
282 CPPUNIT_ASSERT( strcmp( getLastErrorString( ), "no such user" ) == 0 );
283 setLastErrorString( "no such session" );
284 CPPUNIT_ASSERT( strcmp( getLastErrorString( ), "no such session" ) == 0 );
285 }
286 */
287
288 void executeBeforeDBInitialize( ){
289 //DB???????????茵?????????????/span>
290 int len;
291 criteria_t cri;
292 const session_t* psession;
293 groupid_t gid;
294 group_t group;
295 const group_t* pgroup;
296 const account_t* getacc;
297 userid_t *puid;
298 groupid_t *pgid;
299 sessionid_t sid;
300 userid_t uid;
301
302 uninitializeDB();
303
304 CPPUNIT_ASSERT( isActivated( sid, uid ) == false );
305 CPPUNIT_ASSERT( activate( sid, uid, false ) == RES_DB_NOT_INITIALIZED );
306 CPPUNIT_ASSERT( getAccountCount( sid ) == 0 );
307 CPPUNIT_ASSERT( deleteAccount( sid, uid ) == RES_DB_NOT_INITIALIZED );
308
309 CPPUNIT_ASSERT( getAccount( sid, uid, &getacc ) == RES_DB_NOT_INITIALIZED );
310 CPPUNIT_ASSERT( getAccounts( sid, &uid, 1, &cri, &getacc, &len ) == RES_DB_NOT_INITIALIZED );
311 CPPUNIT_ASSERT( insertAccount( sid, getacc, &uid ) == RES_DB_NOT_INITIALIZED );
312 CPPUNIT_ASSERT( updateAccount( sid, getacc ) == RES_DB_NOT_INITIALIZED );
313 CPPUNIT_ASSERT( dumpUids( sid, &cri, &puid, &len ) == RES_DB_NOT_INITIALIZED );
314 CPPUNIT_ASSERT( getGroupCount( sid ) == 0 );
315 CPPUNIT_ASSERT( getGroupsByUid( sid, uid, &cri, &pgid, &len ) == RES_DB_NOT_INITIALIZED );
316 CPPUNIT_ASSERT( isGroupAdmin( sid, gid, uid ) == false );
317 CPPUNIT_ASSERT( dumpGids( sid, &cri, &pgid, &len ) == RES_DB_NOT_INITIALIZED );
318 CPPUNIT_ASSERT( dumpGroupAdmins( sid, gid, &cri, &puid, &len ) == RES_DB_NOT_INITIALIZED );
319 CPPUNIT_ASSERT( deleteMember( sid, gid, uid ) == RES_DB_NOT_INITIALIZED );
320 CPPUNIT_ASSERT( insertMember( sid, gid, uid, false ) == RES_DB_NOT_INITIALIZED );
321 CPPUNIT_ASSERT( getMembers( sid, gid, &cri, &puid, &len ) == RES_DB_NOT_INITIALIZED );
322 CPPUNIT_ASSERT( deleteGroup( sid, gid ) == RES_DB_NOT_INITIALIZED );
323 CPPUNIT_ASSERT( insertGroup( sid, &group, &gid ) == RES_DB_NOT_INITIALIZED );
324 CPPUNIT_ASSERT( updateGroup( sid, &group ) == RES_DB_NOT_INITIALIZED );
325 CPPUNIT_ASSERT( getGroup( sid, gid, &pgroup ) == RES_DB_NOT_INITIALIZED );
326 CPPUNIT_ASSERT( getGroups( sid, &gid, len, &cri, &pgroup, &len ) == RES_DB_NOT_INITIALIZED );
327 CPPUNIT_ASSERT( isModerator( sid, uid ) == false );
328 CPPUNIT_ASSERT( getUid( "", &uid ) == RES_DB_NOT_INITIALIZED );
329 CPPUNIT_ASSERT( loginUser( "", "", &sid ) == RES_DB_NOT_INITIALIZED );
330 CPPUNIT_ASSERT( createSession( "", uid, &sid ) == RES_DB_NOT_INITIALIZED );
331 CPPUNIT_ASSERT( getSession( sid, &psession ) == RES_DB_NOT_INITIALIZED );
332 CPPUNIT_ASSERT( isValidSessionID( sid ) == false );
333 }
334
335 void invalidSessionID( ){
336 sessionid_t sid;
337 userid_t uid;
338
339 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
340
341 // 筝?罩c???祉???激?с?潟???????????????
342 CPPUNIT_ASSERT( isValidSessionID( sid ) == false );
343 CPPUNIT_ASSERT( activate( sid, uid, false ) == RES_NO_SUCH_SESSION );
344 CPPUNIT_ASSERT( isActivated( sid, uid ) == false );
345 // sid??筝?罩c?????≪?????潟???違??幻??
346 CPPUNIT_ASSERT( getAccountCount( sid ) == 0 );
347 }
348
349 void loginUserTest( ){
350 sessionid_t sid;
351 userid_t uid;
352 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
353
354 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
355
356 // 筝?罩c?????鴻???若????????????鴻???若????????????違?ゃ?喝?????????鴻??
357 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"fugafuga", 8 ), &sid ) == RES_LOGIN_FAILURE );
358 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
359
360 //?祉???激?с?潟???綵??с?????с????/span>
361 CPPUNIT_ASSERT( isValidSessionID( sid ) == true );
362
363 // 絖?????????user="hogehoge" ??????????????????????????鴻??
364 CPPUNIT_ASSERT( getUid( "hogehoge", &uid ) == RES_NO_SUCH_USER );
365 CPPUNIT_ASSERT( activate( sid, uid, false ) == RES_NO_SUCH_USER );
366 CPPUNIT_ASSERT( isActivated( sid, uid ) == false );
367
368 logoutUser( sid );
369 }
370
371 void accountTest( ){
372 account ac;
373 sessionid_t sid;
374 userid_t uid;
375 const account_t* getacc;
376 criteria_t cri;
377 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
378
379 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
380
381 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
382
383 // ???鴻????紮??????≪?????潟???違??荐???/span>
384 int nAccountBase = getAccountCount( sid );
385
386 //?≪?????潟????篏????鴻??
387 fillAccount( __LINE__, &ac );
388 ac.setActivate( 0 );
389 CPPUNIT_ASSERT( insertAccount( sid, &ac, &uid ) == RES_OK );
390 //insertAccount????????????鐚?Account?違??鐚??ゅ???????????腆肴?
391
392 // ac?????若? ????????activate/deactivate??茵?????鐚?
393 // ?????倶??????緇??с???????????鴻??
394 CPPUNIT_ASSERT( getUid( ac.getUname( ), &uid ) == RES_OK );
395 CPPUNIT_ASSERT( isActivated( sid, uid ) == false );
396 CPPUNIT_ASSERT( activate( sid, uid, true ) == RES_OK );
397 CPPUNIT_ASSERT( isActivated( sid, uid ) == true );
398 CPPUNIT_ASSERT( activate( sid, uid, false ) == RES_OK );
399 CPPUNIT_ASSERT( isActivated( sid, uid ) == false );
400
401 //insert???????若?吟??ID????緇?
402 // ??絎鴻???吾????????pdate?????帥??鐚?/span>
403 CPPUNIT_ASSERT( getUid( ac.getUname( ), &uid ) == RES_OK );
404 CPPUNIT_ASSERT( getAccount( sid, uid, &getacc ) == RES_OK );
405 // insert????account??et????account????絎鴻??罸?莠?
406 CPPUNIT_ASSERT( strcmp( ac.getAddress( ), getacc->getAddress( ) ) == 0 );
407 CPPUNIT_ASSERT( strcmp( ac.getDivision(), getacc->getDivision() ) == 0 );
408 CPPUNIT_ASSERT( strcmp( ac.getTel(), getacc->getTel() ) == 0 );
409 CPPUNIT_ASSERT( strcmp( ac.getCompanyName( ), getacc->getCompanyName( ) ) == 0 );
410 CPPUNIT_ASSERT( strcmp( ac.getCountry(), getacc->getCountry() ) == 0 );
411 CPPUNIT_ASSERT( strcmp( ac.getZipcode(), getacc->getZipcode() ) == 0 );
412 CPPUNIT_ASSERT( strcmp( ac.getFax(), getacc->getFax() ) == 0 );
413 CPPUNIT_ASSERT( strcmp( ac.getUname(), getacc->getUname() ) == 0 );
414 CPPUNIT_ASSERT( strcmp( ac.getName(), getacc->getName() ) == 0 );
415 CPPUNIT_ASSERT( strcmp( ac.getEmail(), getacc->getEmail() ) == 0 );
416 CPPUNIT_ASSERT( strcmp( ac.getURL(), getacc->getURL() ) == 0 );
417 //CPPUNIT_ASSERT( strcmp( ac.getPass(), getacc->getPass() ) == 0 );
418 CPPUNIT_ASSERT( ac.getTimezoneOffset( ) == getacc->getTimezoneOffset( ) );
419 freeAccount( getacc );
420
421 account_t ac2;
422 fillAccount( __LINE__, &ac2 );
423 ac.setUID( uid );
424 ac.setAddress( ac2.getAddress( ) );
425 ac.setDivision( ac2.getDivision() );
426 ac.setTel( ac2.getTel() );
427 ac.setCompanyName( ac2.getCompanyName( ) );
428 ac.setCountry( ac2.getCountry() );
429 ac.setZipcode( ac2.getZipcode() );
430 ac.setFax( ac2.getFax() );
431 ac.setEmail( ac2.getEmail() );
432 ac.setURL( ac2.getURL() );
433 ac.setPass( ac2.getPass() );
434 ac.setTimezoneOffset( ac2.getTimezoneOffset( ) );
435 ac.setItemNumberLimit( ac2.getItemNumberLimit( ) );
436 ac.setIndexNumberLimit( ac2.getIndexNumberLimit( ) );
437 ac.setItemStorageLimit( ac2.getItemStorageLimit( ) );
438 CPPUNIT_ASSERT( updateAccount( sid, &ac ) == RES_OK );
439
440 const account_t* updated;
441 CPPUNIT_ASSERT( getAccount( sid, uid, &updated ) == RES_OK );
442 // update????account??et????account????絎鴻??罸?莠?
443 CPPUNIT_ASSERT( strcmp( updated->getAddress( ), ac.getAddress( ) ) == 0 );
444 CPPUNIT_ASSERT( strcmp( updated->getDivision(), ac.getDivision() ) == 0 );
445 CPPUNIT_ASSERT( strcmp( updated->getTel(), ac.getTel() ) == 0 );
446 CPPUNIT_ASSERT( strcmp( updated->getCompanyName( ), ac.getCompanyName( ) ) == 0 );
447 CPPUNIT_ASSERT( strcmp( updated->getCountry(), ac.getCountry() ) == 0 );
448 CPPUNIT_ASSERT( strcmp( updated->getZipcode(), ac.getZipcode() ) == 0 );
449 CPPUNIT_ASSERT( strcmp( updated->getFax(), ac.getFax() ) == 0 );
450 CPPUNIT_ASSERT( strcmp( updated->getUname(), ac.getUname() ) == 0 );
451 CPPUNIT_ASSERT( strcmp( updated->getName(), ac.getName() ) == 0 );
452 CPPUNIT_ASSERT( strcmp( updated->getEmail(), ac.getEmail() ) == 0 );
453 CPPUNIT_ASSERT( strcmp( updated->getURL(), ac.getURL() ) == 0 );
454 CPPUNIT_ASSERT( strcmp( updated->getPass(), ac.getPass() ) == 0 );
455 CPPUNIT_ASSERT( updated->getTimezoneOffset( ) == ac.getTimezoneOffset( ) );
456 CPPUNIT_ASSERT( updated->getItemNumberLimit( ) == ac.getItemNumberLimit( ) );
457 CPPUNIT_ASSERT( updated->getIndexNumberLimit( ) == ac.getIndexNumberLimit( ) );
458 CPPUNIT_ASSERT( updated->getItemStorageLimit( ) == ac.getItemStorageLimit( ) );
459 freeAccount( updated );
460
461 CPPUNIT_ASSERT( deleteAccount( sid, uid ) == RES_OK );
462
463 logoutUser( sid );
464 }
465
466 void getAccountsTest( ) //getAccounts?????鴻??
467 {
468 account_t ac[ 4 ];
469 userid_t uids[ 5 ];
470 userid_t* dumpuids;
471 const account_t* accounts;
472 int accountsLen;
473 int dumpuidsLen;
474 criteria_t c;
475 sessionid_t sid;
476 userid_t uid;
477 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
478
479 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
480
481 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
482
483 for( int i = 0; i < 4; i++ ) fillAccount( __LINE__ + i, &ac[ i ] );
484 for( int i = 0; i < 4; i++ ){
485 insertAccount( sid, &ac[ i ], &uids[ i ] );
486 getUid( ac[ i ].getUname( ), &uid );
487 CPPUNIT_ASSERT( uid == uids[ i ] );
488 }
489 uids[ 4 ] = 99999999; //絖?????????UID??羞激????
490
491 c.clearAll( );
492 c.addOrderBy( new orderby( "uid", orderby::DESC ) );
493 CPPUNIT_ASSERT( dumpUids( sid, &c, &dumpuids, &dumpuidsLen ) == RES_OK );
494 CPPUNIT_ASSERT( dumpuidsLen >= 4 );
495 CPPUNIT_ASSERT( dumpuids[ 0 ] == uids[ 3 ] );
496 CPPUNIT_ASSERT( dumpuids[ 1 ] == uids[ 2 ] );
497 CPPUNIT_ASSERT( dumpuids[ 2 ] == uids[ 1 ] );
498 CPPUNIT_ASSERT( dumpuids[ 3 ] == uids[ 0 ] );
499 for( int i = 0; i < 4; i++ ){
500 CPPUNIT_ASSERT( dumpuids[ i ] == uids[ 3 - i ] );
501 }
502
503 //????
504 c.clearAll( );
505 c.addOrderBy( new orderby( "uname", orderby::ASC ) );
506 CPPUNIT_ASSERT( getAccounts( sid, uids, 5, &c, &accounts, &accountsLen ) == RES_OK );
507 CPPUNIT_ASSERT( accountsLen == 4 );
508 for( int i = 0; i < 4; i++ ){
509 CPPUNIT_ASSERT( strcmp( accounts[ i ].getUname( ), ac[ i ].getUname( ) ) == 0 );
510 }
511 freeAccount( accounts );
512
513 //????
514 c.clearAll( );
515 c.addOrderBy( new orderby( "uname", orderby::DESC ) );
516 CPPUNIT_ASSERT( getAccounts( sid, uids, 5, &c, &accounts, &accountsLen ) == RES_OK );
517 CPPUNIT_ASSERT( accountsLen == 4 );
518 for( int i = 0; i < 4; i++ ){
519 CPPUNIT_ASSERT( strcmp( accounts[ i ].getUname( ), ac[ 3 - i ].getUname( ) ) == 0 );
520 }
521 freeAccount( accounts );
522
523 //criteria::clearAll, Limit?????鴻??
524 c.clearAll( );
525 c.setLimit( 1, 2 );
526 c.addOrderBy( new orderby( "uname", orderby::ASC ) );
527 CPPUNIT_ASSERT( getAccounts( sid, uids, 5, &c, &accounts, &accountsLen ) == RES_OK );
528 CPPUNIT_ASSERT( accountsLen == 2 );
529 //?脂?蚊?????≪?????潟??????ょ???筝??ょ????accounts???ャ??????
530 CPPUNIT_ASSERT( strcmp( accounts[ 0 ].getUname( ), ac[ 1 ].getUname( ) ) == 0 );
531 CPPUNIT_ASSERT( strcmp( accounts[ 1 ].getUname( ), ac[ 2 ].getUname( ) ) == 0 );
532 freeAccount( accounts );
533
534 for( int i = 0; i < 4; i++ )
535 CPPUNIT_ASSERT( deleteAccount( sid, uids[ i ] ) == RES_OK );
536
537 logoutUser( sid );
538 }
539
540 //dumpGroupAdmins
541 void dumpGroupAdminsTest(){
542 account_t ac[2];
543 const account_t* accounts;
544 userid_t uids[2];
545 userid_t* dumpuids;
546 criteria_t c;
547 group_t grp;
548 groupid_t* gids;
549 int gidsLen;
550 int dumpuidsLen;
551 sessionid_t sid;
552 groupid_t gid;
553 userid_t uid;
554 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
555
556 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
557 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
558
559 fillGroup( __LINE__, &grp );
560 insertGroup( sid, &grp, &gid );
561
562 c.clearAll( );
563 c.setLimit( 0, 1 );
564 c.addOrderBy( new orderby( "gid", orderby::DESC ) );
565 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLen ) == RES_OK );
566 CPPUNIT_ASSERT( gids[ 0 ] == gid );
567
568 fillAccount( __LINE__, &ac[0] );
569 fillAccount( __LINE__, &ac[1] );
570 CPPUNIT_ASSERT( insertAccount( sid, &ac[0], &uids[0] ) == RES_OK );
571 CPPUNIT_ASSERT( insertAccount( sid, &ac[1], &uids[1] ) == RES_OK );
572 CPPUNIT_ASSERT( getUid( ac[0].getUname( ), &uid ) == RES_OK );
573 CPPUNIT_ASSERT( uid == uids[0] );
574 CPPUNIT_ASSERT( getUid( ac[1].getUname( ), &uid ) == RES_OK );
575 CPPUNIT_ASSERT( uid == uids[1] );
576
577 //admin?????????違???若??
578 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uids[0], false ) == RES_OK );
579 CPPUNIT_ASSERT( isGroupAdmin( sid, gids[ 0 ], uids[0] ) == false );
580 c.clearAll( );
581 CPPUNIT_ASSERT( dumpGroupAdmins( sid, gids[ 0 ], &c, &dumpuids, &dumpuidsLen ) == RES_OK );
582 CPPUNIT_ASSERT( dumpuidsLen == 0 );
583 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uids[0] ) == RES_OK );
584 freeUID( dumpuids );
585
586 //2篋冴???<?潟???若??????dmin??筝?篋冴???翫??
587 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uids[0], true ) == RES_OK );
588 CPPUNIT_ASSERT( dumpGroupAdmins( sid, gids[ 0 ], &c, &dumpuids, &dumpuidsLen ) == RES_OK );
589 CPPUNIT_ASSERT( dumpuidsLen == 1 );
590 CPPUNIT_ASSERT( dumpuids[0] == uids[0] );
591 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uids[0] ) == RES_OK );
592 freeUID( dumpuids );
593
594 //2篋冴???<?潟???若??篋冴??????admin?с?????違???若??
595 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uids[0], true ) == RES_OK );
596 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uids[1], true ) == RES_OK );
597 CPPUNIT_ASSERT( dumpGroupAdmins( sid, gids[ 0 ], &c, &dumpuids, &dumpuidsLen ) == RES_OK );
598 CPPUNIT_ASSERT( dumpuidsLen == 2 );
599 CPPUNIT_ASSERT( dumpuids[0] == uids[0] );
600 CPPUNIT_ASSERT( dumpuids[1] == uids[1] );
601 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uids[0] ) == RES_OK );
602 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uids[1] ) == RES_OK );
603 freeUID( dumpuids );
604
605 //??????/span>
606 /*
607 CPPUNIT_ASSERT( deleteIndex( sid, getPrivateIndexByUID( sid, uids[ 0 ] ) ) == RES_OK );
608 CPPUNIT_ASSERT( deleteIndex( sid, getPrivateIndexByUID( sid, uids[ 1 ] ) ) == RES_OK );
609 CPPUNIT_ASSERT( deleteIndex( sid, getGroupIndexByGID( sid, gids[ 0 ] ) ) == RES_OK );
610 */
611 CPPUNIT_ASSERT( deleteAccount( sid, uids[ 0 ] ) == RES_OK );
612 CPPUNIT_ASSERT( deleteAccount( sid, uids[ 1 ] ) == RES_OK );
613 CPPUNIT_ASSERT( deleteGroup( sid, gids[ 0 ] ) == RES_OK );
614 }
615
616 void isGroupAdminTest( ){
617 account_t ac;
618 group_t grp;
619 criteria_t c;
620 userid_t uid;
621 groupid_t* gids;
622 int gidsLen;
623 sessionid_t sid;
624 groupid_t gid;
625 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
626
627 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
628 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
629
630 //?????若???≪?????潟?????違???若?????若?帥???ゃ?潟?泣?若??
631 fillAccount( __LINE__, &ac );
632 fillGroup( 20, &grp );
633 CPPUNIT_ASSERT( insertAccount( sid, &ac, &uid ) == RES_OK );
634 CPPUNIT_ASSERT( insertGroup( sid, &grp, &gid ) == RES_OK );
635 c.clearAll( );
636 c.setLimit( 0, 1 );
637 c.addOrderBy( new orderby( "gid", orderby::DESC ) );
638 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLen ) == RES_OK );
639 CPPUNIT_ASSERT( gids[ 0 ] == gid );
640 CPPUNIT_ASSERT( getUid( ac.getUname( ), &uid ) == RES_OK );
641 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uid, false ) == RES_OK );
642 CPPUNIT_ASSERT( isGroupAdmin( sid, gids[ 0 ], uid ) == false );
643 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uid ) == RES_OK );
644 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uid, true ) == RES_OK );
645 CPPUNIT_ASSERT( isGroupAdmin( sid, gids[ 0 ], uid ) == true );
646 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uid ) == RES_OK );
647 CPPUNIT_ASSERT( isGroupAdmin( sid, gids[ 0 ], uid ) == false );
648
649 CPPUNIT_ASSERT( deleteGroup( sid, gids[ 0 ] ) == RES_OK );
650 CPPUNIT_ASSERT( deleteAccount( sid, uid ) == RES_OK );
651 freeGID( gids );
652
653 logoutUser( sid );
654 }
655
656 void isModeratorTest( ){
657 account_t ac;
658 group_t grp;
659 criteria_t c;
660 userid_t uid;
661 groupid_t* gids;
662 int gidsLen;
663 sessionid_t sid;
664 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
665
666 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
667 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
668
669 CPPUNIT_ASSERT( isModerator( sid, 1 ) );
670 CPPUNIT_ASSERT( !isModerator( sid, 3 ) );
671 CPPUNIT_ASSERT( isModerator( sid, 4 ) );
672 logoutUser( sid );
673 }
674
675 void groupTest( ){
676 //?違???若???????
677 criteria c;
678 group_t g;
679 groupid_t gid;
680 groupid_t *gids;
681 int gidsLen = 0;
682 int gidsLenBase = 0; //???鴻???????違???若???????/span>
683 sessionid_t sid;
684 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
685
686 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
687 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
688
689 gids = 0;
690 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLenBase ) == RES_OK );
691 freeGID( gids );
692
693 g.setGname( "???ゃ?違???若??" );
694 g.setDesc( "???鴻????????????????ゃ?違???若???с??鐚??祉???祉???祉???祉???祉???祉???祉???祉???祉???祉???祉??" );
695 CPPUNIT_ASSERT( insertGroup( sid, &g, &gid ) == RES_OK );
696 //??茲??????違???若???????脂?蚊?с??????
697 CPPUNIT_ASSERT( insertGroup( sid, &g, &gid ) == RES_GROUPNAME_ALREADY_EXISTS );
698
699 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLen ) == RES_OK );
700 CPPUNIT_ASSERT( gidsLen == gidsLenBase + 1 );
701
702 //?違???若????隈??
703 const group_t* pg;
704
705 CPPUNIT_ASSERT( getGroup( sid, gid, &pg ) == RES_OK );
706 CPPUNIT_ASSERT( strcmp( g.getGname( ), pg -> getGname( ) ) == 0 );
707 g.setGID( pg -> getGID( ) );
708 freeGroup( pg );
709 groupid_t gid_back = g.getGID();
710 fillGroup( __LINE__, &g );
711 g.setGID( gid_back );
712 g.setDesc( "???ゃ?違???若?????????筝??吾??膩??????障????" );
713
714 g.setGname( "default" );
715 updateGroup( sid, &g );
716
717 g.setGname( "???ゃ?違???若??????????筝??吾??膩??????障????" );
718 CPPUNIT_ASSERT( updateGroup( sid, &g ) == RES_OK );
719 CPPUNIT_ASSERT( updateGroup( sid, &g ) == RES_OK );
720 CPPUNIT_ASSERT( getGroup( sid, gid, &pg ) == RES_OK );
721 CPPUNIT_ASSERT( strcmp( g.getGname( ), pg -> getGname( ) ) == 0 );
722 CPPUNIT_ASSERT( strcmp( g.getDesc( ), pg -> getDesc( ) ) == 0 );
723 CPPUNIT_ASSERT( g.getItemNumberLimit( ) == pg -> getItemNumberLimit( ) );
724 CPPUNIT_ASSERT( g.getIndexNumberLimit( ) == pg -> getIndexNumberLimit( ) );
725 CPPUNIT_ASSERT( g.getItemStorageLimit( ) == pg -> getItemStorageLimit( ) );
726 freeGroup( pg );
727
728 //?違???若????????/span>
729 CPPUNIT_ASSERT( deleteGroup( sid, gid ) == RES_OK );
730 //???ゃ??茵??????????(?違???若???違?????鴻???????ゃ???祉?c????)
731 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLen ) == RES_OK );
732 CPPUNIT_ASSERT( gidsLen == gidsLenBase );
733 freeGID( gids );
734
735 logoutUser( sid );
736 }
737
738 void getGroupsTest( ){
739 group_t grp[ 4 ];
740 groupid_t gids[ 4 ];
741 groupid_t* gidsDump;
742 groupid_t gid;
743 const group_t* groups;
744 int groupsLen;
745 int gidsLen;
746 int gidsDumpLen;
747 criteria_t c;
748 sessionid_t sid;
749 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
750
751 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
752 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
753
754 //getGroupCount?????鴻??
755 //筝?罩c??ID????0
756 for( sessionid_t i = 9999999 ; ; i++ ){
757 if( !isValidSessionID( i ) ){
758 CPPUNIT_ASSERT( getGroupCount( i ) == 0 );
759 break;
760 }
761 }
762 int gidsLenBase = getGroupCount( sid );
763
764 //?????若???違???若?????若?帥???ゃ?潟?泣?若??
765 for( int i = 0; i < 4; i++ ) fillGroup( i+10, &grp[ i ] );
766 for( int i = 0; i < 4; i++ ) insertGroup( sid, &grp[ i ], &gids[ i ] );
767
768 c.clearAll( );//???違???若????D????緇?????
769 c.addOrderBy( new orderby( "gid", orderby::ASC ) );
770 CPPUNIT_ASSERT( dumpGids( sid, &c, &gidsDump, &gidsDumpLen ) == RES_OK );
771 CPPUNIT_ASSERT( gidsDumpLen == gidsLenBase + 4 );
772
773 CPPUNIT_ASSERT( getGroupCount( sid ) == gidsLenBase + 4 ); //罩e幻??ID?????違???若?????違??菴???
774
775 //????
776 c.clearAll( );
777 c.addOrderBy( new orderby( "gname", orderby::ASC ) );
778 CPPUNIT_ASSERT( getGroups( sid, gids, 4, &c, &groups, &groupsLen ) == RES_OK );
779 CPPUNIT_ASSERT( groupsLen == 4 );
780 for( int i = 0; i < 4; i++ ){
781 CPPUNIT_ASSERT( strcmp( groups[ i ].getGname( ), grp[ i ].getGname( ) ) == 0 );
782 }
783 freeGroup( groups );
784
785 //????
786 c.clearAll( );
787 c.addOrderBy( new orderby( "gname", orderby::DESC ) );
788 CPPUNIT_ASSERT( getGroups( sid, gids, 4, &c, &groups, &groupsLen ) == RES_OK );
789 CPPUNIT_ASSERT( groupsLen == 4 );
790 for( int i = 0; i < 4; i++ ){
791 CPPUNIT_ASSERT( strcmp( groups[ i ].getGname( ), grp[ 3 - i ].getGname( ) ) == 0 );
792 }
793 freeGroup( groups );
794
795 //criteria::clearAll, Limit?????鴻??
796 c.clearAll( );
797 c.setLimit( 1, 2 );
798 c.addOrderBy( new orderby( "gid", orderby::ASC ) );
799 CPPUNIT_ASSERT( getGroups( sid, gids, 4, &c, &groups, &groupsLen ) == RES_OK );
800 CPPUNIT_ASSERT( groupsLen == 2 );
801 //?脂?蚊?????違???若??????ょ???筝??ょ????groups???ャ??????
802 CPPUNIT_ASSERT( strcmp( groups[ 0 ].getGname( ), grp[ 1 ].getGname( ) ) == 0 );
803 CPPUNIT_ASSERT( strcmp( groups[ 1 ].getGname( ), grp[ 2 ].getGname( ) ) == 0 );
804 freeGroup( groups );
805
806 for( int i = 0; i < 4; i++ ) deleteGroup( sid, gids[ i ] );
807
808 logoutUser( sid );
809 }
810
811 void memberTest( ) {//?<?潟???若??申???糸???ゃ?紫???????算??/span>
812 account_t ac;
813 const account_t* accounts;
814 const userid_t* uids;
815 criteria_t c;
816 group_t grp;
817 groupid_t* gids;
818 int accountsLen;
819 int dumpuidsLen;
820 int gidsLen;
821 sessionid_t sid;
822 userid_t uid;
823 userid_t* dumpuids;
824 groupid_t gid;
825 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
826
827 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
828 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
829
830 fillGroup( 9999, &grp );
831 insertGroup( sid, &grp, &gid );
832
833 c.clearAll( );
834 c.setLimit( 0, 1 );
835 c.addOrderBy( new orderby( "gid", orderby::DESC ) );
836 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLen ) == RES_OK );
837
838 fillAccount( __LINE__, &ac );
839 CPPUNIT_ASSERT( insertAccount( sid, &ac, &uid ) == RES_OK );
840 CPPUNIT_ASSERT( getUid( ac.getUname( ), &uid ) == RES_OK );
841
842 //?違???若?????<?潟???取申??
843 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uid, false ) == RES_OK );
844 //?違???若???????<?潟???弱????/span>
845 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uid ) == RES_OK );
846
847 //絖??????????<?潟???若??菴遵???糸????/span>
848 CPPUNIT_ASSERT( deleteAccount( sid, uid ) == RES_OK );
849 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uid, false ) == RES_NO_SUCH_USER );
850 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uid ) == RES_NO_SUCH_USER );
851
852 //絖??????????違???若????申???糸????/span>
853 CPPUNIT_ASSERT( insertAccount( sid, &ac, &uid ) == RES_OK );
854 CPPUNIT_ASSERT( getUid( ac.getUname( ), &uid ) == RES_OK );
855 CPPUNIT_ASSERT( deleteGroup( sid, gids[ 0 ] ) == RES_OK );
856 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uid, false ) == RES_NO_SUCH_GROUP );
857 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uid ) == RES_NO_SUCH_GROUP );
858 CPPUNIT_ASSERT( deleteAccount( sid, uid ) == RES_OK );
859
860 logoutUser( sid );
861 }
862
863 void memberManipulateTest( ){//?<?潟???若??申???糸???ゃ?紫???????算??/span>
864 account_t ac[ 4 ];
865 const account_t* accounts;
866 const group_t* groups;
867 criteria_t c;
868 group_t grp;
869 groupid_t* gids;
870 groupid_t gid;
871 int accountsLen;
872 int gidsLen;
873 int groupsLen;
874 int memberUidsLen = 0;
875 int uidsLen;
876 sessionid_t sid;
877 userid_t uids[ 4 ];
878 userid_t uid;
879 userid_t* memberUids = 0;
880 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
881
882 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
883 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
884
885 fillGroup( 9999, &grp ); //???鴻?????違???若??篏???
886 CPPUNIT_ASSERT( insertGroup( sid, &grp, &gid ) == RES_OK );
887
888 //???鴻?????≪?????潟???脂??/span>
889 for( int i = 0; i < 4; i++ ) fillAccount( i, &ac[ i ] );
890 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( insertAccount( sid, &ac[ i ], &uid ) == RES_OK );
891 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( getUid( ac[ i ].getUname( ), &uids[ i ] ) == RES_OK );
892
893 //can't delete a member from default platform group
894 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( deleteMember( sid, group_t::GID_DEFAULT, uids[ i ] ) == RES_ERROR );
895
896 c.clearAll( );
897 c.setLimit( 0, 1 );
898 c.addOrderBy( new orderby( "gid", orderby::DESC ) );
899 //?脂?蚊?????違???若????id????緇?
900 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLen ) == RES_OK );
901
902 //???鴻????紮?
903 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uids[ i ], false ) == RES_OK );
904 c.clearAll( );
905 CPPUNIT_ASSERT( getMembers( sid, gids[ 0 ], &c, &memberUids, &memberUidsLen ) == RES_OK );
906 CPPUNIT_ASSERT( memberUidsLen == 4 );
907 for( int i = 0; i < memberUidsLen; i++ ) CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], memberUids[ i ] ) == RES_OK );
908 freeUID( memberUids );
909
910 CPPUNIT_ASSERT( getMembers( sid, gids[ 0 ], &c, &memberUids, &memberUidsLen ) == RES_OK );
911 CPPUNIT_ASSERT( memberUidsLen == 0 );
912 freeUID( memberUids );
913
914 for( int i = 0; i < 4; i++ )
915 CPPUNIT_ASSERT( deleteAccount( sid, uids[ i ] ) == RES_OK );
916 CPPUNIT_ASSERT( deleteGroup( sid, gids[ 0 ] ) == RES_OK );
917
918 logoutUser( sid );
919 }
920
921 void getGroupsByUidTest( )
922 {
923 account_t ac[ 4 ];
924 const account_t* accounts;
925 const group_t* groups;
926 criteria_t c;
927 group_t grp[ 4 ];
928 groupid_t* gids;
929 groupid_t gid;
930 int accountsLen;
931 int gidsLen;
932 int groupsLen;
933 int uidsLen;
934 sessionid_t sid;
935 userid_t uids[ 4 ];
936 userid_t uid;
937 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
938
939 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
940 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
941
942
943 //???鴻?????≪?????潟???脂??/span>
944 //ac[0] .... 1?ゃ???違???若????????????蚊??/span>
945 //ac[1] .... 1?ゃ???違???若??????????蚊??/span>
946 //ac[2] .... 2?ゃ???違???若??????????蚊??/span>
947 for( int i = 0; i < 4; i++ ) fillAccount( i, &ac[ i ] );
948 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( insertAccount( sid, &ac[ i ], &uid ) == RES_OK );
949 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( getUid( ac[ i ].getUname( ), &uids[ i ] ) == RES_OK );
950
951 //?????若???違???若?????若?帥???ゃ?潟?泣?若??
952 for( int i = 0; i < 4; i++ ) fillGroup( i+20, &grp[ i ] );
953 for( int i = 0; i < 4; i++ ) insertGroup( sid, &grp[ i ], &gid );
954
955 c.clearAll( );
956 c.addOrderBy( new orderby( "gid", orderby::DESC ) );
957 //?脂?蚊?????違???若????id????緇?
958 CPPUNIT_ASSERT( dumpGids( sid, &c, &gids, &gidsLen ) == RES_OK );
959 userid_t* belongToGids = 0;
960 int belongToGidsLen = 0;
961
962 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uids[ 1 ], false ) == RES_OK );
963 CPPUNIT_ASSERT( insertMember( sid, gids[ 0 ], uids[ 2 ], false ) == RES_OK );
964 CPPUNIT_ASSERT( insertMember( sid, gids[ 1 ], uids[ 2 ], false ) == RES_OK );
965
966 //???鴻????紮?
967 c.clearAll( );
968 belongToGidsLen = 10;
969 CPPUNIT_ASSERT( getGroupsByUid( sid, uids[ 0 ], &c, &belongToGids, &belongToGidsLen ) == RES_OK );
970 CPPUNIT_ASSERT( belongToGidsLen == 0 ); // belong to no groups (default group is invisible)
971 freeGID( belongToGids );
972
973 belongToGidsLen = 10;
974 c.clearAll( );
975 c.addOrderBy( new orderby( "gid", orderby::ASC ) );
976 CPPUNIT_ASSERT( getGroupsByUid( sid, uids[ 1 ], &c, &belongToGids, &belongToGidsLen ) == RES_OK );
977 CPPUNIT_ASSERT( belongToGidsLen == 1 );
978 CPPUNIT_ASSERT( belongToGids[ 0 ] == gids[ 0 ] );
979 freeGID( belongToGids );
980
981 belongToGidsLen = 10;
982 c.clearAll( );
983 c.addOrderBy( new orderby( "gid", orderby::DESC ) );
984 CPPUNIT_ASSERT( getGroupsByUid( sid, uids[ 2 ], &c, &belongToGids, &belongToGidsLen ) == RES_OK );
985 CPPUNIT_ASSERT( belongToGidsLen == 2 );
986 CPPUNIT_ASSERT( belongToGids[ 0 ] == gids[ 0 ] );
987 CPPUNIT_ASSERT( belongToGids[ 1 ] == gids[ 1 ] );
988 freeGID( belongToGids );
989
990 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uids[ 1 ] ) == RES_OK );
991 CPPUNIT_ASSERT( deleteMember( sid, gids[ 0 ], uids[ 2 ] ) == RES_OK );
992 CPPUNIT_ASSERT( deleteMember( sid, gids[ 1 ], uids[ 2 ] ) == RES_OK );
993 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( deleteGroup( sid, gids[ i ] ) == RES_OK );
994 for( int i = 0; i < 4; i++ ) CPPUNIT_ASSERT( deleteAccount( sid, uids[ i ] ) == RES_OK );
995 freeGID( gids );
996
997 logoutUser( sid );
998 }
999
1000 void getSessionTest( )
1001 {
1002 sessionid_t sid;
1003 const session_t* sess;
1004 const account_t* ac;
1005 userid_t uid;
1006 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
1007
1008 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
1009 CPPUNIT_ASSERT( getUid( "testuser", &uid ) == RES_OK );
1010
1011 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &sid ) == RES_OK );
1012 CPPUNIT_ASSERT( getAccount( sid, uid, &ac ) == RES_OK );
1013 CPPUNIT_ASSERT( getSession( sid, &sess ) == RES_OK );
1014 CPPUNIT_ASSERT( sess[0].getSessionID( ) == sid );
1015 CPPUNIT_ASSERT( sess[0].getUID( ) == ac -> getUID( ) );
1016 logoutUser( sid );
1017
1018 CPPUNIT_ASSERT( getSession( sid, &sess ) != RES_OK );
1019
1020 freeSession( sess );
1021 freeAccount( ac );
1022 }
1023
1024
1025 #define MAXITEMS 5
1026 #define compareItem( x, y ) { \
1027 const item_t* a = x; \
1028 const item_t* b = y; \
1029 CPPUNIT_ASSERT( a -> getContributorUID() == b -> getContributorUID() ); \
1030 CPPUNIT_ASSERT( a -> getItemID() == b -> getItemID() ); \
1031 CPPUNIT_ASSERT( a -> getItemTypeID() == b -> getItemTypeID() ); \
1032 CPPUNIT_ASSERT( strcmp( a -> getTitle(), b -> getTitle() ) == 0 ); \
1033 CPPUNIT_ASSERT( strcmp( a -> getTitle(), b -> getTitle() ) == 0 ); \
1034 CPPUNIT_ASSERT( strcmp( a -> getTitle(), b -> getTitle() ) == 0 ); \
1035 CPPUNIT_ASSERT( strcmp( a -> getKeywords(), b -> getKeywords() ) == 0 ); \
1036 CPPUNIT_ASSERT( strcmp( a -> getDescription(), b -> getDescription() ) == 0 ); \
1037 CPPUNIT_ASSERT( strcmp( a -> getDOI(), b -> getDOI() ) == 0 ); \
1038 CPPUNIT_ASSERT( a -> getPublicationYear() == b -> getPublicationYear() ); \
1039 CPPUNIT_ASSERT( a -> getPublicationMonth() == b -> getPublicationMonth() ); \
1040 CPPUNIT_ASSERT( a -> getPublicationMday() == b -> getPublicationMday() ); \
1041 CPPUNIT_ASSERT( strcmp( a -> getLang(), b -> getLang() ) == 0 ); \
1042 }
1043
1044 void itemTest( ){
1045 certify_t state;
1046 itemid_t iids_test[MAXITEMS]; //itemid
1047 item_t items_test[MAXITEMS];
1048 itemid_t iids_test256[MAXITEMS]; //itemid
1049 item_t items_test256[MAXITEMS];
1050 const item_t* pitems;
1051 int pitemsLen;
1052 criteria_t c;
1053 const itemid_t* piids;
1054 int piidsLen;
1055 itemid_t itemid;
1056 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
1057
1058 sessionid_t mode_sid; // sid of moderator
1059 userid_t mode_uid;
1060
1061 sessionid_t testuser_sid;
1062
1063 sessionid_t test_sid;
1064 userid_t test_uid;
1065 account_t test_user;
1066
1067 sessionid_t test256_sid;
1068 userid_t test256_uid;
1069 account_t test256_user;
1070
1071 sessionid_t gadmin_sid;
1072 userid_t gadmin_uid;
1073 account_t gadmin_user;
1074
1075 indexid_t pub_xid;
1076
1077 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
1078
1079 {
1080 item_t i;
1081 CPPUNIT_ASSERT( strcmp( i.getLang(), "eng" ) == 0 );
1082 i.setLang( "jpn" );
1083 CPPUNIT_ASSERT( strcmp( i.getLang(), "jpn" ) == 0 );
1084 i.setLang( "japanese" );
1085 CPPUNIT_ASSERT( strcmp( i.getLang(), "jap" ) == 0 );
1086 i.setLang( "us" );
1087 CPPUNIT_ASSERT( strcmp( i.getLang(), "us" ) == 0 );
1088 }
1089
1090 const itemtype_t* ptype;
1091 int len;
1092 CPPUNIT_ASSERT( getItemTypes( &ptype, &len ) == RES_OK );
1093 CPPUNIT_ASSERT( strcmp( ptype[0].getName(), "xoonips_index" ) == 0 );
1094 CPPUNIT_ASSERT( strcmp( ptype[1].getDisplayName(), "Binder" ) == 0 );
1095 freeItemType( ptype );
1096
1097 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &testuser_sid ) == RES_OK );
1098 CPPUNIT_ASSERT( loginUser( "moderator", md5str( md5buf, ( unsigned char* )"mode00", 6 ), &mode_sid ) == RES_OK );
1099 CPPUNIT_ASSERT( getUid( "moderator", &mode_uid ) == RES_OK );
1100
1101 fillAccount( __LINE__, &test_user );
1102 CPPUNIT_ASSERT( insertAccount( testuser_sid, &test_user, &test_uid ) == RES_OK );
1103 CPPUNIT_ASSERT( activate( testuser_sid, test_uid, true ) == RES_OK );
1104 CPPUNIT_ASSERT( loginUser( test_user.getUname(), test_user.getPass(), &test_sid ) == RES_OK );
1105
1106 fillAccount( __LINE__, &test256_user );
1107 CPPUNIT_ASSERT( insertAccount( testuser_sid, &test256_user, &test256_uid ) == RES_OK );
1108 CPPUNIT_ASSERT( activate( testuser_sid, test256_uid, true ) == RES_OK );
1109 CPPUNIT_ASSERT( loginUser( test256_user.getUname(), test256_user.getPass(), &test256_sid ) == RES_OK );
1110
1111 fillAccount( __LINE__, &gadmin_user );
1112 CPPUNIT_ASSERT( insertAccount( testuser_sid, &gadmin_user, &gadmin_uid ) == RES_OK );
1113 CPPUNIT_ASSERT( activate( testuser_sid, gadmin_uid, true ) == RES_OK );
1114 CPPUNIT_ASSERT( loginUser( gadmin_user.getUname(), gadmin_user.getPass(), &gadmin_sid ) == RES_OK );
1115
1116 //insert public index
1117 {
1118 index_t idx;
1119 idx.setTitle( "public index" );
1120 idx.setParentIndexID( item_t::IID_PUBLIC );
1121 idx.setItemTypeID( item_t::ITID_INDEX );
1122 idx.setOwnerUID( 0 );
1123 idx.setOwnerGID( 0 );
1124 idx.setOpenLevel( index_t::OL_PUBLIC );
1125 idx.setSortNumber( 0 );
1126 insertIndex( mode_sid, &idx, &pub_xid );
1127 CPPUNIT_ASSERT( insertIndex( mode_sid, &idx, &pub_xid ) == RES_OK );
1128 }
1129
1130 //insert group
1131 group_t grp;
1132 groupid_t test_gid;
1133 groupid_t test256_gid;
1134 fillGroup( __LINE__, &grp );
1135 CPPUNIT_ASSERT( insertGroup( test_sid, &grp, &test_gid ) == RES_OK );
1136 CPPUNIT_ASSERT( insertMember( test_sid, test_gid, test_uid, false ) == RES_OK );
1137 CPPUNIT_ASSERT( insertMember( test256_sid, test_gid, test256_uid, false ) == RES_OK );
1138 CPPUNIT_ASSERT( insertMember( gadmin_sid, test_gid, gadmin_uid, true ) == RES_OK );
1139 fillGroup( __LINE__, &grp );
1140 CPPUNIT_ASSERT( insertGroup( test256_sid, &grp, &test256_gid ) == RES_OK );
1141 CPPUNIT_ASSERT( insertMember( test256_sid, test256_gid, test256_uid, false ) == RES_OK );
1142
1143 //insert test by test
1144 for( int i = 0 ; i < MAXITEMS ; i++ ){
1145 fillItem( __LINE__+i, &items_test[i] );
1146 items_test[i].setContributorUID( test_uid );
1147 items_test[i].setItemTypeID( 100 );
1148 CPPUNIT_ASSERT( insertItem( test_sid, &items_test[i], &iids_test[i] ) == RES_OK );
1149 items_test[i].setItemID( iids_test[i] );
1150 }
1151 //insert test by test256
1152 for( int i = 0 ; i < MAXITEMS ; i++ ){
1153 fillItem( __LINE__+i, &items_test256[i] );
1154 items_test256[i].setContributorUID( test256_uid );
1155 items_test256[i].setItemTypeID( 100 );
1156 CPPUNIT_ASSERT( insertItem( test256_sid, &items_test256[i], &iids_test256[i] ) == RES_OK );
1157 items_test256[i].setItemID( iids_test256[i] );
1158 }
1159 c.clearAll();
1160 CPPUNIT_ASSERT( dumpItemID( test256_sid, &c, &piids, &piidsLen ) == RES_OK );
1161 CPPUNIT_ASSERT( piidsLen == MAXITEMS );
1162 freeItemID( piids );
1163
1164 c.clearAll();
1165 CPPUNIT_ASSERT( dumpItemID( test_sid, &c, &piids, &piidsLen ) == RES_OK );
1166 CPPUNIT_ASSERT( piidsLen == MAXITEMS );
1167 freeItemID( piids );
1168
1169 CPPUNIT_ASSERT( dumpItemID( mode_sid, &c, &piids, &piidsLen ) == RES_OK );
1170 CPPUNIT_ASSERT( piidsLen == MAXITEMS * 2 );
1171 freeItemID( piids );
1172
1173 //can't retriveve items if not own items.
1174 CPPUNIT_ASSERT( getItem( test256_sid, iids_test[0], &pitems ) == RES_NO_SUCH_ITEM );
1175
1176 CPPUNIT_ASSERT( getItem( test_sid, iids_test[0], &pitems ) == RES_OK );
1177 compareItem( &pitems[0], &items_test[0] );
1178 freeItem( pitems );
1179
1180 CPPUNIT_ASSERT( getItem( mode_sid, iids_test[0], &pitems ) == RES_OK );
1181 compareItem( &pitems[0], &items_test[0] );
1182 freeItem( pitems );
1183
1184 c.clearAll( );
1185 if( DBTYPE == DBTYPE_MYSQL ){
1186 c.addOrderBy( new orderby( "item_id", orderby::ASC ) );
1187 }else if( DBTYPE == DBTYPE_SQLITE ){
1188 c.addOrderBy( new orderby( DBPREFIX "_xnpaccount_item_basic.item_id", orderby::ASC ) );
1189 }
1190 CPPUNIT_ASSERT( getItems( test_sid, iids_test, MAXITEMS, &c, &pitems, &pitemsLen ) == RES_OK );
1191 CPPUNIT_ASSERT( pitemsLen == MAXITEMS );
1192 for( int i = 0 ; i < MAXITEMS ; i++ ){
1193 compareItem( &pitems[i], &items_test[i] );
1194 }
1195 freeItem( pitems );
1196
1197 CPPUNIT_ASSERT( getItems( test256_sid, iids_test, MAXITEMS, &c, &pitems, &pitemsLen ) == RES_OK );
1198 CPPUNIT_ASSERT( pitemsLen == 0 );
1199 freeItem( pitems );
1200
1201 CPPUNIT_ASSERT( getItems( mode_sid, iids_test, MAXITEMS, &c, &pitems, &pitemsLen ) == RES_OK );
1202 CPPUNIT_ASSERT( pitemsLen == MAXITEMS );
1203 for( int i = 0 ; i < MAXITEMS ; i++ ){
1204 compareItem( &pitems[i], &items_test[i] );
1205 }
1206 freeItem( pitems );
1207
1208 //register item to index
1209 CPPUNIT_ASSERT( setConfigValue( "certify_item", "auto" ) == RES_OK ); //change to certify automatic mode
1210 CPPUNIT_ASSERT( registerItem( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1] ) == RES_OK );
1211 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], &state ) == RES_OK );
1212 CPPUNIT_ASSERT( state == index::CERTIFIED );
1213 CPPUNIT_ASSERT( unregisterItem( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1] ) == RES_OK );
1214 //change to certify manually mode
1215 CPPUNIT_ASSERT( setConfigValue( "certify_item", "on" ) == RES_OK );
1216 //can't register own item to own private index because item has been already registered when inserted.
1217 CPPUNIT_ASSERT( registerItem( test_sid, getPrivateIndexByUID( test_sid, test_uid ), iids_test[0] ) != RES_OK );
1218 //can't register own item to other private index (because forbidden operation)
1219 CPPUNIT_ASSERT( registerItem( test_sid, getPrivateIndexByUID( test_sid, test256_uid ), iids_test[0] ) == RES_NO_WRITE_ACCESS_RIGHT );
1220 //register own item to group index I'm belong to.
1221 CPPUNIT_ASSERT( registerItem( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0] ) == RES_OK );
1222 CPPUNIT_ASSERT( registerItem( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1] ) == RES_OK );
1223 CPPUNIT_ASSERT( registerItem( test256_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test256[0] ) == RES_OK );
1224 CPPUNIT_ASSERT( registerItem( test_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0] ) == RES_NO_WRITE_ACCESS_RIGHT );
1225 CPPUNIT_ASSERT( registerItem( test256_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0] ) == RES_OK );
1226 CPPUNIT_ASSERT( registerItem( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1] ) == RES_OK );
1227 //register item to public index
1228 CPPUNIT_ASSERT( registerItem( mode_sid, pub_xid, iids_test[1] ) == RES_OK );
1229
1230 //check certify state
1231 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0], &state ) == RES_OK );
1232 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1233 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], &state ) == RES_OK );
1234 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1235 CPPUNIT_ASSERT( getCertifyState( test256_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0], &state ) == RES_OK );
1236 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1237 CPPUNIT_ASSERT( getCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1], &state ) == RES_OK );
1238 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1239 CPPUNIT_ASSERT( getCertifyState( mode_sid, pub_xid, iids_test[1], &state ) == RES_OK );
1240 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1241
1242 //
1243 c.clearAll( );
1244 // ???????≪?ゃ?????с?????逸??粋????倶???????????画Η????/span>
1245 CPPUNIT_ASSERT( getItemIDByIndexID( test_sid, getGroupIndexByGID( test_sid, test_gid ), &c, &piids, &piidsLen ) == RES_OK );
1246 CPPUNIT_ASSERT( piidsLen == 2 );
1247 freeItemID( piids );
1248
1249 //getUncertifiedLink, getPrivateItemID
1250 {
1251 const itemid_t* iids;
1252 const indexid_t* xids;
1253 int iidsLen;
1254 CPPUNIT_ASSERT( getUncertifiedLink( test_sid, &xids, &iids, &iidsLen ) == RES_OK );
1255 CPPUNIT_ASSERT( iidsLen == 0 );
1256 freeItemID( iids );
1257 CPPUNIT_ASSERT( getUncertifiedLink( gadmin_sid, &xids, &iids, &iidsLen ) == RES_OK );
1258 CPPUNIT_ASSERT( iidsLen == 3 );
1259 freeItemID( iids );
1260 CPPUNIT_ASSERT( getUncertifiedLink( mode_sid, &xids, &iids, &iidsLen ) == RES_OK );
1261 CPPUNIT_ASSERT( iidsLen == 6 );
1262 freeItemID( iids );
1263
1264 CPPUNIT_ASSERT( getPrivateItemID( test_sid, test_uid, &iids, &iidsLen ) == RES_OK );
1265 CPPUNIT_ASSERT( iidsLen == MAXITEMS );
1266 freeItemID( iids );
1267 CPPUNIT_ASSERT( getPrivateItemID( test256_sid, test256_uid, &iids, &iidsLen ) == RES_OK );
1268 CPPUNIT_ASSERT( iidsLen == MAXITEMS );
1269 freeItemID( iids );
1270 }
1271 //certify item
1272 CPPUNIT_ASSERT( setCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0], index::CERTIFIED ) == RES_NO_WRITE_ACCESS_RIGHT );
1273 CPPUNIT_ASSERT( setCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], index::CERTIFIED ) == RES_NO_WRITE_ACCESS_RIGHT );
1274 CPPUNIT_ASSERT( setCertifyState( test256_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0], index::CERTIFIED ) == RES_NO_WRITE_ACCESS_RIGHT );
1275 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0], index::CERTIFIED ) == RES_OK );
1276 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], index::CERTIFIED ) == RES_OK );
1277 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0], index::CERTIFIED ) == RES_OK );
1278 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1], index::CERTIFIED ) == RES_OK );
1279 CPPUNIT_ASSERT( setCertifyState( mode_sid, pub_xid, iids_test[1], index::CERTIFIED ) == RES_OK );
1280
1281 //getUncertifiedLink, getPrivateItemID
1282 {
1283 const itemid_t* iids;
1284 const indexid_t* xids;
1285 int iidsLen;
1286 CPPUNIT_ASSERT( getUncertifiedLink( gadmin_sid, &xids, &iids, &iidsLen ) == RES_OK );
1287 CPPUNIT_ASSERT( iidsLen == 1 );
1288 CPPUNIT_ASSERT( iids[0] == iids_test256[0] );
1289 freeItemID( iids );
1290
1291 CPPUNIT_ASSERT( getUncertifiedLink( mode_sid, &xids, &iids, &iidsLen ) == RES_OK );
1292 CPPUNIT_ASSERT( iidsLen == 1 );
1293 CPPUNIT_ASSERT( iids[0] == iids_test256[0] );
1294 freeItemID( iids );
1295
1296 CPPUNIT_ASSERT( getPrivateItemID( test_sid, test_uid, &iids, &iidsLen ) == RES_OK );
1297 CPPUNIT_ASSERT( iidsLen == MAXITEMS - 2 );
1298 freeItemID( iids );
1299 CPPUNIT_ASSERT( getPrivateItemID( test256_sid, test256_uid, &iids, &iidsLen ) == RES_OK );
1300 CPPUNIT_ASSERT( iidsLen == MAXITEMS );
1301 freeItemID( iids );
1302 }
1303
1304 //
1305 c.clearAll( );
1306 CPPUNIT_ASSERT( getItemIDByIndexID( test_sid, getGroupIndexByGID( test_sid, test_gid ), &c, &piids, &piidsLen ) == RES_OK );
1307 CPPUNIT_ASSERT( piidsLen == 2 );
1308 freeItemID( piids );
1309
1310 //check certify state
1311 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0], &state ) == RES_OK );
1312 CPPUNIT_ASSERT( state == index::CERTIFIED );
1313 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], &state ) == RES_OK );
1314 CPPUNIT_ASSERT( state == index::CERTIFIED );
1315 CPPUNIT_ASSERT( getCertifyState( test256_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0], &state ) == RES_OK );
1316 CPPUNIT_ASSERT( state == index::CERTIFIED );
1317 CPPUNIT_ASSERT( getCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1], &state ) == RES_OK );
1318 CPPUNIT_ASSERT( state == index::CERTIFIED );
1319 CPPUNIT_ASSERT( getCertifyState( mode_sid, pub_xid, iids_test[1], &state ) == RES_OK );
1320 CPPUNIT_ASSERT( state == index::CERTIFIED );
1321
1322 //try to retrieve public index by guest
1323 // if public_item_target_user is 'all'
1324 CPPUNIT_ASSERT( setConfigValue( XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_KEY, XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_ALL ) == RES_OK );
1325 CPPUNIT_ASSERT( isValidSessionID( session_t::SID_GUEST ) );
1326 c.clearAll( );
1327 CPPUNIT_ASSERT( getItemIDByIndexID( session_t::SID_GUEST, pub_xid, &c, &piids, &piidsLen ) == RES_OK );
1328 CPPUNIT_ASSERT( piids[0] == iids_test[1] );
1329 CPPUNIT_ASSERT( piidsLen == 1 );
1330 CPPUNIT_ASSERT( getItem( session_t::SID_GUEST, piids[0], &pitems ) == RES_OK );
1331 freeItem( pitems );
1332 freeItemID( piids );
1333 // if public_item_target_user is 'platform'
1334 CPPUNIT_ASSERT( setConfigValue( XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_KEY, XNP_CONFIG_PUBLIC_ITEM_TARGET_USER_PLATFORM ) == RES_OK );
1335 CPPUNIT_ASSERT( !isValidSessionID( session_t::SID_GUEST ) );
1336 c.clearAll( );
1337 CPPUNIT_ASSERT( getItemIDByIndexID( session_t::SID_GUEST, pub_xid, &c, &piids, &piidsLen ) != RES_OK );
1338
1339 //reset certify state
1340 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0], index::NOT_CERTIFIED ) == RES_OK );
1341 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], index::NOT_CERTIFIED ) == RES_OK );
1342 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0], index::NOT_CERTIFIED ) == RES_OK );
1343 CPPUNIT_ASSERT( setCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1], index::NOT_CERTIFIED ) == RES_OK );
1344
1345 //update test by test
1346 fillItem( __LINE__, &items_test[0] );
1347 items_test[0].setItemID( iids_test[0] );
1348 items_test[0].setContributorUID( test_uid );
1349 CPPUNIT_ASSERT( updateItem( test256_sid, &items_test[0] ) == RES_NO_WRITE_ACCESS_RIGHT );
1350 //change to certify automatic mode
1351 CPPUNIT_ASSERT( setConfigValue( "certify_item", "auto" ) == RES_OK );
1352 CPPUNIT_ASSERT( updateItem( test_sid, &items_test[0] ) == RES_OK );
1353 CPPUNIT_ASSERT( updateItem( test_sid, &items_test[1] ) == RES_OK );
1354 //check certify state
1355 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0], &state ) == RES_OK );
1356 CPPUNIT_ASSERT( state == index::CERTIFIED );
1357 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], &state ) == RES_OK );
1358 CPPUNIT_ASSERT( state == index::CERTIFIED );
1359 CPPUNIT_ASSERT( getCertifyState( test256_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0], &state ) == RES_OK );
1360 CPPUNIT_ASSERT( state == index::CERTIFIED );
1361 CPPUNIT_ASSERT( getCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1], &state ) == RES_OK );
1362 CPPUNIT_ASSERT( state == index::CERTIFIED );
1363 //change to certify manually mode
1364 CPPUNIT_ASSERT( setConfigValue( "certify_item", "on" ) == RES_OK );
1365 CPPUNIT_ASSERT( updateItem( test_sid, &items_test[0] ) == RES_OK );
1366 CPPUNIT_ASSERT( updateItem( test_sid, &items_test[1] ) == RES_OK );
1367 //check certify state
1368 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0], &state ) == RES_OK );
1369 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1370 CPPUNIT_ASSERT( getCertifyState( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1], &state ) == RES_OK );
1371 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1372 CPPUNIT_ASSERT( getCertifyState( test256_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0], &state ) == RES_OK );
1373 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1374 CPPUNIT_ASSERT( getCertifyState( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1], &state ) == RES_OK );
1375 CPPUNIT_ASSERT( state == index::CERTIFY_REQUIRED );
1376
1377 // CPPUNIT_ASSERT( false );
1378
1379 //unregister item to index
1380 // CPPUNIT_ASSERT( unregisterItem( test_sid, getPrivateIndexByUID( test_sid, test_uid ), iids_test[0] ) == RES_OK );
1381 CPPUNIT_ASSERT( unregisterItem( test_sid, getPrivateIndexByUID( test256_sid, test256_uid ), iids_test[0] ) == RES_NO_WRITE_ACCESS_RIGHT );
1382 CPPUNIT_ASSERT( unregisterItem( test_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[0] ) == RES_OK );
1383 CPPUNIT_ASSERT( unregisterItem( test256_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test256[0] ) == RES_OK );
1384 CPPUNIT_ASSERT( unregisterItem( test_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0] ) == RES_NO_WRITE_ACCESS_RIGHT );
1385 CPPUNIT_ASSERT( unregisterItem( test256_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[0] ) == RES_OK );
1386 CPPUNIT_ASSERT( unregisterItem( gadmin_sid, getGroupIndexByGID( test_sid, test_gid ), iids_test[1] ) == RES_OK );
1387 CPPUNIT_ASSERT( unregisterItem( gadmin_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1] ) == RES_NO_WRITE_ACCESS_RIGHT );
1388 CPPUNIT_ASSERT( unregisterItem( mode_sid, getGroupIndexByGID( test_sid, test256_gid ), iids_test[1] ) == RES_OK );
1389 return;//
1390 //delete test by test
1391 for( int i = 0 ; i < MAXITEMS ; i++ ){
1392 CPPUNIT_ASSERT( deleteItem( test256_sid, iids_test[i] ) == RES_NO_WRITE_ACCESS_RIGHT );
1393 CPPUNIT_ASSERT( deleteItem( test_sid, iids_test[i] ) == RES_OK );
1394 }
1395 CPPUNIT_ASSERT( getItems( test_sid, iids_test, MAXITEMS, &c, &pitems, &pitemsLen ) == RES_OK );
1396 CPPUNIT_ASSERT( pitemsLen == 0 );
1397 freeItem( pitems );
1398 //delete test by moderator
1399 for( int i = 0 ; i < MAXITEMS ; i++ ){
1400 fillItem( __LINE__+i, &items_test[i] );
1401 items_test[i].setContributorUID( test_uid );
1402 CPPUNIT_ASSERT( insertItem( test_sid, &items_test[i], &iids_test[i] ) == RES_OK );
1403 items_test[i].setItemID( iids_test[i] );
1404 }
1405 for( int i = 0 ; i < MAXITEMS ; i++ ){
1406 CPPUNIT_ASSERT( deleteItem( mode_sid, iids_test[i] ) == RES_OK );
1407 }
1408 CPPUNIT_ASSERT( getItems( test_sid, iids_test, MAXITEMS, &c, &pitems, &pitemsLen ) == RES_OK );
1409 CPPUNIT_ASSERT( pitemsLen == 0 );
1410 freeItem( pitems );
1411
1412 //delete group
1413 CPPUNIT_ASSERT( deleteGroup( test_sid, test_gid ) == RES_OK );
1414 CPPUNIT_ASSERT( deleteGroup( test_sid, test256_gid ) == RES_OK );
1415
1416 //delete index
1417 CPPUNIT_ASSERT( deleteIndex( mode_sid, pub_xid ) == RES_OK );
1418
1419 //logout test users
1420 logoutUser( test_sid );
1421 logoutUser( test256_sid );
1422 logoutUser( gadmin_sid );
1423
1424 //delete account
1425 CPPUNIT_ASSERT( deleteAccount( testuser_sid, test_uid ) == RES_OK );
1426 CPPUNIT_ASSERT( deleteAccount( testuser_sid, test256_uid ) == RES_OK );
1427 CPPUNIT_ASSERT( deleteAccount( testuser_sid, gadmin_uid ) == RES_OK );
1428
1429 logoutUser( testuser_sid );
1430 logoutUser( mode_sid );
1431
1432 CPPUNIT_ASSERT( insertItem( testuser_sid, &items_test[0], &itemid ) == RES_NO_SUCH_SESSION );
1433 CPPUNIT_ASSERT( updateItem( testuser_sid, &items_test[0] ) == RES_NO_SUCH_SESSION );
1434 CPPUNIT_ASSERT( deleteItem( testuser_sid, iids_test[0] ) == RES_NO_SUCH_SESSION );
1435 CPPUNIT_ASSERT( dumpItemID( testuser_sid, &c, &piids, &piidsLen ) == RES_NO_SUCH_SESSION );
1436
1437 }
1438
1439 void binderTest(){
1440 itemid_t iids_insert[MAXITEMS]; //itemid
1441 item_t items_insert[MAXITEMS];
1442 itemid_t bids_insert[MAXITEMS]; //binder itemid
1443 item_t binders_insert[MAXITEMS];//binder item
1444 const item_t* pitems;
1445 int pitemsLen;
1446 criteria_t c;
1447 userid_t uid;
1448 const itemid_t* piids;
1449 int piidsLen;
1450 itemid_t itemid;
1451 const indexid_t* pxids;
1452 int pxidsLen;
1453 indexid_t private_xid;
1454
1455 sessionid_t mode_sid; // sid of moderator
1456 sessionid_t testuser_sid;
1457
1458 sessionid_t test_sid;
1459 userid_t test_uid;
1460 account_t test_user;
1461
1462 sessionid_t test256_sid;
1463 userid_t test256_uid;
1464 account_t test256_user;
1465
1466 sessionid_t gadmin_sid;
1467 userid_t gadmin_uid;
1468 account_t gadmin_user;
1469 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
1470
1471 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
1472 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &testuser_sid ) == RES_OK );
1473 CPPUNIT_ASSERT( loginUser( "moderator", md5str( md5buf, ( unsigned char* )"mode00", 6 ), &mode_sid ) == RES_OK );
1474
1475 fillAccount( __LINE__, &test_user );
1476 CPPUNIT_ASSERT( insertAccount( testuser_sid, &test_user, &test_uid ) == RES_OK );
1477 CPPUNIT_ASSERT( activate( testuser_sid, test_uid, true ) == RES_OK );
1478 CPPUNIT_ASSERT( loginUser( test_user.getUname(), test_user.getPass(), &test_sid ) == RES_OK );
1479
1480 fillAccount( __LINE__, &test256_user );
1481 CPPUNIT_ASSERT( insertAccount( testuser_sid, &test256_user, &test256_uid ) == RES_OK );
1482 CPPUNIT_ASSERT( activate( testuser_sid, test256_uid, true ) == RES_OK );
1483 CPPUNIT_ASSERT( loginUser( test256_user.getUname(), test256_user.getPass(), &test256_sid ) == RES_OK );
1484
1485 fillAccount( __LINE__, &gadmin_user );
1486 CPPUNIT_ASSERT( insertAccount( testuser_sid, &gadmin_user, &gadmin_uid ) == RES_OK );
1487 CPPUNIT_ASSERT( activate( testuser_sid, gadmin_uid, true ) == RES_OK );
1488 CPPUNIT_ASSERT( loginUser( gadmin_user.getUname(), gadmin_user.getPass(), &gadmin_sid ) == RES_OK );
1489
1490 //insert group
1491 group_t grp;
1492 groupid_t test_gid;
1493 groupid_t test256_gid;
1494 fillGroup( __LINE__, &grp );
1495 CPPUNIT_ASSERT( insertGroup( test_sid, &grp, &test_gid ) == RES_OK );
1496 CPPUNIT_ASSERT( insertMember( test_sid, test_gid, test_uid, false ) == RES_OK );
1497 CPPUNIT_ASSERT( insertMember( test256_sid, test_gid, test256_uid, false ) == RES_OK );
1498 CPPUNIT_ASSERT( insertMember( gadmin_sid, test_gid, gadmin_uid, true ) == RES_OK );
1499 fillGroup( __LINE__, &grp );
1500 CPPUNIT_ASSERT( insertGroup( test256_sid, &grp, &test256_gid ) == RES_OK );
1501 CPPUNIT_ASSERT( insertMember( test256_sid, test256_gid, test256_uid, false ) == RES_OK );
1502
1503 //insert test by test
1504 for( int i = 0 ; i < MAXITEMS ; i++ ){
1505 //insert binders
1506 fillItem( __LINE__+i, &binders_insert[i] );
1507 binders_insert[i].setContributorUID( test_uid );
1508 binders_insert[i].setItemTypeID( item::ITID_BINDER );
1509 CPPUNIT_ASSERT( insertItem( test_sid, &binders_insert[i], &bids_insert[i] ) == RES_OK );
1510 binders_insert[i].setItemID( bids_insert[i] );
1511 //insert items
1512 fillItem( __LINE__+i, &items_insert[i] );
1513 items_insert[i].setContributorUID( test_uid );
1514 items_insert[i].setItemTypeID( 100 );
1515 CPPUNIT_ASSERT( insertItem( test_sid, &items_insert[i], &iids_insert[i] ) == RES_OK );
1516 items_insert[i].setItemID( iids_insert[i] );
1517 }
1518
1519 //update test by test
1520 for( int i = 0 ; i < MAXITEMS ; i++ ){
1521 fillItem( __LINE__ + i, &binders_insert[i] );
1522 binders_insert[i].setItemID( bids_insert[i] );
1523 binders_insert[i].setContributorUID( test_uid );
1524 binders_insert[i].setItemTypeID( item::IID_BINDERS );
1525 CPPUNIT_ASSERT( updateItem( test_sid, &binders_insert[i] ) == RES_OK );
1526 }
1527
1528 //compare items
1529 c.clearAll( );
1530 if( DBTYPE == DBTYPE_MYSQL ){
1531 c.addOrderBy( new orderby( "item_id", orderby::ASC ) );
1532 }else if( DBTYPE == DBTYPE_SQLITE ){
1533 c.addOrderBy( new orderby( DBPREFIX "_xnpaccount_item_basic.item_id", orderby::ASC ) );
1534 }
1535 CPPUNIT_ASSERT( getItems( test_sid, piids, piidsLen, &c, &pitems, &pitemsLen ) == RES_OK );
1536 CPPUNIT_ASSERT( pitemsLen == MAXITEMS );
1537 for( int i = 0 ; i < MAXITEMS ; i++ ){
1538 compareItem( &pitems[i], &binders_insert[i] );
1539 }
1540 freeItem( pitems );
1541 freeItemID( piids );
1542
1543 //retister item to binder
1544 CPPUNIT_ASSERT( registerBinderItem( test_sid, bids_insert[1], iids_insert[0] ) == RES_OK );
1545 CPPUNIT_ASSERT( registerBinderItem( test_sid, bids_insert[2], iids_insert[0] ) == RES_OK );
1546 CPPUNIT_ASSERT( registerBinderItem( test_sid, bids_insert[2], iids_insert[1] ) == RES_OK );
1547 CPPUNIT_ASSERT( registerBinderItem( test256_sid, bids_insert[0], iids_insert[0] ) == RES_NO_WRITE_ACCESS_RIGHT );
1548
1549 CPPUNIT_ASSERT( getItemIDByBinderID( test_sid, bids_insert[0], &c, &piids, &piidsLen ) == RES_OK );
1550 CPPUNIT_ASSERT( piidsLen == 0 );
1551 freeItemID( piids );
1552 CPPUNIT_ASSERT( getItemIDByBinderID( test_sid, bids_insert[1], &c, &piids, &piidsLen ) == RES_OK );
1553 CPPUNIT_ASSERT( piidsLen == 1 );
1554 CPPUNIT_ASSERT( piids[0] == iids_insert[0] );
1555 freeItemID( piids );
1556 CPPUNIT_ASSERT( getItemIDByBinderID( test_sid, bids_insert[2], &c, &piids, &piidsLen ) == RES_OK );
1557 CPPUNIT_ASSERT( piidsLen == 2 );
1558 CPPUNIT_ASSERT( piids[0] == iids_insert[0] );
1559 CPPUNIT_ASSERT( piids[1] == iids_insert[1] );
1560 freeItemID( piids );
1561
1562 //delete test by test
1563 for( int i = 0 ; i < MAXITEMS ; i++ ){
1564 CPPUNIT_ASSERT( deleteItem( test_sid, bids_insert[i] ) == RES_OK );
1565 }
1566 //count items which is belog to binder index keyword
1567 CPPUNIT_ASSERT( getItemIDByBinderID( test_sid, bids_insert[0], &c, &piids, &piidsLen ) == RES_OK );
1568 CPPUNIT_ASSERT( piidsLen == 0 );
1569 freeItemID( piids );
1570 CPPUNIT_ASSERT( getItemIDByBinderID( test_sid, bids_insert[1], &c, &piids, &piidsLen ) == RES_OK );
1571 CPPUNIT_ASSERT( piidsLen == 1 );
1572 freeItemID( piids );
1573 CPPUNIT_ASSERT( getItemIDByBinderID( test_sid, bids_insert[2], &c, &piids, &piidsLen ) == RES_OK );
1574 CPPUNIT_ASSERT( piidsLen == 2 );
1575 freeItemID( piids );
1576
1577 //delete group
1578 CPPUNIT_ASSERT( deleteGroup( test_sid, test_gid ) == RES_OK );
1579 CPPUNIT_ASSERT( deleteGroup( test_sid, test256_gid ) == RES_OK );
1580
1581 //logout test users
1582 logoutUser( test_sid );
1583 logoutUser( test256_sid );
1584 logoutUser( gadmin_sid );
1585
1586 //delete account
1587 CPPUNIT_ASSERT( deleteAccount( testuser_sid, test_uid ) == RES_OK );
1588 CPPUNIT_ASSERT( deleteAccount( testuser_sid, test256_uid ) == RES_OK );
1589 CPPUNIT_ASSERT( deleteAccount( testuser_sid, gadmin_uid ) == RES_OK );
1590
1591 logoutUser( testuser_sid );
1592 logoutUser( mode_sid );
1593
1594 CPPUNIT_ASSERT( getItemIDByIndexID( test_sid, item::IID_BINDERS, &c, &piids, &piidsLen ) == RES_NO_SUCH_SESSION );
1595 }
1596
1597 void isAdminTest(){
1598 CPPUNIT_ASSERT( !isAdmin( 0 ) );
1599 CPPUNIT_ASSERT( isAdmin( 1 ) );
1600 CPPUNIT_ASSERT( !isAdmin( 2 ) );
1601 }
1602
1603 void changelogTest(){
1604 itemid_t iids_test[MAXITEMS]; //itemid
1605 item_t items_test[MAXITEMS];
1606
1607 sessionid_t mode_sid; // sid of moderator
1608 sessionid_t testuser_sid;
1609
1610 sessionid_t test_sid;
1611 userid_t test_uid;
1612 account_t test_user;
1613
1614 sessionid_t test256_sid;
1615 userid_t test256_uid;
1616 account_t test256_user;
1617
1618 const changelog_t* logs;
1619 int logsLen;
1620 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
1621
1622 initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK;
1623 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &testuser_sid ) == RES_OK );
1624 CPPUNIT_ASSERT( loginUser( "moderator", md5str( md5buf, ( unsigned char* )"mode00", 6 ), &mode_sid ) == RES_OK );
1625
1626 fillAccount( __LINE__, &test_user );
1627 CPPUNIT_ASSERT( insertAccount( testuser_sid, &test_user, &test_uid ) == RES_OK );
1628 CPPUNIT_ASSERT( activate( testuser_sid, test_uid, true ) == RES_OK );
1629 CPPUNIT_ASSERT( loginUser( test_user.getUname(), test_user.getPass(), &test_sid ) == RES_OK );
1630
1631 fillAccount( __LINE__, &test256_user );
1632 CPPUNIT_ASSERT( insertAccount( testuser_sid, &test256_user, &test256_uid ) == RES_OK );
1633 CPPUNIT_ASSERT( activate( testuser_sid, test256_uid, true ) == RES_OK );
1634 CPPUNIT_ASSERT( loginUser( test256_user.getUname(), test256_user.getPass(), &test256_sid ) == RES_OK );
1635
1636 //insert test by test
1637 for( int i = 0 ; i < MAXITEMS ; i++ ){
1638 fillItem( __LINE__+i, &items_test[i] );
1639 items_test[i].setContributorUID( test_uid );
1640 items_test[i].setItemTypeID( 100 );//TODO
1641 CPPUNIT_ASSERT( insertItem( test_sid, &items_test[i], &iids_test[i] ) == RES_OK );
1642 items_test[i].setItemID( iids_test[i] );
1643 }
1644
1645 CPPUNIT_ASSERT( insertChangeLog( test_sid, iids_test[1], "change log of test item 1-1" ) == RES_OK );
1646 CPPUNIT_ASSERT( insertChangeLog( test_sid, iids_test[2], "change log of test item 2-1" ) == RES_OK );
1647 CPPUNIT_ASSERT( insertChangeLog( test_sid, iids_test[2], "change log of test item 2-2" ) == RES_OK );
1648 CPPUNIT_ASSERT( insertChangeLog( test256_sid, iids_test[2], "change log of test item 2-3" ) == RES_NO_WRITE_ACCESS_RIGHT );
1649
1650 CPPUNIT_ASSERT( getChangeLogs( test_sid, iids_test[0], &logs, &logsLen ) == RES_OK );
1651 CPPUNIT_ASSERT( logsLen == 0 );
1652 freeChangeLog( logs );
1653 CPPUNIT_ASSERT( getChangeLogs( test_sid, iids_test[1], &logs, &logsLen ) == RES_OK );
1654 CPPUNIT_ASSERT( logsLen == 1 );
1655 CPPUNIT_ASSERT( strcmp( "change log of test item 1-1", logs[0].getLog() ) == 0 );
1656 freeChangeLog( logs );
1657 CPPUNIT_ASSERT( getChangeLogs( test_sid, iids_test[2], &logs, &logsLen ) == RES_OK );
1658 CPPUNIT_ASSERT( logsLen == 2 );
1659 CPPUNIT_ASSERT( strcmp( "change log of test item 2-2", logs[0].getLog() ) == 0 ); //check the order
1660 CPPUNIT_ASSERT( strcmp( "change log of test item 2-1", logs[1].getLog() ) == 0 );
1661 freeChangeLog( logs );
1662 CPPUNIT_ASSERT( getChangeLogs( test256_sid, iids_test[2], &logs, &logsLen ) == RES_NO_READ_ACCESS_RIGHT );
1663
1664 for( int i = 0 ; i < MAXITEMS ; i++ ){
1665 CPPUNIT_ASSERT( deleteItem( mode_sid, iids_test[i] ) == RES_OK );
1666 }
1667
1668 //delete account
1669 CPPUNIT_ASSERT( deleteAccount( testuser_sid, test_uid ) == RES_OK );
1670 CPPUNIT_ASSERT( deleteAccount( testuser_sid, test256_uid ) == RES_OK );
1671
1672 logoutUser( testuser_sid );
1673 logoutUser( mode_sid );
1674 }
1675
1676 void zipTest(){
1677 char* files[] = { "commonal_cppunit.cc", "../commonal.cc", "../commonal.h" };
1678 CPPUNIT_ASSERT( zipCreate( "./zipped.zip", files, 3 ) == RES_OK );
1679 }
1680
1681 void pubmedTest( ){
1682 const pubmed_t* p;
1683 CPPUNIT_ASSERT( pubmedComplete( 0, &p ) == RES_OK );
1684 CPPUNIT_ASSERT( pubmedComplete( 12598621, &p ) == RES_OK );
1685
1686 printf( "'%d'\n"
1687 "'%s'\n"
1688 "'%s'\n"
1689 "'%s'\n"
1690 "'%d'\n"
1691 "'%d'\n"
1692 "'%d'\n"
1693 "'%s'\n"
1694 "'%s'\n",
1695 p -> getID( ),
1696 p -> getTitle( ),
1697 p -> getAuthor( ),
1698 p -> getJournal( ),
1699 p -> getYearOfPublication( ),
1700 p -> getVolume( ),
1701 p -> getNumber( ),
1702 p -> getPage( ),
1703 p -> getAbstract( ) );
1704 freePubmed( p );
1705 }
1706
1707 void relatedToTest(){
1708 sessionid_t mode_sid; // sid of moderator
1709
1710 sessionid_t test256_sid;
1711 userid_t test256_uid;
1712 account_t test256_user;
1713
1714 userid_t testuser_uid;
1715 sessionid_t testuser_sid;
1716
1717 itemid_t* iids = 0;
1718 int iidsLen;
1719 char md5buf[ MD5_DIGEST_STRING_LENGTH ];
1720
1721 //backup config
1722 char* value = 0;
1723
1724 CPPUNIT_ASSERT( initializeDB( ODBC_DSN, "root", "", "cppunit_test", DBPREFIX, DBTYPE ) == RES_OK );
1725 CPPUNIT_ASSERT( loginUser( "moderator", md5str( md5buf, ( unsigned char* )"mode00", 6 ), &mode_sid ) == RES_OK );
1726 CPPUNIT_ASSERT( loginUser( "testuser", md5str( md5buf, ( unsigned char* )"hogehoge", 8 ), &testuser_sid ) == RES_OK );
1727 CPPUNIT_ASSERT( getUid( "testuser", &testuser_uid ) == RES_OK );
1728
1729 //create test256 user
1730 fillAccount( __LINE__, &test256_user );
1731 CPPUNIT_ASSERT( insertAccount( testuser_sid, &test256_user, &test256_uid ) == RES_OK );
1732 CPPUNIT_ASSERT( activate( testuser_sid, test256_uid, true ) == RES_OK );
1733 CPPUNIT_ASSERT( loginUser( test256_user.getUname(), test256_user.getPass(), &test256_sid ) == RES_OK );
1734
1735 //test for guest( session_t::SID_GUEST ) can't modify related to by guest
1736 CPPUNIT_ASSERT( insertRelatedTo( session_t::SID_GUEST, 1, 11 ) == RES_NO_WRITE_ACCESS_RIGHT );
1737
1738 //insert item
1739 itemid_t id1, id2, id3;
1740 item_t i1, i2, i3;
1741 fillItem( __LINE__, &i1 ); i1.setContributorUID( testuser_uid );
1742 fillItem( __LINE__, &i2 ); i2.setContributorUID( testuser_uid );
1743 fillItem( __LINE__, &i3 ); i3.setContributorUID( test256_uid );
1744 CPPUNIT_ASSERT( insertItem( testuser_sid, &i1, &id1 ) == RES_OK );
1745 CPPUNIT_ASSERT( insertItem( testuser_sid, &i2, &id2 ) == RES_OK );
1746 CPPUNIT_ASSERT( insertItem( test256_sid, &i3, &id3 ) == RES_OK );
1747
1748
1749 //test for registered user
1750 // link i1 -> i2(OK), i1 -> i3(NG)
1751 CPPUNIT_ASSERT( insertRelatedTo( testuser_sid, id1, id2 ) == RES_OK );
1752 CPPUNIT_ASSERT( insertRelatedTo( testuser_sid, id1, id2 ) == RES_OK );
1753 CPPUNIT_ASSERT( insertRelatedTo( testuser_sid, id1, id3 ) == RES_NO_READ_ACCESS_RIGHT );
1754
1755 //
1756 CPPUNIT_ASSERT( getRelatedTo( testuser_sid, id1, &iids, &iidsLen ) == RES_OK );
1757 CPPUNIT_ASSERT( iidsLen == 1 );
1758 CPPUNIT_ASSERT( iids != 0 );
1759 CPPUNIT_ASSERT( iids[0] == id2 );
1760 if( iids != 0 ) freeItemID( iids );
1761
1762 //test for guest( session_t::SID_GUEST ) can't modify related to by guest
1763 //?蚊?鴻?????若?吟?????潟????申??/???ゃ???с??????
1764 CPPUNIT_ASSERT( insertRelatedTo( session_t::SID_GUEST, id1, id2 ) == RES_NO_WRITE_ACCESS_RIGHT );
1765 CPPUNIT_ASSERT( deleteRelatedTo( session_t::SID_GUEST, id1, id2 ) == RES_NO_WRITE_ACCESS_RIGHT );
1766
1767 //???ゃ???鴻??
1768 //test256??1????????с?????????э?i1??荀??????????潟?????宴?????ゃ?с??????
1769 CPPUNIT_ASSERT( deleteRelatedTo( test256_sid, id1, id3 ) == RES_NO_WRITE_ACCESS_RIGHT );
1770 //testuser??1????????????э?i1??荀??????????潟?????宴?????ゃ?с????
1771 CPPUNIT_ASSERT( deleteRelatedTo( testuser_sid, id1, id2 ) == RES_OK );
1772 CPPUNIT_ASSERT( deleteRelatedTo( testuser_sid, id1, id2 ) == RES_OK );
1773 CPPUNIT_ASSERT( deleteRelatedTo( testuser_sid, id1, id3 ) == RES_OK );
1774 CPPUNIT_ASSERT( getRelatedTo( testuser_sid, id1, &iids, &iidsLen ) == RES_OK );
1775 CPPUNIT_ASSERT( iids != 0 );
1776 CPPUNIT_ASSERT( iidsLen == 0 );
1777 if( iids != 0 ) freeItemID( iids );
1778
1779 //register item(i3) to public index & certify the item
1780 //?≪?ゃ????(i3)??Public???脂?蚊?????粋?????鐚?/span>
1781 CPPUNIT_ASSERT( registerItem( testuser_sid, item_t::IID_PUBLIC, id3 ) == RES_OK );
1782 CPPUNIT_ASSERT( setCertifyState( mode_sid, item_t::IID_PUBLIC, id3, index::CERTIFIED ) == RES_OK );
1783
1784 //insert/delete ok when item(i3) is open(public)
1785 //篁?篋冴???≪?ゃ?????с??Public????鐚??????≪?ゃ?????吾?????潟????篏????糸???ゃ?с????
1786 CPPUNIT_ASSERT( insertRelatedTo( testuser_sid, id1, id3 ) == RES_OK );
1787 CPPUNIT_ASSERT( getRelatedTo( testuser_sid, id1, &iids, &iidsLen ) == RES_OK );
1788 CPPUNIT_ASSERT( iids != 0 );
1789 CPPUNIT_ASSERT( iidsLen == 1 );
1790 CPPUNIT_ASSERT( iids[0] == id3 );
1791 if( iids != 0 ) freeItemID( iids );
1792 CPPUNIT_ASSERT( deleteRelatedTo( testuser_sid, id1, id3 ) == RES_OK );
1793
1794 //
1795 CPPUNIT_ASSERT( deleteItem( testuser_sid, id1 ) == RES_OK );
1796 CPPUNIT_ASSERT( deleteItem( testuser_sid, id2 ) == RES_OK );
1797 CPPUNIT_ASSERT( deleteItem( test256_sid, id3 ) == RES_OK );
1798
1799 CPPUNIT_ASSERT( deleteAccount( testuser_sid, test256_uid ) == RES_OK );
1800
1801 logoutUser( testuser_sid );
1802 logoutUser( test256_sid );
1803 logoutUser( mode_sid );
1804
1805 }
1806
1807 };
1808
1809 int main( void )
1810 {
1811 useSyslog( true );
1812 CppUnit::TextUi::TestRunner runner;
1813 runner.addTest( AbstractLayerTest::suite() );
1814 runner.run();
1815 return 0;
1816 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26