#!/bin/env /usr/bin/python3 # # Copyright (C) 2023 Aravinth Manivannan # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . from asyncio import sleep import json from dcache import grpc_add_pow, grpc_get_pow, grpc_delete_pow # 1. Check duplicate pow # 2. Create pow # 3. Read non-existent pow # 4. Read pow # 5. Read expired pow def add_pow(captcha, pow): """Add pow to""" try: res = grpc_add_pow(captcha, pow) return res except Exception as e: return e def get_pow_from(captcha, pow): """Add pow to""" try: res = grpc_get_pow(captcha, pow) if res.HasField("result"): return res.result else: return None except Exception as e: return e def delete_pow(captcha, pow): """Add pow to""" try: grpc_delete_pow(pow) except Exception as e: return e async def add_pow_works(): """Test: Add pow""" try: key = "add_pow" pow_name = "add_pow_pow" add_pow(key, pow_name) stored_pow = get_pow_from(key, pow_name) assert stored_pow.difficulty_factor == 500 assert stored_pow.duration == 5 print("[*] Add pow works") except Exception as e: raise e async def pow_ttl_works(): """Test: pow TTL""" try: key = "ttl_pow" pow_name = "ttl_pow_pow" add_pow(key, pow_name) await sleep(5 + 2) error = get_pow_from(key, pow_name) assert error is None print("[*] pow TTL works") except Exception as e: raise e async def pow_doesnt_exist(): """Test: Non-existent pow""" try: pow_name = "nonexistent_pow" key = "nonexistent_pow_key" error = get_pow_from(key, pow_name) assert error is None print("[*] pow Doesn't Exist works") except Exception as e: raise e async def delete_pow_works(): """Test: Delete pows""" try: pow_name = "delete_pow" key = "delete_pow_key" # pow = get_pow(pow_name) add_pow(key, pow_name) delete_pow(key, pow_name) error = get_pow_from(key, pow_name) assert error is None print("[*] Delete pow works") except Exception as e: raise e