Example #1
0
 def accept(self):
     while True:
         data, other = self.__socket.recvfrom(1024)
         package = Package.decode(data)
         if not package.is_syn:
             continue
         self.__other_addr = other
         self.__other_seq = package.seq
         self.start()
         self.__send_buffer.put(Package(self.__seq, 0, False, True, True))
         return other
Example #2
0
 def recv_loop(sock, acks_buffer, recv_buffer, send_buffer, to_addr):
     while True:
         data, client = sock.recvfrom(1024)
         package = Package.decode(data)
         if package.is_ack:
             acks_buffer.put(package)
         elif package.is_syn:
             sock.sendto(Package(0, package.seq + 1, True, False, False).encode(), to_addr)
         else:
             recv_buffer.put(package)
             sock.sendto(Package(0, package.seq + 1, True, False, False).encode(), to_addr)
Example #3
0
    def add_package(self,
                    pkg_id,
                    address,
                    deadline,
                    city,
                    zipcode,
                    weight,
                    delivery_status=False):
        """
        FROM SECTION E
        Adds a package to the master package list

        :param pkg_id: Unique package ID
        :param address: Street name and number of delivery address
        :param deadline: Time package must be delivered by
        :param city: City of delivery address
        :param zipcode: Zipcode of delivery address
        :param weight: Weight of package
        :param delivery_status: Whether package has already been delivered or not
        """
        for package in self.packages.values():
            if pkg_id == package.pkg_id:
                print(f"Package ID '{pkg_id}' already in use")
                break
        for destination in DESTINATIONS.destinations.values():
            if destination.zipcode == zipcode and destination.address == address:
                self.packages[pkg_id] = Package(pkg_id, address, deadline,
                                                city, zipcode, weight,
                                                destination)
        if delivery_status:
            self.packages[package_id].update_status(deadline, "In Transit")
Example #4
0
def generate_wrappers_for_file(file_name):
    unit = context.get_from_file(get_ads_path(file_name))
    package_name = unit.root.p_decl.f_package_name.text

    subp_defs = [subp_tuple(subp_def) for subp_def in subprogram_defs(unit)]

    with open(get_ads_path(file_name)) as in_file:
        file_lines = [
            bytearray(line, encoding='utf-8')
            for line in in_file.read().split("\n")
        ]

    alterations = []
    is_adb_needed = False

    for subp_decl, subp_tpl, ((sl, sc), (el, ec)) in subp_defs:
        if is_wrapper_needed(subp_tpl):
            is_adb_needed = True

            alterations.append(
                FileAlteration(sl, sc, el, ec,
                               "\n   ".join(generate_decl(subp_tpl))))

    apply_alterations(alterations, file_lines)

    with open(get_out_path(file_name), "w") as out_file:
        for line in file_lines:
            out_file.write(line.decode('utf-8') + "\n")

    if is_adb_needed:
        package = Package([package_name], [t for _, t, _ in subp_defs])
        with open(get_adb_path(file_name), "w") as out_file:
            for line in generate_body(package):
                out_file.write(line + "\n")
Example #5
0
 def send_msg(self, msg):
     begin = 0
     while begin < len(msg):
         end = begin + Package.MAX_DATA_SIZE
         data = msg[begin:end]
         self.__seq += 1
         is_end = end >= len(msg)
         self.__send_buffer.put(Package(self.__seq, 0, False, False, is_end, data))
         begin = end
Example #6
0
 def lookup_package(self, **kwargs):
     """
     FROM SECTION F
     Takes keyword arguments and turns them into a Package object,
     then searches the master manifest
     """
     package_to_match = Package(**kwargs)
     matches = []
     for package in self.packages.values():
         if package == package_to_match:
             matches.append(package)
     return matches
Example #7
0
 def handshake(self, addr):
     syn_msg = Package(self.__seq, 0, False, True, True).encode()
     cur_try = 0
     other_seq = None
     while cur_try < Package.NUMBER_OF_RETRIES:
         self.__socket.sendto(syn_msg, addr)
         shared_other_seq = Value('i')
         recv_thrd = Process(target=SocketUDP.recv_syn_res, args=(self.__socket, shared_other_seq))
         recv_thrd.start()
         recv_thrd.join(1)
         if recv_thrd.is_alive():
             recv_thrd.terminate()
             recv_thrd.join()
             cur_try += 1
         else:
             other_seq = shared_other_seq.value
             break
     if other_seq is not None:
         self.__other_addr = addr
         self.__other_seq = other_seq
         self.__socket.sendto(Package(self.__seq, self.__other_seq + 1, True, False, True).encode(), addr)
         return True
     else:
         return False
