OTRS Pakete ausgiebig testen und "verifizieren"

07b86e788c12e66f05d3bb7099aa1967?s=47 Renee
March 26, 2014

OTRS Pakete ausgiebig testen und "verifizieren"

07b86e788c12e66f05d3bb7099aa1967?s=128

Renee

March 26, 2014
Tweet

Transcript

  1. reb@perl-services.de Perl-Entwicklung, OTRS, Training

  2. Achtung: WIP

  3. OTRS-Pakete testen und verifizieren

  4. OTRS

  5. HelpDesk-System

  6. None
  7. • Gestartet 2001 • 1,7 Mio. Downloads • ca. 110.000

    Installationen • 33 Sprachen • AGPL • http://github.com/OTRS/otrs
  8. http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Penguin_Admin.svg/105px-Penguin_Admin.svg.png

  9. Ich brauche eine FAQ http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Penguin_Admin.svg/105px-Penguin_Admin.svg.png

  10. Ich brauche eine FAQ Mehr Attribute für Cis http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Penguin_Admin.svg/105px-Penguin_Admin.svg.png

  11. Ich brauche eine FAQ Mehr Attribute für Cis Tickets besser

    erkennen http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Penguin_Admin.svg/105px-Penguin_Admin.svg.png
  12. Erweiterungen Für OTRS

  13. • FAQ • ITSM – ConfigurationManagement • ITSM – ChangeManagement

    • ITSM – IncidentProblemManagement • KIX4OTRS • TaggedCustomerUser • … •
  14. Paketmanager

  15. Screenshot Paketmanager

  16. OPAR

  17. Screenshots OPAR http://opar.perl-services.de/

  18. OTRS Verify

  19. Probleme OPAR

  20. Vorteil CPAN

  21. OPARTester?

  22. OTRS-Pakete testen und verifizieren

  23. Kriterien

  24. • Einhalten von OTRS-Programmierrichtlinien (Perl::Critic und Perl::Tidy) • Unittests sollen

    fehlerfrei durchlaufen • Stabilität und Performanz von OTRS nicht beeinträchtigen • Keine ungewünschte Kommunikation nach außen • Trennung von Templates/Funktionalität • u.v.m.
  25. Probleme

  26. Idee

  27. None
  28. Ziel

  29. • Automatisiertes Testen von OTRS-Erweiterungen – Statische Analyse – Laufzeittest

    • Ziele – Sicherheitslücken (nahezu) ausschließen – Getestete Module – Usern mehr Informationen zum Modul liefern – Performancefresser identifizieren
  30. Umsetzung

  31. Schritt 1: Upload

  32. None
  33. Mojolicious

  34. None
  35. Datenbank

  36. Los geht's

  37. # init fork manager my $max_processes = $self->config->get( 'fork.max' );

    my $fork_manager = Parallel::ForkManager->new( $max_processes ); $logger->trace( 'init fork manager with max ' .$max_processes . ' processes' ); for my $tmpjob ( @job_info ) { # do the fork $fork_manager->start and next; # create job and run it my $job = OTRS::OPR::Daemon::Job->new( %{$tmpjob} ); $job->run if $job; } # exit the forked process $fork_manager->finish; $fork_manager->wait_all_children;
  38. Schritt 2: Erste Analyse

  39. OPM-Format

  40. <?xml version="1.0" encoding="utf-8"?> <otrs_package version="1.0"> <Name>WarnMissingAttachment</Name> <Version>3.3.1</Version> <Framework>3.2.x</Framework> <Framework>3.3.x</Framework> <Vendor>Perl-Services.de</Vendor>

    <URL>http://www.perl-services.de</URL> <Description Lang="de">xxxxxxxxxx</Description> <PackageRequired Version="1.01">Perl::Module</PackageRequired> <ModuleRequired Version="3.3.1">ITSM</ModuleRequired> <License> GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007 </License> <Filelist> <File Permission="644" Encode="Base64" Location="Kernel/Config/WarnMissingAttachment.xml"> PD94bWwgdmVyc2 </File> </Filelist> <DatabaseInstall> … </DatabaseInstall> </otrs_package>
  41. OTRS::OPM::Analyzer

  42. use OTRS::OPM::Analyzer::Utils::OPMFile; my $opm_file = '/path/to/package.opm'; my $opm = OTRS::OPM::Analyzer::Utils::OPMFile->new(

    opm_file => $opm_file, ); my @otrs_versions = $opm->framework;
  43. XML::LibXML

  44. Schritt 3: VM erstellen

  45. None
  46. JiffyBox

  47. Rex

  48. use Rex; use Rex::Commands::Cloud; cloud_service 'Jiffybox'; cloud_auth $api_key; for my

    $otrs ( @otrs_versions ) { my $box = cloud_instance create => { image_id => "ubuntu_12_4", Name => "test-$otrs", plan_id => $plan_id, password => $root_pwd }; cloud_instance start => $box->{id}; }
  49. Screenshot Jiffybox adminpanel

  50. Schritt 4: Software installieren

  51. OTRS + MySQL

  52. cpanm, Apache 2, mod_perl, Perl-Module, libxml2-dev, libgd-xpm-dev, libssl-dev, … Software

    diese Projekts
  53. OTRS einrichten

  54. Rex Recipe „OTRS“

  55. install [qw/ libcrypt-ssleay-perl libgd-gd2-perl libencode-hanextra-perl ... libtext-csv-xs-perl libxml-parser-perl libyaml-perl libdbd-mysql-perl

    libnet-ldap-perl apache2 /];
  56. create_user "otrs", home => "/opt/otrs", groups => ["www-data"], comment =>

    "OTRS User", no_create_home => TRUE; Rex::Database::MySQL::Admin::Schema::create({ name => $param->{schema}->{name}, }); Rex::Database::MySQL::Admin::User::create({ name => $param->{user}->{name}, host => $param->{user}->{host}, password => $param->{user}->{password}, rights => $param->{user}->{rights}, schema => $param->{schema}->{name} . ".*", });
  57. Schritt 5: Metainformationen sammeln

  58. OTRS::OPM::Analyzer

  59. • BasicXMLCheck • Dependencies • Documentation • License • PerlCritic

    • PerlTidy • SystemCall • TemplateCheck • UnitTests •
  60. Perl::Critic::OTRS

  61. • • *::ProhibitFetchrowHashref • *::ProhibitDumper • *::ProhibitLocaltime • *::ProhibitLowPrecedenceOps •

    *::ProhibitOpen • *::ProhibitPushISA • *::ProhibitRequire • *::ProhibitSomeCoreFunctions • *::RequireCamelCase • *::RequireParensWithMethods • *::RequireTrueReturnValueForModules •
  62. Schritt 6: Unittests I

  63. XML-Ausgabe

  64. <?xml version="1.0" encoding="utf-8" ?> <otrs_test> <Summary> <Item Name="Perl">5.14.2</Item> <Item Name="Product">OTRS

    3.3.1</Item> <Item Name="TestNotOk">1</Item> <Item Name="TestOk">16</Item> <Item Name="Time">2013-12-30 01:35:01</Item> <Item Name="TimeTaken">3</Item> ... </Summary> <Unit Name="/opt/otrs/scripts/test/JSON.t" Duration="0"> <Test Result="ok" Count="1">JSON - undef test (is 'undef')</Test> <Test Result="ok" Count="2">JSON - empty test (is '""')</Test> <Test Result="ok" Count="3">JSON - simple (is '"Some Text"')</Test> </Unit> <Unit Name="/opt/otrs/scripts/test/Layout.t" Duration="3"> <Test Result="not ok" Count="1">ERROR: Syntax error in /opt/otrs/scripts/test/Layout.t: Can't use an undefined value as a HASH reference at /opt/otrs/Kernel/System/CustomerUser.pm line 87. </Test> </Unit> </otrs_test>
  65. OTRS::Unittest::XMLParser

  66. Capture::Tiny

  67. use Capture::Tiny qw(:all); use OTRS::Unittest::XMLParser; my ($out, $err) = capture

    { system '/opt/otrs/bin/otrs UnitTest.pl -o XML'; }; my $results = OTRS::Unittest::XMLParser->new( xml => $out, ); for my $test ( @{ $result->tests } ) { say sprintf "%s -> %s", $test->name, $test->duration; }
  68. Schritt 7: Pakete installieren

  69. bin/otrs.PackageManager.pl -a install \ -p /path/to/SalesforceForOTRS-3.3.1.opm

  70. CPAN-Module

  71. OTRS AddOns

  72. <?xml version="1.0" encoding="utf-8"?> <otrs_package version="1.0"> <Name>WarnMissingAttachment</Name> <Version>3.3.1</Version> <Framework>3.2.x</Framework> <Framework>3.3.x</Framework> <Vendor>Perl-Services.de</Vendor>

    <URL>http://www.perl-services.de</URL> <Description Lang="de">xxxxxxxxxx</Description> <PackageRequired Version="1.01">Perl::Module</PackageRequired> <ModuleRequired Version="3.3.1">ITSM</ModuleRequired> <License> GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007 </License> <Filelist> <File Permission="644" Encode="Base64" Location="Kernel/Config/WarnMissingAttachment.xml"> PD94bWwgdmVyc2 </File> </Filelist> <DatabaseInstall> … </DatabaseInstall> </otrs_package>
  73. OTRS::OPM::Analyzer

  74. Schritt 8: Unittests II … ∞

  75. Schritt 9: Pakete deinstallieren

  76. bin/otrs.PackageManager.pl -a uninstall \ -p /path/to/SalesforceForOTRS-3.3.1.opm

  77. Schritt 10: Infos an OPAR

  78. Schritt 11: VM löschen

  79. VM::JiffyBox

  80. Offene Punkte

  81. • Viel Code ;-) • … Code-Snippets zusammenführen • …

    In OPAR einbauen • … „Kommunikation nach außen erkennen“ • • Sonstiges • … Finanzielle Unterstützung finden • … Mehr Freizeit finden