View Javadoc

1   // Copyright (C) 2008 - 2011 Philip Aston
2   // All rights reserved.
3   //
4   // This file is part of The Grinder software distribution. Refer to
5   // the file LICENSE which is part of The Grinder distribution for
6   // licensing details. The Grinder distribution is available on the
7   // Internet at http://grinder.sourceforge.net/
8   //
9   // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
12  // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
13  // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14  // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15  // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16  // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17  // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
18  // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19  // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
20  // OF THE POSSIBILITY OF SUCH DAMAGE.
21  
22  package net.grinder.console.distribution;
23  
24  import static org.junit.Assert.assertEquals;
25  import static org.junit.Assert.assertSame;
26  import static org.mockito.Mockito.mock;
27  import static org.mockito.Mockito.verify;
28  import static org.mockito.Mockito.verifyNoMoreInteractions;
29  import static org.mockito.Mockito.when;
30  
31  import java.io.File;
32  import java.util.HashMap;
33  import java.util.TimerTask;
34  import java.util.regex.Pattern;
35  
36  import net.grinder.communication.MessageDispatchRegistry;
37  import net.grinder.console.common.Resources;
38  import net.grinder.console.common.StubResources;
39  import net.grinder.console.communication.ConsoleCommunication;
40  import net.grinder.console.model.ConsoleProperties;
41  import net.grinder.testutility.AbstractJUnit4FileTestCase;
42  import net.grinder.testutility.StubTimer;
43  import net.grinder.util.Directory;
44  
45  import org.junit.Before;
46  import org.junit.Test;
47  import org.mockito.ArgumentCaptor;
48  import org.mockito.Mock;
49  import org.mockito.MockitoAnnotations;
50  
51  
52  /**
53   * Unit tests for {@link WireFileDistribution}.
54   *
55   * @author Philip Aston
56   */
57  public class TestWireFileDistribution extends AbstractJUnit4FileTestCase {
58  
59     @Mock private MessageDispatchRegistry m_messageDispatchRegistry;
60    @Mock private ConsoleCommunication m_consoleCommunication;
61  
62    @Before public void setUp() {
63      MockitoAnnotations.initMocks(this);
64  
65      when(m_consoleCommunication.getMessageDispatchRegistry())
66        .thenReturn(m_messageDispatchRegistry);
67    }
68  
69    private final Resources m_resources =
70      new StubResources<Object>(new HashMap<String, Object>() {{
71      }});
72  
73    @Test public void testWireFileDistribution() throws Exception {
74  
75      final FileDistribution fileDistribution = mock(FileDistribution.class);
76  
77      final ConsoleProperties consoleProperties =
78        new ConsoleProperties(m_resources, new File(getDirectory(), "props"));
79  
80      final StubTimer timer = new StubTimer();
81  
82      new WireFileDistribution(fileDistribution,
83                               consoleProperties,
84                               timer);
85  
86      assertEquals(6000, timer.getLastDelay());
87      assertEquals(6000, timer.getLastPeriod());
88  
89      final TimerTask scanFileTask = timer.getLastScheduledTimerTask();
90      scanFileTask.run();
91      verify(fileDistribution).scanDistributionFiles();
92  
93      consoleProperties.setDistributionFileFilterExpression(".*");
94  
95      final ArgumentCaptor<Pattern> patternCaptor =
96        ArgumentCaptor.forClass(Pattern.class);
97  
98      verify(fileDistribution).setFileFilterPattern(patternCaptor.capture());
99      assertEquals(".*", patternCaptor.getValue().pattern());
100 
101     final ArgumentCaptor<Directory> directoryCaptor =
102       ArgumentCaptor.forClass(Directory.class);
103 
104     final Directory directory = new Directory(new File(getDirectory(), "foo"));
105     consoleProperties.setAndSaveDistributionDirectory(directory);
106 
107     verify(fileDistribution).setDirectory(directoryCaptor.capture());
108     assertSame(directory, directoryCaptor.getValue());
109 
110     consoleProperties.setConsolePort(999);
111 
112     verifyNoMoreInteractions(fileDistribution);
113   }
114 }