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