Add user conflict to full schleuder test
This commit is contained in:
parent
f0c666540f
commit
f34eecd6ee
2 changed files with 67 additions and 12 deletions
|
@ -44,6 +44,7 @@ gen_key andy.example@example.org
|
||||||
mv /tmp/andy.example@example.org.asc /tmp/andy.example@example.org.1.asc
|
mv /tmp/andy.example@example.org.asc /tmp/andy.example@example.org.1.asc
|
||||||
gen_key aaron.example@example.org aaron.example@example.net
|
gen_key aaron.example@example.org aaron.example@example.net
|
||||||
gen_key amy.example@example.org
|
gen_key amy.example@example.org
|
||||||
|
gen_key alice.example@example.org alice.example@example.net
|
||||||
|
|
||||||
install -m 0700 -d /tmp/gpg
|
install -m 0700 -d /tmp/gpg
|
||||||
export GNUPGHOME=/tmp/gpg
|
export GNUPGHOME=/tmp/gpg
|
||||||
|
@ -75,6 +76,7 @@ schleuder-cli subscriptions new test-north@schleuder.example.org arno.example@ex
|
||||||
subscribe test-east@schleuder.example.org anna.example@example.org # key should be updated
|
subscribe test-east@schleuder.example.org anna.example@example.org # key should be updated
|
||||||
subscribe test-east@schleuder.example.org anotherspammer@example.org # should not be subscribed
|
subscribe test-east@schleuder.example.org anotherspammer@example.org # should not be subscribed
|
||||||
subscribe test-east@schleuder.example.org aaron.example@example.org # should remain as-is
|
subscribe test-east@schleuder.example.org aaron.example@example.org # should remain as-is
|
||||||
|
subscribe test-east@schleuder.example.org alice.example@example.net # should be subscriped despite conflict
|
||||||
|
|
||||||
subscribe test-south@schleuder.example.org andy.example@example.org # should be subscribed despite key conflict
|
subscribe test-south@schleuder.example.org andy.example@example.org # should be subscribed despite key conflict
|
||||||
subscribe test-south@schleuder.example.org amy.example@example.org # should be subscribed - conflict but same key
|
subscribe test-south@schleuder.example.org amy.example@example.org # should be subscribed - conflict but same key
|
||||||
|
@ -84,6 +86,7 @@ sleep 5 # to get different subscription dates
|
||||||
schleuder-cli subscriptions new test-west@schleuder.example.org andy.example@example.org /tmp/andy.example@example.org.1.asc
|
schleuder-cli subscriptions new test-west@schleuder.example.org andy.example@example.org /tmp/andy.example@example.org.1.asc
|
||||||
# should not be subscribed
|
# should not be subscribed
|
||||||
subscribe test-west@schleuder.example.org amy.example@example.org # should be subscribed - conflict but same key
|
subscribe test-west@schleuder.example.org amy.example@example.org # should be subscribed - conflict but same key
|
||||||
|
subscribe test-west@schleuder.example.org alice.example@example.org # should not be subscriped - key used by other UID
|
||||||
|
|
||||||
schleuder-cli subscriptions new test2-global@schleuder.example.org arno.example@example.org
|
schleuder-cli subscriptions new test2-global@schleuder.example.org arno.example@example.org
|
||||||
# should be unsubscribed - no key
|
# should be unsubscribed - no key
|
||||||
|
|
|
@ -38,6 +38,7 @@ expected_subscribers = subscribermap([
|
||||||
'aaron.example@example.org',
|
'aaron.example@example.org',
|
||||||
'admin@example.org',
|
'admin@example.org',
|
||||||
'alex.example@example.org',
|
'alex.example@example.org',
|
||||||
|
'alice.example@example.net',
|
||||||
'amy.example@example.org',
|
'amy.example@example.org',
|
||||||
'andy.example@example.org',
|
'andy.example@example.org',
|
||||||
'anna.example@example.org',
|
'anna.example@example.org',
|
||||||
|
@ -62,6 +63,7 @@ expected_keys = keymap([
|
||||||
'aaron.example@example.org',
|
'aaron.example@example.org',
|
||||||
'admin@example.org',
|
'admin@example.org',
|
||||||
'alex.example@example.org',
|
'alex.example@example.org',
|
||||||
|
'alice.example@example.org', # schleuder returns the primary UID
|
||||||
'amy.example@example.org',
|
'amy.example@example.org',
|
||||||
'andy.example@example.org',
|
'andy.example@example.org',
|
||||||
'anna.example@example.org',
|
'anna.example@example.org',
|
||||||
|
@ -84,20 +86,23 @@ if len(keysdiff) > 0:
|
||||||
# Test mbox
|
# Test mbox
|
||||||
|
|
||||||
mbox = mailbox.mbox('/var/spool/mail/root')
|
mbox = mailbox.mbox('/var/spool/mail/root')
|
||||||
if len(mbox) != 2:
|
if len(mbox) != 4:
|
||||||
print(f'Expected 2 messages in mbox, got {len(mbox)}')
|
print(f'Expected 4 messages in mbox, got {len(mbox)}')
|
||||||
exit(1)
|
exit(1)
|
||||||
_, msg1 = mbox.popitem()
|
messages = []
|
||||||
_, msg2 = mbox.popitem()
|
for i in range(4):
|
||||||
|
messages.append(mbox.popitem()[1])
|
||||||
mbox.close()
|
mbox.close()
|
||||||
if 'X-MultiSchleuder-Digest' not in msg1:
|
|
||||||
msg1, msg2 = msg2, msg1
|
|
||||||
|
|
||||||
|
msg1 = [m for m in messages if m['To'] == 'andy.example@example.org'][0]
|
||||||
|
msg2 = [m for m in messages if m['To'] == 'admin@example.org'][0]
|
||||||
|
msg3 = [m for m in messages if m['To'] == 'alice.example@example.org'][0]
|
||||||
|
msg4 = [m for m in messages if m['To'] == 'alice.example@example.net'][0]
|
||||||
|
|
||||||
if 'X-MultiSchleuder-Digest' not in msg1:
|
if 'X-MultiSchleuder-Digest' not in msg1:
|
||||||
print(f'Key conflict message should have a X-MultiSchleuder-Digest header, missing')
|
print(f'Key conflict message should have a X-MultiSchleuder-Digest header, missing')
|
||||||
exit(1)
|
exit(1)
|
||||||
digest = msg1['X-MultiSchleuder-Digest'].strip()
|
digest1 = msg1['X-MultiSchleuder-Digest'].strip()
|
||||||
if msg1['From'] != 'test-global-owner@schleuder.example.org':
|
if msg1['From'] != 'test-global-owner@schleuder.example.org':
|
||||||
print(f'Expected "From: test-global-owner@schleuder.example.org", got {msg1["From"]}')
|
print(f'Expected "From: test-global-owner@schleuder.example.org", got {msg1["From"]}')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
@ -127,27 +132,74 @@ if msg2['Precedence'] != 'list':
|
||||||
print(f'Expected "Precedence: list", got {msg2["Precedence"]}')
|
print(f'Expected "Precedence: list", got {msg2["Precedence"]}')
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
if 'X-MultiSchleuder-Digest' not in msg3:
|
||||||
|
print(f'User conflict message should have a X-MultiSchleuder-Digest header, missing')
|
||||||
|
exit(1)
|
||||||
|
digest3 = msg3['X-MultiSchleuder-Digest'].strip()
|
||||||
|
if msg3['From'] != 'test-global-owner@schleuder.example.org':
|
||||||
|
print(f'Expected "From: test-global-owner@schleuder.example.org", got {msg3["From"]}')
|
||||||
|
exit(1)
|
||||||
|
if msg3['To'] != 'alice.example@example.org':
|
||||||
|
print(f'Expected "To: alice.example@example.org", got {msg3["To"]}')
|
||||||
|
exit(1)
|
||||||
|
if msg3['Auto-Submitted'] != 'auto-generated':
|
||||||
|
print(f'Expected "Auto-Submitted: auto-generated", got {msg3["Auto-Submitted"]}')
|
||||||
|
exit(1)
|
||||||
|
if msg3['Precedence'] != 'list':
|
||||||
|
print(f'Expected "Precedence: list", got {msg3["Precedence"]}')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if 'X-MultiSchleuder-Digest' not in msg4:
|
||||||
|
print(f'User conflict message should have a X-MultiSchleuder-Digest header, missing')
|
||||||
|
exit(1)
|
||||||
|
digest4 = msg4['X-MultiSchleuder-Digest'].strip()
|
||||||
|
if msg4['From'] != 'test-global-owner@schleuder.example.org':
|
||||||
|
print(f'Expected "From: test-global-owner@schleuder.example.org", got {msg4["From"]}')
|
||||||
|
exit(1)
|
||||||
|
if msg4['To'] != 'alice.example@example.net':
|
||||||
|
print(f'Expected "To: alice.example@example.net", got {msg4["To"]}')
|
||||||
|
exit(1)
|
||||||
|
if msg4['Auto-Submitted'] != 'auto-generated':
|
||||||
|
print(f'Expected "Auto-Submitted: auto-generated", got {msg4["Auto-Submitted"]}')
|
||||||
|
exit(1)
|
||||||
|
if msg4['Precedence'] != 'list':
|
||||||
|
print(f'Expected "Precedence: list", got {msg4["Precedence"]}')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if digest3 != digest4:
|
||||||
|
print(f'User conflict messages should have the same digest, got: "{digest3}" vs "{digest4}"')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
gpg1 = subprocess.Popen(['/usr/bin/gpg', '-d'],
|
gpg1 = subprocess.Popen(['/usr/bin/gpg', '-d'],
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
gpg1o, _ = gpg1.communicate(msg1.get_payload()[1].get_payload(decode=True))
|
gpg1o, _ = gpg1.communicate(msg1.get_payload()[1].get_payload(decode=True))
|
||||||
print(f'Key conflict message (decrypted):\n{gpg1o.decode()}')
|
print(f'\nKey conflict message (decrypted):\n{gpg1o.decode()}')
|
||||||
gpg2 = subprocess.Popen(['/usr/bin/gpg', '-d'],
|
gpg2 = subprocess.Popen(['/usr/bin/gpg', '-d'],
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
gpg2o, _ = gpg2.communicate(msg2.get_payload()[1].get_payload(decode=True))
|
gpg2o, _ = gpg2.communicate(msg2.get_payload()[1].get_payload(decode=True))
|
||||||
print(f'Admin report message (decrypted):\n{gpg2o.decode()}')
|
print(f'\nAdmin report message (decrypted):\n{gpg2o.decode()}')
|
||||||
|
gpg3 = subprocess.Popen(['/usr/bin/gpg', '-d'],
|
||||||
|
stdin=subprocess.PIPE,
|
||||||
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
gpg3o, _ = gpg3.communicate(msg3.get_payload()[1].get_payload(decode=True))
|
||||||
|
print(f'\nUser conflict message (decrypted):\n{gpg3o.decode()}')
|
||||||
|
|
||||||
# Test conflict statefile
|
# Test conflict statefile
|
||||||
|
|
||||||
with open('/tmp/conflict.json', 'r') as f:
|
with open('/tmp/conflict.json', 'r') as f:
|
||||||
conflict = json.load(f)
|
conflict = json.load(f)
|
||||||
if len(conflict) != 1:
|
if len(conflict) != 2:
|
||||||
print('Expected 1 entry in conflict statefile, got:')
|
print('Expected 1 entry in conflict statefile, got:')
|
||||||
print(json.dumps(conflict))
|
print(json.dumps(conflict))
|
||||||
exit(1)
|
exit(1)
|
||||||
if digest not in conflict:
|
if digest1 not in conflict:
|
||||||
print(f'Expected key "{digest}" in conflict statefile, got:')
|
print(f'Expected key "{digest1}" in conflict statefile, got:')
|
||||||
|
print(json.dumps(conflict))
|
||||||
|
exit(1)
|
||||||
|
if digest3 not in conflict:
|
||||||
|
print(f'Expected key "{digest3}" in conflict statefile, got:')
|
||||||
print(json.dumps(conflict))
|
print(json.dumps(conflict))
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue