1   /*
2    * soapUI Pro, copyright (C) 2007-2008 eviware software ab
3    */
4   
5   package com.eviware.soapui.impl.wsdl.teststeps;
6   
7   import com.eviware.soapui.config.TestStepConfig;
8   import com.eviware.soapui.impl.WsdlInterfaceFactory;
9   import com.eviware.soapui.impl.wsdl.WsdlInterface;
10  import com.eviware.soapui.impl.wsdl.WsdlProject;
11  import com.eviware.soapui.impl.wsdl.WsdlRequest;
12  import com.eviware.soapui.impl.wsdl.WsdlSubmitContext;
13  import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse;
14  import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
15  import com.eviware.soapui.impl.wsdl.teststeps.registry.WsdlMockResponseStepFactory;
16  import com.eviware.soapui.model.iface.Submit;
17  import com.eviware.soapui.model.testsuite.TestCaseRunner;
18  import com.eviware.soapui.model.testsuite.TestRunner.Status;
19  import com.eviware.soapui.support.TestCaseWithJetty;
20  import com.eviware.soapui.support.types.StringToObjectMap;
21  
22  public class MockResponseStepTestCase extends TestCaseWithJetty
23  {
24     @Override
25     protected void setUp() throws Exception
26     {
27        super.setUp();
28     }
29  
30     public void testDummy() throws Exception
31     {
32        assert true;
33     }
34  
35     public void testMockResponseStep() throws Exception
36     {
37        // create empty project
38        WsdlProject project = new WsdlProject();
39  
40        // import wsdl
41        WsdlInterface iface = WsdlInterfaceFactory.importWsdl( project, "http://localhost:8082/test1/TestService.wsdl", true )[0];
42  
43        // create empty testcase
44        WsdlTestCase testCase = project.addNewTestSuite( "TestSuite" ).addNewTestCase( "TestCase" );
45  
46        // add mockresponse step for
47        WsdlRequest request = iface.getOperationAt( 0 ).getRequestAt( 0 );
48        TestStepConfig config = WsdlMockResponseStepFactory.createConfig( request, false );
49        WsdlMockResponseTestStep step = (WsdlMockResponseTestStep) testCase.addTestStep( config );
50  
51        WsdlMockResponse mockResponse = step.getMockResponse();
52        mockResponse.setResponseContent( "<xml>Tjoho!!</xml>" );
53        step.setPort( 8989 );
54        step.setPath( "/tjohoo" );
55  
56        // run testcase
57        TestCaseRunner runner = testCase.run( new StringToObjectMap(), true );
58        Thread.sleep( 1000 );
59  
60        // submit request
61        request.setEndpoint( "http://127.0.0.1:8989/tjohoo" );
62        System.out.println( "Submitting first request" );
63        Submit submit = request.submit( new WsdlSubmitContext( null ), false );
64  
65        // validate
66        assertEquals( mockResponse.getResponseContent(), submit.getResponse().getContentAsString() );
67        runner.waitUntilFinished();
68        long timeTaken = runner.getResults().get( 0 ).getTimeTaken();
69        assertTrue( timeTaken > 0 );
70        assertEquals( Status.FINISHED, runner.getStatus() );
71        assertEquals( mockResponse.getMockResult().getMockRequest().getRequestContent().trim(), request.getRequestContent().trim() );
72  
73        System.out.println( "Mock response took " + timeTaken + "ms" );
74  
75        // add copy
76        testCase.cloneStep( step, "TestStep2" );
77  
78        assertEquals( testCase.getTestStepCount(), 2 );
79  
80        //	 run testcase again
81        runner = testCase.run( new StringToObjectMap(), true );
82  
83        // wait for response step to start listening..
84        Thread.sleep( 1000 );
85  
86        System.out.println( "Submitting first request again" );
87        submit = request.submit( new WsdlSubmitContext( null ), false );
88        assertEquals( mockResponse.getResponseContent(), submit.getResponse().getContentAsString() );
89        assertEquals( Status.RUNNING, runner.getStatus() );
90        assertEquals( mockResponse.getMockResult().getMockRequest().getRequestContent().trim(), request.getRequestContent().trim() );
91  
92        // wait for second response step to start listening
93        Thread.sleep( 1000 );
94        System.out.println( "Submitting second request" );
95        submit = request.submit( new WsdlSubmitContext( null ), false );
96  
97        // validate
98        assertEquals( mockResponse.getResponseContent(), submit.getResponse().getContentAsString() );
99  
100       // wait for runner to get result
101       Thread.sleep( 1000 );
102 
103       timeTaken = runner.getResults().get( 1 ).getTimeTaken();
104       assertTrue( timeTaken > 0 );
105       assertEquals( Status.FINISHED, runner.getStatus() );
106       assertEquals( mockResponse.getMockResult().getMockRequest().getRequestContent().trim(), request.getRequestContent().trim() );
107 
108       System.out.println( "Second Mock response took " + timeTaken + "ms" );
109    }
110 }