/**
* 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;
import com.microsoft.azure.storage.analytics.CloudAnalyticsClientTests;
import com.microsoft.azure.storage.blob.BlobOutputStreamTests;
import com.microsoft.azure.storage.blob.CloudAppendBlobTests;
import com.microsoft.azure.storage.blob.CloudBlobClientEncryptionTests;
import com.microsoft.azure.storage.blob.CloudBlobClientTests;
import com.microsoft.azure.storage.blob.CloudBlobContainerTests;
import com.microsoft.azure.storage.blob.CloudBlobDirectoryTests;
import com.microsoft.azure.storage.blob.CloudBlobServerEncryptionTests;
import com.microsoft.azure.storage.blob.CloudBlockBlobTests;
import com.microsoft.azure.storage.blob.CloudPageBlobTests;
import com.microsoft.azure.storage.blob.LeaseTests;
import com.microsoft.azure.storage.blob.SasTests;
import com.microsoft.azure.storage.file.CloudFileClientTests;
import com.microsoft.azure.storage.file.CloudFileDirectoryTests;
import com.microsoft.azure.storage.file.CloudFileShareTests;
import com.microsoft.azure.storage.file.CloudFileTests;
import com.microsoft.azure.storage.file.FileSasTests;
import com.microsoft.azure.storage.queue.CloudQueueClientGB18030Test;
import com.microsoft.azure.storage.queue.CloudQueueClientTests;
import com.microsoft.azure.storage.queue.CloudQueueEncryptionTests;
import com.microsoft.azure.storage.queue.CloudQueueTests;
import com.microsoft.azure.storage.table.TableBatchOperationTests;
import com.microsoft.azure.storage.table.TableClientTests;
import com.microsoft.azure.storage.table.TableDateTests;
import com.microsoft.azure.storage.table.TableEncryptionTests;
import com.microsoft.azure.storage.table.TableEscapingTests;
import com.microsoft.azure.storage.table.TableODataTests;
import com.microsoft.azure.storage.table.TableOperationTests;
import com.microsoft.azure.storage.table.TableQueryTests;
import com.microsoft.azure.storage.table.TableSerializerTests;
import com.microsoft.azure.storage.table.TableTests;
import org.junit.experimental.categories.Categories;
import org.junit.experimental.categories.Categories.ExcludeCategory;
import org.junit.experimental.categories.Categories.IncludeCategory;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
/**
* Contains the various test suites and test categories used to run JUnit tests
*
* To run with junit from command line:
* 1. Install junit and add it to the classpath.
* 2. Add any project dependencies to the classpath. (ex CLASSPATH=%CLASSPATH%;{path to dependency};)
* 3. If you have the compiled source jar and compiled test jar, add them to the classpath. If you do not, either run
* mvn jar:jar and mvn jar:test-jar which will add a compiled source and compiled test jar to the target directory or
* run mvn install -DskipTests=true which will add those jars to both the target directory and your local repository
* directory.
* 4. Suite: java org.junit.runner.JUnitCore com.microsoft.azure.storage.TestRunners$FastTestSuite
* 5. Class: java org.junit.runner.JUnitCore com.microsoft.azure.storage.TableOperationTests
* 6. Test: can't do this natively; must make a runner
*
* To run with maven from command line:
* 1. Suite: mvn test -DrunSuite="TestRunners.FastTestSuite"
* 2. Class: mvn test -Dtest=TableOperationTests
* 3. Test: mvn test -Dtest=TableOperationTests$testDelete
*
* To run with eclipse:
* 1. Right click the suite/class/test you'd like to run in the package explorer and click Run As > JUnit Test
*
* Other notes about suites:
* 1. Can't include or exclude multipe categories, instead make two suites and merge them into one.
* 2. With maven you cannot (easily) run tests from inside a jar.
* 3. To make new suites:
* Make a new public static class with the name of the suite
* Specify which test classes to look at (ex, core, blob, queue, table or all) with @SuiteClasses
* Optional: Specify which category (only one!) to include within those test classes with @IncludeCategory
* Optional: Specify which category (only one!) to ignore within those test classes with @ExcludeCategory
* If using categories, specify @RunWith(Categories.class), otherwise @RunWith(Suite.class)
* 4. To make new categories:
* Make a public interface with the category name you'd like to use
* Annotate test classes AND/OR test methods with that category using @Category(categoryName.class)
* Follow the instructions right above in 3 to use these categories with a suite
*/
public class TestRunners {
// Speed test category
public interface SlowTests {
}
// Tenant type test categories
public interface DevStoreTests {
}
public interface CloudTests {
}
public interface DevFabricTests {
}
// Test suites
@RunWith(Suite.class)
@SuiteClasses({ AccountSasTests.class, EventFiringTests.class, GenericTests.class, LoggerTests.class,
MaximumExecutionTimeTests.class, SecondaryTests.class, ServicePropertiesTests.class, StorageAccountTests.class,
StorageUriTests.class })
public static class CoreTestSuite {
}
@RunWith(Suite.class)
@SuiteClasses({ BlobOutputStreamTests.class, CloudBlobClientTests.class, CloudBlobContainerTests.class,
CloudBlobDirectoryTests.class, CloudAppendBlobTests.class, CloudBlockBlobTests.class, CloudPageBlobTests.class,
CloudBlobClientEncryptionTests.class, CloudBlobServerEncryptionTests.class, LeaseTests.class, SasTests.class })
public static class BlobTestSuite {
}
@RunWith(Suite.class)
@SuiteClasses({ CloudQueueClientGB18030Test.class, CloudQueueClientTests.class, CloudQueueEncryptionTests.class,
CloudQueueTests.class })
public static class QueueTestSuite {
}
@RunWith(Suite.class)
@SuiteClasses({ TableBatchOperationTests.class, TableClientTests.class, TableDateTests.class,
TableEncryptionTests.class, TableEscapingTests.class, TableODataTests.class, TableOperationTests.class,
TableQueryTests.class, TableSerializerTests.class, TableTests.class })
public static class TableTestSuite {
}
@RunWith(Suite.class)
@SuiteClasses({ CloudFileClientTests.class, CloudFileDirectoryTests.class, CloudFileShareTests.class,
CloudFileTests.class, FileSasTests.class })
public static class FileTestSuite {
}
@RunWith(Suite.class)
@SuiteClasses({ CloudAnalyticsClientTests.class })
public static class AnalyticsTestSuite {
}
@RunWith(Suite.class)
@SuiteClasses({ CloudBlobClientEncryptionTests.class, CloudBlobServerEncryptionTests.class,
CloudQueueEncryptionTests.class, TableEncryptionTests.class })
public static class EncryptionTestSuite {
}
@RunWith(Suite.class)
@SuiteClasses({ CoreTestSuite.class, BlobTestSuite.class, QueueTestSuite.class, TableTestSuite.class,
FileTestSuite.class, AnalyticsTestSuite.class })
public static class AllTestSuite {
}
// Test suites with categories:
@RunWith(Categories.class)
@IncludeCategory(DevFabricTests.class)
@ExcludeCategory(SlowTests.class)
@SuiteClasses(AllTestSuite.class)
public static class DevFabricFastTestSuite {
}
@RunWith(Categories.class)
@IncludeCategory(DevFabricTests.class)
@ExcludeCategory(SecondaryTests.class)
@SuiteClasses(AllTestSuite.class)
public static class DevFabricNoSecondarySuite {
}
@RunWith(Categories.class)
@ExcludeCategory(SlowTests.class)
@SuiteClasses(AllTestSuite.class)
public static class FastTestSuite {
}
}