#1 Enable tests from the shell tests repository
Closed 4 months ago by kdudka. Opened 4 months ago by psss.
rpms/ psss/zsh tests  into  master

file added
+17

@@ -0,0 +1,17 @@ 

+ ---

+ 

+ - hosts: localhost

+   roles:

+   - role: standard-test-beakerlib

+     tags:

+     - classic

+     repositories:

+     - repo: "https://src.fedoraproject.org/tests/shell.git"

+       dest: "shell"

+       fmf_filter: "tier: 1, 2"

+     environment:

+       PACKAGES: zsh

+       SH_BIN: zsh

+     required_packages:

+     - expect            # login requires expect

+     - which             # smoke requires which

no initial comment

How can one run the tests?

rebased onto 14f81ca

4 months ago

Sorry, I forgot to include links and details. I've updated the commit message. For a quick start (which includes running tests) you can have a look at the Quick Start Guide, for more details and links see the Fedora CI portal.

The CI failure seems to be how zsh executes command on background.

reference: https://bugzilla.redhat.com/show_bug.cgi?id=1437490

Suggestion of patch:

diff --git a/func/runtest.sh b/func/runtest.sh
index 9a7b93b..486496f 100644
--- a/func/runtest.sh
+++ b/func/runtest.sh
@@ -30,6 +30,8 @@ rlJournalStart
        rlAssertRpm --all
        if [ $SH_BIN == "zsh" ]; then
                ZSH_OPT="-i"
+                # Without this there might be some issue when starting background
+                echo "unsetopt monitor" >> /etc/zshrc
        else
                ZSH_OPT=""
        fi
@@ -37,6 +39,7 @@ rlJournalStart


    rlPhaseStartTest "Test of functions"
+        rlRun "${SH_BIN} -c 'true'" 0 "True action"
        rlRun "${SH_BIN} -c pwd" 0 "Checking if ${SH_BIN} do pwd command"
        rlRun "${SH_BIN} -c unexistcommand3241" 127 "Checking if ${SH_BIN} return 127 if command doesnt exist"
        rm /tmp/unexistfile &>/dev/null
@@ -46,9 +49,9 @@ rlJournalStart
        TEXT=sometihngverylong
        rlRun "${SH_BIN} -c 'echo $TEXT > $TT; cat $TT |grep -q $TEXT'" 0 "Checking redirecting to file"
        rlRun " ${SH_BIN} -c 'let a=1+1;echo \$a|grep -q 2'" 0 "Checking 'let' arithmetic operation 1+1"
-#        rlRun "${SH_BIN} -c 'sleep 100&; WC=\`jobs|wc -l\`; [[ \$WC -ge 1 ]]'" 0 "Checking process at background is running"
-        rlRun "${SH_BIN} $ZSH_OPT -c 'sleep 100& WC=\$(jobs|wc -l) ; [[ \$WC -ge 1 ]]'" 0 "Checking process at background is running"
-
+#        rlRun "${SH_BIN} -c 'sleep 100&; WC=\`jobs|wc -l\`; [[ \$WC -ge 1 ]]'" 0 "Checking process at background is running" 
+        rlRun "${SH_BIN} $ZSH_OPT -c 'sleep 100 & jobs > jobs.out; WC=\$(cat jobs.out|wc -l); [[ \$WC -ge 1 ]]'" 0\
+ "Checking process at background is running"
        USER=${SH_BIN}user
        rlRun "adduser -s /bin/${SH_BIN} $USER" 0,9 "Created user with ${SH_BIN} as default shell"
        rlRun "su -l $USER -c 'echo \$PATH'" 0 "Logged as previous created user and run echo PATH"
@@ -56,7 +59,6 @@ rlJournalStart

    # cleanup
    rlPhaseStartCleanup "Cleaning up"
-        rlRun "true" 0 "True action"
        rlRun "rm $TT" 0 "Checking delete of $TT"
        sleep 10
        rlRun "userdel $USER" 0 "Deleted user with ${SH_BIN} as default shell"

Thanks for the link! I tried to run the following command:

