unit test for buildNotification task handler

This commit is contained in:
Mike McLean 2017-10-05 19:54:25 -04:00
parent 80ca9ff294
commit 00e059c0c0
4 changed files with 535 additions and 0 deletions

View file

@ -0,0 +1,362 @@
[
{
"method": "getTaskInfo",
"args": [
8982172
],
"kwargs": {},
"result": {
"weight": 0.2,
"parent": null,
"completion_time": "2015-02-18 14:57:37.719876",
"start_time": "2015-02-18 14:45:50.535914",
"start_ts": 1424270750.53591,
"state": 2,
"awaited": null,
"label": null,
"priority": 20,
"channel_id": 1,
"waiting": false,
"create_time": "2015-02-18 14:45:43.283233",
"id": 8982172,
"create_ts": 1424270743.28323,
"owner": 2045,
"host_id": 84,
"completion_ts": 1424271457.71988,
"arch": "noarch",
"method": "build"
}
},
{
"method": "getHost",
"args": [
84
],
"kwargs": {},
"result": {
"comment": null,
"capacity": 4.0,
"name": "buildvm-26.build.example.com",
"enabled": true,
"arches": "i386 x86_64",
"task_load": 0.0,
"ready": true,
"user_id": 2179,
"id": 84,
"description": null
}
},
{
"method": "getTaskResult",
"args": [
8982172
],
"kwargs": {},
"result": null
},
{
"method": "listTaskOutput",
"args": [
8982172
],
"kwargs": {
"all_volumes": true
},
"result": {}
},
{
"method": "getTaskRequest",
"args": [
8982172
],
"kwargs": {},
"result": [
"git://pkgs.example.com/sisu?#5428a6665ed5d4920bda5da6db6c9fce942070ac",
"rawhide",
{
"skip_tag": true
}
]
},
{
"method": "getTaskChildren",
"args": [
8982172
],
"kwargs": {},
"result": [
{
"weight": 1.0,
"parent": 8982172,
"completion_time": "2015-02-18 14:50:13.119183",
"start_time": "2015-02-18 14:45:59.156319",
"start_ts": 1424270759.15632,
"state": 2,
"awaited": false,
"label": "srpm",
"priority": 19,
"channel_id": 1,
"waiting": null,
"create_time": "2015-02-18 14:45:51.418503",
"id": 8982174,
"create_ts": 1424270751.4185,
"owner": 2045,
"host_id": 116,
"completion_ts": 1424271013.11918,
"arch": "noarch",
"method": "buildSRPMFromSCM"
},
{
"weight": 1.62572677375,
"parent": 8982172,
"completion_time": "2015-02-18 14:57:33.063121",
"start_time": "2015-02-18 14:50:43.011525",
"start_ts": 1424271043.01152,
"state": 2,
"awaited": false,
"label": "noarch",
"priority": 19,
"channel_id": 1,
"waiting": null,
"create_time": "2015-02-18 14:50:37.546755",
"id": 8982231,
"create_ts": 1424271037.54676,
"owner": 2045,
"host_id": 81,
"completion_ts": 1424271453.06312,
"arch": "noarch",
"method": "buildArch"
}
]
},
{
"method": "getTaskInfo",
"args": [
8982174
],
"kwargs": {},
"result": {
"weight": 1.0,
"parent": 8982172,
"completion_time": "2015-02-18 14:50:13.119183",
"start_time": "2015-02-18 14:45:59.156319",
"start_ts": 1424270759.15632,
"state": 2,
"awaited": false,
"label": "srpm",
"priority": 19,
"channel_id": 1,
"waiting": null,
"create_time": "2015-02-18 14:45:51.418503",
"id": 8982174,
"create_ts": 1424270751.4185,
"owner": 2045,
"host_id": 116,
"completion_ts": 1424271013.11918,
"arch": "noarch",
"method": "buildSRPMFromSCM"
}
},
{
"method": "getHost",
"args": [
116
],
"kwargs": {},
"result": {
"comment": null,
"capacity": 2.0,
"name": "arm02-builder13.build.example.com",
"enabled": false,
"arches": "armhfp",
"task_load": 0.0,
"ready": false,
"user_id": 2477,
"id": 116,
"description": null
}
},
{
"method": "getTaskResult",
"args": [
8982174
],
"kwargs": {},
"result": {
"brootid": 2978259,
"srpm": "tasks/2174/8982174/sisu-0.3.0-0.2.M1.fc23.src.rpm",
"logs": [
"tasks/2174/8982174/build.log",
"tasks/2174/8982174/root.log",
"tasks/2174/8982174/state.log"
]
}
},
{
"method": "listTaskOutput",
"args": [
8982174
],
"kwargs": {
"all_volumes": true
},
"result": {}
},
{
"method": "getTaskRequest",
"args": [
8982174
],
"kwargs": {},
"result": [
"git://pkgs.example.com/sisu?#5428a6665ed5d4920bda5da6db6c9fce942070ac",
299,
{
"repo_id": 456563
}
]
},
{
"method": "getTaskChildren",
"args": [
8982174
],
"kwargs": {},
"result": []
},
{
"method": "getTaskInfo",
"args": [
8982231
],
"kwargs": {},
"result": {
"weight": 1.62572677375,
"parent": 8982172,
"completion_time": "2015-02-18 14:57:33.063121",
"start_time": "2015-02-18 14:50:43.011525",
"start_ts": 1424271043.01152,
"state": 2,
"awaited": false,
"label": "noarch",
"priority": 19,
"channel_id": 1,
"waiting": null,
"create_time": "2015-02-18 14:50:37.546755",
"id": 8982231,
"create_ts": 1424271037.54676,
"owner": 2045,
"host_id": 81,
"completion_ts": 1424271453.06312,
"arch": "noarch",
"method": "buildArch"
}
},
{
"method": "getHost",
"args": [
81
],
"kwargs": {},
"result": {
"comment": null,
"capacity": 4.0,
"name": "buildvm-23.build.example.com",
"enabled": true,
"arches": "i386 x86_64",
"task_load": 0.0,
"ready": true,
"user_id": 2176,
"id": 81,
"description": null
}
},
{
"method": "getTaskResult",
"args": [
8982231
],
"kwargs": {},
"result": {
"brootid": 2978278,
"srpms": [
"tasks/2231/8982231/sisu-0.3.0-0.2.M1.fc23.src.rpm"
],
"rpms": [
"tasks/2231/8982231/sisu-javadoc-0.3.0-0.2.M1.fc23.noarch.rpm",
"tasks/2231/8982231/sisu-plexus-0.3.0-0.2.M1.fc23.noarch.rpm",
"tasks/2231/8982231/sisu-inject-0.3.0-0.2.M1.fc23.noarch.rpm"
],
"logs": [
"tasks/2231/8982231/root.log",
"tasks/2231/8982231/state.log",
"tasks/2231/8982231/build.log"
]
}
},
{
"method": "listTaskOutput",
"args": [
8982231
],
"kwargs": {
"all_volumes": true
},
"result": {}
},
{
"method": "getTaskRequest",
"args": [
8982231
],
"kwargs": {},
"result": [
"tasks/2174/8982174/sisu-0.3.0-0.2.M1.fc23.src.rpm",
299,
"noarch",
true,
{
"repo_id": 456563
}
]
},
{
"method": "getTaskChildren",
"args": [
8982231
],
"kwargs": {},
"result": []
},
{
"method": "getChangelogEntries",
"args": [
612609
],
"kwargs": {
"queryOpts": {
"limit": 3
}
},
"result": [
{
"date": "2015-02-18 12:00:00",
"text": "- Unbundle ASM\n- Resolves: rhbz#1085903",
"date_ts": 1424260800,
"author": "Happy Koji User <user@example.com> - 1:0.3.0-0.2.M1"
},
{
"date": "2015-02-04 12:00:00",
"text": "- Update to upstream milestone 0.3.0.M1",
"date_ts": 1423051200,
"author": "Happy Koji User <user@example.com> - 1:0.3.0-0.1.M1"
},
{
"date": "2014-09-30 12:00:00",
"text": "- Port to plexus-utils 3.0.18",
"date_ts": 1412078400,
"author": "Happy Koji User <user@example.com> - 1:0.2.1-10"
}
]
}
]

