@Test
  public void testGetColumns() throws Exception {
    expect(timeSeriesRepo.getAvailableSeries()).andReturn(TS_DATA.keySet());

    control.replay();

    List<String> columns =
        gson.fromJson(
            dataSource.getResponse(null, null), new TypeToken<List<String>>() {}.getType());
    assertEquals(ImmutableList.copyOf(TS_DATA.keySet()), columns);
  }
  @Test
  @SuppressWarnings("unchecked") // Needed because type information lost in vargs.
  public void testGetAllData() throws Exception {
    expect(timeSeriesRepo.getTimestamps()).andReturn(TIMESTAMPS);
    expect(timeSeriesRepo.get(TIME_SERIES_1)).andReturn(TS_DATA.get(TIME_SERIES_1));
    expect(timeSeriesRepo.get(TIME_SERIES_2)).andReturn(TS_DATA.get(TIME_SERIES_2));

    control.replay();

    String colString =
        Joiner.on(',').join(Arrays.asList(TIME_SERIES_1, TIME_SERIES_2, TIME_COLUMN));

    TimeSeriesDataSource.ResponseStruct response =
        gson.fromJson(
            dataSource.getResponse(colString, null), TimeSeriesDataSource.ResponseStruct.class);

    assertEquals(ImmutableList.of(TIME_COLUMN, TIME_SERIES_1, TIME_SERIES_2), response.names);
    Iterable<List<Number>> expectedData =
        Iterables2.zip(0, TIMESTAMPS, getSamples(TIME_SERIES_1), getSamples(TIME_SERIES_2));
    checkRows(expectedData, response.data);
  }