ansible-playbook --tags=classic tests.yml

... but output looks crazy. I see a lot of cows and then it fails after an unsuccessful attempt to remove yum-utils from my system:

kdudka@f28 ~/fedora/zsh/tests % ansible-playbook --tags=classic tests.yml
 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

 __________________
< PLAY [localhost] >
 ------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 ________________________
< TASK [Gathering Facts] >
 ------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost]
 _________________________________________________________
< TASK [str-common-init : Check if system is Atomic Host] >
 ---------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost]
 _______________________________________________
< TASK [str-common-init : Set fact 'is_atomic'] >
 -----------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost]
 _________________________________________________
< TASK [str-common-init : Set facts about system] >
 -------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost]
 ___________________________________________________________
/ TASK [str-common-init : Hardcode Python 3 interpreter for \
\ ansible modules]                                          /
 -----------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ____________________________________________________
/ TASK [str-common-init : Add test-runner to ansible \
\ inventory]                                         /
 ----------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

changed: [localhost]
 _______________________________________
< TASK [str-common-init : Gather facts] >
 ---------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost -> test-runner]
 ______________________________________________________
< TASK [str-common-init : Set facts about test-runner] >
 ------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost -> test-runner]
 ___________________________________________________________
/ TASK [str-common-init : Hardcode Python 3 interpreter for \
\ ansible modules for test-runner]                          /
 -----------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 _________________________________________________
/ TASK [str-common-init : Fetch tests from remote \
\ repositories]                                   /
 -------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost -> test-runner] => (item={u'repo': u'https://src.fedoraproject.org/tests/shell.git', u'dest': u'shell', u'fmf_filter': u'tier: 1, 2'})
 ___________________________________
< TASK [str-common-init : set_fact] >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost -> test-runner]
 ___________________________________
< TASK [str-common-init : set_fact] >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ___________________________________
< TASK [str-common-init : set_fact] >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost -> test-runner] => (item={u'repo': u'https://src.fedoraproject.org/tests/shell.git', u'dest': u'shell', u'fmf_filter': u'tier: 1, 2'})
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ___________________________________
< TASK [str-common-init : set_fact] >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost -> test-runner]
 ____________________________________________________________
/ TASK [str-common-init : Filter tests according to provided \
\ fmf filters]                                               /
 ------------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

changed: [localhost -> test-runner]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ___________________________________
< TASK [str-common-init : set_fact] >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost -> test-runner]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ________________________________
< TASK [str-common-init : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 _______________________________________
< TASK [include_role : str-common-pkgs] >
 ---------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 ____________________________________________________________
/ TASK [str-common-pkgs : Build packages lists to be present \
\ on test environment]                                       /
 ------------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost] => (item=expect)
ok: [localhost] => (item=which)
ok: [localhost] => (item=beakerlib)
ok: [localhost] => (item=rsync)
ok: [localhost] => (item=make)
ok: [localhost] => (item=beakerlib-libraries)
ok: [localhost] => (item=python3-libselinux)
ok: [localhost] => (item=python2-lxml)
 _______________________________________________________
< TASK [str-common-pkgs : Set package manager variable] >
 -------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost]
 ________________________________
< TASK [str-common-pkgs : debug] >
 --------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

skipping: [localhost]
 ________________________________________
< TASK [str-common-pkgs : include_tasks] >
 ----------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

included: /usr/share/ansible/roles/str-common-pkgs/tasks/pkgs-dnf.yml for localhost
 __________________________________________________________
< TASK [str-common-pkgs : Remove yum-utils for dnf system] >
 ----------------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

[DEPRECATION WARNING]: Using tests as filters is deprecated. Instead of using `result|succeeded` use `result is succeeded`. This feature will be removed in version 2.9. Deprecation 
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
FAILED - RETRYING: Remove yum-utils for dnf system (5 retries left).
FAILED - RETRYING: Remove yum-utils for dnf system (4 retries left).
FAILED - RETRYING: Remove yum-utils for dnf system (3 retries left).
FAILED - RETRYING: Remove yum-utils for dnf system (2 retries left).
FAILED - RETRYING: Remove yum-utils for dnf system (1 retries left).
fatal: [localhost]: FAILED! => {"attempts": 5, "changed": false, "msg": "This command has to be run under the root user."}
        to retry, use: --limit @/home/kdudka/fedora/zsh/tests/tests.retry
 ____________
< PLAY RECAP >
 ------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

localhost                  : ok=17   changed=2    unreachable=0    failed=1

I do not have the explanation for the cows, but as you did not set the ansible environment variables it tried to run the test in your own system.

Please try with:
export ANSIBLE_INVENTORY=$(test -e inventory && echo inventory || echo /usr/share/ansible/inventory)
export TEST_SUBJECTS=<path to="" qcow2="">

For qcow2 image you can try https://jenkins-continuous-infra.apps.ci.centos.org/view/Fedora%20All%20Packages%20Pipeline/job/fedora-rawhide-image-test/lastSuccessfulBuild/artifact/Fedora-Rawhide.qcow2

@bgoncalv, why do you think the test needs adjustment if it passed successfully? As far as I can see all asserts passed there just fine.

@psss the test itself passed, but something happens and ansible shell module that was executing the test aborts with connection error.

failed: [/workDir/workspace/fedora-rawhide-pr-pipeline/images/test_subject.qcow2] (item=shell/func) => {"changed": false, "item": "shell/func", "module_stderr": "Shared connection to 127.0.0.3 closed.\r\n", "module_stdout": "[1] 15965\r\n\r\n{\"cmd\": \"export OUTPUTFILE=/dev/stdout TEST=shell/func\\n export PATH=\\\"$PATH:/var/str/\\\"\\n logfile=/tmp/artifacts//$(echo shell/func | sed -e 's/\\\\//-/g').log\\n exec 2>>$logfile 1>>$logfile\\n cd /var/str/\\n if [ -f shell/func ]; then\\n cd $(dirname shell/func)\\n /bin/sh -e ./$(basename shell/func)\\n elif [ -d shell/func ]; then\\n cd shell/func\\n if [ -f Makefile ] && command -p -v make >/dev/null 2>&1; then\\n make run\\n elif [ -f runtest.sh ]; then\\n /bin/sh -e ./runtest.sh\\n else\\n echo \\\"FAIL don't know how to run test shell/func\\\"\\n fi\\n else\\n echo \\\"FAIL test shell/func does not appear to be a file or directory\\\"\\n fi\", \"stdout\": \"\", \"stderr\": \"\", \"rc\": 0, \"start\": \"2018-09-12 07:56:27.488516\", \"end\": \"2018-09-12 07:56:38.797684\", \"delta\": \"0:00:11.309168\", \"changed\": true, \"invocation\": {\"module_args\": {\"_uses_shell\": true, \"_raw_params\": \"export OUTPUTFILE=/dev/stdout TEST=shell/func\\n export PATH=\\\"$PATH:/var/str/\\\"\\n logfile=/tmp/artifacts//$(echo shell/func | sed -e 's/\\\\//-/g').log\\n exec 2>>$logfile 1>>$logfile\\n cd /var/str/\\n if [ -f shell/func ]; then\\n cd $(dirname shell/func)\\n /bin/sh -e ./$(basename shell/func)\\n elif [ -d shell/func ]; then\\n cd shell/func\\n if [ -f Makefile ] && command -p -v make >/dev/null 2>&1; then\\n make run\\n elif [ -f runtest.sh ]; then\\n /bin/sh -e ./runtest.sh\\n else\\n echo \\\"FAIL don't know how to run test shell/func\\\"\\n fi\\n else\\n echo \\\"FAIL test shell/func does not appear to be a file or directory\\\"\\n fi\", \"warn\": true, \"chdir\": null, \"executable\": null, \"creates\": null, \"removes\": null, \"stdin\": null}}}\r\n", "msg": "MODULE FAILURE", "rc": 0}

I do not have the explanation for the cows,

dnf remove cowsay did the trick.

but as you did not set the ansible environment variables it tried to run the test in your own system.

