#1 Add CI tests using the standard test interface
Merged 2 years ago by jakub. Opened 2 years ago by bgoncalv.
rpms/ bgoncalv/dwz dwz-tests  into  master

@@ -0,0 +1,63 @@ 

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Makefile of /tools/dwz/dwz-quick-test

+ #   Description: Quick sanity test

+ #   Author: Miroslav Franc <mfranc@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2013 Red Hat, Inc. All rights reserved.

+ #

+ #   This copyrighted material is made available to anyone wishing

+ #   to use, modify, copy, or redistribute it subject to the terms

+ #   and conditions of the GNU General Public License version 2.

+ #

+ #   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.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ export TEST=/tools/dwz/dwz-quick-test

+ export TESTVERSION=1.0

+ 

+ BUILT_FILES=

+ 

+ FILES=$(METADATA) runtest.sh Makefile PURPOSE something.c cmd.txt

+ 

+ .PHONY: all install download clean

+ 

+ run: $(FILES) build

+ 	./runtest.sh

+ 

+ build: $(BUILT_FILES)

+ 	test -x runtest.sh || chmod a+x runtest.sh

+ 

+ clean:

+ 	rm -f *~ $(BUILT_FILES)

+ 

+ 

+ include /usr/share/rhts/lib/rhts-make.include

+ 

+ $(METADATA): Makefile

+ 	@echo "Owner:           Miroslav Franc <mfranc@redhat.com>" > $(METADATA)

+ 	@echo "Name:            $(TEST)" >> $(METADATA)

+ 	@echo "TestVersion:     $(TESTVERSION)" >> $(METADATA)

+ 	@echo "Path:            $(TEST_DIR)" >> $(METADATA)

+ 	@echo "Description:     Quick sanity test" >> $(METADATA)

+ 	@echo "Type:            Sanity" >> $(METADATA)

+ 	@echo "TestTime:        2m" >> $(METADATA)

+ 	@echo "RunFor:          dwz" >> $(METADATA)

+ 	@echo "Requires:        dwz gcc gdb glibc-debuginfo" >> $(METADATA)

+ 	@echo "Priority:        Normal" >> $(METADATA)

+ 	@echo "License:         GPLv2" >> $(METADATA)

+ 	@echo "Confidential:    no" >> $(METADATA)

+ 	@echo "Destructive:     no" >> $(METADATA)

+ 

+ 	rhts-lint $(METADATA)

@@ -0,0 +1,3 @@ 

+ PURPOSE of /tools/dwz/dwz-quick-test

+ Description: Quick sanity test

+ Author: Miroslav Franc <mfranc@redhat.com>

@@ -0,0 +1,7 @@ 

+ b f

+ r

+ s

+ p x

+ p/x var

+ c

+ q

@@ -0,0 +1,60 @@ 

+ #!/bin/bash

+ # vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   runtest.sh of /tools/dwz/dwz-quick-test

+ #   Description: Quick sanity test

+ #   Author: Miroslav Franc <mfranc@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2013 Red Hat, Inc. All rights reserved.

+ #

+ #   This copyrighted material is made available to anyone wishing

+ #   to use, modify, copy, or redistribute it subject to the terms

+ #   and conditions of the GNU General Public License version 2.

+ #

+ #   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.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ # Include Beaker environment

+ . /usr/share/beakerlib/beakerlib.sh || exit 1

+ 

+ rlJournalStart

+     rlPhaseStartSetup

+         rlAssertRpm gcc

+         rlAssertRpm gdb

+         rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"

+         rlRun "cp something.c cmd.txt $TmpDir"

+         rlRun "pushd $TmpDir"

+         rlRun "gcc -g -O2 something.c -o something.out"

+         rlRun "cp something.out something.dwz"

+     rlPhaseEnd

+ 

+     rlPhaseStartTest "no crash + saved space"

+         rlRun "dwz something.dwz"

+         rlRun "[[ $(wc -c <something.out) -gt $(wc -c <something.dwz) ]]"

+     rlPhaseEnd

+ 

+     rlPhaseStartTest "can we debug it?"

+         rlRun "gdb -x cmd.txt -batch -q ./something.dwz > log 2>&1"

+         rlRun "[[ $(grep -c 'hello, world' log) -eq 2 ]]"

+         rlAssertGrep '$1 = -1' log

+         rlAssertGrep '$2 = 0x2a' log

+     rlPhaseEnd

+ 

+     rlPhaseStartCleanup

+         rlRun "popd"

+         rlRun "rm -r $TmpDir" 0 "Removing tmp directory"

+     rlPhaseEnd

+ rlJournalPrintText

+ rlJournalEnd

@@ -0,0 +1,21 @@ 

