diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b6a895f --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.idea +tests/*.pyc +.idea +tests/localrepo* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c9f9da9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM baseruntime/baseruntime:latest + +COPY repos/* /etc/yum.repos.d/ +COPY tests/scripts/* /tmp/ + +RUN sed -i 's|/jkaluza/|/ralph/|g' /etc/yum.repos.d/build.repo && \ + rpm -e --justdb --nodeps systemd-libs && \ + microdnf --nodocs --enablerepo perl install perl perl-devel && \ + microdnf clean all + +EXPOSE 8080 + + +CMD /bin/bash diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8b48706 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +IMAGE_NAME = perl + +MODULEMDURL=file://perl.yaml + +default: run + +build: + docker build --tag=$(IMAGE_NAME) . + +run: build + docker run -d $(IMAGE_NAME) + +test: build + cd tests; MODULE=docker MODULEMD=$(MODULEMDURL) URL="docker=$(IMAGE_NAME)" make all diff --git a/README.md b/README.md index 181b077..1e5b610 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,3 @@ Module containing important perl packages. | ✓ YES | General **tests are in dist-git** | | ✓ YES | General **tests pass** | | ✗ NO | Meets the **Fedora Module Packaging Guidelines** | - - - diff --git a/modulemd.yaml b/modulemd.yaml deleted file mode 100644 index 3a4d7a9..0000000 --- a/modulemd.yaml +++ /dev/null @@ -1 +0,0 @@ -# This is just a placeholder file for a modulemd diff --git a/perl.yaml b/perl.yaml new file mode 100644 index 0000000..524966b --- /dev/null +++ b/perl.yaml @@ -0,0 +1,519 @@ +document: modulemd +version: 2 +data: + summary: Practical Extraction and Report Language + description: > + Perl is a high-level programming language with roots in C, sed, awk + and shell scripting. Perl is good at handling processes and files, and + is especially good at handling text. Perl's hallmarks are practicality + and efficiency. While it is used to do a lot of different things, + Perl's most common applications are system administration utilities + and web programming. + license: + module: [ MIT ] + dependencies: + - buildrequires: + platform: [] + perl-bootstrap: [5.24] + requires: + platform: [] + references: + community: https://docs.pagure.org/modularity/ + documentation: https://github.com/modularity-modules/perl + tracker: https://github.com/modularity-modules/perl/issues + profiles: + # Interpreter and all Perl modules bundled within upstream Perl + default: + rpms: + - perl-core + # Only the interpreter as standalone executable + minimal: + rpms: + - perl + api: + rpms: + - perl + - perl-Algorithm-Diff + - perl-Archive-Tar + - perl-Archive-Zip + - perl-Attribute-Handlers + - perl-autodie + - perl-B-Debug + - perl-bignum + - perl-Carp + - perl-Compress-Bzip2 + - perl-Compress-Raw-Bzip2 + - perl-Compress-Raw-Zlib + - perl-Config-Perl-V + - perl-constant + - perl-CPAN + - perl-CPAN-Meta + - perl-CPAN-Meta-Requirements + - perl-CPAN-Meta-YAML + - perl-Data-Dumper + - perl-Data-OptList + - perl-Data-Section + - perl-DB_File + - perl-devel + - perl-Devel-Peek + - perl-Devel-PPPort + - perl-Devel-SelfStubber + - perl-Devel-Size + - perl-Digest + - perl-Digest-MD5 + - perl-Digest-SHA + - perl-Encode + - perl-Encode-devel + - perl-encoding + - perl-Env + - perl-Errno + - perl-experimental + - perl-Exporter + - perl-ExtUtils-CBuilder + - perl-ExtUtils-Command + - perl-ExtUtils-Embed + - perl-ExtUtils-Install + - perl-ExtUtils-MakeMaker + - perl-ExtUtils-Manifest + - perl-ExtUtils-Miniperl + - perl-ExtUtils-MM-Utils + - perl-ExtUtils-ParseXS + - perl-Fedora-VSP + - perl-File-Fetch + - perl-File-HomeDir + - perl-File-Path + - perl-File-Temp + - perl-File-Which + - perl-Filter + - perl-Filter-Simple + - perl-generators + - perl-Getopt-Long + - perl-homedir + - perl-HTTP-Tiny + - perl-inc-latest + - perl-interpreter + - perl-IO + - perl-IO-Compress + - perl-IO-Socket-IP + - perl-IO-Zlib + - perl-IPC-Cmd + - perl-IPC-System-Simple + - perl-IPC-SysV + - perl-JSON-PP + - perl-libnet + - perl-libnetcfg + - perl-libs + - perl-local-lib + - perl-Locale-Codes + - perl-Locale-Maketext + - perl-Locale-Maketext-Simple + - perl-macros + - perl-Math-BigInt + - perl-Math-BigInt-FastCalc + - perl-Math-BigRat + - perl-Math-Complex + - perl-Memoize + - perl-MIME-Base64 + - perl-Module-Build + - perl-Module-CoreList + - perl-Module-CoreList-tools + - perl-Module-Load + - perl-Module-Load-Conditional + - perl-Module-Loaded + - perl-Module-Metadata + - perl-MRO-Compat + - perl-Net-Ping + - perl-open + - perl-Package-Generator + - perl-Params-Check + - perl-Params-Util + - perl-parent + - perl-PathTools + - perl-Perl-OSType + - perl-perlfaq + - perl-PerlIO-via-QuotedPrint + - perl-Pod-Checker + - perl-Pod-Escapes + - perl-Pod-Html + - perl-Pod-Parser + - perl-Pod-Perldoc + - perl-Pod-Simple + - perl-Pod-Usage + - perl-podlators + - perl-Scalar-List-Utils + - perl-SelfLoader + - perl-Socket + - perl-Software-License + - perl-Storable + - perl-Sub-Exporter + - perl-Sub-Install + - perl-Sys-Syslog + - perl-Term-ANSIColor + - perl-Term-Cap + - perl-Test + - perl-Test-Harness + - perl-Test-Simple + - perl-tests + - perl-Text-Balanced + - perl-Text-Diff + - perl-Text-Glob + - perl-Text-ParseWords + - perl-Text-Tabs+Wrap + - perl-Text-Template + - perl-Thread-Queue + - perl-threads + - perl-threads-shared + - perl-Time-HiRes + - perl-Time-Local + - perl-Time-Piece + - perl-Unicode-Collate + - perl-Unicode-Normalize + - perl-URI + - perl-utils + - perl-version + buildopts: + rpms: + macros: | + %_with_perl_enables_groff 1 + %_without_perl_enables_syslog_test 1 + %_with_perl_enables_systemtap 1 + %_without_perl_enables_tcsh 1 + %_without_perl_Compress_Bzip2_enables_optional_test 1 + %_without_perl_CPAN_Meta_Requirements_enables_optional_test 1 + %_without_perl_IPC_System_Simple_enables_optional_test 1 + %_without_perl_LWP_MediaTypes_enables_mailcap 1 + %_without_perl_Module_Build_enables_optional_test 1 + %_without_perl_Perl_OSType_enables_optional_test 1 + %_without_perl_Pod_Perldoc_enables_tk_test 1 + %_without_perl_Software_License_enables_optional_test 1 + %_without_perl_Sys_Syslog_enables_optional_test 1 + %_without_perl_Test_Harness_enables_optional_test 1 + %_without_perl_URI_enables_Business_ISBN 1 + components: + rpms: + # We can rebuild in a random order because we have all binary + # packages available from perl-bootstrap. + perl: + rationale: The Perl interpreter. + ref: f26 + perl-Algorithm-Diff: + rationale: A run-time dependency. + ref: f26 + perl-Archive-Tar: + rationale: Core Perl API. + ref: f26 + perl-Archive-Zip: + rationale: A run-time dependency. + ref: f26 + perl-autodie: + rationale: Core Perl API. + ref: f26 + perl-B-Debug: + rationale: Core Perl API. + ref: f26 + perl-bignum: + rationale: Core Perl API. + ref: f26 + perl-Carp: + rationale: Core Perl API. + ref: f26 + perl-Compress-Bzip2: + rationale: A run-time dependency. + ref: f26 + perl-Compress-Raw-Bzip2: + rationale: Core Perl API. + ref: f26 + perl-Compress-Raw-Zlib: + rationale: Core Perl API. + ref: f26 + perl-Config-Perl-V: + rationale: Core Perl API. + ref: f26 + perl-constant: + rationale: Core Perl API. + ref: f26 + perl-CPAN: + rationale: Core Perl API. + ref: f26 + perl-CPAN-Meta: + rationale: Core Perl API. + ref: f26 + perl-CPAN-Meta-Requirements: + rationale: Core Perl API. + ref: f26 + perl-CPAN-Meta-YAML: + rationale: Core Perl API. + ref: f26 + perl-Data-Dumper: + rationale: Core Perl API. + ref: f26 + perl-Data-OptList: + rationale: A run-time dependency. + ref: f26 + perl-Data-Section: + rationale: A run-time dependency. + ref: f26 + perl-DB_File: + rationale: Core Perl API. + ref: f26 + perl-Devel-PPPort: + rationale: Core Perl API. + ref: f26 + perl-Devel-Size: + rationale: A run-time dependency. + ref: f26 + perl-Digest: + rationale: Core Perl API. + ref: f26 + perl-Digest-MD5: + rationale: Core Perl API. + ref: f26 + perl-Digest-SHA: + rationale: Core Perl API. + ref: f26 + perl-Encode: + rationale: Core Perl API. + ref: f26 + perl-Env: + rationale: Core Perl API. + ref: f26 + perl-experimental: + rationale: Core Perl API. + ref: f26 + perl-Exporter: + rationale: Core Perl API. + ref: f26 + perl-ExtUtils-CBuilder: + rationale: Core Perl API. + ref: f26 + perl-ExtUtils-Install: + rationale: Core Perl API. + ref: f26 + perl-ExtUtils-MakeMaker: + rationale: Core Perl API. + ref: f26 + perl-ExtUtils-Manifest: + rationale: Core Perl API. + ref: f26 + perl-ExtUtils-ParseXS: + rationale: Core Perl API. + ref: f26 + perl-Fedora-VSP: + rationale: RPM dependency generator. + ref: f26 + perl-File-Fetch: + rationale: Core Perl API. + ref: f26 + perl-File-HomeDir: + rationale: A run-time dependency. + ref: f26 + perl-File-Path: + rationale: Core Perl API. + ref: f26 + perl-File-Temp: + rationale: Core Perl API. + ref: f26 + perl-File-Which: + rationale: A run-time dependency. + ref: f26 + perl-Filter: + rationale: Core Perl API. + ref: f26 + perl-Filter-Simple: + rationale: Core Perl API. + ref: f26 + perl-generators: + rationale: RPM dependency generator. + ref: f26 + perl-Getopt-Long: + rationale: Core Perl API. + ref: f26 + perl-HTTP-Tiny: + rationale: Core Perl API. + ref: f26 + perl-inc-latest: + rationale: A run-time dependency. + ref: f26 + perl-IO-Compress: + rationale: Core Perl API. + ref: f26 + perl-IO-Socket-IP: + rationale: Core Perl API. + ref: f26 + perl-IPC-Cmd: + rationale: Core Perl API. + ref: f26 + perl-IPC-System-Simple: + rationale: A run-time dependency. + ref: f26 + perl-IPC-SysV: + rationale: Core Perl API. + ref: f26 + perl-JSON-PP: + rationale: Core Perl API. + ref: f26 + perl-libnet: + rationale: Core Perl API. + ref: f26 + perl-local-lib: + rationale: A run-time dependency. + ref: f26 + perl-Locale-Codes: + rationale: Core Perl API. + ref: f26 + perl-Locale-Maketext: + rationale: Core Perl API. + ref: f26 + perl-Math-BigInt: + rationale: Core Perl API. + ref: f26 + perl-Math-BigInt-FastCalc: + rationale: Core Perl API. + ref: f26 + perl-Math-BigRat: + rationale: Core Perl API. + ref: f26 + perl-MIME-Base64: + rationale: Core Perl API. + ref: f26 + perl-Module-Build: + rationale: A run-time dependency. + ref: f26 + perl-Module-CoreList: + rationale: Core Perl API. + ref: f26 + perl-Module-Load: + rationale: Core Perl API. + ref: f26 + perl-Module-Load-Conditional: + rationale: Core Perl API. + ref: f26 + perl-Module-Metadata: + rationale: Core Perl API. + ref: f26 + perl-MRO-Compat: + rationale: A run-time dependency. + ref: f26 + perl-Package-Generator: + rationale: A run-time dependency. + ref: f26 + perl-Params-Check: + rationale: Core Perl API. + ref: f26 + perl-Params-Util: + rationale: A run-time dependency. + ref: f26 + perl-parent: + rationale: Core Perl API. + ref: f26 + perl-PathTools: + rationale: Core Perl API. + ref: f26 + perl-Perl-OSType: + rationale: Core Perl API. + ref: f26 + perl-perlfaq: + rationale: Core Perl API. + ref: f26 + perl-PerlIO-via-QuotedPrint: + rationale: Core Perl API. + ref: f26 + perl-Pod-Checker: + rationale: Core Perl API. + ref: f26 + perl-Pod-Escapes: + rationale: Core Perl API. + ref: f26 + perl-Pod-Parser: + rationale: Core Perl API. + ref: f26 + perl-Pod-Perldoc: + rationale: Core Perl API. + ref: f26 + perl-Pod-Simple: + rationale: Core Perl API. + ref: f26 + perl-Pod-Usage: + rationale: Core Perl API. + ref: f26 + perl-podlators: + rationale: Core Perl API. + ref: f26 + perl-Scalar-List-Utils: + rationale: Core Perl API. + ref: f26 + perl-Socket: + rationale: Core Perl API. + ref: f26 + perl-Software-License: + rationale: A run-time dependency. + ref: f26 + perl-Storable: + rationale: Core Perl API. + ref: f26 + perl-Sub-Exporter: + rationale: A run-time dependency. + ref: f26 + perl-Sub-Install: + rationale: A run-time dependency. + ref: f26 + perl-Sys-Syslog: + rationale: Core Perl API. + ref: f26 + perl-Term-ANSIColor: + rationale: Core Perl API. + ref: f26 + perl-Term-Cap: + rationale: Core Perl API. + ref: f26 + perl-Test-Harness: + rationale: Core Perl API. + ref: f26 + perl-Test-Simple: + rationale: Core Perl API. + ref: f26 + perl-Text-Balanced: + rationale: Core Perl API. + ref: f26 + perl-Text-Diff: + rationale: A run-time dependency. + ref: f26 + perl-Text-Glob: + rationale: A run-time dependency. + ref: f26 + perl-Text-ParseWords: + rationale: Core Perl API. + ref: f26 + perl-Text-Tabs+Wrap: + rationale: Core Perl API. + ref: f26 + perl-Text-Template: + rationale: A run-time dependency. + ref: f26 + perl-Thread-Queue: + rationale: Core Perl API. + ref: f26 + perl-threads: + rationale: Core Perl API. + ref: f26 + perl-threads-shared: + rationale: Core Perl API. + ref: f26 + perl-Time-HiRes: + rationale: Core Perl API. + ref: f26 + perl-Time-Local: + rationale: Core Perl API. + ref: f26 + perl-Unicode-Collate: + rationale: Core Perl API. + ref: f26 + perl-Unicode-Normalize: + rationale: Core Perl API. + ref: f26 + perl-URI: + rationale: A run-time dependency. + ref: f26 + perl-version: + rationale: Core Perl API. + ref: f26 diff --git a/repos/fedora.repo b/repos/fedora.repo new file mode 100644 index 0000000..3404240 --- /dev/null +++ b/repos/fedora.repo @@ -0,0 +1,4 @@ +[fedora] +name=fedora +baseurl=https://mirrors.nic.cz/fedora/linux/development/26/Everything/x86_64/os/ +enabled=0 diff --git a/repos/perl.repo b/repos/perl.repo new file mode 100644 index 0000000..0f32e9d --- /dev/null +++ b/repos/perl.repo @@ -0,0 +1,4 @@ +[perl] +name=perl +baseurl=https://kojipkgs.fedoraproject.org/repos/module-9ac9f492d4852dfd-build/latest/x86_64/ +enabled=0 diff --git a/sources b/sources new file mode 100644 index 0000000..e69de29 diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 0000000..8fd8ae7 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,6 @@ +MODULE_LINT=/usr/share/moduleframework/tools/modulelint.py +CMD=python -m avocado run --filter-by-tags=-WIP $(MODULE_LINT) *.py + +# +all: + $(CMD) diff --git a/tests/config.yaml b/tests/config.yaml new file mode 100644 index 0000000..f121e60 --- /dev/null +++ b/tests/config.yaml @@ -0,0 +1,13 @@ +document: modularity-testing +version: 1 +name: perl +modulemd-url: https://src.fedoraproject.org/cgit/modules/perl.git/plain/perl.yaml +service: + port: 8080 +module: + docker: + start: "docker run -it" + container: perl + rpm: + repos: + - http://mirror.vutbr.cz/fedora/releases/26/Everything/x86_64/os/ diff --git a/tests/cpan.py b/tests/cpan.py new file mode 100644 index 0000000..6e34c87 --- /dev/null +++ b/tests/cpan.py @@ -0,0 +1,57 @@ +# +# This Modularity Testing Framework helps you to write tests for modules +# Copyright (C) 2017 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# he Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# 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. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Authors: Rado Pitonak +# + +from avocado import main +from avocado.core import exceptions +from moduleframework import module_framework + + +class CpanCheck(module_framework.AvocadoTest): + """ + :avocado: enable + """ + + def testInstallPerlModule(self): + """ + Installing Perl module using cpan [http://www.cpan.org/] + """ + + self.start() + + self.run("microdnf --nodocs --enablerepo fedora install -y cpan cpanminus") + self.run("cpanm install --force Error") + self.run("perl -e \"use Error\"") + + def testInstallCModule(self): + """ + Installing Perl module written in C language, using cpan [http://www.cpan.org/] + Another packages need to be install here - gcc, rpm-devel to build module. + """ + + self.start() + + self.run("microdnf --nodocs --enablerepo fedora install -y cpan cpanminus") + self.run("microdnf --nodocs --enablerepo fedora install -y gcc rpm-devel") + self.run("cpanm install --force RPM2") + self.run("perl -e \"use RPM2\"") + +if __name__ == '__main__': + main() diff --git a/tests/networking.py b/tests/networking.py new file mode 100644 index 0000000..18825c3 --- /dev/null +++ b/tests/networking.py @@ -0,0 +1,44 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# This Modularity Testing Framework helps you to write tests for modules +# Copyright (C) 2017 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# he Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# 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. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Authors: Rado Pitonak +# + +from avocado import main +from avocado.core import exceptions +from moduleframework import module_framework + + +class NetworkingCheck(module_framework.AvocadoTest): + """ + :avocado: enable + """ + + def testHTTPRequest(self): + """ + Test networking with `HTTP::Tiny` perl module + Testing script is included in `scripts` folder + """ + self.start() + self.run("perl /tmp/http.pl") + + +if __name__ == '__main__': + main() diff --git a/tests/rpmvalidator.py b/tests/rpmvalidator.py new file mode 100644 index 0000000..8dc7541 --- /dev/null +++ b/tests/rpmvalidator.py @@ -0,0 +1,56 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# This Modularity Testing Framework helps you to write tests for modules +# Copyright (C) 2017 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# he Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# 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. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Authors: Jan Scotka +# + +from avocado import main +from moduleframework import module_framework + + +class ExampleRpmValidation(module_framework.AvocadoTest): + """ + :avocado: enable + """ + fhs_base_paths = [ + '/bin', + '/boot', + '/dev', + '/etc', + '/home', + '/lib', + '/lib64', + '/media', + '/mnt', + '/opt', + '/proc', + '/root', + '/run', + '/sbin', + '/sys', + '/srv', + '/tmp', + '/usr/bin' + ] + + def testPaths(self): + self.start() + for directory in self.fhs_base_paths: + self.run("test -d %s" % directory) diff --git a/tests/sanity.py b/tests/sanity.py new file mode 100644 index 0000000..65abed9 --- /dev/null +++ b/tests/sanity.py @@ -0,0 +1,60 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# This Modularity Testing Framework helps you to write tests for modules +# Copyright (C) 2017 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# he Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# 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. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Authors: Rado Pitonak +# + +from avocado import main +from avocado.core import exceptions +from moduleframework import module_framework + + +class SanityCheck(module_framework.AvocadoTest): + """ + :avocado: enable + """ + + def test1(self): + """ + Simple sanity test + """ + + self.start() + self.run("ls / | grep bin") + + def test2PerlVersion(self): + """ + Check if perl is installed in correct version + """ + perl_version = "5.24" + self.start() + self.run("perl -v | grep " + perl_version) + + def testPerlScript(self): + """ + Executing simple perl script + """ + test_string = "Running test script\n" + self.start() + self.assertIn("{}".format(test_string), self.run('perl -e " print \'{}\'"'.format(test_string)).stdout) + + +if __name__ == '__main__': + main() diff --git a/tests/scripts/http.pl b/tests/scripts/http.pl new file mode 100644 index 0000000..d38a88a --- /dev/null +++ b/tests/scripts/http.pl @@ -0,0 +1,5 @@ +use HTTP::Tiny; + +my $response = HTTP::Tiny->new->get('http://example.com/'); + +die "Failed!\n" unless $response->{success}; \ No newline at end of file