Skip to content
This repository has been archived by the owner on Dec 6, 2023. It is now read-only.

Commit

Permalink
Update for API v3
Browse files Browse the repository at this point in the history
* Updated library versions
* Removed support for Play
* Added encode impl for Gson
* Removed unused deprecated code
* Refactor jersey-client to use ApacheConnectorProvider to support PATCH
* Add encode support to Json providers
* Changed app Accept headers to JSON
  • Loading branch information
jkutner committed Nov 3, 2016
1 parent 2a3da24 commit 567f98b
Show file tree
Hide file tree
Showing 90 changed files with 1,032 additions and 2,206 deletions.
22 changes: 11 additions & 11 deletions heroku-api-integration-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>heroku-api-parent</artifactId>
<groupId>com.heroku.api</groupId>
<version>0.17-SNAPSHOT</version>
<version>3.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down Expand Up @@ -66,11 +66,6 @@
<artifactId>heroku-json-jersey-client</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>com.heroku.api</groupId>
<artifactId>heroku-http-play_2.9.1</artifactId>
<version>${project.parent.version}</version>
</dependency>


<!-- Test Deps -->
Expand Down Expand Up @@ -101,18 +96,24 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
<version>2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.googlecode.jmockit</groupId>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>0.999.13</version>
<version>1.28</version>
</dependency>

</dependencies>
<properties>
<guava.version>11.0.1</guava.version>
<guava.version>19.0</guava.version>
<heroku-api-integration-tests.skipTests>true</heroku-api-integration-tests.skipTests>
</properties>

