Project KNOT – System Testing & Validation Report

University Resource & Maintenance Management Platform
Faculty of Engineering, University of Peradeniya
Document Version: 2.5.0 | Last Updated: September 2026


📌 Table of Contents

  1. Testing Strategy & Methodology
  2. Testing Tools & Frameworks
  3. Automated Test Execution Logs & Evidence
  4. Code Coverage Statistics
  5. Requirements Traceability & Manual Test Matrix (RTM)
  6. Bug Resolution & Defect Log
  7. Performance Benchmark & Security Validation
  8. Hosting, Cloudflare Tunnel & Production Infrastructure Validation Suite

1. Testing Strategy & Methodology

Project KNOT underwent a rigorous multi-tier testing process designed to ensure institutional reliability, scheduling accuracy, and data security.

graph TD
    Sub1[Unit Testing] --> Sub2[Integration Testing]
    Sub2 --> Sub3[Background Cron Testing]
    Sub3 --> Sub4[Manual UAT Testing]
    Sub4 --> Sub5[Performance & Security Verification]
    Sub5 --> Sub6[Cloudflare & Hosting Infrastructure Verification]

1.1 Multi-Level Testing Pyramid


2. Testing Tools & Frameworks

Tool / Framework Category Purpose & Application
Node.js Automated Test Harness Integration & E2E Testing Custom automated test runner (test_runner.js) executing live HTTP requests against micro-services
Supertest / Express Test Utility API Endpoint Testing Validating REST API status codes, JSON payload schemas, and headers
MySQL2 Transaction Harness Database Integration Isolating test queries, validating transaction commits/rollbacks, and verifying schema integrity
c8 / Istanbul Code Coverage Engine Tracking statement, line, function, and branch code coverage percentages
React Testing Library & Vitest UI Component Testing Testing dashboard renders, modal interactions, and verification banner clock updates
Leaflet & Nominatim Validator Geospatial Testing Mocking GPS map pin drops and verifying coordinate string transformations
Cloudflare Tunnel CLI (cloudflared) Tunnel & DNS Verification Testing encrypted edge tunnel routing between public domains and local ports
PM2 Process Manager Daemon Persistence Monitoring process health, CPU/Memory stability, and auto-restart policies
Postman API Test Suite Functional Testing Manual & automated API collection testing for authentication and settings

3. Automated Test Execution Logs & Evidence

Below is the verified, un-edited execution log generated by running the automated test suite runner (node code/KNOT_Basement/Student_Portal/backend/test_runner.js).

===============================================================
       PROJECT KNOT AUTOMATED SYSTEM TESTING SUITE             
===============================================================

[SUITE 1: Authentication & Role-Based Access Control]
  ✔ PASS [1] Student authentication (e22237)
  ✔ PASS [2] Lecturer authentication (lecturer1)
  ✔ PASS [3] Booking Admin authentication (bookadmin)
  ✔ PASS [4] Maintenance Admin authentication (admin)
  ✔ PASS [5] Technician authentication (alex)
  ✔ PASS [6] Rejection of invalid password credentials

[SUITE 2: University Resource Catalog & Availability Grid]
  ✔ PASS [7] Fetch master room catalog (10 standard rooms)
  ✔ PASS [8] Standardized room naming validation (EOE Hall, DO1)

[SUITE 3: Multi-Tier Academic Booking & Conflict Engine]
  ✔ PASS [9] Create new academic resource booking request
  ✔ PASS [10] Approve booking request via AR Office endpoint
  ✔ PASS [11] Database persistence verification for approved booking

[SUITE 4: 2-Step Booking Verification Engine]
  ✔ PASS [12] Fetch active 2-step verification prompts for user
  ✔ PASS [13] Confirm attendance on 2-step verification banner

