/**
* Copyright Microsoft Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.microsoft.azure.storage.queue;
import static org.junit.Assert.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.UUID;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import com.microsoft.azure.storage.LocationMode;
import com.microsoft.azure.storage.ResultSegment;
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.TestHelper;
import com.microsoft.azure.storage.TestRunners.CloudTests;
import com.microsoft.azure.storage.TestRunners.DevFabricTests;
import com.microsoft.azure.storage.TestRunners.DevStoreTests;
import com.microsoft.azure.storage.core.SR;
public final class CloudQueueClientTests {
@Category({ DevFabricTests.class, DevStoreTests.class, CloudTests.class })
@Test
public void testListQueuesSmallNumber() throws URISyntaxException, StorageException {
CloudQueueClient qClient = QueueTestHelper.createCloudQueueClient();
int initialCount = 0;
String prefix = UUID.randomUUID().toString().toLowerCase();
for (CloudQueue queue : qClient.listQueues(prefix)) {
assertNotNull(queue);
initialCount++;
}
HashMap<String, String> metadata1 = new HashMap<String, String>();
metadata1.put("ExistingMetadata1", "ExistingMetadataValue1");
for (int i = 0; i < 25; i++) {
CloudQueue q = qClient.getQueueReference(prefix + i);
q.setMetadata(metadata1);
q.create();
}
int count = 0;
for (CloudQueue queue : qClient.listQueues(prefix)) {
assertNotNull(queue);
count++;
}
assertEquals(count, initialCount + 25);
// with metadata
for (int i = 0; i < 25; i++) {
CloudQueue q = qClient.getQueueReference(prefix + "a" + i);
HashMap<String, String> metadata2 = new HashMap<String, String>();
metadata2.put("tags", q.getName());
q.setMetadata(metadata2);
q.create();
}
count = 0;
for (CloudQueue queue : qClient.listQueues(prefix + "a", QueueListingDetails.METADATA, null, null)) {
count++;
assertTrue(queue.getMetadata().size() == 1 && queue.getMetadata().get("tags").equals(queue.getName()));
}
assertEquals(count, 25);
}
@Category({ DevFabricTests.class, DevStoreTests.class, CloudTests.class })
@Test
public void testListQueuesAndListQueuesSegmentedLargeNumber() throws URISyntaxException, StorageException {
CloudQueueClient qClient = QueueTestHelper.createCloudQueueClient();
int count = 0;
String prefix = UUID.randomUUID().toString();
for (CloudQueue queue : qClient.listQueues(prefix)) {
assertNotNull(queue);
count++;
}
int totalLimit = 505;
if (count < totalLimit) {
NumberFormat myFormat = NumberFormat.getInstance();
myFormat.setMinimumIntegerDigits(4);
for (int i = 0; i < totalLimit - count; i++) {
CloudQueue q = qClient.getQueueReference(prefix + i);
q.createIfNotExists();
}
}
ResultSegment<CloudQueue> segment = qClient.listQueuesSegmented(prefix, QueueListingDetails.NONE, 500, null,
null, null);
assertTrue(segment.getLength() == 500);
assertTrue(segment.getContinuationToken() != null);
}
@Category({ DevFabricTests.class, DevStoreTests.class, CloudTests.class })
@Test
public void testListQueuesSegmented() throws URISyntaxException, StorageException {
CloudQueueClient qClient = QueueTestHelper.createCloudQueueClient();
String prefix = "segment" + UUID.randomUUID().toString().substring(0, 8).toLowerCase();
HashMap<String, String> metadata1 = new HashMap<String, String>();
metadata1.put("ExistingMetadata1", "ExistingMetadataValue1");
for (int i = 0; i < 35; i++) {
CloudQueue q = qClient.getQueueReference(prefix + UUID.randomUUID().toString().toLowerCase());
q.setMetadata(metadata1);
q.create();
}
ResultSegment<CloudQueue> segment1 = qClient.listQueuesSegmented(prefix);
assertTrue(segment1.getLength() == 35);
ResultSegment<CloudQueue> segment2 = qClient.listQueuesSegmented(prefix, QueueListingDetails.NONE, 5, null,
null, null);
assertTrue(segment2.getLength() == 5);
int totalRoundTrip = 1;
while (segment2.getHasMoreResults()) {
segment2 = qClient.listQueuesSegmented(prefix, QueueListingDetails.NONE, 5,
segment2.getContinuationToken(), null, null);
assertTrue(segment2.getLength() == 5);
totalRoundTrip++;
}
assertTrue(totalRoundTrip == 7);
ResultSegment<CloudQueue> segment3 = qClient.listQueuesSegmented(prefix, QueueListingDetails.NONE,
null, null, null, null);
assertTrue(segment3.getLength() == 35);
}
@Category({ DevFabricTests.class, DevStoreTests.class, CloudTests.class })
@Test
public void testListQueuesSegmentedMaxResultsValidation() throws URISyntaxException, StorageException {
CloudQueueClient qClient = QueueTestHelper.createCloudQueueClient();
// Validation should cause each of these to fail
for (int i = 0; i >= -2; i--) {
try {
qClient.listQueuesSegmented(null, QueueListingDetails.NONE, i, null, null, null);
fail();
}
catch (IllegalArgumentException e) {
assertTrue(String.format(SR.PARAMETER_SHOULD_BE_GREATER_OR_EQUAL, "maxResults", 1)
.equals(e.getMessage()));
}
}
assertNotNull(qClient.listQueuesSegmented("thereshouldntbeanyqueueswiththisprefix"));
}
@Category({ DevFabricTests.class, DevStoreTests.class, CloudTests.class })
@Test
public void testListQueuesEqual() throws StorageException {
CloudQueueClient qClient = QueueTestHelper.createCloudQueueClient();
int count1 = 0;
for (CloudQueue queue : qClient.listQueues()) {
assertNotNull(queue);
count1++;
}
int count2 = 0;
for (CloudQueue queue : qClient.listQueues("")) {
assertNotNull(queue);
count2++;
}
int count3 = 0;
for (CloudQueue queue : qClient.listQueues(null)) {
assertNotNull(queue);
count3++;
}
assertEquals(count1, count2);
assertEquals(count1, count3);
}
static String AppendQueueName(URI baseURI, String queueName) {
if (baseURI == null)
return queueName;
String baseAddress = baseURI.toString();
if (baseAddress.endsWith("/")) {
return baseAddress + queueName;
}
else {
return baseAddress + "/" + queueName;
}
}
@Category({ CloudTests.class })
@Test
public void testGetServiceStats() throws StorageException {
CloudQueueClient qClient = QueueTestHelper.createCloudQueueClient();
qClient.getDefaultRequestOptions().setLocationMode(LocationMode.SECONDARY_ONLY);
TestHelper.verifyServiceStats(qClient.getServiceStats());
}
}