184 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
		
		
			
		
	
	
			184 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								require_once dirname(__DIR__, 3) . '/app/classes/host.php';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use PHPUnit\Framework\TestCase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class HostTest extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    private $db;
							 | 
						||
| 
								 | 
							
								    private $host;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    protected function setUp(): void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        parent::setUp();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Set development environment for detailed errors
							 | 
						||
| 
								 | 
							
								        global $config;
							 | 
						||
| 
								 | 
							
								        $config['environment'] = 'development';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Set up test database
							 | 
						||
| 
								 | 
							
								        $this->db = new \Database([
							 | 
						||
| 
								 | 
							
								            'type' => 'sqlite',
							 | 
						||
| 
								 | 
							
								            'dbFile' => ':memory:'
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Create hosts table
							 | 
						||
| 
								 | 
							
								        $this->db->getConnection()->exec("
							 | 
						||
| 
								 | 
							
								            CREATE TABLE hosts (
							 | 
						||
| 
								 | 
							
								                id INTEGER PRIMARY KEY AUTOINCREMENT,
							 | 
						||
| 
								 | 
							
								                platform_id INTEGER NOT NULL,
							 | 
						||
| 
								 | 
							
								                name TEXT NOT NULL,
							 | 
						||
| 
								 | 
							
								                address TEXT NOT NULL
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        ");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Create jilo_agents table for relationship testing
							 | 
						||
| 
								 | 
							
								        $this->db->getConnection()->exec("
							 | 
						||
| 
								 | 
							
								            CREATE TABLE jilo_agents (
							 | 
						||
| 
								 | 
							
								                id INTEGER PRIMARY KEY AUTOINCREMENT,
							 | 
						||
| 
								 | 
							
								                host_id INTEGER NOT NULL,
							 | 
						||
| 
								 | 
							
								                agent_type_id INTEGER NOT NULL,
							 | 
						||
| 
								 | 
							
								                url TEXT NOT NULL,
							 | 
						||
| 
								 | 
							
								                secret_key TEXT,
							 | 
						||
| 
								 | 
							
								                check_period INTEGER DEFAULT 60
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        ");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->host = new \Host($this->db);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testAddHost()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'platform_id' => 1,
							 | 
						||
| 
								 | 
							
								            'name' => 'Test host',
							 | 
						||
| 
								 | 
							
								            'address' => '192.168.1.100'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = $this->host->addHost($data);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($result);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Verify host was created
							 | 
						||
| 
								 | 
							
								        $stmt = $this->db->getConnection()->prepare('SELECT * FROM hosts WHERE platform_id = ? AND name = ?');
							 | 
						||
| 
								 | 
							
								        $stmt->execute([$data['platform_id'], $data['name']]);
							 | 
						||
| 
								 | 
							
								        $host = $stmt->fetch(\PDO::FETCH_ASSOC);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($data['name'], $host['name']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($data['address'], $host['address']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testGetHostDetails()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Add test host
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'platform_id' => 1,
							 | 
						||
| 
								 | 
							
								            'name' => 'Test host',
							 | 
						||
| 
								 | 
							
								            'address' => '192.168.1.100'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $this->host->addHost($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Test getting all hosts
							 | 
						||
| 
								 | 
							
								        $hosts = $this->host->getHostDetails();
							 | 
						||
| 
								 | 
							
								        $this->assertIsArray($hosts);
							 | 
						||
| 
								 | 
							
								        $this->assertCount(1, $hosts);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Test getting hosts by platform
							 | 
						||
| 
								 | 
							
								        $hosts = $this->host->getHostDetails(1);
							 | 
						||
| 
								 | 
							
								        $this->assertIsArray($hosts);
							 | 
						||
| 
								 | 
							
								        $this->assertCount(1, $hosts);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($data['name'], $hosts[0]['name']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Test getting specific host
							 | 
						||
| 
								 | 
							
								        $hosts = $this->host->getHostDetails(1, $hosts[0]['id']);
							 | 
						||
| 
								 | 
							
								        $this->assertIsArray($hosts);
							 | 
						||
| 
								 | 
							
								        $this->assertCount(1, $hosts);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($data['name'], $hosts[0]['name']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testEditHost()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Add test host
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'platform_id' => 1,
							 | 
						||
| 
								 | 
							
								            'name' => 'Test host',
							 | 
						||
| 
								 | 
							
								            'address' => '192.168.1.100'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $this->host->addHost($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Get host ID
							 | 
						||
| 
								 | 
							
								        $stmt = $this->db->getConnection()->prepare('SELECT id FROM hosts WHERE platform_id = ? AND name = ?');
							 | 
						||
| 
								 | 
							
								        $stmt->execute([$data['platform_id'], $data['name']]);
							 | 
						||
| 
								 | 
							
								        $hostId = $stmt->fetch(\PDO::FETCH_COLUMN);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Update host
							 | 
						||
| 
								 | 
							
								        $updateData = [
							 | 
						||
| 
								 | 
							
								            'id' => $hostId,
							 | 
						||
| 
								 | 
							
								            'name' => 'Updated host',
							 | 
						||
| 
								 | 
							
								            'address' => '192.168.1.200'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = $this->host->editHost($data['platform_id'], $updateData);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($result);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Verify update
							 | 
						||
| 
								 | 
							
								        $stmt = $this->db->getConnection()->prepare('SELECT * FROM hosts WHERE id = ?');
							 | 
						||
| 
								 | 
							
								        $stmt->execute([$hostId]);
							 | 
						||
| 
								 | 
							
								        $host = $stmt->fetch(\PDO::FETCH_ASSOC);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($updateData['name'], $host['name']);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals($updateData['address'], $host['address']);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDeleteHost()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // Add test host
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'platform_id' => 1,
							 | 
						||
| 
								 | 
							
								            'name' => 'Test host',
							 | 
						||
| 
								 | 
							
								            'address' => '192.168.1.100'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $this->host->addHost($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Get host ID
							 | 
						||
| 
								 | 
							
								        $stmt = $this->db->getConnection()->prepare('SELECT id FROM hosts WHERE platform_id = ? AND name = ?');
							 | 
						||
| 
								 | 
							
								        $stmt->execute([$data['platform_id'], $data['name']]);
							 | 
						||
| 
								 | 
							
								        $hostId = $stmt->fetch(\PDO::FETCH_COLUMN);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Add test agent to the host
							 | 
						||
| 
								 | 
							
								        $this->db->getConnection()->exec("
							 | 
						||
| 
								 | 
							
								            INSERT INTO jilo_agents (host_id, agent_type_id, url, secret_key)
							 | 
						||
| 
								 | 
							
								            VALUES ($hostId, 1, 'http://test:8080', 'secret')
							 | 
						||
| 
								 | 
							
								        ");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Delete host
							 | 
						||
| 
								 | 
							
								        $result = $this->host->deleteHost($hostId);
							 | 
						||
| 
								 | 
							
								        $this->assertTrue($result);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Verify host deletion
							 | 
						||
| 
								 | 
							
								        $stmt = $this->db->getConnection()->prepare('SELECT COUNT(*) FROM hosts WHERE id = ?');
							 | 
						||
| 
								 | 
							
								        $stmt->execute([$hostId]);
							 | 
						||
| 
								 | 
							
								        $hostCount = $stmt->fetch(\PDO::FETCH_COLUMN);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(0, $hostCount);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Verify agent deletion
							 | 
						||
| 
								 | 
							
								        $stmt = $this->db->getConnection()->prepare('SELECT COUNT(*) FROM jilo_agents WHERE host_id = ?');
							 | 
						||
| 
								 | 
							
								        $stmt->execute([$hostId]);
							 | 
						||
| 
								 | 
							
								        $agentCount = $stmt->fetch(\PDO::FETCH_COLUMN);
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(0, $agentCount);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testEditNonexistentHost()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $updateData = [
							 | 
						||
| 
								 | 
							
								            'id' => 999,
							 | 
						||
| 
								 | 
							
								            'name' => 'Nonexistent host',
							 | 
						||
| 
								 | 
							
								            'address' => '192.168.1.200'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = $this->host->editHost(1, $updateData);
							 | 
						||
| 
								 | 
							
								        $this->assertIsString($result);
							 | 
						||
| 
								 | 
							
								        $this->assertStringContainsString('No host found', $result);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |