// Copyright (C) 2008 - 2009 Philip Aston
// All rights reserved.
//
// This file is part of The Grinder software distribution. Refer to
// the file LICENSE which is part of The Grinder distribution for
// licensing details. The Grinder distribution is available on the
// Internet at http://grinder.sourceforge.net/
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGE.
package net.grinder.plugin.http;
import junit.framework.TestCase;
import net.grinder.common.GrinderException;
import net.grinder.plugininterface.GrinderPlugin;
import net.grinder.plugininterface.PluginProcessContext;
import net.grinder.plugininterface.PluginRegistry;
import net.grinder.script.Grinder.ScriptContext;
import net.grinder.testutility.AbstractStubFactory;
import net.grinder.testutility.RandomStubFactory;
import net.grinder.util.StandardTimeAuthority;
/**
* Unit tests for {@link HTTPPluginControl}.
*
* @author Philip Aston
*/
public class TestHTTPPluginControl extends TestCase {
public void testHTTPPluginControl() throws Exception {
final RandomStubFactory<PluginProcessContext>
pluginProcessContextStubFactory =
RandomStubFactory.create(PluginProcessContext.class);
final HTTPPluginThreadState threadState =
new HTTPPluginThreadState(null,
null,
null,
new StandardTimeAuthority());
final RandomStubFactory<ScriptContext> scriptContextStubFactory =
RandomStubFactory.create(ScriptContext.class);
final ScriptContext scriptContext =
scriptContextStubFactory.getStub();
pluginProcessContextStubFactory.setResult(
"getPluginThreadListener", threadState);
pluginProcessContextStubFactory.setResult(
"getScriptContext", scriptContext);
new PluginRegistry() {
{ setInstance(this); }
public void register(GrinderPlugin plugin) throws GrinderException {
plugin.initialize(pluginProcessContextStubFactory.getStub());
}
};
// Sigh, if a previous test has registered a stub PluginProcessContext, we
// need to rewire it to make this test valid. Further proof that static
// references are evil.
final AbstractStubFactory<?> existingProcessContextStubFactory =
AbstractStubFactory.getFactory(
HTTPPlugin.getPlugin().getPluginProcessContext());
if (existingProcessContextStubFactory != pluginProcessContextStubFactory) {
existingProcessContextStubFactory.setResult(
"getPluginThreadListener", threadState);
existingProcessContextStubFactory.setResult(
"getScriptContext", scriptContext);
}
final HTTPPluginConnection connectionDefaults =
HTTPPluginControl.getConnectionDefaults();
assertNotNull(connectionDefaults);
assertSame(connectionDefaults, HTTPPluginControl.getConnectionDefaults());
final HTTPUtilities utilities = HTTPPluginControl.getHTTPUtilities();
assertNotNull(utilities);
final Object threadContext = HTTPPluginControl.getThreadHTTPClientContext();
assertSame(threadState, threadContext);
assertSame(threadState, HTTPPluginControl.getThreadHTTPClientContext());
final HTTPPluginConnection connection =
HTTPPluginControl.getThreadConnection("http://foo");
assertSame(connection,
HTTPPluginControl.getThreadConnection("http://foo/bah"));
assertNotSame(connection,
HTTPPluginControl.getThreadConnection("http://bah"));
}
}