Skip to content

Commit

Permalink
Integration test for external bug trackers. Refs #1079
Browse files Browse the repository at this point in the history
- build and run Docker image for Bugzilla, initialize bugs in DB
- add integration test for Bugzilla integration
- collect coverage
  • Loading branch information
atodorov committed May 14, 2020
1 parent a3b5374 commit cf67c62
Show file tree
Hide file tree
Showing 8 changed files with 155 additions and 0 deletions.
46 changes: 46 additions & 0 deletions .github/workflows/integration_bugtracker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: 'integration / bugtracker'

on:
push:
branches: master
pull_request:

jobs:
bugzilla:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.7]

steps:
- uses: actions/checkout@v2

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}

- name: Build & run docker containers
run: |
docker-compose -f tests/docker-compose.bugtrackers build
docker-compose -f tests/docker-compose.bugtrackers up -d
sleep 10
BUGZILLA_ADDR=`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' bugzilla_example_bg`
sudo sh -c "echo '$BUGZILLA_ADDR bugzilla.example.bg' >> /etc/hosts"
- name: Initialize Bugzilla
run: |
pip install -r requirements/tarballs.txt
./tests/bugzilla/initialize-data
- name: Execute tests
run: |
sudo apt-get install libkrb5-dev
pip install -r requirements/devel.txt
coverage run --source='.' ./manage.py test -v2 --noinput --settings=tcms.settings.test tcms.issuetracker.tests.test_bugzilla
- name: Send coverage to CodeCov
run: |
pip install codecov
codecov
Empty file.
32 changes: 32 additions & 0 deletions tcms/issuetracker/tests/test_bugzilla.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import os
import unittest

from tcms.issuetracker.types import Bugzilla
from tcms.testcases.models import BugSystem
from tcms.tests import LoggedInTestCase


@unittest.skipUnless(os.getenv('TEST_BUGZILLA_INTEGRATION'),
'Integration testing not enabled')
class TestBugzillaIntegration(LoggedInTestCase):
existing_bug_url = 'http://bugzilla.example.bg/bugzilla/show_bug.cgi?id=1'

@classmethod
def setUpTestData(cls):
super().setUpTestData()

bug_system = BugSystem.objects.create( # nosec:B106:hardcoded_password_funcarg
name='Dockerized Bugzilla',
tracker_type='Bugzilla',
api_url='http://bugzilla.example.bg/bugzilla/xmlrpc.cgi',
api_username='admin@bugzilla.bugs',
api_password='password',
)
cls.integration = Bugzilla(bug_system)

def test_details(self):
result = self.integration.details(self.existing_bug_url)

# Bugzilla doesn't support OpenGraph and ATM we don't provide
# additional integration here
self.assertEqual('undefined', result)
16 changes: 16 additions & 0 deletions tests/bugzilla/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FROM fedora

RUN dnf -y install bugzilla "perl(DBD::SQLite)" findutils
# install optional modules, incl. XMLRPC
RUN /usr/share/bugzilla/checksetup.pl --check-modules 2>/dev/null | grep "dnf install" | cut -f2-99 -d: | sed "s/dnf install//" | xargs dnf -y install
RUN /usr/share/bugzilla/checksetup.pl --check-modules

COPY . /root/
RUN patch -b /usr/share/bugzilla/Bugzilla/Util.pm /root/Util.pm.patch

# generate /etc/bugzilla/localconfig
RUN /usr/share/bugzilla/checksetup.pl /root/checksetup_answers.txt


EXPOSE 80
CMD /usr/sbin/httpd -DFOREGROUND
12 changes: 12 additions & 0 deletions tests/bugzilla/Util.pm.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
--- /usr/share/bugzilla/Bugzilla/Util.pm.orig 2020-05-13 15:25:00.031963484 +0300
+++ /usr/share/bugzilla/Bugzilla/Util.pm 2020-05-13 15:31:54.668329481 +0300
@@ -106,7 +106,8 @@
# |U+200e|Left-To-Right Mark |0xe2 0x80 0x8e |
# |U+200f|Right-To-Left Mark |0xe2 0x80 0x8f |
# --------------------------------------------------------
- $var =~ tr/\x{202a}-\x{202e}//d;
+ # workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1588175
+ # $var =~ tr/\x{202a}-\x{202e}//d;
}
return $var;
}
26 changes: 26 additions & 0 deletions tests/bugzilla/checksetup_answers.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
$answer{'ADMIN_EMAIL'} = 'admin@bugzilla.bugs';
$answer{'ADMIN_LOGIN'} = 'admin';
$answer{'ADMIN_OK'} = 'Y';
$answer{'ADMIN_PASSWORD'} = 'password';
$answer{'ADMIN_REALNAME'} = 'QA Admin';
$answer{'NO_PAUSE'} = 1;
$answer{'apache_size_limit'} = 700000;
$answer{'create_htaccess'} = 1;
$answer{'db_check'} = 1;
$answer{'db_driver'} = 'sqlite';
$answer{'db_host'} = 'localhost';
$answer{'db_mysql_ssl_ca_file'} = '';
$answer{'db_mysql_ssl_ca_path'} = '';
$answer{'db_mysql_ssl_client_cert'} = '';
$answer{'db_mysql_ssl_client_key'} = '';
$answer{'db_name'} = 'bugs',
$answer{'db_pass'} = 'bugs';
$answer{'db_port'} = 0;
$answer{'db_sock'} = '';
$answer{'db_user'} = 'bugs';
$answer{'diffpath'} = '/usr/bin';
$answer{'index_html'} = 0;
$answer{'interdiffbin'} = '/usr/bin/interdiff';
$answer{'urlbase'} = 'http://bugzilla.example.bg/bugzilla/';
$answer{'use_suexec'} = 0;
$answer{'webservergroup'} = 'apache';
11 changes: 11 additions & 0 deletions tests/bugzilla/initialize-data
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

BZ_URL="http://bugzilla.example.bg/bugzilla/xmlrpc.cgi"
BZ_USER="admin@bugzilla.bugs"
BZ_PASS="password"

# this is Bug #1
bugzilla --bugzilla $BZ_URL --username $BZ_USER --password $BZ_PASS --ensure-logged-in \
new --product TestProduct --version unspecified --component TestComponent \
--summary 'Hello World' --comment 'This is reported via cli' \
--os Linux --arch All
12 changes: 12 additions & 0 deletions tests/docker-compose.bugtrackers
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: '3'

services:
# build ourselves b/c bugzilla/docker-bugzilla-dev
# is too old and doesn't work
bugzilla_example_bg:
container_name: bugzilla_example_bg
build:
context: ./bugzilla/
dockerfile: Dockerfile
image: kiwitcms/bugzilla
restart: always

0 comments on commit cf67c62

Please sign in to comment.