# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-# Usage: PYTHON_PATH=/path/to/appengine_sdk python loghandler_unittest.py.
+# Usage: PYTHONPATH=/path/to/appengine_sdk python main_unittest.py.
import dev_appserver
dev_appserver.fix_sys_path()
+import json
import unittest
import webapp2
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()
+ self.testbed.init_mail_stub()
- def test_update_log(self):
+ def _new_request(self, data, command=None):
request = webapp2.Request.blank('/updatelog')
request.method = 'POST'
- request.POST[main.LOG_PARAM] = 'data to log'
- request.POST[main.NEW_ENTRY_PARAM] = 'on'
- request.POST[main.NO_NEEDS_REBASELINE_PARAM] = 'off'
+ request.POST[main.LOG_PARAM] = data
+ request.POST[main.NEW_ENTRY_PARAM] = 'off'
+ if command is not None:
+ request.POST[main.COMMAND_PARAM] = json.dumps(command)
+ return request
- response = request.get_response(main.app)
+ def _assert_response(self, response, body):
self.assertEqual(response.status_int, 200)
- self.assertEqual(response.body, 'Wrote new log entry.')
+ self.assertEqual(response.body, body)
- response = request.get_response(main.app)
- self.assertEqual(response.status_int, 200)
- self.assertEqual(response.body, 'Wrote new log entry.')
+ def test_update_log(self):
+ request = self._new_request('data to log')
+ request.POST[main.NEW_ENTRY_PARAM] = 'on'
+ self._assert_response(request.get_response(main.app), 'Wrote new log entry.')
- request = webapp2.Request.blank('/updatelog')
- request.method = 'POST'
- request.POST[main.LOG_PARAM] = 'data to log'
- request.POST[main.NEW_ENTRY_PARAM] = 'off'
- request.POST[main.NO_NEEDS_REBASELINE_PARAM] = 'off'
+ self._assert_response(request.get_response(main.app), 'Wrote new log entry.')
- response = request.get_response(main.app)
- self.assertEqual(response.status_int, 200)
- self.assertEqual(response.body, 'Added to existing log entry.')
+ request = self._new_request('data to log')
+ self._assert_response(request.get_response(main.app), 'Added to existing log entry.')
- request = webapp2.Request.blank('/updatelog')
- request.method = 'POST'
- request.POST[main.LOG_PARAM] = 'x' * 1000000
- request.POST[main.NEW_ENTRY_PARAM] = 'off'
- request.POST[main.NO_NEEDS_REBASELINE_PARAM] = 'off'
+ request = self._new_request('x' * 1000000)
+ self._assert_response(request.get_response(main.app), 'Created new log entry because the previous one exceeded the max length.')
- response = request.get_response(main.app)
- self.assertEqual(response.status_int, 200)
- self.assertEqual(response.body, 'Created new log entry because the previous one exceeded the max length.')
+ request = self._new_request('data to log')
+ self._assert_response(request.get_response(main.app), 'Created new log entry because the previous one exceeded the max length.')
- request = webapp2.Request.blank('/updatelog')
- request.method = 'POST'
- request.POST[main.LOG_PARAM] = 'data to log'
- request.POST[main.NEW_ENTRY_PARAM] = 'off'
- request.POST[main.NO_NEEDS_REBASELINE_PARAM] = 'on'
+ request = self._new_request('data to log')
+ self._assert_response(request.get_response(main.app), 'Added to existing log entry.')
- response = request.get_response(main.app)
- self.assertEqual(response.status_int, 200)
- self.assertEqual(response.body, 'Wrote new no needs rebaseline log.')
+ def test_command_execution(self):
+ request = self._new_request('data to log', {})
+ self._assert_response(request.get_response(main.app), 'Wrote new log entry.\nERROR: No command data')
- response = request.get_response(main.app)
- self.assertEqual(response.status_int, 200)
- self.assertEqual(response.body, 'Overwrote existing no needs rebaseline log.')
+ request = self._new_request('data to log', {"foo": "bar"})
+ self._assert_response(request.get_response(main.app), 'Added to existing log entry.\nCommand is missing a name: {"foo": "bar"}')
- request = webapp2.Request.blank('/updatelog')
- request.method = 'POST'
- request.POST[main.LOG_PARAM] = 'data to log'
- request.POST[main.NEW_ENTRY_PARAM] = 'off'
- request.POST[main.NO_NEEDS_REBASELINE_PARAM] = 'off'
+ request = self._new_request('data to log', {
+ 'name': 'sendmail',
+ 'to': 'foo@example.com',
+ 'body': 'Body'
+ })
+ self._assert_response(request.get_response(main.app), 'Added to existing log entry.\nMalformed command JSON')
- response = request.get_response(main.app)
- self.assertEqual(response.status_int, 200)
- self.assertEqual(response.body, 'Previous entry was a no need rebaseline log. Writing a new log.')
+ request = self._new_request('data to log', {
+ 'name': 'sendmail',
+ 'to': 'foo@example.com',
+ 'subject': 'Subject',
+ 'body': 'Body'
+ })
+ self._assert_response(request.get_response(main.app), 'Added to existing log entry.\nSent mail to foo@example.com (Subject)')
def test_update_log_first_entry_without_new_entry_param(self):
request = webapp2.Request.blank('/updatelog')
request.method = 'POST'
request.POST[main.LOG_PARAM] = 'data to log'
request.POST[main.NEW_ENTRY_PARAM] = 'off'
- request.POST[main.NO_NEEDS_REBASELINE_PARAM] = 'off'
response = request.get_response(main.app)
self.assertEqual(response.status_int, 200)
request.method = 'POST'
request.POST[main.LOG_PARAM] = 'data to log'
request.POST[main.NEW_ENTRY_PARAM] = 'off'
- request.POST[main.NO_NEEDS_REBASELINE_PARAM] = 'on'
response = request.get_response(main.app)
self.assertEqual(response.status_int, 200)