Bug#847555: tracker.debian.org: Functional testing suite seems broken
Raphael Hertzog <hertzog@debian.org> writes:
> On Fri, 09 Dec 2016, efkin wrote:
>> I looked for the driver but it was not on stable/main so went for
>> chromedriver. And the situation improved considireously. Then realized
>> that improper method was used for closing the driver, leading to
>> undesired spwaning of driver processes.
>
> Thanks, I applied your patches. But while you say that the situation
> improved, I still see failures (both on jessie and on stretch/sid). Do you
> plan to look into those failures?
I'm on it! Just attached some patches that should fix most part of
functional_test suite:
$ python manage.py test functional_tests
Creating test database for alias 'default'...
Destroying old test database 'default'...
................................
----------------------------------------------------------------------
Ran 32 tests in 611.289s
--
efkin.
>From 04a9814bd0d91ee32ad924d063c976c9638b67f8 Mon Sep 17 00:00:00 2001
From: efkin <efkin@riseup.net>
Date: Fri, 9 Dec 2016 15:45:48 +0100
Subject: [PATCH 1/5] Update session hash after password change
Since Django >= 1.7 SessionAuthenticationMiddleware invalidates
session after password change.
---
django_email_accounts/views.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/django_email_accounts/views.py b/django_email_accounts/views.py
index 084f35e..5bb2a17 100644
--- a/django_email_accounts/views.py
+++ b/django_email_accounts/views.py
@@ -14,6 +14,7 @@ from django.contrib import messages
from django.contrib.auth import authenticate
from django.contrib.auth import login
from django.contrib.auth import logout
+from django.contrib.auth import update_session_auth_hash
from django.utils.decorators import method_decorator
from django.shortcuts import render
from django.shortcuts import get_object_or_404
@@ -273,6 +274,7 @@ class PasswordChangeView(LoginRequiredMixin, MessageMixin, FormView):
def form_valid(self, form, *args, **kwargs):
form.save()
+ update_session_auth_hash(self.request, form.user)
return super(PasswordChangeView, self).form_valid(form, *args, **kwargs)
--
2.1.4
>From 8314bcb7a0ed162c07ccf078c1d181440f297e4b Mon Sep 17 00:00:00 2001
From: efkin <efkin@riseup.net>
Date: Fri, 9 Dec 2016 16:55:09 +0100
Subject: [PATCH 2/5] Add missing Architecture test fixture
With this fixture, RepositoryAdminTest.test_respository_add()
can be executed smoothly.
---
distro_tracker/core/fixtures/repository-architectures-test-fixture.json | 1 +
functional_tests/tests.py | 2 ++
2 files changed, 3 insertions(+)
create mode 100644 distro_tracker/core/fixtures/repository-architectures-test-fixture.json
diff --git a/distro_tracker/core/fixtures/repository-architectures-test-fixture.json b/distro_tracker/core/fixtures/repository-architectures-test-fixture.json
new file mode 100644
index 0000000..c2f9140
--- /dev/null
+++ b/distro_tracker/core/fixtures/repository-architectures-test-fixture.json
@@ -0,0 +1 @@
+[{"fields": {"name": "amd64"}, "model": "core.architecture", "pk": 1}, {"fields": {"name": "armel"}, "model": "core.architecture", "pk": 2}, {"fields": {"name": "armhf"}, "model": "core.architecture", "pk": 3}, {"fields": {"name": "hurd-i386"}, "model": "core.architecture", "pk": 4}, {"fields": {"name": "i386"}, "model": "core.architecture", "pk": 5}, {"fields": {"name": "ia64"}, "model": "core.architecture", "pk": 6}, {"fields": {"name": "kfreebsd-amd64"}, "model": "core.architecture", "pk": 7}, {"fields": {"name": "kfreebsd-i386"}, "model": "core.architecture", "pk": 8}, {"fields": {"name": "mips"}, "model": "core.architecture", "pk": 9}, {"fields": {"name": "mipsel"}, "model": "core.architecture", "pk": 10}, {"fields": {"name": "powerpc"}, "model": "core.architecture", "pk": 11}, {"fields": {"name": "s390"}, "model": "core.architecture", "pk": 12}, {"fields": {"name": "s390x"}, "model": "core.architecture", "pk": 13}, {"fields": {"name": "sparc"}, "model": "core.architecture", "pk": 14}, {"fields": {"name": "all"}, "model": "core.architecture", "pk": 15}, {"fields": {"name": "any"}, "model": "core.architecture", "pk": 16}, {"fields": {"name": "alpha"}, "model": "core.architecture", "pk": 17}, {"fields": {"name": "arm"}, "model": "core.architecture", "pk": 18}, {"fields": {"name": "arm64"}, "model": "core.architecture", "pk": 19}, {"fields": {"name": "armeb"}, "model": "core.architecture", "pk": 20}, {"fields": {"name": "avr32"}, "model": "core.architecture", "pk": 21}, {"fields": {"name": "hppa"}, "model": "core.architecture", "pk": 22}, {"fields": {"name": "m32r"}, "model": "core.architecture", "pk": 23}, {"fields": {"name": "m68k"}, "model": "core.architecture", "pk": 24}, {"fields": {"name": "mips64"}, "model": "core.architecture", "pk": 25}, {"fields": {"name": "mips64el"}, "model": "core.architecture", "pk": 26}, {"fields": {"name": "mipsn32"}, "model": "core.architecture", "pk": 27}, {"fields": {"name": "mipsn32el"}, "model": "core.architecture", "pk": 28}, {"fields": {"name": "or1k"}, "model": "core.architecture", "pk": 29}, {"fields": {"name": "powerpcel"}, "model": "core.architecture", "pk": 30}, {"fields": {"name": "powerpcspe"}, "model": "core.architecture", "pk": 31}, {"fields": {"name": "ppc64"}, "model": "core.architecture", "pk": 32}, {"fields": {"name": "ppc64el"}, "model": "core.architecture", "pk": 33}, {"fields": {"name": "sh3"}, "model": "core.architecture", "pk": 34}, {"fields": {"name": "sh3eb"}, "model": "core.architecture", "pk": 35}, {"fields": {"name": "sh4"}, "model": "core.architecture", "pk": 36}, {"fields": {"name": "sh4eb"}, "model": "core.architecture", "pk": 37}, {"fields": {"name": "sparc64"}, "model": "core.architecture", "pk": 38}, {"fields": {"name": "x32"}, "model": "core.architecture", "pk": 39}]
\ No newline at end of file
diff --git a/functional_tests/tests.py b/functional_tests/tests.py
index 37dbf0a..008a292 100644
--- a/functional_tests/tests.py
+++ b/functional_tests/tests.py
@@ -13,6 +13,7 @@ Functional tests for Distro Tracker.
"""
from __future__ import unicode_literals
from distro_tracker.test import LiveServerTestCase
+from django.core.management import call_command
from django.core.urlresolvers import reverse
from django.contrib.auth import get_user_model
from django.core import mail
@@ -331,6 +332,7 @@ class RepositoryAdminTest(SeleniumTestCase):
main_email='admin',
password='admin'
)
+ call_command('loaddata', 'distro_tracker/core/fixtures/repository-architectures-test-fixture.json', verbosity=0)
def login_to_admin(self, username='admin', password='admin'):
"""
--
2.1.4
>From a8678c86979f85525a5c9002cd5591cfe600e76b Mon Sep 17 00:00:00 2001
From: efkin <efkin@riseup.net>
Date: Fri, 9 Dec 2016 17:11:39 +0100
Subject: [PATCH 3/5] Fix wrong URL
It was causing Timeout Error on test suite execution.
---
functional_tests/tests.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/functional_tests/tests.py b/functional_tests/tests.py
index 008a292..074ec16 100644
--- a/functional_tests/tests.py
+++ b/functional_tests/tests.py
@@ -749,7 +749,7 @@ class UserRegistrationTest(UserAccountsTestMixin, SeleniumTestCase):
self.send_enter('id_password')
# The user goes to the package page
- self.get_page('/' + package_name)
+ self.get_page('/pkg/' + package_name)
# The page shows a link to log out.
self.assert_in_page_body('Log out')
# The user selects the link to log out.
@@ -781,7 +781,7 @@ class SubscribeToPackageTest(UserAccountsTestMixin, SeleniumTestCase):
# The user first logs in
self.log_in()
# The user opens a package page
- self.get_page('/' + self.package.name)
+ self.get_page('/pkg/' + self.package.name)
# The page shows a button allowing them to subscribe to the package.
self.assert_element_with_id_in_page('subscribe-button')
@@ -811,7 +811,7 @@ class SubscribeToPackageTest(UserAccountsTestMixin, SeleniumTestCase):
package.
"""
# The user opens the package page
- self.get_page('/' + self.package.name)
+ self.get_page('/pkg/' + self.package.name)
# ...and tries subscribing to the package
self.get_element_by_id('subscribe-not-logged-in-button').click()
# ...only to find himself redirected to the log in page.
--
2.1.4
>From fb362272b4bf470a0c95356830f4d404cf108825 Mon Sep 17 00:00:00 2001
From: efkin <efkin@riseup.net>
Date: Fri, 9 Dec 2016 17:41:17 +0100
Subject: [PATCH 4/5] Fix too short await time
This caused a Timeout Error on test suite execution.
---
functional_tests/tests.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/functional_tests/tests.py b/functional_tests/tests.py
index 074ec16..76b7f5a 100644
--- a/functional_tests/tests.py
+++ b/functional_tests/tests.py
@@ -792,7 +792,7 @@ class SubscribeToPackageTest(UserAccountsTestMixin, SeleniumTestCase):
# The subscribe button is no longer found in the page
button = self.get_element_by_id('subscribe-button')
# === Give the page a chance to refresh ===
- wait = ui.WebDriverWait(self.browser, 1)
+ wait = ui.WebDriverWait(self.browser, 2)
wait.until(lambda browser: not button.is_displayed())
self.assertFalse(button.is_displayed())
--
2.1.4
>From fba692e2e68e44745da137da10104fa1544016a9 Mon Sep 17 00:00:00 2001
From: efkin <efkin@riseup.net>
Date: Fri, 9 Dec 2016 19:07:28 +0100
Subject: [PATCH 5/5] Add missing html id tag
It was violating SubscribeToPackageTest class.
---
distro_tracker/accounts/templates/accounts/subscriptions.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/distro_tracker/accounts/templates/accounts/subscriptions.html b/distro_tracker/accounts/templates/accounts/subscriptions.html
index ac52d67..0ce1c16 100644
--- a/distro_tracker/accounts/templates/accounts/subscriptions.html
+++ b/distro_tracker/accounts/templates/accounts/subscriptions.html
@@ -190,7 +190,7 @@
</div>
<div class="col-sm-9">
<input type="hidden" value="{% url 'dtracker-accounts-subscriptions' %}" name="next">
- <input class="form-control package-completion" type="text" name="package" placeholder="Choose package...">
+ <input id="package-search-input" class="form-control package-completion" type="text" name="package" placeholder="Choose package...">
</div>
</div>
<div class="form-group row">
--
2.1.4
Reply to: