Package com.google.testing.testify.risk.frontend.server.rpc.impl

Source Code of com.google.testing.testify.risk.frontend.server.rpc.impl.TestProjectCreatorRpcImpl

// Copyright 2011 Google Inc. All Rights Reseved.
//
// 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.testing.testify.risk.frontend.server.rpc.impl;

import com.google.common.collect.Lists;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.testing.testify.risk.frontend.model.Attribute;
import com.google.testing.testify.risk.frontend.model.Bug;
import com.google.testing.testify.risk.frontend.model.Capability;
import com.google.testing.testify.risk.frontend.model.Checkin;
import com.google.testing.testify.risk.frontend.model.Component;
import com.google.testing.testify.risk.frontend.model.DataSource;
import com.google.testing.testify.risk.frontend.model.FailureRate;
import com.google.testing.testify.risk.frontend.model.Project;
import com.google.testing.testify.risk.frontend.model.TestCase;
import com.google.testing.testify.risk.frontend.model.UserImpact;
import com.google.testing.testify.risk.frontend.server.service.DataService;
import com.google.testing.testify.risk.frontend.server.service.ProjectService;
import com.google.testing.testify.risk.frontend.server.service.UserService;
import com.google.testing.testify.risk.frontend.server.util.ServletUtils;
import com.google.testing.testify.risk.frontend.shared.rpc.TestProjectCreatorRpc;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;

