blob: 118e2fec7a05fa7800dcd8c03c171cfa20b17618 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.apex.malhar.python.test;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.apex.malhar.python.base.jep.BaseJEPTest;
/**
* A Junit rule that helps in bypassing tests that cannot be done if the Python installation is not present.
* The unit tests will be triggered as soon as the switch -DjepInstalled=true is passed from the command line.
*/
public class PythonAvailabilityTestRule implements TestRule
{
private static final transient Logger LOG = LoggerFactory.getLogger(PythonAvailabilityTestRule.class);
public static final String JEP_LIBRARY_INSTALLED_SWITCH = "jepInstallPath";
@Override
public Statement apply(Statement base, Description description)
{
JepPythonTestContext testContext = description.getAnnotation(JepPythonTestContext.class);
String jepInstalledStrVal = System.getProperty(JEP_LIBRARY_INSTALLED_SWITCH);
boolean jepInstalled = false;
if (jepInstalledStrVal != null) {
jepInstalled = true;
LOG.debug("Using " + jepInstalledStrVal + " as the library path for python interpreter");
}
boolean runThisTest = true; // default is to run the test if no annotation is specified i.e. python is not required
if ( testContext != null) {
if ( (testContext.jepPythonBasedTest()) && (jepInstalled) ) {
runThisTest = true;
} else {
runThisTest = false;
}
}
if (runThisTest) {
if ( (jepInstalled) && (!BaseJEPTest.JEP_INITIALIZED)) {
try {
BaseJEPTest.initJEPThread();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return base;
} else {
// bypass the test altogether
return new Statement()
{
@Override
public void evaluate() throws Throwable
{
// Return an empty Statement object for those tests
}
};
}
}
}