{"action":"created","comment":{"url":"https://api.github.com/repos/intel-hadoop/chimera/pulls/comments/53808756","id":53808756,"diff_hunk":"@@ -0,0 +1,290 @@\n+/**\n+ * Licensed to the Apache Software Foundation (ASF) under one\n+ * or more contributor license agreements.  See the NOTICE file\n+ * distributed with this work for additional information\n+ * regarding copyright ownership.  The ASF licenses this file\n+ * to you under the Apache License, Version 2.0 (the\n+ * \"License\"); you may not use this file except in compliance\n+ * with the License.  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+package com.intel.chimera.stream;\n+\n+import java.io.ByteArrayInputStream;\n+import java.io.ByteArrayOutputStream;\n+import java.io.IOException;\n+import java.io.InputStream;\n+import java.io.OutputStream;\n+import java.nio.ByteBuffer;\n+import java.nio.channels.Channels;\n+import java.nio.channels.ReadableByteChannel;\n+import java.security.SecureRandom;\n+import java.util.Properties;\n+import java.util.Random;\n+\n+import com.intel.chimera.cipher.Cipher;\n+import com.intel.chimera.cipher.CipherTransformation;\n+import com.intel.chimera.cipher.JceCipher;\n+import com.intel.chimera.cipher.OpensslCipher;\n+import com.intel.chimera.utils.ReflectionUtils;\n+import org.junit.Assert;\n+import org.junit.Before;\n+import org.junit.Test;\n+\n+public abstract class AbstractCryptoStreamTest {\n+  private final int dataLen = 20000;\n+  private byte[] data = new byte[dataLen];\n+  private byte[] encData;\n+  private Properties props;\n+  private byte[] key = new byte[16];\n+  private byte[] iv = new byte[16];\n+\n+  private ByteArrayOutputStream baos = new ByteArrayOutputStream();\n+\n+  protected static int defaultBufferSize = 8192;\n+  protected static int smallBufferSize = 1024;\n+\n+  private final String jceCipherClass = JceCipher.class.getName();\n+  private final String opensslCipherClass = OpensslCipher.class.getName();\n+  protected CipherTransformation transformation;\n+\n+  public abstract void setUp() throws IOException;\n+\n+  @Before\n+  public void before() throws IOException {\n+    Random random = new SecureRandom();\n+    random.nextBytes(data);\n+    random.nextBytes(key);\n+    random.nextBytes(iv);\n+    props = new Properties();\n+    setUp();\n+  }\n+\n+  /** Test skip. */\n+  @Test(timeout=120000)\n+  public void testSkip() throws Exception {\n+    prepareData();\n+\n+    doSkipTest(jceCipherClass, false);\n+    doSkipTest(opensslCipherClass, false);\n+\n+    doSkipTest(jceCipherClass, true);\n+    doSkipTest(opensslCipherClass, true);\n+  }\n+\n+  /** Test byte buffer read with different buffer size. */\n+  @Test(timeout=120000)\n+  public void testByteBufferRead() throws Exception {\n+    prepareData();\n+\n+    doByteBufferRead(jceCipherClass, false);\n+    doByteBufferRead(opensslCipherClass, false);\n+\n+    doByteBufferRead(jceCipherClass, true);\n+    doByteBufferRead(opensslCipherClass, true);\n+  }\n+\n+  /** Test byte buffer write. */\n+  @Test(timeout=120000)\n+  public void testByteBufferWrite() throws Exception {\n+    doByteBufferWrite(jceCipherClass, false);\n+    doByteBufferWrite(opensslCipherClass, false);\n+\n+    doByteBufferWrite(jceCipherClass, true);\n+    doByteBufferWrite(opensslCipherClass, true);\n+  }\n+\n+  private void doSkipTest(String cipherClass, boolean withChannel) throws IOException {\n+    InputStream in = getCryptoInputStream(cipherClass, defaultBufferSize, withChannel);\n+    byte[] result = new byte[dataLen];\n+    int n1 = readAll(in, result, 0, dataLen / 3);\n+\n+    long skipped = in.skip(dataLen / 3);\n+    int n2 = readAll(in, result, 0, dataLen);\n+\n+    Assert.assertEquals(dataLen, n1 + skipped + n2);\n+    byte[] readData = new byte[n2];\n+    System.arraycopy(result, 0, readData, 0, n2);\n+    byte[] expectedData = new byte[n2];\n+    System.arraycopy(data, dataLen - n2, expectedData, 0, n2);\n+    Assert.assertArrayEquals(readData, expectedData);\n+\n+    try {\n+      skipped = in.skip(-3);\n+      Assert.fail(\"Skip Negative length should fail.\");\n+    } catch (IllegalArgumentException e) {\n+      Assert.assertTrue(e.getMessage().contains(\"Negative skip length\"));\n+    }\n+\n+    // Skip after EOF\n+    skipped = in.skip(3);\n+    Assert.assertEquals(skipped, 0);\n+\n+    in.close();\n+  }\n+\n+  private void doByteBufferRead(String cipherClass, boolean withChannel) throws Exception {\n+    // Default buffer size, initial buffer position is 0\n+    InputStream in = getCryptoInputStream(cipherClass, defaultBufferSize, withChannel);\n+    ByteBuffer buf = ByteBuffer.allocate(dataLen + 100);\n+    byteBufferReadCheck(in, buf, 0);\n+    in.close();\n+\n+    // Default buffer size, initial buffer position is not 0\n+    in = getCryptoInputStream(cipherClass, defaultBufferSize, withChannel);\n+    buf.clear();\n+    byteBufferReadCheck(in, buf, 11);\n+    in.close();\n+\n+    // Small buffer size, initial buffer position is 0\n+    in = getCryptoInputStream(cipherClass, smallBufferSize, withChannel);\n+    buf.clear();\n+    byteBufferReadCheck(in, buf, 0);\n+    in.close();\n+\n+    // Small buffer size, initial buffer position is not 0\n+    in = getCryptoInputStream(cipherClass, smallBufferSize, withChannel);\n+    buf.clear();\n+    byteBufferReadCheck(in, buf, 11);\n+    in.close();\n+\n+    // Direct buffer, default buffer size, initial buffer position is 0\n+    in = getCryptoInputStream(cipherClass, defaultBufferSize, withChannel);\n+    buf = ByteBuffer.allocateDirect(dataLen + 100);\n+    byteBufferReadCheck(in, buf, 0);\n+    in.close();\n+\n+    // Direct buffer, default buffer size, initial buffer position is not 0\n+    in = getCryptoInputStream(cipherClass, defaultBufferSize, withChannel);\n+    buf.clear();\n+    byteBufferReadCheck(in, buf, 11);\n+    in.close();\n+\n+    // Direct buffer, small buffer size, initial buffer position is 0\n+    in = getCryptoInputStream(cipherClass, smallBufferSize, withChannel);\n+    buf.clear();\n+    byteBufferReadCheck(in, buf, 0);\n+    in.close();\n+\n+    // Direct buffer, small buffer size, initial buffer position is not 0\n+    in = getCryptoInputStream(cipherClass, smallBufferSize, withChannel);\n+    buf.clear();\n+    byteBufferReadCheck(in, buf, 11);\n+    in.close();\n+  }\n+\n+  private void doByteBufferWrite(String cipherClass, boolean withChannel) throws Exception {\n+    CryptoOutputStream out = getCryptoOutputStream(cipherClass, defaultBufferSize, withChannel);\n+    ByteBuffer buf = ByteBuffer.allocateDirect(dataLen / 2);\n+    buf.put(data, 0, dataLen / 2);\n+    buf.flip();\n+    int n1 = out.write(buf);\n+\n+    buf.clear();\n+    buf.put(data, n1, dataLen / 3);\n+    buf.flip();\n+    int n2 = out.write(buf);\n+\n+    buf.clear();\n+    buf.put(data, n1 + n2, dataLen - n1 - n2);\n+    buf.flip();\n+    int n3 = out.write(buf);\n+\n+    Assert.assertEquals(dataLen, n1 + n2 + n3);\n+\n+    out.flush();\n+    encData = baos.toByteArray();\n+\n+    InputStream in = getCryptoInputStream(cipherClass, defaultBufferSize, withChannel);\n+    buf = ByteBuffer.allocate(dataLen + 100);\n+    byteBufferReadCheck(in, buf, 0);\n+    in.close();\n+  }\n+\n+  private void byteBufferReadCheck(InputStream in, ByteBuffer buf,\n+      int bufPos) throws Exception {\n+    buf.position(bufPos);\n+    int n = ((ReadableByteChannel) in).read(buf);\n+    Assert.assertEquals(bufPos + n, buf.position());\n+    byte[] readData = new byte[n];\n+    buf.rewind();\n+    buf.position(bufPos);\n+    buf.get(readData);\n+    byte[] expectedData = new byte[n];\n+    System.arraycopy(data, 0, expectedData, 0, n);\n+    Assert.assertArrayEquals(readData, expectedData);\n+  }\n+\n+  private void prepareData() throws IOException {\n+    Cipher cipher = null;\n+    try {\n+      cipher = (Cipher)ReflectionUtils.newInstance(\n+          ReflectionUtils.getClassByName(jceCipherClass), props, transformation);\n+    } catch (ClassNotFoundException cnfe) {\n+      throw new IOException(\"Illegal crypto cipher!\");\n+    }\n+\n+    ByteArrayOutputStream baos = new ByteArrayOutputStream();\n+    OutputStream out = new CryptoOutputStream(baos, cipher, defaultBufferSize, key, iv);\n+    out.write(data);\n+    out.flush();\n+    encData = baos.toByteArray();\n+  }\n+\n+  private CryptoInputStream getCryptoInputStream(String cipherClass, int bufferSize, boolean withChannel)\n+      throws IOException {\n+    Cipher cipher = null;\n+    try {\n+      cipher = (Cipher)ReflectionUtils.newInstance(\n+          ReflectionUtils.getClassByName(cipherClass), props, transformation);\n+    } catch (ClassNotFoundException cnfe) {\n+      throw new IOException(\"Illegal crypto cipher!\");\n+    }\n+\n+    if (withChannel) {\n+      return new CryptoInputStream(Channels.newChannel(new ByteArrayInputStream(encData)), cipher, bufferSize, key, iv);\n+    } else {\n+      return new CryptoInputStream(new ByteArrayInputStream(encData), cipher, bufferSize, key, iv);\n+    }\n+  }\n+\n+  private CryptoOutputStream getCryptoOutputStream(String cipherClass, int bufferSize, boolean withChannel)\n+      throws IOException {\n+    Cipher cipher = null;\n+    try {\n+      cipher = (Cipher)ReflectionUtils.newInstance(\n+          ReflectionUtils.getClassByName(cipherClass), props, transformation);\n+    } catch (ClassNotFoundException cnfe) {\n+      throw new IOException(\"Illegal crypto cipher!\");\n+    }\n+\n+    baos.reset();\n+    if (withChannel) {\n+      return new CryptoOutputStream(Channels.newChannel(baos), cipher, bufferSize, key, iv);\n+    } else {\n+      return new CryptoOutputStream(baos, cipher, bufferSize, key, iv);\n+    }\n+  }\n+\n+  private int readAll(InputStream in, byte[] b, int off, int len)","path":"src/test/java/com/intel/chimera/stream/AbstractCryptoStreamTest.java","position":276,"original_position":276,"commit_id":"88d234a1b7bb3b45f01d07448eaf629b274613f2","original_commit_id":"88d234a1b7bb3b45f01d07448eaf629b274613f2","user":{"login":"winningsix","id":2278268,"avatar_url":"https://avatars.githubusercontent.com/u/2278268?v=3","gravatar_id":"","url":"https://api.github.com/users/winningsix","html_url":"https://github.com/winningsix","followers_url":"https://api.github.com/users/winningsix/followers","following_url":"https://api.github.com/users/winningsix/following{/other_user}","gists_url":"https://api.github.com/users/winningsix/gists{/gist_id}","starred_url":"https://api.github.com/users/winningsix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/winningsix/subscriptions","organizations_url":"https://api.github.com/users/winningsix/orgs","repos_url":"https://api.github.com/users/winningsix/repos","events_url":"https://api.github.com/users/winningsix/events{/privacy}","received_events_url":"https://api.github.com/users/winningsix/received_events","type":"User","site_admin":false},"body":"offset","created_at":"2016-02-23T16:44:14Z","updated_at":"2016-02-23T16:44:14Z","html_url":"https://github.com/intel-hadoop/chimera/pull/63#discussion_r53808756","pull_request_url":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63","_links":{"self":{"href":"https://api.github.com/repos/intel-hadoop/chimera/pulls/comments/53808756"},"html":{"href":"https://github.com/intel-hadoop/chimera/pull/63#discussion_r53808756"},"pull_request":{"href":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63"}}},"pull_request":{"url":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63","id":60318301,"html_url":"https://github.com/intel-hadoop/chimera/pull/63","diff_url":"https://github.com/intel-hadoop/chimera/pull/63.diff","patch_url":"https://github.com/intel-hadoop/chimera/pull/63.patch","issue_url":"https://api.github.com/repos/intel-hadoop/chimera/issues/63","number":63,"state":"open","locked":false,"title":"Add Unit Tests for CryptoInputStream/CryptoOutputStream","user":{"login":"sundapeng","id":3818001,"avatar_url":"https://avatars.githubusercontent.com/u/3818001?v=3","gravatar_id":"","url":"https://api.github.com/users/sundapeng","html_url":"https://github.com/sundapeng","followers_url":"https://api.github.com/users/sundapeng/followers","following_url":"https://api.github.com/users/sundapeng/following{/other_user}","gists_url":"https://api.github.com/users/sundapeng/gists{/gist_id}","starred_url":"https://api.github.com/users/sundapeng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sundapeng/subscriptions","organizations_url":"https://api.github.com/users/sundapeng/orgs","repos_url":"https://api.github.com/users/sundapeng/repos","events_url":"https://api.github.com/users/sundapeng/events{/privacy}","received_events_url":"https://api.github.com/users/sundapeng/received_events","type":"User","site_admin":false},"body":"Fixing issue https://github.com/intel-hadoop/chimera/issues/59 : Refine and Implement tests for CryptoInputStream and CryptoOutputStream","created_at":"2016-02-23T10:31:11Z","updated_at":"2016-02-23T16:44:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"19f411e948ec42a67e41d1d35f81f211c4112ae1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63/commits","review_comments_url":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63/comments","review_comment_url":"https://api.github.com/repos/intel-hadoop/chimera/pulls/comments{/number}","comments_url":"https://api.github.com/repos/intel-hadoop/chimera/issues/63/comments","statuses_url":"https://api.github.com/repos/intel-hadoop/chimera/statuses/88d234a1b7bb3b45f01d07448eaf629b274613f2","head":{"label":"sundapeng:UT","ref":"UT","sha":"88d234a1b7bb3b45f01d07448eaf629b274613f2","user":{"login":"sundapeng","id":3818001,"avatar_url":"https://avatars.githubusercontent.com/u/3818001?v=3","gravatar_id":"","url":"https://api.github.com/users/sundapeng","html_url":"https://github.com/sundapeng","followers_url":"https://api.github.com/users/sundapeng/followers","following_url":"https://api.github.com/users/sundapeng/following{/other_user}","gists_url":"https://api.github.com/users/sundapeng/gists{/gist_id}","starred_url":"https://api.github.com/users/sundapeng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sundapeng/subscriptions","organizations_url":"https://api.github.com/users/sundapeng/orgs","repos_url":"https://api.github.com/users/sundapeng/repos","events_url":"https://api.github.com/users/sundapeng/events{/privacy}","received_events_url":"https://api.github.com/users/sundapeng/received_events","type":"User","site_admin":false},"repo":{"id":46262714,"name":"chimera","full_name":"sundapeng/chimera","owner":{"login":"sundapeng","id":3818001,"avatar_url":"https://avatars.githubusercontent.com/u/3818001?v=3","gravatar_id":"","url":"https://api.github.com/users/sundapeng","html_url":"https://github.com/sundapeng","followers_url":"https://api.github.com/users/sundapeng/followers","following_url":"https://api.github.com/users/sundapeng/following{/other_user}","gists_url":"https://api.github.com/users/sundapeng/gists{/gist_id}","starred_url":"https://api.github.com/users/sundapeng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sundapeng/subscriptions","organizations_url":"https://api.github.com/users/sundapeng/orgs","repos_url":"https://api.github.com/users/sundapeng/repos","events_url":"https://api.github.com/users/sundapeng/events{/privacy}","received_events_url":"https://api.github.com/users/sundapeng/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sundapeng/chimera","description":"Cryptographic library optimized with AES-NI","fork":true,"url":"https://api.github.com/repos/sundapeng/chimera","forks_url":"https://api.github.com/repos/sundapeng/chimera/forks","keys_url":"https://api.github.com/repos/sundapeng/chimera/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sundapeng/chimera/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sundapeng/chimera/teams","hooks_url":"https://api.github.com/repos/sundapeng/chimera/hooks","issue_events_url":"https://api.github.com/repos/sundapeng/chimera/issues/events{/number}","events_url":"https://api.github.com/repos/sundapeng/chimera/events","assignees_url":"https://api.github.com/repos/sundapeng/chimera/assignees{/user}","branches_url":"https://api.github.com/repos/sundapeng/chimera/branches{/branch}","tags_url":"https://api.github.com/repos/sundapeng/chimera/tags","blobs_url":"https://api.github.com/repos/sundapeng/chimera/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sundapeng/chimera/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sundapeng/chimera/git/refs{/sha}","trees_url":"https://api.github.com/repos/sundapeng/chimera/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sundapeng/chimera/statuses/{sha}","languages_url":"https://api.github.com/repos/sundapeng/chimera/languages","stargazers_url":"https://api.github.com/repos/sundapeng/chimera/stargazers","contributors_url":"https://api.github.com/repos/sundapeng/chimera/contributors","subscribers_url":"https://api.github.com/repos/sundapeng/chimera/subscribers","subscription_url":"https://api.github.com/repos/sundapeng/chimera/subscription","commits_url":"https://api.github.com/repos/sundapeng/chimera/commits{/sha}","git_commits_url":"https://api.github.com/repos/sundapeng/chimera/git/commits{/sha}","comments_url":"https://api.github.com/repos/sundapeng/chimera/comments{/number}","issue_comment_url":"https://api.github.com/repos/sundapeng/chimera/issues/comments{/number}","contents_url":"https://api.github.com/repos/sundapeng/chimera/contents/{+path}","compare_url":"https://api.github.com/repos/sundapeng/chimera/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sundapeng/chimera/merges","archive_url":"https://api.github.com/repos/sundapeng/chimera/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sundapeng/chimera/downloads","issues_url":"https://api.github.com/repos/sundapeng/chimera/issues{/number}","pulls_url":"https://api.github.com/repos/sundapeng/chimera/pulls{/number}","milestones_url":"https://api.github.com/repos/sundapeng/chimera/milestones{/number}","notifications_url":"https://api.github.com/repos/sundapeng/chimera/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sundapeng/chimera/labels{/name}","releases_url":"https://api.github.com/repos/sundapeng/chimera/releases{/id}","deployments_url":"https://api.github.com/repos/sundapeng/chimera/deployments","created_at":"2015-11-16T08:48:36Z","updated_at":"2016-01-11T08:35:25Z","pushed_at":"2016-02-23T10:37:03Z","git_url":"git://github.com/sundapeng/chimera.git","ssh_url":"git@github.com:sundapeng/chimera.git","clone_url":"https://github.com/sundapeng/chimera.git","svn_url":"https://github.com/sundapeng/chimera","homepage":null,"size":341,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"intel-hadoop:master","ref":"master","sha":"b04ae5079b2340906882d4cc45d7f3f0f76932e1","user":{"login":"intel-hadoop","id":1839373,"avatar_url":"https://avatars.githubusercontent.com/u/1839373?v=3","gravatar_id":"","url":"https://api.github.com/users/intel-hadoop","html_url":"https://github.com/intel-hadoop","followers_url":"https://api.github.com/users/intel-hadoop/followers","following_url":"https://api.github.com/users/intel-hadoop/following{/other_user}","gists_url":"https://api.github.com/users/intel-hadoop/gists{/gist_id}","starred_url":"https://api.github.com/users/intel-hadoop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/intel-hadoop/subscriptions","organizations_url":"https://api.github.com/users/intel-hadoop/orgs","repos_url":"https://api.github.com/users/intel-hadoop/repos","events_url":"https://api.github.com/users/intel-hadoop/events{/privacy}","received_events_url":"https://api.github.com/users/intel-hadoop/received_events","type":"Organization","site_admin":false},"repo":{"id":32968915,"name":"chimera","full_name":"intel-hadoop/chimera","owner":{"login":"intel-hadoop","id":1839373,"avatar_url":"https://avatars.githubusercontent.com/u/1839373?v=3","gravatar_id":"","url":"https://api.github.com/users/intel-hadoop","html_url":"https://github.com/intel-hadoop","followers_url":"https://api.github.com/users/intel-hadoop/followers","following_url":"https://api.github.com/users/intel-hadoop/following{/other_user}","gists_url":"https://api.github.com/users/intel-hadoop/gists{/gist_id}","starred_url":"https://api.github.com/users/intel-hadoop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/intel-hadoop/subscriptions","organizations_url":"https://api.github.com/users/intel-hadoop/orgs","repos_url":"https://api.github.com/users/intel-hadoop/repos","events_url":"https://api.github.com/users/intel-hadoop/events{/privacy}","received_events_url":"https://api.github.com/users/intel-hadoop/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/intel-hadoop/chimera","description":"Cryptographic library optimized with AES-NI","fork":false,"url":"https://api.github.com/repos/intel-hadoop/chimera","forks_url":"https://api.github.com/repos/intel-hadoop/chimera/forks","keys_url":"https://api.github.com/repos/intel-hadoop/chimera/keys{/key_id}","collaborators_url":"https://api.github.com/repos/intel-hadoop/chimera/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/intel-hadoop/chimera/teams","hooks_url":"https://api.github.com/repos/intel-hadoop/chimera/hooks","issue_events_url":"https://api.github.com/repos/intel-hadoop/chimera/issues/events{/number}","events_url":"https://api.github.com/repos/intel-hadoop/chimera/events","assignees_url":"https://api.github.com/repos/intel-hadoop/chimera/assignees{/user}","branches_url":"https://api.github.com/repos/intel-hadoop/chimera/branches{/branch}","tags_url":"https://api.github.com/repos/intel-hadoop/chimera/tags","blobs_url":"https://api.github.com/repos/intel-hadoop/chimera/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/intel-hadoop/chimera/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/intel-hadoop/chimera/git/refs{/sha}","trees_url":"https://api.github.com/repos/intel-hadoop/chimera/git/trees{/sha}","statuses_url":"https://api.github.com/repos/intel-hadoop/chimera/statuses/{sha}","languages_url":"https://api.github.com/repos/intel-hadoop/chimera/languages","stargazers_url":"https://api.github.com/repos/intel-hadoop/chimera/stargazers","contributors_url":"https://api.github.com/repos/intel-hadoop/chimera/contributors","subscribers_url":"https://api.github.com/repos/intel-hadoop/chimera/subscribers","subscription_url":"https://api.github.com/repos/intel-hadoop/chimera/subscription","commits_url":"https://api.github.com/repos/intel-hadoop/chimera/commits{/sha}","git_commits_url":"https://api.github.com/repos/intel-hadoop/chimera/git/commits{/sha}","comments_url":"https://api.github.com/repos/intel-hadoop/chimera/comments{/number}","issue_comment_url":"https://api.github.com/repos/intel-hadoop/chimera/issues/comments{/number}","contents_url":"https://api.github.com/repos/intel-hadoop/chimera/contents/{+path}","compare_url":"https://api.github.com/repos/intel-hadoop/chimera/compare/{base}...{head}","merges_url":"https://api.github.com/repos/intel-hadoop/chimera/merges","archive_url":"https://api.github.com/repos/intel-hadoop/chimera/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/intel-hadoop/chimera/downloads","issues_url":"https://api.github.com/repos/intel-hadoop/chimera/issues{/number}","pulls_url":"https://api.github.com/repos/intel-hadoop/chimera/pulls{/number}","milestones_url":"https://api.github.com/repos/intel-hadoop/chimera/milestones{/number}","notifications_url":"https://api.github.com/repos/intel-hadoop/chimera/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/intel-hadoop/chimera/labels{/name}","releases_url":"https://api.github.com/repos/intel-hadoop/chimera/releases{/id}","deployments_url":"https://api.github.com/repos/intel-hadoop/chimera/deployments","created_at":"2015-03-27T05:12:24Z","updated_at":"2016-02-05T01:16:44Z","pushed_at":"2016-02-23T10:37:03Z","git_url":"git://github.com/intel-hadoop/chimera.git","ssh_url":"git@github.com:intel-hadoop/chimera.git","clone_url":"https://github.com/intel-hadoop/chimera.git","svn_url":"https://github.com/intel-hadoop/chimera","homepage":null,"size":364,"stargazers_count":9,"watchers_count":9,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"open_issues_count":8,"forks":8,"open_issues":8,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63"},"html":{"href":"https://github.com/intel-hadoop/chimera/pull/63"},"issue":{"href":"https://api.github.com/repos/intel-hadoop/chimera/issues/63"},"comments":{"href":"https://api.github.com/repos/intel-hadoop/chimera/issues/63/comments"},"review_comments":{"href":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63/comments"},"review_comment":{"href":"https://api.github.com/repos/intel-hadoop/chimera/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/intel-hadoop/chimera/pulls/63/commits"},"statuses":{"href":"https://api.github.com/repos/intel-hadoop/chimera/statuses/88d234a1b7bb3b45f01d07448eaf629b274613f2"}}}}