/**
   * Starts the server going for these tests.
   *
   * @throws Exception If problems occur setting up the server.
   */
  @BeforeClass
  public static void setupServer() throws Exception {
    ParallelStressTest.server = Server.newTestInstance();

    ParallelStressTest.adminEmail = server.getServerProperties().get(ADMIN_EMAIL_KEY);
    ParallelStressTest.adminPassword = server.getServerProperties().get(ADMIN_PASSWORD_KEY);

    ParallelStressTest.manager = (DbManager) server.getContext().getAttributes().get("DbManager");
    String adminUserUri = manager.getUser(adminEmail).toUri(server);
    System.out.print("Creating test data...");
    ParallelStressTest.START_TIMESTAMP = Tstamp.makeTimestamp("2010-01-08T00:00:00.000-10:00");
    ParallelStressTest.END_TIMESTAMP = Tstamp.makeTimestamp("2010-02-08T00:00:00.000-10:00");

    SubSources subSources = new SubSources();
    for (int i = 0; i < NUM_SOURCES; i++) {
      Source source = new Source(sourceNames[i], adminUserUri, true);
      source.addProperty(new Property(Source.SUPPORTS_ENERGY_COUNTERS, "true"));
      sources[i] = source;
      sourceURIs[i] = source.toUri(server);
      subSources.getHref().add(sourceURIs[i]);
      ParallelStressTest.manager.storeSource(source);
    }
    ParallelStressTest.virtualSource =
        new Source(source11Name, adminUserUri, true, true, "", "", "", null, subSources);
    ParallelStressTest.manager.storeSource(virtualSource);

    Date testStart = new Date();
    parallelLoad(TEST_CLIENTS, START_TIMESTAMP, END_TIMESTAMP, 15);
    Date testEnd = new Date();
    double msElapsed = testEnd.getTime() - testStart.getTime();
    System.out.format("Time to insert data: %.1f ms%n", msElapsed);
  }
  /**
   * Computes calculated energy for a virtual source many times and reports how long it took.
   *
   * @throws Exception If there are problems.
   */
  @Test
  public void testEnergyVirtualSource() throws Exception {
    final XMLGregorianCalendar startTime = Tstamp.incrementMinutes(START_TIMESTAMP, 1);
    final XMLGregorianCalendar endTime = Tstamp.incrementMinutes(END_TIMESTAMP, -30);
    final int iterations = 100;

    List<ClientThread> clients = new ArrayList<ClientThread>();
    for (int i = 0; i < TEST_CLIENTS; i++) {
      // Initialize clients
      clients.add(
          new ClientThread(i) {
            @Override
            public void run() {
              for (int j = 0; j < iterations; j++) {
                try {
                  client.getEnergyGenerated(DataGenerator.source11Name, startTime, endTime, 0);
                } catch (Exception e) {
                  e.printStackTrace();
                }
              }
            }
          });
    }

    double msElapsed = this.runClients(clients);
    System.out.format(
        "Time to compute energy for virtual source using counters generated %d times: %.1f ms%n",
        iterations, msElapsed);
    System.out.format(
        "Mean time to compute energy for virtual source using counters: %.1f ms%n",
        msElapsed / iterations);
  }
 /**
  * Computes interpolated power for a virtual source many times and reports how long it took.
  *
  * @throws Exception If there are problems.
  */
 public void testInterpolatedPowerVirtualSource() throws Exception {
   final XMLGregorianCalendar timestamp = Tstamp.makeTimestamp("2010-01-08T12:03:07.000-10:00");
   final int iterations = 1000;
   List<ClientThread> clients = new ArrayList<ClientThread>();
   for (int i = 0; i < TEST_CLIENTS; i++) {
     clients.add(
         new ClientThread(i) {
           @Override
           public void run() {
             for (int j = 0; j < iterations; j++) {
               try {
                 client.getPowerGenerated(DataGenerator.source11Name, timestamp);
               } catch (Exception e) {
                 e.printStackTrace();
               }
             }
           }
         });
   }
   double msElapsed = this.runClients(clients);
   System.out.format(
       "Time to calculate interpolated power for virtual source generated %d times: %.1f ms%n",
       iterations, msElapsed);
   System.out.format(
       "Mean time to calculate interpolated power for virtual source: %.1f ms%n",
       msElapsed / iterations);
 }
  /**
   * Computes interpolated power for a single source many times and reports how long it took.
   *
   * @throws Exception If there are problems.
   */
  @Test
  public void testInterpolatedPowerSingleSource() throws Exception {
    final XMLGregorianCalendar timestamp = Tstamp.makeTimestamp("2010-01-08T12:03:07.000-10:00");
    final int iterations = 1000;
    List<ClientThread> clients = new ArrayList<ClientThread>();
    for (int i = 0; i < TEST_CLIENTS; i++) {
      // Spawn clients
      clients.add(
          new ClientThread(i) {
            @Override
            public void run() {
              for (int j = 0; j < iterations; j++) {
                try {
                  client.getPowerGenerated(DataGenerator.getSourceName(0), timestamp);
                } catch (Exception e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
                }
              }
            }
          });
    }
    double msElapsed = this.runClients(clients);

    System.out.format(
        "Time to calculate interpolated power generated %d times: %.1f ms%n", 1000, msElapsed);
    System.out.format("Mean time to calculate interpolated power: %.1f ms%n", msElapsed / 1000);
  }