コード例 #1
0
ファイル: class_chat.py プロジェクト: Maksim1988/test
 def check_ware_message(self, driver, dialog, message, link_db):
     """
     Проверить сообщение-карточка товара
     :param messages:
     :return:
     """
     service_log.put("Checking Ware-message")
     ware_id = message[u'wareId'].encode('utf-8')
     ware = link_db.warehouse.get_wares_by_ware_id(ware_id)[0]
     info = ware[u'content']
     picture = info[u'pictures'][u'value'][0].encode('utf-8')
     title = info[u'title'][u'value'].encode('utf-8')
     p = [str(info[i][u'value'][u'significand']) for i in info if i == u'price']
     p = ''.join(p)
     prc = lambda s: "---" if s == '' else s
     price = prc(p)
     quantity = str(info[u'min_stock'][u'value'])
     Navigate.element_is_present(driver, Navigate.check_chat.WARE_PICTURE % (dialog, ware_id, picture))
     Navigate.element_is_present(driver, Navigate.check_chat.WARE_NAME % (dialog, ware_id, title))
     price_web = Navigate.element_is_present(driver, Navigate.check_chat.WARE_PRICE % (dialog, ware_id)).text
     price_web = price_web.encode('utf-8').replace(' ', '')
     self.assertEqual("Заштуку\n%sруб." % price, price_web, "Цена из БД '%s', цена из web '%s'" % (price, price_web))
     quantity_web = Navigate.element_is_present(driver, Navigate.check_chat.WARE_QUANTITY % (dialog, ware_id)).text
     quantity_web = quantity_web.encode('utf-8').replace(' ', '')
     self.assertEqual("Мин.заказ\n%sшт." % quantity, quantity_web, "Мин. заказ из БД '%s', и из web '%s'" %
                      (quantity, quantity_web))
コード例 #2
0
ファイル: test_warehouse.py プロジェクト: Maksim1988/test
    def test_new_importWare(self):
        """ Импорт премодерированного товара
        Товар проходит базовую валидацию, переводится в указанное состояние
        и помечается как отмодерированный.
        """
        # TODO: Ошибка "https://jira.oorraa.net/browse/RT-290"
        service_log.run(self)

        # импортируем новый товар
        ware_req = self.duplicate_import_ware_req(shop_id=self.ware1['shop_id'],
                                                  category=self.ware1['managed_category'],
                                                  content=self.ware1["content"],
                                                  moderator_id=int(self.get_default_user_id("moderator")),
                                                  stock_state=self.get_StockState("PUBLISHED"),
                                                  ware_import_id=str(unique_number()))
        wares_warehouse = services.warehouse.root.tframed.importWare(ware_req)
        service_log.put("Import ware: %s" % wares_warehouse)

        # Возьмём значение из БД только что импортированного товара по его идентификатору
        ware_cassandra = databases.db1.warehouse.get_wares_by_ware_id(wares_warehouse.wareId)
        service_log.put("Ware from BD: %s" % ware_cassandra)

        # проверяем, что вернулось только один товар
        self.assertEqual(len(ware_cassandra), 1, "Found more than one item.")
        ware_cassandra = ware_cassandra[0]

        self.update_data_content(ware_cassandra, self.deserialize_content(ware_cassandra['content']))

        #  проверяем полученно значение от сервиса со значениями из БД
        self.check_ware(ware_worker=wares_warehouse, ware_dbase=ware_cassandra)
コード例 #3
0
ファイル: test_warehouse.py プロジェクト: Maksim1988/test
    def test_makePublication_nothing(self):
        """ Опубликовать товар.
        Создаём товар. Проверяем, что по умолчанию статус опубликованности HIDDEN.
        Изменяем его статус. Проверяем, что по умолчанию статус опубликованности PUBLISHED.
        Снова изменяем его статус. Проверяем, что по умолчанию статус опубликованности HIDDEN.
        """
        service_log.run(self)
        msg_published = "Stock state not equal %s. Data from service."
        msg_published_db = "Stock state not equal %s. Data from DB."

        # создаём товар
        name_stock_state = 'HIDDEN'
        ware_req = self.duplicate_ware_req(self.ware['shop_id'], self.ware['managed_category_id'],
                                           self.ware["content"], self.ware["stock_state_id"])

        ware_warehouse = services.warehouse.root.tframed.createWare(ware_req)
        service_log.put("Created ware: %s" % ware_warehouse)
        self.assertEqual(ware_warehouse.stockState, 3, msg_published % name_stock_state)
        ware_after_created = databases.db1.warehouse.get_wares_by_ware_id(ware_warehouse.wareId)[0]
        self.assertEqual(ware_after_created["stock_state_id"], 3, msg_published_db % name_stock_state)

        # выставляем состояние StockState Опубликованный товар. Доступен всем. Индексируется. HIDDEN = 3
        stock_state = self.get_StockState(name_stock_state)
        wh_ware_published = services.warehouse.root.tframed.makePublication(ware_warehouse.wareId, stock_state)
        self.assertEqual(wh_ware_published.stockState, stock_state, msg_published % name_stock_state)
        ware_after_changed = databases.db1.warehouse.get_wares_by_ware_id(ware_warehouse.wareId)[0]
        self.assertEqual(ware_after_changed["stock_state_id"], stock_state, msg_published_db % name_stock_state)
コード例 #4
0
ファイル: db_oracle.py プロジェクト: senchuk/letotest
 def close(self, cursor):
     """ Закрываем соединение.
     :param cursor: ссылка на курсор
     """
     #cursor.close()
     #self.conn.close()
     service_log.put("Closing opened oracle connections.")
コード例 #5
0
ファイル: class_front.py プロジェクト: Maksim1988/test
 def send_email(email_object, email_adress):
     """ Ввести e-mail пользователя.
     :param email_adress: e-mail пользователя
     :param email_object: объект формы для ввода e-mail
     """
     service_log.put("Send phone: %s" % email_adress)
     email_object.send_keys(email_adress)
コード例 #6
0
 def test_getContextForSession(self):
     """ Взять контексты сессии, выборка по типу и статусу контекста.
     :param only_active: Если only_active == true, контекст будет возвращен только если он активен.
     """
     # TODO: https://youtrack.home.oorraa.net/issue/M-143
     result = services.session.root.tframed.getContextForSession(self.session_id, self.context_type, False)
     service_log.put("Method getContextForSession returned result: %s" % result)
コード例 #7
0
ファイル: class_front.py プロジェクト: Maksim1988/test
 def send_phone(phone_object, phone_number):
     """ Ввести номер телефона.
     :param phone_number: номер телефона
     :param phone_object: объект формы для ввода телефона
     """
     service_log.put("Send phone: %s" % phone_number)
     phone_object.send_keys(phone_number)
コード例 #8
0
ファイル: class_front.py プロジェクト: Maksim1988/test
 def send_password(password_object, password_number):
     """ Ввести пароль.
     :param password_number: пароль
     :param password_object: объект формы для ввода пароля
     """
     service_log.put("Send password: %s" % password_number)
     password_object.send_keys(password_number)
コード例 #9
0
ファイル: class_front.py プロジェクト: Maksim1988/test
 def get_login(driver):
     """ Ссылка на залогинивание.
     :param driver: драйвер
     """
     p = HelpNavigateCheckMethods.element_is_present(driver, HelpAuthData.MENU_LOGIN)
     service_log.put("Submit button find.")
     return p
コード例 #10
0
ファイル: test_warehouse.py プロジェクト: Maksim1988/test
    def test_createWare(self, n=1):
        """ Создание товара.
        Создаём дубликат существующего товара.
        Сравниваем значения от сервиса со значениями из БД.
        """
        service_log.run(self)

        # создаём товар
        ware_req = self.duplicate_ware_req(shop_id=self.ware1['shop_id'],
                                           category=self.ware1['managed_category_id'],
                                           content=self.ware1["content"],
                                           stock_state=self.ware1['stock_state_id'])


        wares_warehouse = services.warehouse.root.tframed.createWare(ware_req)
        service_log.put("Created ware: %s" % wares_warehouse)

        # Возьмём значение из БД только что созданного товара по его идентификатору
        ware_cassandra = databases.db1.warehouse.get_wares_by_ware_id(wares_warehouse.wareId)
        service_log.put("Ware from BD: %s" % ware_cassandra)

        # проверяем, что вернулось только один товар
        self.assertEqual(len(ware_cassandra), 1, "Found more than one item.")
        ware_cassandra = ware_cassandra[0]

        self.update_data_content(ware_cassandra, self.deserialize_content(ware_cassandra['content']))

        #  проверяем полученно значение от сервиса со значениями из БД
        self.check_ware(ware_worker=wares_warehouse, ware_dbase=ware_cassandra)
コード例 #11
0
ファイル: class_accounting.py プロジェクト: Maksim1988/test
 def generate_session_id():
     """ Сгенерировать идентификатор сессии.
     :return: строка
     """
     session_id = str(random.randint(1000000000, 100000000000000))
     service_log.put("Session id for user: %s" % session_id)
     return session_id
コード例 #12
0
ファイル: db_cassandra.py プロジェクト: senchuk/letotest
    def execute(self, req, parameters=None):
        """ Выполнить запрос.
        :param req: сql-запрос
        :return: результат операции
        """

        session = None
        try:
            session = self.connect_plain_auth(user_name=self.user, password=self.passwd, port=self.port,
                                              key_space=self.name, contacts_point=self.host)
            if parameters is not None:
                # вариант с предварительной привязкой параметров, для работы с BLOB
                prepare_params = session.prepare(req)
                bound_params = prepare_params.bind(parameters)
                result = session.execute(bound_params)
            else:
                result = session.execute(req)
            service_log.put("Response from cassandra.")
            if isinstance(result, list):
                if len(result) > 0:
                    return [dict(index.__dict__) for index in result]
                else:
                    return None
            else:
                return result
        except Exception, tx:
            service_log.error(str(tx))
            raise AssertionError(str(tx))
コード例 #13
0
ファイル: ssh_client.py プロジェクト: senchuk/letotest
 def command_execution(self, cls, flag_output=True):
     """ Выполнить оперцию на удалённой консоли.
     :param client: ссылка на удалённую консоль
     :param cls: команда, которую необходимо запустить
     :param flag_output: если флаг False, то результат не возвращаем
     :return: Результат выполненной операции, либо ничего
     """
     if self.passwd is not None:
         client = self.connect_by_user_password()
     elif self.keyfile is not None:
         client = self.connect_by_key_file()
     else:
         msg_error = "Not found password or keyfile for connect!"
         service_log.error(msg_error)
         raise AssertionError(msg_error)
     try:
         service_log.put("Execute: %s." % cls)
         if flag_output is True:
             stdin, stdout, stderr = client.exec_command("""%s""" % cls)
             data = dict(stdout=stdout.read(), stderr=stderr.read())
             if data["stderr"] != '':
                 service_log.put("Return. Output: %s" % str(stderr))
                 service_log.put("Execute success. Output: %s" % str(data))
                 raise AssertionError("Return error: %s" % str(stderr))
             service_log.put("Execute success. Output: %s" % str(data))
             return data
         else:
             client.exec_command("""%s""" % cls)
             service_log.put("Execute success.")
             return None
     except Exception, tx:
         service_log.error(str(tx))
         raise AssertionError(str(tx))
コード例 #14
0
    def execute(self, req, parameters=None):
        """ Выполнить запрос.
        :param req: сql-запрос
        :return: результат операции
        """

        session = None
        try:
            session = self.connect_plain_auth(user_name=self.user,
                                              password=self.passwd,
                                              port=self.port,
                                              key_space=self.name,
                                              contacts_point=self.host)
            if parameters is not None:
                # вариант с предварительной привязкой параметров, для работы с BLOB
                prepare_params = session.prepare(req)
                bound_params = prepare_params.bind(parameters)
                result = session.execute(bound_params)
            else:
                result = session.execute(req)
            service_log.put("Response from cassandra.")
            if isinstance(result, list):
                if len(result) > 0:
                    return [dict(index.__dict__) for index in result]
                else:
                    return None
            else:
                return result
        except Exception, tx:
            service_log.error(str(tx))
            raise AssertionError(str(tx))
コード例 #15
0
ファイル: test_warehouse.py プロジェクト: Maksim1988/test
    def test_createWares(self):
        """ Создание нескольких товаров.
        Создаём дубликаты из существующих товаров.
        Сравниваем значения от сервиса со значениями из БД.
        """
        service_log.run(self)

        # создаём данные для товары
        wares_req = list()
        for ware in self.list_wares:
            duplicate_ware = self.duplicate_ware_req(shop_id=ware['shop_id'],
                                                     category=ware['managed_category_id'],
                                                     content=ware["content"],
                                                     stock_state=ware['stock_state_id'],
                                                     ware_import_id=None)  # TODO: ware_import_id - deprecate 22.06.15
            wares_req.append(duplicate_ware)

        # создаём несколько товаров
        wares_warehouse = services.warehouse.root.tframed.createWares(wares_req)
        service_log.put("Created wares: %s" % wares_warehouse)

        for ware in wares_warehouse:
            # Возьмём значение из БД только что созданного товара по его идентификатору
            ware_cassandra = databases.db1.warehouse.get_wares_by_ware_id(ware.wareId)
            service_log.put("Ware from BD: %s" % ware_cassandra)

            # проверяем, что вернулось только один товар
            self.assertEqual(len(ware_cassandra), 1, "Found more than one item.")
            ware_cassandra = ware_cassandra[0]
            # десериализуем и обновляем контент
            self.update_data_content(ware_cassandra, self.deserialize_content(ware_cassandra['content']))
            #  проверяем полученно значение от сервиса со значениями из БД
            self.check_ware(ware_worker=ware, ware_dbase=ware_cassandra)
