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);
 | |
|     }
 | |
| }
 |