package ONO::ToolBox::Test;
################################################################################
# COPYRIGHT / LICENSE #
################################################################################
#
# This file is part of the ONO Software Project.
#
# Copyright (C) 2000-2025 Jos KIRPS [ www.kirps.com | jos_AT_kirps_DOT_com ]
# and The Joopita Project [ www.joopita.org | contact_AT_joopita_DOT_com ]
#
# This file, as well as other parts of the ONO Software Project or related
# elements, are FREE SOFTWARE available under the ARTISTIC LICENSE 2.0.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# For the full license, see /ono/osr/license/LICENSE.txt, or write to
# jos_AT_kirps_DOT_com or contact_AT_joopita_DOT_com.
#
################################################################################
# END OF COPYRIGHT / LICENSE, HERE COMES THE CODE ... #
################################################################################
use strict;
use ONO::IO;
use ONO::Lib::Code::RandomID;
use ONO::Lib::PDF::Gen;
use ONO::Lib::PDF::ToolBox;
use ONO::Lib::PDF::Draw;
use ONO::Lib::Image::Magick;
use ONO::Lib::Image::ToolBox;
use ONO::Lib::Video::ToolBox;
use ONO::Render;
#: This module offers some system related test that allow to check and monitor
#: some advanced external features.
###############################################################################
# TEST SUITE
###############################################################################
sub monitor {
my (
$self,
$mode,
$vars_ref,
) = @_;
my %vars = %$vars_ref;
my $BASE = ONO::IO->base();
#: This allows to monitor basic OS features, currently only ImageMagick is
#: being supported.
#:
#: If ImageMagick is running and if it can successfully convert an image,
#: then a green LED is being returned. If the image conversion is failing
#: for any reason, then a red LED ist being returned.
my $HTML;
foreach my $line (ONO::IO->list("etc/softwaretest.conf")) {
$line =~ s~(\n|\r|\t)~~g;
if ($line =~ /^$mode $vars{'export_key'}$/) {
my $ID = ONO::Lib::Code::RandomID->make();
ONO::IO->mkpath("var/tmp/test/$ID");
if ($mode eq "imagemagick") {
my $LED = "red";
eval "use Image::Magick";
if (!$@) {
ONO::Lib::Image::Magick->convert("/ono/osr/test/files/image_640_400.png","/var/tmp/test/$ID/image_test.jpg");
if (ONO::IO->exists("var/tmp/test/$ID/image_test.jpg") && ONO::IO->size("var/tmp/test/$ID/image_test.jpg") > 1) {
$LED = "green";
}
}
my $SERVER = $ENV{'SERVER_NAME'};
if ($SERVER =~ /^(.*?)\.(.*?)\.(.*?)$/) {
$SERVER = $2;
}
$SERVER =~ s~\.(.*)$~~;
$SERVER = substr($SERVER,0,3);
$HTML = qq~<table class="default_table auto">
<tr>
<td><img class="block12" src="$BASE/ono/osr/images/leds/16x16/$LED.png" alt=""></td>
<td class="small">$SERVER</td>
</tr>
</table>
~;
}
foreach my $file (ONO::IO->ls("var/tmp/test/$ID")) {
ONO::IO->rm("var/tmp/test/$ID/$file");
}
ONO::IO->rmdir("var/tmp/test/$ID");
}
}
if (!$HTML) {
$HTML = "no_data, bad_data, or not_configured";
}
if ($vars{'ajax_export_wrapper'} eq "html") {
my $CSSJS = ONO::Render->cssjs($BASE);
$HTML = qq~<html>
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow">
<meta http-equiv="refresh" content="300">
$CSSJS
</head>
<body>
$HTML
</body>
</html>
~;
}
return $HTML;
}
sub media_processors {
my $switches = $_[1];
#: This allows to monitor basic ONO and OS features, including ONO::IO,
#: PDF generation, ImageMagick processing, FFMPEG video processing,
#: HTML to IMG or PDF conversion, etc.
#:
#: This is generating a report, which will be displayed on the ONO Admin
#: Info screen for example.
#:
#: -H no HTML (conversion for mail or console for example)
my ($err,$TESTS);
my $ID = ONO::Lib::Code::RandomID->make();
ONO::IO->mkpath("var/tmp/test/$ID");
if (ONO::IO->exists("var/tmp/test/$ID")) {
$TESTS .= qq~test dir has been generated (var/tmp/test/$ID), ~;
} else {
$err++;
$TESTS .= qq~<span class="lightred">test dir could not be generated</span>, ~;
}
eval "use PDF::Reuse";
if (!$@) {
$TESTS .= qq~PDF::Reuse loaded, ~;
ONO::Lib::PDF::Gen->open("var/tmp/test/$ID/pdf_test.pdf",210,297);
# writing on the PDF does NOT seem to work ???
my $canvas = ONO::Lib::PDF::ToolBox->canvas_init(20,20,100,100);
ONO::Lib::PDF::ToolBox->canvas_test($canvas);
ONO::Lib::PDF::Draw->text($canvas,20,20,"This is a test file.");
ONO::Lib::PDF::Gen->close();
my $size = ONO::IO->size("var/tmp/test/$ID/pdf_test.pdf");
if (ONO::IO->exists("var/tmp/test/$ID/pdf_test.pdf")) {
$TESTS .= qq~PDF test file has been generated ($size bytes), ~;
} else {
$err++;
$TESTS .= qq~<span class="lightred">PDF test file could not be generated</span>, ~;
}
} else {
$err++;
$TESTS .= qq~<span class="lightred">PDF::Reuse could not be loaded</span>, ~;
}
eval "use Image::Magick";
if (!$@) {
$TESTS .= qq~Image::Magick loaded, ~;
ONO::Lib::Image::Magick->convert("/ono/osr/test/files/image_640_400.png","/var/tmp/test/$ID/image_test.jpg");
my $size = ONO::IO->size("var/tmp/test/$ID/image_test.jpg");
if (ONO::IO->exists("var/tmp/test/$ID/image_test.jpg")) {
$TESTS .= qq~JPG test file has been generated ($size bytes), ~;
} else {
$err++;
$TESTS .= qq~<span class="lightred">JPG test file could not be generated</span>, ~;
}
} else {
$err++;
$TESTS .= qq~<span class="lightred">Image::Magick could not be loaded</span>, ~;
}
if (ONO::Lib::Image::ToolBox->detect_wkhtmltoimage) {
$TESTS .= qq~wkhtmltoimage found, ~;
} else {
$TESTS .= qq~<span class="lightred">wkhtmltoimage could not be found</span>, ~;
}
if (ONO::Lib::Video::ToolBox->detect_ffmpeg) {
$TESTS .= qq~ffmpeg found, ~;
ONO::IO->cp("ono/osr/test/files/video_1280_720.mkv","var/tmp/test/$ID/video_test.mkv");
ONO::Lib::Video::ToolBox->convert("/var/tmp/test/$ID/video_test.mkv",0,"","iNT");
my $size = ONO::IO->size("var/tmp/test/$ID/video_test.mp4");
if (ONO::IO->exists("var/tmp/test/$ID/video_test.mp4")) {
$TESTS .= qq~MP4 test file has been generated ($size bytes), ~;
} else {
$err++;
$TESTS .= qq~<span class="lightred">MP4 test file could not be generated</span>, ~;
}
} else {
$err++;
$TESTS .= qq~<span class="lightred">ffmpeg is missing</span>, ~;
}
if (ONO::Lib::PDF::ToolBox->detect_pdftk) {
$TESTS .= qq~pdftk found, ~;
} else {
$TESTS .= qq~<span class="lightred">pdftk could not be found</span>, ~;
}
if (ONO::Lib::PDF::ToolBox->detect_wkhtmltopdf) {
$TESTS .= qq~wkhtmltopdf found, ~;
} else {
$TESTS .= qq~<span class="lightred">wkhtmltopdf could not be found</span>, ~;
}
foreach my $file (ONO::IO->ls("var/tmp/test/$ID")) {
ONO::IO->rm("var/tmp/test/$ID/$file");
}
ONO::IO->rmdir("var/tmp/test/$ID");
if (!ONO::IO->exists("var/tmp/test/$ID")) {
$TESTS .= qq~test dir has been removed, ~;
} else {
$err++;
$TESTS .= qq~<span class="lightred">test dir could not be removed</span>, ~;
}
$TESTS =~ s~\, $~\.~;
if ($switches =~ /H/) {
$TESTS =~ s~\<(.*?)\>~~g;
$TESTS =~ s~\, ~\n~g;
$TESTS =~ s~\.$~~g;
}
return ($err,ucfirst $TESTS);
}
###############################################################################
# end of script
###############################################################################
1;
__END__