コード例 #16
0
ファイル: class_warehouse.py プロジェクト: Maksim1988/test
    def convert_WareContentDto_to_dict(content):
        """ Конвертировать словарь экземпляров класса для WareContentDto в словарь.
        :return: словарь с данными
        """
        wh = WarehouseMethods
        fields_currency = wh.elem_WareContentDto_to_dict(content.currencyFields)
        fields_enum = wh.elem_WareContentDto_to_dict(content.enumFields)
        fields_file = wh.elem_WareContentDto_to_dict(content.fileFields, 2)
        fields_integer = wh.elem_WareContentDto_to_dict(content.integerFields)
        fields_integer_range = wh.elem_WareContentDto_to_dict(content.integerRangeFields)
        fields_multi_enum = wh.elem_WareContentDto_to_dict(content.multiEnumFields, 2)
        fields_multi_text = wh.elem_WareContentDto_to_dict(content.multiTextFields)
        fields_scale = wh.elem_WareContentDto_to_dict(content.scaleFields)
        fields_text = wh.elem_WareContentDto_to_dict(content.textFields)

        p = dict(ENUM=fields_enum,
                 CURRENCY=fields_currency,
                 FILE_ID=fields_file,
                 INTEGER=fields_integer,
                 RANGE=fields_integer_range,
                 MULTI_ENUM=fields_multi_enum,
                 MULTI_TEXT=fields_multi_text,
                 SCALE=fields_scale,
                 TEXT=fields_text)
        service_log.put("Convert instance WareContentDto to dict: %s" % str(p))
        return p
コード例 #17
0
ファイル: test_warehouse.py プロジェクト: Maksim1988/test
    def test_getWaresFilter_categories_and_states(self):
        """

        :return:
        """
        # TODO: лажает
        #  берём произвольный товар из бд и по его shop_id находим остальные товары продавца
        wares = databases.db1.warehouse.get_wares_with_limit(100)
        ware_cassandra = self.get_random_ware(wares)
        wares_cassandra = databases.db1.warehouse.get_wares_by_shop_id(shop_id=ware_cassandra['shop_id'])
        self.deserialize_and_update_all_contents(wares_cassandra)

        categories, moderation, stock = self.select_categories_moderation_stock(wares_cassandra, ware_cassandra)
        filtered_wares_cassandra = self.chose_ware_ids_with_requirement(wares_cassandra, categories, moderation, stock)

        # по user_id - находим все товары, т.к. None - должен выключать фильтр
        wares_filter_dto = self.get_WaresFilterDto(user_id=ware_cassandra['shop_id'],
                                                   categories=categories,
                                                   moderation_states=moderation,
                                                   stock_states=stock,
                                                   limit=None, offset=None)

        # делаем выборку товаров из воркера
        wares_warehouse = services.warehouse.root.tframed.getWaresFilter(wares_filter_dto)
        service_log.put("Response wares from worker: %s" % str(wares_warehouse))

        self.check_wares(wares_cassandra=filtered_wares_cassandra, wares_worker=wares_warehouse)
コード例 #18
0
ファイル: test_main_menu.py プロジェクト: Maksim1988/test
 def test_click_home(self):
     """
     Title: Я могу находясь на любой странице сайта перейти на главную кликнув на "домик" в главном меню.
     """
     parameters = {
         '404': '',
         'section': str(self.section.categoryId),
         'category': str(self.category.categoryId),
         'sub-category': str(self.sub_category.categoryId),
         'shop': AccountingMethods.get_default_user_id('seller'),
     }
     url = lambda sm, p, ps: sm[p] if ps[p] is '' else sm[p] % ps[p]
     for param in parameters:
         service_log.put("Checking...['%s']" % param)
         base_url = self.driver.current_url
         source = self.driver.page_source
         url_page = url(self.SITE_MAP, param, parameters)
         self.get_page(self.driver, url_page)
         source_new = self.driver.page_source
         self.assertNotEqual(source, source_new, "Переход по url='%s' не произошел" % url)
         btn_home = self.get_element_navigate(self.driver, self.click_main.MAIN_MENU_HOME)
         HelpAuthCheckMethods.click_button(btn_home, sleep=3)
         current_url = self.driver.current_url
         source_home = self.driver.page_source
         self.assertEqual(base_url, current_url, "Переход на главную не произошел")
         self.assertNotEqual(source_home, source_new, "Переход на главную не произошел")
         service_log.put("PASS...['%s']" % param)
コード例 #19
0
ファイル: ssh_client.py プロジェクト: senchuk/letotest
 def modify(*args, **kwargs):
     request = func(*args, **kwargs)
     ex = args[0].__dict__["func"]
     service_log.put("Shell command: %s" % request)
     result = ex(request)
     service_log.put("Shell command result: %s" % result)
     return result
コード例 #20
0
ファイル: class_search.py プロジェクト: Maksim1988/test
 def good_card_short(driver, good):
     """
     Метод получает объект короткая карточка товара по заданным данным
     :param good: данные товара
     :return:
     """
     main_picture = good["content"][u'pictures'][u'value'][0].encode('utf-8')
     title = good["content"][u'title'][u'value'].encode('utf-8')
     min_stock = good["content"][u'min_stock'][u'value']
     try:
         price = str(good["content"][u'price'][u'value'][u'significand'])
         if 3 < len(price) < 7:
             price = price[:-3] + " " + price[-3:]   # здесь в кавычках неразрывные пробелы
         elif len(price) >= 7:
             price = price[:-6] + " " + price[-6:-3] + " " + price[-3:]
     except Exception:
         price = "---"
     g_card = {
         "card": Navigate.element_is_present(driver, Navigate.click_search.GOOD_CARD_BY_ID % good["ware_id"]),
         "picture": Navigate.element_is_present(driver, Navigate.click_search.GOOD_PICTURE % (good["ware_id"],
                                                                                              main_picture)),
         "title": Navigate.element_is_present(driver, Navigate.click_search.GOOD_TITLE % (good["ware_id"], title)),
         "price": Navigate.element_is_present(driver, Navigate.click_search.GOOD_PRICE % (good["ware_id"], price)),
         "min_stock": Navigate.element_is_present(driver, Navigate.click_search.GOOD_MIN_STOCK % (good["ware_id"],
                                                                                                  min_stock)),
     }
     service_log.put("Короткая карточка товара найдена. Id: %s" % good["ware_id"])
     return g_card
