Skip to content

Commit

Permalink
Merge pull request #58 from Azure/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
zezha-msft authored Aug 30, 2017
2 parents e4f4cd0 + cd22026 commit 6c93408
Show file tree
Hide file tree
Showing 23 changed files with 529 additions and 128 deletions.
4 changes: 4 additions & 0 deletions ChangeLog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2017.08.30 Version 1.2.0
* Fixed a bug when using a SAS token where the token was being omitted from calls to delete a directory in the file service.
* For Standard Storage Accounts only, added the ability to set the tier of individual block blobs. The tier can currently only be set through uploadTier().

2017.07.31 Version 1.1.0
* Support for 2017-04-17 REST version. Please see our REST API documentation and blogs for information about the related added features.
* For Premium Accounts only, added support for getting and setting the tier on a page blob. The tier can also be set when creating or copying from an existing page blob.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ First, add mavenCentral to your repositories by adding the following to your gra
Then, add a dependency by adding the following to your gradle build file:

dependencies {
compile 'com.microsoft.azure.android:azure-storage-android:1.1.0@aar'
compile 'com.microsoft.azure.android:azure-storage-android:1.2.0@aar'
}

### Option 4: aar via Maven
Expand All @@ -57,7 +57,7 @@ To get the binaries of this library as distributed by Microsoft, ready for use w
<dependency>
<groupId>com.microsoft.azure.android</groupId>
<artifactId>azure-storage-android</artifactId>
<version>1.1.0</version>
<version>1.2.0</version>
<type>aar</type>
</dependency>
```
Expand Down
2 changes: 1 addition & 1 deletion microsoft-azure-storage-samples/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.microsoft.azure.storage.samples"
android:versionCode="0"
android:versionName="1.1.0" >
android:versionName="1.2.0" >

<uses-sdk
android:minSdkVersion="15"
Expand Down
2 changes: 1 addition & 1 deletion microsoft-azure-storage-test/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.microsoft.azure.android.test"
android:versionCode="0"
android:versionName="1.1.0" >
android:versionName="1.2.0" >

<uses-sdk
android:minSdkVersion="15"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,39 +121,45 @@ public void eventOccurred(ErrorReceivingResponseEvent eventArg) {
}
});

OperationContext.getGlobalErrorReceivingResponseEventHandler().addListener(new StorageEvent<ErrorReceivingResponseEvent>() {
try {
OperationContext.getGlobalErrorReceivingResponseEventHandler().addListener(new StorageEvent<ErrorReceivingResponseEvent>() {

@Override
public void eventOccurred(ErrorReceivingResponseEvent eventArg) {
fail("This event should not trigger");
}
});
@Override
public void eventOccurred(ErrorReceivingResponseEvent eventArg) {
fail("This event should not trigger");
}
});

assertEquals(0, callList.size());
assertEquals(0, globalCallList.size());
assertEquals(0, callList.size());
assertEquals(0, globalCallList.size());

CloudBlobClient blobClient = TestHelper.createCloudBlobClient();
CloudBlobContainer container = blobClient.getContainerReference("container1");
CloudBlobClient blobClient = TestHelper.createCloudBlobClient();
CloudBlobContainer container = blobClient.getContainerReference("container1");

// make sure both update
container.exists(null, null, eventContext);
assertEquals(1, callList.size());
assertEquals(1, globalCallList.size());
// make sure both update
container.exists(null, null, eventContext);
assertEquals(1, callList.size());
assertEquals(1, globalCallList.size());

// make sure only global updates
container.exists();
assertEquals(1, callList.size());
assertEquals(2, globalCallList.size());
// make sure only global updates
container.exists();
assertEquals(1, callList.size());
assertEquals(2, globalCallList.size());

OperationContext
.setGlobalResponseReceivedEventHandler(new StorageEventMultiCaster<ResponseReceivedEvent, StorageEvent<ResponseReceivedEvent>>());
eventContext
.setResponseReceivedEventHandler(new StorageEventMultiCaster<ResponseReceivedEvent, StorageEvent<ResponseReceivedEvent>>());
OperationContext
.setGlobalResponseReceivedEventHandler(new StorageEventMultiCaster<ResponseReceivedEvent, StorageEvent<ResponseReceivedEvent>>());
eventContext
.setResponseReceivedEventHandler(new StorageEventMultiCaster<ResponseReceivedEvent, StorageEvent<ResponseReceivedEvent>>());

// make sure neither update
container.exists(null, null, eventContext);
assertEquals(1, callList.size());
assertEquals(2, globalCallList.size());
// make sure neither update
container.exists(null, null, eventContext);
assertEquals(1, callList.size());
assertEquals(2, globalCallList.size());
}
finally {
// reset event handler to prevent future tests from failing
OperationContext.setGlobalErrorReceivingResponseEventHandler(new StorageEventMultiCaster<ErrorReceivingResponseEvent, StorageEvent<ErrorReceivingResponseEvent>>());
}
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,7 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.security.InvalidKeyException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.EnumSet;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TimeZone;
import java.util.*;

import static org.junit.Assert.*;

Expand Down Expand Up @@ -1733,4 +1725,82 @@ private void doCloudBlockBlobCopy(boolean sourceIsSas, boolean destinationIsSas)
destination.delete();
source.delete();
}

@Test
@Category({ DevFabricTests.class, DevStoreTests.class })
public void testCloudBlockBlobUploadStandardTier() throws StorageException, IOException, URISyntaxException {
for (StandardBlobTier standardBlobTier : StandardBlobTier.values()) {
if (standardBlobTier == StandardBlobTier.UNKNOWN) {
continue;
}

final String blobName = BlobTestHelper.generateRandomBlobNameWithPrefix("testBlob");
final CloudBlockBlob blob = this.container.getBlockBlobReference(blobName);
blob.uploadText("text");

blob.uploadStandardBlobTier(standardBlobTier);
assertEquals(standardBlobTier, blob.getProperties().getStandardBlobTier());
assertNull(blob.getProperties().getPremiumPageBlobTier());
assertNull(blob.getProperties().getRehydrationStatus());

CloudBlockBlob blob2 = this.container.getBlockBlobReference(blobName);
blob2.downloadAttributes();
assertEquals(standardBlobTier, blob2.getProperties().getStandardBlobTier());
assertNull(blob2.getProperties().getPremiumPageBlobTier());
assertNull(blob2.getProperties().getRehydrationStatus());

CloudBlockBlob blob3 = (CloudBlockBlob)this.container.listBlobs().iterator().next();
assertEquals(standardBlobTier, blob3.getProperties().getStandardBlobTier());
assertNull(blob3.getProperties().getPremiumPageBlobTier());
assertNull(blob3.getProperties().getRehydrationStatus());

blob.deleteIfExists();
}
}

@Test
@Category({ DevFabricTests.class, DevStoreTests.class })
public void testCloudBlockBlobRehydrateBlob() throws StorageException, IOException, URISyntaxException {
final String blobName1 = BlobTestHelper.generateRandomBlobNameWithPrefix("testBlob1");
final String blobName2 = BlobTestHelper.generateRandomBlobNameWithPrefix("testBlob2");
final CloudBlockBlob blob = this.container.getBlockBlobReference(blobName1);
blob.uploadText("text");
blob.uploadStandardBlobTier(StandardBlobTier.ARCHIVE);
final CloudBlockBlob blob2 = this.container.getBlockBlobReference(blobName2);
blob2.uploadText("text");
blob2.uploadStandardBlobTier(StandardBlobTier.ARCHIVE);

CloudBlockBlob blobRef1 = this.container.getBlockBlobReference(blobName1);
blobRef1.uploadStandardBlobTier(StandardBlobTier.COOL);
assertNull(blobRef1.getProperties().getRehydrationStatus());
assertEquals(StandardBlobTier.ARCHIVE, blobRef1.getProperties().getStandardBlobTier());
assertNull(blobRef1.getProperties().getPremiumPageBlobTier());

blob.downloadAttributes();
assertEquals(RehydrationStatus.PENDING_TO_COOL, blob.getProperties().getRehydrationStatus());
assertEquals(StandardBlobTier.ARCHIVE, blob.getProperties().getStandardBlobTier());
assertNull(blob.getProperties().getPremiumPageBlobTier());

CloudBlockBlob blobRef2 = this.container.getBlockBlobReference(blobName2);
blobRef2.uploadStandardBlobTier(StandardBlobTier.HOT);
assertNull(blobRef2.getProperties().getRehydrationStatus());
assertEquals(StandardBlobTier.ARCHIVE, blobRef2.getProperties().getStandardBlobTier());
assertNull(blobRef2.getProperties().getPremiumPageBlobTier());

blob2.downloadAttributes();
assertEquals(RehydrationStatus.PENDING_TO_HOT, blob2.getProperties().getRehydrationStatus());
assertEquals(StandardBlobTier.ARCHIVE, blob2.getProperties().getStandardBlobTier());
assertNull(blob2.getProperties().getPremiumPageBlobTier());

Iterator it = this.container.listBlobs().iterator();
CloudBlockBlob listBlob = (CloudBlockBlob)it.next();
assertEquals(RehydrationStatus.PENDING_TO_COOL, listBlob.getProperties().getRehydrationStatus());
assertEquals(StandardBlobTier.ARCHIVE, listBlob.getProperties().getStandardBlobTier());
assertNull(listBlob.getProperties().getPremiumPageBlobTier());

CloudBlockBlob listBlob2 = (CloudBlockBlob)it.next();
assertEquals(RehydrationStatus.PENDING_TO_HOT, listBlob2.getProperties().getRehydrationStatus());
assertEquals(StandardBlobTier.ARCHIVE, listBlob2.getProperties().getStandardBlobTier());
assertNull(listBlob2.getProperties().getPremiumPageBlobTier());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1242,39 +1242,47 @@ public void testCloudPageBlobSetPremiumBlobTierOnCreate() throws URISyntaxExcept

// Test create API
CloudPageBlob blob = container.getPageBlobReference(blobName);
assertNull(blob.getProperties().getInferredBlobTier());
assertNull(blob.getProperties().isBlobTierInferred());
blob.create(1024, PremiumPageBlobTier.P4, null, null, null);
assertEquals(PremiumPageBlobTier.P4, blob.getProperties().getPremiumPageBlobTier());
assertFalse(blob.getProperties().getInferredBlobTier());
assertFalse(blob.getProperties().isBlobTierInferred());
assertNull(blob.getProperties().getStandardBlobTier());
assertNull(blob.getProperties().getRehydrationStatus());

CloudPageBlob blob2 = container.getPageBlobReference(blobName);
blob2.downloadAttributes();
assertEquals(PremiumPageBlobTier.P4, blob2.getProperties().getPremiumPageBlobTier());
assertNull(blob2.getProperties().getInferredBlobTier());
assertNull(blob2.getProperties().isBlobTierInferred());
assertNull(blob2.getProperties().getStandardBlobTier());
assertNull(blob2.getProperties().getRehydrationStatus());

// Test upload from byte array API
byte[] buffer = BlobTestHelper.getRandomBuffer(1024);
CloudPageBlob blob3 = container.getPageBlobReference("blob3");
blob3.uploadFromByteArray(buffer, 0, 1024, PremiumPageBlobTier.P6, null, null, null);
assertEquals(PremiumPageBlobTier.P6, blob3.getProperties().getPremiumPageBlobTier());
assertFalse(blob3.getProperties().getInferredBlobTier());
assertFalse(blob3.getProperties().isBlobTierInferred());
assertNull(blob3.getProperties().getStandardBlobTier());
assertNull(blob3.getProperties().getRehydrationStatus());

CloudPageBlob blob3Ref = container.getPageBlobReference("blob3");
blob3Ref.downloadAttributes();
assertEquals(PremiumPageBlobTier.P6, blob3Ref.getProperties().getPremiumPageBlobTier());
assertNull(blob3Ref.getProperties().getInferredBlobTier());
assertNull(blob3Ref.getProperties().isBlobTierInferred());

// Test upload from stream API
ByteArrayInputStream srcStream = new ByteArrayInputStream(buffer);
CloudPageBlob blob4 = container.getPageBlobReference("blob4");
blob4.upload(srcStream, 1024, PremiumPageBlobTier.P10, null, null, null);
assertEquals(PremiumPageBlobTier.P10, blob4.getProperties().getPremiumPageBlobTier());
assertFalse(blob4.getProperties().getInferredBlobTier());
assertFalse(blob4.getProperties().isBlobTierInferred());
assertNull(blob4.getProperties().getStandardBlobTier());
assertNull(blob4.getProperties().getRehydrationStatus());

CloudPageBlob blob4Ref = container.getPageBlobReference("blob4");
blob4Ref.downloadAttributes();
assertEquals(PremiumPageBlobTier.P10, blob4Ref.getProperties().getPremiumPageBlobTier());
assertNull(blob4Ref.getProperties().getInferredBlobTier());
assertNull(blob4Ref.getProperties().isBlobTierInferred());

// Test upload from file API
File sourceFile = File.createTempFile("sourceFile", ".tmp");
Expand All @@ -1286,12 +1294,14 @@ public void testCloudPageBlobSetPremiumBlobTierOnCreate() throws URISyntaxExcept
CloudPageBlob blob5 = container.getPageBlobReference("blob5");
blob5.uploadFromFile(sourceFile.getAbsolutePath(), PremiumPageBlobTier.P20, null, null, null);
assertEquals(PremiumPageBlobTier.P20, blob5.getProperties().getPremiumPageBlobTier());
assertFalse(blob5.getProperties().getInferredBlobTier());
assertFalse(blob5.getProperties().isBlobTierInferred());
assertNull(blob5.getProperties().getStandardBlobTier());
assertNull(blob5.getProperties().getRehydrationStatus());

CloudPageBlob blob5Ref = container.getPageBlobReference("blob5");
blob5Ref.downloadAttributes();
assertEquals(PremiumPageBlobTier.P20, blob5Ref.getProperties().getPremiumPageBlobTier());
assertNull(blob5Ref.getProperties().getInferredBlobTier());
assertNull(blob5Ref.getProperties().isBlobTierInferred());
}
finally {
container.deleteIfExists();
Expand All @@ -1307,19 +1317,21 @@ public void testCloudPageBlobSetBlobTier() throws URISyntaxException, StorageExc
String blobName = BlobTestHelper.generateRandomBlobNameWithPrefix("testblob");
CloudPageBlob blob = container.getPageBlobReference(blobName);
blob.create(1024);
assertNull(blob.getProperties().getInferredBlobTier());
assertNull(blob.getProperties().isBlobTierInferred());
blob.downloadAttributes();
assertTrue(blob.getProperties().getInferredBlobTier());
assertTrue(blob.getProperties().isBlobTierInferred());
assertEquals(PremiumPageBlobTier.P10, blob.getProperties().getPremiumPageBlobTier());

blob.uploadPremiumPageBlobTier(PremiumPageBlobTier.P40);
assertEquals(PremiumPageBlobTier.P40, blob.properties.getPremiumPageBlobTier());
assertFalse(blob.getProperties().getInferredBlobTier());
assertFalse(blob.getProperties().isBlobTierInferred());
assertNull(blob.getProperties().getStandardBlobTier());
assertNull(blob.getProperties().getRehydrationStatus());

CloudPageBlob blob2 = container.getPageBlobReference(blobName);
blob2.downloadAttributes();
assertEquals(PremiumPageBlobTier.P40, blob2.properties.getPremiumPageBlobTier());
assertNull(blob2.getProperties().getInferredBlobTier());
assertNull(blob2.getProperties().isBlobTierInferred());

boolean pageBlobWithTierFound = false;
for (ListBlobItem blobItem : container.listBlobs()) {
Expand All @@ -1328,7 +1340,9 @@ public void testCloudPageBlobSetBlobTier() throws URISyntaxException, StorageExc
if (blob.getName().equals(blobName) && !pageBlobWithTierFound) {
// Check that the blob is found exactly once
assertEquals(PremiumPageBlobTier.P40, blob3.properties.getPremiumPageBlobTier());
assertFalse(blob3.getProperties().getInferredBlobTier());
assertNull(blob3.getProperties().isBlobTierInferred());
assertNull(blob3.getProperties().getStandardBlobTier());
assertNull(blob3.getProperties().getRehydrationStatus());
pageBlobWithTierFound = true;
} else if (blob.getName().equals(blobName)) {
fail("Page blob found twice");
Expand Down Expand Up @@ -1379,14 +1393,18 @@ public void testCloudPageBlobSetBlobTierOnCopy() throws URISyntaxException, Stor
assertEquals(BlobType.PAGE_BLOB, copy.getProperties().getBlobType());
assertEquals(PremiumPageBlobTier.P30, copy.getProperties().getPremiumPageBlobTier());
assertEquals(PremiumPageBlobTier.P10, source.getProperties().getPremiumPageBlobTier());
assertFalse(source.getProperties().getInferredBlobTier());
assertFalse(copy.getProperties().getInferredBlobTier());
assertFalse(source.getProperties().isBlobTierInferred());
assertFalse(copy.getProperties().isBlobTierInferred());
assertNull(source.getProperties().getStandardBlobTier());
assertNull(source.getProperties().getRehydrationStatus());
assertNull(copy.getProperties().getStandardBlobTier());
assertNull(copy.getProperties().getRehydrationStatus());
BlobTestHelper.waitForCopy(copy);

CloudPageBlob copyRef = container.getPageBlobReference("copy");
copyRef.downloadAttributes();
assertEquals(PremiumPageBlobTier.P30, copyRef.getProperties().getPremiumPageBlobTier());
assertNull(copyRef.getProperties().getInferredBlobTier());
assertNull(copyRef.getProperties().isBlobTierInferred());

// copy where source does not have a tier
CloudPageBlob source2 = container.getPageBlobReference("source2");
Expand All @@ -1397,8 +1415,12 @@ public void testCloudPageBlobSetBlobTierOnCopy() throws URISyntaxException, Stor
assertEquals(BlobType.PAGE_BLOB, copy3.getProperties().getBlobType());
assertEquals(PremiumPageBlobTier.P60, copy3.getProperties().getPremiumPageBlobTier());
assertNull(source2.getProperties().getPremiumPageBlobTier());
assertNull(source2.getProperties().getInferredBlobTier());
assertFalse(copy3.getProperties().getInferredBlobTier());
assertNull(source2.getProperties().isBlobTierInferred());
assertFalse(copy3.getProperties().isBlobTierInferred());
assertNull(source2.getProperties().getStandardBlobTier());
assertNull(source2.getProperties().getRehydrationStatus());
assertNull(copy3.getProperties().getStandardBlobTier());
assertNull(copy3.getProperties().getRehydrationStatus());
}
finally {
container.deleteIfExists();
Expand Down
Loading

0 comments on commit 6c93408

Please sign in to comment.