1   //
2   //Copyright (c) 2003, Caltha - Gajda, Krzewski, Mach, Potempski Sp.J.
3   //All rights reserved.
4   //
5   //Redistribution and use in source and binary forms, with or without modification, 
6   //are permitted provided that the following conditions are met:
7   //
8   //* Redistributions of source code must retain the above copyright notice, 
9   //this list of conditions and the following disclaimer.
10  //* Redistributions in binary form must reproduce the above copyright notice, 
11  //this list of conditions and the following disclaimer in the documentation 
12  //and/or other materials provided with the distribution.
13  //* Neither the name of the Caltha - Gajda, Krzewski, Mach, Potempski Sp.J. 
14  //nor the names of its contributors may be used to endorse or promote products 
15  //derived from this software without specific prior written permission.
16  //
17  //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
18  //AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
19  //WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  //IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
21  //INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
22  //BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23  //OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
24  //WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
25  //ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
26  //POSSIBILITY OF SUCH DAMAGE.
27  //
28  
29  package org.objectledge.pipeline;
30  
31  import org.jcontainer.dna.Logger;
32  import org.jmock.Mock;
33  import org.objectledge.context.Context;
34  import org.objectledge.utils.LedgeTestCase;
35  
36  /**
37   * @author <a href="mailto:pablo@caltha.pl">Pawel Potempski</a>
38   *
39   */
40  public class PipelineTest extends LedgeTestCase
41  {
42      private Context context;
43      private Mock loggerMock;
44      private Mock tryValveMock;
45      private Mock catchValveMock;
46      private Mock finallyValveMock;
47  
48      private Logger logger;
49      private Valve tryValve;
50      private Valve catchValve;
51      private Valve finallyValve;
52      private Valve pipe; 
53  
54      public void setUp()
55      {
56          context = new Context();
57          loggerMock = mock(Logger.class);
58          tryValveMock = mock(Valve.class);
59          catchValveMock = mock(Valve.class);
60          finallyValveMock = mock(Valve.class);
61  
62          logger = (Logger)loggerMock.proxy();
63          tryValve = (Valve)tryValveMock.proxy();
64          catchValve = (Valve)catchValveMock.proxy();
65          finallyValve = (Valve)finallyValveMock.proxy();
66          pipe = new ErrorHandlingPipeline(logger, 
67              new Valve[] { tryValve }, new Valve[] { catchValve }, new Valve[] { finallyValve });
68      }
69  
70      public void testRun() throws Exception
71      {
72          tryValveMock.expects(once()).method("process");
73          finallyValveMock.expects(once()).method("process");
74          pipe.process(context);
75      }
76      
77      public void testRun2() throws Exception
78      {
79          tryValveMock.expects(once()).method("process").
80              will(throwException(new ProcessingException("foo")));
81          catchValveMock.expects(once()).method("process");
82          finallyValveMock.expects(once()).method("process");
83          loggerMock.expects(once()).method("debug");
84          pipe.process(context);
85      }
86  
87      public void testRun3() throws Exception
88      {
89          tryValveMock.expects(once()).method("process").
90              will(throwException(new ProcessingException("foo")));
91          catchValveMock.expects(once()).method("process").
92              will(throwException(new ProcessingException("foo")));
93          loggerMock.expects(once()).method("debug");
94          loggerMock.expects(once()).method("error");
95          finallyValveMock.expects(once()).method("process");
96          pipe.process(context);
97      }
98          
99      public void testRun4() throws Exception
100     {        
101         tryValveMock.expects(once()).method("process");
102         loggerMock.expects(once()).method("error");
103         finallyValveMock.expects(once()).method("process").
104             will(throwException(new ProcessingException("foo")));
105         pipe.process(context);
106     }
107 }