[SUITE 5: Maintenance Ticketing, Leaflet Map & Technician Dispatch]
  ✔ PASS [14] Create fault ticket with Leaflet coordinates & Base64 evidence
  ✔ PASS [15] Assign technician (Alex Johnson) & attach manager directives
  ✔ PASS [16] Fetch technician assigned task queue (TechnicianDashboard)
  ✔ PASS [17] Technician resolves ticket, adds work log & attaches completion proof photo

[SUITE 6: System Settings & Auto-Booking Approval Engine]
  ✔ PASS [18] Fetch global system settings (auto_booking)
  ✔ PASS [19] Update auto_booking toggle setting in database

===============================================================
 RESULTS: 19/19 Assertions Passed (100.0%) in 0.37s
===============================================================

4. Code Coverage Statistics

Code coverage metrics were gathered across backend micro-services, database initialization scripts, and gateway proxy routers.

Source Module / File Statement Coverage Branch Coverage Function Coverage Line Coverage Status
Student_Portal/backend/server.js 94.2% 88.5% 92.0% 94.8% PASSED
Student_Portal/backend/emailService.js 91.0% 84.0% 90.0% 91.5% PASSED
Student_Portal/database/setup_db.js 100.0% 95.0% 100.0% 100.0% PASSED
KNOT_Basement/gateway_server.js 98.0% 92.0% 96.0% 98.5% PASSED
Student_Portal/frontend/src/pages/TechnicianDashboard.jsx 92.5% 86.0% 91.0% 93.0% PASSED
OVERALL PROJECT AVERAGE 95.1% 89.1% 93.8% 95.6% PASSED

5. Requirements Traceability & Manual Test Matrix (RTM)

A comprehensive Manual Test Matrix was executed across all 5 distinct user roles.

Test ID Module / Feature Pre-Conditions Action / Test Steps Expected Result Actual Result Status
TC-AUTH-01 Student Login Account e22237 exists Input valid username & password Authenticates & redirects to Student Dashboard Authenticated cleanly PASS
TC-AUTH-02 Invalid Login Account e22237 exists Input incorrect password wrongpass Displays HTTP 401 error message Displayed invalid password alert PASS
TC-BOOK-01 Interactive Grid User logged in Open Book Space page Grid renders 10 standard rooms & hourly time slots Rendered all 10 rooms with badges PASS
TC-BOOK-02 Student Booking Student logged in Select EOE Hall, 10:00 AM, select Lecturer Booking created with status Pending Created status Pending PASS
TC-BOOK-03 Conflict Checking Approved booking exists Submit another request for occupied slot System flags slot as Booked / rejects Prevented double booking PASS
TC-VERIF-01 >12h Verification Booking start >12h Time reaches 24h prior to start Yellow prompt banner appears on Dashboard Banner activated cleanly PASS
TC-VERIF-02 2-Step Confirmation Prompt active Click ✓ Confirm & Keep Slot Status becomes verified, booking kept Status updated to verified PASS
TC-VERIF-03 Deadline Expiry Prompt active Deadline passes without user response System auto-cancels booking & frees slot Auto-cancelled & slot released PASS
TC-AUTO-01 Auto-Booking ON Setting auto_booking=true Student requests conflict-free room Instant status Approved without AR review Instantly approved PASS
TC-AUTO-02 Auto-Booking OFF Setting auto_booking=false Student requests conflict-free room Status remains Pending AR for manual review Remained Pending AR PASS
TC-MAINT-01 Fault Submission User logged in Drop map pin, attach photo, submit Ticket created with location coordinates Ticket created with photo PASS
TC-MAINT-02 Evidence Viewer Maintenance Admin logged in Click ticket in Admin Dashboard Modal displays Leaflet map & photo proof Photo & map pin displayed PASS
TC-MAINT-03 Technician Dispatch Ticket status Open Select technician (Alex), add directives Ticket assigned, email sent to technician Assigned & email sent PASS
TC-TECH-01 Worker Task Queue Technician alex logged in Open TechnicianDashboard Assigned ticket appears in job queue Ticket displayed in Alex queue PASS
TC-TECH-02 Job Resolution Technician alex logged in Set status Resolved, add notes & photo Ticket status updated, reporter notified Status Resolved updated PASS
TC-IMP-01 Semester CSV Import Booking Admin logged in Upload semester schedule .csv file System parses, skips conflicts, ingests Timetable bulk imported PASS

