def test_from_uri(self):
        c = Connection(self.host, self.port)

        self.assertRaises(InvalidURI, Connection.from_uri, "mongodb://localhost/baz")

        self.assertEqual(c, Connection.from_uri("mongodb://%s:%s" %
                                                (self.host, self.port)))

        c.admin.system.users.remove({})
        c.pymongo_test.system.users.remove({})

        c.admin.add_user("admin", "pass")
        c.pymongo_test.add_user("user", "pass")

        self.assertRaises(InvalidURI, Connection.from_uri,
                          "mongodb://*****:*****@%s:%s" % (self.host, self.port))
        self.assertRaises(InvalidURI, Connection.from_uri,
                          "mongodb://*****:*****@%s:%s" % (self.host, self.port))
        self.assertRaises(InvalidURI, Connection.from_uri,
                          "mongodb://*****:*****@%s:%s" % (self.host, self.port))
        Connection.from_uri("mongodb://*****:*****@%s:%s" % (self.host, self.port))

        self.assertRaises(InvalidURI, Connection.from_uri,
                          "mongodb://*****:*****@%s:%s/pymongo_test" %
                          (self.host, self.port))
        self.assertRaises(InvalidURI, Connection.from_uri,
                          "mongodb://*****:*****@%s:%s/pymongo_test" %
                          (self.host, self.port))
        Connection.from_uri("mongodb://*****:*****@%s:%s/pymongo_test" %
                            (self.host, self.port))
Ejemplo n.º 2
0
    def check_health(self):
        """Returns the health of a both nodes in a Replica Pair connection in dictionary format.
        {'db_master_url': 'host2', 'db_slave_url': 'host1', 
        'db_master_can_write': True, 'db_master_can_read': True, 
        'db_slave_can_read': True}
        """
        master_connection = self._connection[self._database]
        master = self._connection.host
        id = str(uuid.uuid1())
        test_data = {"_id": id, "date": datetime.datetime.now().microsecond}

        db_master_can_write = False
        try:
            master_connection["friskmonitoring"].save(test_data)
            db_master_can_write = master_connection["friskmonitoring"].find_one({"_id": id}) == test_data
        except:
            pass
        finally:
            master_connection["friskmonitoring"].remove({"_id": id})

        db_master_can_read = False
        try:
            db_master_can_read = master_connection.collection_names() != []
        except:
            pass

        db_slave_can_read = False
        hosts = copy.copy(self._hosts)
        if len(hosts) > 1:
            hosts.remove(master)
            slave = hosts[0]
            slave_connection = None
            try:
                slave_uri = copy.copy(self._uri)
                if "," in slave_uri:
                    slave_uri = slave_uri.replace(master, "").replace(",", "")
                    slave_uri = slave_uri.replace(master, "").replace(",", "")
                slave_connection = mongo_con.from_uri(slave_uri, slave_okay=True)
                db_slave_can_read = slave_connection[self._database].collection_names() != []
            except:
                pass
            finally:
                if slave_connection:
                    slave_connection.disconnect()
        else:
            slave = None

        return {
            "db_master_url": master,
            "db_slave_url": slave,
            "db_master_can_read": db_master_can_read,
            "db_master_can_write": db_master_can_write,
            "db_slave_can_read": db_slave_can_read,
        }
Ejemplo n.º 3
0
 def __init__(self, uri, **kw):
     self._uri = copy.copy(uri)
     self._parse_uri(uri)
     self._connection = mongo_con.from_uri(uri, **kw)