Program for the water play project for the course Software Testing Practical 2016 given at the VU University
Dependencies: mbed DRV88255 TextLCD Ping mbed-rtos
testing.cpp@28:f4a4ee58d57e, 2016-06-14 (annotated)
- Committer:
- sbouber1
- Date:
- Tue Jun 14 09:46:31 2016 +0000
- Revision:
- 28:f4a4ee58d57e
- Parent:
- 23:46cc7d776988
- Child:
- 30:cf12566013a5
pid controller class
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sbouber1 | 21:17dd0d778bda | 1 | #include "mbed.h" |
sbouber1 | 21:17dd0d778bda | 2 | |
sbouber1 | 19:ee89eabe1fa2 | 3 | #include "MockSensorController.h" |
sbouber1 | 19:ee89eabe1fa2 | 4 | #include "AlarmController.h" |
sbouber1 | 19:ee89eabe1fa2 | 5 | #include "testing.h" |
sbouber1 | 19:ee89eabe1fa2 | 6 | |
sbouber1 | 21:17dd0d778bda | 7 | #define NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM 30 |
sbouber1 | 28:f4a4ee58d57e | 8 | #define NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM 300 |
sbouber1 | 19:ee89eabe1fa2 | 9 | |
sbouber1 | 19:ee89eabe1fa2 | 10 | void TestCase::assertTrue(bool b, const char *error) { |
sbouber1 | 19:ee89eabe1fa2 | 11 | if(!b) { |
sbouber1 | 19:ee89eabe1fa2 | 12 | printf("[%s] ASSERTION FAILED: %s\r\n", this->name, error); |
sbouber1 | 19:ee89eabe1fa2 | 13 | this->failed = true; |
sbouber1 | 19:ee89eabe1fa2 | 14 | } |
sbouber1 | 19:ee89eabe1fa2 | 15 | } |
sbouber1 | 19:ee89eabe1fa2 | 16 | |
sbouber1 | 28:f4a4ee58d57e | 17 | MOCK(temp_mock_steady, 35.0); |
sbouber1 | 23:46cc7d776988 | 18 | MOCK(salt_mock_steady, 6.1); |
sbouber1 | 23:46cc7d776988 | 19 | MOCK(prox_mock_steady, 10.0); |
sbouber1 | 23:46cc7d776988 | 20 | |
sbouber1 | 22:4b5bf1c2e1ff | 21 | MOCK(temp_mock1, 40.1+(t/1000.0)); |
sbouber1 | 19:ee89eabe1fa2 | 22 | bool testTempDangerousHighAlarm(TestCase *tc) { |
sbouber1 | 19:ee89eabe1fa2 | 23 | |
sbouber1 | 23:46cc7d776988 | 24 | DEF_MOCKS(temp_mock1, salt_mock_steady, prox_mock_steady); |
sbouber1 | 19:ee89eabe1fa2 | 25 | |
sbouber1 | 19:ee89eabe1fa2 | 26 | AlarmController alarm(false,0,&temp,&salt,&prox); |
sbouber1 | 22:4b5bf1c2e1ff | 27 | for(int i = 0; i < NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1; i++) { |
sbouber1 | 21:17dd0d778bda | 28 | alarm.run(); |
sbouber1 | 21:17dd0d778bda | 29 | Thread::wait(1000); |
sbouber1 | 21:17dd0d778bda | 30 | } |
sbouber1 | 21:17dd0d778bda | 31 | |
sbouber1 | 19:ee89eabe1fa2 | 32 | return alarm.is_error(); |
sbouber1 | 19:ee89eabe1fa2 | 33 | } |
sbouber1 | 19:ee89eabe1fa2 | 34 | |
sbouber1 | 19:ee89eabe1fa2 | 35 | |
sbouber1 | 22:4b5bf1c2e1ff | 36 | MOCK(temp_mock2, 29.9-(t/1000.0)); |
sbouber1 | 22:4b5bf1c2e1ff | 37 | bool testTempDangerousLowAlarm(TestCase *tc) { |
sbouber1 | 22:4b5bf1c2e1ff | 38 | |
sbouber1 | 23:46cc7d776988 | 39 | DEF_MOCKS(temp_mock2, salt_mock_steady, prox_mock_steady); |
sbouber1 | 22:4b5bf1c2e1ff | 40 | |
sbouber1 | 22:4b5bf1c2e1ff | 41 | AlarmController alarm(false,0,&temp,&salt,&prox); |
sbouber1 | 22:4b5bf1c2e1ff | 42 | for(int i = 0; i < NUMBER_OF_SEC_BEFORE_CRITICAL_ALARM+1; i++) { |
sbouber1 | 22:4b5bf1c2e1ff | 43 | alarm.run(); |
sbouber1 | 22:4b5bf1c2e1ff | 44 | Thread::wait(1000); |
sbouber1 | 22:4b5bf1c2e1ff | 45 | } |
sbouber1 | 22:4b5bf1c2e1ff | 46 | |
sbouber1 | 22:4b5bf1c2e1ff | 47 | return alarm.is_error(); |
sbouber1 | 22:4b5bf1c2e1ff | 48 | } |
sbouber1 | 22:4b5bf1c2e1ff | 49 | |
sbouber1 | 22:4b5bf1c2e1ff | 50 | MOCK(temp_mock3, 30+t*0.000001); |
sbouber1 | 22:4b5bf1c2e1ff | 51 | bool testTempLowRangeAlarm(TestCase *tc) { |
sbouber1 | 22:4b5bf1c2e1ff | 52 | |
sbouber1 | 23:46cc7d776988 | 53 | DEF_MOCKS(temp_mock3, salt_mock_steady, prox_mock_steady); |
sbouber1 | 22:4b5bf1c2e1ff | 54 | |
sbouber1 | 22:4b5bf1c2e1ff | 55 | AlarmController alarm(false,0,&temp,&salt,&prox); |
sbouber1 | 28:f4a4ee58d57e | 56 | for(int i = 0; i < NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1; i++) { |
sbouber1 | 22:4b5bf1c2e1ff | 57 | alarm.run(); |
sbouber1 | 22:4b5bf1c2e1ff | 58 | Thread::wait(1000); |
sbouber1 | 22:4b5bf1c2e1ff | 59 | } |
sbouber1 | 22:4b5bf1c2e1ff | 60 | |
sbouber1 | 22:4b5bf1c2e1ff | 61 | return alarm.is_error(); |
sbouber1 | 22:4b5bf1c2e1ff | 62 | } |
sbouber1 | 22:4b5bf1c2e1ff | 63 | |
sbouber1 | 22:4b5bf1c2e1ff | 64 | |
sbouber1 | 22:4b5bf1c2e1ff | 65 | MOCK(temp_mock4, 38+t*0.000001); |
sbouber1 | 22:4b5bf1c2e1ff | 66 | bool testTempHighRangeAlarm(TestCase *tc) { |
sbouber1 | 22:4b5bf1c2e1ff | 67 | |
sbouber1 | 23:46cc7d776988 | 68 | DEF_MOCKS(temp_mock4, salt_mock_steady, prox_mock_steady); |
sbouber1 | 22:4b5bf1c2e1ff | 69 | |
sbouber1 | 22:4b5bf1c2e1ff | 70 | AlarmController alarm(false,0,&temp,&salt,&prox); |
sbouber1 | 28:f4a4ee58d57e | 71 | for(int i = 0; i < NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1; i++) { |
sbouber1 | 22:4b5bf1c2e1ff | 72 | alarm.run(); |
sbouber1 | 22:4b5bf1c2e1ff | 73 | Thread::wait(1000); |
sbouber1 | 22:4b5bf1c2e1ff | 74 | } |
sbouber1 | 22:4b5bf1c2e1ff | 75 | |
sbouber1 | 22:4b5bf1c2e1ff | 76 | return alarm.is_error(); |
sbouber1 | 22:4b5bf1c2e1ff | 77 | } |
sbouber1 | 22:4b5bf1c2e1ff | 78 | |
sbouber1 | 19:ee89eabe1fa2 | 79 | |
sbouber1 | 23:46cc7d776988 | 80 | bool testTemperatureHeater(TestCase *tc) { |
sbouber1 | 23:46cc7d776988 | 81 | // TODO |
sbouber1 | 23:46cc7d776988 | 82 | return true; |
sbouber1 | 23:46cc7d776988 | 83 | } |
sbouber1 | 23:46cc7d776988 | 84 | |
sbouber1 | 28:f4a4ee58d57e | 85 | MOCK(overflow_undesired_mock, 900+(t/4000.0)); |
sbouber1 | 28:f4a4ee58d57e | 86 | bool testAlarmWaterOverflowUndesired(TestCase *tc) { |
sbouber1 | 28:f4a4ee58d57e | 87 | DEF_MOCKS(temp_mock_steady, salt_mock_steady, overflow_undesired_mock); |
sbouber1 | 28:f4a4ee58d57e | 88 | |
sbouber1 | 28:f4a4ee58d57e | 89 | AlarmController alarm(false,0,&temp,&salt,&prox); |
sbouber1 | 28:f4a4ee58d57e | 90 | for(int i = 0; i < NUMBER_OF_SEC_BEFORE_UNDESIRED_ALARM+1; i++) { |
sbouber1 | 28:f4a4ee58d57e | 91 | alarm.run(); |
sbouber1 | 28:f4a4ee58d57e | 92 | Thread::wait(1000); |
sbouber1 | 28:f4a4ee58d57e | 93 | } |
sbouber1 | 28:f4a4ee58d57e | 94 | |
sbouber1 | 28:f4a4ee58d57e | 95 | return alarm.is_error(); |
sbouber1 | 23:46cc7d776988 | 96 | } |
sbouber1 | 23:46cc7d776988 | 97 | |
sbouber1 | 28:f4a4ee58d57e | 98 | bool testAlarmWaterOverflowCritical(TestCase *tc) { |
sbouber1 | 28:f4a4ee58d57e | 99 | // TODO 1001 should raise alarm in 30 sec |
sbouber1 | 23:46cc7d776988 | 100 | return true; |
sbouber1 | 23:46cc7d776988 | 101 | } |
sbouber1 | 23:46cc7d776988 | 102 | |
sbouber1 | 28:f4a4ee58d57e | 103 | bool testAlarmWaterLeakUndesired(TestCase *tc) { |
sbouber1 | 28:f4a4ee58d57e | 104 | // TODO 0-100 ml for 5 minutes |
sbouber1 | 28:f4a4ee58d57e | 105 | return true; |
sbouber1 | 28:f4a4ee58d57e | 106 | } |
sbouber1 | 28:f4a4ee58d57e | 107 | |
sbouber1 | 28:f4a4ee58d57e | 108 | bool testAlarmWaterLeakCritical(TestCase *tc) { |
sbouber1 | 28:f4a4ee58d57e | 109 | // TODO 0 ml should produce alarm in 30 sec |
sbouber1 | 28:f4a4ee58d57e | 110 | return true; |
sbouber1 | 28:f4a4ee58d57e | 111 | } |
sbouber1 | 28:f4a4ee58d57e | 112 | |
sbouber1 | 19:ee89eabe1fa2 | 113 | int test_main() { |
sbouber1 | 28:f4a4ee58d57e | 114 | TestCase("Test if alarm is raised when temp > 40 for 30 seconds", testTempDangerousHighAlarm); |
sbouber1 | 28:f4a4ee58d57e | 115 | TestCase("Test if alarm is raised when temp < 30 for 30 seconds", testTempDangerousLowAlarm); |
sbouber1 | 28:f4a4ee58d57e | 116 | TestCase("Test if alarm is raised when temp > 30 and < 32 for 300 seconds", testTempLowRangeAlarm); |
sbouber1 | 28:f4a4ee58d57e | 117 | TestCase("Test if alarm is raised when temp > 38 and < 40 for 300 seconds", testTempHighRangeAlarm); |
sbouber1 | 28:f4a4ee58d57e | 118 | //TestCase("Test if heater gets enabled at < 32 and disabled at 32+", testTemperatureHeater); |
sbouber1 | 19:ee89eabe1fa2 | 119 | |
sbouber1 | 19:ee89eabe1fa2 | 120 | return 0; |
sbouber1 | 19:ee89eabe1fa2 | 121 | } |