/**
* A simple servlet that allows an admin to create a test project populated with some data.
* Useful for testing purposes and to make sure everything is working how it should.
*
* @author jimr@google.com (Jim Reardon)
*/
@Singleton
public class TestProjectCreatorRpcImpl extends RemoteServiceServlet
    implements TestProjectCreatorRpc {

  private static final Logger LOG = Logger.getLogger(TestProjectCreatorRpcImpl.class.getName());

  private final ProjectService projectService;
  private final UserService userService;
  private final DataService dataService;
  private final PersistenceManagerFactory pmf;

  @Inject
  public TestProjectCreatorRpcImpl(ProjectService projectService, UserService userService,
        DataService dataService, PersistenceManagerFactory pmf) {
    this.projectService = projectService;
    this.userService = userService;
    this.dataService = dataService;
    this.pmf = pmf;
  }

  @SuppressWarnings("unchecked")
  @Override
  public void createStandardDataSources() {
    LOG.info("Injecting standard datasources.");
    boolean admin = userService.hasAdministratorAccess();
    boolean devMode = userService.isDevMode();
    ServletUtils.requireAccess(admin || devMode);

    DataSource bugSource = new DataSource();
    bugSource.setInternalOnly(true);
    bugSource.setName("Bug Database");
    bugSource.setParameters(Lists.newArrayList("Path", "Hotlist"));

    DataSource testManager = new DataSource();
    testManager.setInternalOnly(true);
    testManager.setName("Test Database");
    testManager.setParameters(Lists.newArrayList("Label", "ProjectID", "SavedSearchID"));

    DataSource perforce = new DataSource();
    perforce.setInternalOnly(true);
    perforce.setName("Perforce");
    perforce.setParameters(Lists.newArrayList("Path"));

    DataSource issueTracker = new DataSource();
    issueTracker.setInternalOnly(false);
    issueTracker.setName("Issue Tracker");
    issueTracker.setParameters(Lists.newArrayList("Project", "Label", "Owner"));

    DataSource other = new DataSource();
    other.setInternalOnly(false);
    other.setName("Other...");
    other.setParameters(new ArrayList<String>());

    List<DataSource> all = Lists.newArrayList(
        bugSource, testManager, perforce, issueTracker, other);
    PersistenceManager pm = pmf.getPersistenceManager();
    try {
      // Remove any data source from what we will persist if it already exists.
      DataSource source;
      Iterator<DataSource> i = all.iterator();
      while (i.hasNext()) {
        source = i.next();
        Query query = pm.newQuery(DataSource.class);
        query.declareParameters("String nameParam");
        query.setFilter("name == nameParam");
        if (((List<DataSource>) query.execute(source.getName())).size() > 0) {
          i.remove();
        }
      }
      pm.makePersistentAll(all);
    } finally {
      pm.close();
    }
  }

  @Override
  public Project createTestProject() {
    LOG.info("Starting to create a sample project...");
    boolean admin = userService.hasAdministratorAccess();
    boolean devMode = userService.isDevMode();
    ServletUtils.requireAccess(admin || devMode);

    // Project.
    LOG.info("Creating project.");
    Project project = new Project();
    String testDescription = "An example project created by TestProjectCreator.";
    project.setDescription(testDescription);
    project.setName("Test Project " + System.currentTimeMillis());
    Long projectId = projectService.createProject(project);

    // Attributes.
    LOG.info("Creating attributes.");
    List<Attribute> attributes = Lists.newArrayList();
    Attribute attr1 = new Attribute();
    attr1.setParentProjectId(projectId);
    attr1.setName("Fast");
    attr1.setDescription("This should be speedy.");
    attr1.addLabel("owner: alaska@example");
    attr1.addLabel("pm: will@example");
    attr1.setAttributeId(projectService.createAttribute(attr1));
    attributes.add(attr1);

    Attribute attr2 = new Attribute();
    attr2.setParentProjectId(projectId);
    attr2.setName("Simple");
    attr2.addLabel("owner: alaska@example");
    attr2.setAttributeId(projectService.createAttribute(attr2));
    attributes.add(attr2);

    Attribute attr3 = new Attribute();
    attr3.setParentProjectId(projectId);
    attr3.setName("Secure");
    attr3.addLabel("owner: margo@example");
    attr3.addLabel("tester: quentin@example");
    attr3.setAttributeId(projectService.createAttribute(attr3));
    attributes.add(attr3);

    // Components.
    LOG.info("Creating components.");
    ArrayList<Component> components = Lists.newArrayList();
    Component comp1 = new Component(projectId);
    comp1.setName("Shopping Cart");
    comp1.addLabel("dev lead: miles@example");
    comp1.addLabel("tester: katherine@example");
    comp1.setDescription("Contains items people want to buy.");
    comp1.setComponentId(projectService.createComponent(comp1));
    components.add(comp1);

    Component comp2 = new Component(projectId);
    comp2.setName("Sales Channel");
    comp2.addLabel("dev lead: colin@example");
    comp2.setComponentId(projectService.createComponent(comp2));
    components.add(comp2);

    Component comp3 = new Component(projectId);
    comp3.setName("Social");
    comp3.addLabel("owner: alaska@example");
    comp3.setComponentId(projectService.createComponent(comp3));
    components.add(comp3);

    Component comp4 = new Component(projectId);
    comp4.setName("Search");
    comp4.setComponentId(projectService.createComponent(comp4));
    components.add(comp4);

    // Capabilities.
    LOG.info("Creating capabilities.");
    ArrayList<Capability> capabilities = Lists.newArrayList();
    Capability capa1 = new Capability(
        projectId, attributes.get(0).getAttributeId(), components.get(1).getComponentId());
    capa1.setName("Credit card processing takes less than 5 seconds");
    capa1.setFailureRate(FailureRate.OFTEN);
    capa1.addLabel("external");
    capa1.addLabel("load test");
    capa1.setDescription("Order is completed from clicking 'ORDER NOW' to success page.");
    capa1.setUserImpact(UserImpact.MINIMAL);
    capa1.setCapabilityId(projectService.createCapability(capa1).getCapabilityId());
    capabilities.add(capa1);

    Capability capa2 = new Capability(
        projectId, attributes.get(0).getAttributeId(), components.get(1).getComponentId());
    capa2.setName("Saved addresses and credit cards appear quickly");
    capa2.setFailureRate(FailureRate.OCCASIONALLY);
    capa2.setUserImpact(UserImpact.MAXIMAL);
    capa2.setCapabilityId(projectService.createCapability(capa2).getCapabilityId());
    capabilities.add(capa2);

    Capability capa3 = new Capability(
        projectId, attributes.get(2).getAttributeId(), components.get(1).getComponentId());
    capa3.setName("All traffic is sent over https");
    capa3.addLabel("ssl");
    capa3.setFailureRate(FailureRate.NA);
    capa3.setUserImpact(UserImpact.MAXIMAL);
    capa3.setCapabilityId(projectService.createCapability(capa3).getCapabilityId());
    capabilities.add(capa3);

    Capability capa4 = new Capability(
        projectId, attributes.get(2).getAttributeId(), components.get(3).getComponentId());
    capa4.setName("Items removed from inventory do not appear in search");
    capa4.setFailureRate(FailureRate.VERY_RARELY);
    capa4.setUserImpact(UserImpact.NA);
    capa4.setCapabilityId(projectService.createCapability(capa4).getCapabilityId());
    capabilities.add(capa4);

    // Bugs.
    LOG.info("Creating bugs.");
    List<Bug> bugs = Lists.newArrayList();
    Bug bug1 = new Bug();
    bug1.setExternalId(42L);
    bug1.setTitle("SSL certificate error in some browsers.");
    bug1.addBugGroup("security");
    bug1.addBugGroup("checkout");
    bug1.setParentProjectId(projectId);
    bug1.setPriority(1L);
    bug1.setSeverity(2L);
    bug1.setState("Open");
    bug1.setTargetCapabilityId(capabilities.get(0).getCapabilityId());
    bug1.setStateDate(System.currentTimeMillis() - (84000000 * 4));
    bug1.setBugUrl("http://example/42");
    dataService.addBug(bug1);
    bugs.add(bug1);

    Bug bug2 = new Bug();
    bug2.setExternalId(123L);
    bug2.setTitle("+1 button is not showing on products with prime number IDs.");
    bug2.addBugGroup("social");
    bug2.addBugGroup("browsing");
    bug2.setParentProjectId(projectId);
    bug2.setPriority(1L);
    bug2.setSeverity(2L);
    bug2.setState("Open");
    bug2.setTargetCapabilityId(capabilities.get(0).getCapabilityId());
    bug2.setStateDate(System.currentTimeMillis() - (84000000 * 2));
    bug2.setBugUrl("http://example/123");
    dataService.addBug(bug2);
    bugs.add(bug2);

    Bug bug3 = new Bug();
    bug3.setExternalId(122L);
    bug3.setTitle("Search results always return developer's favorite item");
    bug3.addBugGroup("search");
    bug3.addBugGroup("accuracy");
    bug3.setParentProjectId(projectId);
    bug3.setPriority(4L);
    bug3.setSeverity(4L);
    bug3.setTargetCapabilityId(capabilities.get(0).getCapabilityId());
    bug3.setState("Closed");
    bug3.setStateDate(System.currentTimeMillis() - (84000000 * 10));
    bug3.setBugUrl("http://example/34121");
    dataService.addBug(bug3);
    bugs.add(bug3);

    // Checkins.
    LOG.info("Creating checkins.");
    Checkin checkin1 = new Checkin();
    checkin1.setChangeUrl("http://example/code/16358580");
    checkin1.setExternalId(16358580L);
    checkin1.addDirectoryTouched("java/com/example/DoorKnobFactoryFactory");
    checkin1.setParentProjectId(projectId);
    checkin1.setTargetCapabilityId(capabilities.get(0).getCapabilityId());
    checkin1.setStateDate(System.currentTimeMillis() - (84000000 * 2));
    checkin1.setSummary("Add factory to create a factory to provide Door Knob objects.");
    dataService.addCheckin(checkin1);

    Checkin checkin2 = new Checkin();
    checkin2.setChangeUrl("http://example/code/16358581");
    checkin2.setExternalId(16358581L);
    checkin2.addDirectoryTouched("java/com/example/Search");
    checkin2.setParentProjectId(projectId);
    checkin2.setStateDate(System.currentTimeMillis() - (84000000 * 7));
    checkin2.setSummary("Search engine optimizations");
    dataService.addCheckin(checkin2);

    // Tests.
    LOG.info("Creating tests.");
    TestCase testcase1 = new TestCase();
    testcase1.setParentProjectId(projectId);
    testcase1.setExternalId(1042L);
    testcase1.setTestCaseUrl("http://example/test/1042");
    testcase1.setTitle("Search for 'dogfood'");
    testcase1.setTargetAttributeId(attributes.get(1).getAttributeId());
    testcase1.setTargetComponentId(components.get(1).getComponentId());
    dataService.addTestCase(testcase1);

    TestCase testcase2 = new TestCase();
    testcase2.setParentProjectId(projectId);
    testcase2.setExternalId(1043L);
    testcase2.setTestCaseUrl("http://example/test/1043");
    testcase2.setTitle("Post an item to your favorite social network via sharing functions");
    testcase2.setTargetCapabilityId(capabilities.get(3).getCapabilityId());
    dataService.addTestCase(testcase2);

    for (int i = 0; i < 6; i++) {
      TestCase testcase3 = new TestCase();
      testcase3.setParentProjectId(projectId);
      testcase3.setExternalId(Long.valueOf(1044 + i * 100));
      testcase3.setTestCaseUrl("http://example/test/" + i);
      testcase3.setTitle("Some Random Automated Test " + i);
      testcase3.setState("Passed");
      testcase3.setStateDate(System.currentTimeMillis() - (84000000L * i));
      testcase3.setTargetCapabilityId(capabilities.get(0).getCapabilityId());
      dataService.addTestCase(testcase3);
    }

    for (int i = 0; i < 4; i++) {
      TestCase testcase4 = new TestCase();
      testcase4.setParentProjectId(projectId);
      testcase4.setExternalId(Long.valueOf(1045 + i * 100));
      testcase4.setTestCaseUrl("http://example/test/" + i);
      testcase4.setTitle("Some Random Manual Test " + i);
      testcase4.setState("Failed");
      testcase4.setStateDate(System.currentTimeMillis() - (84000000L * i));
      testcase4.setTargetCapabilityId(capabilities.get(0).getCapabilityId());
      dataService.addTestCase(testcase4);
    }

    for (int i = 0; i < 2; i++) {
      TestCase testcase5 = new TestCase();
      testcase5.setParentProjectId(projectId);
      testcase5.setExternalId(Long.valueOf(1046 + i * 100));
      testcase5.setTestCaseUrl("http://example/test/" + i);
      testcase5.setTitle("Test We Never Run " + i);
      testcase5.setTargetCapabilityId(capabilities.get(0).getCapabilityId());
      dataService.addTestCase(testcase5);
    }

    LOG.info("Done.  Returning created project.");
    return project;
  }
}
TOP

Related Classes of com.google.testing.testify.risk.frontend.server.rpc.impl.TestProjectCreatorRpcImpl

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.