@Test public void testNotMatchUrl() throws IOException, InterruptedException { URL flashbackScene = getClass().getResource(FLASHBACK_SCENE_DIR); String rootPath = flashbackScene.getPath(); SceneConfiguration sceneConfiguration = new SceneConfiguration(rootPath, SCENE_MODE, HTTP_SCENE); try (FlashbackRunner flashbackRunner = new FlashbackRunner.Builder().mode(SCENE_MODE) .sceneAccessLayer( new SceneAccessLayer(SceneFactory.create(sceneConfiguration), MatchRuleUtils.matchEntireRequest())) .build()) { flashbackRunner.start(); HttpHost host = new HttpHost(PROXY_HOST, PROXY_PORT); String url = "http://www.notexist.org/"; HttpClient client = HttpClientBuilder.create().setProxy(host).build(); HttpGet request = new HttpGet(url); HttpResponse httpResponse = client.execute(request); Assert.assertEquals(httpResponse.getStatusLine().getStatusCode(), 400); Assert.assertTrue(EntityUtils.toString(httpResponse.getEntity()) .contains("No Matching Request")); url = "http://www.example.org/"; request = new HttpGet(url); request.addHeader("a", "b"); httpResponse = client.execute(request); Assert.assertEquals(httpResponse.getStatusLine().getStatusCode(), 400); Assert.assertTrue(EntityUtils.toString(httpResponse.getEntity()) .contains("No Matching Request")); } }
@Test public void testNotMatchHeaders() throws IOException, InterruptedException { URL flashbackScene = getClass().getResource(FLASHBACK_SCENE_DIR); String rootPath = flashbackScene.getPath(); SceneConfiguration sceneConfiguration = new SceneConfiguration(rootPath, SCENE_MODE, HTTP_SCENE); try (FlashbackRunner flashbackRunner = new FlashbackRunner.Builder().mode(SCENE_MODE) .sceneAccessLayer( new SceneAccessLayer(SceneFactory.create(sceneConfiguration), MatchRuleUtils.matchEntireRequest())) .build()) { flashbackRunner.start(); HttpHost host = new HttpHost(PROXY_HOST, PROXY_PORT); String url = "http://www.example.org/"; HttpClient client = HttpClientBuilder.create().setProxy(host).build(); HttpGet request = new HttpGet(url); request.addHeader("a", "b"); HttpResponse httpResponse = client.execute(request); Assert.assertEquals(httpResponse.getStatusLine().getStatusCode(), 400); Assert.assertTrue(EntityUtils.toString(httpResponse.getEntity()) .contains("No Matching Request")); } }
@Test public void testNotMatchMethod() throws IOException, InterruptedException { URL flashbackScene = getClass().getResource(FLASHBACK_SCENE_DIR); String rootPath = flashbackScene.getPath(); SceneConfiguration sceneConfiguration = new SceneConfiguration(rootPath, SCENE_MODE, HTTP_SCENE); try (FlashbackRunner flashbackRunner = new FlashbackRunner.Builder().mode(SCENE_MODE) .sceneAccessLayer( new SceneAccessLayer(SceneFactory.create(sceneConfiguration), MatchRuleUtils.matchEntireRequest())) .build()) { flashbackRunner.start(); HttpHost host = new HttpHost(PROXY_HOST, PROXY_PORT); String url = "http://www.example.org/"; HttpClient client = HttpClientBuilder.create().setProxy(host).build(); HttpPost post = new HttpPost(url); HttpResponse httpResponse = client.execute(post); Assert.assertEquals(httpResponse.getStatusLine().getStatusCode(), 400); Assert.assertTrue(EntityUtils.toString(httpResponse.getEntity()) .contains("No Matching Request")); } }
@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() public void testReplayHttp() throws InterruptedException, IOException { URL flashbackScene = getClass().getResource(FLASHBACK_SCENE_DIR); String rootPath = flashbackScene.getPath(); SceneConfiguration sceneConfiguration = new SceneConfiguration(rootPath, SCENE_MODE, HTTP_SCENE); try (FlashbackRunner flashbackRunner = new FlashbackRunner.Builder().mode(SCENE_MODE) .sceneAccessLayer( new SceneAccessLayer(SceneFactory.create(sceneConfiguration), MatchRuleUtils.matchEntireRequest())) .build()) { flashbackRunner.start(); HttpHost host = new HttpHost(PROXY_HOST, PROXY_PORT); String url = "http://www.example.org/"; HttpClient client = HttpClientBuilder.create().setProxy(host).build(); HttpGet request = new HttpGet(url); HttpResponse httpResponse0 = client.execute(request); Assert.assertTrue(EntityUtils.toString(httpResponse0.getEntity()) .contains("I am from Flashback scene, not http://example.org")); url = "http://www.nba.com/"; request = new HttpGet(url); HttpResponse httpResponse1 = client.execute(request); Assert.assertTrue(EntityUtils.toString(httpResponse1.getEntity()) .contains("I am from Flashback scene, not http://www.nba.com")); url = "http://www.notexist.org/"; request = new HttpGet(url); HttpResponse httpResponse2 = client.execute(request); Assert.assertEquals(httpResponse2.getStatusLine().getStatusCode(), 400); Assert.assertTrue(EntityUtils.toString(httpResponse2.getEntity()) .contains("No Matching Request")); } }
try (FlashbackRunner flashbackRunner = new FlashbackRunner.Builder().mode(SCENE_MODE) .sceneAccessLayer( new SceneAccessLayer(SceneFactory.create(sceneConfiguration), MatchRuleUtils.matchEntireRequest())) .build()) { flashbackRunner.start();
@Test public void testHasMatchRequest() throws URISyntaxException, IOException { Scene scene = EasyMock.createStrictMock(Scene.class); SceneWriter sceneWriter = EasyMock.createStrictMock(SceneWriter.class); EasyMock.expect(scene.isSequential()).andReturn(false); RecordedHttpExchange recordedHttpExchange1 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpExchange recordedHttpExchange2 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpRequest recordedHttpRequest1 = EasyMock.createStrictMock(RecordedHttpRequest.class); EasyMock.expect(recordedHttpExchange1.getRecordedHttpRequest()).andReturn(recordedHttpRequest1); RecordedHttpRequest incomingHttpRequest = EasyMock.createStrictMock(RecordedHttpRequest.class); ArrayList<RecordedHttpExchange> recordedHttpExchangeArrayList = new ArrayList<>(); recordedHttpExchangeArrayList.add(recordedHttpExchange1); recordedHttpExchangeArrayList.add(recordedHttpExchange2); EasyMock.expect(scene.getRecordedHttpExchangeList()).andReturn(recordedHttpExchangeArrayList); MatchRule matchRule = EasyMock.createStrictMock(MatchRule.class); EasyMock.expect(matchRule.test(incomingHttpRequest, recordedHttpRequest1)).andReturn(true); EasyMock.replay(scene, recordedHttpExchange1, recordedHttpRequest1, incomingHttpRequest, matchRule); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); Assert.assertTrue(sceneAccessLayer.hasMatchRequest(incomingHttpRequest)); EasyMock.verify(scene, recordedHttpExchange1, recordedHttpRequest1, incomingHttpRequest, matchRule); }
@Test public void testHasNoMatchRequest() throws URISyntaxException, IOException { Scene scene = EasyMock.createStrictMock(Scene.class); EasyMock.expect(scene.isSequential()).andReturn(false); 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); 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); 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, recordedHttpRequest1, recordedHttpRequest2, incomingHttpRequest, matchRule); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); Assert.assertFalse(sceneAccessLayer.hasMatchRequest(incomingHttpRequest)); EasyMock.verify(scene, recordedHttpExchange1, recordedHttpExchange2, recordedHttpRequest1, recordedHttpRequest2, incomingHttpRequest, matchRule); }
@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); }
SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); sceneAccessLayer.record(incomingHttpRequest, incomingHttpResponse); sceneAccessLayer.flush();
@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); }
recordedHttpRequest2, incomingHttpRequest2, matchRule); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule);
SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); sceneAccessLayer.record(incomingHttpRequest, incomingHttpResponse);
@Test public void testRecordUpdate() throws IOException { Scene scene = EasyMock.createMock(Scene.class); EasyMock.expect(scene.isSequential()).andReturn(false).anyTimes(); RecordedHttpExchange recordedHttpExchange1 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpExchange recordedHttpExchange2 = EasyMock.createStrictMock(RecordedHttpExchange.class); RecordedHttpRequest recordedHttpRequest1 = EasyMock.createStrictMock(RecordedHttpRequest.class); EasyMock.expect(recordedHttpExchange1.getRecordedHttpRequest()).andReturn(recordedHttpRequest1); RecordedHttpRequest incomingHttpRequest = EasyMock.createStrictMock(RecordedHttpRequest.class); RecordedHttpResponse incomingHttpResponse = EasyMock.createStrictMock(RecordedHttpResponse.class); ArrayList<RecordedHttpExchange> recordedHttpExchangeArrayList = new ArrayList<>(); recordedHttpExchangeArrayList.add(recordedHttpExchange1); recordedHttpExchangeArrayList.add(recordedHttpExchange2); EasyMock.expect(scene.getRecordedHttpExchangeList()).andReturn(recordedHttpExchangeArrayList).times(3); SceneWriter sceneWriter = EasyMock.createStrictMock(SceneWriter.class); MatchRule matchRule = EasyMock.createStrictMock(MatchRule.class); EasyMock.expect(matchRule.test(incomingHttpRequest, recordedHttpRequest1)).andReturn(true); sceneWriter.writeScene(scene); EasyMock.expectLastCall(); EasyMock.replay(scene, sceneWriter, recordedHttpExchange1, matchRule); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); sceneAccessLayer.record(incomingHttpRequest, incomingHttpResponse); sceneAccessLayer.flush(); List<RecordedHttpExchange> recordedHttpExchangeList = scene.getRecordedHttpExchangeList(); Assert.assertEquals(recordedHttpExchangeList.size(), 2); Assert.assertEquals(recordedHttpExchangeList.get(0).getRecordedHttpRequest(), incomingHttpRequest); Assert.assertEquals(recordedHttpExchangeList.get(0).getRecordedHttpResponse(), incomingHttpResponse); EasyMock.verify(scene, sceneWriter, recordedHttpExchange1, matchRule); }
SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); sceneAccessLayer.record(incomingHttpRequest, incomingHttpResponse); sceneAccessLayer.flush();
SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene, sceneWriter, matchRule); sceneAccessLayer.record(incomingHttpRequest, incomingHttpResponse); sceneAccessLayer.flush();
private void bootstrap() throws InterruptedException { FlashbackRunner.Builder flashbackBuilder = new FlashbackRunner.Builder().sceneAccessLayer(new SceneAccessLayer(_defaultScene, _defaultMatchRule)) .host(_proxyHost).port(_proxyPort).mode(_defaultSceneMode); if (_certificateAuthority != null && _rootCertificateInputStream != null && _rootCertificatePassphrase != null) { flashbackBuilder.certificateAuthority(_certificateAuthority).rootCertificateInputStream(_rootCertificateInputStream) .rootCertificatePassphrase(_rootCertificatePassphrase); } _flashbackRunner = flashbackBuilder.build(); _flashbackRunner.start(); } }
@Test public void testCanReplayScene() { SceneConfiguration sceneConfiguration1 = new SceneConfiguration(ROOT_PATH, SceneMode.PLAYBACK, SCENE_NAME); Scene scene1 = new Scene(sceneConfiguration1); SceneAccessLayer sceneAccessLayer = new SceneAccessLayer(scene1, EasyMock.createStrictMock(SceneWriter.class), EasyMock.createStrictMock(MatchRule.class)); Assert.assertTrue(sceneAccessLayer.canPlayback()); Scene scene2 = new Scene(new SceneConfiguration(ROOT_PATH, SceneMode.RECORD, SCENE_NAME)); sceneAccessLayer.setScene(scene2); Assert.assertFalse(sceneAccessLayer.canPlayback()); Scene scene3 = new Scene(new SceneConfiguration(ROOT_PATH, SceneMode.SEQUENTIAL_PLAYBACK, SCENE_NAME)); sceneAccessLayer.setScene(scene3); Assert.assertTrue(sceneAccessLayer.canPlayback()); Scene scene4 = new Scene(new SceneConfiguration(ROOT_PATH, SceneMode.SEQUENTIAL_RECORD, SCENE_NAME)); sceneAccessLayer.setScene(scene4); Assert.assertFalse(sceneAccessLayer.canPlayback()); }
try { FlashbackRunner.Builder builder = new FlashbackRunner.Builder().mode(_currSceneMode) .sceneAccessLayer(new SceneAccessLayer(SceneFactory.create(sceneConfiguration), namedMatchRule)); if (proxyHost != null) { builder.host(proxyHost);