コード例 #21
0
ファイル: class_accounting.py プロジェクト: Maksim1988/test
    def recover_user_password(link_db):
        """ Восстановить пароль пользователя и соль пользователя.
        Если переменная с паролем и идентификатором пользователь не пустые, обновлем пароль у этого пользователя.
        Если переменная с солью пользователя не пустая, восстанавливаем и её (обратная совеместимость).
        Если переменная с паролем и идентификатором пользователь были пустые, возвращаем False.
        :param link_db: ссылка на коннектор БД, например: databases.db1 (для гибкости схем запуска автотестов)
        :return: type(bool)
        """
        # TODO: Т.к. номер БД влияет на корректность запросов, передаем линк на коннектор БД для заданной схемы
        if AccountingMethods.SAVE_HASH_USER_PASSWORD and AccountingMethods.SAVE_HASH_USER_ID is not None:
            service_log.put("Try recover password hash for user ID's: %s" % AccountingMethods.SAVE_HASH_USER_ID)
            # databases.db1.accounting.update_user_password(AccountingMethods.SAVE_HASH_USER_ID,
            # AccountingMethods.SAVE_HASH_USER_PASSWORD)
            link_db.accounting.update_user_password(AccountingMethods.SAVE_HASH_USER_ID,
                                                    AccountingMethods.SAVE_HASH_USER_PASSWORD)
            service_log.put("Recovered password hash: %s" % AccountingMethods.SAVE_HASH_USER_PASSWORD)

            # если соль была сохранена
            if AccountingMethods.SAVE_HASH_USER_SALT is not None:
                service_log.put("Try recover salt for user ID's: %s" % AccountingMethods.SAVE_HASH_USER_SALT)
                # databases.db1.accounting.update_user_salt(AccountingMethods.SAVE_HASH_USER_ID,
                # AccountingMethods.SAVE_HASH_USER_SALT)
                link_db.accounting.update_user_salt(AccountingMethods.SAVE_HASH_USER_ID,
                                                    AccountingMethods.SAVE_HASH_USER_SALT)
                service_log.put("Recovered salt: %s" % AccountingMethods.SAVE_HASH_USER_SALT)

            AccountingMethods.SAVE_HASH_USER_ID = None
            AccountingMethods.SAVE_HASH_USER_PASSWORD = None
            AccountingMethods.SAVE_HASH_USER_SALT = None
            return True
        else:
            service_log.put("The variable with the user's password or ID is empty. Password recovery user cancelled.")
            return False
コード例 #22
0
ファイル: test_session_new.py プロジェクト: Maksim1988/test
    def test_getSessionById_one_ctx(self, only_active=True):
        """ Проверка getSessionById с одним контекстом.
        Возвращает сессию по ID. Сессия включает все свои контексты.
        Если onlyActive == true, возвращаются только активные контексты.
        :return:
        """
        service_log.run(self)
        # Создаем новую сессию, дополнительные котексты для неё
        context_params = self.generate_default_session()
        params_req = self.get_SessionContextRequestDto(**context_params)
        session = services.session.root.tframed.initSession(params_req)
        service_log.put("Get session data: %s" % session)

        # собираем информацию о контекстах до инвалидации и получаем контекс сессии по его идентификатору
        before_meta_context, before_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)
        result = services.session.root.tframed.getSessionById(session.sessionId, only_active)

        # собираем информацию о контекстах и сессии после инвалидации
        after_meta_context, after_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)
        this_session, list_context_ids = self.get_information_about_session(session.sessionId)

        self.check_session_changed_last_timestamp(this_session, session)
        self.assertEqual(len(session.contexts), len(list_context_ids), "Not equal to data from redis.")
        self.assertEqual(len(list_context_ids), 1, "Too many contexts")
        self.assertDictEqual(after_data_context, before_data_context)
        self.check_context_meta_data(after_meta_context, before_meta_context)
        self.check_context(session.sessionId, result.contexts[0], meta_context=after_meta_context, data_context=after_data_context)
コード例 #23
0
ファイル: class_analytics.py プロジェクト: Maksim1988/test
    def get_js_scripts2(segment_url='http://example.com/segment'):
        """ Получить JavaScript для внедренния его в страницу и перехвата метрик.
        P.S: Обновленный скрипт
        :param: url-адрес для отсылки перехваченного сообщения.
        :return: type(str)
        """

        service_log.put("Response url for script: %s" % segment_url)
        p = """(function(url){

                function sendData(method, args) {
                    var data = {
                        segmentMethod: method,
                        // Делаем из args нормальный массив
                        params: Array.prototype.slice.call(args, 0)
                    };
                    var xhr = new XMLHttpRequest();
                    xhr.open("POST", url);
                    xhr.send(JSON.stringify(data));
                }

                ["identify", "track", "page", "alias"].forEach(function(method){
                    var oldMeth = analytics[method];

                    analytics[method] = function() {
                        sendData(method, arguments);
                        oldMeth.apply(this, arguments);
                    };
                });

            })('%s' /* урл для отправки данных */);""" % segment_url
        service_log.put("Get JavaScript for load in page")
        return p
コード例 #24
0
ファイル: test_session_new.py プロジェクト: Maksim1988/test
    def test_getContextForSession_one_ctx(self, context_type="auth", only_active=True):
        """ Проверка getContextForSession с одним контекстом и разнами типа контекстов.
        Возвращает контекст данного типа для данной сессии.
        Если onlyActive == true, контекст будет возвращен только если он активен.
        """
        service_log.run(self)
        # Создаем новую сессию, дополнительные котексты для неё
        context_params = self.generate_default_session(context_type)
        params_req = self.get_SessionContextRequestDto(**context_params)
        session = services.session.root.tframed.initSession(params_req)
        service_log.put("Get session data: %s" % session)

        # собираем информацию о контекстах до инвалидации и получаем контекс сессии по его идентификатору
        before_meta_context, before_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)
        result = services.session.root.tframed.getContextForSession(session.sessionId, context_type, only_active)

        # собираем информацию о контекстах и сессии после инвалидации
        after_meta_context, after_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)
        this_session, list_context_ids = self.get_information_about_session(session.sessionId)

        self.check_session_changed_last_timestamp(this_session, session)
        self.assertEqual(len(session.contexts), len(list_context_ids), "Not equal to data from redis.")
        self.assertEqual(len(list_context_ids), 1, "Too many contexts")
        self.assertDictEqual(after_data_context, before_data_context)
        self.check_context_meta_data(after_meta_context, before_meta_context)
        self.check_context(session.sessionId, result, meta_context=after_meta_context, data_context=after_data_context)
