Skip to content

Commit

Permalink
initial junit5
Browse files Browse the repository at this point in the history
  • Loading branch information
stbischof committed Jan 21, 2022
1 parent ed1d28b commit bbc04c3
Show file tree
Hide file tree
Showing 55 changed files with 16,516 additions and 447 deletions.
35 changes: 30 additions & 5 deletions mondrian/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
<guava.version>17.0</guava.version>
<driver.version.major>${project.version.major}</driver.version.major>
<maven-failsafe-plugin.argLine>-Duser.language=en -Duser.country=US</maven-failsafe-plugin.argLine>
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
</properties>
<dependencies>
<dependency>
Expand Down Expand Up @@ -132,9 +133,21 @@
<version>${jsp-api.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
Expand All @@ -145,8 +158,20 @@
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>${mockito-all.version}</version>
<artifactId>mockito-core</artifactId>
<version>4.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<version>1.16.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>mysql</artifactId>
<version>1.16.2</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
4 changes: 0 additions & 4 deletions mondrian/src/it/java/mondrian/test/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,6 @@ public static Test suite() throws Exception {
addTest( suite, PartialCacheVCTest.class, "suite" );
addTest( suite, QueryAllTest.class, "suite" );
addTest( suite, QueryAllVCTest.class, "suite" );
addTest( suite, Base64Test.class );
addTest( suite, CodeComplianceTest.class );
return suite;
}
Expand Down Expand Up @@ -330,7 +329,6 @@ public static Test suite() throws Exception {
addTest( suite, HierarchyBugTest.class );
addTest( suite, ScheduleTest.class );
addTest( suite, UtilTestCase.class );
addTest( suite, CancellationCheckerTest.class );
addTest( suite, PartiallyOrderedSetTest.class );
addTest( suite, ConcatenableListTest.class );
addTest( suite, ExpiringReferenceTest.class );
Expand Down Expand Up @@ -377,7 +375,6 @@ public static Test suite() throws Exception {
addTest( suite, PropertiesTest.class );
addTest( suite, MultipleHierarchyTest.class );
addTest( suite, I18nTest.class );
addTest( suite, FormatTest.class );
addTest( suite, ParallelTest.class );
addTest( suite, SchemaVersionTest.class );
addTest( suite, SchemaTest.class );
Expand All @@ -396,7 +393,6 @@ public static Test suite() throws Exception {
if ( Bug.BugMondrian503Fixed ) {
addTest( suite, RolapResultTest.class );
}
addTest( suite, ConstantCalcTest.class );
addTest( suite, SharedDimensionTest.class );
addTest( suite, CellPropertyTest.class );
addTest( suite, QueryTest.class );
Expand Down
14 changes: 7 additions & 7 deletions mondrian/src/it/java/mondrian/test/MondrianTestRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,13 @@ public MondrianTestRunner(MondrianResultPrinter printer) {
fPrinter = printer;
}

/**
* Always use the StandardTestSuiteLoader. Overridden from
* BaseTestRunner.
*/
public TestSuiteLoader getLoader() {
return new StandardTestSuiteLoader();
}
// /**
// * Always use the StandardTestSuiteLoader. Overridden from
// * BaseTestRunner.
// */
// public TestSuiteLoader getLoader() {
// return new StandardTestSuiteLoader();
// }

public void testFailed(int status, Test test, Throwable t) {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,36 @@

package mondrian.calc.impl;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.Mockito.mock;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import mondrian.olap.Member;
import mondrian.olap.MondrianProperties;
import mondrian.olap.ResourceLimitExceededException;
import mondrian.test.FoodMartTestCase;
import mondrian.test.PropertySaver5;

import static org.mockito.Mockito.mock;

@SuppressWarnings( "java:S2187" ) // suppressing "no-tests" warning. Mondrian still uses junit 3
public class ArrayTupleListTest extends FoodMartTestCase {
public class ArrayTupleListTest {

/**
* Access properties via this object and their values will be reset.
*/
protected final PropertySaver5 propSaver = new PropertySaver5();

@AfterEach
public void afterEach() {
propSaver.reset();
}
private Member member1 = mock( Member.class );
private Member member2 = mock( Member.class );
private ArrayTupleList list;

@Test
public void testGrowListBeyondInitialCapacity() {
propSaver.set( MondrianProperties.instance().ResultLimit, 0 );
list = new ArrayTupleList( 2, 10 );
Expand All @@ -35,15 +51,16 @@ public void testGrowListBeyondInitialCapacity() {
}
}

@Test
public void testAttemptToGrowBeyondResultLimit() {
propSaver.set( MondrianProperties.instance().ResultLimit, 30 );
list = new ArrayTupleList( 2, 10 );
try {
addMockTuplesToList( list, 32 );
fail( "Expected exception." );
} catch ( ResourceLimitExceededException e ) {
assertTrue( "Actual message: " + e.getMessage() + " \ndid not match expected",
e.getMessage().contains( "result (31) exceeded limit (30)" ) );
assertTrue( e.getMessage().contains( "result (31) exceeded limit (30)" ),
"Actual message: " + e.getMessage() + " \ndid not match expected");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,27 @@

package mondrian.calc.impl;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;

import mondrian.olap.fun.FunUtil;
import mondrian.olap.type.NullType;

import junit.framework.TestCase;

/**
* Test for <code>ConstantCalc</code>
* @author Matt
* @author stbischof
*/
public class ConstantCalcTest extends TestCase {
public class ConstantCalcTest{

@Test
public void testNullEvaluatesToConstantDoubleNull() {
ConstantCalc constantCalc = new ConstantCalc(new NullType(), null);
assertEquals(FunUtil.DoubleNull, constantCalc.evaluateDouble(null));
}


@Test
public void testNullEvaluatesToConstantIntegerNull() {
ConstantCalc constantCalc = new ConstantCalc(new NullType(), null);
assertEquals(FunUtil.IntegerNull, constantCalc.evaluateInteger(null));
Expand Down
15 changes: 15 additions & 0 deletions mondrian/src/test/java/mondrian/example/MyTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package mondrian.example;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

import mondrian.junit5.MondrianRuntimeExtension;

@ExtendWith(MondrianRuntimeExtension.class)
public class MyTest {

@Test
void testName() throws Exception {
System.out.println(1);
}
}
10 changes: 10 additions & 0 deletions mondrian/src/test/java/mondrian/junit5/DataLoader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package mondrian.junit5;

public interface DataLoader {
/**
* @param jdbcConnectionUrl - jdbcConnectionUrl
* @return jdbc connection String
*/
boolean loadDataData(String jdbcConnectionUrl);

}
15 changes: 15 additions & 0 deletions mondrian/src/test/java/mondrian/junit5/DatabaseHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package mondrian.junit5;

import java.io.Closeable;
import java.util.Map;

public interface DatabaseHandler extends Closeable {

/**
*
* @param props - properties
* @return jdbc connection String
*/
String setUpDatabase(Map<String,Object> props);

}
24 changes: 24 additions & 0 deletions mondrian/src/test/java/mondrian/junit5/FoodmardDataLoader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package mondrian.junit5;

import mondrian.test.loader.MondrianFoodMartLoaderX;

public class FoodmardDataLoader implements DataLoader{

@Override
public boolean loadDataData(String jdbcUrl) {
String[] args=new String[]{
"-verbose",
"-tables",
"-data",
"-indexes",
"-outputJdbcURL="+jdbcUrl,
// "-outputJdbcUser="+mySQLContainer.getUsername(),
// "-outputJdbcPassword="+mySQLContainer.getPassword(),
"-outputJdbcBatchSize=50",
"-jdbcDrivers=com.mysql.cl.jdbc.Driver"
};
MondrianFoodMartLoaderX.main(args);
return true;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package mondrian.junit5;

import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.GLOBAL;

import java.sql.SQLException;
import java.util.Locale;

import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
import org.junit.jupiter.api.extension.ExecutionCondition;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.testcontainers.DockerClientFactory;

import mondrian.resource.MondrianResource;

public class MondrianRuntimeExtension
implements ExecutionCondition, BeforeAllCallback, ExtensionContext.Store.CloseableResource {


private static boolean started = false;

@Override
public void beforeAll(ExtensionContext context) {
if (!started) {

started = true;
// registers a callback hook when the root test context is shut down
context.getRoot().getStore(GLOBAL).put("MondrianRuntimeExtensionClosableCallbackHook", this);
defineLocale();

System.out.println("##############################################################");
}
}

private void defineLocale() {
MondrianResource.setThreadLocale( Locale.US );
}


@Override
public void close() {
// Your "after all tests" logic goes here

}

@Override
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {

try {
DockerClientFactory.instance().client();
return ConditionEvaluationResult.enabled("Docker is available");
} catch (Throwable ex) {
return ConditionEvaluationResult.disabled("Docker is not available", ex.getMessage());
}

}

}
23 changes: 23 additions & 0 deletions mondrian/src/test/java/mondrian/junit5/MondrianRuntimeSupport.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package mondrian.junit5;

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

import org.junit.jupiter.api.extension.ExtendWith;

@Inherited
@Target({
ElementType.TYPE,ElementType.METHOD
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ExtendWith(MondrianRuntimeExtension.class)
public @interface MondrianRuntimeSupport {
Class<? extends DatabaseHandler> database() default MySQLDatabaseHandler.class;
Class<? extends DataLoader> dataLoader() default FoodmardDataLoader.class;

}
45 changes: 45 additions & 0 deletions mondrian/src/test/java/mondrian/junit5/MySQLDatabaseHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package mondrian.junit5;

import java.io.IOException;
import java.sql.DriverManager;
import java.util.Map;
import java.util.UUID;
import java.util.function.Consumer;

import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.containers.output.OutputFrame;

public class MySQLDatabaseHandler implements DatabaseHandler {

private static MySQLContainer<?> mySQLContainer;
static Consumer<OutputFrame> x = t -> System.out.println(t.getUtf8String());

@Override
public void close() throws IOException {
if (mySQLContainer != null) {
mySQLContainer.stop();
mySQLContainer.close();
}
}

@Override
public String setUpDatabase(Map<String, Object> props) {
String user=props.getOrDefault("username", UUID.randomUUID().toString().replace("-","")).toString();
String pass=props.getOrDefault("password", UUID.randomUUID().toString().replace("-","")).toString();


mySQLContainer = new MySQLContainer<>("mysql:5.7.34").withDatabaseName(user).withUsername(pass)
.withPassword("pass").withEnv("MYSQL_ROOT_HOST", "%").withLogConsumer(x);

mySQLContainer.start();

return mySQLContainer.getJdbcUrl()+"?user="+user+"&password="+pass;
// Connection con = DriverManager.getConnection(url, "user", "pass");

}





}
Loading

0 comments on commit bbc04c3

Please sign in to comment.