Erik Grinaker is sharing code with you

Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.

Don't show this again

erikg / Revelation

Revelation is a password manager for the GNOME desktop, released under the GNU GPL license. It stores all your accounts and passwords in a single, secure place, and gives you access to it through a user-friendly graphical interface.

Clone this repository (size: 2.1 MB): HTTPS / SSH
hg clone https://bitbucket.org/erikg/revelation
hg clone ssh://hg@bitbucket.org/erikg/revelation

Revelation / test / datahandler_netrc.py

commit
cff0e6f7ef34
parent
e0a14b958359
branch
default
tags
revelation-0.4.0-pre2

bumped version number to 0.4.0-pre2

1
8f4600f01a3d
#!/usr/bin/env python
2
8f4600f01a3d
3
8f4600f01a3d
#
4
8f4600f01a3d
# Revelation 0.4.0 - a password manager for GNOME 2
5
8f4600f01a3d
# http://oss.codepoet.no/revelation/
6
8f4600f01a3d
# $Id$
7
8f4600f01a3d
#
8
8f4600f01a3d
# Unit tests for NetRC datahandler module
9
8f4600f01a3d
#
10
8f4600f01a3d
#
11
8f4600f01a3d
# Copyright (c) 2003-2005 Erik Grinaker
12
8f4600f01a3d
#
13
8f4600f01a3d
# This program is free software; you can redistribute it and/or
14
8f4600f01a3d
# modify it under the terms of the GNU General Public License
15
8f4600f01a3d
# as published by the Free Software Foundation; either version 2
16
8f4600f01a3d
# of the License, or (at your option) any later version.
17
8f4600f01a3d
#
18
8f4600f01a3d
# This program is distributed in the hope that it will be useful,
19
8f4600f01a3d
# but WITHOUT ANY WARRANTY; without even the implied warranty of
20
8f4600f01a3d
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
8f4600f01a3d
# GNU General Public License for more details.
22
8f4600f01a3d
#
23
8f4600f01a3d
# You should have received a copy of the GNU General Public License
24
8f4600f01a3d
# along with this program; if not, write to the Free Software
25
8f4600f01a3d
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
26
8f4600f01a3d
#
27
8f4600f01a3d
28
8f4600f01a3d
import unittest
29
8f4600f01a3d
30
8f4600f01a3d
from revelation import data, datahandler, entry
31
8f4600f01a3d
32
8f4600f01a3d
33
8f4600f01a3d
class NetRC(unittest.TestCase):
34
8f4600f01a3d
	"NetRC"
35
8f4600f01a3d
36
8f4600f01a3d
	def test_attrs(self):
37
8f4600f01a3d
		"NetRC has sane attrs"
38
8f4600f01a3d
39
8f4600f01a3d
		self.assertEquals(datahandler.NetRC.name, "netrc")
40
8f4600f01a3d
		self.assertEquals(datahandler.NetRC.importer, True)
41
8f4600f01a3d
		self.assertEquals(datahandler.NetRC.exporter, True)
42
8f4600f01a3d
		self.assertEquals(datahandler.NetRC.encryption, False)
43
8f4600f01a3d
44
8f4600f01a3d
45
8f4600f01a3d
46
8f4600f01a3d
class NetRC_export_data(unittest.TestCase):
47
8f4600f01a3d
	"NetRC.export_data()"
48
8f4600f01a3d
49
8f4600f01a3d
	def setUp(self):
50
8f4600f01a3d
		"Sets up common facilities for testing"
51
8f4600f01a3d
52
8f4600f01a3d
		self.entrystore = data.EntryStore()
53
8f4600f01a3d
54
8f4600f01a3d
		e = entry.GenericEntry()
55
8f4600f01a3d
		e.name = "name"
56
8f4600f01a3d
		e.description = "description"
57
8f4600f01a3d
		e.updated = 12345678
58
8f4600f01a3d
		e[entry.HostnameField] = "hostname"
59
8f4600f01a3d
		e[entry.UsernameField] = "username"
60
8f4600f01a3d
		e[entry.PasswordField] = "password"
61
8f4600f01a3d
		self.entrystore.add_entry(e)
62
8f4600f01a3d
63
8f4600f01a3d
		e = entry.WebEntry()
64
8f4600f01a3d
		e.name = "website"
65
8f4600f01a3d
		e[entry.URLField] = "url"
66
8f4600f01a3d
		e[entry.UsernameField] = "username"
67
8f4600f01a3d
		e[entry.PasswordField] = "password"
68
8f4600f01a3d
		self.entrystore.add_entry(e)
69
8f4600f01a3d
70
8f4600f01a3d
		fiter = self.entrystore.add_entry(entry.FolderEntry())
71
8f4600f01a3d
72
8f4600f01a3d
		e = entry.GenericEntry()
73
8f4600f01a3d
		e.name = "name2"
74
8f4600f01a3d
		e.description = "description2"
75
8f4600f01a3d
		e.updated = 87654321
76
8f4600f01a3d
		e[entry.HostnameField] = "hostname2"