コード例 #25
0
ファイル: test_session_new.py プロジェクト: Maksim1988/test
    def test_getContextById_one_inactive_ctx_onlyActive_true(self):
        """ Проверка возвращения контекста для одной сессии с одним контекстом, onlyActive флаг = False и True.
        Если onlyActive == true, контекст будет возвращен только если он активен.
        Если контекст активен и refresh == true, его lastAccessTimestamp и expirationTimestamp будут обновлены.
        """
        service_log.run(self)
        only_active = True
        # Создаем новую сессию, дополнительные котексты для неё
        params_req = self.get_SessionContextRequestDto(**self.generate_default_session())
        session = services.session.root.tframed.initSession(params_req)
        service_log.put("Get session data: %s" % session)
        # инвалидируем контекст
        services.session.root.tframed.invalidateContext(session.contexts[0].contextId)
        service_log.put("Get session data after invalidate context: %s" % session)

        # собираем информацию о контекстах до инвалидации и получаем контекс сессии по его идентификатору
        before_meta_context, before_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)
        result = services.session.root.tframed.getContextById(session.contexts[0].contextId, only_active)

        # собираем информацию о контекстах после инвалидации
        this_session, list_context_ids = self.get_information_about_session(session.sessionId)
        after_meta_context, after_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)

        self.assertIsNone(result)
        self.check_session_changed_last_timestamp(this_session, session)
        self.assertEqual(len(session.contexts), len(list_context_ids), "Not equal to data from redis.")
        self.assertEqual(len(list_context_ids), 1, "Too many contexts")
        self.assertDictEqual(after_data_context, before_data_context)
        self.check_context_meta_data(after_meta_context, before_meta_context)
コード例 #26
0
ファイル: test_session_new.py プロジェクト: Maksim1988/test
    def test_invalidateSession(self):
        """ Проверка инвалидации всех активных контекстов сессии.
        """
        service_log.run(self)
        # Создаем новую сессию, дополнительные котексты для неё
        params_req = self.get_SessionContextRequestDto(**self.generate_default_session())
        session = services.session.root.tframed.initSession(params_req)
        service_log.put("Get session data: %s" % session)

        # собираем информацию о контекстах до инвалидации и инвалидируем контектсы сессии
        before_meta_context, before_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)
        result = services.session.root.tframed.invalidateSession(session.sessionId)
        service_log.put("Get session data after invalidate context: %s" % session)

        # собираем информацию о сессии и контекстах после инвалидации
        this_session, list_context_ids = self.get_information_about_session(session.sessionId)
        after_meta_context, after_data_context = self.get_contexts_from_redis(session.contexts[0].contextId)

        # проверка, что данные кроме статуса не изменились (и кроме некоторых таймеров)
        self.assertIsNone(result)
        self.check_session(this_session, session)
        self.check_context_meta_data_without_status_and_not_changed_expiration(after_meta_context, before_meta_context)
        self.assertEqual(len(session.contexts), len(list_context_ids), "Not equal to data from redis.")
        self.assertEqual(len(list_context_ids), 1, "Too many contexts")
        self.assertDictEqual(after_data_context, before_data_context)
        self.assertEqual(self.get_context_status(after_meta_context['contextStatus']), 2, "Status context not REVOKED.")
コード例 #27
0
    def execute(self, req, fetch='all'):
        """ Выполнить запрос.
        :param req: nosql-запрос
        :param fetch: тип выборки строк запроса
        :return: результат операции
        """
        try:
            self.cursor_now = self.connect()
            # Динамическое выполнение кода, параметр type - название функции в пуле коннекта
            if type(req) is dict:
                local_code = {"cursor_now": self.cursor_now}

                # Определяем количество параметров для передачи их функции
                if len(req) > 1:
                    name_funct = req.pop("type")
                    code_execution = """result = cursor_now.%s(**%s)""" % (name_funct, req)
                elif len(req) == 1:
                    code_execution = """result = cursor_now.%s()""" % (req.pop("type"))
                else:
                    msg = "Params for function is empty."
                    service_log.error(msg)
                    raise AssertionError(msg)

                service_log.put("Dynamic code execution: %s." % code_execution)
                exec code_execution in local_code
                service_log.put("Result dynamic code execution: %s." % local_code["result"])
                return local_code["result"]
            else:
                msg = "Not found type operation for redis."
                service_log.error(msg)
                raise AssertionError(msg)
        except Exception, tx:
            service_log.error(str(tx))
            raise AssertionError(str(tx))
コード例 #28
0
ファイル: class_accounting.py プロジェクト: Maksim1988/test
 def create_params_by_duplicate_for_UserDto(user_db):
     """ Создаём общие параметры для UserDto.
     :param user_db: дубликат пользователя
     :return: словарь с данными
     """
     import time
     pr_name = int(time.time())
     mas = {"user_id": None,
            "reg_time": pr_name, "login_time": None, "activ_time": None,
            "a_status": None,
            "online_status": None,
            "auth": None, "login": None,
            "auth_type": None,
            "avatar_id": user_db['avatar_id'],
            "gender": 1,
            "phone": None,
            "email": "*****@*****.**" % (str(pr_name), random.randint(0, 1000)),
            "name1": str(pr_name),
            "name2": str(pr_name),
            "name3": "autotest_" + str(pr_name),
            "city": user_db['city'],
            "country": user_db['country'],
            "shop_address": user_db['shop_address'],
            "inn": user_db['inn'], "kpp": user_db['kpp'], "ogrn": user_db['ogrn'],
            "legal_address": user_db['legal_address'], "actual_address": user_db['actual_address'],
            "b_bic": user_db['bank_bic'], "b_contact": user_db['bank_name_and_address'],
            "b_account": user_db['bank_account'], "b_corr": user_db['bank_correspondent_account'],
            "name4": str(user_db['legal_name']) + str(pr_name),
            "r_news": user_db['receive_site_news'], "r_notifications": user_db['receive_notifications'],
            "r_reminders": user_db['receive_reminders'], "wants_seller": user_db['wants_to_be_seller'],
            "a_nonexpired": user_db['account_non_expired'], "a_nonlocked": user_db['account_non_locked'],
            "locale": user_db['locale'],
            "shop": None}
     service_log.put("Dict for obj: %s" % str(mas))
     return mas
