예제 #1
0
def test_create_not_unique_hash(empty_database, app):
    sk, pk = create_users_keys()

    send = functools.partial(send_json, app, "post", "/users")
    response = send(dict(login="******", vk_id="1", hash=bytes_to_base64(pk)))
    assert response.status_code == 201
    assert response.get_json() == {"id": 1, "login": "******"}

    response = send(dict(login="******", vk_id="2", hash=bytes_to_base64(pk)))
    assert response.status_code == 409
예제 #2
0
def create_review(product_id, review, sk, tree_path):
    review_struct = {'review': review, 'nonce': random.randint(0, 100500)}

    review = json.dumps(review_struct)
    prover = snark.Prover(config.PROVING_KEY)
    zk_snark, review_id, review_sig, root = prover.create_snark(
        sk, tree_path, product_id, review)
    review = {
        'review': review,
        'review_id': bytes_to_base64(review_id),
        'review_sig': bytes_to_base64(review_sig),
        'product_id': product_id,
        'snark': bytes_to_base64(zk_snark),
        'tree_root': bytes_to_base64(root)
    }
    return review
예제 #3
0
def create_user(app, login, password, vk_id):
    prover = snark.Prover(config.PROVING_KEY)
    sk, pk = prover.get_key(login, password)
    response = send_json(
        app, "post", "/users",
        dict(login=login, vk_id=vk_id, hash=bytes_to_base64(pk)))
    assert response.status_code == 201
    assert response.get_json() == {"id": 1, "login": login}
    return sk, pk
예제 #4
0
def test_user_register(empty_database, app):
    send = functools.partial(send_json, app, "post", "/users")

    response = app.post("/users")
    assert response.get_json() == {"message": {"login": "******"}}

    response = send(dict(login="******"))
    assert response.get_json() == {"message": {"vk_id": "Missing required parameter in the JSON body"}}

    response = send(dict(login="******", vk_id="1"))
    assert response.get_json() == {"message": {"hash": "Missing required parameter in the JSON body"}}

    sk, pk = create_users_keys()
    response = send(dict(login="******", vk_id="1", hash=bytes_to_base64(pk)))
    assert response.status_code == 201
    assert response.get_json() == {"id": 1, "login": "******"}

    tree = snark.MerkleTree(config.TREE, config.TREE_INDEX)
    assert tree.check(pk)
예제 #5
0
def test_review_create(empty_database, app):
    send = functools.partial(send_json, app, "post", "/reviews")

    response = app.post("/reviews")
    assert response.get_json() == {
        "message": {
            "product_id": "Missing required parameter in the JSON body"
        }
    }

    response = send(dict(product_id=1))
    assert response.get_json() == {
        "message": {
            "review": "Missing required parameter in the JSON body"
        }
    }

    response = send(dict(product_id=1, review="4 8 15"))
    assert response.get_json() == {
        "message": {
            "review_id": "Missing required parameter in the JSON body"
        }
    }

    response = send(dict(product_id=1, review="4 8 15", review_id="1"))
    assert response.get_json() == {
        "message": {
            "review_sig": "Missing required parameter in the JSON body"
        }
    }

    response = send(
        dict(product_id=1, review="4 8 15", review_id="1", review_sig="1"))
    assert response.get_json() == {
        "message": {
            "snark": "Missing required parameter in the JSON body"
        }
    }

    response = send(
        dict(product_id=1,
             review="4 8 15",
             review_id="1",
             review_sig="1",
             snark="1"))
    assert response.get_json() == {
        "message": {
            "tree_root": "Missing required parameter in the JSON body"
        }
    }

    response = send(
        dict(product_id=1,
             review="4 8 15",
             review_id="1",
             review_sig="1",
             tree_root="1"))
    assert response.get_json() == {
        "message": {
            "snark": "Missing required parameter in the JSON body"
        }
    }

    tree = snark.MerkleTree(config.TREE, config.TREE_INDEX)
    sk, pk = create_user(app, "login", "pass", 1)
    response = app.get("/path",
                       query_string=dict(user_hash=bytes_to_base64(pk)))
    review = create_review("1", "4 8 1 16 23 42", sk,
                           base64_to_bytes(response.get_json()["path"]))
    d = datetime.datetime.utcnow()
    with mock.patch("datetime.datetime") as patched:
        patched.utcnow = mock.Mock(return_value=d)
        review["rate"] = 4
        response = send(review)
        assert response.status_code == 201
        assert response.get_json() == {
            "id": review["review_id"],
            "review": "4 8 1 16 23 42",
            "rate": 4,
            "created_time": int(d.timestamp())
        }
예제 #6
0
def test_get(empty_database, app):
    sk1, pk1 = create_user(app, "login", "pass", "1")
    response = app.get("/path",
                       query_string=dict(user_hash=bytes_to_base64(pk1)))
    tree = snark.MerkleTree(config.TREE, config.TREE_INDEX)
    assert tree.get_path(pk1) == base64_to_bytes(response.get_json()["path"])