public boolean canPlayback() { return _scene.isReadable(); }
/** * Given incoming http request, find matched response from the scene and return response from the scene * @param request http request from client * @return matched http response from the scene * * */ public RecordedHttpResponse playback(RecordedHttpRequest request) { if (!_scene.isReadable()) { throw new IllegalStateException(THE_SCENE_IS_NOT_READABLE); } int position = findMatchRequest(request); if (position < 0) { throw new IllegalStateException(NO_MATCHING_RECORDING_FOUND); } if (_scene.isSequential()) { _sequencePosition++; } List<RecordedHttpExchange> recordedHttpExchangeList = _scene.getRecordedHttpExchangeList(); return recordedHttpExchangeList.get(position).getRecordedHttpResponse(); }
@Test public void testCreateSceneNotExistInRecordMode() throws Exception { Scene result = runTestGetResult(SceneMode.RECORD, null); Assert.assertNotNull(result); Assert.assertEquals(result.getName(), NAME); Assert.assertEquals(result.getSceneRoot(), ROOT); Assert.assertFalse(result.isReadable()); }
@Test public void testCreateSceneExistInSequentialRecordMode() throws Exception { Scene expectedScene = EasyMock.createStrictMock(Scene.class); List<RecordedHttpExchange> recordedHttpExchanges = new ArrayList<>(); Date now = new Date(); recordedHttpExchanges.add(new RecordedHttpExchange(null, null, now)); EasyMock.expect(expectedScene.getRecordedHttpExchangeList()).andReturn(recordedHttpExchanges); EasyMock.replay(expectedScene); Scene result = runTestGetResult(SceneMode.SEQUENTIAL_RECORD, expectedScene); Assert.assertNotNull(result); Assert.assertEquals(result.getName(), NAME); Assert.assertEquals(result.getSceneRoot(), ROOT); Assert.assertFalse(result.isReadable()); // Creating a Scene in sequential record mode should clear the list of exchanges to allow for re-recording Assert.assertEquals(result.getRecordedHttpExchangeList().size(), 0); }
@Test public void testCreateSceneExistInRecordMode() throws Exception { Scene expectedScene = EasyMock.createStrictMock(Scene.class); List<RecordedHttpExchange> recordedHttpExchanges = new ArrayList<>(); Date now = new Date(); recordedHttpExchanges.add(new RecordedHttpExchange(null, null, now)); EasyMock.expect(expectedScene.getRecordedHttpExchangeList()).andReturn(recordedHttpExchanges); EasyMock.replay(expectedScene); Scene result = runTestGetResult(SceneMode.RECORD, expectedScene); Assert.assertNotNull(result); Assert.assertEquals(result.getName(), NAME); Assert.assertEquals(result.getSceneRoot(), ROOT); Assert.assertFalse(result.isReadable()); Assert.assertEquals(result.getRecordedHttpExchangeList().get(0).getUpdateTime(), now); }
@Test public void testCreateSceneExistInPlaybackMode() throws Exception { Scene expectedScene = EasyMock.createStrictMock(Scene.class); List<RecordedHttpExchange> recordedHttpExchanges = new ArrayList<>(); Date now = new Date(); recordedHttpExchanges.add(new RecordedHttpExchange(null, null, now)); EasyMock.expect(expectedScene.getRecordedHttpExchangeList()).andReturn(recordedHttpExchanges); EasyMock.replay(expectedScene); Scene result = runTestGetResult(SceneMode.PLAYBACK, expectedScene); Assert.assertNotNull(result); Assert.assertEquals(result.getName(), NAME); Assert.assertEquals(result.getSceneRoot(), ROOT); Assert.assertTrue(result.isReadable()); Assert.assertEquals(result.getRecordedHttpExchangeList().get(0).getUpdateTime(), now); }
@Test(expectedExceptions = IllegalStateException.class, expectedExceptionsMessageRegExp = SceneAccessLayer.THE_SCENE_IS_NOT_READABLE) public void testPlaybackNotReadable() throws IOException { Scene scene = EasyMock.createStrictMock(Scene.class); EasyMock.expect(scene.isReadable()).andReturn(false); SceneWriter sceneWriter = EasyMock.createStrictMock(SceneWriter.class); MatchRule matchRule = EasyMock.createStrictMock(MatchRule.class); RecordedHttpRequest incomingHttpRequest = EasyMock.createStrictMock(RecordedHttpRequest.class); EasyMock.replay(scene); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); sceneAccessLayer.playback(incomingHttpRequest); EasyMock.verify(scene); }
@Test(expectedExceptions = IllegalStateException.class, expectedExceptionsMessageRegExp = SceneAccessLayer.NO_MATCHING_RECORDING_FOUND) public void testPlaybackNoMatchRequest() throws IOException { Scene scene = EasyMock.createStrictMock(Scene.class); EasyMock.expect(scene.isReadable()).andReturn(true); EasyMock.expect(scene.isSequential()).andReturn(false); RecordedHttpExchange recordedHttpExchange1 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpExchange recordedHttpExchange2 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpRequest recordedHttpRequest1 = EasyMock.createStrictMock(RecordedHttpRequest.class); RecordedHttpRequest recordedHttpRequest2 = EasyMock.createStrictMock(RecordedHttpRequest.class); EasyMock.expect(recordedHttpExchange1.getRecordedHttpRequest()).andReturn(recordedHttpRequest1); EasyMock.expect(recordedHttpExchange2.getRecordedHttpRequest()).andReturn(recordedHttpRequest2); RecordedHttpRequest incomingHttpRequest = EasyMock.createStrictMock(RecordedHttpRequest.class); ArrayList<RecordedHttpExchange> recordedHttpExchangeArrayList = new ArrayList<>(); recordedHttpExchangeArrayList.add(recordedHttpExchange1); recordedHttpExchangeArrayList.add(recordedHttpExchange2); EasyMock.expect(scene.getRecordedHttpExchangeList()).andReturn(recordedHttpExchangeArrayList); SceneWriter sceneWriter = EasyMock.createStrictMock(SceneWriter.class); MatchRule matchRule = EasyMock.createStrictMock(MatchRule.class); EasyMock.expect(matchRule.test(incomingHttpRequest, recordedHttpRequest1)).andReturn(false); EasyMock.expect(matchRule.test(incomingHttpRequest, recordedHttpRequest2)).andReturn(false); EasyMock.replay(scene, recordedHttpExchange1, recordedHttpExchange2, matchRule); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); sceneAccessLayer.playback(incomingHttpRequest); EasyMock.verify(scene, recordedHttpExchange1, recordedHttpExchange2, matchRule); }
@Test public void testPlayback() throws IOException { Scene scene = EasyMock.createMock(Scene.class); EasyMock.expect(scene.isReadable()).andReturn(true).anyTimes(); EasyMock.expect(scene.isSequential()).andReturn(false).anyTimes(); SceneWriter sceneWriter = EasyMock.createStrictMock(SceneWriter.class); RecordedHttpExchange recordedHttpExchange1 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpExchange recordedHttpExchange2 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpRequest recordedHttpRequest1 = EasyMock.createStrictMock(RecordedHttpRequest.class); RecordedHttpRequest recordedHttpRequest2 = EasyMock.createStrictMock(RecordedHttpRequest.class); RecordedHttpResponse recordedHttpResponse1 = EasyMock.createStrictMock(RecordedHttpResponse.class); RecordedHttpResponse recordedHttpResponse2 = EasyMock.createStrictMock(RecordedHttpResponse.class); EasyMock.expect(recordedHttpExchange1.getRecordedHttpRequest()).andReturn(recordedHttpRequest1); EasyMock.expect(recordedHttpExchange2.getRecordedHttpRequest()).andReturn(recordedHttpRequest2); EasyMock.expect(recordedHttpExchange1.getRecordedHttpResponse()).andReturn(recordedHttpResponse1); EasyMock.expect(recordedHttpExchange2.getRecordedHttpResponse()).andReturn(recordedHttpResponse2); RecordedHttpRequest incomingHttpRequest = EasyMock.createStrictMock(RecordedHttpRequest.class); ArrayList<RecordedHttpExchange> recordedHttpExchangeArrayList = new ArrayList<>(); recordedHttpExchangeArrayList.add(recordedHttpExchange1); recordedHttpExchangeArrayList.add(recordedHttpExchange2); EasyMock.expect(scene.getRecordedHttpExchangeList()).andReturn(recordedHttpExchangeArrayList).times(2); MatchRule matchRule = EasyMock.createStrictMock(MatchRule.class); EasyMock.expect(matchRule.test(incomingHttpRequest, recordedHttpRequest1)).andReturn(true); EasyMock.replay(scene, recordedHttpExchange1, recordedHttpRequest1, matchRule); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); Assert.assertEquals(sceneAccessLayer.playback(incomingHttpRequest), recordedHttpResponse1); EasyMock.verify(scene, recordedHttpExchange1, recordedHttpRequest1, matchRule); }
SceneWriter sceneWriter = EasyMock.createMock(SceneWriter.class); EasyMock.expect(scene.isSequential()).andReturn(true).anyTimes(); EasyMock.expect(scene.isReadable()).andReturn(true).anyTimes();