+ #include <stdio.h>

+ 

+ void f (int x);

+ 

+ int

+ main (int argc, char *argv[])

+ {

+   int a = -1;

+ 

+   f(a);

+ 

+   return 0;

+ }

+ 

+ void

+ f (int x)

+ {

+   static int var __attribute__ ((used)) = 42;

+   if(x)

+     puts("hello, world");

+ }

file added
+4

@@ -0,0 +1,4 @@ 

+ #!/bin/bash

+ export TEST_DOCKER_EXTRA_ARGS="--cap-add=SYS_PTRACE"

+ exec merge-standard-inventory "$@"

+ 

file added
+20

@@ -0,0 +1,20 @@ 

+ - hosts: localhost

+   tags:

+   - classic

+   - container # needs SYS_PTRACE

+   pre_tasks:

+   - name: Install deguginfo-install

+     shell: dnf -y install "dnf-command(debuginfo-install)"

+   - name: Install debuginfo for packages

+     shell: dnf -y debuginfo-install --best {{item}}

+     with_items:

+     - glibc

+   roles:

+   - role: standard-test-beakerlib

+     tests:

+     - dwz-quick-test

+     required_packages:

+     - dwz

+     - gcc

+     - gdb

+     - glibc-debuginfo

Adds tests according to the CI wiki [0] specifically the standard test interface in the spec [1].

The playbook includes Tier1 level test cases that have been tested in the following contexts and is passing reliably: Atomic Host, Docker, and Classic.
Test logs are stored in the Artifacts directory.

The following steps are used to execute the tests using the standard test interface:

  • Docker
    sudo ANSIBLE_INVENTORY=$(test -e inventory && echo inventory || echo /usr/share/ansible/inventory) TEST_SUBJECTS=docker:docker.io/library/fedora:26 TEST_ARTIFACTS=$PWD/artifacts ansible-playbook --tags container tests.yml

  • Classic
    sudo ANSIBLE_INVENTORY=$(test -e inventory && echo inventory || echo /usr/share/ansible/inventory) TEST_SUBJECTS="" TEST_ARTIFACTS=$PWD/artifacts ansible-playbook --tags classic tests.yml

[0] https://fedoraproject.org/wiki/CI
[1] https://fedoraproject.org/wiki/Changes/InvokingTests

Test Logs: (If you you would like a pointer to the complete log, I can include that as well)

  • Docker

    <snip>
    TASK [standard-test-beakerlib : Execute beakerlib tests] *****
    changed: [88b3c642add34e250e9c3691277a6a68b75e57156a2f4f415e6e16f2e99f1458] => (item=dwz-quick-test)

    TASK [standard-test-beakerlib : Make the master test summary log artifact] *
    changed: [88b3c642add34e250e9c3691277a6a68b75e57156a2f4f415e6e16f2e99f1458] => (item=dwz-quick-test)

    TASK [standard-test-beakerlib : Pull out the logs] *****
    changed: [88b3c642add34e250e9c3691277a6a68b75e57156a2f4f415e6e16f2e99f1458]

    TASK [standard-test-beakerlib : Check the results] *****
    changed: [88b3c642add34e250e9c3691277a6a68b75e57156a2f4f415e6e16f2e99f1458]

    PLAY RECAP ***********
    88b3c642add34e250e9c3691277a6a68b75e57156a2f4f415e6e16f2e99f1458 : ok=18 changed=13 unreachable=0 failed=0

    Test results:

    PASS dwz-quick-test

  • Classic

    <snip>
    ==> default: TASK [standard-test-beakerlib : Execute beakerlib tests] ***
    ==> default: changed: [localhost] => (item=dwz-quick-test)
    ==> default:
    ==> default: TASK [standard-test-beakerlib : Make the master test summary log artifact] **
    ==> default: changed: [localhost] => (item=dwz-quick-test)
    ==> default:
    ==> default: TASK [standard-test-beakerlib : Pull out the logs]
    *****
    ==> default: changed: [localhost]
    ==> default:
    ==> default: TASK [standard-test-beakerlib : Check the results]
    *****
    ==> default: changed: [localhost]
    ==> default:
    ==> default: PLAY [localhost]
    *********
    ==> default:
    ==> default: TASK [Gathering Facts]
    *********
    ==> default: ok: [localhost]
    ==> default:
    ==> default: PLAY RECAP
    *********
    *
    ==> default: localhost : ok=18 changed=14 unreachable=0 failed=0
    ==> default: ++ '[' 0 -ne 0 ']'
    ==> default: ++ cat /root/dwz/artifacts/test.log
    ==> default: PASS dwz-quick-test

Pull-Request has been merged by jakub

2 years ago