Ejemplo n.º 1
0
    def test_prepare_on_ignored_hosts(self):

        cluster = Cluster(
            protocol_version=PROTOCOL_VERSION,
            execution_profiles={
                EXEC_PROFILE_DEFAULT:
                ExecutionProfile(
                    load_balancing_policy=self.ignore_node_3_policy)
            })
        session = cluster.connect()
        cluster.reprepare_on_up, cluster.prepare_on_all_hosts = True, False

        hosts = cluster.metadata.all_hosts()
        session.execute(
            "CREATE KEYSPACE clustertests "
            "WITH replication = "
            "{'class': 'SimpleStrategy', 'replication_factor': '1'}")
        session.execute(
            "CREATE TABLE clustertests.tab (a text, PRIMARY KEY (a))")
        # assign to an unused variable so cluster._prepared_statements retains
        # reference
        _ = session.prepare(
            "INSERT INTO clustertests.tab (a) VALUES ('a')")  # noqa

        cluster.connection_factory = Mock(wraps=cluster.connection_factory)

        unignored_address = '127.0.0.1'
        unignored_host = next(h for h in hosts
                              if h.address == unignored_address)
        ignored_host = next(h for h in hosts
                            if h.address in self.ignored_addresses)
        unignored_host.is_up = ignored_host.is_up = False

        cluster.on_up(unignored_host)
        cluster.on_up(ignored_host)

        # the length of mock_calls will vary, but all should use the unignored
        # address
        for c in cluster.connection_factory.mock_calls:
            self.assertEqual(call(unignored_address), c)
        cluster.shutdown()