Skip to content

Commit

Permalink
test setup
Browse files Browse the repository at this point in the history
  • Loading branch information
nprentza committed Jul 12, 2023
1 parent 31dff06 commit c779976
Show file tree
Hide file tree
Showing 6 changed files with 210 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package org.drools.reliability.infinispan;

import org.drools.core.ClassObjectFilter;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.kie.api.runtime.conf.PersistedSessionOption;
import org.kie.api.runtime.rule.FactHandle;
import org.test.domain.fireandalarm.Alarm;
import org.test.domain.fireandalarm.Fire;
import org.test.domain.fireandalarm.Room;
import org.test.domain.fireandalarm.Sprinkler;

import java.util.Optional;
import java.util.stream.Collectors;

import static org.assertj.core.api.Assertions.assertThat;

public class ReliabilityFireAndAlarmTest extends ReliabilityTestBasics{
private static final String FIRE_AND_ALARM =
"import " + Alarm.class.getCanonicalName() + ";" +
"import " + Fire.class.getCanonicalName() + ";" +
"import " + Sprinkler.class.getCanonicalName() + ";" +
"import " + Room.class.getCanonicalName() + ";" +
"global java.util.List results;" +
"rule 'When there is a fire turn on the sprinkler' when\n" +
" Fire($room : room) \n" +
" $sprinkler: Sprinkler( room == $room, on == false ) \n" +
"then\n" +
" modify($sprinkler) { setOn(true) }; \n" +
" System.out.println(\"Turn on the sprinkler for room\" + $room.getName()); \n" +
"end\n" +
"rule 'Raise the alarm when we have one or more firs' when\n" +
" exists Fire() \n" +
"then\n" +
" insert( new Alarm() );\n" +
" System.out.println(\"Raise the alarm\");\n" +
"end\n"+
"rule 'Cancel the alarm when all the fires have gone' when \n" +
" not Fire() \n" +
" $alarm : Alarm() \n" +
"then\n" +
" delete ( $alarm ); \n" +
" System.out.println(\"Cancel the alarm\"); \n" +
"end\n" +
"rule 'Status output when things are ok' when\n" +
" not Alarm() \n" +
" not Sprinkler ( on == true ) \n" +
"then \n" +
" System.out.println(\"Everything is ok\"); \n" +
"end";

@ParameterizedTest
@MethodSource("strategyProviderStoresOnlyWithExplicitSafepoints")
void testNoFailover(PersistedSessionOption.PersistenceStrategy persistenceStrategy, PersistedSessionOption.SafepointStrategy safepointStrategy){
createSession(FIRE_AND_ALARM, persistenceStrategy, safepointStrategy);

// phase 1
Room room1 = new Room("Room 1");
insert(room1);
FactHandle fireFact1 = insert(new Fire(room1));
fireAllRules();

// phase 2
Sprinkler sprinkler1 = new Sprinkler(room1);
insert(sprinkler1);
fireAllRules();

assertThat(sprinkler1.isOn()).isTrue();

// phase 3
delete(fireFact1);
fireAllRules();
}

@ParameterizedTest
@MethodSource("strategyProviderStoresOnlyWithExplicitSafepoints")
void testPhase1FailoverPhase2FailoverPhase3(PersistedSessionOption.PersistenceStrategy persistenceStrategy, PersistedSessionOption.SafepointStrategy safepointStrategy){
createSession(FIRE_AND_ALARM, persistenceStrategy, safepointStrategy);

// phase 1
Room room1 = new Room("Room 1");
insert(room1);
FactHandle fireFact1 = insert(new Fire(room1));
fireAllRules();

//failover();
//restoreSession(FIRE_AND_ALARM, persistenceStrategy,safepointStrategy);

// phase 2
Sprinkler sprinkler1 = new Sprinkler(room1);
FactHandle sprinklerFact2 = insert(sprinkler1);
fireAllRules();

sprinkler1 = (Sprinkler) sessions.get(0).getObjects(new ClassObjectFilter(Sprinkler.class)).stream().collect(Collectors.toList()).get(0);

assertThat(sprinkler1.isOn()).isTrue();

failover();
restoreSession(FIRE_AND_ALARM, persistenceStrategy,safepointStrategy);

// phase 3
Optional<FactHandle> fhToDelete = getFactHandle(room1);
if (!fhToDelete.isEmpty()){
delete(fhToDelete.get());
}
fireAllRules();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.test.domain.Person;
import org.test.domain.fireandalarm.Room;

import java.util.ArrayList;
import java.util.Collection;
Expand Down Expand Up @@ -352,6 +353,19 @@ protected Optional<FactHandle> getFactHandle(KieSession kieSession, Person perso
.filter(p -> ( (Person) p.getObject()).getAge()==person.getAge() ).findFirst();
}

protected Optional<FactHandle> getFactHandle(Room room){
return getFactHandle(sessions.get(0), room);
}

protected Optional<FactHandle> getFactHandle(KieSession kieSession, Room room){
return kieSession.getFactHandles()
.stream()
.filter(r -> r.getObject() instanceof Room)
.filter(r -> ( (Room) r.getObject()).getName().equals(room.getName()) )
.findFirst();
}


private static class OptionsFilter {
private final Option[] options;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.test.domain.fireandalarm;

import java.io.Serializable;

public class Alarm implements Serializable {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.test.domain.fireandalarm;

import java.io.Serializable;

public class Fire implements Serializable {
private Room room;

public Fire() { }

public Fire(Room room) {
this.room = room;
}

public Room getRoom() {
return room;
}

public void setRoom(Room room) {
this.room = room;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.test.domain.fireandalarm;

import java.io.Serializable;

public class Room implements Serializable {
private String name;

public Room() { }

public Room(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.test.domain.fireandalarm;

import java.io.Serializable;

public class Sprinkler implements Serializable {
private Room room;
private boolean on = false;

public Sprinkler() { }

public Sprinkler(Room room) {
this.room = room;
}

public Room getRoom() {
return room;
}

public void setRoom(Room room) {
this.room = room;
}

public boolean isOn() {
return on;
}

public void setOn(boolean on) {
this.on = on;
}

@Override
public String toString() {
return "Sprinkler for " + room;
}
}

0 comments on commit c779976

Please sign in to comment.