コード例 #29
0
ファイル: db_oracle.py プロジェクト: senchuk/letotest
 def close(self, cursor):
     """ Закрываем соединение.
     :param cursor: ссылка на курсор
     """
     # cursor.close()
     # self.conn.close()
     service_log.put("Closing opened oracle connections.")
コード例 #30
0
ファイル: class_accounting.py プロジェクト: Maksim1988/test
 def get_status_id(name):
     """ Взять идентификатор аккаунт статуса пользователя.
     :param name: наименование статуса
     :return: идантификатор статуса
     """
     service_log.put("Name account status: %s" % AccountStatus._NAMES_TO_VALUES[name])
     return AccountStatus._NAMES_TO_VALUES[name]
コード例 #31
0
ファイル: class_main_menu.py プロジェクト: Maksim1988/test
 def cat_sub_cat(self, driver, name_ui, category_dict, section, section_name):
     """
     Проверка подкатегории у которой родительская категория - категория
     :param driver:
     :param name_ui:
     :param category_dict:
     :param section:
     :param section_name:
     :return:
     """
     # Получаем категории раздела
     category_id_list = self.get_categories_list(section)
     category_tree = self.get_categories_tree(category_dict, category_id_list)
     # Проверка, что из апи пришли категории которые принадлежат секции меню
     for name in name_ui:
         service_log.put("CHECK. Sub-category in category '%s'" % name)
         cat_clk = Navigate.get_element_navigate(driver, self.xpath_category % name, mode=None)
         Auth.click_button(cat_clk)
         category = [cat for cat in category_tree if cat.localizedName == name]
         # Получаем подкатегории из категории раздела
         sub_id_list = self.get_categories_list(category[0])
         sub_tree = self.get_categories_tree(category_dict, sub_id_list)
         sub_name_list = [sub.localizedName for sub in sub_tree]
         # Проверка возвращенных апи и показанных подкатегорий
         obj_ui_sub = self.get_sub_categories(driver)
         name_ui_sub = [obj.text.encode('utf-8') for obj in obj_ui_sub]
         # Получаем названия подкатегорий UI, которых нет в списке подкатегорий полученном из БД
         sub = lambda db, ui: filter(lambda x: x not in db, ui)
         sub_cat = sub(sub_name_list, name_ui_sub)
         err_msg = "В '%s -> %s' содержится подкатегория '%s', которой нет в ответе АПИ: %s"
         self.assertFalse(sub_cat, err_msg % (section_name, name, sub_cat, sub_name_list))
         service_log.put("PASS. Sub-category in category '%s'" % name)
コード例 #32
0
ファイル: class_warehouse.py プロジェクト: Maksim1988/test
    def get_WareContentDto(int_fields=None, range_fields=None, enum_fields=None, multi_enum_fields=None,
                           currency_fields=None, text_fields=None, multi_text_fields=None, scale_fields=None,
                           file_fields=None):
        """Контентные поля товара.
        P.S: Должны соответствовать полям, определенным в описании категории товара.

        :param int_fields: Поле товара с целым значением, <IntegerFieldDto>
        :param range_fields: Поле товара со значением в виде целочисленного интервала, <IntegerRangeFieldDto>
        :param enum_fields: Поле товара с несколькими значениями из енума, <EnumFieldDto>
        :param multi_enum_fields: Поле товара с несколькими значениями из енума, <MultiEnumFieldDto>
        :param currency_fields: Поле товара со значением валютного типа, <CurrencyFieldDto>
        :param text_fields: Поле товара с текстовым значением, <TextFieldDto>
        :param multi_text_fields: Поле товара с несколькими текстовыми значениями, <MultiTextFieldDto>
        :param scale_fields: Поле товара, содержащее значение из какой-то шкалы, <ScaleFieldDto>
        :param file_fields: Поле товара с одним или несколькими файловыми значениями, <FileIdFieldDto>
        :return: <WareContentDto>
        """
        p = WareContentDto(integerFields=int_fields,
                           integerRangeFields=range_fields,
                           enumFields=enum_fields,
                           multiEnumFields=multi_enum_fields,
                           currencyFields=currency_fields,
                           textFields=text_fields,
                           multiTextFields=multi_text_fields,
                           scaleFields=scale_fields,
                           fileFields=file_fields)
        service_log.put("Get obj WaresFilterDto: %s" % str(p))
        return p
コード例 #33
0
 def turn_off_android_emulator(driver):
     """ Выключить устройство.
     :param driver: ссылка на драйвер
     :return: True
     """
     service_log.put(
         "Initiated the process to TURN OFF the Android emulator...\n")
     driver.long_press_keycode(26)
     return True
コード例 #34
0
 def get_data_by_account(self, param):
     """ Пример получения информацию из таблицы <name_table> по соответствию параметра param.
     :param param: параметр для поиска условия
     :return: данные таблицы <name_table>
     """
     # todo: слишком общий метод - делает код запутанным
     p = """SELECT * FROM tbg.crp_agreements WHERE accountid = %s""" % param
     service_log.put("Select user data: %s" % p)
     return p
コード例 #35
0
ファイル: db_oracle.py プロジェクト: senchuk/letotest
 def modify(*args, **kwargs):
     print args
     print kwargs
     request = func(*args, **kwargs)
     ex = args[0].__dict__["func"].im_self.execute2
     service_log.put("Procedure SQL-query: %s" % request)
     result = ex(request, args[1], args[2])
     service_log.put("Procedure SQL-query result: %s" % result)
     return result
コード例 #36
0
ファイル: common_utils.py プロジェクト: senchuk/letotest
def round_unix_to_sec(tk):
    """ Округление unix-времени до секунд.
    Пример: 1428410576941 -> 1428410577
    :param tk: unix-время, type(long)
    :return: округленное unix-время, type(long)
    """
    ntk = int(round(float("%s.%s" % (tk[:-3], tk[-3:]))))
    service_log.put(
        "Round the UNIX time to seconds, source=%s -> convert=%s." % (tk, ntk))
    return ntk
コード例 #37
0
 def connect(self):
     """ Устанавливает коннект с redis.
     Пример: redis.ConnectionPool(host='vm-fedor.home.oorraa.net', port=6379, db=0)
     :return: ссылка на коннект
     """
     self.pool = redis.ConnectionPool(**self.auth)
     service_log.put("Create connection pool: %s" % self.pool)
     r = redis.Redis(connection_pool=self.pool)
     service_log.put("Connect with redis is success: %s" % r)
     return r
