コード例 #1
0
    def test_purchase_choice_error(self):
        self.config = PlebNetConfig.get
        self.triblerwallet = TriblerWallet.__init__
        self.settings = plebnet_settings.Init.wallets_testnet_created
        self.purchase = blueAngel.BlueAngelHost.purchase
        self.logger = Logger.warning

        self.error = Logger.error
        self.issue = git_issuer.handle_error

        PlebNetConfig.get = MagicMock(side_effect=self.side_effect)
        plebnet_settings.Init.wallets_testnet_created = MagicMock(
            return_value=None)
        TriblerWallet.__init__ = MagicMock(return_value=None)
        blueAngel.BlueAngelHost.purchase = MagicMock(side_effect=Exception)
        Logger.warning = MagicMock()
        Logger.error = MagicMock()
        git_issuer.handle_error = MagicMock()

        self.assertEquals(cloudomate.purchase_choice(PlebNetConfig()),
                          plebnet_settings.FAILURE)

        PlebNetConfig.get = self.config
        TriblerWallet.__init__ = self.triblerwallet
        plebnet_settings.Init.wallets_testnet_created = self.settings
        blueAngel.BlueAngelHost.purchase = self.purchase
        Logger.warning = self.logger
        Logger.error = self.error
        git_issuer.handle_error = self.issue
コード例 #2
0
def check():
    """
    The method is the main function which should run periodically. It controls the behaviour of the agent,
    starting Tribler and buying servers.
    """
    global config, dna
    logger.log("Checking PlebNet", log_name)

    # Read general configuration
    if settings.wallets_testnet_created():
        os.environ['TESTNET'] = '1'
    config = PlebNetConfig()
    dna = DNA()
    dna.read_dictionary()

    # check if own vpn is installed before continuing
    if not check_vpn_install():
        logger.error("!!! VPN is not installed, child may get banned !!!",
                     "Plebnet Check")

    # Requires time to setup, continue in the next iteration.
    if not check_tribler():
        return

    if not settings.wallets_initiate_once():
        create_wallet()
    select_provider()

    # These need a matchmaker, otherwise agent will be stuck waiting.
    if market_controller.has_matchmakers():
        update_offer()
        attempt_purchase()
    install_vps()
コード例 #3
0
    def test_purchase_choice_vpn(self):
        self.config = PlebNetConfig.get
        self.triblerwallet = TriblerWallet.__init__
        self.settings = plebnet_settings.Init.wallets_testnet_created
        self.purchase = azirevpn.AzireVpn.purchase
        self.logger = Logger.warning
        self.host = plebnet_settings.Init.vpn_host

        PlebNetConfig.get = MagicMock(side_effect=self.side_effect)
        plebnet_settings.Init.wallets_testnet_created = MagicMock(
            return_value=None)
        TriblerWallet.__init__ = MagicMock(return_value=None)
        azirevpn.AzireVpn.purchase = MagicMock(return_value=('Hash', 0))
        Logger.warning = MagicMock()
        plebnet_settings.Init.vpn_host = MagicMock(return_value='AzireVPN')

        self.assertEquals(cloudomate.purchase_choice_vpn(PlebNetConfig()),
                          plebnet_settings.SUCCESS)

        PlebNetConfig.get = self.config
        TriblerWallet.__init__ = self.triblerwallet
        plebnet_settings.Init.wallets_testnet_created = self.settings
        azirevpn.AzireVpn.purchase = self.purchase
        Logger.warning = self.logger
        plebnet_settings.Init.vpn_host = self.host
コード例 #4
0
ファイル: core.py プロジェクト: codesalad/PlebNet
def check():
    """
    The main function to run every interval
    :return: None
    :rtype: None
    """
    global config, dna

    logger.log("Checking PlebNet", log_name)
    config = PlebNetConfig()

    # TODO: DNA static singular maken --> dan kan dit weg
    dna = DNA()
    dna.read_dictionary()

    # these require time to setup, continue in the next iteration
    if not check_tribler():
        return
    if not check_tunnel_helper():
        return

    # Prepare Cloudomate
    if not settings.wallets_initiate_once():
        create_wallet()

    select_provider()
    update_offer()
    attempt_purchase()
    install_vps()
