generated from wessel/boilerplate
152 lines
4.9 KiB
Markdown
152 lines
4.9 KiB
Markdown
# Integration Test
|
|
|
|
Tests the whole integrated system `nodes` connected with each other, with supervisory control and visualization of the database. It tests all major components working together: exam result generation, calculation, database usage, and retake handling.
|
|
|
|
For validation and verification of database data the databse viewer Dbeaver can be used.
|
|
|
|
## Test Input Data
|
|
|
|
**Student Enrollments:**
|
|
|
|
- `"Wessel", "ROS2"`
|
|
- `"Vincent", "ROS2"`
|
|
- `"Mohammed", "Differentieren"`
|
|
- `"Tilmann", "Differentieren"`
|
|
|
|
## Test workflow
|
|
|
|
### 1. Complete Grade Processing Pipeline
|
|
|
|
**Description**: Tests the full workflow from student enrollment through exam generation to final grade calculation.
|
|
|
|
**Steps:**
|
|
|
|
1. **Setup Phase**
|
|
- Clear the database via `docker container prune` or by deleting the tables in dbeaver.
|
|
- Start the databse in a standalone terminal via the command `sudo docker compose up`.
|
|
- Verify database connection.
|
|
- Initialize all system nodes (ExamResultGenerator, FinalGradeDeterminator, GradeCalculator) after building tha package and starting it via the `grade_calculator.launch.xml`.
|
|
|
|
2. **Exam Generation Phase**
|
|
- ExamResultGenerator publishes Exam messages per student-course pair to table `exam_results` topic.
|
|
- Verify exam results have valid grades (10-100 range).
|
|
- Confirm proper timestamp and student/course name matching.
|
|
|
|
3. **Grade Collection Phase**
|
|
- FinalGradeDeterminator collects exam results for each student-course combination.
|
|
- Monitor collection count reaches threshold (5 exams per student-course by default) for each student.
|
|
|
|
4. **Grade Calculation Phase**
|
|
- FinalGradeDeterminator calls GradeCalculator service when threshold reached.
|
|
- Service calculates average grade.
|
|
|
|
5. **Persistence and Notification Phase**
|
|
- Final grades stored in database with proper timestamps.
|
|
- verify that final_grade_determinator has sent a de-enroll request via student_course_managment to exam_result_generator.
|
|
- exam_result_generator should now prints `removed from queue`.
|
|
- Verify final grade is within valid bounds (10-100) in table `final_course_results`.
|
|
|
|
**Expected Results:**
|
|
|
|
```text
|
|
Student: Wessel, Course: ROS2
|
|
- 5 exam results generated (random grades 10-100)
|
|
- Avrage final grade calculated
|
|
- Grade stored in database
|
|
|
|
|
|
Student: Vincent, Course: ROS2
|
|
- 5 exam results generated (random grades 10-100)
|
|
- Avrage final grade calculated
|
|
- Grade stored in database
|
|
|
|
|
|
Student: Mohammed, Course: Differentieren
|
|
- 5 exam results generated (random grades 10-100)
|
|
- Avrage final grade calculated
|
|
- Grade stored in database
|
|
|
|
|
|
Student: Tilmann, Course: Differentieren
|
|
- 5 exam results generated (random grades 10-100)
|
|
- Avrage final grade calculated
|
|
- Grade stored in database
|
|
```
|
|
|
|
### 2. Retake Process Integration
|
|
|
|
**Description**: Tests the retake workflow for students who need to retake exams.
|
|
|
|
**Setup:**
|
|
|
|
no setup required, this starts immediately after `final_grade_diterminator` is done after getting the first grades for the students.
|
|
|
|
**Steps:**
|
|
|
|
1. **Varify Retake Schedualer is started**
|
|
- Verify in the terminal the schedualer starts the retake process.
|
|
|
|
2. **Retake Request Phase**
|
|
- RetakeScheduler checks the database for failing students
|
|
- Schedules retake exams with `retake_grade_determinator`
|
|
|
|
3. **Retake Execution Phase**
|
|
- Generate retake exam results
|
|
- `retake_grade_determinator` processes retake grades and sends them to the calcculator.
|
|
- `retake_grade_determinator` finaly stores the calculated result in the database.
|
|
|
|
4. **Final Grade Update**
|
|
- Verify grade history preservation
|
|
- Confirm final grade reflects retake performance
|
|
|
|
**Failing student Expected Retake Results:**
|
|
|
|
```text
|
|
Student: student, Course: course
|
|
- 5 exam results generated (random grades 10-100)
|
|
- Avrage final grade calculated
|
|
- Grade stored in database
|
|
- Retake_done checkmark
|
|
- Is_retake checkmark
|
|
```
|
|
|
|
## Success Criteria
|
|
|
|
### Functional Requirements
|
|
|
|
All student enrollments processed correctly
|
|
Exam results generated within valid range (10-100)
|
|
Grade collection reaches configured thresholds
|
|
Final grades calculated using proper business logic
|
|
Database persistence works reliably
|
|
Retake process functions correctly when needed
|
|
All ROS2 communication protocols working
|
|
|
|
## Test Execution Commands
|
|
|
|
```bash
|
|
# 1. enter the ros2 assignment folder
|
|
cd /YOUR/PATH/HERE/ros2-assignment
|
|
|
|
# 2. Build the packages and source the enviroment
|
|
colcon build && source install/setup.bash
|
|
|
|
# 3. clear and Start database (if not running) in stand alone terminal
|
|
sudo docker container prune && sudo docker compose up
|
|
|
|
# 4. Launch all system nodes
|
|
ros2 launch g2_2025_assign1_pkg grade_calculator.launch.xml
|
|
|
|
# 6. Monitor database state
|
|
By opening dbeaver and connecting to the database "grades".
|
|
Password: postgres
|
|
```
|
|
|
|
## Verification
|
|
|
|
### Database Validation
|
|
|
|
- **Student Records**: Verify all students are enrolled correctly
|
|
- **Exam Results**: Confirm all exam data is good
|
|
- **Final Grades**: Validate calculated grades and timestamps
|