I am fine with running zsh tests on my system. But why should one remove yum-utils to be able to run tests for zsh? Doing so would remove a significant portion of my system:

% sudo dnf remove yum-utils
Dependencies resolved.
=============================================================================================================================================================================================
 Package                                      Arch                       Version                                                            Repository                                  Size
=============================================================================================================================================================================================
Removing:
 yum-utils                                    noarch                     1.1.31-514.fc28                                                    @fedora                                    334 k
Removing dependent packages:
 csbuild                                      noarch                     2.1.1.20180727.141352.g9196c87.internal-1.fc28                     @covscan-testing                            55 k
 csmock-common                                noarch                     2.1.1.20180727.141352.g9196c87.internal-1.fc28                     @covscan-testing                           116 k
 csmock-plugin-clang                          noarch                     2.1.1.20180727.141352.g9196c87.internal-1.fc28                     @covscan-testing                           4.0 k
 csmock-plugin-coverity                       noarch                     2.1.0.20180717.163149.ge227153-1.fc28                              @covscan-testing                            45 k
 csmock-plugin-cppcheck                       noarch                     2.1.1.20180727.141352.g9196c87.internal-1.fc28                     @covscan-testing                           6.6 k
 csmock-plugin-shellcheck                     noarch                     2.1.1.20180727.141352.g9196c87.internal-1.fc28                     @covscan-testing                           5.6 k
 csmock-plugin-smatch                         noarch                     2.1.1.20180727.141352.g9196c87.internal-1.fc28                     @covscan-testing                           3.8 k
 fedora-packager                              noarch                     0.6.0.2-3.fc28                                                     @updates                                    79 k
 fedpkg                                       noarch                     1.35-1.fc28                                                        @updates                                   210 k
 mock                                         noarch                     1:1.2.18-1.kdudka.4.fc27                                           @kdudka-mock                               932 k
 mock-profiles                                x86_64                     1.0.20180903.132245.g3ac3ad6-1.fc28                                @@commandline                               78 k
 python2-dnf                                  noarch                     2.7.5-12.fc28                                                      @fedora                                    2.2 M
 python2-rhmsg                                noarch                     0.8-3.fc28eng                                                      @rcm-tools-fedora-rpms                      59 k
 python2-rpkg                                 noarch                     1.56-1.fc28                                                        @updates                                   597 k
 python2-yubico                               noarch                     1.3.2-8.fc28                                                       @fedora                                    244 k
 rhpkg                                        noarch                     1.34-1.fc28eng                                                     @rcm-tools-fedora-rpms                     393 k
 rpmdiff-remote                               x86_64                     4.3.4-1.fc28eng                                                    @rcm-tools-fedora-rpms                      81 k
 ykpers                                       x86_64                     1.19.0-1.fc28                                                      @updates                                   327 k
 yum                                          noarch                     3.4.3-517.fc28                                                     @updates                                   5.6 M