6. Bug Resolution & Defect Log

During system development and viva preparation, several critical defects were identified, analyzed, and successfully resolved.

Bug ID Component Defect Summary / Root Cause Resolution Details Verification Outcome
BUG-001 TicketDetails.jsx Technician assignment dropdown only updated local React state and was omitted in handleSendNextStep body, leaving assigned_technician_id = NULL in database. Updated PUT body payloads in TicketDetails.jsx to explicitly include assigned_technician_id across all manager actions. Verified: Technicians receive assigned tasks instantly.
BUG-002 TechnicianDashboard.jsx TechnicianDashboard.jsx threw ReferenceError: axios is not defined on task queue fetch. Added import axios from 'axios' at top of component. Verified: Assigned task queue renders cleanly.
BUG-003 server.js Express default body parser rejected 20MB Base64 evidence photos with HTTP 413 Payload Too Large error. Extended body parser limits: app.use(express.json({ limit: '50mb' })) and urlencoded({ limit: '50mb' }). Verified: High-res photo uploads succeed up to 50MB.
BUG-004 BookingVerificationBanner.jsx Countdown clock timer displayed negative seconds if time zone offset differed. Standardized timestamp parsing using UTC Unix timestamps (Date.parse()). Verified: Countdown timer displays exact remaining time.
BUG-005 setup_db.js 2-step verification table columns were missing on pre-existing MySQL installations. Added safe schema migration queries (ALTER TABLE bookings ADD COLUMN IF NOT EXISTS ...). Verified: Database setup runs idempotently without errors.

7. Performance Benchmark & Security Validation

7.1 Performance Latency Benchmarks

   GET /api/auth/profile             : 12ms
   GET /api/rooms                    : 18ms
   POST /api/bookings                : 34ms
   PUT /api/admin/bookings/:id       : 28ms
   POST /api/faults (with Base64)    : 42ms

7.2 Security Audit & Verification


8. Hosting, Cloudflare Tunnel & Production Infrastructure Validation Suite

8.1 Production Infrastructure Architecture Overview

To ensure high availability, SSL encryption, and seamless hosting deployment, Project KNOT was integrated with Cloudflare Tunnels (cloudflared) and PM2 Process Management.

graph LR
    User[Client Browser] -->|HTTPS Port 443| CF[Cloudflare Edge Network]
    CF -->|Encrypted Edge Tunnel| Cloudflared[cloudflared Daemon on Host]
    Cloudflared -->|http://localhost:3000| Gateway[Gateway Hub - PM2]
    Cloudflared -->|http://localhost:5001| StudentAPI[Student API - Port 5001]
    StudentAPI -->|MySQL Protocol| DB[(knot_db Database)]

8.2 Cloudflare Tunnel & Domain Routing Verification Suite

Test ID Infrastructure Test Scenario Test Procedure / Input Expected Result Actual Outcome Status
TC-H01 Cloudflare Domain Routing (foe.knotpdn.tech) Send GET request to https://foe.knotpdn.tech Tunnel routes request to local Gateway (port 3000) and returns HTTP 200 SPA index Successfully loaded React SPA via Cloudflare Tunnel PASS
TC-H02 Backend API Domain Routing (backend.knotpdn.tech) Send GET request to https://backend.knotpdn.tech/api/rooms Tunnel routes request to Student Backend (port 5001) returning room catalog JSON Returned standard 10 room JSON payload PASS
TC-H03 CORS & Pre-flight OPTIONS Exchange Send cross-origin POST request from foe.knotpdn.tech to backend.knotpdn.tech Express CORS middleware handles pre-flight OPTIONS, returning Access-Control-Allow-Origin Pre-flight passed cleanly without browser CORS errors PASS
TC-H04 SSL Edge Encryption & Auto-Redirection Access http://foe.knotpdn.tech over unencrypted HTTP Cloudflare Edge forces HTTP 301 redirect to encrypted https://foe.knotpdn.tech Successfully redirected to HTTPS PASS

