Skip to content

Commit

Permalink
issue-183: Use tags instead of suites to separate tests
Browse files Browse the repository at this point in the history
  • Loading branch information
steve-todorov committed Jan 25, 2021
1 parent 9ceb965 commit c6abda9
Show file tree
Hide file tree
Showing 24 changed files with 474 additions and 21 deletions.
74 changes: 69 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,12 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<!-- Make sure the build fails if no tests are executed! -->
<failIfNoTests>true</failIfNoTests>
<!-- Since we are not tagging unit tests, this actually means "execute all non-tagged tests" -->
<excludedGroups>*</excludedGroups>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand Down Expand Up @@ -282,29 +288,86 @@

<profiles>
<profile>
<id>integration-tests</id>
<id>it-s3</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<!-- Make sure the build fails if no tests are executed! -->
<failIfNoTests>true</failIfNoTests>
<includes>
<include>**/*IT.java</include>
</includes>
<systemPropertyVariables>
<!-- used in EnvironmentBuilder.java -->
<running.it>s3</running.it>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<id>it-s3</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
<!-- This configuration must happen at execution level, otherwise you'll get: -->
<!-- Skipping execution of surefire because it has already been run for this configuration -->
<configuration>
<!-- Include only s3 tagged integration tests -->
<groups>it-s3</groups>
<excludedGroups>*</excludedGroups>
</configuration>
</execution>
<execution>
<id>verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>

<profile>
<!-- This should work but is not tested since it depends on https://github.com/carlspring/s3fs-nio/issues/60 -->
<id>it-minio</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<!-- Make sure the build fails if no tests are executed! -->
<failIfNoTests>true</failIfNoTests>
<includes>
<include>**/*IT.java</include>
</includes>
<excludes>
<exclude>**/**Test.java</exclude>
</excludes>
<systemPropertyVariables>
<!-- used in EnvironmentBuilder.java -->
<running.it>minio</running.it>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<id>it-minio</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
<!-- This configuration must happen at execution level, otherwise you'll get: -->
<!-- Skipping execution of surefire because it has already been run for this configuration -->
<configuration>
<!-- Include only s3 tagged integration tests -->
<groups>it-minio</groups>
<excludedGroups>*</excludedGroups>
</configuration>
</execution>
<execution>
<id>verify</id>
Expand All @@ -318,6 +381,7 @@
</plugins>
</build>
</profile>

<profile>
<id>jacoco-code-coverage</id>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.carlspring.cloud.storage.s3fs;

import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;
import org.carlspring.cloud.storage.s3fs.util.EnvironmentBuilder;

import java.io.IOException;
Expand All @@ -14,6 +15,7 @@
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertSame;

@S3IntegrationTest
class FileSystemsIT
{

Expand Down
18 changes: 4 additions & 14 deletions src/test/java/org/carlspring/cloud/storage/s3fs/FilesIT.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.carlspring.cloud.storage.s3fs;

import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;
import org.carlspring.cloud.storage.s3fs.util.CopyDirVisitor;
import org.carlspring.cloud.storage.s3fs.util.EnvironmentBuilder;

Expand All @@ -8,15 +9,7 @@
import java.io.OutputStream;
import java.net.URI;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.DirectoryStream;
import java.nio.file.FileSystem;
import java.nio.file.FileSystemNotFoundException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardOpenOption;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;
import java.util.Map;
Expand All @@ -31,12 +24,9 @@
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import static org.carlspring.cloud.storage.s3fs.util.S3EndpointConstant.S3_GLOBAL_URI_IT;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;

@S3IntegrationTest
class FilesIT
{

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.carlspring.cloud.storage.s3fs;

import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;
import org.carlspring.cloud.storage.s3fs.util.EnvironmentBuilder;

import java.io.ByteArrayInputStream;
Expand Down Expand Up @@ -28,6 +29,7 @@
import static org.carlspring.cloud.storage.s3fs.util.EnvironmentBuilder.getRealEnv;
import static org.junit.jupiter.api.Assertions.assertNotNull;

@S3IntegrationTest
class S3ClientIT
{

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.carlspring.cloud.storage.s3fs.attribute.S3BasicFileAttributes;
import org.carlspring.cloud.storage.s3fs.attribute.S3PosixFileAttributes;
import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;
import org.carlspring.cloud.storage.s3fs.util.CopyDirVisitor;
import org.carlspring.cloud.storage.s3fs.util.EnvironmentBuilder;
import org.carlspring.cloud.storage.s3fs.util.S3Utils;
Expand Down Expand Up @@ -33,7 +34,7 @@
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;


@S3IntegrationTest
class S3UtilsIT
{

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.carlspring.cloud.storage.s3fs.fileSystemProvider;

import org.carlspring.cloud.storage.s3fs.S3FileSystemProvider;
import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;

import java.io.IOException;
import java.nio.file.FileSystem;
Expand All @@ -23,6 +24,7 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;

@S3IntegrationTest
class GetFileSystemIT
{

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.carlspring.cloud.storage.s3fs.S3FileSystemProvider;
import org.carlspring.cloud.storage.s3fs.S3UnitTestBase;
import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;
import org.carlspring.cloud.storage.s3fs.util.CopyDirVisitor;
import org.carlspring.cloud.storage.s3fs.util.EnvironmentBuilder;

Expand Down Expand Up @@ -34,6 +35,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

@S3IntegrationTest
class NewAsynchronousFileChannelTestIT
extends S3UnitTestBase
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.carlspring.cloud.storage.s3fs.S3FileSystemProvider;
import org.carlspring.cloud.storage.s3fs.S3UnitTestBase;
import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;
import org.carlspring.cloud.storage.s3fs.util.CopyDirVisitor;
import org.carlspring.cloud.storage.s3fs.util.EnvironmentBuilder;

Expand Down Expand Up @@ -29,6 +30,7 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

@S3IntegrationTest
class NewByteChannelIT
extends S3UnitTestBase
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.carlspring.cloud.storage.s3fs.fileSystemProvider;

import org.carlspring.cloud.storage.s3fs.S3FileSystemProvider;
import org.carlspring.cloud.storage.s3fs.junit.annotations.S3IntegrationTest;

import java.io.IOException;
import java.net.URI;
Expand All @@ -27,6 +28,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;

@S3IntegrationTest
class NewFileSystemIT
{

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.carlspring.cloud.storage.s3fs.junit.annotations;

public abstract class BaseAnnotationTest
{

/**
* Check if there is an {@link S3IntegrationTest} annotation at a class level.
*
* @param clazz
* @return
*/
protected static boolean hasS3Annotation(Class<?> clazz)
{
return clazz.getAnnotation(S3IntegrationTest.class) != null;
}