Expand Down Expand Up @@ -145,7 +146,6 @@
<suiteXmlFile>src/test/resources/testng-asynchttpclient.xml</suiteXmlFile>
<suiteXmlFile>src/test/resources/testng-httpclient-jackson.xml</suiteXmlFile>
<suiteXmlFile>src/test/resources/testng-httpclient-gson.xml</suiteXmlFile>
<suiteXmlFile>src/test/resources/testng-play.xml</suiteXmlFile>
<suiteXmlFile>src/test/resources/testng-jersey-client.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.heroku.api.User;
import com.heroku.api.connection.FinagleConnection;
import com.heroku.api.request.user.UserInfo;
import com.twitter.util.Await;
import com.twitter.util.Duration;
import com.twitter.util.Future;
import org.testng.annotations.Guice;
Expand All @@ -28,7 +29,12 @@ public class FinagleConnectionTest {
@SuppressWarnings("unchecked")
public void asyncTests() {
Future<User> jsonArrayResponseFuture = connection.executeAsync(new UserInfo(), apiKey);
User user = (User) jsonArrayResponseFuture.get(Duration.fromTimeUnit(10L, TimeUnit.SECONDS)).get();
User user = null;
try {
user = Await.result(jsonArrayResponseFuture, Duration.fromTimeUnit(10L, TimeUnit.SECONDS));
} catch (Exception e) {
throw new RuntimeException(e);
}
assertEquals(user.getEmail(), IntegrationTestConfig.CONFIG.getDefaultUser().getUsername());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,12 @@
package com.heroku.api.httpclient;

import com.heroku.api.App;
import com.heroku.api.Heroku;
import com.heroku.api.IntegrationTestConfig;
import com.heroku.api.connection.HttpClientConnection;
import com.heroku.api.http.Http;
import com.heroku.api.request.addon.AddonList;
import com.heroku.api.request.app.AppList;
import mockit.Instantiation;
import mockit.Mock;
import mockit.MockClass;
import mockit.Mockit;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.AbstractHttpClient;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.protocol.HttpContext;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.IOException;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
Expand All @@ -43,66 +26,4 @@ public void asyncTests() throws ExecutionException, TimeoutException, Interrupte
List<App> jsonArrayResponse = jsonArrayResponseFuture.get(10L, TimeUnit.SECONDS);
Assert.assertTrue(jsonArrayResponse != null);
}

@Test(singleThreaded = true)
public void userAgentShouldContainHerokuJarWithVersionNumber() {
Mockit.setUpMock(AbstractHttpClient.class, new MockAbstractHttpClient(new MockHooks() {
@Override
public void beforeAssertions(HttpUriRequest request, HttpContext context) {
final String expectedUserAgent = "heroku.jar/" + Heroku.JarProperties.getProperty("heroku.jar.version") + " httpclient";
final String userAgentSent = Http.UserAgent.LATEST.getHeaderValue("httpclient");
final String userAgentReceived = request.getHeaders(Http.UserAgent.LATEST.getHeaderName())[0].getValue();
Assert.assertEquals(expectedUserAgent, userAgentSent);
Assert.assertEquals(expectedUserAgent, userAgentReceived);
}
}));
connection.execute(new AddonList(), apiKey);
Mockit.tearDownMocks(AbstractHttpClient.class);
}

@Test(singleThreaded = true)
public void cookiesShouldBeIgnored() {
// make a call to ensure a Set-Cookie is sent back to the client
Mockit.setUpMock(AbstractHttpClient.class, new MockAbstractHttpClient(new MockHooks() {
@Override
public void responseHook(BasicHttpResponse response) {
response.setHeader("Set-Cookie", "foo=bar; path=/;");
}
}));
connection.execute(new AddonList(), apiKey);

Mockit.setUpMock(AbstractHttpClient.class, new MockAbstractHttpClient(new MockHooks() {
@Override
public void beforeAssertions(HttpUriRequest request, HttpContext context) {
Assert.assertEquals(request.getHeaders("Cookie").length, 0, "Cookies should be ignored, but there are cookies present.");
}
}));
// run this twice to ensure the set-cookie was sent from the first request
connection.execute(new AddonList(), apiKey);
Mockit.tearDownMocks(AbstractHttpClient.class);
}

@MockClass(realClass = AbstractHttpClient.class, instantiation = Instantiation.PerMockSetup)
public static final class MockAbstractHttpClient {
private final MockHooks hooks;

public MockAbstractHttpClient(MockHooks hooks) {
this.hooks = hooks;
}

@Mock
public final HttpResponse execute(HttpUriRequest request, HttpContext context) throws IOException, ClientProtocolException {
hooks.beforeAssertions(request, context);
BasicHttpResponse basicHttpResponse = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
basicHttpResponse.setEntity(new StringEntity("[]"));
hooks.responseHook(basicHttpResponse);
return basicHttpResponse;
}

}

public static abstract class MockHooks {
public void beforeAssertions(HttpUriRequest request, HttpContext context) {}
public void responseHook(BasicHttpResponse response) {}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.heroku.api.parser;

import com.heroku.api.App;
import com.heroku.api.Heroku;
import com.heroku.api.exception.ParseException;
import com.heroku.api.request.app.AppInfo;
import org.testng.Assert;
Expand All @@ -12,7 +13,9 @@
import java.util.List;

import static com.heroku.api.parser.Json.parse;
import static com.heroku.api.parser.Json.encode;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;

/**
* @author mh
Expand All @@ -30,33 +33,31 @@ Object[][] getParsers() {

@Test(dataProvider = "getParsers")
public void testParseAppWithDomainList(Parser parser) throws UnsupportedEncodingException {
String appListWithConfiguredDomain = "[{\"name\":\"app\",\"stack\":\"bamboo-ree-1.8.7\",\"slug_size\":2383872,\"requested_stack\":null,\"created_at\":\"2010/06/01 07:48:24 -0700\",\"web_url\":\"http://app.heroku.com/\",\"owner_email\":\"test@heroku.com\",\"create_status\":\"complete\",\"id\":200120," +
"\"domain_name\":{\"created_at\":\"2010/06/03 19:25:08 -0700\",\"updated_at\":\"2010/06/03 19:25:08 -0700\",\"default\":null,\"domain\":\"herokuapp.com\",\"id\":1234,\"app_id\":200120,\"base_domain\":\"herokuapp.com\"}," +
"\"repo_size\":630784,\"git_url\":\"git@heroku.com:dropphotos.git\",\"repo_migrate_status\":\"complete\",\"dynos\":1,\"workers\":0}" +
String appListWithConfiguredDomain = "[{\"name\":\"app\",\"stack\":{\"name\":\"cedar-14\"},\"slug_size\":2383872,\"requested_stack\":null,\"created_at\":\"2010/06/01 07:48:24 -0700\",\"web_url\":\"http://app.heroku.com/\",\"owner_email\":\"test@heroku.com\",\"create_status\":\"complete\",\"id\":200120," +
"\"domain_name\":{\"created_at\":\"2010/06/03 19:25:08 -0700\",\"updated_at\":\"2010/06/03 19:25:08 -0700\",\"status\":\"pending\",\"hostname\":\"herokuapp.com\",\"id\":1234}," +
"\"repo_size\":630784,\"git_url\":\"git@heroku.com:dropphotos.git\",\"maintenance\":\"false\"}" +
"]";

final List<App> appList = parser.parse(appListWithConfiguredDomain.getBytes("UTF-8"), APP_LIST_TYPE);
Assert.assertEquals(appList.size(), 1);
final App app = appList.get(0);
Assert.assertEquals(app.getName(), "app");
Assert.assertEquals(app.getDomain().getDomain(), "herokuapp.com");
Assert.assertEquals(app.getDomain().getDefault(), null);
Assert.assertEquals(app.getDynos(), 1);
Assert.assertEquals(app.getDomain().getHostname(), "herokuapp.com");
Assert.assertEquals(app.getDomain().getStatus(), "pending");
}

@Test(dataProvider = "getParsers")
public void testParseAppWithoutDomainList(Parser parser) throws UnsupportedEncodingException {
String appListWithConfiguredDomain = "[{\"name\":\"app\",\"stack\":\"bamboo-ree-1.8.7\",\"slug_size\":2383872,\"requested_stack\":null,\"created_at\":\"2010/06/01 07:48:24 -0700\",\"web_url\":\"http://app.heroku.com/\",\"owner_email\":\"test@heroku.com\",\"create_status\":\"complete\",\"id\":200120," +
String appListWithConfiguredDomain = "[{\"name\":\"app\",\"stack\":{\"name\":\"cedar-14\"},\"slug_size\":2383872,\"requested_stack\":null,\"created_at\":\"2010/06/01 07:48:24 -0700\",\"web_url\":\"http://app.heroku.com/\",\"owner_email\":\"test@heroku.com\",\"create_status\":\"complete\",\"id\":200120," +
"\"domain_name\":null," +
"\"repo_size\":630784,\"git_url\":\"git@heroku.com:dropphotos.git\",\"repo_migrate_status\":\"complete\",\"dynos\":1,\"workers\":0}" +
"\"repo_size\":630784,\"git_url\":\"git@heroku.com:dropphotos.git\",\"maintenance\":\"false\"}" +
"]";

final List<App> appList = parser.parse(appListWithConfiguredDomain.getBytes("UTF-8"), APP_LIST_TYPE);
Assert.assertEquals(appList.size(), 1);
final App app = appList.get(0);
Assert.assertEquals(app.getName(), "app");
Assert.assertEquals(app.getDomain(), null);
Assert.assertEquals(app.getDynos(), 1);
}

@Test(dataProvider = "getParsers")
Expand Down Expand Up @@ -88,6 +89,14 @@ public void invalidJSONShouldThrowParseException() {
parse("{{".getBytes(), AppInfo.class);
}

@Test
public void testEncodeApp() {
App a = new App().on(Heroku.Stack.Cedar14);
a.setMaintenance(true);
String json = encode(a);
assertTrue(json.indexOf("true") != 0);
}

public static class SubAppInfo extends AppInfo {
public SubAppInfo(String appName) {
super(appName);
Expand Down

This file was deleted.

Loading

0 comments on commit 567f98b

Please sign in to comment.