コード例 #38
0
    def __init__(self, host, port, name, user=None, passwd=None):
        # параметры аутетификации к БД
        self.auth = {"host": host, "port": port, "db": name, "user": user, "password": passwd}
        self.auth = funcy.compact(self.auth)
        service_log.put("Get params for authenticate with redis: %s" % self.auth)

        # параметры для работы внутри БД
        self.pool = None
        self.cursor = None
        self.cursor_now = None
コード例 #39
0
ファイル: db_oracle.py プロジェクト: senchuk/letotest
 def connect(self):
     """ Коннектимся с базой.
     :param cursor_view: вид в котором возвращается ответ (по умолчанию - dict, словарь)
     :return: возвращаем курсор
     """
     connection_str = '%s/%s@%s:%s/%s' % (self.user, self.passwd, self.host,
                                          self.port, self.name)
     self.conn = cx_Oracle.connect(connection_str)
     cursor = self.conn.cursor()
     service_log.put("Open oracle connections.")
     return cursor
コード例 #40
0
    def modify(*args, **kwargs):
        params_funct = func(*args, **kwargs)
        ex = args[0].__dict__["func"]
        service_log.put("NoSQL-query: %s" % str(params_funct))
        result = None

        if type(params_funct) is dict:
            result = ex(params_funct)

        service_log.put("NoSQL-query result: %s" % result)
        return result
コード例 #41
0
 def modify(*args, **kwargs):
     params_funct = func(*args, **kwargs)
     ex = args[0].__dict__["func"]
     service_log.put("CQL-query: %s" % str(params_funct))
     if isinstance(params_funct, tuple):
         # если передали несколько параметров к методу
         result = ex(*params_funct)
     else:
         result = ex(params_funct)
     service_log.put("CQL-query result: %s" % result)
     return result
コード例 #42
0
 def update_data_by_id(self, param1, param2):
     """ Изменить соль пользователя.
     :param param1: <param1>
     :param param2: <param2>
     :return: None
     """
     # todo: слишком общий метод - делает код запутанным
     p = "UPDATE <name_table> SET <param1>='%s' WHERE <param2>='%s';" % (
         param1, param2)
     service_log.put("Update user data: %s" % p)
     return p
コード例 #43
0
ファイル: db_oracle.py プロジェクト: senchuk/letotest
 def modify(*args, **kwargs):
     request = func(*args, **kwargs)
     ex = args[0].__dict__["func"]
     service_log.put("SQL-query: %s" % request)
     if request[:6].upper() == "UPDATE":
         result = ex(request, "update")
     elif request[:6].upper() == "INSERT":
         result = ex(request, "insert")
     else:
         result = ex(request, "all")
     service_log.put("SQL-query result: %s" % result)
     return result
コード例 #44
0
 def find_text_view_and_click(self, text, num_text_view, time_sleep=0):
     """ Найти на странице TextView с определенным названием и нажать его.
     :return: True
     """
     el = self.driver.find_elements_by_class_name(
         'android.widget.TextView')[num_text_view]
     service_log.put("Element: %s" % str(el))
     self.assertEqual(el.text, text,
                      "This element not have text - %s." % text)
     el.click()
     time.sleep(time_sleep)
     return True
コード例 #45
0
ファイル: exec_cmd.py プロジェクト: senchuk/letotest
    def command_exec(cmd, flag=False):
        """ Выполнить комманду через консоль.
        :param cmd: комманда для выполнения
        :param flag: флаг, дожидаться ли завершения выполнения комманды
        :return: ссылка на Popen
        """
        service_log.put("Command execute: %s" % cmd)
        pipe = subprocess.PIPE
        s_process = subprocess.Popen(cmd, shell=True, stdin=pipe, stdout=pipe, stderr=subprocess.STDOUT)

        if flag:
            s_process.wait()
        return s_process
コード例 #46
0
ファイル: db_oracle.py プロジェクト: senchuk/letotest
 def execute(self, req, fetch='all'):
     """ Выполнить запрос.
     :param req: sql-запрос
     :param fetch: тип выборки строк запроса
     :return: результат операции
     """
     try:
         self.cursor_now = self.connect()
         self.cursor_now.execute(req)
         if fetch == "all":
             result = rows_to_dict_list(self.cursor_now)
             service_log.put("Fetchall rows.")
             return result
         elif fetch == "one":
             result = self.cursor_now.fetchone()
             service_log.put("Fetchone rows.")
             return result
         elif fetch == "update" or fetch == "insert":
             service_log.put("No fetch rows. Operation by UPDATE.")
             self.conn.commit()
             service_log.put("Commit operation UPDATE.")
             return None
     except Exception, tx:
         service_log.error(str(tx))
         raise AssertionError(str(tx))
コード例 #47
0
    def connect_plain_auth(self, user_name, password, port, key_space,
                           contacts_point):
        """ Аутентификация cassandra через имя и пароль.
        :param user_name: имя пользователя
        :param password: пароль пользователя
        :return: ссылка на сессию
        """

        try:
            service_log.put("Create obj PlainTextAuthProvider for cassandra.")
            auth_provider = PlainTextAuthProvider(username=user_name,
                                                  password=password)
            service_log.put("Create cluster for cassandra.")
            self.cluster = Cluster(contact_points=contacts_point,
                                   port=port,
                                   auth_provider=auth_provider)
            service_log.put("Create connect with cassandra.")
            session = self.cluster.connect(keyspace=key_space)
            service_log.put("Create session for cluster cassandra.")
            return session
        except Exception, tx:
            msg_error = "Connect with casandra not success!"
            service_log.error(msg_error)
            service_log.error("%s" % str(tx))
            raise msg_error
コード例 #48
0
ファイル: db_postgresql.py プロジェクト: senchuk/letotest
 def execute(self, req, fetch='all', cursor_view="dict"):
     """ Выполнить запрос.
     :param req: sql-запрос
     :param fetch: тип выборки строк запроса
     :return: результат операции
     """
     what_cursor_view = lambda view, element: dict(
         element) if view == "dict" else element
     try:
         self.cursor_now = self.connect(cursor_view=cursor_view)
         self.cursor_now.execute(req)
         if fetch == "all":
             result = self.cursor_now.fetchall()
             service_log.put("Fetchall rows.")
             return [what_cursor_view(cursor_view, elem) for elem in result]
         elif fetch == "one":
             result = self.cursor_now.fetchone()
             service_log.put("Fetchone rows.")
             return what_cursor_view(cursor_view, result)
         elif fetch == "update" or fetch == "insert":
             service_log.put("No fetch rows. Operation by UPDATE.")
             self.conn.commit()
             service_log.put("Commit operation UPDATE.")
             return None
     except Exception, tx:
         service_log.error(str(tx))
         raise AssertionError(str(tx))
