Skip to content
Snippets Groups Projects
ExampleTest.php 9.84 KiB
Newer Older
Bilal Talhaoui's avatar
Bilal Talhaoui committed
<?php

namespace Tests\Unit;

Tibo's avatar
Tibo committed
use App\User;
use App\Notification;
Tibo's avatar
Tibo committed
use App\Organization;
Tibo's avatar
Tibo committed
use App\Server;
Tibo's avatar
Tibo committed
use App\ServerInfo;
Tibo's avatar
Tibo committed
use App\Sensor\Disks;
use App\Sensor\CPUtemperature;
Tibo's avatar
Tibo committed
use App\Sensor\Ifconfig;
Bilal Talhaoui's avatar
Bilal Talhaoui committed
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends TestCase
{
Tibo's avatar
Tibo committed

    use RefreshDatabase;

Bilal Talhaoui's avatar
Bilal Talhaoui committed
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $this->assertTrue(true);
    }
Tibo's avatar
Tibo committed
    public function testClassInstance()
    {
        $class = Server::class;
        $server = new $class;
        $this->assertEquals("App\Server", get_class($server));
    }

Tibo's avatar
Tibo committed
    public function testRelations()
    {
Tibo's avatar
Tibo committed
        $user = new User();
        $user->name = "test";
        $user->email = "test@example.com";
        $user->password = "abc123";
        $user->save();

        $organization = new Organization();
        $organization->name = "Org";
        $organization->save();

        $organization->users()->save($user);

Tibo's avatar
Tibo committed
        $this->assertEquals(
            "Org",
            $user->organizations()->first()->name
        );
Tibo's avatar
Tibo committed
    }
Tibo's avatar
Tibo committed

Tibo's avatar
Tibo committed
    /**
     * @group ifconfig
     * @group sensors
     */
Tibo's avatar
Tibo committed
    public function testIfconfig()
    {
Tibo's avatar
Tibo committed
        $string = file_get_contents(__DIR__ . "/ifconfig");
        $sensor = new Ifconfig(new \App\Server());
        $interfaces = $sensor->parseIfconfig($string);
Tibo's avatar
Tibo committed
        $this->assertEquals(2, count($interfaces));
        $this->assertEquals("enp0s31f6", $interfaces[0]->name);
        $this->assertEquals("10.67.1.32", $interfaces[1]->address);
        $this->assertEquals(1074590056, $interfaces[1]->rx);
        $this->assertEquals(2074977132, $interfaces[1]->tx);
Tibo's avatar
Tibo committed
    }
Tibo's avatar
Tibo committed

    /**
     * Test parsing of ifconfig string from a ubuntu 18.04 server
     *
     * @group ifconfig
     * @group sensors
     */
    public function testIfconfig1804()
    {
        $string = file_get_contents(__DIR__ . "/ifconfig1804");
        $sensor = new Ifconfig(new \App\Server());
        $interfaces = $sensor->parseIfconfig($string);
        $this->assertEquals(2, count($interfaces));
        $this->assertEquals("eno1", $interfaces[0]->name);
        $this->assertEquals("172.20.0.8", $interfaces[1]->address);
        $this->assertEquals(185252610, $interfaces[1]->rx);
        $this->assertEquals(266912412, $interfaces[1]->tx);
    }

    /**
     * @group Disks
     */
Tibo's avatar
Tibo committed
    public function testDisksSensor()
    {
Tibo's avatar
Tibo committed
        $string = file_get_contents(__DIR__ . "/df");
Tibo's avatar
Tibo committed
        $sensor = new Disks(new Server());
Tibo's avatar
Tibo committed
        $disks = $sensor->parse($string);
Tibo's avatar
Tibo committed
        $this->assertEquals(2, count($disks));
Tibo's avatar
Tibo committed
        $this->assertEquals("/dev/sda1", $disks[0]->filesystem);
        $this->assertEquals(1128926648, $disks[0]->blocks);
Tibo's avatar
Tibo committed
    }

Tibo's avatar
Tibo committed
    public function testNetstatListening()
    {
        $string = file_get_contents(__DIR__ . "/netstat-tcp");
        $sensor = new \App\Sensor\ListeningPorts(new Server());
        $ports = $sensor->parse($string);
        $this->assertEquals(16, count($ports));
        $this->assertEquals("31933/cloud-backup-", $ports[4]->process);
        $this->assertEquals(1024, $ports[4]->port);
        $this->assertEquals("127.0.0.1", $ports[4]->bind);
    }