Example #8
0
 def get(self, pkg_name):
     html = yield html_cache.get(pkg_name)
     anchor_tags = get_hrefs_from_html(html, exp='*.tar.gz', match_type='fnmatch')
     links = []
     for anchor in anchor_tags:
         # pypi_url = get_package_url(pkg_name)
         package = Package.from_pypi_href(anchor.href)
 
         link = {'href': os.path.join('/package', package.name.lower(), 
                             package.filename + '#md5=' + package.md5),
                 'name': package.filename }
         local_pkg = find_package(package.name, package.version)
         link['is_local'] = True if local_pkg else False
         links.append(link)
     
     content = Template('package.html').render(links=links, package_name=pkg_name)
     self.write(content)
     self.finish()
Example #9
0
    def test():
        def name(string):
            return string.split('.')

        p = Package(name('LLVM.Core'), [
            Function('Module_Create_With_Name', 'Module', [
                Argument('ModuleID', 'Interfaces.C.Strings.chars_ptr'),
            ], []),
            Function('Get_Data_Layout', 'Interfaces.C.Strings.chars_ptr', [
                Argument('M', 'Module'),
            ], []),
            Procedure('Set_Data_Layout', [
                Argument('M', 'Module'),
                Argument('Triple', 'Interfaces.C.Strings.chars_ptr'),
            ], []),
            Procedure('Set_Some_Flag', [
                Argument('M', 'Module'),
                Argument('Flag', 'Bool_T'),
            ], []),
            Function('Get_Some_Flag', 'Bool_T', [
                Argument('M', 'Module'),
            ], []),
        ])

        print('--  Specification')
        print('with Interfaces.C.Strings;')
        print('')
        print('package {} is'.format(fmt_name(p.name)))
        print('')
        for elt in p.elements:
            for line in generate_decl(elt):
                print('   {}'.format(line))
            print('')
        print('end {};'.format(fmt_name(p.name)))

        print('')
        print('--  Body')
        for line in generate_body(p):
            print(line)
Example #10
0
def get_package(prj_ver, prj_info, apk_url, apk_path):
    # 如果apk_url不为空,优先下载该apk
    if apk_url != "":
        logging.info("[get_package] get apk from url: {}".format(apk_url))
        apk_path = get_apk.download_apk([apk_url], prj_ver, prj_info)
    # 如果apk_url为空,apk_path不为空,直接使用该路径的apk
    elif apk_path != "":
        logging.info("[get_package] get apk from local: {}".format(apk_path))
    # 如果apk_url和apk_path均为空,则通过prj_info下载最新包
    elif not re.findall("http", prj_info["url"]):
        logging.info("[get_package] get ftp latest apk...")
        apk_path = get_ftp_apk.get_ftp_apk(prj_info)
    else:
        logging.info("[get_package] get latest apk...")
        apk_path = get_apk.get_apk(prj_ver, prj_info)
        print apk_path
    # 如果apk_path为None,则报错,否则返回包
    if apk_path is None:
        logging.error("[get_package] failed to get package")
        sys.exit(-1)
    return Package(apk_path, prj_info["product_name"], prj_info["usr_id"],
                   prj_info["usr_pwd"])
