chiark / gitweb /
t/: Add a test suite.
[catacomb-python] / t / t-passphrase.py
CommitLineData
553d59fe
MW
1### -*-python-*-
2###
3### Testing (some) passsword management functionality
4###
5### (c) 2019 Straylight/Edgeware
6###
7
8###----- Licensing notice ---------------------------------------------------
9###
10### This file is part of the Python interface to Catacomb.
11###
12### Catacomb/Python is free software: you can redistribute it and/or
13### modify it under the terms of the GNU General Public License as
14### published by the Free Software Foundation; either version 2 of the
15### License, or (at your option) any later version.
16###
17### Catacomb/Python is distributed in the hope that it will be useful, but
18### WITHOUT ANY WARRANTY; without even the implied warranty of
19### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20### General Public License for more details.
21###
22### You should have received a copy of the GNU General Public License
23### along with Catacomb/Python. If not, write to the Free Software
24### Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
25### USA.
26
27from __future__ import with_statement
28
29###--------------------------------------------------------------------------
30### Imported modules.
31
32import catacomb as C
33import errno as E
34import unittest as U
35import os as OS
36import subprocess as SUB
37import sys as SYS
38import testutils as T
39import time as TM
40
41###--------------------------------------------------------------------------
42### Running the pixie.
43
44class PixieTestCase (U.TestCase):
45 def setUp(me):
46 pix = "pixie-py%d.%d%s" % (SYS.version_info[0],
47 SYS.version_info[1],
48 T.DEBUGP and "dbg" or "")
49 me.token = hex(C.rand.block(8))
50 try: OS.mkdir(OS.path.join("build", pix), int("700", 8))
51 except OSError:
52 if SYS.exc_info()[1].errno == E.EEXIST: pass
53 else: raise
54 me.sock = OS.path.join("build", pix, "sock")
55 OS.environ["CATACOMB_PIXIE_SOCKET"] = me.sock
56 with open(OS.path.join("build", pix, "log"), "a") as logf:
57 SUB.check_call(["pixie", "-dr", "-s" + me.sock,
58 "-c", "echo 'pp.%%t.%s'" % me.token], stderr = logf)
59 def tearDown(me):
60 SUB.check_call(["pixie", "-s" + me.sock, "-C", "quit"])
61
62###--------------------------------------------------------------------------
63class TestPixie (PixieTestCase):
64
65 def test(me):
66 px = C.Pixie(socket = me.sock)
67
68 pp = T.bin("super secret")
69 pp1 = T.bin("pp.test1.%s" % me.token)
70 pp2 = T.bin("pp.test2.%s" % me.token)
71 px.set("test1", pp)
72 me.assertEqual(px.read("test1"), pp)
73 me.assertEqual(px.read("test1", C.PMODE_READ), pp)
74 me.assertEqual(px.read("test1", C.PMODE_VERIFY), pp1)
75 me.assertEqual(px.read("test1", C.PMODE_READ), pp1)
76 px.set("test1", pp)
77 me.assertEqual(px.read("test1", C.PMODE_READ), pp)
78 me.assertEqual(px.read("test2"), pp2)
79 px.cancel("test1")
80 me.assertEqual(px.read("test1"), pp1)
81
82 px.set("test1", pp)
83 me.assertEqual(C.ppread("test1"), pp)
84 C.ppcancel("test1")
85 me.assertEqual(px.read("test1"), pp1)
86 C.ppcancel("test1")
87
88###----- That's all, folks --------------------------------------------------
89
90if __name__ == "__main__": U.main()