コード例 #5
0
    def test_install_available_servers(self, mock1, mock2, mock3, mock4):
        config = PlebNetConfig()
        config.get('bought').append(test_bought)
        config.save()

        server_installer.install_available_servers(config, self.test_dna)

        self.assertEqual(config.get('installed'), [{'linevast': False}])
        self.assertEqual(config.get('bought'), [])
コード例 #6
0
    def test_install_available_servers(self, mock1, mock2, mock3, mock4, mock5, mock6, mock7, mock8, mock9, mock10, mock11):
        config = PlebNetConfig()
        config.get('bought').append(test_bought)
        config.save()

        server_installer.install_available_servers(config, self.test_qtable)

        self.assertEqual(config.get('installed'), [test_bought])
        self.assertEqual(config.get('bought'), [])
コード例 #7
0
    def test_update_offer(self):
        self.config = PlebNetConfig.get
        self.calculate_price = cloudomate.calculate_price
        self.placeoffer = cloudomate.place_offer

        PlebNetConfig.get = MagicMock(return_value=False)
        cloudomate.place_offer = MagicMock(return_value=True)

        cloudomate.update_offer(PlebNetConfig())
        cloudomate.place_offer.assert_not_called()

        cloudomate.calculate_price = MagicMock(return_value=9)
        PlebNetConfig.get = MagicMock(return_value=(blueAngel.BlueAngelHost, 'test', 'test'))
        cloudomate.update_offer(PlebNetConfig())
        cloudomate.place_offer.assert_called_once()

        PlebNetConfig.get = self.config
        cloudomate.calculate_price = self.calculate_price
        cloudomate.place_offer = self.placeoffer
コード例 #8
0
    def test_place_offer_zero_mb(self):
        self.mb = market.get_balance
        self.logger = Logger.log

        Logger.log = MagicMock()
        market.get_balance = MagicMock(return_value=0)
        self.assertFalse(cloudomate.place_offer(5, PlebNetConfig()))

        market.get_balance = self.mb
        Logger.log = self.logger
コード例 #9
0
def check():
    """
    The method is the main function which should run periodically. It controls the behaviour of the agent,
    starting Tribler and buying servers.
    """
    global config, qtable
    global sold_mb_tokens, previous_mb_tokens
    logger.log("Checking PlebNet", log_name)

    # Read general configuration
    if settings.wallets_testnet_created():
        os.environ['TESTNET'] = '1'
    config = PlebNetConfig()
    qtable = QTable()
    qtable.read_dictionary()
    # check if own vpn is installed before continuing
    if not check_vpn_install():
        logger.error("!!! VPN is not installed, child may get banned !!!",
                     "Plebnet Check")

    # Requires time to setup, continue in the next iteration.
    if not check_tribler():
        return

    check_irc()

    if not settings.wallets_initiate_once():
        create_wallet()

    select_provider()

    # if is going to die, move all currency to a wallet
    if config.time_to_expiration() < plebnet_settings.TIME_IN_HOUR:
        save_all_currency()

    # These need a matchmaker, otherwise agent will be stuck waiting.
    if market_controller.has_matchmakers():
        strategies[plebnet_settings.get_instance().strategy_name()]().apply()

    install_vps()
コード例 #10
0
ファイル: core.py プロジェクト: codesalad/PlebNet
def setup(args):
    logger.log("Setting up PlebNet")

    # Prepare Cloudomate
    if args.test_net:
        settings.wallets_testnet("1")
        settings.settings.write()

    fake_generator.generate_child_account()

    # TODO: change --> Prepare plebnet
    config = PlebNetConfig()
    config.set('expiration_date',
               time.time() + 30 * plebnet_settings.TIME_IN_DAY)
    config.save()

    # handle the DNA
    dna = DNA()
    dna.read_dictionary(cloudomate_controller.get_vps_providers())
    dna.write_dictionary()

    # Prepare the IRC Client
    irc_handler.init_irc_client()
    irc_handler.start_irc_client()

    logger.success("PlebNet is ready to roll!")
