コード例 #1
0
    def test_P4P(self):
        minion_uploader = Minions('res_file.tgz',
                                  upload_rate=150 * 1024**2,
                                  tracker=TRACKER)
        minion_uploader.upload_res('./res_file.tgz')

        time.sleep(1)

        requests.get('http://localhost:5000/peer/?res=res_file.tgz')

        minions = []
        try:
            for i in range(1):
                minion = Minions('res_file.tgz',
                                 '/tmp/res_file%s.tgz' % i,
                                 tracker=TRACKER)
                minions.append(minion)
                minion.download_res(rate=1500 * 1024**2)
                time.sleep(0.1)
            time.sleep(2)

            for m in minions:
                m.wait_for_res()

        except Exception:
            import traceback
            traceback.print_exc()
            raise
        finally:
            for m in minions:
                m.close()
            minion_uploader.close()
コード例 #2
0
ファイル: minion.py プロジェクト: xindaya/minion
def get_minion(args):
    if args.data_stdout:
        disorder = False
    else:
        disorder = True

    if args.ignore_qp:
        upload_res_url = strip_url_qp(args.url, args.ignore_qp)
        minion = Minions(args.url,
                         download_dest=args.dest_path,
                         download_rate=args.download_rate,
                         upload_rate=args.upload_rate,
                         upload_res_url=upload_res_url,
                         fallback=args.fallback,
                         tracker=args.tracker,
                         disorder=disorder)
    else:
        minion = Minions(args.url,
                         download_dest=args.dest_path,
                         download_rate=args.download_rate,
                         upload_rate=args.upload_rate,
                         fallback=args.fallback,
                         tracker=args.tracker,
                         disorder=disorder)
    return minion
コード例 #3
0
    def test_no_peers(self):

        with self.assertRaises(NoPeersFound):
            minion_1 = Minions('res_file.tgz',
                               '/tmp/minions_1.tgz',
                               tracker=TRACKER)
            minion_1.download_res()
コード例 #4
0
    def test_P4P_ignore_url_param(self):
        minion_uploader = Minions('res_file.tgz', tracker=TRACKER)
        minion_uploader.upload_res('./res_file.tgz')

        time.sleep(1)

        requests.get('http://localhost:5000/peer/?res=res_file.tgz')

        minions = []
        try:
            for i in range(3):
                minion = Minions('res_file.tgz?a=%s&b=%s' % (i, i),
                                 '/tmp/res_file%s.tgz' % i,
                                 tracker=TRACKER,
                                 upload_res_url="res_file.tgz")
                minion.download_res(rate=20 * 1024**2, thread=True)
                time.sleep(0.1)
                minions.append(minion)
            time.sleep(2)

            for m in minions:
                m.wait_for_res()

        except Exception:
            import traceback
            traceback.print_exc()
            raise
        finally:
            for m in minions:
                m.close()
            minion_uploader.close()
コード例 #5
0
ファイル: test_peer_server.py プロジェクト: xindaya/minion
    def test_keepalive(self):
        minion_uploader = Minions('res_file.tgz', tracker=TRACKER)
        minion_uploader.upload_res('./res_file.tgz')
        time.sleep(1)

        port = minion_uploader.port

        try:
            # test if whether get block api interface works
            r = requests.get(
                "http://localhost:%s/?res_url=res_file.tgz&pieces=all" % port,
                stream=True,
                headers={"Range": "bytes=0-1"},
                timeout=1)
            print r.content

            s = socket.socket()
            s.settimeout(0.2)
            s.connect(('localhost', port))
            s.send("GET /?res_url=res_file.tgz HTTP/1.1\r\n"
                   "Host: localhost:62630\r\n"
                   "Accept-Encoding: identity\r\n"
                   "Content-Length: 0\r\nRange: bytes=0-1,3-4\r\n"
                   "\r\n")
            print s.recv(200)
            s.recv(1024**2 + 400)

            with self.assertRaises(socket.timeout):
                s.recv(1024)

            s.send("GET /?res_url=res_file.tgz HTTP/1.1\r\n"
                   "Host: localhost:62630\r\n"
                   "Accept-Encoding: identity\r\n"
                   "Content-Length: 0\r\n"
                   "Range: bytes=0-1,3-4\r\n"
                   "\r\n")
            print s.recv(200)

            # conn = httplib.HTTPConnection("localhost", port)
            # conn.debuglevel = 1
            # conn.request(
            # "GET", "/?res_url=res_file.tgz",
            # "", headers={"Range": "bytes=0-1,3-4"})
            # r = conn.getresponse()

        finally:
            minion_uploader.close()
            minion_uploader.stop_upload()
コード例 #6
0
ファイル: test_peer_server.py プロジェクト: xindaya/minion
    def test_multipart(self):
        minion_uploader = Minions('res_file.tgz', tracker=TRACKER)
        minion_uploader.upload_res('./res_file.tgz')

        time.sleep(1)
        port = minion_uploader.port

        try:
            r = requests.get("http://localhost:%s/?res_url=res_file.tgz" %
                             port,
                             headers={"Range": "bytes=0-1,3-4"})

            self.assertEqual(len(r.content), 4)
        finally:
            minion_uploader.close()
            minion_uploader.stop_upload()
