234 lines
7.1 KiB
PHP
234 lines
7.1 KiB
PHP
<?php
|
|
|
|
require_once dirname(__DIR__, 3) . '/app/classes/database.php';
|
|
require_once dirname(__DIR__, 3) . '/app/classes/agent.php';
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class AgentTest extends TestCase
|
|
{
|
|
private $db;
|
|
private $agent;
|
|
|
|
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 jilo_agents table
|
|
$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,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
)
|
|
");
|
|
|
|
// Create jilo_agent_types table
|
|
$this->db->getConnection()->exec("
|
|
CREATE TABLE jilo_agent_types (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
description TEXT NOT NULL,
|
|
endpoint TEXT NOT NULL
|
|
)
|
|
");
|
|
|
|
// Create hosts table
|
|
$this->db->getConnection()->exec("
|
|
CREATE TABLE hosts (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
platform_id INTEGER NOT NULL,
|
|
name TEXT NOT NULL
|
|
)
|
|
");
|
|
|
|
// Insert test host
|
|
$this->db->getConnection()->exec("
|
|
INSERT INTO hosts (id, platform_id, name) VALUES (1, 1, 'Test Host')
|
|
");
|
|
|
|
// Insert test agent type
|
|
$this->db->getConnection()->exec("
|
|
INSERT INTO jilo_agent_types (id, description, endpoint)
|
|
VALUES (1, 'Test Agent Type', '/api/test')
|
|
");
|
|
|
|
$this->agent = new Agent($this->db);
|
|
}
|
|
|
|
public function testAddAgent()
|
|
{
|
|
$hostId = 1;
|
|
$data = [
|
|
'type_id' => 1,
|
|
'url' => 'http://test.agent:8080',
|
|
'secret_key' => 'test_secret',
|
|
'check_period' => 60
|
|
];
|
|
|
|
try {
|
|
$result = $this->agent->addAgent($hostId, $data);
|
|
$this->assertTrue($result);
|
|
|
|
// Verify agent was created
|
|
$stmt = $this->db->getConnection()->prepare('SELECT * FROM jilo_agents WHERE host_id = ?');
|
|
$stmt->execute([$hostId]);
|
|
$agent = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
$this->assertEquals($data['url'], $agent['url']);
|
|
$this->assertEquals($data['secret_key'], $agent['secret_key']);
|
|
$this->assertEquals($data['check_period'], $agent['check_period']);
|
|
} catch (Exception $e) {
|
|
$this->fail('An error occurred while adding agent: ' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
public function testGetAgentDetails()
|
|
{
|
|
// Add test agent
|
|
$hostId = 1;
|
|
$data = [
|
|
'type_id' => 1,
|
|
'url' => 'http://test.agent:8080',
|
|
'secret_key' => 'test_secret',
|
|
'check_period' => 60
|
|
];
|
|
|
|
$this->agent->addAgent($hostId, $data);
|
|
|
|
// Test getting agent details
|
|
$agents = $this->agent->getAgentDetails($hostId);
|
|
$this->assertIsArray($agents);
|
|
$this->assertCount(1, $agents);
|
|
$this->assertEquals($data['url'], $agents[0]['url']);
|
|
}
|
|
|
|
public function testEditAgent()
|
|
{
|
|
// Add test agent
|
|
$hostId = 1;
|
|
$data = [
|
|
'type_id' => 1,
|
|
'url' => 'http://test.agent:8080',
|
|
'secret_key' => 'test_secret',
|
|
'check_period' => 60
|
|
];
|
|
|
|
$this->agent->addAgent($hostId, $data);
|
|
|
|
// Get agent ID
|
|
$stmt = $this->db->getConnection()->prepare('SELECT id FROM jilo_agents WHERE host_id = ? LIMIT 1');
|
|
$stmt->execute([$hostId]);
|
|
$agentId = $stmt->fetch(PDO::FETCH_COLUMN);
|
|
|
|
// Update agent
|
|
$updateData = [
|
|
'type_id' => 1,
|
|
'url' => 'http://updated.agent:8080',
|
|
'secret_key' => 'updated_secret',
|
|
'check_period' => 120,
|
|
'agent_type_id' => 1 // Add this field for the update
|
|
];
|
|
|
|
$result = $this->agent->editAgent($agentId, $updateData);
|
|
$this->assertTrue($result);
|
|
|
|
// Verify update
|
|
$stmt = $this->db->getConnection()->prepare('SELECT * FROM jilo_agents WHERE id = ?');
|
|
$stmt->execute([$agentId]);
|
|
$agent = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
$this->assertEquals($updateData['url'], $agent['url']);
|
|
$this->assertEquals($updateData['secret_key'], $agent['secret_key']);
|
|
$this->assertEquals($updateData['check_period'], $agent['check_period']);
|
|
}
|
|
|
|
public function testDeleteAgent()
|
|
{
|
|
// Add test agent
|
|
$hostId = 1;
|
|
$data = [
|
|
'type_id' => 1,
|
|
'url' => 'http://test.agent:8080',
|
|
'secret_key' => 'test_secret',
|
|
'check_period' => 60
|
|
];
|
|
|
|
$this->agent->addAgent($hostId, $data);
|
|
|
|
// Get agent ID
|
|
$stmt = $this->db->getConnection()->prepare('SELECT id FROM jilo_agents WHERE host_id = ? LIMIT 1');
|
|
$stmt->execute([$hostId]);
|
|
$agentId = $stmt->fetch(PDO::FETCH_COLUMN);
|
|
|
|
// Delete agent
|
|
$result = $this->agent->deleteAgent($agentId);
|
|
$this->assertTrue($result);
|
|
|
|
// Verify deletion
|
|
$stmt = $this->db->getConnection()->prepare('SELECT COUNT(*) FROM jilo_agents WHERE id = ?');
|
|
$stmt->execute([$agentId]);
|
|
$count = $stmt->fetch(PDO::FETCH_COLUMN);
|
|
|
|
$this->assertEquals(0, $count);
|
|
}
|
|
|
|
public function testFetchAgent()
|
|
{
|
|
// Add test agent
|
|
$hostId = 1;
|
|
$data = [
|
|
'type_id' => 1,
|
|
'url' => 'http://test.agent:8080',
|
|
'secret_key' => 'test_secret',
|
|
'check_period' => 60
|
|
];
|
|
|
|
$this->agent->addAgent($hostId, $data);
|
|
|
|
// Get agent ID
|
|
$stmt = $this->db->getConnection()->prepare('SELECT id FROM jilo_agents WHERE host_id = ? LIMIT 1');
|
|
$stmt->execute([$hostId]);
|
|
$agentId = $stmt->fetch(PDO::FETCH_COLUMN);
|
|
|
|
// Mock fetch response
|
|
$mockAgent = $this->getMockBuilder(Agent::class)
|
|
->setConstructorArgs([$this->db])
|
|
->onlyMethods(['fetchAgent'])
|
|
->getMock();
|
|
|
|
$mockResponse = json_encode([
|
|
'status' => 'ok',
|
|
'metrics' => [
|
|
'cpu_usage' => 25.5,
|
|
'memory_usage' => 1024,
|
|
'uptime' => 3600
|
|
]
|
|
]);
|
|
|
|
$mockAgent->expects($this->once())
|
|
->method('fetchAgent')
|
|
->willReturn($mockResponse);
|
|
|
|
$response = $mockAgent->fetchAgent($agentId);
|
|
$this->assertJson($response);
|
|
|
|
$data = json_decode($response, true);
|
|
$this->assertEquals('ok', $data['status']);
|
|
}
|
|
}
|