Project

General

Profile

1 1112 tao
/**
2
 *  '$RCSfile$'
3
 *  Copyright: 2000 Regents of the University of California and the
4
 *              National Center for Ecological Analysis and Synthesis
5
 *  Purpose: To test the MetaCatURL class by JUnit
6 3080 jones
 *    Authors: Jing Tao
7 1112 tao
 *
8
 *   '$Author$'
9
 *     '$Date$'
10
 * '$Revision$'
11
 *
12
 * This program is free software; you can redistribute it and/or modify
13
 * it under the terms of the GNU General Public License as published by
14
 * the Free Software Foundation; either version 2 of the License, or
15
 * (at your option) any later version.
16
 *
17
 * This program is distributed in the hope that it will be useful,
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
 * GNU General Public License for more details.
21
 *
22
 * You should have received a copy of the GNU General Public License
23
 * along with this program; if not, write to the Free Software
24
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25
 */
26
27 1118 tao
package edu.ucsb.nceas.metacattest;
28 1112 tao
29
import edu.ucsb.nceas.metacat.*;
30 1822 jones
import edu.ucsb.nceas.utilities.HttpMessage;
31 3567 tao
import edu.ucsb.nceas.utilities.Options;
32 1112 tao
//import edu.ucsb.nceas.morpho.framework.*;
33
import junit.framework.Test;
34
import junit.framework.TestCase;
35
import junit.framework.TestResult;
36
import junit.framework.TestSuite;
37 2917 jones
import org.apache.commons.logging.Log;
38
import org.apache.commons.logging.LogFactory;
39 1112 tao
40
import java.io.*;
41
import java.net.*;
42
import java.util.*;
43
44
45
/**
46
 * A JUnit test for testing Step class processing
47
 */
