1   /*
2    * Copyright 2006 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package org.springframework.ws.server.endpoint.interceptor;
18  
19  import junit.framework.TestCase;
20  import org.apache.log4j.AppenderSkeleton;
21  import org.apache.log4j.BasicConfigurator;
22  import org.apache.log4j.Level;
23  import org.apache.log4j.Logger;
24  import org.apache.log4j.PropertyConfigurator;
25  import org.apache.log4j.spi.LoggingEvent;
26  
27  import org.springframework.core.io.ClassPathResource;
28  import org.springframework.ws.MockWebServiceMessage;
29  import org.springframework.ws.MockWebServiceMessageFactory;
30  import org.springframework.ws.context.DefaultMessageContext;
31  import org.springframework.ws.context.MessageContext;
32  
33  public class PayloadLoggingInterceptorTest extends TestCase {
34  
35      private PayloadLoggingInterceptor interceptor;
36  
37      private CountingAppender appender;
38  
39      private MessageContext messageContext;
40  
41      protected void setUp() throws Exception {
42          interceptor = new PayloadLoggingInterceptor();
43          appender = new CountingAppender();
44          BasicConfigurator.configure(appender);
45          Logger.getRootLogger().setLevel(Level.DEBUG);
46          MockWebServiceMessage request = new MockWebServiceMessage("<request/>");
47          messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());
48          appender.reset();
49      }
50  
51      protected void tearDown() throws Exception {
52          BasicConfigurator.resetConfiguration();
53          ClassPathResource resource = new ClassPathResource("log4j.properties");
54          PropertyConfigurator.configure(resource.getURL());
55      }
56  
57      public void testHandleRequestDisabled() throws Exception {
58          interceptor.setLogRequest(false);
59          int eventCount = appender.getCount();
60          interceptor.handleRequest(messageContext, null);
61          assertEquals("PayloadLoggingInterceptor logged when disabled", appender.getCount(), eventCount);
62      }
63  
64      public void testHandleRequestEnabled() throws Exception {
65          int eventCount = appender.getCount();
66          interceptor.handleRequest(messageContext, null);
67          assertTrue("PayloadLoggingInterceptor did not log", appender.getCount() > eventCount);
68      }
69  
70      public void testHandleResponseDisabled() throws Exception {
71          MockWebServiceMessage response = (MockWebServiceMessage) messageContext.getResponse();
72          response.setPayload("<response/>");
73          interceptor.setLogResponse(false);
74          int eventCount = appender.getCount();
75          interceptor.handleResponse(messageContext, null);
76          assertEquals("PayloadLoggingInterceptor logged when disabled", appender.getCount(), eventCount);
77      }
78  
79      public void testHandleResponseEnabled() throws Exception {
80          MockWebServiceMessage response = (MockWebServiceMessage) messageContext.getResponse();
81          response.setPayload("<response/>");
82          int eventCount = appender.getCount();
83          interceptor.handleResponse(messageContext, null);
84          assertTrue("PayloadLoggingInterceptor did not log", appender.getCount() > eventCount);
85      }
86  
87      private static class CountingAppender extends AppenderSkeleton {
88  
89          private int count;
90  
91          public int getCount() {
92              return count;
93          }
94  
95          public void reset() {
96              count = 0;
97          }
98  
99          protected void append(LoggingEvent loggingEvent) {
100             count++;
101         }
102 
103         public boolean requiresLayout() {
104             return false;
105         }
106 
107         public void close() {
108         }
109     }
110 }