Package com.google.jstestdriver.server.handlers

Source Code of com.google.jstestdriver.server.handlers.CommandGetHandler

/*
* Copyright 2010 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.server.handlers;

import com.google.common.collect.Lists;
import com.google.gson.Gson;
import com.google.inject.Inject;
import com.google.jstestdriver.BrowserInfo;
import com.google.jstestdriver.BrowserPanic;
import com.google.jstestdriver.CapturedBrowsers;
import com.google.jstestdriver.Response;
import com.google.jstestdriver.SlaveBrowser;
import com.google.jstestdriver.StreamMessage;
import com.google.jstestdriver.requesthandlers.RequestHandler;
import com.google.jstestdriver.runner.RunnerType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* @author jeremiele@google.com (Jeremie Lenfant-Engelmann)
*/
class CommandGetHandler implements RequestHandler {
  private static Logger logger = LoggerFactory.getLogger(CommandGetHandler.class);

  private final HttpServletRequest request;
  private final HttpServletResponse response;
  private final Gson gson;
  private final CapturedBrowsers capturedBrowsers;

  @Inject
  public CommandGetHandler(
      HttpServletRequest request,
      HttpServletResponse response,
      Gson gson,
      CapturedBrowsers capturedBrowsers) {
    this.request = request;
    this.response = response;
    this.gson = gson;
    this.capturedBrowsers = capturedBrowsers;
  }

  public void handleIt() throws IOException {
    // TODO(corysmith): move these command to their own handler.
    if (request.getParameter("listBrowsers") != null) {
      response.getWriter().write(listBrowsers());
    } else if (request.getParameter("nextBrowserId") != null) {
      response.getWriter().write(capturedBrowsers.getUniqueId());
    } else {
      response.setCharacterEncoding("UTF-8");
      streamResponse(request.getParameter("id"), response.getWriter());
    }
    response.getWriter().flush();
  }

  public String listBrowsers() {
    List<BrowserInfo> browsers = Lists.newArrayList();
    for (SlaveBrowser browser : capturedBrowsers.getSlaveBrowsers()) {
      if (browser.getRunnerType() != RunnerType.BROWSER) {
        browsers.add(browser.getBrowserInfo());
      }
    }
    return gson.toJson(browsers);
  }

  private void streamResponse(String id, PrintWriter writer) {
    SlaveBrowser browser = capturedBrowsers.getBrowser(id);
    writer.write(gson.toJson(getResponse(browser)));
  }

  private StreamMessage getResponse(SlaveBrowser browser) {
    StreamMessage cmdResponse = null;

    while (cmdResponse == null) {
      if (!browser.isAlive()) {
        SlaveBrowser deadBrowser = capturedBrowsers.getBrowser(browser.getId());
        capturedBrowsers.removeSlave(browser.getId());
        Response response = new Response();

        BrowserInfo browserInfo = deadBrowser.getBrowserInfo();
        response.setBrowser(browserInfo);
        response.setResponse(
            gson.toJson(
                new BrowserPanic(browserInfo,
                    String.format("Browser unresponsive since %s during %s",
                        browser.getLastHeartbeat(),
                        browser.getCommandRunning()))));
        response.setType(BrowserPanic.TYPE_NAME);
        return new StreamMessage(true, response);
      }
      cmdResponse = substituteBrowserInfo(browser.getResponse());
    }
    return cmdResponse;
  }

  private StreamMessage substituteBrowserInfo(StreamMessage cmdResponse) {
    Response response = cmdResponse.getResponse();

      SlaveBrowser slaveBrowser =
          capturedBrowsers.getBrowser(response.getBrowser().getId().toString());
    if (slaveBrowser != null) {
      response.setBrowser(slaveBrowser.getBrowserInfo());
    } else {
      BrowserInfo nullBrowserInfo = new BrowserInfo();
      nullBrowserInfo.setId(response.getBrowser().getId());
      nullBrowserInfo.setName("unknown browser");
      nullBrowserInfo.setVersion("unknown version");
      nullBrowserInfo.setOs("unknown os");
      response.setBrowser(nullBrowserInfo);
    }
    return new StreamMessage(cmdResponse.isLast(), response);
  }
}
TOP

Related Classes of com.google.jstestdriver.server.handlers.CommandGetHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.