コード例 #11
0
ファイル: test_strategy.py プロジェクト: louis-xer/Dollynator
    def test_place_offer(self):
        mb_amount = 100
        self.strategy = self.StrategyWrapper()
        self.put = market.put_bid
        self.true_settings = plebnet_settings.Init.wallets_testnet

        market.put_bid = MagicMock()
        plebnet_settings.Init.wallets_testnet = MagicMock(return_value=False)

        self.strategy.place_offer(mb_amount, 5, plebnet_settings.TIME_IN_HOUR,
                                  PlebNetConfig())
        market.put_bid.assert_called_once()

        market.put_bid = self.put
コード例 #12
0
    def test_place_offer(self):
        self.mb = market.get_balance
        self.logger = Logger.log
        self.put = market.put_ask

        Logger.log = MagicMock()
        market.get_balance = MagicMock(return_value=56)
        market.put_ask = MagicMock()

        cloudomate.place_offer(5, PlebNetConfig())
        market.put_ask.assert_called_once()

        market.get_balance = self.mb
        Logger.log = self.logger
        market.put_ask = self.put
コード例 #13
0
    def test_place_offer(self):
        self.mb = market.get_balance
        self.logger = Logger.log
        self.put = market.put_ask
        self.true_settings = plebnet_settings.Init.wallets_testnet

        Logger.log = MagicMock()
        market.get_balance = MagicMock(return_value=56)
        market.put_ask = MagicMock()
        plebnet_settings.Init.wallets_testnet = MagicMock(return_value=False)

        cloudomate.place_offer(5, PlebNetConfig())
        market.put_ask.assert_called_once()

        market.get_balance = self.mb
        Logger.log = self.logger
        market.put_ask = self.put
コード例 #14
0
def child_account(index=None):
    """
    This method returns the configuration for a certain child number.
    :param index: The number of the child
    :type index: Integer
    :return: configuration of the child
    :rtype: Settings
    """
    if index is not None:
        account = AccountSettings()
        account.read_settings(
            os.path.join(user_config_dir(), 'child_config' + str(index) + '.cfg'))
    else:
        account = AccountSettings()
        account.read_settings(
            os.path.join(user_config_dir(), 'child_config' + str(PlebNetConfig().get("child_index")) + '.cfg'))
    return account
コード例 #15
0
ファイル: core.py プロジェクト: louis-xer/Dollynator
def setup(args):
    """
    This method should only be called once and is responsible for the initial setup of the PlebNet
    agent. All necessary configuration files are created and IRC communication is started.
    :param args: If running in Testnet mode.
    """
    global qtable, config
    logger.log("Setting up PlebNet")

    # Set general info about the PlebNet agent
    settings.irc_nick(settings.irc_nick_def() +
                      str(random.randint(1000, 10000)))
    config = PlebNetConfig()
    config.set('expiration_date', time.time() + TIME_ALIVE)

    # Prepare the QTable configuration
    qtable = QTable()

    if args.test_net:
        settings.wallets_testnet("1")
        qtable.read_dictionary({
            'proxhost':
            cloudomate_controller.get_vps_providers()['proxhost']
        })
    else:
        providers = cloudomate_controller.get_vps_providers()

        if providers.has_key('proxhost'):
            del providers["proxhost"]

        # Create QTable if it does not exist
        qtable.read_dictionary(providers)

    if args.exit_node:
        logger.log("Running as exitnode")
        settings.tribler_exitnode('1')

    settings.settings.write()

    # Prepare first child configuration
    fake_generator.generate_child_account()

    # Prepare the IRC Client
    irc_handler.init_irc_client()
    irc_handler.start_irc_client()

    config.save()

    # add learning_consumer as a consumer for qtable channel in addressbook
    qtable.address_book.receiver.register_consumer("qtable", learning_consumer)

    logger.success("PlebNet is ready to roll!")
コード例 #16
0
def setup(args):
    """
    This method should only be called once and is responsible for the initial setup of the PlebNet
    agent. All necessary configuration files are created and IRC communication is started.
    :param args: If running in Testnet mode.
    """
    global dna, config
    logger.log("Setting up PlebNet")

    # Prepare the DNA configuration
    dna = DNA()

    if args.test_net:
        settings.wallets_testnet("1")
        settings.settings.write()
        dna.read_dictionary({
            'proxhost':
            cloudomate_controller.get_vps_providers()['proxhost']
        })
    else:
        dna.read_dictionary(cloudomate_controller.get_vps_providers())
        if 'proxhost' in dna.vps.keys():
            dna.remove_provider('proxhost')
    dna.write_dictionary()

    if args.exit_node:
        logger.log("Running as exitnode")
        settings.tribler_exitnode('1')

    # Prepare first child configuration
    fake_generator.generate_child_account()

    # Set general info about the PlebNet agent
    settings.irc_nick(settings.irc_nick_def() +
                      str(random.randint(1000, 10000)))
    config = PlebNetConfig()
    config.set('expiration_date',
               time.time() + 30 * plebnet_settings.TIME_IN_DAY)

    # Prepare the IRC Client
    irc_handler.init_irc_client()
    irc_handler.start_irc_client()

    if dna.get_own_tree() == '':
        logger.log("tree set to %s" % settings.irc_nick())
        dna.set_own_tree(settings.irc_nick())

    config.save()

    logger.success("PlebNet is ready to roll!")
コード例 #17
0
    def test_purchase_choice(self):
        self.config = PlebNetConfig.get
        self.triblerwallet = TriblerWallet.__init__
        self.settings = plebnet_settings.Init.wallets_testnet_created
        self.purchase = blueAngel.BlueAngelHost.purchase
        self.logger = Logger.warning

        PlebNetConfig.get = MagicMock(side_effect=self.side_effect)
        plebnet_settings.Init.wallets_testnet_created = MagicMock(return_value=None)
        TriblerWallet.__init__ = MagicMock(return_value=None)
        blueAngel.BlueAngelHost.purchase = MagicMock(return_value=('Hash', 0))
        Logger.warning = MagicMock()

        self.assertEquals(cloudomate.purchase_choice(PlebNetConfig()), plebnet_settings.SUCCESS)

        PlebNetConfig.get = self.config
        TriblerWallet.__init__ = self.triblerwallet
        plebnet_settings.Init.wallets_testnet_created = self.settings
        blueAngel.BlueAngelHost.purchase = self.purchase
        Logger.warning = self.logger
コード例 #18
0
def purchase_choice(config):
    """
    Purchase the cheapest provider in chosen_providers. If buying is successful this provider is moved to bought. In any
    case the provider is removed from choices.
    :param config: config
    :return: success
    """

    (provider, option, _) = config.get('chosen_provider')

    provider_instance = cloudomate_providers['vps'][provider](child_account())
    PlebNetConfig().increment_child_index()
    fake_generator.generate_child_account()

    wallet = TriblerWallet(
        plebnet_settings.get_instance().wallets_testnet_created())
    c = cloudomate_providers['vps'][provider]

    configurations = c.get_options()
    option = configurations[option]

    transaction_hash, _ = provider_instance.purchase(wallet, option)

    if not transaction_hash:
        logger.warning("Failed to purchase server")
        return plebnet_settings.FAILURE
    # TODO: how to spot the difference?
    if False:
        logger.warning("Insufficient funds to purchase server")
        return plebnet_settings.UNKNOWN

    config.get('bought').append(
        (provider, transaction_hash, config.get('child_index') - 1))
    config.get('transactions').append(transaction_hash)
    config.set('chosen_provider', None)
    config.save()

    return plebnet_settings.SUCCESS