77
8f4600f01a3d
		e[entry.UsernameField] = "username2"
78
8f4600f01a3d
		e[entry.PasswordField] = "password2"
79
8f4600f01a3d
		self.entrystore.add_entry(e, fiter)
80
8f4600f01a3d
81
8f4600f01a3d
		e = entry.GenericEntry()
82
8f4600f01a3d
		e.name = "test"
83
8f4600f01a3d
		e[entry.UsernameField] = "username"
84
8f4600f01a3d
		e[entry.PasswordField] = "password"
85
8f4600f01a3d
		self.entrystore.add_entry(e)
86
8f4600f01a3d
87
8f4600f01a3d
88
8f4600f01a3d
		self.testdata = """\
89
8f4600f01a3d
# name
90
8f4600f01a3d
# description
91
8f4600f01a3d
machine hostname
92
8f4600f01a3d
	login username
93
8f4600f01a3d
	password password
94
8f4600f01a3d
95
8f4600f01a3d
# name2
96
8f4600f01a3d
# description2
97
8f4600f01a3d
machine hostname2
98
8f4600f01a3d
	login username2
99
8f4600f01a3d
	password password2
100
8f4600f01a3d
101
8f4600f01a3d
"""
102
8f4600f01a3d
103
8f4600f01a3d
104
8f4600f01a3d
	def test_data(self):
105
8f4600f01a3d
		"NetRC.export_data() generates correct data"
106
8f4600f01a3d
107
8f4600f01a3d
		self.assertEquals(datahandler.NetRC().export_data(self.entrystore), self.testdata)
108
8f4600f01a3d
109
8f4600f01a3d
110
8f4600f01a3d
111
8f4600f01a3d
class NetRC_import_data(unittest.TestCase):
112
8f4600f01a3d
	"NetRC.import_data()"
113
8f4600f01a3d
114
8f4600f01a3d
	def test_data(self):
115
c094b5acab4e
		"NetRC.import_data() imports data correctly"
116
8f4600f01a3d
117
8f4600f01a3d
		netrc = """
118
8f4600f01a3d
# name
119
8f4600f01a3d
# description
120
8f4600f01a3d
machine hostname
121
8f4600f01a3d
	login username
122
8f4600f01a3d
	password password
123
8f4600f01a3d
124
8f4600f01a3d
# name2
125
8f4600f01a3d
# description2
126
8f4600f01a3d
machine hostname2
127
8f4600f01a3d
	login username2
128
8f4600f01a3d
	password password2
129
8f4600f01a3d
"""
130
8f4600f01a3d
131
8f4600f01a3d
		entrystore = datahandler.NetRC().import_data(netrc)
132
8f4600f01a3d
133
8f4600f01a3d
		self.assertEquals(entrystore.iter_n_children(None), 2)
134
8f4600f01a3d
135
8f4600f01a3d
		e = entrystore.get_entry(entrystore.iter_nth_child(None, 0))
136
8f4600f01a3d
		self.assertEquals(type(e), entry.GenericEntry)
137
8f4600f01a3d
		self.assertEquals(e.name, "hostname")
138
8f4600f01a3d
		self.assertNotEqual(e.updated, 0)
139
8f4600f01a3d
		self.assertEquals(e[entry.HostnameField], "hostname")
140
8f4600f01a3d
		self.assertEquals(e[entry.UsernameField], "username")
141
8f4600f01a3d
		self.assertEquals(e[entry.PasswordField], "password")
142
8f4600f01a3d
143
8f4600f01a3d
		e = entrystore.get_entry(entrystore.iter_nth_child(None, 1))
144
8f4600f01a3d
		self.assertEquals(type(e), entry.GenericEntry)
145
8f4600f01a3d
		self.assertEquals(e.name, "hostname2")
146
8f4600f01a3d
		self.assertNotEqual(e.updated, 0)
147
8f4600f01a3d
		self.assertEquals(e[entry.HostnameField], "hostname2")
148
8f4600f01a3d
		self.assertEquals(e[entry.UsernameField], "username2")
149
8f4600f01a3d
		self.assertEquals(e[entry.PasswordField], "password2")
150
8f4600f01a3d
151
8f4600f01a3d
152
8f4600f01a3d
	def test_format(self):
153
8f4600f01a3d
		"NetRC.import_data() raises FormatError on invalid format"
154
8f4600f01a3d
155
8f4600f01a3d
		netrc = """
156
8f4600f01a3d
# name
157
8f4600f01a3d
# description
158
8f4600f01a3d
machine hostname
159
8f4600f01a3d
	login username
160
8f4600f01a3d
	password password
161
8f4600f01a3d
162
8f4600f01a3d
oops
163
8f4600f01a3d
"""
164
8f4600f01a3d
165
8f4600f01a3d
		self.assertRaises(datahandler.FormatError, datahandler.NetRC().import_data, netrc)
166
8f4600f01a3d
167
8f4600f01a3d
168
8f4600f01a3d
169
8f4600f01a3d
if __name__ == "__main__":
170
8f4600f01a3d
	unittest.main()
171
8f4600f01a3d