From 1a4e7c927e6772ec8fb6a4142d91c1a7fef99136 Mon Sep 17 00:00:00 2001 From: epage Date: Fri, 29 May 2009 22:44:15 +0000 Subject: [PATCH] Adding gc_backend tests git-svn-id: file:///svnroot/gc-dialer/trunk@346 c39d3808-3fe2-4d86-a59f-b7f623ee9f21 --- src/gc_backend.py | 2 +- tests/gc_samples/generate_gc_samples.py | 82 +++++++++++++++++++++++++++++++ tests/test_gc_backend.py | 53 ++++++++++++++++++++ 3 files changed, 136 insertions(+), 1 deletion(-) create mode 100755 tests/gc_samples/generate_gc_samples.py create mode 100644 tests/test_gc_backend.py diff --git a/src/gc_backend.py b/src/gc_backend.py index b4f5469..ec02e90 100644 --- a/src/gc_backend.py +++ b/src/gc_backend.py @@ -240,7 +240,7 @@ class GCDialer(object): for c in self._browser.cookies: if c.name == "pda_forwarding_number": return c.value - return None + return "" def get_recent(self): """ diff --git a/tests/gc_samples/generate_gc_samples.py b/tests/gc_samples/generate_gc_samples.py new file mode 100755 index 0000000..463932a --- /dev/null +++ b/tests/gc_samples/generate_gc_samples.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import sys +import urllib +import urllib2 +import traceback +import warnings + +import sys +sys.path.append("../../src") + +import browser_emu +import gc_backend + + _forwardselectURL = "http://www.grandcentral.com/mobile/settings/forwarding_select" + _loginURL = "https://www.grandcentral.com/mobile/account/login" + _setforwardURL = "http://www.grandcentral.com/mobile/settings/set_forwarding?from=settings" + _clicktocallURL = "http://www.grandcentral.com/mobile/calls/click_to_call?a_t=%s&destno=%s" + _inboxallURL = "http://www.grandcentral.com/mobile/messages/inbox?types=all" + _contactsURL = "http://www.grandcentral.com/mobile/contacts" + _contactDetailURL = "http://www.grandcentral.com/mobile/contacts/detail" +webpages = [ + ("forward", gc_backend.GCDialer._forwardselectURL), + ("login", gc_backend.GCDialer._loginURL), + ("setforward", gc_backend.GCDialer._setforwardURL), + ("clicktocall", gc_backend.GCDialer._clicktocallURL), + ("recent", gc_backend.GCDialer._inboxallURL), + ("contacts", gc_backend.GCDialer._contactsURL), + ("contactdetails", gc_backend.GCDialer._contactDetailURL), +] + + +browser = browser_emu.MozillaEmulator(1) +for name, url in webpages: + try: + page = browser.download(url) + except StandardError, e: + print e.message + continue + with open("not_loggedin_%s.txt" % name, "w") as f: + f.write(page) + +username = sys.argv[1] +password = sys.argv[2] + +loginPostData = urllib.urlencode({ + 'Email' : username, + 'Passwd' : password, + 'service': "grandcentral", + "ltmpl": "mobile", + "btmpl": "mobile", + "PersistentCookie": "yes", +}) + +try: + loginSuccessOrFailurePage = browser.download(gc_backend.GCDialer._loginURL, loginPostData) +except urllib2.URLError, e: + warnings.warn(traceback.format_exc()) + raise RuntimeError("%s is not accesible" % gc_backend.GCDialer._loginURL) + +forwardPage = browser.download(gc_backend.GCDialer._forwardURL) + +tokenGroup = gc_backend.GCDialer._tokenRe.search(forwardPage) +if tokenGroup is None: + print forwardPage + raise RuntimeError("Could not extract authentication token from GoogleVoice") +token = tokenGroup.group(1) + +browser = browser_emu.MozillaEmulator(1) +for name, url in webpages: + try: + #data = urllib.urlencode({ + # "_rnr_se": token, + #}) + #page = browser.download(url, data) + page = browser.download(url) + except StandardError, e: + warnings.warn(traceback.format_exc()) + continue + print "Writing to file" + with open("loggedin_%s.txt" % name, "w") as f: + f.write(page) diff --git a/tests/test_gc_backend.py b/tests/test_gc_backend.py new file mode 100644 index 0000000..e60e777 --- /dev/null +++ b/tests/test_gc_backend.py @@ -0,0 +1,53 @@ +from __future__ import with_statement + +import os +import warnings +import cookielib + +import test_utils + +import sys +sys.path.append("../src") + +import gc_backend + + +def generate_mock(cookiesSucceed, username, password): + + class MockModule(object): + + class MozillaEmulator(object): + + def __init__(self, trycount = 1): + self.cookies = cookielib.LWPCookieJar() + self.trycount = trycount + + def download(self, url, + postdata = None, extraheaders = None, forbid_redirect = False, + trycount = None, only_head = False, + ): + return "" + + return MockModule + + +def test_not_logged_in(): + correctUsername, correctPassword = "", "" + MockBrowserModule = generate_mock(False, correctUsername, correctPassword) + gc_backend.browser_emu, RealBrowser = MockBrowserModule, gc_backend.browser_emu + try: + backend = gc_backend.GCDialer() + assert not backend.is_authed() + assert not backend.login("bad_name", "bad_password") + backend.logout() + with test_utils.expected(RuntimeError): + backend.dial("5551234567") + with test_utils.expected(RuntimeError): + backend.send_sms("5551234567", "Hello World") + assert backend.get_account_number() == "", "%s" % backend.get_account_number() + backend.set_sane_callback() + assert backend.get_callback_number() == "" + recent = list(backend.get_recent()) + messages = list(backend.get_messages()) + finally: + gc_backend.browser_emu = RealBrowser -- 1.7.9.5