コード例 #7
0
 def _func():
     minion_uploader = Minions('res_file.tgz', tracker=TRACKER)
     minion_uploader.upload_res('./res_file.tgz')
     while True:
         time.sleep(1000)
コード例 #8
0
    def test_runout_peer(self):
        minion_uploader = Minions('res_file.tgz', tracker=TRACKER)
        minion_uploader.upload_res('./res_file.tgz')

        time.sleep(1)

        requests.get('http://localhost:5000/peer/?res=res_file.tgz')

        with self.assertRaises(NoPeersFound):
            try:
                minion_1 = Minions('res_file.tgz',
                                   '/tmp/res_file.tgz',
                                   tracker=TRACKER)
                minion_1.download_res(rate=10 * 1024**2, thread=True)
                time.sleep(2)
                minion_uploader.close()
                minion_1.wait_for_res()
            except Exception as e:
                import traceback
                traceback.print_exc()
                raise e
            finally:
                minion_1.close()
                minion_uploader.close()
コード例 #9
0
    def test_get_peer_strict(self):
        minion_uploader = Minions('res_file.tgz', tracker=TRACKER)
        minion_uploader.set_adt_info({'site': 'mysite1'})
        minion_uploader.upload_res('./res_file.tgz')

        minion_2 = None
        try:
            with self.assertRaises(NoPeersFound):
                minion_1 = Minions('res_file.tgz',
                                   '/tmp/res_file1.tgz',
                                   strict='site',
                                   tracker=TRACKER)
                minion_1.set_adt_info({'site': 'mysite2'})
                minion_1.download_res()

            minion_2 = Minions('res_file.tgz',
                               '/tmp/res_file2.tgz',
                               strict='site',
                               tracker=TRACKER)
            minion_2.set_adt_info({'site': 'mysite1'})
            minion_2.download_res()
        finally:
            minion_uploader.close()
            minion_1.close()
            if minion_2:
                minion_2.close()
コード例 #10
0
    def test_fallback(self):
        import BaseHTTPServer
        from SimpleHTTPServer import SimpleHTTPRequestHandler

        server_address = ('', 8000)
        httpd = BaseHTTPServer.HTTPServer(server_address,
                                          SimpleHTTPRequestHandler)
        t = Thread(target=httpd.serve_forever)
        t.start()

        try:
            minion_1 = Minions('http://localhost:8000/res_file.tgz',
                               '/tmp/res_file.tgz',
                               fallback=True,
                               tracker=TRACKER)

            minion_1.download_res()
            time.sleep(1)
            minion_2 = Minions('http://localhost:8000/res_file.tgz',
                               '/tmp/res_file1.tgz',
                               tracker=TRACKER)
            minion_2.download_res(rate=20 * 1024**2)
        finally:
            minion_1.close()
            minion_2.close()
            httpd.shutdown()
コード例 #11
0
ファイル: test_peer_server.py プロジェクト: xindaya/minion
    def test_keepalive_timeout(self):
        minion_uploader = Minions('res_file.tgz', tracker=TRACKER)
        minion_uploader.upload_res('./res_file.tgz')
        time.sleep(1)
        port = minion_uploader.port
        import logging
        logging.basicConfig(level=logging.ERROR)

        def foo(session):
            size = 1024**2
            r = session.get("http://localhost:%s/?res_url=res_file.tgz" % port,
                            stream=True,
                            headers={"Range": "bytes=0-%s" % (size)},
                            timeout=2)
            # r.raw.close()
            r.content
            return r

        try:
            s = requests.Session()
            g = []
            for i in range(500):
                g.append(gevent.spawn(foo, s))

            gevent.sleep(1)
            for i in g:
                i.get()
                # print "------------"
                # r = s.get("http://localhost:%s/?res_url=res_file.tgz" % port,
                #     stream=True,
                #     headers={"Range": "bytes=0-%s" %(size)},
                #     timeout=1)

                # print len(r.raw.read(1023))
                # len(r.raw.read(1024**2 + 1))
                # time.sleep(1)
                # r.content
                # print r
                # r.raw.close()
                # r.close()
                # r.raw.close()
                # del r
                # r = s.get(
                #     "http://localhost:%s/?res_url=res_file.tgz&pieces=all" %
                #         port,
                #     stream=True,
                #     headers={"Range": "bytes=0-%s" % (size)},
                #     timeout=1)
                # #print len(r.raw.read(1024**2 * 2 + 1))
                # r.close()

                # r.content
                # r = s.get(
                # "http://localhost:%s/?res_url=res_file.tgz&pieces=all"
                # % port,
                #     stream=True,
                #     headers={"Range": "bytes=0-%s" % (size)},
                #     timeout=1)
                # r.content
                # r.close()
                # print "------------"
        finally:
            print 'finally'
            minion_uploader.close()
            minion_uploader.stop_upload()