Example #11
0
    def build_package_dictionary(self):
        """
        Function that takes the raw package data from the excel document and turns it into a master list of
        Package objects
        """

        # Raw package data from Excel document
        raw_packages = [
            ("1", "195 W Oakland Ave", "Salt Lake City", "84115", "10:30 AM",
             "21"),
            ("2", "2530 S 500 E", "Salt Lake City", "84106", "EOD", "44"),
            ("3", "233 Canyon Rd", "Salt Lake City", "84103", "EOD", "2"),
            ("4", "380 W 2880 S", "Salt Lake City", "84115", "EOD", "4"),
            ("5", "410 S State St", "Salt Lake City", "84111", "EOD", "5"),
            ("6", "3060 Lester St", "West Valley City", "84119",
             "10:30 AM", "88"),
            ("7", "1330 2100 S", "Salt Lake City", "84106", "EOD", "8"),
            ("8", "300 State St", "Salt Lake City", "84103", "EOD", "9"),
            ("9", "300 State St", "Salt Lake City", "84103", "EOD", "2"),
            ("10", "600 E 900 South", "Salt Lake City", "84105", "EOD", "1"),
            ("11", "2600 Taylorsville Blvd", "Salt Lake City", "84118", "EOD",
             "1"),
            ("12", "3575 W Valley Central Station bus Loop",
             "West Valley City", "84119", "EOD", "1"),
            ("13", "2010 W 500 S", "Salt Lake City", "84104", "10:30 AM", "2"),
            ("14", "4300 S 1300 E", "Millcreek", "84117", "10:30 AM", "88"),
            ("15", "4580 S 2300 E", "Holladay", "84117", "9:00 AM", "4"),
            ("16", "4580 S 2300 E", "Holladay", "84117", "10:30 AM", "88"),
            ("17", "3148 S 1100 W", "Salt Lake City", "84119", "EOD", "2"),
            ("18", "1488 4800 S", "Salt Lake City", "84123", "EOD", "6"),
            ("19", "177 W Price Ave", "Salt Lake City", "84115", "EOD", "37"),
            ("20", "3595 Main St", "Salt Lake City", "84115", "10:30 AM",
             "37"),
            ("21", "3595 Main St", "Salt Lake City", "84115", "EOD", "3"),
            ("22", "6351 South 900 East", "Murray", "84121", "EOD", "2"),
            ("23", "5100 South 2700 West", "Salt Lake City", "84118", "EOD",
             "5"), ("24", "5025 State St", "Murray", "84107", "EOD", "7"),
            ("25", "5383 South 900 East #104", "Salt Lake City", "84117",
             "10:30 AM", "7"),
            ("26", "5383 South 900 East #104", "Salt Lake City", "84117",
             "EOD", "25"),
            ("27", "1060 Dalton Ave S", "Salt Lake City", "84104", "EOD", "5"),
            ("28", "2835 Main St", "Salt Lake City", "84115", "EOD", "7"),
            ("29", "1330 2100 S", "Salt Lake City", "84106", "10:30 AM", "2"),
            ("30", "300 State St", "Salt Lake City", "84103", "10:30 AM", "1"),
            ("31", "3365 S 900 W", "Salt Lake City", "84119", "10:30 AM", "1"),
            ("32", "3365 S 900 W", "Salt Lake City", "84119", "EOD", "1"),
            ("33", "2530 S 500 E", "Salt Lake City", "84106", "EOD", "1"),
            ("34", "4580 S 2300 E", "Holladay", "84117", "10:30 AM", "2"),
            ("35", "1060 Dalton Ave S", "Salt Lake City", "84104", "EOD",
             "88"),
            ("36", "2300 Parkway Blvd", "West Valley City", "84119", "EOD",
             "88"),
            ("37", "410 S State St", "Salt Lake City", "84111", "10:30 AM",
             "2"),
            ("38", "410 S State St", "Salt Lake City", "84111", "EOD", "9"),
            ("39", "2010 W 500 S", "Salt Lake City", "84104", "EOD", "9"),
            ("40", "380 W 2880 S", "Salt Lake City", "84115", "10:30 AM", "45")
        ]
        """
        Ingest raw data and turn each tuple into a Package object.
        Package objects are stored in a dictionary with their ID as the key. 
        """
        for package in raw_packages:
            pkg_id, address, city, zipcode, deadline, weight = package
            if deadline == "EOD":
                deadline = datetime.strptime("23:59 PM", TIME_FORMAT)
            else:
                deadline = datetime.strptime(deadline, TIME_FORMAT)
            deadline = deadline.strftime(TIME_FORMAT)
            for destination in DESTINATIONS.destinations.values():
                if destination.address == address and destination.zipcode == zipcode:
                    package_destination = destination
            p = Package(pkg_id, address, deadline, city, zipcode, weight,
                        package_destination)
            self.packages[pkg_id] = p