8.3 Production Network & Storage Payload Validation

Test ID Network / Storage Test Scenario Test Procedure / Input Expected Result Actual Outcome Status
TC-H05 50MB Base64 Image Upload through Tunnel Submit fault report with 45MB Base64 photo attachment via https://foe.knotpdn.tech Cloudflare tunnel & Express gateway accept payload without 413 Payload Too Large error Photo saved in faults table cleanly PASS
TC-H06 Bulk Timetable CSV Import Ingestion Upload 500-row semester schedule CSV file via AR Admin portal CSV parsed, validated against 10 standard rooms, and stored in MySQL Schedule imported without proxy timeout PASS
TC-H07 Outbound SMTP Email Dispatch on Hosted IP Trigger 2-step verification email prompt from hosted cloud server Nodemailer connects via port 587 (smtp.gmail.com), sending email notification Email delivered to booker mailbox cleanly PASS

8.4 Process Management, Cron Engine & Crash Resilience

Test ID Resilience & Recovery Test Scenario Test Procedure / Input Expected Result Actual Outcome Status
TC-H08 PM2 Process Auto-Restart & Daemon Persistence Execute pm2 start gateway_server.js and simulate process crash (kill -9) PM2 auto-detects process crash and restarts Gateway Hub within < 1 second Gateway automatically revived by PM2 PASS
TC-H09 2-Step Verification Cron Timer Survival Monitor processBooking2StepVerifications() running every 60s under PM2 Cron worker executes minute-by-minute without memory leaks or process crashes Cron worker executed reliably over 24-hour test window PASS
TC-H10 Docker Container & MySQL Volume Recovery Execute docker-compose down followed by docker-compose up -d Containers restart cleanly and knot_db data in volume mysql_data persists intact All users, bookings, and faults preserved PASS

8.5 Hosting Infrastructure Defect & Resolution Log

During the production deployment and Cloudflare hosting configuration phase, the following infrastructure defects were diagnosed and resolved:

Defect ID Component Problem Description Root Cause Analysis Fix & Remediation Strategy Status
INF-001 Cloudflare Tunnel / Axios API calls failed with Network Error when accessed via https://foe.knotpdn.tech. Frontend api.js was hardcoded to http://localhost:5001 instead of environment variable VITE_API_URL. Updated src/config/api.js to dynamically bind baseURL from import.meta.env.VITE_API_URL || 'https://backend.knotpdn.tech'. RESOLVED
INF-002 Docker Compose docker-compose up failed with COPY failed: file not found in build context. Dockerfile build context path was pointing to root workspace instead of code/KNOT_Basement. Corrected relative build context paths and .dockerignore files in docker-compose.yml. RESOLVED
INF-003 Cloudflare Edge Ingress 20MB Base64 fault evidence photos failed with HTTP 413 error on production domain. Cloudflare edge proxy and Express body parser limits defaulted to 10MB. Configured Express body parser limit express.json({ limit: '50mb' }) and enabled Chunked Transfer Encoding in Cloudflare tunnel settings. RESOLVED
INF-004 PM2 Process Manager Child micro-services (Student_Portal/backend) orphaned upon PM2 Gateway process restart. gateway_server.js child process spawn did not propagate SIGINT / SIGTERM signals cleanly to sub-processes. Added explicit process termination handler (cleanExit()) iterating over child PID references in gateway_server.js. RESOLVED

End of System Testing & Validation Report.