Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
2.1.8:
- (MichaelA-ops) Fix bug where order of transformer tests is incorrect.
2.1.7:
- (cmeiklejohn) Fix bug where UX incorrectly displayed HTTP errors as warnings.
- (cmeiklejohn) Remove HTTP transformer fault support due to incompatibility with HTTP chunking.
Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ javadoc {

group = "cloud.filibuster"
archivesBaseName = "instrumentation"
version = "2.1.7"
version = "2.1.8"

java {
withJavadocJar()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ public synchronized JSONObject beginInvocation(JSONObject payload) {
setNextAccumulator(newFaultObject.getJSONObject("transformer_fault"),
transformationResult.getNextAccumulator());
generateAndSetTransformerValue(newFaultObject.getJSONObject("transformer_fault"));
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, newFaultObject);
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, newFaultObject, /* isScheduledByTransformer= */true);
}

logger.info("[FILIBUSTER-CORE]: beginInvocation, injecting faults using transformer_fault: " + transformerFaultObject.toString(4));
Expand Down Expand Up @@ -469,7 +469,7 @@ private void generateByzantineAndTransformerFaults(JSONObject payload, Distribut
initialAccumulator
);
generateAndSetTransformerValue(handledTransformer.getJSONObject("transformer_fault"));
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, new JSONObject(handledTransformer.toMap()));
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, new JSONObject(handledTransformer.toMap()), /* isScheduledByTransformer= */false);
} catch (Throwable e) {
logger.warning("[FILIBUSTER-CORE]: generateByzantineAndTransformerFaults, an exception occurred in generateByzantineAndTransformerFaults: " + e);
throw new FilibusterFaultInjectionException("[FILIBUSTER-CORE]: generateByzantineAndTransformerFaults: ", e);
Expand All @@ -481,7 +481,7 @@ private void generateByzantineAndTransformerFaults(JSONObject payload, Distribut
List<JSONObject> byzantineFaultObjects = filibusterAnalysisConfiguration.getByzantineFaultObjects();

for (JSONObject faultObject : byzantineFaultObjects) {
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultObject);
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultObject, /* isScheduledByTransformer= */false);
}
}
}
Expand Down Expand Up @@ -655,14 +655,14 @@ public synchronized void teardownsCompleted(int currentIteration) {
// Don't add to explored queue if it's already there.
numberOfAbstractExecutionsExecuted++;

exploredTestExecutions.addTestExecution(currentAbstractTestExecution);
exploredTestExecutions.addTestExecution(currentAbstractTestExecution, /* isScheduledByTransformer= */false);
} else {
logger.severe("[FILIBUSTER-CORE]: teardownsCompleted called, currentAbstractTestExecution already exists in the explored queue, this could indicate a problem in Filibuster.");
}
}

if (!exploredTestExecutions.containsTestExecution(currentConcreteTestExecution)) {
exploredTestExecutions.addTestExecution(currentConcreteTestExecution);
exploredTestExecutions.addTestExecution(currentConcreteTestExecution, /* isScheduledByTransformer= */false);
}
numberOfConcreteExecutionsExecuted++;

Expand Down Expand Up @@ -1093,7 +1093,7 @@ private void generateFaultsUsingSpecificAnalysisConfiguration(
}

if (matcher.find()) {
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultObject);
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultObject, /* isScheduledByTransformer= */false);
}
}

Expand All @@ -1103,7 +1103,7 @@ private void generateFaultsUsingSpecificAnalysisConfiguration(
for (JSONObject faultObject : exceptionFaultObjects) {
// If we shouldn't execute this, skip it.
if (filibusterFaultInjectionFilter.shouldInjectFault(methodName)) {
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultObject);
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultObject, /* isScheduledByTransformer= */false);
}
}

