1from os.path import join
2from tempfile import TemporaryDirectory
3
4from sequoia.core import Context, NetworkPolicy, Reader, Writer
5from sequoia.openpgp import ArmorReader, Fingerprint, Cert, PacketPile
6
7pgp = "../../../openpgp/tests/data/keys/testy.pgp"
8asc = "../../../openpgp/tests/data/keys/testy.asc"
9fp = Fingerprint.from_hex("3E8877C877274692975189F5D03F6F865226FE8B")
10
11def test_from_reader():
12    ctx = Context(network_policy=NetworkPolicy.Offline,
13                  ephemeral=True)
14    r = Reader.open(ctx, pgp)
15    t = Cert.from_reader(ctx, r)
16    assert t.fingerprint() == fp
17
18def test_from_armor_reader():
19    ctx = Context(network_policy=NetworkPolicy.Offline,
20                  ephemeral=True)
21    k = open(asc, "rb").read()
22    r = Reader.from_bytes(ctx, k)
23    r = ArmorReader.new(ctx, r)
24    t = Cert.from_reader(ctx, r)
25    assert t.fingerprint() == fp
26
27def test_from_file():
28    ctx = Context(network_policy=NetworkPolicy.Offline,
29                  ephemeral=True)
30    t = Cert.open(ctx, pgp)
31    assert t.fingerprint() == fp
32
33def test_from_packet_pile():
34    ctx = Context(network_policy=NetworkPolicy.Offline,
35                  ephemeral=True)
36    r = PacketPile.open(ctx, pgp)
37    t = Cert.from_packet_pile(ctx, r)
38    assert t.fingerprint() == fp
39
40def test_from_bytes():
41    ctx = Context(network_policy=NetworkPolicy.Offline,
42                  ephemeral=True)
43    t = Cert.from_bytes(ctx, open(pgp, "rb").read())
44    assert t.fingerprint() == fp
45
46def test_from_serialize():
47    ctx = Context(network_policy=NetworkPolicy.Offline,
48                  ephemeral=True)
49    with TemporaryDirectory() as tmp:
50        sink = join(tmp, "a")
51
52        t = Cert.open(ctx, pgp)
53        with Writer.open(ctx, sink) as s:
54            t.serialize(s)
55
56        t = Cert.open(ctx, sink)
57        assert t.fingerprint() == fp
58
59def test_equals():
60    ctx = Context(network_policy=NetworkPolicy.Offline,
61                  ephemeral=True)
62    b = open(pgp, "rb").read()
63    t = Cert.from_bytes(ctx, b)
64    u = Cert.from_bytes(ctx, b)
65    assert t == u
66
67def test_clone():
68    ctx = Context(network_policy=NetworkPolicy.Offline,
69                  ephemeral=True)
70    a = Cert.open(ctx, pgp)
71    b = a.copy()
72    del a
73    c = b.copy()
74    del b
75    assert c.fingerprint() == fp
76