Skip to content

Commit

Permalink
4117: Added Md5String() method and updated tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
andrey-qlogic committed Jan 21, 2019
1 parent 53e2bcb commit 5a45864
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@
import com.google.api.services.storage.model.ObjectAccessControl;
import com.google.api.services.storage.model.StorageObject;
import com.google.api.services.storage.model.StorageObject.Owner;
import com.google.cloud.storage.Blob.Builder;
import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.io.BaseEncoding;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.AbstractMap;
Expand Down Expand Up @@ -674,6 +674,24 @@ public String getMd5() {
return Data.isNull(md5) ? null : md5;
}

/**
* Returns the MD5 hash of blob's data decoded to string.
*
* @see <a href="https://cloud.google.com/storage/docs/hashes-etags#_JSONAPI">Hashes and ETags:
* Best Practices</a>
*/
public String getMd5String() {
if (md5 == null) {
return null;
}
byte[] decodedMd5 = BaseEncoding.base64().decode(md5);
StringBuilder stringBuilder = new StringBuilder();
for (byte b : decodedMd5) {
stringBuilder.append(String.format("%02x", b & 0xff));
}
return stringBuilder.toString();
}

/**
* Returns the CRC32C checksum of blob's data as described in <a
* href="http://tools.ietf.org/html/rfc4960#appendix-B">RFC 4960, Appendix B;</a> encoded in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public class BlobTest {
private static final Long GENERATION = 1L;
private static final String GENERATED_ID = "B/N:1";
private static final String MD5 = "0xFF00";
private static final String MD5_STRING = "d31145d3";
private static final String MEDIA_LINK = "http://media/b/n";
private static final Map<String, String> METADATA = ImmutableMap.of("n1", "v1", "n2", "v2");
private static final Long META_GENERATION = 10L;
Expand Down Expand Up @@ -516,6 +517,7 @@ public void testBuilder() {
assertEquals(ETAG, blob.getEtag());
assertEquals(GENERATED_ID, blob.getGeneratedId());
assertEquals(MD5, blob.getMd5());
assertEquals(MD5_STRING, blob.getMd5String());
assertEquals(MEDIA_LINK, blob.getMediaLink());
assertEquals(METADATA, blob.getMetadata());
assertEquals(META_GENERATION, blob.getMetageneration());
Expand Down Expand Up @@ -547,6 +549,7 @@ public void testBuilder() {
assertNull(blob.getEtag());
assertNull(blob.getGeneratedId());
assertNull(blob.getMd5());
assertNull(blob.getMd5String());
assertNull(blob.getMediaLink());
assertNull(blob.getMetadata());
assertNull(blob.getMetageneration());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1141,6 +1141,7 @@ public void getBlobMetadata(String bucketName, String blobName) throws StorageEx
System.out.println("Id: " + blob.getBlobId());
System.out.println("KmsKeyName: " + blob.getKmsKeyName());
System.out.println("Md5Hash: " + blob.getMd5());
System.out.println("Md5String: " + blob.getMd5String());
System.out.println("MediaLink: " + blob.getMediaLink());
System.out.println("Metageneration: " + blob.getMetageneration());
System.out.println("Name: " + blob.getName());
Expand Down

0 comments on commit 5a45864

Please sign in to comment.