Expand All @@ -1124,7 +1124,7 @@ private void generateFaultsUsingSpecificAnalysisConfiguration(
HashMap faultTypeMap = (HashMap) obj;
JSONObject faultTypeObject = new JSONObject();
faultTypeObject.put("failure_metadata", faultTypeMap);
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultTypeObject);
createAndScheduleAbstractTestExecution(filibusterConfiguration, distributedExecutionIndex, faultTypeObject, /* isScheduledByTransformer= */false);
}
}
}
Expand Down Expand Up @@ -1209,7 +1209,8 @@ private void generateFaultsUsingAnalysisConfiguration(
private void createAndScheduleAbstractTestExecution(
FilibusterConfiguration filibusterConfiguration,
DistributedExecutionIndex distributedExecutionIndex,
JSONObject faultObject) {
JSONObject faultObject,
boolean isScheduledByTransformer) {
logger.info("[FILIBUSTER-CORE]: createAndScheduleAbstractTestExecution called.");

if (currentConcreteTestExecution != null) {
Expand All @@ -1223,14 +1224,14 @@ private void createAndScheduleAbstractTestExecution(
if (!abstractIsExploredExecution && !abstractIsScheduledExecution && !abstractIsCurrentExecution) {
if (filibusterConfiguration.getSuppressCombinations()) {
if (!(abstractTestExecution.getFaultsToInjectSize() > 1)) {
unexploredTestExecutions.addTestExecution(abstractTestExecution);
unexploredTestExecutions.addTestExecution(abstractTestExecution, isScheduledByTransformer);
logger.info("[FILIBUSTER-CORE]: createAndScheduleAbstractTestExecution, adding new execution to the queue.");
} else {
logger.info("[FILIBUSTER-CORE]: createAndScheduleAbstractTestExecution, not scheduling test execution because it contains > 1 fault.");
}
} else {
logger.info("[FILIBUSTER-CORE]: createAndScheduleAbstractTestExecution, adding new execution to the queue.");
unexploredTestExecutions.addTestExecution(abstractTestExecution);
unexploredTestExecutions.addTestExecution(abstractTestExecution, isScheduledByTransformer);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ public interface TestExecutionCollection<T extends TestExecution> {

int size();

void addTestExecution(T testExecution);
void addTestExecution(T testExecution, boolean isScheduledByTransformer);
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ public T removeAndReturnNextTestExecution() {
}

@Override
public void addTestExecution(T testExecution) {
this.add(testExecution);
public void addTestExecution(T testExecution, boolean isScheduledByTransformer) {
if (isScheduledByTransformer) {
this.addFirst(testExecution);
} else {
this.add(testExecution);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ public T removeAndReturnNextTestExecution() {
}

@Override
public void addTestExecution(T testExecution) {
this.addFirst(testExecution);
public void addTestExecution(T testExecution, boolean isScheduledByTransformer) {
if (isScheduledByTransformer) {
this.addLast(testExecution);
} else {
this.addFirst(testExecution);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
import org.junit.jupiter.api.TestMethodOrder;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import static cloud.filibuster.junit.assertions.protocols.GenericAssertions.wasFaultInjected;
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.assertTrue;
Expand Down Expand Up @@ -59,8 +59,8 @@ public void testCockroachConnection() {
assertEquals(initBalance2, cockroachDAO.getAccountBalance(id2));

// Assert that the correct account IDs are returned for the given balances
assertArrayEquals(new String[]{id1.toString()}, cockroachDAO.getAccountIdByBalance(initBalance1));
assertArrayEquals(new String[]{id2.toString()}, cockroachDAO.getAccountIdByBalance(initBalance2));
assertEquals(Collections.singletonList(id1.toString()), cockroachDAO.getAccountIdByBalance(initBalance1));
assertEquals(Collections.singletonList(id2.toString()), cockroachDAO.getAccountIdByBalance(initBalance2));

// Remove all accounts from DB
cockroachDAO.deleteAllAccounts();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
import org.junit.jupiter.api.TestMethodOrder;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import static cloud.filibuster.junit.assertions.protocols.GenericAssertions.wasFaultInjected;
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.assertTrue;
Expand Down Expand Up @@ -59,8 +59,8 @@ public void testCockroachConnection() {
assertEquals(initBalance2, postgresDAO.getAccountBalance(id2));

// Assert that the correct account IDs are returned for the given balances
assertArrayEquals(new String[]{id1.toString()}, postgresDAO.getAccountIdByBalance(initBalance1));
assertArrayEquals(new String[]{id2.toString()}, postgresDAO.getAccountIdByBalance(initBalance2));
assertEquals(Collections.singletonList(id1.toString()), postgresDAO.getAccountIdByBalance(initBalance1));
assertEquals(Collections.singletonList(id2.toString()), postgresDAO.getAccountIdByBalance(initBalance2));

// Remove all accounts from DB
postgresDAO.deleteAllAccounts();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -307,22 +307,21 @@ public int getAccountBalance(UUID id) {
*
* @return balance (int)
*/
public String[] getAccountIdByBalance(int balance) {
List<String> id = new ArrayList<>();
public List<String> getAccountIdByBalance(int balance) {
List<String> ids = new ArrayList<>();

try (Connection connection = this.getConnection()) {

ResultSet res = connection.createStatement()
.executeQuery(String.format("SELECT id FROM accounts WHERE balance = '%d'", balance));
while (res.next()) {
id.add(res.getString("id"));
ids.add(res.getString("id"));
}
} catch (SQLException e) {
logger.log(Level.INFO, String.format("BasicDAO.getAccountIdByBalance ERROR: { state => %s, cause => %s, message => %s }\n",
e.getSQLState(), e.getCause(), e.getMessage()));
}

return id.toArray(new String[0]);
return ids;
}

}