View file

@ -0,0 +1,44 @@
From: koji@example.com
Subject: Package: sisu-0.3.0-0.2.M1.fc23 Tag: f23 Status: complete Built by: user
To: user@example.com
X-Koji-Tag: f23
X-Koji-Package: sisu
X-Koji-Builder: user
X-Koji-Status: complete
Package: sisu-0.3.0-0.2.M1.fc23
Tag: f23
Status: complete
Built by: user
ID: 612609
Started: Wed, 18 Feb 2015 14:50:37 EST
Finished: Wed, 18 Feb 2015 14:57:37 EST
Changelog:
* Wed Feb 18 2015 Happy Koji User <user@example.com> - 1:0.3.0-0.2.M1
- Unbundle ASM
- Resolves: rhbz#1085903
* Wed Feb 04 2015 Happy Koji User <user@example.com> - 1:0.3.0-0.1.M1
- Update to upstream milestone 0.3.0.M1
* Tue Sep 30 2014 Happy Koji User <user@example.com> - 1:0.2.1-10
- Port to plexus-utils 3.0.18
Closed tasks:
-------------
Task 8982172 on buildvm-26.build.example.com
Task Type: build (rawhide, /sisu:5428a6665ed5d4920bda5da6db6c9fce942070ac)
Task 8982174 on arm02-builder13.build.example.com
Task Type: buildSRPMFromSCM (/sisu:5428a6665ed5d4920bda5da6db6c9fce942070ac)
Task 8982231 on buildvm-23.build.example.com
Task Type: buildArch (sisu-0.3.0-0.2.M1.fc23.src.rpm, noarch)
Task Info: https://koji.example.com/kojiweb/taskinfo?taskID=8982172
Build Info: https://koji.example.com/kojiweb/buildinfo?buildID=612609