/**
* Check if there is an {@link S3IntegrationTest} annotation at a method level (and pick-up class level)
*
* @param clazz
* @param methodName
* @return
* @throws NoSuchMethodException
*/
protected static boolean hasS3Annotation(Class<?> clazz,
String methodName)
throws NoSuchMethodException
{
return hasS3Annotation(clazz) || clazz.getMethod(methodName).getAnnotation(S3IntegrationTest.class) != null;
}

/**
* Check if there is an {@link MinioIntegrationTest} annotation at a class level.
*
* @param clazz
* @return
*/
protected static boolean hasMinioAnnotation(Class<?> clazz)
{
return clazz.getAnnotation(MinioIntegrationTest.class) != null;
}

/**
* Check if there is an {@link MinioIntegrationTest} annotation at a method level (and pick-up class level)
*
* @param clazz
* @param methodName
* @return
* @throws NoSuchMethodException
*/
protected static boolean hasMinioAnnotation(Class<?> clazz,
String methodName)
throws NoSuchMethodException
{
return hasMinioAnnotation(clazz) || clazz.getMethod(methodName).getAnnotation(MinioIntegrationTest.class) != null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.carlspring.cloud.storage.s3fs.junit.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.api.Tag;

/**
* This annotation should be used for integration tests which are specific to MinIO.
* It is possible to combine it with {@link S3IntegrationTest} for test cases which are compatible with both (i.e. can
* run on S3 and MinIO)
*/
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("it-minio")
public @interface MinioIntegrationTest
{

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.carlspring.cloud.storage.s3fs.junit.annotations;


import org.carlspring.cloud.storage.s3fs.junit.examples.*;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class MinioIntegrationTestAnnotationTest
extends BaseAnnotationTest
{

@Test
public void testClassLevelAnnotation()
{
assertTrue(hasMinioAnnotation(MinioClassAnnotationIT.class));
assertTrue(hasMinioAnnotation(CombinedMinioS3IT.class));

assertFalse(hasMinioAnnotation(S3ClassAnnotationIT.class));
assertFalse(hasMinioAnnotation(CombinedS3MinioIT.class));

assertTrue(hasMinioAnnotation(CombinedIT.class));
}

@Test
public void testMethodLevelAnnotation()
throws NoSuchMethodException
{
assertTrue(hasMinioAnnotation(MinioMethodAnnotationIT.class, "testShouldExecuteBecauseOfMethodAnnotation"));

assertTrue(hasMinioAnnotation(CombinedIT.class, "testMinioMethodShouldExecuteBecauseOfClassLevelAnnotation"));
assertTrue(hasMinioAnnotation(CombinedIT.class, "testMinioMethodShouldExecuteBecauseOfClassLevelAnnotation"));

assertTrue(hasMinioAnnotation(CombinedS3MinioIT.class, "testMinioMethodShouldExecuteBecauseOfMethodLevelAnnotation"));
assertTrue(hasMinioAnnotation(CombinedMinioS3IT.class, "testMinioMethodShouldExecuteBecauseOfClassLevelAnnotation"));

assertFalse(hasS3Annotation(MinioMethodAnnotationIT.class, "testShouldExecuteBecauseOfMethodAnnotation"));
}

}
Loading

0 comments on commit c6abda9

Please sign in to comment.