diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..5c4762f30
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,37 @@
+name: SonarCloud
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ types: [opened, synchronize, reopened]
+jobs:
+ build:
+ name: Build and analyze
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
+ - name: Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ java-version: 17
+ distribution: 'zulu' # Alternative distribution options are available.
+ - name: Cache SonarCloud packages
+ uses: actions/cache@v3
+ with:
+ path: ~/.sonar/cache
+ key: ${{ runner.os }}-sonar
+ restore-keys: ${{ runner.os }}-sonar
+ - name: Cache Maven packages
+ uses: actions/cache@v3
+ with:
+ path: ~/.m2
+ key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
+ restore-keys: ${{ runner.os }}-m2
+ - name: Build and analyze
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
+ run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=szfp98_base
diff --git a/pom.xml b/pom.xml
index 2be9fb5f5..2fc82dd58 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,8 @@
UTF-8
+ szfp98
+ https://sonarcloud.io
pom
diff --git a/train-controller/src/main/java/hu/bme/mit/train/controller/TrainControllerImpl.java b/train-controller/src/main/java/hu/bme/mit/train/controller/TrainControllerImpl.java
index 06649d278..f55d75057 100644
--- a/train-controller/src/main/java/hu/bme/mit/train/controller/TrainControllerImpl.java
+++ b/train-controller/src/main/java/hu/bme/mit/train/controller/TrainControllerImpl.java
@@ -43,7 +43,8 @@ private void enforceSpeedLimit() {
@Override
public void setJoystickPosition(int joystickPosition) {
- this.step = joystickPosition;
+ this.step = joystickPosition;
+ followSpeed();
}
}
diff --git a/train-interfaces/src/main/java/hu/bme/mit/train/interfaces/TrainUser.java b/train-interfaces/src/main/java/hu/bme/mit/train/interfaces/TrainUser.java
index 046f6fe80..34fe24f4c 100644
--- a/train-interfaces/src/main/java/hu/bme/mit/train/interfaces/TrainUser.java
+++ b/train-interfaces/src/main/java/hu/bme/mit/train/interfaces/TrainUser.java
@@ -2,10 +2,16 @@
public interface TrainUser {
+ boolean alarmState = false;
+
int getJoystickPosition();
boolean getAlarmFlag();
void overrideJoystickPosition(int joystickPosition);
+ public boolean getAlarmState();
+
+ public void setAlarmState(boolean alarmState);
+
}
diff --git a/train-sensor/src/main/java/hu/bme/mit/train/sensor/TrainSensorImpl.java b/train-sensor/src/main/java/hu/bme/mit/train/sensor/TrainSensorImpl.java
index 4a640d1dd..a6c7a8f1d 100644
--- a/train-sensor/src/main/java/hu/bme/mit/train/sensor/TrainSensorImpl.java
+++ b/train-sensor/src/main/java/hu/bme/mit/train/sensor/TrainSensorImpl.java
@@ -24,6 +24,10 @@ public int getSpeedLimit() {
public void overrideSpeedLimit(int speedLimit) {
this.speedLimit = speedLimit;
controller.setSpeedLimit(speedLimit);
+
+ if(speedLimit < 0 || speedLimit > 500 || speedLimit < controller.getReferenceSpeed() / 2) {
+ user.setAlarmState(true);
+ }
}
}
diff --git a/train-sensor/src/test/java/hu/bme/mit/train/sensor/TrainSensorTest.java b/train-sensor/src/test/java/hu/bme/mit/train/sensor/TrainSensorTest.java
index ae5dee21b..56b55b701 100644
--- a/train-sensor/src/test/java/hu/bme/mit/train/sensor/TrainSensorTest.java
+++ b/train-sensor/src/test/java/hu/bme/mit/train/sensor/TrainSensorTest.java
@@ -1,19 +1,48 @@
package hu.bme.mit.train.sensor;
+import hu.bme.mit.train.interfaces.TrainController;
+import hu.bme.mit.train.sensor.TrainSensorImpl;
+import hu.bme.mit.train.interfaces.TrainUser;
+
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
-public class TrainSensorTest {
+ public class TrainSensorTest {
+
+ TrainController mockTC;
+ TrainUser mockTU;
+ TrainSensorImpl trainSensor;
@Before
public void before() {
- // TODO Add initializations
+ mockTC = mock(TrainController.class);
+ mockTU = mock(TrainUser.class);
+ trainSensor = new TrainSensorImpl(mockTC, mockTU);
+ }
+
+ @Test
+ public void setAlarmState_TrainUser_Min() {
+ trainSensor.overrideSpeedLimit(-1);
+ verify(mockTU, times(1)).setAlarmState(true);
+ }
+
+ @Test
+ public void setAlarmState_TrainUser_Max() {
+ trainSensor.overrideSpeedLimit(501);
+ verify(mockTU, times(1)).setAlarmState(true);
+ }
+
+ @Test
+ public void setAlarmState_TrainUser_RelativeLimit() {
+ trainSensor.overrideSpeedLimit(3);
+ verify(mockTU, times(1)).setAlarmState(true);
}
@Test
- public void ThisIsAnExampleTestStub() {
- // TODO Delete this and add test cases based on the issues
+ public void setAlarmState_TrainUser_Between() {
+ trainSensor.overrideSpeedLimit(300);
+ verify(mockTU, times(0)).setAlarmState(false);
}
}
diff --git a/train-user/src/main/java/hu/bme/mit/train/user/TrainUserImpl.java b/train-user/src/main/java/hu/bme/mit/train/user/TrainUserImpl.java
index 93d3b2e59..a3d993ca3 100644
--- a/train-user/src/main/java/hu/bme/mit/train/user/TrainUserImpl.java
+++ b/train-user/src/main/java/hu/bme/mit/train/user/TrainUserImpl.java
@@ -26,6 +26,19 @@ public int getJoystickPosition() {
public void overrideJoystickPosition(int joystickPosition) {
this.joystickPosition = joystickPosition;
controller.setJoystickPosition(joystickPosition);
+
+ controller.followSpeed();
}
+ @Override
+ public boolean getAlarmState() {
+ return alarmState;
+ }
+
+ public void setAlarmState(boolean alarmState) {
+ alarmState = alarmState;
+ }
+
+
+
}