Tibo's avatar
Tibo committed
    public function testSsacli()
    {
Tibo's avatar
Tibo committed
        $string = file_get_contents(__DIR__ . "/ssacli");
Tibo's avatar
Tibo committed
        $sensor = new \App\Sensor\Ssacli(new Server());
Tibo's avatar
Tibo committed
        $disks = $sensor->parse($string);
        $this->assertEquals("OK", $disks[0]->status);
    }

Tibo's avatar
Tibo committed
    public function testPerccli()
    {
        $string = file_get_contents(__DIR__ . "/perccli");
        $sensor = new \App\Sensor\Perccli(new Server());
        $disks = $sensor->parse($string);
        $this->assertEquals("Onln", $disks[0]->status);
        $this->assertEquals("SSD", $disks[0]->type);
        $this->assertEquals("446.625 GB", $disks[0]->size);
    }

Tibo's avatar
Tibo committed
    public function testUpdates()
    {
Tibo's avatar
Tibo committed
        $sensor = new \App\Sensor\Updates(new \App\Server());

        $string1 = "6 packages can be updated.
2 updates are security updates.";
        $status = $sensor->parse($string1);
Tibo's avatar
Tibo committed
        $this->assertEquals(2, $status["security"]);

        $string2 = "1 package can be updated.
1 update is a security update.
";
        $status2 = $sensor->parse($string2);
        $this->assertEquals(1, $status2["security"]);
Tibo's avatar
Tibo committed
    public function testMeminfo()
    {
Tibo's avatar
Tibo committed
        $string = file_get_contents(__DIR__ . "/meminfo");
Tibo's avatar
Tibo committed
        $mem_total = (new ServerInfo(null))->parseMeminfo($string);
Tibo's avatar
Tibo committed
        $this->assertEquals("15954328", $mem_total);
    }

Tibo's avatar
Tibo committed
    /**
     * @group cpuinfo
     */
Tibo's avatar
Tibo committed
    public function testCpuinfo()
    {
Tibo's avatar
Tibo committed
        $string = file_get_contents(__DIR__ . "/cpuinfo");
Tibo's avatar
Tibo committed
        $cpuinfo = (new ServerInfo(null))->parseCpuinfo($string);
Tibo's avatar
Tibo committed
        $this->assertEquals(8, $cpuinfo["threads"]);
        $this->assertEquals("Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz", $cpuinfo["cpu"]);
Tibo's avatar
Tibo committed

    /**
     * @group uptime
     */
    public function testUptime()
    {
        $string = "24439.45 190434.65";
Tibo's avatar
Tibo committed
        $uptime = (new ServerInfo(null))->parseUptime($string);
Tibo's avatar
Tibo committed
        $this->assertEquals("6 hours", $uptime);
    }
Tibo's avatar
Tibo committed

    public function testUUID()
    {
Tibo's avatar
Tibo committed
        $uuid = (new ServerInfo(null))->parseUUID(file_get_contents(__DIR__ . "/system"));
Tibo's avatar
Tibo committed
        $this->assertEquals("74F7C34C-2924-11B2-A85C-DC427DCA7109", $uuid);
    }
Tibo's avatar
Tibo committed

Tibo's avatar
Tibo committed
    /**
     * @group cpuinfo
     */
Tibo's avatar
Tibo committed
    public function testCpuinfoSingleCPU()
    {
Tibo's avatar
Tibo committed
        $string = file_get_contents(__DIR__ . "/cpuinfo_1cpu");
Tibo's avatar
Tibo committed
        $cpuinfo = (new ServerInfo(null))->parseCpuinfo($string);
Tibo's avatar
Tibo committed
        $this->assertEquals(1, $cpuinfo["threads"]);
        $this->assertEquals("Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz", $cpuinfo["cpu"]);
    }

Tibo's avatar
Tibo committed
    public function testManufacturer()
    {
        $string = file_get_contents(__DIR__ . "/system");
Tibo's avatar
Tibo committed
        $manufacturer = (new ServerInfo(null))->parseManufacturer($string);
        $this->assertEquals("LENOVO", $manufacturer);
    }

Tibo's avatar
Tibo committed
    public function testProductName()
    {
        $string = file_get_contents(__DIR__ . "/system");
Tibo's avatar
Tibo committed
        $manufacturer = (new ServerInfo(null))->parseProductName($string);
        $this->assertEquals("20J60018MB", $manufacturer);
Tibo's avatar
Tibo committed
    public function testClientVersion()
    {
        $server = new \App\Server();
        $client_version = new \App\Sensor\ClientVersion($server);
Tibo's avatar
Tibo committed
        $this->assertStringMatchesFormat('%d.%d.%d', $client_version->latestVersion());
Tibo's avatar
Tibo committed
    }
Tibo's avatar
Tibo committed

    /**
     * @group netstat
     */
    public function testNetstat()
    {
        $string = file_get_contents(__DIR__ . "/netstat");
        $server = new \App\Server();
        $netstat = new \App\Sensor\Netstat($server);
        $this->assertEquals(24004, $netstat->parse($string)->tcp_segments_retransmitted);
    }

Tibo's avatar
Tibo committed
    /**
     * @group status-change
     */
Tibo's avatar
Tibo committed
    public function testStatusChangeDetection()
    {
Tibo's avatar
Tibo committed
        $organization = new Organization();
        $organization->name = "ACME";
        $organization->save();

Tibo's avatar
Tibo committed
        $server = new \App\Server();
Tibo's avatar
Tibo committed
        $server->name = "My test server";
        $server->organization()->associate($organization);
        $server->save();

        $server_id = $server->id;

        $user = new User();
        $user->name = "Test";
        $user->email = "thibault.debatty@gmail.com";
        $user->password = "qmlskdj";
        $user->save();
        $organization->users()->attach($user->id);
Tibo's avatar
Tibo committed

Tibo's avatar
Tibo committed
        $this->assertEquals($server_id, \App\StatusChange::getLastChangeForServer(1)->server_id);
Tibo's avatar
Tibo committed

        // Insert a fake status change
        $change = new \App\StatusChange();
        $change->status = 155;
Tibo's avatar
Tibo committed
        $change->server_id = $server_id;
Tibo's avatar
Tibo committed

        // Run change detection
        $change_detection_job = new \App\Jobs\StatusChangeDetection();
        $change_detection_job->detectChangeForServer($server);

        // Check if a new StatusChange was inserted in Mongo
Tibo's avatar
Tibo committed
        $last_change = \App\StatusChange::getLastChangeForServer($server_id);
        $records = $server->lastRecords1Day();
Tibo's avatar
Tibo committed
        $this->assertEquals(
Tibo's avatar
Tibo committed
            $server->status($records)->code(),
Tibo's avatar
Tibo committed
            $last_change->status
        );

        // Check if a notification were inserted
        $this->assertTrue(Notification::findForServer($server_id)->count() > 0);

        // Insert multiple status changes to simulate bouncing

        for ($i = 0; $i < 4; $i++) {
            $change = new \App\StatusChange();
            $change->status = 155;
            $change->server_id = $server_id;
            $change->save();

            // Run change detection
            $change_detection_job = new \App\Jobs\StatusChangeDetection();
            $change_detection_job->detectChangeForServer($server);
        }
Tibo's avatar
Tibo committed
    }
    /**
     * @group CPUtemp
     */
    public function testCPUtemp()
    {
        $string = file_get_contents(__DIR__ . "/sensors");
        $sensor = new CPUtemperature(new Server());
        $CPUTEMPS = $sensor->parse($string);
        $this->assertEquals(4, count($CPUTEMPS));
        $this->assertEquals("Core 3", $CPUTEMPS[3]->name);
        $this->assertEquals("34.0", $CPUTEMPS[3]->value);
    }
    /**
     * @group USBtemp
     */
    public function testTEMPer()
    {
        $string = file_get_contents(__DIR__ . "/TEMPer");
        $TEMPer = new USBtemperature(new Server());
        $USBTemp = $TEMPer->parse($string);
Jan Cantaert's avatar
Jan Cantaert committed
        $this->assertEquals("09", $USBTemp->part1);
        $this->assertEquals("47", $USBTemp->part2);
        $this->assertEquals("23", $USBTemp->temp[1]);
        $this->assertEquals("75", $USBTemp->temp[2]);
    /**
     * @group multicpu
     */
    public function testmultiCPUtemp()
    {
        $string = file_get_contents(__DIR__ . "/sensors");
        $sensor = new CPUtemperature(new Server());
        $CPUTEMPS = $sensor->parseCPUtemperature($string);
        $this->assertEquals(4, count($CPUTEMPS));
        $this->assertEquals("Core 3", $CPUTEMPS[3]->name);
        $this->assertEquals("34.0", $CPUTEMPS[3]->corevalue);
    }