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