All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.groupbyinc.common.test.CircleCIParallelRule Maven / Gradle / Ivy

package com.groupbyinc.common.test;

import org.apache.commons.lang3.StringUtils;
import org.junit.Assume;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public final class CircleCIParallelRule implements TestRule {

  private static final transient Logger LOG = LoggerFactory.getLogger(CircleCIParallelRule.class);

  private Statement skipTest(int currentNode, int targetNode) {
    return new Statement() {
      @Override
      public void evaluate() {
        Assume.assumeTrue("Skipping test, currentNode: " + currentNode + ", targetNode: " + targetNode, false);
      }
    };
  }

  @Override
  public Statement apply(Statement statement, Description description) {
    String circleNodeTotal = System.getenv("CIRCLE_NODE_TOTAL");
    String circleNodeIndex = System.getenv("CIRCLE_NODE_INDEX");

    if (StringUtils.isBlank(circleNodeIndex) || StringUtils.isBlank(circleNodeTotal)) {
      LOG.trace("Running locally, so skipping");
      return statement;
    } else {
      String testName = description.getClassName() + "#" + description.getMethodName();

      int currentNode = Integer.parseInt(circleNodeIndex);
      int targetNode = Math.abs(testName.hashCode()) % Integer.parseInt(circleNodeTotal);
      return currentNode == targetNode ? statement : skipTest(currentNode, targetNode);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy