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; + } + + + }