Removing unused dependencies:
 bodhi-client                                 noarch                     3.9.0-1.fc28                                                       @updates                                   164 k
 btrfs-progs                                  x86_64                     4.17.1-1.fc28                                                      @updates                                   4.2 M
 createrepo_c                                 x86_64                     0.10.0-19.fc28                                                     @updates                                   153 k
 createrepo_c-libs                            x86_64                     0.10.0-19.fc28                                                     @updates                                   226 k
 csclng                                       x86_64                     1.3.4.20180720.162325.gb66ff09-1.fc28                              @covscan-testing                           1.8 M
 cscppc                                       x86_64                     1.3.4.20180720.162325.gb66ff09-1.fc28                              @covscan-testing                           959 k
 csdiff                                       x86_64                     1.4.0.20180726.094718.g4201c23-1.fc28                              @covscan-testing                           3.6 M
 cswrap                                       x86_64                     1.4.0.20180725.141629.g7704be3-1.fc28                              @covscan-testing                           1.0 M
 drpm                                         x86_64                     0.3.0-13.fc28                                                      @fedora                                    152 k
 libyubikey                                   x86_64                     1.13-5.fc27                                                        @fedora                                     73 k
 pyliblzma                                    x86_64                     0.5.3-21.fc28                                                      @fedora                                    195 k
 python2-GitPython                            noarch                     2.1.11-1.fc28                                                      @updates                                   2.6 M
 python2-bodhi                                noarch                     3.9.0-1.fc28                                                       @updates                                    31 k
 python2-cccolutils                           x86_64                     1.5-6.fc28                                                         @fedora                                     30 k
 python2-click                                noarch                     6.7-7.fc28                                                         @fedora                                    567 k
 python2-gitdb                                noarch                     2.0.3-2.fc28                                                       @fedora                                    455 k
 python2-gobject-base                         x86_64                     3.28.3-1.fc28                                                      @updates                                   1.1 M
 python2-gpg                                  x86_64                     1.10.0-4.fc28                                                      @fedora                                    1.3 M
 python2-hawkey                               x86_64                     0.11.1-3.fc28                                                      @fedora                                    180 k
 python2-iniparse                             noarch                     0.4-30.fc28                                                        @fedora                                    114 k
 python2-libcomps                             x86_64                     0.1.8-11.fc28                                                      @fedora                                    147 k
 python2-librepo                              x86_64                     1.8.1-7.fc28                                                       @fedora                                    172 k
 python2-offtrac                              noarch                     0.1.0-13.fc28                                                      @fedora                                     29 k
 python2-pyusb                                noarch                     1.0.2-1.fc28                                                       @updates                                   405 k
 python2-pyxattr                              x86_64                     0.5.3-16.fc28                                                      @fedora                                     63 k
 python2-qpid-proton                          x86_64                     0.24.0-2.fc28                                                      @updates                                   1.6 M
 python2-smartcols                            x86_64                     0.3.0-2.fc28                                                       @fedora                                    314 k
 python2-smmap                                noarch                     2.0.3-2.fc28                                                       @fedora                                    174 k
 python2-urlgrabber                           noarch                     3.10.1-14.fc28                                                     @fedora                                    485 k
 rpkg-common                                  noarch                     1.56-1.fc28                                                        @updates                                    11 k
 rpmdiff                                      x86_64                     4.3.4-1.fc28eng                                                    @rcm-tools-fedora-rpms                     148 k
 systemd-container                            x86_64                     238-9.git0e0aa59.fc28                                              @updates                                   1.0 M
 usermode                                     x86_64                     1.112-3.fc28                                                       @updates                                   824 k
 yum-metadata-parser                          x86_64                     1.1.4-21.fc28                                                      @fedora                                     76 k

Transaction Summary
=============================================================================================================================================================================================
Remove  54 Packages

Freed space: 35 M
Is this ok [y/N]:

The removal of yum-utils is part of beakerlib roles execution on Fedora systems. When running on Fedora it will install dnf-utils and dnf-plugins-core, and I think 1 of this packages were failing to install if yum-utils is present.

https://pagure.io/standard-test-roles/blob/master/f/roles/str-common-pkgs/tasks/pkgs-dnf.yml

Unfortunately standard-test-roles requires root permissions. For quick (and safe) testing I would suggest to run the playbook in a dedicated vm:

1minutetip fedora # or something similar
dnf install -y fedpkg standard-test-roles
fedpkg clone -a zsh
cd zsh
git fetch https://src.fedoraproject.org/rpms/zsh.git refs/pull/1/head:pr1
git checkout pr1
ansible-playbook tests/tests.yml

Just 7 lines ;-) I know, could be shorter, huh? Hopefully we'll find some more concise way how to quickly test on the local machine. It's also possible to run available tests one by one:

fedpkg clone -a tests/shell
cd shell/func
make

To list tests which would be scheduled for execution according to the provided fmf filter:

fmf ls --filter tier:1,2
or
fmf show --filter tier:1,2

@bgoncalv, thanks for the patch. I've updated the test code as suggested. Let's run the [citest] once more.

All tests passed in the CI pipeline.
@kdudka, could we merge this?
Or do you have further questions?

Pull-Request has been closed by kdudka

4 months ago