/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.jstestdriver; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; import junit.framework.TestCase; import com.google.inject.Provider; import com.google.jstestdriver.util.NullStopWatch; /** * @author jeremiele@google.com (Jeremie Lenfant-Engelmann) */ public class JsTestDriverClientTest extends TestCase { public static class ResponseStreamFactoryStub implements ResponseStreamFactory { private ResponseStream stream; public void setResponseStream(ResponseStream stream) { this.stream = stream; } public ResponseStream getEvalActionResponseStream() { return stream; } public ResponseStream getLoadLibrariesActionResponseStream() { return stream; } public ResponseStream getLoadTestsActionResponseStream() { return stream; } public ResponseStream getResetActionResponseStream() { return stream; } public ResponseStream getDryRunActionResponseStream() { return stream; } public ResponseStream getRunTestsActionResponseStream(String testId) { return stream; } } public static class FakeResponseStream implements ResponseStream { private Response response; public void finish() { } public void stream(Response response) { this.response = response; } public Response getResponse() { return response; } } public void testSendCommand() throws Exception { MockServer server = new MockServer(); server.expect("http://localhost/heartbeat?id=1", "OK"); server.expect("http://localhost/fileSet?POST?{id=1, fileSet=[]}", ""); server.expect("http://localhost/cmd?POST?{data={\"command\":\"execute\"," + "\"parameters\":[\"cmd\"]}, id=1}", ""); server.expect("http://localhost/cmd?id=1", "{\"response\":" + "{\"response\":\"1\",\"browser\":{\"name\":\"browser1\"}," + "\"error\":\"error1\",\"executionTime\":3},\"last\":true}"); server.expect("http://localhost/heartbeat?id=2", "OK"); server.expect("http://localhost/fileSet?POST?{id=2, fileSet=[]}", ""); server.expect("http://localhost/cmd?POST?{data={\"command\":\"execute\"," + "\"parameters\":[\"cmd\"]}, id=2}", ""); server.expect("http://localhost/cmd?id=2", "{\"response\":" + "{\"response\":\"2\",\"browser\":{\"name\":\"browser2\"}," + "\"error\":\"error2\",\"executionTime\":6},\"last\":true}"); JsTestDriverClient client = new JsTestDriverClientImpl(new CommandTaskFactory( new DefaultFileFilter(), null, new Provider<HeartBeatManager>() { public HeartBeatManager get() { return new HeartBeatManagerStub(); } }, new NullStopWatch()), new LinkedHashSet<FileInfo>(), "http://localhost", server, false); FakeResponseStream stream = new FakeResponseStream(); client.eval("1", stream, "cmd"); Response response = stream.getResponse(); assertEquals("1", response.getResponse()); assertEquals("browser1", response.getBrowser().getName()); assertEquals("error1", response.getError()); assertEquals(3L, response.getExecutionTime()); client.eval("2", stream, "cmd"); response = stream.getResponse(); assertEquals("2", stream.getResponse().getResponse()); assertEquals("browser2", response.getBrowser().getName()); assertEquals("error2", response.getError()); assertEquals(6L, response.getExecutionTime()); } public void testGetListOfClients() throws Exception { MockServer server = new MockServer(); server.expect("http://localhost/cmd?listBrowsers", "[" + "{\"id\":0, \"name\":\"name0\", \"version\":\"ver0\", \"os\":\"os0\"}," + "{\"id\":1, \"name\":\"name1\", \"version\":\"ver1\", \"os\":\"os1\"}]"); JsTestDriverClient client = new JsTestDriverClientImpl(new CommandTaskFactory( new DefaultFileFilter(), null, new Provider<HeartBeatManager>() { public HeartBeatManager get() { return new HeartBeatManagerStub(); } }, new NullStopWatch()), new LinkedHashSet<FileInfo>(), "http://localhost", server, false); Collection<BrowserInfo> browsersCollection = client.listBrowsers(); List<BrowserInfo> browsers = new ArrayList<BrowserInfo>(browsersCollection); assertEquals(2, browsers.size()); BrowserInfo browser0 = browsers.get(0); assertTrue(browser0.getId().equals(0)); assertEquals("name0", browser0.getName()); assertEquals("ver0", browser0.getVersion()); assertEquals("os0", browser0.getOs()); BrowserInfo browser1 = browsers.get(1); assertTrue(browser1.getId().equals(1)); assertEquals("name1", browser1.getName()); assertEquals("ver1", browser1.getVersion()); assertEquals("os1", browser1.getOs()); } public void testRunATest() throws Exception { MockServer server = new MockServer(); server.expect("http://localhost/heartbeat?id=1", "OK"); server.expect("http://localhost/fileSet?POST?{id=1, fileSet=[]}", ""); server.expect("http://localhost/cmd?POST?{data={\"command\":\"runAllTests\"," + "\"parameters\":[\"false\",\"false\",\"\"]}, id=1}", ""); server.expect("http://localhost/cmd?id=1", "{\"response\":{\"response\":\"PASSED\"," + "\"browser\":{\"name\":\"browser\"},\"error\":\"error2\",\"executionTime\":123}," + "\"last\":true}"); JsTestDriverClient client = new JsTestDriverClientImpl(new CommandTaskFactory( new DefaultFileFilter(), null, new Provider<HeartBeatManager>() { public HeartBeatManager get() { return new HeartBeatManagerStub(); } }, new NullStopWatch()), new LinkedHashSet<FileInfo>(), "http://localhost", server, false); FakeResponseStream stream = new FakeResponseStream(); client.runAllTests("1", stream, false); assertEquals("PASSED", stream.getResponse().getResponse()); } public void testRunOneTest() throws Exception { MockServer server = new MockServer(); server.expect("http://localhost/heartbeat?id=1", "OK"); server.expect("http://localhost/fileSet?POST?{id=1, fileSet=[]}", ""); server.expect("http://localhost/cmd?POST?{data={\"command\":\"runTests\"," + "\"parameters\":[\"[\\\"testCase.testFoo\\\",\\\"testCase.testBar\\\"]\",\"false\",\"\"]}, id=1}", ""); server.expect("http://localhost/cmd?id=1", "{\"response\":{\"response\":\"PASSED\"," + "\"browser\":{\"name\":\"browser\"},\"error\":\"error2\",\"executionTime\":123}," + "\"last\":true}"); JsTestDriverClient client = new JsTestDriverClientImpl(new CommandTaskFactory( new DefaultFileFilter(), null, new Provider<HeartBeatManager>() { public HeartBeatManager get() { return new HeartBeatManagerStub(); } }, new NullStopWatch()), new LinkedHashSet<FileInfo>(), "http://localhost", server, false); FakeResponseStream stream = new FakeResponseStream(); ArrayList<String> tests = new ArrayList<String>(); tests.add("testCase.testFoo"); tests.add("testCase.testBar"); client.runTests("1", stream, tests, false); assertEquals("PASSED", stream.getResponse().getResponse()); } }