Example #12
0
    def get(self, pkg_path):
        # get pypi server package url
        package = Package.from_filename(pkg_path.rstrip('/'))
        html = yield html_cache.get(package.name.lower())

        if not package.is_downloading:
            local_pkg = find_package(package.name, package.version)
            if local_pkg:
                # if local server exsits, redirect
                redirect_url = os.path.join('/download/', local_pkg.name.lower(), package.filename)
                self.redirect(redirect_url)
                raise gen.Return()
            else:
                # not download yet
                pkg_url = get_package_url(package.name)
                anchor_tags =  get_hrefs_from_html(html, exp='*.tar.gz',
                                            match_type='fnmatch')
                href = find_match_link(anchor_tags, package.version)
                url = urlparse.urljoin(pkg_url, href)

                package = Package.from_pypi_href(url)
                readwriter = download_packages.get_file(package.filename)
                
                def data_received(readwriter, chunk):
                    self.request.connection.write(chunk)
                    readwriter.write(readwriter.current_size, chunk)

                def header_received(header_line):
                    self.request.connection.write(header_line)

                client = AsyncHTTPClient()
                yield client.fetch(url, connect_timeout=20 * 60, request_timeout= 20 * 60, 
                                    header_callback=header_received, 
                                    streaming_callback=partial(data_received, readwriter))
                
                readwriter.close()
                readwriter.write_done = True
                filepath = os.path.join('packages', package.name.lower(), package.filename)

                # md5 file check
                with open(filepath) as f:
                    file_md5 = md5.new(f.read()).hexdigest()
                if file_md5 == package.md5:
                    self.request.connection.close()
                    download_packages.remove_file(package.filename)
                else:
                    os.remove(filepath)
                    self.send_error(status_code=500, reason='downlaod file damaged')
        else:
            # package downloading
            self.set_status(200)
            self.set_header("Content-Type", "application/octet-stream")
            # self.set_header("Content-Length", content_length)
            readwriter = download_packages.get_file(package.filename)
            print id(readwriter)

            def read_chunk(readwriter, pos, chunk_size= 200*1024):
                chunk = readwriter.read(pos, chunk_size)
                if chunk is None:
                    print chunk
                    self.finish()
                    readwriter.close()
                else:
                    pos += len(chunk)
                    self.write(chunk)
                    IOLoop.current().call_later(0.5, read_chunk, readwriter, pos)

            IOLoop.current().call_later(0.5, read_chunk, readwriter, 0)
Example #13
0
 def recv_syn_res(sock, shared_other_seq):
     data, other = sock.recvfrom(1024)
     shared_other_seq.value = Package.decode(data).seq
Example #14
0
def monkey_test(sn, package, prj_info, need_uninstall, throttle, count,
                rcpt_list):
    device = Devices(sn)
    device_log = DeviceLog(sn)
    # 初始化设备日志
    logging.info(">>> Init log for device")
    device_log.init()
    logging.info(">>> Done")
    # 卸载apk文件
    if need_uninstall:
        logging.info(">>> Uninstall package")
        device.uninstall(package)
        logging.info(">>> Done")
    # 安装apk文件
    logging.info(">>> Install package")
    device.install(package)
    logging.info(">>> Done")
    #登录app
    logging.info(">>> login in app")
    device.login_app(package)
    logging.info(">>> Done")
    # 安装Wifi Manager
    logging.info(">>> Install Wifi Manager")
    device.install(Package("apks/wifimanager-debug.apk", "", "", ""))
    logging.info(">>> Done")
    # 启动Wifi Manager
    logging.info(">>> Enable Wifi Manager")
    device.enable_wifi_manager()
    logging.info(">>> Done")
    # 安装simiasque
    logging.info(">>> Install simiasque")
    device.install(Package("apks/simiasque-debug.apk", "", "", ""))
    logging.info(">>> Done")
    # 启动simiasque
    logging.info(">>> Enable simiasque")
    device.enable_simiasque()
    logging.info(">>> Done")
    # 执行monkey测试
    logging.info(">>> Run monkey test")
    device.run_monkey(package, device_log.log_path, throttle, count)
    logging.info(">>> Done")
    # 关闭simiasque
    logging.info(">>> Disable simiasque")
    device.disable_simiasque()
    logging.info(">>> Done")
    # 导出 hprof 文件
    logging.info(">>> export hprof ")
    rst = device.export_hprof(package, prj_info)
    logging.info(">>> {}".format(rst))
    # 关闭屏幕
    logging.info(">>> Turn off screen")
    device.turn_off_screen()
    logging.info(">>> Done")
    # 生成dumpsys信息
    logging.info(">>> Dumpsys activities")
    device.dumpsys_activity(device_log.dump_dir)
    logging.info(">>> Done")
    # 分析设备日志
    logging.info(">>> Check logs")
    device_log.check(package)
    logging.info(">>> Done")
    # 获取anr数量、crash数量和附件list
    anr_cnt, crash_cnt, att_list, anr_dic, crash_dic = device_log.get()
    # 发送邮件
    send_log(prj_info, device, package, rcpt_list, anr_cnt, crash_cnt,
             att_list, anr_dic, crash_dic)