예제 #1
0
    def test_multi_tenant(self):
        """マルチテナント:テナント毎にREST APIが実行できること"""
        service1 = util.create_service(key="service")
        service2 = util.create_service(key="service2")

        baas.User.login(service1, username="******", password="******")
        baas.User.login(service2, username="******", password="******")

        b1 = baas.ObjectBucket(service1, "bucket1")
        b2 = baas.ObjectBucket(service2, "bucket2")

        res1 = b1.insert({"key1": 12345})
        assert res1["key1"] == 12345

        res2 = b2.insert({"key2": 23456})
        assert res2["key2"] == 23456

        results1 = b1.query()
        assert len(results1) == 1
        assert results1[0]["key1"] == 12345

        results2 = b2.query()
        assert len(results2) == 1
        assert results2[0]["key2"] == 23456

        baas.User.logout(service1)
        baas.User.logout(service2)
    def test_durability_object(self):
        """耐久試験:オブジェクトストレージ 検索/更新"""
        self.bucket = baas.ObjectBucket(self.service, "bucket1")
        self._import_csv()

        objects, count = self.bucket.query_with_count()
        assert count == 10000

        update_id = objects[0]["_id"]

        end_time = time.time() + (48 * 60 * 60)

        counter = 0

        while end_time >= time.time():
            # update
            obj = self.bucket.update(update_id, {"updateKey": counter})
            assert obj["updateKey"] == counter

            # query
            target = "ANTC-CD{:05}".format((counter % 100) * 100)
            where = {"CD": {"$gte": target}}

            objects = self.bucket.query(where=where, limit=100)
            assert len(objects) == 100

            counter += 1

            # sleep 1sec
            time.sleep(1)

            # update session token
            if self.service.session_token_expire - (60 * 60) < time.time():
                baas.User.login(self.service, username="******", password="******")
예제 #3
0
    def setup(self):
        self.service = util.create_service()
        self.master_service = util.create_service(master=True)

        # ensure bucket
        buckets = baas.Buckets(self.master_service, "object")
        buckets.upsert(self.TEST_BUCKET,
                       desc="performance test",
                       acl={},
                       content_acl={
                           "r": ["g:anonymous"],
                           "w": ["g:anonymous"]
                       })

        self.bucket = baas.ObjectBucket(self.service, self.TEST_BUCKET)

        (res, total) = self.bucket.query_with_count(limit=1)
        if total == 10000:
            # ok, test data exists
            return
        elif total > 0:
            # re-create buckets
            buckets.remove(self.TEST_BUCKET)
            buckets.upsert(self.TEST_BUCKET,
                           content_acl={
                               "r": ["g:anonymous"],
                               "w": ["g:anonymous"]
                           })

        self.create_test_data_10000()
예제 #4
0
    def test_crud(self):
        """追加・更新・クエリ・削除が実行できること。URLエンコードも正常に行われること"""
        b = baas.ObjectBucket(self.service, "bucket1")

        # insert
        res = b.insert({"key1": 12345})
        assert res["key1"] == 12345

        # update
        res = b.update(res["_id"], {"key1": "あいうえお"}, etag=res["etag"])
        kana = "あいうえお" if type(res["key1"]) is str else u"あいうえお"
        assert res["key1"] == kana

        # query
        results = b.query(where={"key1": "あいうえお"})
        assert len(results) == 1
        assert results[0]["key1"] == kana

        # remove
        _id = results[0]["_id"]
        res = b.remove(_id)
        assert len(res) == 0

        # remove with query
        res = b.remove_with_query({})
        assert res["result"] == "ok"
        assert res["deletedObjects"] == 0
예제 #5
0
    def insert_sample_data(self, count):
        # type: () -> baas.ObjectBucket
        b = baas.ObjectBucket(self.service, "bucket1")

        for i in range(count):
            b.insert({"key": i, "type": "A" if i % 2 == 1 else "B"})

        return b
