{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments/54511497","id":54511497,"diff_hunk":"@@ -0,0 +1,1403 @@\n+/*\n+ * Copyright 2016 Google Inc. All Rights Reserved.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *       http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+package com.google.gcloud.dns.testing;\n+\n+import static org.junit.Assert.assertEquals;\n+import static org.junit.Assert.assertFalse;\n+import static org.junit.Assert.assertNotNull;\n+import static org.junit.Assert.assertNull;\n+import static org.junit.Assert.assertTrue;\n+import static org.junit.Assert.fail;\n+\n+import com.google.api.services.dns.model.Change;\n+import com.google.api.services.dns.model.ManagedZone;\n+import com.google.api.services.dns.model.Project;\n+import com.google.api.services.dns.model.ResourceRecordSet;\n+import com.google.common.collect.ImmutableCollection;\n+import com.google.common.collect.ImmutableList;\n+import com.google.common.collect.ImmutableMap;\n+import com.google.common.collect.ImmutableSortedMap;\n+import com.google.common.collect.Lists;\n+import com.google.gcloud.dns.DnsException;\n+import com.google.gcloud.spi.DefaultDnsRpc;\n+import com.google.gcloud.spi.DnsRpc;\n+\n+import org.junit.AfterClass;\n+import org.junit.Before;\n+import org.junit.BeforeClass;\n+import org.junit.Test;\n+\n+import java.util.HashMap;\n+import java.util.HashSet;\n+import java.util.LinkedList;\n+import java.util.List;\n+import java.util.Map;\n+\n+public class LocalDnsHelperTest {\n+\n+  private static final String RRSET_TYPE = \"A\";\n+  private static final ResourceRecordSet RRSET1 = new ResourceRecordSet();\n+  private static final ResourceRecordSet RRSET2 = new ResourceRecordSet();\n+  private static final ResourceRecordSet RRSET_KEEP = new ResourceRecordSet();\n+  private static final String PROJECT_ID1 = \"2135436541254\";\n+  private static final String PROJECT_ID2 = \"882248761325\";\n+  private static final String ZONE_NAME1 = \"my little zone\";\n+  private static final String ZONE_NAME2 = \"another zone name\";\n+  private static final ManagedZone ZONE1 = new ManagedZone();\n+  private static final ManagedZone ZONE2 = new ManagedZone();\n+  private static final String DNS_NAME = \"www.example.com.\";\n+  private static final Change CHANGE1 = new Change();\n+  private static final Change CHANGE2 = new Change();\n+  private static final Change CHANGE_KEEP = new Change();\n+  private static final Change CHANGE_COMPLEX = new Change();\n+  private static final LocalDnsHelper LOCAL_DNS_HELPER = LocalDnsHelper.create(0L); // synchronous\n+  private static final Map<DnsRpc.Option, ?> EMPTY_RPC_OPTIONS = ImmutableMap.of();\n+  private static final DnsRpc RPC =\n+      new DefaultDnsRpc(LOCAL_DNS_HELPER.options());\n+  private static final String REAL_PROJECT_ID = LOCAL_DNS_HELPER.options().projectId();\n+  private Map<String, Object> optionsMap;\n+\n+  @BeforeClass\n+  public static void before() {\n+    ZONE1.setName(ZONE_NAME1);\n+    ZONE1.setDescription(\"\");\n+    ZONE1.setDnsName(DNS_NAME);\n+    ZONE1.setNameServerSet(\"somenameserveset\");\n+    ZONE2.setName(ZONE_NAME2);\n+    ZONE2.setDescription(\"\");\n+    ZONE2.setDnsName(DNS_NAME);\n+    ZONE2.setNameServerSet(\"somenameserveset\");\n+    RRSET1.setName(DNS_NAME);\n+    RRSET1.setType(RRSET_TYPE);\n+    RRSET1.setRrdatas(ImmutableList.of(\"1.1.1.1\"));\n+    RRSET2.setName(DNS_NAME);\n+    RRSET2.setType(RRSET_TYPE);\n+    RRSET2.setRrdatas(ImmutableList.of(\"123.132.153.156\"));\n+    RRSET_KEEP.setName(DNS_NAME);\n+    RRSET_KEEP.setType(\"MX\");\n+    RRSET_KEEP.setRrdatas(ImmutableList.of(\"255.255.255.254\"));\n+    CHANGE1.setAdditions(ImmutableList.of(RRSET1, RRSET2));\n+    CHANGE2.setDeletions(ImmutableList.of(RRSET2));\n+    CHANGE_KEEP.setAdditions(ImmutableList.of(RRSET_KEEP));\n+    CHANGE_COMPLEX.setAdditions(ImmutableList.of(RRSET_KEEP));\n+    CHANGE_COMPLEX.setDeletions(ImmutableList.of(RRSET_KEEP));\n+    LOCAL_DNS_HELPER.start();\n+  }\n+\n+  @Before\n+  public void setUp() {\n+    resetProjects();\n+    optionsMap = new HashMap<>();\n+  }\n+\n+  private static void resetProjects() {\n+    for (String project : LOCAL_DNS_HELPER.projects().keySet()) {\n+      LOCAL_DNS_HELPER.projects().remove(project);\n+    }\n+  }\n+\n+  @AfterClass\n+  public static void after() {\n+    LOCAL_DNS_HELPER.stop();\n+  }\n+\n+  @Test\n+  public void testCreateZone() {\n+    ManagedZone created = RPC.create(ZONE1, EMPTY_RPC_OPTIONS);\n+    // check that default records were created\n+    DnsRpc.ListResult<ResourceRecordSet> resourceRecordSetListResult\n+        = RPC.listDnsRecords(ZONE1.getName(), EMPTY_RPC_OPTIONS);\n+    assertEquals(2, Lists.newLinkedList(resourceRecordSetListResult.results()).size());\n+    assertEquals(created, LOCAL_DNS_HELPER.findZone(REAL_PROJECT_ID, ZONE1.getName()).zone());\n+    ManagedZone zone = RPC.getZone(ZONE_NAME1, EMPTY_RPC_OPTIONS);\n+    assertEquals(created, zone);\n+    try {\n+      RPC.create(null, EMPTY_RPC_OPTIONS);\n+      fail(\"Zone cannot be null\");\n+    } catch (DnsException ex) {\n+      // expected\n+      assertEquals(400, ex.code());\n+      assertTrue(ex.getMessage().contains(\"entity.managedZone\"));\n+    }\n+    // create zone twice\n+    try {\n+      RPC.create(ZONE1, EMPTY_RPC_OPTIONS);\n+    } catch (DnsException ex) {\n+      // expected\n+      assertEquals(409, ex.code());\n+      assertTrue(ex.getMessage().contains(\"already exists\"));\n+    }\n+    // field options\n+    resetProjects();\n+    Map<DnsRpc.Option, Object> options = new HashMap<>();\n+    options.put(DnsRpc.Option.FIELDS, \"id\");\n+    zone = RPC.create(ZONE1, options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNotNull(zone.getId());\n+    resetProjects();\n+    options.put(DnsRpc.Option.FIELDS, \"creationTime\");\n+    zone = RPC.create(ZONE1, options);\n+    assertNotNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"dnsName\");\n+    resetProjects();\n+    zone = RPC.create(ZONE1, options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNotNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"description\");\n+    resetProjects();\n+    zone = RPC.create(ZONE1, options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNotNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"nameServers\");\n+    resetProjects();\n+    zone = RPC.create(ZONE1, options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNotNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"nameServerSet\");\n+    resetProjects();\n+    zone = RPC.create(ZONE1, options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNotNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    // several combined\n+    options.put(DnsRpc.Option.FIELDS, \"nameServerSet,description,id,name\");\n+    resetProjects();\n+    zone = RPC.create(ZONE1, options);\n+    assertNull(zone.getCreationTime());\n+    assertNotNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNotNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNotNull(zone.getNameServerSet());\n+    assertNotNull(zone.getId());\n+  }\n+\n+  @Test\n+  public void testGetZone() {\n+    // non-existent\n+    assertNull(RPC.getZone(ZONE_NAME1, EMPTY_RPC_OPTIONS));\n+    // existent\n+    ManagedZone created = RPC.create(ZONE1, EMPTY_RPC_OPTIONS);\n+    ManagedZone zone = RPC.getZone(ZONE_NAME1, EMPTY_RPC_OPTIONS);\n+    assertEquals(created, zone);\n+    assertEquals(ZONE1.getName(), zone.getName());\n+    // field options\n+    Map<DnsRpc.Option, Object> options = new HashMap<>();\n+    options.put(DnsRpc.Option.FIELDS, \"id\");\n+    zone = RPC.getZone(ZONE1.getName(), options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNotNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"creationTime\");\n+    zone = RPC.getZone(ZONE1.getName(), options);\n+    assertNotNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"dnsName\");\n+    zone = RPC.getZone(ZONE1.getName(), options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNotNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"description\");\n+    zone = RPC.getZone(ZONE1.getName(), options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNotNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"nameServers\");\n+    zone = RPC.getZone(ZONE1.getName(), options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNotNull(zone.getNameServers());\n+    assertNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    options.put(DnsRpc.Option.FIELDS, \"nameServerSet\");\n+    zone = RPC.getZone(ZONE1.getName(), options);\n+    assertNull(zone.getCreationTime());\n+    assertNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNotNull(zone.getNameServerSet());\n+    assertNull(zone.getId());\n+    // several combined\n+    options.put(DnsRpc.Option.FIELDS, \"nameServerSet,description,id,name\");\n+    zone = RPC.getZone(ZONE1.getName(), options);\n+    assertNull(zone.getCreationTime());\n+    assertNotNull(zone.getName());\n+    assertNull(zone.getDnsName());\n+    assertNotNull(zone.getDescription());\n+    assertNull(zone.getNameServers());\n+    assertNotNull(zone.getNameServerSet());\n+    assertNotNull(zone.getId());\n+  }\n+\n+  @Test\n+  public void testDeleteZone() {\n+    RPC.create(ZONE1, EMPTY_RPC_OPTIONS);\n+    assertTrue(RPC.deleteZone(ZONE1.getName()));\n+    assertNull(RPC.getZone(ZONE1.getName(), EMPTY_RPC_OPTIONS));\n+    // deleting non-existent zone\n+    assertFalse(RPC.deleteZone(ZONE1.getName()));\n+    assertNull(RPC.getZone(ZONE1.getName(), EMPTY_RPC_OPTIONS));\n+    RPC.create(ZONE1, EMPTY_RPC_OPTIONS);\n+    RPC.create(ZONE2, EMPTY_RPC_OPTIONS);\n+    assertNotNull(RPC.getZone(ZONE1.getName(), EMPTY_RPC_OPTIONS));\n+    assertNotNull(RPC.getZone(ZONE2.getName(), EMPTY_RPC_OPTIONS));\n+    // delete in reverse order\n+    assertTrue(RPC.deleteZone(ZONE1.getName()));\n+    assertNull(RPC.getZone(ZONE1.getName(), EMPTY_RPC_OPTIONS));\n+    assertNotNull(RPC.getZone(ZONE2.getName(), EMPTY_RPC_OPTIONS));\n+    assertTrue(RPC.deleteZone(ZONE2.getName()));\n+    assertNull(RPC.getZone(ZONE1.getName(), EMPTY_RPC_OPTIONS));\n+    assertNull(RPC.getZone(ZONE2.getName(), EMPTY_RPC_OPTIONS));\n+    RPC.create(ZONE1, EMPTY_RPC_OPTIONS);\n+    RPC.applyChangeRequest(ZONE1.getName(), CHANGE_KEEP, EMPTY_RPC_OPTIONS);\n+    try {\n+      assertFalse(RPC.deleteZone(ZONE1.getName()));\n+    } catch (DnsException ex) {\n+      // expected\n+      assertEquals(400, ex.code());\n+    }\n+  }\n+\n+  @Test\n+  public void testCreateAndApplyChangeWithThreads() {\n+    LocalDnsHelper localDnsThreaded = LocalDnsHelper.create(50L); // using threads here\n+    localDnsThreaded.createZone(PROJECT_ID1, ZONE1);\n+    assertNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"1\"));\n+    LocalDnsHelper.Response response =\n+        localDnsThreaded.createChange(PROJECT_ID1, ZONE_NAME1, CHANGE1); // add\n+    assertEquals(200, response.code());\n+    assertNotNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"1\"));\n+    assertNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"2\"));\n+    localDnsThreaded.createChange(PROJECT_ID1, ZONE_NAME1, CHANGE1); // add\n+    response = localDnsThreaded.createChange(PROJECT_ID1, ZONE_NAME1, CHANGE1); // add\n+    assertEquals(200, response.code());\n+    assertNotNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"1\"));\n+    assertNotNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"2\"));\n+    localDnsThreaded.createChange(PROJECT_ID1, ZONE_NAME1, CHANGE2); // delete\n+    assertNotNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"1\"));\n+    assertNotNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"2\"));\n+    assertNotNull(localDnsThreaded.findZone(PROJECT_ID1, ZONE_NAME1).findChange(\"3\"));\n+    localDnsThreaded.createChange(PROJECT_ID1, ZONE_NAME1, CHANGE_KEEP);\n+    // check execution\n+    Change change = localDnsThreaded.findChange(PROJECT_ID1, ZONE_NAME1, \"4\");\n+    for (int i = 0; i < 10 && !change.getStatus().equals(\"done\"); i++) {\n+      // change has not been finished yet; wait at most 20 seconds\n+      // it takes 5O ms for the thread to kick in in the first place\n+      try {\n+        Thread.sleep(2 * 1000);","path":"gcloud-java-dns/src/test/java/com/google/gcloud/dns/testing/LocalDnsHelperTest.java","position":351,"original_position":351,"commit_id":"92b5525eb3317b7875a9d040562b1c8224d71e7e","original_commit_id":"92b5525eb3317b7875a9d040562b1c8224d71e7e","user":{"login":"ajkannan","id":5316886,"avatar_url":"https://avatars.githubusercontent.com/u/5316886?v=3","gravatar_id":"","url":"https://api.github.com/users/ajkannan","html_url":"https://github.com/ajkannan","followers_url":"https://api.github.com/users/ajkannan/followers","following_url":"https://api.github.com/users/ajkannan/following{/other_user}","gists_url":"https://api.github.com/users/ajkannan/gists{/gist_id}","starred_url":"https://api.github.com/users/ajkannan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ajkannan/subscriptions","organizations_url":"https://api.github.com/users/ajkannan/orgs","repos_url":"https://api.github.com/users/ajkannan/repos","events_url":"https://api.github.com/users/ajkannan/events{/privacy}","received_events_url":"https://api.github.com/users/ajkannan/received_events","type":"User","site_admin":false},"body":"You can probably decrease this a bit considering that we've decreased the initial thread launch delay.  Maybe 1 second? Maybe 500 ms?","created_at":"2016-03-01T01:43:50Z","updated_at":"2016-03-01T01:43:50Z","html_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/656#discussion_r54511497","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments/54511497"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/656#discussion_r54511497"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656","id":59988682,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/656","diff_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/656.diff","patch_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/656.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/656","number":656,"state":"open","locked":false,"title":"Added local implementation of the service and tests.","user":{"login":"mderka","id":1192586,"avatar_url":"https://avatars.githubusercontent.com/u/1192586?v=3","gravatar_id":"","url":"https://api.github.com/users/mderka","html_url":"https://github.com/mderka","followers_url":"https://api.github.com/users/mderka/followers","following_url":"https://api.github.com/users/mderka/following{/other_user}","gists_url":"https://api.github.com/users/mderka/gists{/gist_id}","starred_url":"https://api.github.com/users/mderka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mderka/subscriptions","organizations_url":"https://api.github.com/users/mderka/orgs","repos_url":"https://api.github.com/users/mderka/repos","events_url":"https://api.github.com/users/mderka/events{/privacy}","received_events_url":"https://api.github.com/users/mderka/received_events","type":"User","site_admin":false},"body":"While reviewing this, it may be helpful to use the mapping of errors that I shared on docs. I in advance apologize for the size of the PR.","created_at":"2016-02-19T18:35:29Z","updated_at":"2016-03-01T01:43:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1753b254730b678084c1551977286c88763b7a2b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/656/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/92b5525eb3317b7875a9d040562b1c8224d71e7e","head":{"label":"mderka:dummy","ref":"dummy","sha":"92b5525eb3317b7875a9d040562b1c8224d71e7e","user":{"login":"mderka","id":1192586,"avatar_url":"https://avatars.githubusercontent.com/u/1192586?v=3","gravatar_id":"","url":"https://api.github.com/users/mderka","html_url":"https://github.com/mderka","followers_url":"https://api.github.com/users/mderka/followers","following_url":"https://api.github.com/users/mderka/following{/other_user}","gists_url":"https://api.github.com/users/mderka/gists{/gist_id}","starred_url":"https://api.github.com/users/mderka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mderka/subscriptions","organizations_url":"https://api.github.com/users/mderka/orgs","repos_url":"https://api.github.com/users/mderka/repos","events_url":"https://api.github.com/users/mderka/events{/privacy}","received_events_url":"https://api.github.com/users/mderka/received_events","type":"User","site_admin":false},"repo":{"id":49172330,"name":"gcloud-java","full_name":"mderka/gcloud-java","owner":{"login":"mderka","id":1192586,"avatar_url":"https://avatars.githubusercontent.com/u/1192586?v=3","gravatar_id":"","url":"https://api.github.com/users/mderka","html_url":"https://github.com/mderka","followers_url":"https://api.github.com/users/mderka/followers","following_url":"https://api.github.com/users/mderka/following{/other_user}","gists_url":"https://api.github.com/users/mderka/gists{/gist_id}","starred_url":"https://api.github.com/users/mderka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mderka/subscriptions","organizations_url":"https://api.github.com/users/mderka/orgs","repos_url":"https://api.github.com/users/mderka/repos","events_url":"https://api.github.com/users/mderka/events{/privacy}","received_events_url":"https://api.github.com/users/mderka/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mderka/gcloud-java","description":"Google Cloud Client Library for Java","fork":true,"url":"https://api.github.com/repos/mderka/gcloud-java","forks_url":"https://api.github.com/repos/mderka/gcloud-java/forks","keys_url":"https://api.github.com/repos/mderka/gcloud-java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mderka/gcloud-java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mderka/gcloud-java/teams","hooks_url":"https://api.github.com/repos/mderka/gcloud-java/hooks","issue_events_url":"https://api.github.com/repos/mderka/gcloud-java/issues/events{/number}","events_url":"https://api.github.com/repos/mderka/gcloud-java/events","assignees_url":"https://api.github.com/repos/mderka/gcloud-java/assignees{/user}","branches_url":"https://api.github.com/repos/mderka/gcloud-java/branches{/branch}","tags_url":"https://api.github.com/repos/mderka/gcloud-java/tags","blobs_url":"https://api.github.com/repos/mderka/gcloud-java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mderka/gcloud-java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mderka/gcloud-java/git/refs{/sha}","trees_url":"https://api.github.com/repos/mderka/gcloud-java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mderka/gcloud-java/statuses/{sha}","languages_url":"https://api.github.com/repos/mderka/gcloud-java/languages","stargazers_url":"https://api.github.com/repos/mderka/gcloud-java/stargazers","contributors_url":"https://api.github.com/repos/mderka/gcloud-java/contributors","subscribers_url":"https://api.github.com/repos/mderka/gcloud-java/subscribers","subscription_url":"https://api.github.com/repos/mderka/gcloud-java/subscription","commits_url":"https://api.github.com/repos/mderka/gcloud-java/commits{/sha}","git_commits_url":"https://api.github.com/repos/mderka/gcloud-java/git/commits{/sha}","comments_url":"https://api.github.com/repos/mderka/gcloud-java/comments{/number}","issue_comment_url":"https://api.github.com/repos/mderka/gcloud-java/issues/comments{/number}","contents_url":"https://api.github.com/repos/mderka/gcloud-java/contents/{+path}","compare_url":"https://api.github.com/repos/mderka/gcloud-java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mderka/gcloud-java/merges","archive_url":"https://api.github.com/repos/mderka/gcloud-java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mderka/gcloud-java/downloads","issues_url":"https://api.github.com/repos/mderka/gcloud-java/issues{/number}","pulls_url":"https://api.github.com/repos/mderka/gcloud-java/pulls{/number}","milestones_url":"https://api.github.com/repos/mderka/gcloud-java/milestones{/number}","notifications_url":"https://api.github.com/repos/mderka/gcloud-java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mderka/gcloud-java/labels{/name}","releases_url":"https://api.github.com/repos/mderka/gcloud-java/releases{/id}","deployments_url":"https://api.github.com/repos/mderka/gcloud-java/deployments","created_at":"2016-01-07T01:16:58Z","updated_at":"2016-01-11T19:05:33Z","pushed_at":"2016-02-29T20:19:19Z","git_url":"git://github.com/mderka/gcloud-java.git","ssh_url":"git@github.com:mderka/gcloud-java.git","clone_url":"https://github.com/mderka/gcloud-java.git","svn_url":"https://github.com/mderka/gcloud-java","homepage":"http://googlecloudplatform.github.io/gcloud-java/","size":23836,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:dns-alpha","ref":"dns-alpha","sha":"fa081accf9226519ddad731b74aaa2563654f5b4","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":26181278,"name":"gcloud-java","full_name":"GoogleCloudPlatform/gcloud-java","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-java","description":"Google Cloud Client Library for Java","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/deployments","created_at":"2014-11-04T17:57:16Z","updated_at":"2016-02-28T16:58:33Z","pushed_at":"2016-02-29T23:10:58Z","git_url":"git://github.com/GoogleCloudPlatform/gcloud-java.git","ssh_url":"git@github.com:GoogleCloudPlatform/gcloud-java.git","clone_url":"https://github.com/GoogleCloudPlatform/gcloud-java.git","svn_url":"https://github.com/GoogleCloudPlatform/gcloud-java","homepage":"http://googlecloudplatform.github.io/gcloud-java/","size":214817,"stargazers_count":67,"watchers_count":67,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":37,"mirror_url":null,"open_issues_count":127,"forks":37,"open_issues":127,"watchers":67,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/656"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/656"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/656/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/656/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/92b5525eb3317b7875a9d040562b1c8224d71e7e"}}}}