1   /*
2    * $Id: FileConnectorTestCase.java 7976 2007-08-21 14:26:13Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.providers.file;
12  
13  import org.mule.MuleManager;
14  import org.mule.impl.ImmutableMuleEndpoint;
15  import org.mule.tck.MuleTestUtils;
16  import org.mule.tck.providers.AbstractConnectorTestCase;
17  import org.mule.umo.UMOComponent;
18  import org.mule.umo.UMOEvent;
19  import org.mule.umo.endpoint.UMOEndpoint;
20  import org.mule.umo.endpoint.UMOImmutableEndpoint;
21  import org.mule.umo.provider.UMOConnector;
22  import org.mule.umo.provider.UMOMessageReceiver;
23  import org.mule.util.FileUtils;
24  
25  import com.mockobjects.dynamic.Mock;
26  
27  import java.io.File;
28  import java.util.Properties;
29  
30  public class FileConnectorTestCase extends AbstractConnectorTestCase
31  {
32      static final long POLLING_FREQUENCY = 1234;
33      static final long POLLING_FREQUENCY_OVERRIDE = 4321;
34  
35      private File validMessage;
36  
37      protected void doSetUp() throws Exception
38      {
39          super.doSetUp();
40          // The working directory is deleted on tearDown
41          File tempDir = FileUtils.newFile(MuleManager.getConfiguration().getWorkingDirectory(), "tmp");
42          if (!tempDir.exists())
43          {
44              tempDir.mkdirs();
45          }
46          validMessage = File.createTempFile("simple", ".mule", tempDir);
47          assertNotNull(validMessage);
48      }
49  
50      protected void doTearDown() throws Exception
51      {
52          // TestConnector dispatches events via the test: protocol to test://test
53          // endpoints, which seems to end up in a directory called "test" :(
54          FileUtils.deleteTree(FileUtils.newFile(getTestConnector().getProtocol()));
55          super.doTearDown();
56      }
57  
58      /*
59       * (non-Javadoc)
60       * 
61       * @see org.mule.tck.providers.AbstractConnectorTestCase#createConnector()
62       */
63      public UMOConnector getConnector() throws Exception
64      {
65          UMOConnector connector = new FileConnector();
66          connector.setName("testFile");
67          connector.initialise();
68          return connector;
69      }
70  
71      public String getTestEndpointURI()
72      {
73          return "file://" + MuleManager.getConfiguration().getWorkingDirectory();
74      }
75  
76      /*
77       * (non-Javadoc)
78       * 
79       * @see org.mule.tck.providers.AbstractConnectorTestCase#testDispatch()
80       */
81      public void testDispatch() throws Exception
82      {
83          UMOConnector connector = getConnector();
84  
85          Mock session = MuleTestUtils.getMockSession();
86          UMOEndpoint endpoint = getTestEndpoint("simple", UMOImmutableEndpoint.ENDPOINT_TYPE_SENDER);
87          UMOComponent component = getTestComponent(descriptor);
88          UMOEvent event = getTestEvent("TestData");
89  
90          connector.registerListener(component, endpoint);
91          connector.startConnector();
92          connector.dispatch(new ImmutableMuleEndpoint("file:/foo", false), event);
93  
94          session.verify();
95      }
96  
97      /*
98       * (non-Javadoc)
99       * 
100      * @see org.mule.tck.providers.AbstractConnectorTestCase#testSend()
101      */
102     public void testSend() throws Exception
103     {
104         UMOConnector connector = getConnector();
105 
106         UMOEndpoint endpoint = getTestEndpoint("simple", UMOImmutableEndpoint.ENDPOINT_TYPE_SENDER);
107         UMOEvent event = getTestEvent("TestData");
108         UMOComponent component = getTestComponent(descriptor);
109 
110         connector.registerListener(component, endpoint);
111         connector.startConnector();
112         connector.send(new ImmutableMuleEndpoint("file:/foo", false), event);
113 
114     }
115 
116     public Object getValidMessage() throws Exception
117     {
118         return validMessage;
119     }
120 
121     /**
122      * Test polling frequency set on a connector.
123      */
124     public void testConnectorPollingFrequency() throws Exception
125     {
126         FileConnector connector = (FileConnector)getConnector();
127         connector.setPollingFrequency(POLLING_FREQUENCY);
128 
129         UMOEndpoint endpoint = getTestEndpoint("simple", UMOImmutableEndpoint.ENDPOINT_TYPE_RECEIVER);
130         UMOComponent component = getTestComponent(descriptor);
131         UMOMessageReceiver receiver = connector.createReceiver(component, endpoint);
132         assertEquals("Connector's polling frequency must not be ignored.", POLLING_FREQUENCY,
133             ((FileMessageReceiver)receiver).getFrequency());
134     }
135 
136     /**
137      * Test polling frequency overridden at an endpoint level.
138      */
139     public void testPollingFrequencyEndpointOverride() throws Exception
140     {
141         FileConnector connector = (FileConnector)getConnector();
142         // set some connector-level value which we are about to override
143         connector.setPollingFrequency(-1);
144 
145         UMOEndpoint endpoint = getTestEndpoint("simple", UMOImmutableEndpoint.ENDPOINT_TYPE_RECEIVER);
146 
147         Properties props = new Properties();
148         // Endpoint wants String-typed properties
149         props.put(FileConnector.PROPERTY_POLLING_FREQUENCY, String.valueOf(POLLING_FREQUENCY_OVERRIDE));
150         endpoint.setProperties(props);
151 
152         UMOComponent component = getTestComponent(descriptor);
153         UMOMessageReceiver receiver = connector.createReceiver(component, endpoint);
154         assertEquals("Polling frequency endpoint override must not be ignored.", POLLING_FREQUENCY_OVERRIDE,
155             ((FileMessageReceiver)receiver).getFrequency());
156     }
157 }