View file

@ -0,0 +1,35 @@
{
"recipients": [
"user@example.com"
],
"weburl": "https://koji.example.com/kojiweb",
"build": {
"task_id": 8982172,
"owner_name": "user",
"name": "sisu",
"package_id": 11059,
"state": 1,
"package_name": "sisu",
"creation_event_id": 9798602,
"creation_time": "2015-02-18 14:50:37.471074",
"owner_id": 2045,
"completion_time": "2015-02-18 14:57:37.107872",
"epoch": 1,
"version": "0.3.0",
"volume_id": 0,
"release": "0.2.M1.fc23",
"creation_ts": 1424271037.47107,
"completion_ts": 1424271457.10787,
"id": 612609,
"volume_name": "DEFAULT",
"nvr": "sisu-0.3.0-0.2.M1.fc23"
},
"target": {
"dest_tag": 292,
"build_tag": 299,
"build_tag_name": "f23-build",
"dest_tag_name": "f23",
"id": 88,
"name": "rawhide"
}
}

View file

@ -0,0 +1,94 @@
from __future__ import absolute_import
import json
import mock
import os
import smtplib
import tempfile
import unittest
import koji
import koji.util
from .loadkojid import kojid
class MyClientSession(koji.ClientSession):
def __init__(self, *a, **kw):
super(MyClientSession, self).__init__(*a, **kw)
self._testcalls = {}
def load_calls(self, name):
fn = os.path.join(os.path.dirname(__file__), 'data/calls', name,'calls.json')
with open(fn) as fp:
data = json.load(fp)
data = koji.fixEncodingRecurse(data)
for call in data:
key = self._munge([call['method'], call['args'], call['kwargs']])
self._testcalls[key] = call
def _callMethod(self, name, args, kwargs=None, retry=True):
if self.multicall:
raise Exception('multicall not supported')
key = self._munge([name, args, kwargs])
if key in self._testcalls:
return self._testcalls[key]['result']
else:
return mock.MagicMock()
def _munge(self, data):
def callback(value):
if isinstance(value, list):
return tuple(value)
elif isinstance(value, dict):
keys = sorted(value.keys())
return tuple([(k, value[k]) for k in keys])
else:
return value
walker = koji.util.DataWalker(data, callback)
return walker.walk()
class TestBuildNotification(unittest.TestCase):
def setUp(self):
self.tempdir = tempfile.mkdtemp()
self.SMTP = mock.patch('smtplib.SMTP').start()
self.session = mock.MagicMock()
self.options = mock.MagicMock()
self.options.topdir = self.tempdir
self.options.workdir = self.tempdir
def tearDown(self):
mock.patch.stopall()
def test_build_notification(self):
# task_info['id'], method, params, self.session, self.options
task_id = 999
fn = os.path.join(os.path.dirname(__file__), 'data/calls', 'build_notif_1', 'params.json')
with file(fn) as fp:
kwargs = json.load(fp)
self.session = MyClientSession('https://koji.example.com/kojihub')
self.session.load_calls('build_notif_1')
self.options.from_addr = "koji@example.com"
server = mock.MagicMock()
self.SMTP.return_value = server
# run it
handler = kojid.BuildNotificationTask(
task_id,
'buildNotification',
koji.encode_args(**kwargs),
self.session,
self.options)
ret = handler.run()
self.assertEqual(ret, "sent notification of build 612609 to: user@example.com")
# check sendmail args
from_addr, recipients, message = server.sendmail.call_args[0]
self.assertEqual(from_addr, "koji@example.com")
self.assertEqual(recipients, ["user@example.com"])
fn = os.path.join(os.path.dirname(__file__), 'data/calls', 'build_notif_1', 'message.txt')
with file(fn) as fp:
msg_expect = fp.read()
self.assertEqual(message, msg_expect)