48
public class MetaCatServletTest extends TestCase
49
{
50
  private String metacatURL=MetaCatUtil.getOption("junittesturl");
51
  private String serialNumber;
52 2917 jones
  private static final Log log = LogFactory.getLog("edu.ucsb.nceas.metacattest.MetaCatServletTest");
53 3567 tao
  /* Initialize Options*/
54
  static
55
  {
56
	  try
57
	  {
58
		  Options.initialize(new File("build/tests/metacat.properties"));
59
	  }
60
	  catch(Exception e)
61
	  {
62
		  System.err.println("Exception in initialize option in MetacatServletNetTest "+e.getMessage());
63
	  }
64
  }
65 2917 jones
66 1112 tao
  /**
67
   * Constructor to build the test
68
   *
69
   * @param name the name of the test method
70
   */
71
  public MetaCatServletTest(String name)
72
  {
73
    super(name);
74
  }
75
76
 /**
77
   * Constructor to build the test
78
   *
79
   * @param name the name of the test method
80
   */
81
  public MetaCatServletTest(String name, String serial)
82
  {
83
    super(name);
84
    serialNumber=serial;
85
  }
86
  /**
87
   * Establish a testing framework by initializing appropriate objects
88
   */
89
  public void setUp()
90
 {
91
92
 }
93
94
  /**
95
   * Release any objects after tests are complete
96
   */
97
  public void tearDown()
98
  {
99
  }
100
101
  /**
102
   * Create a suite of tests to be run together
103
   */
104
  public static Test suite()
105
  {
106
    double number = 0;
107
    String serial = null;
108
109
110
    TestSuite suite = new TestSuite();
111 1118 tao
    suite.addTest(new MetaCatServletTest("initialize"));
112 1112 tao
    suite.addTest(new MetaCatServletTest("testLterReferralLogin"));
113
    suite.addTest(new MetaCatServletTest("testLterReferralLoginFail"));
114
    suite.addTest(new MetaCatServletTest("testPiscoReferralLogin"));
115
    suite.addTest(new MetaCatServletTest("testPiscoReferralLoginFail"));
116 1118 tao
    suite.addTest(new MetaCatServletTest("testNCEASLoginFail"));
117 1112 tao
    //Should put a login successfully at the end of login test
118
    //So insert or update can have cookie.
119
    suite.addTest(new MetaCatServletTest("testNCEASLogin"));
120
121
    //create random number for docid, so it can void repeat
122 1118 tao
    number = Math.random()*100000;
123 1112 tao
    serial = Integer.toString(((new Double(number)).intValue()));
124 2917 jones
    log.debug("serial: "+serial);
125 1112 tao
    suite.addTest(new MetaCatServletTest("testInsertXMLDocument", serial));
126
    suite.addTest(new MetaCatServletTest("testReadXMLDocumentXMLFormat",
127
                                                        serial));
128 1222 tao
    suite.addTest(new MetaCatServletTest("testUpdateXMLDocument",serial));
129 1112 tao
130
    suite.addTest(new MetaCatServletTest("testReadXMLDocumentHTMLFormat",
131
                                                        serial));
132
    suite.addTest(new MetaCatServletTest("testReadXMLDocumentZipFormat",
133
                                                        serial));
134 1222 tao
135 1112 tao
    suite.addTest(new MetaCatServletTest("testDeleteXMLDocument",serial));
136
137
    //insert invalid xml document
138 1118 tao
    number = Math.random()*100000;
139 1112 tao
    serial = Integer.toString(((new Double(number)).intValue()));
140
    suite.addTest(new MetaCatServletTest("testInsertInvalidateXMLDocument",
141
                                                                  serial));
142
    //insert non well formed document
143 1118 tao
    number = Math.random()*100000;
144 1112 tao
    serial = Integer.toString(((new Double(number)).intValue()));
145
    suite.addTest(new MetaCatServletTest("testInsertNonWellFormedXMLDocument",
146 1222 tao
                                                            serial));
147
148 1112 tao
    suite.addTest(new MetaCatServletTest("testLogOut"));
149
150
    return suite;
151
  }
152
153
154
155
  /**
156
   * Run an initial test that always passes to check that the test
157
   * harness is working.
158
   */
159
  public void initialize()
160
  {
161 1505 tao
    assertTrue(1 == 1);
162 1112 tao
  }
163
164
  /**
165
   * Test the login to neceas succesfully
166
   */
167
  public void testNCEASLogin()
168
  {
169
    String user="uid=john,o=NCEAS,dc=ecoinformatics,dc=org";
170
    String passwd="123456";
171 1505 tao
    assertTrue(logIn(user,passwd));
172
    //assertTrue( withProtocol.getProtocol().equals("http"));
173 1112 tao
  }
174
175
  /**
176
   * Test the login to neceas failed
177
   */
178
  public void testNCEASLoginFail()
179
  {
180
    String user="uid=john,o=NCEAS,dc=ecoinformatics,dc=org";
181
    String passwd="12345678";
182 1505 tao
    assertTrue(!logIn(user,passwd));
183 1112 tao
184
  }
185
186
  /**
187
   * Test the login to lter succesfully
188
   */
189
  public void testLterReferralLogin()
190
  {
191 3780 daigle
    String user=MetaCatUtil.getOption("lteruser");
192
    String passwd=MetaCatUtil.getOption("lterpassword");
193 1505 tao
    assertTrue(logIn(user,passwd));
194 1112 tao
195
  }
196
197
  /**
198
   * Test the login to lter failed
199
   */
200
  public void testLterReferralLoginFail()
201
  {
202
    String user="uid=jtao,o=LTER,dc=ecoinformatics,dc=org";
203
    String passwd="qVyGpveb";
204 1505 tao
    assertTrue(!logIn(user,passwd));
205
    //assertTrue( withProtocol.getProtocol().equals("http"));
206 1112 tao
  }
207
208
 /**
209
   * Test the login to pisco succesfully
210
   */
211
   public void testPiscoReferralLogin()
212
  {
213 3780 daigle
	String user=MetaCatUtil.getOption("piscouser");
214
	String passwd=MetaCatUtil.getOption("piscopassword");
215 1505 tao
    assertTrue(logIn(user,passwd));
216
    //assertTrue( withProtocol.getProtocol().equals("http"));
217 1112 tao
  }
218
219
 /**
220
   * Test the login to pisco failed
221
   */
222
  public void testPiscoReferralLoginFail()
223
  {
224
    String user="uid=tao,o=PISCO,dc=ecoinformatics,dc=org";
225
    String passwd="hello";
226 1505 tao
    assertTrue(!logIn(user,passwd));
227
    //assertTrue( withProtocol.getProtocol().equals("http"));
228 1112 tao
  }
229
230
 /**
231
   * Test insert a xml document successfully
232
   */
233
  public void testInsertXMLDocument()
234
  {
235
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
236
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"1";
237 2917 jones
    log.debug("insert docid: "+name);
238 1112 tao
    String content="<?xml version=\"1.0\"?>"
239
                   +"<!DOCTYPE acl PUBLIC \"-//ecoinformatics.org//"
240
                   +"eml-access-2.0.0beta6//EN\" \"http://pine.nceas.ucsb."
241
                   +"edu:8080/tao/dtd/eml-access-2.0.0beta6.dtd\">"
242
                   +"<acl authSystem=\"knb\" order=\"allowFirst\">"
243
                   +"<identifier>"+name+"</identifier>"
244
                   +"<allow>"
245
             +"<principal>uid=john,o=NCEAS,dc=ecoinformatics,dc=org</principal>"
246
                   +"<permission>all</permission>"
247
                   +"</allow>"
248
                   +"<allow>"
249
                   +"<principal>public</principal>"
250
                   +"<permission>read</permission>"
251
                   +"</allow>"
252
                   +"</acl>";
253 2917 jones
    log.debug("xml document: "+content);
254 1505 tao
     assertTrue(handleXMLDocument(content, name, "insert"));
255 1112 tao
256
  }
257
258
  /**
259
   * Test insert a invalidate xml document successfully
260
   * In the String, there is no <!Doctype ... Public/System/>
261
   */
262
  public void testInsertInvalidateXMLDocument()
263
  {
264
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
265
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"1";
266 2917 jones
    log.debug("insert docid: "+name);
267 1112 tao
    String content="<?xml version=\"1.0\"?>"
268
                   +"<acl authSystem=\"knb\" order=\"allowFirst\">"
269
                   +"<identifier>"+name+"</identifier>"
270
                   +"<allow>"
271
             +"<principal>uid=john,o=NCEAS,dc=ecoinformatics,dc=org</principal>"
272
                   +"<permission>all</permission>"
273
                   +"</allow>"
274
                   +"<allow>"
275
                   +"<principal>public</principal>"
276
                   +"<permission>read</permission>"
277
                   +"</allow>"
278
                   +"</acl>";
279 2917 jones
    log.debug("xml document: "+content);
280 1505 tao
     assertTrue(handleXMLDocument(content, name, "insert"));
281 1112 tao
  }
282
283
   /**
284
   * Test insert a non well-formed xml document successfully
285
   * There is no </acl> in this string
286
   */
287
  public void testInsertNonWellFormedXMLDocument()
288
  {
289
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
290
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"1";
291 2917 jones
    log.debug("insert non well-formed docid: "+name);
292 1112 tao
    String content="<?xml version=\"1.0\"?>"
293
                   +"<acl authSystem=\"knb\" order=\"allowFirst\">"
294
                   +"<identifier>"+name+"</identifier>"
295
                   +"<allow>"
296
             +"<principal>uid=john,o=NCEAS,dc=ecoinformatics,dc=org</principal>"
297
                   +"<permission>all</permission>"
298
                   +"</allow>"
299
                   +"<allow>"
300
                   +"<principal>public</principal>"
301
                   +"<permission>read</permission>"
302
                   +"</allow>";
303
304 2917 jones
    log.debug("xml document: "+content);
305 1505 tao
     assertTrue(!handleXMLDocument(content, name, "insert"));
306 1112 tao
  }
307
308
  /**
309
   * Test read a xml document  in xml format successfully
310
   */
311
  public void testReadXMLDocumentXMLFormat()
312
  {
313
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
314
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"1";
315 1505 tao
    assertTrue(handleReadAction(name, "xml"));
316 1112 tao
317
  }
318
319
  /**
320
   * Test read a xml document  in html format successfully
321
   */
322
  public void testReadXMLDocumentHTMLFormat()
323
  {
324
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
325
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"1";
326 1505 tao
    assertTrue(handleReadAction(name, "html"));
327 1112 tao
328
  }
329
330
331
  /**
332
   * Test read a xml document  in zip format successfully
333
   */
334
  public void testReadXMLDocumentZipFormat()
335
  {
336
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
337
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"1";
338 1505 tao
    assertTrue(handleReadAction(name, "zip"));
339 1112 tao
340
  }
341
342
  /**
343
   * Test insert a xml document successfully
344
   */
345
  public void testUpdateXMLDocument()
346
  {
347
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
348
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"2";
349 2917 jones
    log.debug("update docid: "+name);
350 1112 tao
    String content="<?xml version=\"1.0\"?>"
351
                   +"<!DOCTYPE acl PUBLIC \"-//ecoinformatics.org//"
352
                   +"eml-access-2.0.0beta6//EN\" \"http://pine.nceas.ucsb."
353
                   +"edu:8080/tao/dtd/eml-access-2.0.0beta6.dtd\">"
354
                   +"<acl authSystem=\"knb\" order=\"allowFirst\">"
355
                   +"<identifier>"+name+"</identifier>"
356
                   +"<allow>"
357
             +"<principal>uid=john,o=NCEAS,dc=ecoinformatics,dc=org</principal>"
358
                   +"<permission>all</permission>"
359
                   +"</allow>"
360
                   +"<allow>"
361
                   +"<principal>public</principal>"
362
                   +"<permission>read</permission>"
363
                   +"</allow>"
364
                   +"</acl>";
365 2917 jones
    log.debug("xml document: "+content);
366 1505 tao
     assertTrue(handleXMLDocument(content, name, "update"));
367 1112 tao
368
  }
369
370
  /**
371
   * Test delete a xml document successfully
372
   */
373
  public void testDeleteXMLDocument()
374
  {
375
    String name = "john"+MetaCatUtil.getOption("accNumSeparator")
376
                     +serialNumber+MetaCatUtil.getOption("accNumSeparator")+"2";
377 2917 jones
    log.debug("delete docid: "+name);
378 1505 tao
    assertTrue(handleDeleteFile(name));
379 1112 tao
380
  }
381
382
  /**
383
   * Test logout action
384
   */
385
  public void testLogOut()
386
  {
387
388 1505 tao
    assertTrue(handleLogOut());
389 1112 tao
390
  }
391
392
 /**
393
   * Method to hanld login action
394
   *
395
   * @param usrerName, the DN name of the test method
396
   * @param passWord, the passwd of the user
397
   */
398
399
  public boolean logIn(String userName, String passWord)
400
  {
401
    Properties prop = new Properties();
402
    prop.put("action", "login");
403
    prop.put("qformat", "xml");
404
    prop.put("username", userName);
405
    prop.put("password", passWord);
406
407
    // Now contact metacat
408
    String response = getMetacatString(prop);
409 2917 jones
    log.debug("Login Message: "+response);
410 1112 tao
    boolean connected = false;
411
    if (response.indexOf("<login>") != -1) {
412
      connected = true;
413
    } else {
414
415
      connected = false;
416
    }
417
418
    return connected;
419
  }
420
421
  /**
422
   * Method to hanld logout action
423
   *
424
   * @param usrerName, the DN name of the test method
425
   * @param passWord, the passwd of the user
426
   */
427
428
  public boolean handleLogOut()
429
  {
430
    boolean disConnected =false;
431
    Properties prop = new Properties();
432
    prop.put("action", "logout");
433
    prop.put("qformat", "xml");
434
435
    String response = getMetacatString(prop);
436 2917 jones
    log.debug("Logout Message: "+response);
437 1112 tao
    HttpMessage.setCookie(null);
438
439
    if (response.indexOf("<logout>") != -1)
440
    {
441
      disConnected = true;
442
    }
443
    else
444
    {
445
      disConnected = false;
446
    }
447
448
    return disConnected;
449
  }
450
451
  /**
452
   * Method to hanld read both xml and data file
453
   *
454
   * @param docid, the docid of the document want to read
455
   * @param qformat, the format of document user want to get
456
   */
457
  public boolean handleReadAction(String docid, String qformat)
458
  {
459
    Properties prop = new Properties();
460
    String message ="";
461
    prop.put("action", "read");
462
    prop.put("qformat", qformat);
463
    prop.put("docid", docid);
464
465
    message = getMetacatString(prop);
466
    message = message.trim();
467
    if (message==null || message.equals("")||message.indexOf("<error>") != -1 )
468
    {//there was an error
469
470
      return false;
471
    }
472
    else
473
    {//successfully
474
      return true;
475
    }
476
477
  }
478
479
480
  /**
481
   * Method to hanld inset or update xml document
482
   *
483
   * @param xmlDocument, the content of xml qformat
484
   * @param docid, the docid of the document
485
   * @param action, insert or update
486
   */
487
  public boolean handleXMLDocument(String xmlDocument, String docid,
488
                                                              String action)
489
490
  { //-attempt to write file to metacat
491
    String access = "no";
492
    StringBuffer fileText = new StringBuffer();
493
    StringBuffer messageBuf = new StringBuffer();
494
    String accessFileId = null;
495
    Properties prop = new Properties();
496
    prop.put("action", action);
497
    prop.put("public", access);  //This is the old way of controlling access
498
    prop.put("doctext", xmlDocument);
499
    prop.put("docid", docid);
500
501
    String message = getMetacatString(prop);
502 2917 jones
    log.debug("Insert or Update Message: "+message);
503 1112 tao
    if(message.indexOf("<error>") != -1)
504
    {//there was an error
505
506
      return false;
507
    }
508
    else if(message.indexOf("<success>") != -1)
509
    {//the operation worked
510
     //write the file to the cache and return the file object
511
     return true;
512
513
    }
514
    else
515
    {//something weird happened.
516
      return false;
517
    }
518
519
520
  }
521
522
   public boolean handleDeleteFile(String name)
523
  {
524
525
    Properties prop = new Properties();
526
    prop.put("action", "delete");
527
    prop.put("docid", name);
528
529
    String message = getMetacatString(prop);
530 2917 jones
    log.debug("Delete Message: "+message);
531 1112 tao
    if(message.indexOf("<error>") != -1)
532
    {//there was an error
533
534
      return false;
535
    }
536
    else if(message.indexOf("<success>") != -1)
537
    {//the operation worked
538
     //write the file to the cache and return the file object
539
     return true;
540
541
    }
542
    else
543
    {//something weird happened.
544
      return false;
545
    }
546
  }
547
548
549
550
551
   public String getMetacatString(Properties prop)
552
  {
553
    String response = null;
554
555
    // Now contact metacat and send the request
556
    try
557
    {
558
      InputStreamReader returnStream =
559
                        new InputStreamReader(getMetacatInputStream(prop));
560
      StringWriter sw = new StringWriter();
561
      int len;
562
      char[] characters = new char[512];
563
      while ((len = returnStream.read(characters, 0, 512)) != -1)
564
      {
565
        sw.write(characters, 0, len);
566
      }
567
      returnStream.close();
568
      response = sw.toString();
569
      sw.close();
570
    }
571
    catch(Exception e)
572
    {
573
      return null;
574
    }
575
576
    return response;
577
  }
578
579
   /**
580
   * Send a request to Metacat
581
   *
582
   * @param prop the properties to be sent to Metacat
583
   * @return InputStream as returned by Metacat
584
   */
585
  public InputStream getMetacatInputStream(Properties prop)
586
  {
587
    InputStream returnStream = null;
588
    // Now contact metacat and send the request
589
    try
590
    {
591
592
      URL url = new URL(metacatURL);
593
      HttpMessage msg = new HttpMessage(url);
594
      returnStream = msg.sendPostMessage(prop);
595
      return returnStream;
596
    }
597
    catch(Exception e)
598
    {
599
      e.printStackTrace(System.err);
600
601
    }
602
    return returnStream;
603
604
  }
605
606
607
608
}