예제 #1
0
    def test_old_set_get_create_example(self):
        from couchbase.couchbaseclient import CouchbaseClient
        from couchbase.rest_client import RestConnection, RestHelper

        client = CouchbaseClient(self.url, self.bucket_name, "", False)
        client.set("key1", 0, 0, "value1")
        client.get("key1")

        server_info = {
            "ip": self.host,
            "port": self.port,
            "username": self.username,
            "password": self.password
        }
        rest = RestConnection(server_info)
        rest.create_bucket(bucket='newbucket',
                           ramQuotaMB=100,
                           authType='none',
                           saslPassword='',
                           replicaNumber=1,
                           proxyPort=11215,
                           bucketType='membase')

        self.assertTrue(RestHelper(rest).bucket_exists('newbucket'))
        rest.delete_bucket('newbucket')
class CouchbaseClientTest(Base):
    def setUp(self):
        super(CouchbaseClientTest, self).setUp()
        self.client = CouchbaseClient(self.url, self.bucket_name, "", True)

    def tearDown(self):
        self.client.done()

    @nottest
    def setup_memcached_bucket(self):
        self.memcached_bucket = 'testing-memcached'
        self.rest_client = RestConnection({'ip': self.host,
                                           'port': self.port,
                                           'username': self.username,
                                           'password': self.password})
        self.rest_client.create_bucket(self.memcached_bucket,
                                       bucketType='memcached',
                                       authType='sasl', ramQuotaMB=64)
        self.client_for_memcached_bucket = \
            CouchbaseClient(self.url, self.memcached_bucket, verbose=True)

    @nottest
    def teardown_memcached_bucket(self):
        self.rest_client.delete_bucket(self.memcached_bucket)

    @attr(cbv="1.0.0")
    def test_set_integer_value(self):
        self.client.set('int', 0, 0, 10)
        self.assertEqual(self.client.get('int')[2], 10,
                         'value should be the integer 10')
        self.client.incr('int')
        self.assertEqual(self.client.get('int')[2], 11,
                         'value should be the integer 11')
        self.client.delete('int')

    def test_two_client_incr(self):
        """http://www.couchbase.com/issues/browse/PYCBC-16"""
        key = 'test_two_client_incr'
        client_one = self.client
        client_two = CouchbaseClient(self.url, self.bucket_name, "", True)
        # Client one sets a numeric key
        client_one.set(key, 0, 0, 20)
        # Client two tries to increment this numeric key
        (i, cas) = client_two.incr(key)
        self.assertEqual(i, 21)

        # Client two should be able to keep incrementing this key
        (i, cas) = client_two.incr(key)
        self.assertEqual(i, 22)

        (_, cas, i) = client_two.get(key)
        self.assertEqual(i, 22)
        (i, cas) = client_two.incr(key)
        self.assertEqual(i, 23)

    def test_bucket_of_type_memcached(self):
        self.setup_memcached_bucket()
        self.assertIsInstance(self.client_for_memcached_bucket,
                              CouchbaseClient)
        self.teardown_memcached_bucket()
class CouchbaseClientTest(Base):
    def setUp(self):
        super(CouchbaseClientTest, self).setUp()
        self.client = CouchbaseClient(self.url, self.bucket_name, "", True)

    def tearDown(self):
        self.client.flush()
        self.client.done()

    @nottest
    def setup_memcached_bucket(self):
        self.memcached_bucket = 'testing-memcached'
        self.rest_client = RestConnection({'ip': self.host,
                                           'port': self.port,
                                           'username': self.username,
                                           'password': self.password})
        self.rest_client.create_bucket(self.memcached_bucket,
                                       bucketType='memcached',
                                       authType='sasl', ramQuotaMB=64)
        self.client_for_memcached_bucket = \
            CouchbaseClient(self.url, self.memcached_bucket, verbose=True)

    @nottest
    def teardown_memcached_bucket(self):
        self.rest_client.delete_bucket(self.memcached_bucket)

    @attr(cbv="1.0.0")
    def test_set_integer_value(self):
        self.client.set('int', 0, 0, 10)
        self.assertEqual(self.client.get('int')[2], 10,
                         'value should be the integer 10')
        self.client.incr('int')
        self.assertEqual(self.client.get('int')[2], 11,
                         'value should be the integer 11')

    @attr(cbv="1.0.0")
    def test_bucket_of_type_memcached(self):
        self.setup_memcached_bucket()
        self.assertIsInstance(self.client_for_memcached_bucket,
                              CouchbaseClient)
        self.teardown_memcached_bucket()
    def test_old_set_get_create_example(self):
        from couchbase.couchbaseclient import CouchbaseClient
        from couchbase.rest_client import RestConnection, RestHelper

        client = CouchbaseClient(self.url, self.bucket_name, "", False)
        client.set("key1", 0, 0, "value1")
        client.get("key1")

        server_info = {"ip": self.host, "port": self.port, "username": self.username, "password": self.password}
        rest = RestConnection(server_info)
        rest.create_bucket(
            bucket="newbucket",
            ramQuotaMB=100,
            authType="none",
            saslPassword="",
            replicaNumber=1,
            proxyPort=11215,
            bucketType="membase",
        )

        self.assertTrue(RestHelper(rest).bucket_exists("newbucket"))
        rest.delete_bucket("newbucket")
class RestConnectionTest(unittest.TestCase):
    def setUp(self):
        self.host = config['node-1']['host']
        self.port = config['node-1']['port']
        self.username = config['node-1']['username']
        self.password = config['node-1']['password']
        self.bucket_name = config['node-1']['bucket']
        # list of design_docs for tearDown to destroy, if they've hung around
        self.design_docs = []

    def tearDown(self):
        for ddoc in self.design_docs:
            self.rest.delete_design_doc(self.bucket_name, ddoc)
        pass

    @nottest
    def setup_rest_connection(self):
        server_info = {"ip": self.host,
                       "port": self.port,
                       "username": self.username,
                       "password": self.password}
        self.rest = RestConnection(server_info)

    @nottest
    def setup_create_design_doc(self):
        self.setup_rest_connection()
        if self.rest.couch_api_base is None:
            raise SkipTest
        ddoc_name = uuid.uuid4()
        design_doc = json.dumps({"views":
                                 {"testing":
                                  {"map":
                                   "function(doc) { emit(doc._id, null); }"
                                   }
                                  }
                                 })
        resp = self.rest.create_design_doc(self.bucket_name, ddoc_name,
                                           design_doc)
        self.design_docs.append(ddoc_name)
        return ddoc_name, resp

    @nottest
    def setup_couchbase_object(self):
        self.cb = Couchbase(self.host + ':' + self.port, self.username,
                            self.password)

    @attr(cbv="1.8.0")
    def test_rest_connection_object_creation(self):
        self.setup_rest_connection()
        self.assertEqual(self.rest.baseUrl, "http://%s:%s/" %
                         (self.host, self.port))

    @attr(cbv="1.8.0")
    def test_rest_connection_object_creation_with_server_object(self):
        class ServerInfo:
            ip = self.host
            port = self.port
            rest_username = self.username
            rest_password = self.password

        rest = RestConnection(ServerInfo())
        self.assertEqual(rest.baseUrl, "http://%s:%s/" % (self.host,
                                                          self.port))

    @attr(cbv="2.0.0")
    def test_create_design_doc(self):
        (ddoc_name, resp) = self.setup_create_design_doc()
        self.assertTrue(resp["ok"])

    @attr(cbv="2.0.0")
    def test_get_design_doc(self):
        ddoc_name, resp = self.setup_create_design_doc()
        ddoc = self.rest.get_design_doc(self.bucket_name, ddoc_name)
        self.assertIn("views", ddoc.keys())
        self.assertRaises(Exception, self.rest.get_design_doc,
                          (self.bucket_name, str(uuid.uuid4())))

    @attr(cbv="2.0.0")
    def test_delete_design_doc(self):
        ddoc_name, resp = self.setup_create_design_doc()
        self.assertTrue(self.rest.delete_design_doc(self.bucket_name,
                                                    ddoc_name))
        self.assertRaises(Exception,
                          self.rest.delete_design_doc,
                          (self.bucket_name, ddoc_name))
        self.design_docs = filter(lambda id: id is not ddoc_name,
                                  self.design_docs)

    @attr(cbv="2.0.0")
    def test_get_view(self):
        (ddoc_name, resp) = self.setup_create_design_doc()
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            # Trigger a warning.
            view = self.rest.get_view(self.bucket_name, ddoc_name, "testing")
            # Verify some things
            self.assertTrue(len(w) == 1)
            self.assertTrue("deprecated" in str(w[-1].message))

    @attr(cbv="2.0.0")
    def test_view_results(self):
        ddoc_name, resp = self.setup_create_design_doc()
        view = self.rest.view_results(self.bucket_name, ddoc_name, "testing",
                                      {})
        if "error" in view:
            self.fail(view)
        else:
            self.assertIn("rows", view.keys())
        # let's add some sample docs
        self.setup_couchbase_object()
        kvs = [(str(uuid.uuid4()), str(uuid.uuid4())) for i in range(0, 100)]
        for k, v in kvs:
            self.cb[self.bucket_name].set(k, 0, 0, v)
        # rerun the view
        view = self.rest.view_results(self.bucket_name, ddoc_name, "testing",
                                      {})
        if "error" in view:
            self.fail(view)
        else:
            self.assertIn("rows", view.keys())
        # remove sample docs
        for k, v in kvs:
            self.cb[self.bucket_name].delete(k)

    @attr(cbv="1.8.0")
    def test_create_headers(self):
        self.setup_rest_connection()
        headers = self.rest._create_headers()
        self.assertEqual(headers['Authorization'],
                         'Basic ' + base64.encodestring("%s:%s" %
                                                        (self.rest.username,
                                                        self.rest.password)))

    @attr(cbv="1.0.0")
    def test_create_bucket(self):
        self.setup_rest_connection()
        # test membase/couchbase creation defaults
        status = self.rest.create_bucket('newbucket')
        self.assertTrue(status)
        bucket = self.rest.get_bucket('newbucket')
        self.assertEqual(bucket.stats.ram/1024/1024, 100)
        self.assertEqual(bucket.authType, 'sasl')
        self.assertEqual(bucket.type, 'membase')
        self.assertEqual(bucket.numReplicas, 1)
        self.rest.delete_bucket('newbucket')
        # test memcached creation defaults
        status = self.rest.create_bucket(bucket='newbucket',
                                         bucketType='memcached')
        self.assertTrue(status)
        bucket = self.rest.get_bucket('newbucket')
        self.assertEqual(bucket.stats.ram/1024/1024, 100)
        self.assertEqual(bucket.authType, 'sasl')
        self.assertEqual(bucket.type, 'memcached')
        self.assertEqual(bucket.numReplicas, 0)
        # make sure creating an existing bucket fails properly
        self.assertRaises(Exception, self.rest.create_bucket,
                          bucket='newbucket', bucketType='memcached')
        self.rest.delete_bucket('newbucket')
        # test setting ramQuotaMB too low
        self.assertRaises(AssertionError,
                          self.rest.create_bucket,
                          bucket='newbucket', bucketType='memcached',
                          ramQuotaMB=10)
        self.assertRaises(AssertionError,
                          self.rest.create_bucket,
                          bucket='newbucket', ramQuotaMB=90)
