Beispiel #1
0
class TestPythonSDK(unittest.TestCase):

    api_key = -1
    api_secret = ""
    api_url = OpenTokSDK.STAGING_URL
    o = None

    def setUp(self):
        self.o = OpenTokSDK(self.api_key, self.api_secret)

    def test_create_session(self):
        s = self.o.create_session()
        self.assertIsNotNone(s.session_id, "Python SDK tests: create session (no params): did not return a session id")
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            s.session_id,
            xml.getElementsByTagName("session_id")[0].childNodes[0].data,
            "Python SDK tests: Session id not found",
        )

        s = self.o.create_session("216.38.134.114")
        self.assertIsNotNone(s.session_id, "Python SDK tests: create session (no params): did not return a session id")
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            s.session_id,
            xml.getElementsByTagName("session_id")[0].childNodes[0].data,
            "Python SDK tests: Session id not found",
        )

    def test_num_output_streams(self):
        s = self.o.create_session("127.0.0.1", properties={"multiplexer.numOutputStreams": 0})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "0",
            xml.getElementsByTagName("numOutputStreams")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.numOutputStreams not set to 0",
        )

        s = self.o.create_session("127.0.0.1", properties={"multiplexer.numOutputStreams": 1})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "1",
            xml.getElementsByTagName("numOutputStreams")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.numOutputStreams not set to 1",
        )

        s = self.o.create_session("127.0.0.1", properties={"multiplexer.numOutputStreams": 5})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "5",
            xml.getElementsByTagName("numOutputStreams")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.numOutputStreams not set to 5",
        )

        s = self.o.create_session("127.0.0.1", properties={"multiplexer.numOutputStreams": 100})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "100",
            xml.getElementsByTagName("numOutputStreams")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.numOutputStreams not set to 100",
        )

        s = self.o.create_session("127.0.0.1")
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            [],
            xml.getElementsByTagName("numOutputStreams"),
            "Python SDK tests: multiplexer.numOutputStreams should not be set",
        )

    def test_switch_type(self):
        s = self.o.create_session(properties={"multiplexer.switchType": 0})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "0",
            xml.getElementsByTagName("switchType")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.switchType not 0",
        )

        s = self.o.create_session(properties={"multiplexer.switchType": 1})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "1",
            xml.getElementsByTagName("switchType")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.switchType not 1",
        )

        s = self.o.create_session()
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            [], xml.getElementsByTagName("switchType"), "Python SDK tests: multiplexer.switchType should not be set"
        )

    def test_switch_timeout(self):
        s = self.o.create_session(properties={"multiplexer.switchTimeout": 1200})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "1200",
            xml.getElementsByTagName("switchTimeout")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.switchTimeout not properly set (should be 1200)",
        )

        s = self.o.create_session(properties={"multiplexer.switchTimeout": 2000})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "2000",
            xml.getElementsByTagName("switchTimeout")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.switchTimeout not properly set (should be 2000)",
        )

        s = self.o.create_session(properties={"multiplexer.switchTimeout": 100000})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "100000",
            xml.getElementsByTagName("switchTimeout")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.switchType not properly set (should be 100000)",
        )

    def test_p2p_preference(self):
        s = self.o.create_session(properties={"p2p.preference": "enabled"})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "enabled",
            xml.getElementsByTagName("preference")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.p2p_preference not enabled",
        )

        s = self.o.create_session(properties={"p2p.preference": "disabled"})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "disabled",
            xml.getElementsByTagName("preference")[0].childNodes[0].data,
            "Python SDK tests: multiplexer.p2p_preference not disabled",
        )

    def test_echo_suppression(self):
        s = self.o.create_session(properties={"echoSuppression.enabled": "true"})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "True",
            xml.getElementsByTagName("enabled")[0].childNodes[0].data,
            "Python SDK tests: echo suppression not showing enabled",
        )

        s = self.o.create_session(properties={"echoSuppression.enabled": "false"})
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            "False",
            xml.getElementsByTagName("enabled")[0].childNodes[0].data,
            "Python SDK tests: echo suppression not showing disabled",
        )

    def test_roles(self):
        s = self.o.create_session()

        # default: publisher
        t = self.o.generate_token(s.session_id)
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName("role")[0].childNodes[0].data
        role = role.strip()
        self.assertEqual("publisher", role, "Python SDK tests: default role not publisher")
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("subscribe"),
            "Python SDK tests: token default permissions should include subscribe",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("publish"),
            "Python SDK tests: token default permissions should include publish",
        )
        self.assertNotEqual(
            [], xml.getElementsByTagName("signal"), "Python SDK tests: token default permissions should include signal"
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("forceunpublish"),
            "Python SDK tests: token default permissions should include forceunpublish",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("forcedisconnect"),
            "Python SDK tests: token default permissions should include forcedisconnect",
        )
        self.assertEqual(
            [], xml.getElementsByTagName("record"), "Python SDK tests: token default permissions should include record"
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("playback"),
            "Python SDK tests: token default permissions should include playback",
        )

        # publisher
        t = self.o.generate_token(s.session_id, "publisher")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName("role")[0].childNodes[0].data
        role = role.strip()
        self.assertEqual("publisher", role, "Python SDK tests: role not publisher")
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("subscribe"),
            "Python SDK tests: token publisher permissions should include subscribe",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("publish"),
            "Python SDK tests: token publisher permissions should include publish",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("signal"),
            "Python SDK tests: token publisher permissions should include signal",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("forceunpublish"),
            "Python SDK tests: token publisher permissions should not include forceunpublish",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("forcedisconnect"),
            "Python SDK tests: token publisher permissions should not include forcedisconnect",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("record"),
            "Python SDK tests: token publisher permissions should not include record",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("playback"),
            "Python SDK tests: token publisher permissions should not include playback",
        )

        # moderator
        t = self.o.generate_token(s.session_id, "moderator")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName("role")[0].childNodes[0].data
        role = role.strip()
        self.assertEqual("moderator", role, "Python SDK tests: role not moderator")
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("subscribe"),
            "Python SDK tests: token moderator permissions should include subscribe",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("publish"),
            "Python SDK tests: token moderator permissions should include publish",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("signal"),
            "Python SDK tests: token moderator permissions should include signal",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("forceunpublish"),
            "Python SDK tests: token moderator permissions should include forceunpublish",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("forcedisconnect"),
            "Python SDK tests: token moderator permissions should include forcedisconnect",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("record"),
            "Python SDK tests: token moderator permissions should include record",
        )
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("playback"),
            "Python SDK tests: token moderator permissions should include playback",
        )

        # subscriber
        t = self.o.generate_token(s.session_id, "subscriber")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName("role")[0].childNodes[0].data
        role = role.strip()
        self.assertEqual("subscriber", role, "Python SDK tests: role not subscriber")
        self.assertNotEqual(
            [],
            xml.getElementsByTagName("subscribe"),
            "Python SDK tests: token subscriber permissions should include subscribe",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("publish"),
            "Python SDK tests: token subscriber permissions should not include publish",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("signal"),
            "Python SDK tests: token subscriber permissions should not include signal",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("forceunpublish"),
            "Python SDK tests: token subscriber permissions should not include forceunpublish",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("forcedisconnect"),
            "Python SDK tests: token subscriber permissions should not include forcedisconnect",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("record"),
            "Python SDK tests: token subscriber permissions should not include record",
        )
        self.assertEqual(
            [],
            xml.getElementsByTagName("playback"),
            "Python SDK tests: token subscriber permissions should not include playback",
        )

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, "ads")
            raise AssertionError("Python SDK tests: invalid role should be rejected")

        except OpenTokException:
            pass  # expected

    def test_old_session(self):
        s_id = "1abc70a34d069d2e6a1e565f3958b5250b435e32"
        t = self.o.generate_token(s_id)
        xml = self.get_token_info(t)
        self.assertEqual(
            s_id,
            xml.getElementsByTagName("session_id")[0].childNodes[0].data,
            "Python SDK test: creating token with old session id failed",
        )

    def test_expire_time(self):
        s = self.o.create_session()

        # past
        tm = time.time() - 1000
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError("Python SDK tests: expire time in past should be rejected")
        except OpenTokException:
            pass

        # near future
        tm = time.time() + 6 * 24 * 60 * 60
        t = self.o.generate_token(s.session_id, expire_time=tm)
        xml = self.get_token_info(t)
        self.assertEqual(
            str(int(tm)),
            xml.getElementsByTagName("expire_time")[0].childNodes[0].data,
            "Python SDK tests: expire time not set",
        )

        # far future
        tm = time.time() + 8 * 24 * 60 * 60
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError("Python SDK tests: expire time more than 7 days away should be rejected")
        except OpenTokException:
            pass

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, expire_time="asdf")
            raise AssertionError("Python SDK tests: non numberic expire time should be rejected")
        except OpenTokException:
            pass

    def test_connection_data(self):
        s = self.o.create_session()

        test_string = "test data"
        t = self.o.generate_token(s.session_id, connection_data=test_string)
        xml = self.get_token_info(t)
        self.assertEqual(
            test_string,
            xml.getElementsByTagName("connection_data")[0].childNodes[0].data,
            "Python SDK tests: connection data not correct",
        )

        # Should reject over 1000 characters of connection data
        test_string = (
            "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            + "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
            + "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
            + "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
            + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
            + "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
            + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
            + "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg"
            + "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh"
            + "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"
            + "jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj"
            + "kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"
            + "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll"
            + "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
            + "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
            + "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"
        )
        try:
            t = self.o.generate_token(s.session_id, connection_data=test_string)
            raise AssertionError("Python SDK tests: long connection data should be rejected")
        except OpenTokException:
            pass  # expected

    def get_session_info(self, session_id, token="devtoken"):
        try:
            url = self.api_url + "/session/" + session_id + "?extended=true"
            req = urllib2.Request(url, "", {"X-TB-TOKEN-AUTH": token})
            response = urllib2.urlopen(req)
            dom = parseString(response.read())
            response.close()

            return dom
        except urllib2.HTTPError, e:
            print "HTTP Error: failed to send request"