コード例 #49
0
ファイル: exec_cmd.py プロジェクト: senchuk/letotest
 def start_cmd_appium(self):
     """ Запустить Appium через скрипт в консоле.
     Вытягиваем из конфига main.cfg путь до Appium и стратуем через консоль.
     P.S: http://www.guru99.com/introduction-to-appium.html
     """
     appium = configs.config["mobile"]["windows_path_appium"]
     name_machine = configs.config["env_info"]["android_name"]
     cmd = """%s\\node_modules\.bin\\appium.cmd --avd %s""" % (appium, name_machine)
     service_log.put("Command execute: %s" % cmd)
     pipe = subprocess.PIPE
     subprocess.Popen(cmd, shell=True, stdin=pipe, stdout=codecs.open("./appium_out.log", "a", encoding="utf-8"),
                      stderr=codecs.open("./appium_error.log", "a", encoding="utf-8"))
     time.sleep(10)
     return True
コード例 #50
0
ファイル: ssh_client.py プロジェクト: senchuk/letotest
    def sudo_command_execution(self, cls, passwd=None):
        """
        Make a remote command execution with sudo by ssh
        Return result
        :param cls: remote command to run
        """
        client = self.connect()
        channel = None
        try:
            service_log.put("Open SSH chanel.")
            channel = client.get_transport().open_session()
            service_log.put("Open SSH chanel success.")

            channel.get_pty()
            channel.settimeout(5)

            service_log.put("Execute: %s." % cls)
            #self.channel.exec_command('sudo -i')
            channel.exec_command('sudo %s' % cls)
            if passwd is not None:
                channel.send(self.passwd+'\n')
            data = channel.recv(1024)
            service_log.put("Execute success. Output: %s" % str(data))
            return data
        except Exception, tx:
            service_log.error(str(tx))
            raise AssertionError(str(tx))
コード例 #51
0
ファイル: thrift4req.py プロジェクト: senchuk/letotest
 def clear_connect_to_service():
     """ Закрываем соединение.
     """
     try:
         if 'thrift_transport' in globals():
             globals()['thrift_transport'].close()
             del globals()['thrift_transport']
             del globals()['prefix_serv']
             del globals()['path_serv']
             service_log.put("Transport - close.")
         else:
             service_log.put("Warning: The connection is already closed.")
     except Thrift.TException, tx:
         service_log.error(tx.message)
コード例 #52
0
ファイル: thrift4req.py プロジェクト: senchuk/letotest
 def import_libs(self, name_prefix):
     try:
         # Производим динамический импорт сгенериррованных файлов для Thrift
         path = TVariables.thrift.imports[name_prefix + "_worker"]
         service_log.put("Get path by worker: %s" % path)
         get_lib = lambda path_lib: path_lib[path_lib.rfind(".") + 1:]
         self.worker = __import__(path, fromlist=[get_lib(path)])
         service_log.put("Import libs worker: path=%s, name=%s" %
                         (path, get_lib(path)))
         return name_prefix
     except ImportError, tx:
         error_message = "Import lib for worker - %s" % tx
         service_log.error(error_message)
         raise AssertionError(error_message)
コード例 #53
0
ファイル: common_utils.py プロジェクト: senchuk/letotest
def get_an_error(funct, *params):
    """ Ожидаем получить ошибку.
    Например потому что элемент не должн быть найден.
    :param funct: исполняемая функция
    :param params: параметры к исполняемой функции
    :return:
    """
    tx = None
    try:
        funct(*params)
    except Exception, tx:
        service_log.put("Expected error - successful!")
        service_log.put("Error: %s" % str(tx))
        return True
コード例 #54
0
ファイル: db_postgresql.py プロジェクト: senchuk/letotest
 def connect(self, cursor_view="dict"):
     """ Коннектимся с базой.
     :param cursor_view: вид в котором возвращается ответ (по умолчанию - dict, словарь)
     :return: возвращаем курсор
     """
     cursor_factory = psycopg2.extras.DictCursor if cursor_view == "dict" else psycopg2.extras.NamedTupleCursor
     self.conn = psycopg2.connect(host=self.host,
                                  port=self.port,
                                  dbname=self.name,
                                  user=self.user,
                                  password=self.passwd,
                                  cursor_factory=cursor_factory)
     cursor = self.conn.cursor()
     service_log.put("Open postgresql connections.")
     return cursor
コード例 #55
0
ファイル: ssh_client.py プロジェクト: senchuk/letotest
 def connect_by_key_file(self):
     """ Коннектимся к удалённой консоли по ключу.
     :return: возвращаем ссылку на терминал
     """
     try:
         client = paramiko.SSHClient()
         type_host_key = paramiko.AutoAddPolicy()
         client.set_missing_host_key_policy(type_host_key)  # add ssh-key in list keys — file .ssh/known_hosts
         client.connect(hostname=self.host, username=self.user, port=int(self.port), key_filename=self.keyfile)
         service_log.put("Open SSH connections.")
         return client
     except Exception, tx:
         msg_error = "SSH not connections! /n %s" % tx
         service_log.error(msg_error)
         raise msg_error
コード例 #56
0
ファイル: common_utils.py プロジェクト: senchuk/letotest
def generate_sha256(source_str, salt=None):
    """ Генератор строки в хеш SHA-256
    :param source_str: исходная строка
    :return: хеш
    """
    hhh = hashlib.sha256()

    # работа с паролем у которого есть соль
    if salt is None or salt == '':
        hhh.update(source_str)
    else:
        hhh.update(source_str + "{" + salt + "}")

    new_hash = hhh.hexdigest()
    service_log.put("Generate for new password (%s) its hash (%s)." %
                    (source_str, new_hash))
    return new_hash
コード例 #57
0
ファイル: exec_cmd.py プロジェクト: senchuk/letotest
 def kill_android_emulator(self, name="emulator-x86.exe"):
     """ Убить процесс отвечающий за Android эмулятор. """
     service_log.put("Initiated close process the Android emulator...\n")
     result = self.find_process_by_name(name)
     if not result:
         service_log.warning("Process Android emulator not found!\n")
         return False
     cmd_work.kill_pid(result[0]["pid"])
     flag = int(time.time())
     while bool(self.find_process_by_name(name)):
         # ждем 5 минут до завршения работы эмулятора
         if flag + (60*5) > int(time.time()):
             service_log.warning("Close process the Android emulator - Fail!\n")
             return False
         else:
             time.sleep(5)
     service_log.put("Close process the Android emulator - success.\n")
     return True