diff test/test_cgi.py @ 4781:6e9b9743de89

Implementation for: http://issues.roundup-tracker.org/issue2550731 Add mechanism for the detectors to be able to tell the source of the data changes. Support for tx_Source property on database handle. Can be used by detectors to find out the source of a change in an auditor to block changes arriving by unauthenticated mechanisms (e.g. plain email where headers can be faked). The property db.tx_Source has the following values: * None - Default value set to None. May be valid if it's a script that is created by the user. Otherwise it's an error and indicates that some code path is not properly setting the tx_Source property. * "cli" - this string value is set when using roundup-admin and supplied scripts. * "web" - this string value is set when using any web based technique: html interface, xmlrpc .... * "email" - this string value is set when using an unauthenticated email based technique. * "email-sig-openpgp" - this string value is set when email with a valid pgp signature is used. (*NOTE* the testing for this mode is incomplete. If you have a pgp infrastructure you should test and verify that this is properly set.) This also includes some (possibly incomplete) tests cases for the modes above and an example of using ts_Source in the customization.txt document.
author John Rouillard <rouilj@ieee.org>
date Tue, 23 Apr 2013 23:06:09 -0400
parents 61e922a93112
children dad18ee491a9
line wrap: on
line diff
--- a/test/test_cgi.py	Fri Mar 22 15:53:27 2013 +0100
+++ b/test/test_cgi.py	Tue Apr 23 23:06:09 2013 -0400
@@ -75,11 +75,24 @@
 
         # open the database
         self.db = self.instance.open('admin')
+        self.db.tx_Source = "web"
         self.db.user.create(username='Chef', address='chef@bork.bork.bork',
             realname='Bork, Chef', roles='User')
         self.db.user.create(username='mary', address='mary@test.test',
             roles='User', realname='Contrary, Mary')
 
+        self.db.issue.addprop(tx_Source=hyperdb.String())
+        self.db.msg.addprop(tx_Source=hyperdb.String())
+
+        self.db.post_init()
+
+        vars = dict(globals())
+        vars['db'] = self.db
+        vars = {}
+        execfile("test/tx_Source_detector.py", vars)
+        vars['init'](self.db)
+
+
         test = self.instance.backend.Class(self.db, "test",
             string=hyperdb.String(), number=hyperdb.Number(),
             boolean=hyperdb.Boolean(), link=hyperdb.Link('test'),
@@ -207,6 +220,7 @@
         self.assertEqual(self.db.issue.get(issue,'status'),'1')
         self.assertEqual(self.db.status.lookup('1'),'2')
         self.assertEqual(self.db.status.lookup('2'),'1')
+        self.assertEqual(self.db.issue.get('1','tx_Source'),'web')
         form = cgi.FieldStorage()
         cl = client.Client(self.instance, None, {'PATH_INFO':'/'}, form)
         cl.classname = 'issue'
@@ -226,6 +240,7 @@
         self.assertEqual(self.db.issue.get(issue,'keyword'),['1'])
         self.assertEqual(self.db.keyword.lookup('1'),'2')
         self.assertEqual(self.db.keyword.lookup('2'),'1')
+        self.assertEqual(self.db.issue.get(issue,'tx_Source'),'web')
         form = cgi.FieldStorage()
         cl = client.Client(self.instance, None, {'PATH_INFO':'/'}, form)
         cl.classname = 'issue'
@@ -271,11 +286,13 @@
         nodeid = self.db.issue.create(status='unread')
         self.assertEqual(self.parseForm({'status': 'unread'}, 'issue', nodeid),
             ({('issue', nodeid): {}}, []))
+        self.assertEqual(self.db.issue.get(nodeid,'tx_Source'),'web')
 
     def testUnsetLink(self):
         nodeid = self.db.issue.create(status='unread')
         self.assertEqual(self.parseForm({'status': '-1'}, 'issue', nodeid),
             ({('issue', nodeid): {'status': None}}, []))
+        self.assertEqual(self.db.issue.get(nodeid,'tx_Source'),'web')
 
     def testInvalidLinkValue(self):
 # XXX This is not the current behaviour - should we enforce this?

Roundup Issue Tracker: http://roundup-tracker.org/