예제 #6
0
    def test_batch(self):
        """正常に batch 処理ができること"""
        b = baas.ObjectBucket(self.service, "bucket1")

        # insert
        requests = [{
            "op": "insert",
            "data": {
                "key": 1
            }
        }, {
            "op": "insert",
            "data": {
                "key": 2
            }
        }]
        results = b.batch(requests)

        assert len(results) == 2
        assert results[0]["data"]["key"] == 1
        assert results[1]["data"]["key"] == 2

        # update/(soft)delete
        requests = [{
            "op": "update",
            "_id": results[0]["_id"],
            "data": {
                "key": 11
            }
        }, {
            "op": "delete",
            "_id": results[1]["_id"]
        }]
        results = b.batch(requests, True)

        assert len(results) == 2
        assert results[0]["data"]["key"] == 11
        assert results[1]["result"] == "ok"

        # update/delete
        requests = [{
            "op": "update",
            "_id": results[0]["_id"],
            "data": {
                "key": 21
            }
        }, {
            "op": "delete",
            "_id": results[1]["_id"]
        }]
        results = b.batch(requests, True)

        assert len(results) == 2
        assert results[0]["data"]["key"] == 21
        assert results[1]["result"] == "ok"
    def _query_object(self, bucket_name, size, count):
        b = baas.ObjectBucket(self.service, bucket_name)

        objects, c = b.query_with_count(limit=-1, order="DATA_ID")

        assert c == count
        assert len(objects) == count

        for i in range(count):
            assert objects[i]["DATA_ID"] == i
            assert len(objects[i]["DATA"]) == size

        return objects
    def _register_object(self, bucket_name, size, count):
        b = baas.ObjectBucket(self.service, bucket_name)

        test_data = self.create_test_data(size)

        requests = []
        for i in range(count):
            request = {
                "op": "insert",
                "data": {
                    "DATA_ID": i,
                    "DATA": test_data
                }
            }
            requests.append(request)

        b.batch(requests)
    def test_crud_time(self):
        """CRUD実行時間 (1件)"""
        self.bucket = baas.ObjectBucket(self.service, "bucket1")
        self._import_csv()

        # query
        numbers = []
        for i in range(10000):
            numbers.append(str((i + 1) * 100))
        where = {"NO": {"$in": numbers}}

        start_time = time.time()
        objects = self.bucket.query(where=where, limit=-1)
        elapsed_time = time.time() - start_time

        assert len(objects) == 100
        assert elapsed_time < 0.3
        print("query time: " + str(elapsed_time))

        # create
        start_time = time.time()
        obj = self.bucket.insert({"key": "value"})
        elapsed_time = time.time() - start_time

        assert obj["key"] == "value"
        assert elapsed_time < 0.1
        print("create time: " + str(elapsed_time))

        # update
        start_time = time.time()
        obj = self.bucket.update(obj["_id"], {"key2": "value2"})
        elapsed_time = time.time() - start_time

        assert obj["key2"] == "value2"
        assert elapsed_time < 0.1
        print("update time: " + str(elapsed_time))

        # delete
        start_time = time.time()
        self.bucket.remove(obj["_id"])
        elapsed_time = time.time() - start_time

        assert elapsed_time < 0.1
        print("delete time: " + str(elapsed_time))
예제 #10
0
    def test_update(self, good_etag):
        """正常に update できること"""
        b = baas.ObjectBucket(self.service, "bucket1")
        data = {"key": 1}
        data = b.insert(data)

        data["key"] = 100
        oid = data["_id"]
        if good_etag is None:
            etag = None
        elif good_etag:
            etag = data["etag"]
        else:
            etag = "BAD_ETAG"

        if good_etag is None or good_etag:
            new_data = b.update(oid, data, etag=etag)
            assert new_data["key"] == 100
        else:
            with pytest.raises(HTTPError) as ei:
                b.update(oid, data, etag=etag)
            status_code = ei.value.response.status_code
            assert status_code == 409
예제 #11
0
sys.path.append(
    os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + "/../"))
import necbaas as baas

from config import CONFIG

service = baas.Service(CONFIG)

# login test
res = baas.User.login(service, username="******", password="******")
print("login result:", res)

print()

# object bucket
objectBucket = baas.ObjectBucket(service, "test2")

obj = objectBucket.insert({"score": 90})
print("insert:", obj)

obj["score"] = 95
res = objectBucket.update(obj["_id"], obj, obj["etag"])
print("update:", res)

res = objectBucket.query(where={})
print("query:", res)

res = objectBucket.remove_with_query({})
print("delete:", res)

print()
예제 #12
0
 def get_bucket(self, expected_result):
     service = mock_service_json_resp(expected_result)
     bucket = baas.ObjectBucket(service, "bucket1")
     return service, bucket