Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OTRS Pakete ausgiebig testen und "verifizieren"

Renee
March 26, 2014

OTRS Pakete ausgiebig testen und "verifizieren"

Renee

March 26, 2014
Tweet

More Decks by Renee

Other Decks in Programming

Transcript

  1. [email protected] 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