apt-ostree/scripts/test-dbus-communication.sh
robojerk 97a9c40d7e docs: Add comprehensive documentation and update planning
- Add docs/README.md with project overview and current status
- Add docs/architecture.md with detailed architecture documentation
- Add docs/development.md with development guide for contributors
- Update .notes/todo.md to reflect architecture fix completion
- Update .notes/plan.md with completed phases and next priorities

Architecture fixes (daemon and dbus), bubblewrap integration are now complete.
Ready for OCI integration phase.
2025-07-18 23:38:57 +00:00

185 lines
No EOL
5.9 KiB
Bash

#!/bin/bash
# Test D-Bus Communication for apt-ostree
# This script tests the communication between apt-ostree client and daemon
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_header() {
echo -e "${BLUE}[TEST]${NC} $1"
}
# Test counter
TESTS_PASSED=0
TESTS_FAILED=0
# Function to run a test
run_test() {
local test_name="$1"
local test_command="$2"
print_header "Running: $test_name"
echo "Command: $test_command"
if eval "$test_command" > /dev/null 2>&1; then
print_status "✓ PASSED: $test_name"
((TESTS_PASSED++))
else
print_error "✗ FAILED: $test_name"
((TESTS_FAILED++))
fi
echo
}
# Function to run a test with output capture
run_test_with_output() {
local test_name="$1"
local test_command="$2"
print_header "Running: $test_name"
echo "Command: $test_command"
if output=$(eval "$test_command" 2>&1); then
print_status "✓ PASSED: $test_name"
echo "Output: $output"
((TESTS_PASSED++))
else
print_error "✗ FAILED: $test_name"
echo "Error: $output"
((TESTS_FAILED++))
fi
echo
}
print_status "Starting D-Bus Communication Tests for apt-ostree"
echo "=================================================="
echo
# Test 1: Check if daemon binary exists
run_test "Daemon binary exists" "test -f /usr/libexec/apt-ostreed"
# Test 2: Check if daemon binary is executable
run_test "Daemon binary is executable" "test -x /usr/libexec/apt-ostreed"
# Test 3: Check if systemd service is loaded
run_test "Systemd service is loaded" "systemctl is-loaded apt-ostreed.service"
# Test 4: Check if systemd service is active
run_test "Systemd service is active" "systemctl is-active apt-ostreed.service"
# Test 5: Check if D-Bus service is registered
run_test "D-Bus service is registered" "gdbus list --system | grep -q org.aptostree.dev"
# Test 6: Test D-Bus introspection
run_test_with_output "D-Bus introspection" "gdbus introspect --system --dest org.aptostree.dev --object-path /org/aptostree/dev"
# Test 7: Test Ping method
run_test_with_output "D-Bus Ping method" "gdbus call --system --dest org.aptostree.dev --object-path /org/aptostree/dev --method org.aptostree.dev.Daemon.Ping"
# Test 8: Test GetStatus method
run_test_with_output "D-Bus GetStatus method" "gdbus call --system --dest org.aptostree.dev --object-path /org/aptostree/dev --method org.aptostree.dev.Daemon.GetStatus"
# Test 9: Test client-daemon communication via apt-ostree
run_test_with_output "Client daemon ping" "apt-ostree daemon-ping"
# Test 10: Test client-daemon status
run_test_with_output "Client daemon status" "apt-ostree daemon-status"
# Test 11: Check D-Bus policy file
run_test "D-Bus policy file exists" "test -f /etc/dbus-1/system.d/org.aptostree.dev.conf"
# Test 12: Check D-Bus service activation file
run_test "D-Bus service activation file exists" "test -f /usr/share/dbus-1/system-services/org.aptostree.dev.service"
# Test 13: Check Polkit policy file
run_test "Polkit policy file exists" "test -f /usr/share/polkit-1/actions/org.aptostree.dev.policy"
# Test 14: Test D-Bus method listing
run_test_with_output "D-Bus method listing" "gdbus introspect --system --dest org.aptostree.dev --object-path /org/aptostree/dev | grep -A 5 'method'"
# Test 15: Test D-Bus property listing
run_test_with_output "D-Bus property listing" "gdbus introspect --system --dest org.aptostree.dev --object-path /org/aptostree/dev | grep -A 5 'property'"
# Test 16: Check daemon logs
run_test_with_output "Daemon logs" "journalctl -u apt-ostreed.service --no-pager -n 5"
# Test 17: Test D-Bus signal monitoring (timeout after 3 seconds)
print_header "Testing D-Bus signal monitoring (3 second timeout)"
timeout 3s gdbus monitor --system --dest org.aptostree.dev || true
echo
# Test 18: Test client fallback (when daemon is not available)
print_header "Testing client fallback behavior"
# Temporarily stop the daemon
systemctl stop apt-ostreed.service 2>/dev/null || true
sleep 1
# Test if client can handle daemon unavailability
if apt-ostree daemon-ping 2>&1 | grep -q "daemon.*unavailable\|connection.*failed"; then
print_status "✓ PASSED: Client handles daemon unavailability gracefully"
((TESTS_PASSED++))
else
print_warning "⚠ Client behavior with unavailable daemon needs verification"
fi
# Restart the daemon
systemctl start apt-ostreed.service 2>/dev/null || true
sleep 2
echo
# Test 19: Test D-Bus connection with authentication
run_test_with_output "D-Bus connection with authentication" "pkexec gdbus call --system --dest org.aptostree.dev --object-path /org/aptostree/dev --method org.aptostree.dev.Daemon.Ping"
# Test 20: Test D-Bus service activation
print_header "Testing D-Bus service activation"
# Kill the daemon process
pkill -f apt-ostreed || true
sleep 1
# Try to call a D-Bus method (should trigger service activation)
if gdbus call --system --dest org.aptostree.dev --object-path /org/aptostree/dev --method org.aptostree.dev.Daemon.Ping > /dev/null 2>&1; then
print_status "✓ PASSED: D-Bus service activation works"
((TESTS_PASSED++))
else
print_error "✗ FAILED: D-Bus service activation"
((TESTS_FAILED++))
fi
echo
# Summary
echo "=================================================="
print_status "D-Bus Communication Test Summary"
echo "=================================================="
print_status "Tests Passed: $TESTS_PASSED"
if [ $TESTS_FAILED -gt 0 ]; then
print_error "Tests Failed: $TESTS_FAILED"
else
print_status "Tests Failed: $TESTS_FAILED"
fi
if [ $TESTS_FAILED -eq 0 ]; then
print_status "🎉 All D-Bus communication tests passed!"
exit 0
else
print_error "❌ Some D-Bus communication tests failed"
exit 1
fi