TT#43813 expose release_dashboard gerrit/refresh via API

* jenkins will be able to trigger it via API

Change-Id: I7f9eb0c1e6c2daf059d6509e19976dfda4fed730
changes/54/38954/1
Victor Seva 6 years ago
parent 36402a2e4c
commit daf050f140
No known key found for this signature in database
GPG Key ID: B1589889727198E0

@ -15,24 +15,9 @@
from django.test import override_settings
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from rest_framework_api_key.helpers import generate_key
from rest_framework_api_key.models import APIKey
from build import models
from repoapi.test.base import BaseTest
class APIAuthenticatedTestCase(BaseTest, APITestCase):
APP_NAME = "Project Tests"
def setUp(self):
super(APIAuthenticatedTestCase, self).setUp()
self.app_key = APIKey.objects.create(
name=self.APP_NAME, key=generate_key()
)
self.client.credentials(HTTP_API_KEY=self.app_key.key)
from repoapi.test.base import APIAuthenticatedTestCase
@override_settings(JBI_ALLOWED_HOSTS=["fake.local"])

@ -28,10 +28,7 @@ logger = logging.getLogger(__name__)
@shared_task(ignore_result=True)
def gerrit_fetch_info(projectname):
project, _ = Project.objects.get_or_create(name=projectname)
project.tags = build.get_gerrit_tags(projectname)
project.branches = build.get_gerrit_branches(projectname)
project.save()
build.fetch_gerrit_info(projectname)
@shared_task(ignore_result=True)

@ -13,12 +13,15 @@
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
from django.conf import settings
from django.test import override_settings
from django.urls import reverse
from mock import call
from mock import patch
from rest_framework import status
from rest_framework.test import APITestCase
from release_dashboard import models
from repoapi.test.base import APIAuthenticatedTestCase
class TestDockerRest(APITestCase):
@ -46,3 +49,13 @@ class TestDockerRest(APITestCase):
"%s/manifests/%s" % (image_name, tag.reference)
)
)
@override_settings(RELEASE_DASHBOARD_PROJECTS=("asterisk", "kamailio"))
class TestGerritRest(APIAuthenticatedTestCase):
@patch("release_dashboard.utils.build.fetch_gerrit_info")
def test_refresh(self, fgi):
response = self.client.post(reverse("gerrit-refresh"), format="json")
self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
calls = [call("asterisk"), call("kamailio")]
self.assertListEqual(fgi.mock_calls, calls)

@ -17,6 +17,7 @@ import requests
from requests.auth import HTTPBasicAuth
from ..conf import settings
from ..models import Project
from repoapi.utils import openurl
logger = logging.getLogger(__name__)
@ -112,6 +113,13 @@ def trigger_build(
return "{base}/job/{job}/".format(**params)
def fetch_gerrit_info(projectname):
project, _ = Project.objects.get_or_create(name=projectname)
project.tags = get_gerrit_tags(projectname)
project.branches = get_gerrit_branches(projectname)
project.save()
def get_gerrit_info(url):
if settings.DEBUG:
logger.debug("Debug mode, would trigger: %s", url)

@ -0,0 +1,27 @@
# Copyright (C) 2020 The Sipwise Team - http://sipwise.com
#
# 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 the Free
# Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
from django.http import JsonResponse
from rest_framework.views import APIView
from .. import tasks
from build.views import BuildAccess
class RefreshGerritInfo(APIView):
permission_classes = (BuildAccess,)
def post(self, request):
res = tasks.gerrit_fetch_all.delay()
return JsonResponse({"url": "/flower/task/%s" % res.id}, status=202)

@ -18,6 +18,9 @@ from tempfile import mkdtemp
from django.test import override_settings
from django.test import TestCase
from rest_framework.test import APITestCase
from rest_framework_api_key.helpers import generate_key
from rest_framework_api_key.models import APIKey
JBI_BASEDIR = mkdtemp(dir=os.environ.get("RESULTS"))
@ -35,3 +38,15 @@ class BaseTest(TestCase):
if os.path.exists(settings.JBI_BASEDIR):
shutil.rmtree(settings.JBI_BASEDIR)
class APIAuthenticatedTestCase(BaseTest, APITestCase):
APP_NAME = "Project Tests"
def setUp(self):
super(APIAuthenticatedTestCase, self).setUp()
self.app_key = APIKey.objects.create(
name=self.APP_NAME, key=generate_key()
)
self.client.credentials(HTTP_API_KEY=self.app_key.key)

@ -19,6 +19,7 @@ from django.contrib import admin
from rest_framework.urlpatterns import format_suffix_patterns
from build import views as build_views
from release_dashboard.views import api as rd_api
from release_dashboard.views import docker
from repoapi import views
@ -90,6 +91,11 @@ api_patterns = [
docker.DockerTagDetail.as_view(),
name="dockertag-detail",
),
url(
r"^gerrit/refresh/$",
rd_api.RefreshGerritInfo.as_view(),
name="gerrit-refresh",
),
url(r"^build/", include("build.urls")),
]

Loading…
Cancel
Save