class CouchbaseClientTest(Base):
    def setUp(self):
        super(CouchbaseClientTest, self).setUp()
        self.client = CouchbaseClient(self.url, self.bucket_name, "", True)

    def tearDown(self):
        self.client.done()

    @nottest
    def setup_memcached_bucket(self):
        self.memcached_bucket = 'testing-memcached'
        self.rest_client = RestConnection({
            'ip': self.host,
            'port': self.port,
            'username': self.username,
            'password': self.password
        })
        self.rest_client.create_bucket(self.memcached_bucket,
                                       bucketType='memcached',
                                       authType='sasl',
                                       ramQuotaMB=64)
        self.client_for_memcached_bucket = \
            CouchbaseClient(self.url, self.memcached_bucket, verbose=True)

    @nottest
    def teardown_memcached_bucket(self):
        self.rest_client.delete_bucket(self.memcached_bucket)

    @attr(cbv="1.0.0")
    def test_set_integer_value(self):
        self.client.set('int', 0, 0, 10)
        self.assertEqual(
            self.client.get('int')[2], 10, 'value should be the integer 10')
        self.client.incr('int')
        self.assertEqual(
            self.client.get('int')[2], 11, 'value should be the integer 11')
        self.client.delete('int')

    def test_two_client_incr(self):
        """http://www.couchbase.com/issues/browse/PYCBC-16"""
        key = 'test_two_client_incr'
        client_one = self.client
        client_two = CouchbaseClient(self.url, self.bucket_name, "", True)
        # Client one sets a numeric key
        client_one.set(key, 0, 0, 20)
        # Client two tries to increment this numeric key
        (i, cas) = client_two.incr(key)
        self.assertEqual(i, 21)

        # Client two should be able to keep incrementing this key
        (i, cas) = client_two.incr(key)
        self.assertEqual(i, 22)

        (_, cas, i) = client_two.get(key)
        self.assertEqual(i, 22)
        (i, cas) = client_two.incr(key)
        self.assertEqual(i, 23)

    def test_bucket_of_type_memcached(self):
        self.setup_memcached_bucket()
        self.assertIsInstance(self.client_for_memcached_bucket,
                              CouchbaseClient)
        self.teardown_memcached_bucket()
class RestConnectionTest(unittest.TestCase):
    def setUp(self):
        self.host = config['node-1']['host']
        self.port = config['node-1']['port']
        self.username = config['node-1']['username']
        self.password = config['node-1']['password']
        self.bucket_name = config['node-1']['bucket']
        # list of design_docs for tearDown to destroy, if they've hung around
        self.design_docs = []

    def tearDown(self):
        for ddoc in self.design_docs:
            self.rest.delete_design_doc(self.bucket_name, ddoc)
        pass

    @nottest
    def setup_rest_connection(self):
        server_info = {
            "ip": self.host,
            "port": self.port,
            "username": self.username,
            "password": self.password
        }
        self.rest = RestConnection(server_info)

    @nottest
    def setup_create_design_doc(self):
        self.setup_rest_connection()
        if self.rest.couch_api_base is None:
            raise SkipTest
        ddoc_name = uuid.uuid4()
        design_doc = json.dumps({
            "views": {
                "testing": {
                    "map": "function(doc) { emit(doc._id, null); }"
                }
            }
        })
        resp = self.rest.create_design_doc(self.bucket_name, ddoc_name,
                                           design_doc)
        self.design_docs.append(ddoc_name)
        return ddoc_name, resp

    @nottest
    def setup_vbucketawareclient(self):
        self.client = VBucketAwareClient(self.host, 11210)

    @attr(cbv="1.8.0")
    def test_rest_connection_object_creation(self):
        self.setup_rest_connection()
        self.assertEqual(self.rest.base_url,
                         "http://{0}:{1}".format(self.host, self.port))

    @attr(cbv="1.8.0")
    def test_rest_connection_object_creation_with_server_object(self):
        class ServerInfo:
            ip = self.host
            port = self.port
            rest_username = self.username
            rest_password = self.password

        rest = RestConnection(ServerInfo())
        self.assertEqual(rest.base_url,
                         "http://{0}:{1}".format(self.host, self.port))

    @attr(cbv="2.0.0")
    def test_create_design_doc(self):
        (ddoc_name, resp) = self.setup_create_design_doc()
        self.assertTrue(resp["ok"])

    @attr(cbv="2.0.0")
    def test_get_design_doc(self):
        ddoc_name, resp = self.setup_create_design_doc()
        ddoc = self.rest.get_design_doc(self.bucket_name, ddoc_name)
        self.assertIn("views", ddoc.keys())
        self.assertRaises(Exception, self.rest.get_design_doc,
                          (self.bucket_name, str(uuid.uuid4())))

    @attr(cbv="2.0.0")
    def test_delete_design_doc(self):
        ddoc_name, resp = self.setup_create_design_doc()
        self.assertTrue(
            self.rest.delete_design_doc(self.bucket_name, ddoc_name))
        self.assertRaises(Exception, self.rest.delete_design_doc,
                          (self.bucket_name, ddoc_name))
        self.design_docs = filter(lambda id: id is not ddoc_name,
                                  self.design_docs)

    @attr(cbv="2.0.0")
    def test_get_view(self):
        (ddoc_name, resp) = self.setup_create_design_doc()
        with warnings.catch_warnings(record=True) as w:
            warnings.simplefilter("always")
            # Trigger a warning.
            self.rest.get_view(self.bucket_name, ddoc_name, "testing")
            # Verify some things
            self.assertTrue(len(w) == 1)
            self.assertTrue("deprecated" in str(w[-1].message))

    @attr(cbv="2.0.0")
    def test_view_results(self):
        ddoc_name, resp = self.setup_create_design_doc()
        view = self.rest.view_results(self.bucket_name, ddoc_name, "testing",
                                      {})
        if "error" in view:
            self.fail(view)
        else:
            self.assertIn("rows", view.keys())
        # let's add some sample docs
        self.setup_vbucketawareclient()
        kvs = [(str(uuid.uuid4()), str(uuid.uuid4())) for i in range(0, 100)]
        for k, v in kvs:
            self.client.set(k, 0, 0, v)
        # rerun the view
        view = self.rest.view_results(self.bucket_name, ddoc_name, "testing",
                                      {})
        if "error" in view:
            self.fail(view)
        else:
            self.assertIn("rows", view.keys())
        # remove sample docs
        for k, v in kvs:
            self.client.delete(k)

    @attr(cbv="1.8.0")
    def test_create_headers(self):
        self.setup_rest_connection()
        headers = self.rest._create_headers()
        self.assertEqual(headers['Content-Type'],
                         'application/x-www-form-urlencoded')

    @attr(cbv="1.0.0")
    def test_create_bucket(self):
        self.setup_rest_connection()
        # test membase/couchbase creation defaults
        status = self.rest.create_bucket('newbucket')
        self.assertTrue(status)
        bucket = self.rest.get_bucket('newbucket')
        self.assertEqual(bucket.stats.ram / 1024 / 1024, 100)
        self.assertEqual(bucket.authType, 'sasl')
        self.assertEqual(bucket.type, 'membase')
        self.assertEqual(bucket.numReplicas, 1)
        self.rest.delete_bucket('newbucket')
        # test memcached creation defaults
        status = self.rest.create_bucket(bucket='newbucket',
                                         bucketType='memcached')
        self.assertTrue(status)
        bucket = self.rest.get_bucket('newbucket')
        self.assertEqual(bucket.stats.ram / 1024 / 1024, 100)
        self.assertEqual(bucket.authType, 'sasl')
        self.assertEqual(bucket.type, 'memcached')
        self.assertEqual(bucket.numReplicas, 0)
        # make sure creating an existing bucket fails properly
        self.assertRaises(Exception,
                          self.rest.create_bucket,
                          bucket='newbucket',
                          bucketType='memcached')
        self.rest.delete_bucket('newbucket')
        # test setting ramQuotaMB too low
        self.assertRaises(AssertionError,
                          self.rest.create_bucket,
                          bucket='newbucket',
                          bucketType='memcached',
                          ramQuotaMB=10)
        self.assertRaises(AssertionError,
                          self.rest.create_bucket,
                          bucket='newbucket',
                          ramQuotaMB=90)