Revize fc874c36
Přidáno uživatelem Michal Seják před asi 4 roky(ů)
tests/integration_tests/rest_api/certificates_test.py | ||
---|---|---|
311 | 311 |
|
312 | 312 |
def test_sign_by_non_ca(server): |
313 | 313 |
ret = make_end_cert(server, 2, "Fake intermediate cert s.r.o.", usage={ |
314 |
"CA": False,
|
|
315 |
"SSL": True,
|
|
316 |
"authentication": True,
|
|
317 |
"digitalSignature": True
|
|
318 |
})
|
|
314 |
"CA": False, |
|
315 |
"SSL": True, |
|
316 |
"authentication": True, |
|
317 |
"digitalSignature": True |
|
318 |
}) |
|
319 | 319 |
|
320 | 320 |
assert ret.status_code == 201 |
321 | 321 |
|
... | ... | |
327 | 327 |
assert d["success"] |
328 | 328 |
|
329 | 329 |
ret = make_end_cert(server, 8, "End certificate signed by end certificate s.r.o.", usage={ |
330 |
"CA": False,
|
|
331 |
"SSL": True,
|
|
332 |
"authentication": False,
|
|
333 |
"digitalSignature": False
|
|
334 |
})
|
|
330 |
"CA": False, |
|
331 |
"SSL": True, |
|
332 |
"authentication": False, |
|
333 |
"digitalSignature": False |
|
334 |
}) |
|
335 | 335 |
|
336 | 336 |
# TODO discussion -> assert ret.status_code == 400 |
337 | 337 |
assert ret.status_code == 201 |
... | ... | |
592 | 592 |
assert not ret.json["success"] |
593 | 593 |
assert "No such certificate found." == ret.json["data"] |
594 | 594 |
|
595 |
|
|
595 | 596 |
def test_set_certificate_status(server): |
596 | 597 |
# Create certificate to be revoked later |
597 | 598 |
certificate = { |
... | ... | |
624 | 625 |
|
625 | 626 |
# revoke the certificate |
626 | 627 |
revocation_body = { |
627 |
"status": "revoked",
|
|
628 |
"status": "revoked", |
|
628 | 629 |
"reason": "keyCompromise" |
629 | 630 |
} |
630 | 631 |
revoke_ret = server.patch(f"/api/certificates/{cert_id}", content_type="application/json", json=revocation_body) |
... | ... | |
643 | 644 |
|
644 | 645 |
# set to valid again |
645 | 646 |
valid_body = { |
646 |
"status": "valid"
|
|
647 |
"status": "valid" |
|
647 | 648 |
} |
648 | 649 |
valid_ret = server.patch(f"/api/certificates/{cert_id}", content_type="application/json", json=valid_body) |
649 | 650 |
|
... | ... | |
698 | 699 |
assert "data" in revoke_ret.json |
699 | 700 |
assert "success" in revoke_ret.json |
700 | 701 |
assert not revoke_ret.json["success"] |
702 |
|
|
703 |
|
|
704 |
def test_certificate_deletion(server): |
|
705 |
|
|
706 |
# custom tree for checking node bijection w/ the actual certificate tree |
|
707 |
all_certs = {} |
|
708 |
parent_of = {} |
|
709 |
|
|
710 |
ret = make_root_ca(server) |
|
711 |
assert ret.json["success"] |
|
712 |
root_id = ret.json["data"] |
|
713 |
all_certs[root_id] = [] |
|
714 |
|
|
715 |
def add(add_fn, parent): |
|
716 |
""" |
|
717 |
Add a node to the global tree (represented by `all_certs` and `parent_of`). |
|
718 |
:param add_fn: node type |
|
719 |
:param parent: parent node id |
|
720 |
:return: new node id |
|
721 |
""" |
|
722 |
json = add_fn(server, parent).json |
|
723 |
assert json["success"] |
|
724 |
new_id = json["data"] |
|
725 |
all_certs[parent].append(new_id) |
|
726 |
all_certs[new_id] = [] |
|
727 |
parent_of[new_id] = parent |
|
728 |
return new_id |
|
729 |
|
|
730 |
def remove(id): |
|
731 |
""" |
|
732 |
Remove a node from the global tree (represented by `all_certs` and `parent_of`). |
|
733 |
:param id: |
|
734 |
:return: |
|
735 |
""" |
|
736 |
removed = [] |
|
737 |
|
|
738 |
def dfs(t): |
|
739 |
removed.append(t) |
|
740 |
for child in all_certs[t]: |
|
741 |
dfs(child) |
|
742 |
del all_certs[t] |
|
743 |
|
|
744 |
dfs(id) |
|
745 |
if id != root_id: |
|
746 |
all_certs[parent_of[id]].remove(id) |
|
747 |
return removed |
|
748 |
|
|
749 |
# create a chain of certificates |
|
750 |
for i in range(10): |
|
751 |
add(make_inter_ca, root_id + i) |
|
752 |
|
|
753 |
# create a branch from the middle |
|
754 |
last = add(make_inter_ca, root_id + 5) |
|
755 |
|
|
756 |
for i in range(5): |
|
757 |
add(make_inter_ca, last + i) |
|
758 |
|
|
759 |
# add end certificates for bonus spice |
|
760 |
add(make_end_cert, root_id + 10) |
|
761 |
add(make_end_cert, root_id + 9) |
|
762 |
last_end_id = add(make_end_cert, root_id + 16) |
|
763 |
|
|
764 |
# check that all certificates were created successfully |
|
765 |
assert last_end_id == root_id + 19 |
|
766 |
|
|
767 |
# for four pseudorandom nodes in the created tree (descending order, a is not an ancestor of b if a > b) |
|
768 |
for target in (root_id + 14, root_id + 10, root_id + 3, root_id): |
|
769 |
# try delete |
|
770 |
ret = server.delete(f"/api/certificates/{target}") |
|
771 |
assert ret.status_code == 200 |
|
772 |
json = ret.json |
|
773 |
assert "data" in json |
|
774 |
assert "success" in json |
|
775 |
assert json["success"] |
|
776 |
|
|
777 |
# for everything that should be removed |
|
778 |
currently_removed = remove(target) |
|
779 |
for cert_id in currently_removed: |
|
780 |
# check if it actually is |
|
781 |
ret = server.delete(f"/api/certificates/{cert_id}") |
|
782 |
assert ret.status_code == 404 |
|
783 |
json = ret.json |
|
784 |
assert "data" in json |
|
785 |
assert "success" in json |
|
786 |
assert not json["success"] |
|
787 |
|
|
788 |
# twice, just in case |
|
789 |
ret = server.get(f"/api/certificates/{cert_id}") |
|
790 |
assert ret.status_code == 205 # TODO change to 404 after someone gets the issue assigned and resolves it |
|
791 |
json = ret.json |
|
792 |
assert "data" in json |
|
793 |
assert "success" in json |
|
794 |
assert not json["success"] |
|
795 |
|
|
796 |
# for everything that should not be removed |
|
797 |
for cert_id in all_certs: |
|
798 |
# check that it exists |
|
799 |
ret = server.get(f"/api/certificates/{cert_id}") |
|
800 |
assert ret.status_code == 200 |
|
801 |
json = ret.json |
|
802 |
assert "data" in json |
|
803 |
assert "success" in json |
|
804 |
assert json["success"] |
|
805 |
|
|
806 |
|
|
807 |
def test_certificate_deletion_invalid_params_1(server): |
|
808 |
ret = server.delete("/api/certificates/120938") |
|
809 |
assert ret.status_code == 404 |
|
810 |
assert not ret.json["success"] |
|
811 |
|
|
812 |
|
|
813 |
def test_certificate_deletion_invalid_params_2(server): |
|
814 |
ret = server.delete("/api/certificates/a_big_number") |
|
815 |
assert ret.status_code == 400 |
|
816 |
assert not ret.json["success"] |
Také k dispozici: Unified diff
Re #8572 - Added tests for certificate deletion.