コード例 #19
0
    def test_purchase_choice_failure(self):
        self.config = PlebNetConfig.get
        self.triblerwallet = TriblerWallet.__init__
        self.settings = plebnet_settings.Init.wallets_testnet_created
        self.purchase = linevast.LineVast.purchase
        self.logger = Logger.warning

        PlebNetConfig.get = MagicMock(side_effect=self.side_effect)
        plebnet_settings.Init.wallets_testnet_created = MagicMock(
            return_value=None)
        TriblerWallet.__init__ = MagicMock(return_value=None)
        linevast.LineVast.purchase = MagicMock(
            side_effect=Exception("Purchase failed"))
        Logger.warning = MagicMock()

        self.assertEquals(cloudomate.purchase_choice(PlebNetConfig()),
                          plebnet_settings.FAILURE)

        PlebNetConfig.get = self.config
        TriblerWallet.__init__ = self.triblerwallet
        plebnet_settings.Init.wallets_testnet_created = self.settings
        linevast.LineVast.purchase = self.purchase
        Logger.warning = self.logger
コード例 #20
0
def _child_file():
    return os.path.join(
        user_config_dir(),
        'child_config' + str(PlebNetConfig().get('child_index')) + '.cfg')
コード例 #21
0
ファイル: strategy.py プロジェクト: vgarleanu/Dollynator
 def __init__(self):
     self.config = PlebNetConfig()
コード例 #22
0
ファイル: strategy.py プロジェクト: vgarleanu/Dollynator
class Strategy():
    __metaclass__ = ABCMeta

    def __init__(self):
        self.config = PlebNetConfig()

    @abstractmethod
    def apply(self):
        """
        Performs the whole strategy step for one plebnet check iteration
        :return:
        """
        pass

    @abstractmethod
    def sell_reputation(self):
        """
        Sells or holds current reputation (MB) depending on the implementing strategy
        :return:
        """
        pass

    @abstractmethod
    def create_offer(self, amount_mb, timeout):
        """
        Creates a new order in the market, with parameters depending on the implementing strategy
        :return:
        """
        pass

    def get_available_mb(self):
        return market_controller.get_balance('MB')

    @staticmethod
    def get_replication_price(vps_provider, option, vpn_provider='azirevpn'):
        return (calculate_price(vps_provider, option) +
                calculate_price_vpn(vpn_provider)) * BTC_FLUCTUATION_MARGIN

    def update_offer(self, mb_amount, timeout=plebnet_settings.TIME_IN_HOUR):
        """
        Check if "timeout" has passed since the last offer made, if passed create a new offer.
        """
        if self.config.time_since_offer() > timeout:
            logger.log("Calculating new offer", log_name)
            self.config.save()
            return self.create_offer(mb_amount, timeout)

    def place_offer(self, mb_amount, chosen_est_price, timeout, config):
        """
        Sells the received MB amount for the chosen estimated price on the Tribler market.
        :param mb_amount: Amount of MB to sell
        :param config: config
        :param timeout: timeout of the offer to place
        :param chosen_est_price: Target amount of BTC to receive
        :return: success of offer placement
        """
        if chosen_est_price == 0 or mb_amount == 0:
            return False
        config.bump_offer_date()

        coin = 'TBTC' if plebnet_settings.get_instance().wallets_testnet(
        ) else 'BTC'

        config.set('last_offer', {coin: chosen_est_price, 'MB': mb_amount})

        if coin == 'TBTC':
            return market_controller.put_ask(
                first_asset_amount=mb_amount,
                first_asset_type='MB',
                second_asset_amount=btc_to_satoshi(chosen_est_price),
                second_asset_type=coin,
                timeout=timeout)
        return market_controller.put_bid(
            first_asset_amount=btc_to_satoshi(chosen_est_price),
            first_asset_type=coin,
            second_asset_amount=mb_amount,
            second_asset_type='MB',
            timeout=timeout)
コード例 #23
0
ファイル: test_strategy.py プロジェクト: louis-xer/Dollynator
    def test_place_offer_zero_mb(self):
        self.strategy = self.StrategyWrapper()

        self.assertFalse(
            self.strategy.place_offer(0, 5, plebnet_settings.TIME_IN_HOUR,
                                      PlebNetConfig()))