Ejemplo n.º 1
0
    def test_collect_successful(self):
        ''' Make sure the response is OK when collect succeeds '''

        server = NegotiateServer(None)
        server.register_module('abc', NegotiateServerModule())

        stream = MinimalHttpStream()
        request = Message(uri='/collect/abc')
        request.body = StringIO.StringIO('{}')

        server.process_request(stream, request)
        response = stream.response

        self.assertEqual(response.code, '200')
        self.assertEqual(response.reason, 'Ok')
        self.assertEqual(response.body, '{}')
        self.assertEqual(response['connection'], 'close')
        self.assertEqual(response['content-type'], 'application/json')
Ejemplo n.º 2
0
    def test_negotiate_successful(self):
        ''' Make sure the response is OK when negotiate succeeds '''

        server = NegotiateServer(None)
        server.register_module('abc', NegotiateServerModule())

        # Want to check authorized and nonauthorized streams
        for position in range(CONFIG['negotiate.parallelism'] + 3):

            stream = MinimalHttpStream()
            request = Message(uri='/negotiate/abc')
            request.body = StringIO.StringIO('{}')

            server.process_request(stream, request)
            response = stream.response

            self.assertEqual(response.code, '200')
            self.assertEqual(response.reason, 'Ok')
            self.assertNotEqual(response['connection'], 'close')
            self.assertEqual(response['content-type'], 'application/json')

            # Note: authorization is empty when you're choked
            body = json.loads(response.body)
            if position < CONFIG['negotiate.parallelism']:
                self.assertEqual(
                    body, {
                        u'unchoked': 1,
                        u'queue_pos': position,
                        u'real_address': u'abc',
                        u'authorization': unicode(hash(stream))
                    })
            else:
                self.assertEqual(
                    body, {
                        u'unchoked': 0,
                        u'queue_pos': position,
                        u'real_address': u'abc',
                        u'authorization': u'',
                    })
Ejemplo n.º 3
0
    def test_negotiate_red(self):
        ''' Verify that random early discard works as expected '''

        server = NegotiateServer(None)
        server.register_module('abc', NegotiateServerModule())

        red_accepted, red_rejected, red_discarded = 0, 0, 0
        while True:

            # Create request and stream
            request = Message(uri='/negotiate/abc')
            request.body = StringIO.StringIO('{}')
            stream = MinimalHttpStream()

            # Should ALWAYS accept
            if len(server.queue) < CONFIG['negotiate.min_thresh']:
                server.process_request(stream, request)
                self.assertEquals(server.queue[-1], stream)

            # MAY accept or reject
            elif len(server.queue) < CONFIG['negotiate.max_thresh']:
                server.process_request(stream, request)
                if server.queue[-1] == stream:
                    red_accepted += 1
                else:
                    red_rejected += 1

            # MUST reject
            else:
                server.process_request(stream, request)
                self.assertNotEqual(server.queue[-1], stream)
                red_discarded += 1
                if red_discarded == 64:
                    break

        self.assertTrue(red_accepted > 0 and red_rejected > 0
                        and red_discarded == 64)
Ejemplo n.º 4
0
 def __init__(self):
     ''' Initialize Speedtest negotiator '''
     NegotiateServerModule.__init__(self)
     self.clients = set()
Ejemplo n.º 5
0
 def __init__(self):
     ''' Initialize BitTorrent negotiator '''
     NegotiateServerModule.__init__(self)
     self.peers = {}
Ejemplo n.º 6
0
 def __init__(self):
     NegotiateServerModule.__init__(self)
     self.peers = {}