1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
import pytest # noqa
import b4
import os
import email
import mailbox
import io
@pytest.mark.parametrize('source,expected', [
('good-valid-trusted', (True, True, True, 'B6C41CE35664996C', '1623274836')),
('good-valid-notrust', (True, True, False, 'B6C41CE35664996C', '1623274836')),
('good-invalid-notrust', (True, False, False, 'B6C41CE35664996C', None)),
('badsig', (False, False, False, 'B6C41CE35664996C', None)),
('no-pubkey', (False, False, False, None, None)),
])
def test_check_gpg_status(source, expected):
with open(f'tests/samples/gpg-{source}.txt', 'r') as fh:
status = fh.read()
assert b4.check_gpg_status(status) == expected
@pytest.mark.parametrize('source,regex,flags,ismbox', [
(None, r'^From git@z ', 0, False),
(None, r'\n\nFrom git@z ', 0, False),
])
def test_save_git_am_mbox(tmpdir, source, regex, flags, ismbox):
import re
if source is not None:
if ismbox:
mbx = mailbox.mbox(f'tests/samples/{source}.txt')
msgs = list(mbx)
else:
import email
with open(f'tests/samples/{source}.txt', 'rb') as fh:
msg = email.message_from_binary_file(fh)
msgs = [msg]
else:
import email.message
msgs = list()
for x in range(0, 3):
msg = email.message.EmailMessage()
msg.set_payload(f'Hello world {x}\n')
msg['Subject'] = f'Hello world {x}'
msg['From'] = f'Me{x} <me{x}@foo.bar>'
msgs.append(msg)
dest = os.path.join(tmpdir, 'out')
with open(dest, 'w') as fh:
b4.save_git_am_mbox(msgs, fh)
with open(dest, 'r') as fh:
res = fh.read()
assert re.search(regex, res, flags=flags)
@pytest.mark.parametrize('source,expected', [
('trailers-test-simple',
[('person', 'Reviewed-By', 'Bogus Bupkes <bogus@example.com>', None),
('utility', 'Fixes', 'abcdef01234567890', None),
('utility', 'Link', 'https://msgid.link/some@msgid.here', None),
]),
('trailers-test-extinfo',
[('person', 'Reviewed-by', 'Bogus Bupkes <bogus@example.com>', '[for the parts that are bogus]'),
('utility', 'Fixes', 'abcdef01234567890', None),
('person', 'Tested-by', 'Some Person <bogus2@example.com>', ' [this person visually indented theirs]'),
('utility', 'Link', 'https://msgid.link/some@msgid.here', ' # initial submission'),
('person', 'Signed-off-by', 'Wrapped Persontrailer <broken@example.com>', None),
]),
])
def test_parse_trailers(source, expected):
with open(f'tests/samples/{source}.txt', 'r') as fh:
msg = email.message_from_file(fh)
lmsg = b4.LoreMessage(msg)
gh, m, trs, bas, sig = b4.LoreMessage.get_body_parts(lmsg.body)
assert len(expected) == len(trs)
for tr in trs:
mytype, myname, myvalue, myextinfo = expected.pop(0)
mytr = b4.LoreTrailer(name=myname, value=myvalue, extinfo=myextinfo)
assert tr == mytr
assert tr.type == mytype
@pytest.mark.parametrize('source,serargs,amargs,reference,b4cfg', [
('single', {}, {}, 'defaults', {}),
('single', {}, {'noaddtrailers': True}, 'noadd', {}),
('single', {}, {'addmysob': True}, 'addmysob', {}),
('single', {}, {'addmysob': True, 'copyccs': True}, 'copyccs', {}),
('single', {}, {'addmysob': True, 'addlink': True}, 'addlink', {}),
('single', {}, {'addmysob': True, 'copyccs': True}, 'ordered',
{'trailer-order': 'Cc,Tested*,Reviewed*,*'}),
('single', {'sloppytrailers': True}, {'addmysob': True}, 'sloppy', {}),
('with-cover', {}, {'addmysob': True}, 'defaults', {}),
('with-cover', {}, {'covertrailers': True, 'addmysob': True}, 'covertrailers', {}),
('custody', {}, {'addmysob': True, 'copyccs': True}, 'unordered', {}),
('custody', {}, {'addmysob': True, 'copyccs': True}, 'ordered',
{'trailer-order': 'Cc,Fixes*,Link*,Suggested*,Reviewed*,Tested*,*'}),
('partial-reroll', {}, {'addmysob': True}, 'defaults', {}),
])
def test_followup_trailers(source, serargs, amargs, reference, b4cfg):
b4.USER_CONFIG = {
'name': 'Test Override',
'email': 'test-override@example.com',
}
b4.MAIN_CONFIG = dict(b4.DEFAULT_CONFIG)
b4.MAIN_CONFIG.update(b4cfg)
lmbx = b4.LoreMailbox()
for msg in mailbox.mbox(f'tests/samples/trailers-followup-{source}.mbox'):
lmbx.add_message(msg)
lser = lmbx.get_series(**serargs)
assert lser is not None
amsgs = lser.get_am_ready(**amargs)
ifh = io.StringIO()
b4.save_git_am_mbox(amsgs, ifh)
with open(f'tests/samples/trailers-followup-{source}-ref-{reference}.txt', 'r') as fh:
assert ifh.getvalue() == fh.read()
|