Beispiel #2
0
 def setUp(self):
     self.o = OpenTokSDK(self.api_key, self.api_secret)
Beispiel #3
0
class TestPythonSDK(unittest.TestCase):

    api_key = -1
    api_secret = ""
    api_url = OpenTokSDK.STAGING_URL
    o = None

    def setUp(self):
        self.o = OpenTokSDK(self.api_key, self.api_secret)

    def test_create_session(self):
        s = self.o.create_session()
        self.assertIsNotNone(
            s.session_id,
            "Python SDK tests: create session (no params): did not return a session id"
        )
        xml = self.get_session_info(s.session_id)
        self.assertEqual(s.session_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            "Python SDK tests: Session id not found")

        s = self.o.create_session('216.38.134.114')
        self.assertIsNotNone(
            s.session_id,
            "Python SDK tests: create session (no params): did not return a session id"
        )
        xml = self.get_session_info(s.session_id)
        self.assertEqual(s.session_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            "Python SDK tests: Session id not found")

    def test_num_output_streams(self):
        s = self.o.create_session(
            '127.0.0.1', properties={"multiplexer.numOutputStreams": 0})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('0', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 0')

        s = self.o.create_session(
            '127.0.0.1', properties={"multiplexer.numOutputStreams": 1})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('1', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 1')

        s = self.o.create_session(
            '127.0.0.1', properties={"multiplexer.numOutputStreams": 5})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('5', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 5')

        s = self.o.create_session(
            '127.0.0.1', properties={"multiplexer.numOutputStreams": 100})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('100', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 100')

        s = self.o.create_session('127.0.0.1')
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            [], xml.getElementsByTagName('numOutputStreams'),
            'Python SDK tests: multiplexer.numOutputStreams should not be set')

    def test_switch_type(self):
        s = self.o.create_session(properties={"multiplexer.switchType": 0})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('0', xml.getElementsByTagName('switchType')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchType not 0')

        s = self.o.create_session(properties={"multiplexer.switchType": 1})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('1', xml.getElementsByTagName('switchType')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchType not 1')

        s = self.o.create_session()
        xml = self.get_session_info(s.session_id)
        self.assertEqual(
            [], xml.getElementsByTagName('switchType'),
            'Python SDK tests: multiplexer.switchType should not be set')

    def test_switch_timeout(self):
        s = self.o.create_session(
            properties={"multiplexer.switchTimeout": 1200})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('1200', xml.getElementsByTagName('switchTimeout')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchTimeout not properly set (should be 1200)')

        s = self.o.create_session(
            properties={"multiplexer.switchTimeout": 2000})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('2000', xml.getElementsByTagName('switchTimeout')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchTimeout not properly set (should be 2000)')

        s = self.o.create_session(
            properties={"multiplexer.switchTimeout": 100000})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('100000', xml.getElementsByTagName('switchTimeout')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchType not properly set (should be 100000)')

    def test_p2p_preference(self):
        s = self.o.create_session(properties={"p2p.preference": 'enabled'})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('enabled', xml.getElementsByTagName('preference')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.p2p_preference not enabled')

        s = self.o.create_session(properties={"p2p.preference": 'disabled'})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('disabled', xml.getElementsByTagName('preference')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.p2p_preference not disabled')

    def test_echo_suppression(self):
        s = self.o.create_session(
            properties={"echoSuppression.enabled": 'true'})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('True', xml.getElementsByTagName('enabled')[0].childNodes[0].data, \
            'Python SDK tests: echo suppression not showing enabled')

        s = self.o.create_session(
            properties={"echoSuppression.enabled": 'false'})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('False', xml.getElementsByTagName('enabled')[0].childNodes[0].data, \
            'Python SDK tests: echo suppression not showing disabled')

    def test_roles(self):
        s = self.o.create_session()

        # default: publisher
        t = self.o.generate_token(s.session_id)
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('publisher', role,
                         'Python SDK tests: default role not publisher')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token default permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token default permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token default permissions should include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token default permissions should include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token default permissions should include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token default permissions should include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token default permissions should include playback')

        # publisher
        t = self.o.generate_token(s.session_id, "publisher")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('publisher', role,
                         'Python SDK tests: role not publisher')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token publisher permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token publisher permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token publisher permissions should include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token publisher permissions should not include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token publisher permissions should not include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token publisher permissions should not include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token publisher permissions should not include playback')

        # moderator
        t = self.o.generate_token(s.session_id, "moderator")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('moderator', role,
                         'Python SDK tests: role not moderator')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token moderator permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token moderator permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token moderator permissions should include signal')
        self.assertNotEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token moderator permissions should include forceunpublish')
        self.assertNotEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token moderator permissions should include forcedisconnect')
        self.assertNotEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token moderator permissions should include record')
        self.assertNotEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token moderator permissions should include playback')

        # subscriber
        t = self.o.generate_token(s.session_id, "subscriber")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('subscriber', role,
                         'Python SDK tests: role not subscriber')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token subscriber permissions should include subscribe')
        self.assertEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token subscriber permissions should not include publish')
        self.assertEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token subscriber permissions should not include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token subscriber permissions should not include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token subscriber permissions should not include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token subscriber permissions should not include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token subscriber permissions should not include playback')

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, 'ads')
            raise AssertionError(
                'Python SDK tests: invalid role should be rejected')

        except OpenTokException:
            pass  # expected

    def test_old_session(self):
        s_id = '1abc70a34d069d2e6a1e565f3958b5250b435e32'
        t = self.o.generate_token(s_id)
        xml = self.get_token_info(t)
        self.assertEqual(s_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            'Python SDK test: creating token with old session id failed')

    def test_expire_time(self):
        s = self.o.create_session()

        # past
        tm = time.time() - 1000
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError(
                'Python SDK tests: expire time in past should be rejected')
        except OpenTokException:
            pass

        # near future
        tm = time.time() + 6 * 24 * 60 * 60
        t = self.o.generate_token(s.session_id, expire_time=tm)
        xml = self.get_token_info(t)
        self.assertEqual(str(int(tm)), xml.getElementsByTagName('expire_time')[0].childNodes[0].data,\
            'Python SDK tests: expire time not set')

        # far future
        tm = time.time() + 8 * 24 * 60 * 60
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError(
                'Python SDK tests: expire time more than 7 days away should be rejected'
            )
        except OpenTokException:
            pass

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, expire_time="asdf")
            raise AssertionError(
                'Python SDK tests: non numberic expire time should be rejected'
            )
        except OpenTokException:
            pass

    def test_connection_data(self):
        s = self.o.create_session()

        test_string = 'test data'
        t = self.o.generate_token(s.session_id, connection_data=test_string)
        xml = self.get_token_info(t)
        self.assertEqual(test_string, xml.getElementsByTagName('connection_data')[0].childNodes[0].data,\
            'Python SDK tests: connection data not correct')

        # Should reject over 1000 characters of connection data
        test_string = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + \
            'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + \
            'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' + \
            'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd' + \
            'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + \
            'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + \
            'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + \
            'gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg' + \
            'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh' + \
            'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii' + \
            'jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj' + \
            'kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk' + \
            'llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll' + \
            'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm' + \
            'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn' + \
            'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
        try:
            t = self.o.generate_token(s.session_id,
                                      connection_data=test_string)
            raise AssertionError(
                'Python SDK tests: long connection data should be rejected')
        except OpenTokException:
            pass  # expected

    def get_session_info(self, session_id, token='devtoken'):
        try:
            url = self.api_url + '/session/' + session_id + '?extended=true'
            req = urllib2.Request(url, '', {'X-TB-TOKEN-AUTH': token})
            response = urllib2.urlopen(req)
            dom = parseString(response.read())
            response.close()

            return dom
        except urllib2.HTTPError, e:
            print "HTTP Error: failed to send request"
Beispiel #4
0
 def setUp(self):
     self.o = OpenTokSDK(self.api_key, self.api_secret)
class TestPythonSDK(unittest.TestCase):

    api_key = -1
    api_secret = ""
    api_url = OpenTokSDK.STAGING_URL
    o = None

    def setUp(self):
        self.o = OpenTokSDK(self.api_key, self.api_secret)

    def test_create_session(self):
        s = self.o.create_session()
        self.assertIsNotNone(s.session_id, "Python SDK tests: create session (no params): did not return a session id")
        xml = self.get_session_info(s.session_id)
        self.assertEqual(s.session_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            "Python SDK tests: Session id not found")

        s = self.o.create_session('216.38.134.114')
        self.assertIsNotNone(s.session_id, "Python SDK tests: create session (no params): did not return a session id")
        xml = self.get_session_info(s.session_id)
        self.assertEqual(s.session_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            "Python SDK tests: Session id not found")

    def test_p2p_preference(self):
        s = self.o.create_session(properties = {"p2p.preference": 'enabled'})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('enabled', xml.getElementsByTagName('preference')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.p2p_preference not enabled')

        s = self.o.create_session(properties = {"p2p.preference": 'disabled'})
        xml = self.get_session_info(s.session_id)
        self.assertEqual('disabled', xml.getElementsByTagName('preference')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.p2p_preference not disabled')

    def test_roles(self):
        s = self.o.create_session()

        # default: publisher
        t = self.o.generate_token(s.session_id)
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('publisher', role, 'Python SDK tests: default role not publisher')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token default permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token default permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token default permissions should include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token default permissions should include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token default permissions should include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token default permissions should include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token default permissions should include playback')

        # publisher
        t = self.o.generate_token(s.session_id, "publisher")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('publisher', role, 'Python SDK tests: role not publisher')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token publisher permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token publisher permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token publisher permissions should include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token publisher permissions should not include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token publisher permissions should not include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token publisher permissions should not include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token publisher permissions should not include playback')

        # moderator
        t = self.o.generate_token(s.session_id, "moderator")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('moderator', role, 'Python SDK tests: role not moderator')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token moderator permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token moderator permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token moderator permissions should include signal')
        self.assertNotEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token moderator permissions should include forceunpublish')
        self.assertNotEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token moderator permissions should include forcedisconnect')
        self.assertNotEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token moderator permissions should include record')
        self.assertNotEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token moderator permissions should include playback')

        # subscriber
        t = self.o.generate_token(s.session_id, "subscriber")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('subscriber', role, 'Python SDK tests: role not subscriber')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token subscriber permissions should include subscribe')
        self.assertEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token subscriber permissions should not include publish')
        self.assertEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token subscriber permissions should not include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token subscriber permissions should not include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token subscriber permissions should not include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token subscriber permissions should not include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token subscriber permissions should not include playback')

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, 'ads')
            raise AssertionError('Python SDK tests: invalid role should be rejected')

        except OpenTokException:
            pass # expected

    def test_old_session(self):
        s_id = '1abc70a34d069d2e6a1e565f3958b5250b435e32'
        t = self.o.generate_token(s_id)
        xml = self.get_token_info(t)
        self.assertEqual(s_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            'Python SDK test: creating token with old session id failed')

    def test_expire_time(self):
        s = self.o.create_session()

        # past
        tm = time.time() - 1000
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError('Python SDK tests: expire time in past should be rejected')
        except OpenTokException:
            pass

        # near future
        tm = time.time() + 6 * 24 * 60 * 60
        t = self.o.generate_token(s.session_id, expire_time=tm)
        xml = self.get_token_info(t)
        self.assertEqual(str(int(tm)), xml.getElementsByTagName('expire_time')[0].childNodes[0].data,\
            'Python SDK tests: expire time not set')

        # far future
        tm = time.time() + 8 * 24 * 60 * 60
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError('Python SDK tests: expire time more than 7 days away should be rejected')
        except OpenTokException:
            pass

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, expire_time="asdf")
            raise AssertionError('Python SDK tests: non numberic expire time should be rejected')
        except OpenTokException:
            pass

    def test_connection_data(self):
        s = self.o.create_session()

        test_string = 'test data'
        t = self.o.generate_token(s.session_id, connection_data=test_string)
        xml = self.get_token_info(t)
        self.assertEqual(test_string, xml.getElementsByTagName('connection_data')[0].childNodes[0].data,\
            'Python SDK tests: connection data not correct')

        # Should reject over 1000 characters of connection data
        test_string = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + \
            'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + \
            'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' + \
            'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd' + \
            'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + \
            'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + \
            'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + \
            'gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg' + \
            'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh' + \
            'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii' + \
            'jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj' + \
            'kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk' + \
            'llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll' + \
            'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm' + \
            'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn' + \
            'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
        try:
            t = self.o.generate_token(s.session_id, connection_data=test_string)
            raise AssertionError('Python SDK tests: long connection data should be rejected')
        except OpenTokException:
            pass # expected

    def get_session_info(self, session_id, token = 'devtoken'):
        try:
            url = self.api_url + '/session/' + session_id + '?extended=true'
            req = urllib2.Request(url, '', { 'X-TB-TOKEN-AUTH': token })
            response = urllib2.urlopen(req)
            dom = parseString(response.read())
            response.close()

            return dom
        except urllib2.HTTPError, e:
            print "HTTP Error: failed to send request"
Beispiel #6
0
class TestPythonSDK(unittest.TestCase):

    api_key = -1
    api_secret = ""
    o = None

    def setUp(self):
        self.o = OpenTokSDK(self.api_key, self.api_secret)

    def test_token_incorrect_key(self):
        different_session_id = "1_MX4yMDc1MjM4MX5-V2VkIEp1bCAxNyAxMDozMjoyMCBQRFQgMjAxM34wLjUyNTU2Mzd-" 
        try:
            t = self.o.generate_token(different_session_id)
            raise AssertionError('Python SDK tests: Token with incorrect API key should be rejected')
        except OpenTokException as e:
            pass #expected

       

    def test_create_session(self):
        s = self.o.create_session()
        t = self.o.generate_token(s.session_id)
        self.assertIsNotNone(s.session_id, "Python SDK tests: create session (no params): did not return a session id")
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual(s.session_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            "Python SDK tests: Session id not found")

        s = self.o.create_session('216.38.134.114')
        t = self.o.generate_token(s.session_id)
        self.assertIsNotNone(s.session_id, "Python SDK tests: create session (no params): did not return a session id")
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual(s.session_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            "Python SDK tests: Session id not found")

    def test_num_output_streams(self):
        s = self.o.create_session('127.0.0.1', properties={"multiplexer.numOutputStreams": 0})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('0', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 0')

        s = self.o.create_session('127.0.0.1', properties = {"multiplexer.numOutputStreams": 1})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('1', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 1')

        s = self.o.create_session('127.0.0.1', properties = {"multiplexer.numOutputStreams": 5})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('5', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 5')

        s = self.o.create_session('127.0.0.1', properties = {"multiplexer.numOutputStreams": 100})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('100', xml.getElementsByTagName('numOutputStreams')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.numOutputStreams not set to 100')

        s = self.o.create_session('127.0.0.1')
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual([], xml.getElementsByTagName('numOutputStreams'),
            'Python SDK tests: multiplexer.numOutputStreams should not be set')

    def test_switch_type(self):
        s = self.o.create_session(properties = {"multiplexer.switchType":  0})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('0', xml.getElementsByTagName('switchType')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchType not 0')

        s = self.o.create_session(properties = {"multiplexer.switchType":  1})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('1', xml.getElementsByTagName('switchType')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchType not 1')

        s = self.o.create_session()
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual([], xml.getElementsByTagName('switchType'),
            'Python SDK tests: multiplexer.switchType should not be set')

    def test_switch_timeout(self):
        s = self.o.create_session(properties = {"multiplexer.switchTimeout": 1200})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('1200', xml.getElementsByTagName('switchTimeout')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchTimeout not properly set (should be 1200)')

        s = self.o.create_session(properties = {"multiplexer.switchTimeout": 2000})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('2000', xml.getElementsByTagName('switchTimeout')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchTimeout not properly set (should be 2000)')

        s = self.o.create_session(properties = {"multiplexer.switchTimeout": 100000})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('100000', xml.getElementsByTagName('switchTimeout')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.switchType not properly set (should be 100000)')

    def test_p2p_preference(self):
        s = self.o.create_session(properties = {"p2p.preference": 'enabled'})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('enabled', xml.getElementsByTagName('preference')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.p2p_preference not enabled')

        s = self.o.create_session(properties = {"p2p.preference": 'disabled'})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('disabled', xml.getElementsByTagName('preference')[0].childNodes[0].data, \
            'Python SDK tests: multiplexer.p2p_preference not disabled')

    def test_echo_suppression(self):
        s = self.o.create_session(properties = {"echoSuppression.enabled": 'true'})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('True', xml.getElementsByTagName('enabled')[0].childNodes[0].data, \
            'Python SDK tests: echo suppression not showing enabled')

        s = self.o.create_session(properties = {"echoSuppression.enabled": 'false'})
        t = self.o.generate_token(s.session_id)
        xml = self.get_session_info(s.session_id, t)
        self.assertEqual('False', xml.getElementsByTagName('enabled')[0].childNodes[0].data, \
            'Python SDK tests: echo suppression not showing disabled')

    def test_roles(self):
        s = self.o.create_session()

        # default: publisher
        t = self.o.generate_token(s.session_id)
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('publisher', role, 'Python SDK tests: default role not publisher')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token default permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token default permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token default permissions should include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token default permissions should include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token default permissions should include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token default permissions should include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token default permissions should include playback')

        # publisher
        t = self.o.generate_token(s.session_id, "publisher")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('publisher', role, 'Python SDK tests: role not publisher')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token publisher permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token publisher permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token publisher permissions should include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token publisher permissions should not include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token publisher permissions should not include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token publisher permissions should not include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token publisher permissions should not include playback')

        # moderator
        t = self.o.generate_token(s.session_id, "moderator")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('moderator', role, 'Python SDK tests: role not moderator')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token moderator permissions should include subscribe')
        self.assertNotEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token moderator permissions should include publish')
        self.assertNotEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token moderator permissions should include signal')
        self.assertNotEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token moderator permissions should include forceunpublish')
        self.assertNotEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token moderator permissions should include forcedisconnect')
        self.assertNotEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token moderator permissions should include record')
        self.assertNotEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token moderator permissions should include playback')

        # subscriber
        t = self.o.generate_token(s.session_id, "subscriber")
        xml = self.get_token_info(t)
        role = xml.getElementsByTagName('role')[0].childNodes[0].data
        role = role.strip()
        self.assertEqual('subscriber', role, 'Python SDK tests: role not subscriber')
        self.assertNotEqual([], xml.getElementsByTagName('subscribe'), \
            'Python SDK tests: token subscriber permissions should include subscribe')
        self.assertEqual([], xml.getElementsByTagName('publish'), \
            'Python SDK tests: token subscriber permissions should not include publish')
        self.assertEqual([], xml.getElementsByTagName('signal'), \
            'Python SDK tests: token subscriber permissions should not include signal')
        self.assertEqual([], xml.getElementsByTagName('forceunpublish'), \
            'Python SDK tests: token subscriber permissions should not include forceunpublish')
        self.assertEqual([], xml.getElementsByTagName('forcedisconnect'), \
            'Python SDK tests: token subscriber permissions should not include forcedisconnect')
        self.assertEqual([], xml.getElementsByTagName('record'), \
            'Python SDK tests: token subscriber permissions should not include record')
        self.assertEqual([], xml.getElementsByTagName('playback'), \
            'Python SDK tests: token subscriber permissions should not include playback')

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, 'ads')
            raise AssertionError('Python SDK tests: invalid role should be rejected')

        except OpenTokException:
            pass # expected

    def test_old_session(self):
        s_id = '1abc70a34d069d2e6a1e565f3958b5250b435e32'
        t = self.o.generate_token(s_id)
        xml = self.get_token_info(t)
        self.assertEqual(s_id, xml.getElementsByTagName('session_id')[0].childNodes[0].data, \
            'Python SDK test: creating token with old session id failed')

    def test_expire_time(self):
        s = self.o.create_session()

        # past
        tm = time.time() - 1000
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError('Python SDK tests: expire time in past should be rejected')
        except OpenTokException:
            pass

        # near future
        tm = time.time() + 6 * 24 * 60 * 60
        t = self.o.generate_token(s.session_id, expire_time=tm)
        xml = self.get_token_info(t)
        self.assertEqual(str(int(tm)), xml.getElementsByTagName('expire_time')[0].childNodes[0].data,\
            'Python SDK tests: expire time not set')

        # far future
        tm = time.time() + 8 * 24 * 60 * 60
        try:
            t = self.o.generate_token(s.session_id, expire_time=tm)
            raise AssertionError('Python SDK tests: expire time more than 7 days away should be rejected')
        except OpenTokException:
            pass

        # garbage data
        try:
            t = self.o.generate_token(s.session_id, expire_time="asdf")
            raise AssertionError('Python SDK tests: non numberic expire time should be rejected')
        except OpenTokException:
            pass

    def test_connection_data(self):
        s = self.o.create_session()

        test_string = 'test data'
        t = self.o.generate_token(s.session_id, connection_data=test_string)
        xml = self.get_token_info(t)
        self.assertEqual(test_string, xml.getElementsByTagName('connection_data')[0].childNodes[0].data,\
            'Python SDK tests: connection data not correct')

        # Should reject over 1000 characters of connection data
        test_string = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + \
            'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' + \
            'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' + \
            'dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd' + \
            'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + \
            'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + \
            'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' + \
            'gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg' + \
            'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh' + \
            'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii' + \
            'jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj' + \
            'kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk' + \
            'llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll' + \
            'mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm' + \
            'nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn' + \
            'oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo'
        try:
            t = self.o.generate_token(s.session_id, connection_data=test_string)
            raise AssertionError('Python SDK tests: long connection data should be rejected')
        except OpenTokException:
            pass # expected

    def get_session_info(self, session_id, token):
        try:
            url = self.o.API_URL + '/session/' + session_id + '?extended=true'
            req = urllib2.Request(url, '', { 'X-TB-TOKEN-AUTH': token })
            response = urllib2.urlopen(req)
            dom = parseString(response.read())
            response.close()

            return dom
        except urllib2.HTTPError:
            print "HTTP Error: failed to send request"

    def get_token_info(self, token):
        try:
            url = self.o.API_URL + '/token/validate'
            req = urllib2.Request(url, '', { 'X-TB-TOKEN-AUTH': token })
            response = urllib2.urlopen(req)
            dom = parseString(response.read())
            response.close()

            return dom
        except urllib2.HTTPError:
            print "HTTP Error: failed to send request"

    def assertIsNotNone(self, obj, msg):
        if obj is None:
            raise AssertionError(msg)

    def assertIsNone(self, obj, msg):
        if obj is not None:
            raise AssertionError(msg)