Get sent payments working in test (#299)

This commit is contained in:
Jonathan Zernik 2020-10-18 14:26:58 -04:00 committed by GitHub
parent a8ef9bc8b4
commit e834547cf6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 120 additions and 2 deletions

View file

@ -880,3 +880,10 @@ def test_connect_other_node(server_stub, admin_stub, other_server_stub, other_ad
get_squeak_display_response.squeak_display_entry.content_str
== "Hello from the profile on the server!"
)
# Get all sent payments
get_sent_payments_response = other_admin_stub.GetSentPayments(
squeak_admin_pb2.GetSentPaymentsRequest(),
)
squeak_hashes = [sent_payment.squeak_hash for sent_payment in get_sent_payments_response.sent_payments]
assert saved_squeak_hash.hex() in squeak_hashes

View file

@ -164,6 +164,10 @@ service SqueakAdmin {
*/
rpc PayOffer (PayOfferRequest) returns (PayOfferReply) {}
/** sqkadmin: `getsentpayments`
*/
rpc GetSentPayments (GetSentPaymentsRequest) returns (GetSentPaymentsReply) {}
}
message CreateSigningProfileRequest {
@ -539,3 +543,50 @@ message PayOfferReply {
/// Sent payment id
int32 sent_payment_id = 1;
}
message GetSentPaymentsRequest {
}
message GetSentPaymentsReply {
/// The sent payments
repeated SentPayment sent_payments = 1;
}
// message GetSentPaymentRequest {
// /// Sent payment id
// int32 sent_payment_id = 1;
// }
// message GetSentPaymentReply {
// /// The sent payment
// SentPayment sent_payment = 1;
// }
message SentPayment {
/// The sent payment id
int32 sent_payment_id = 1;
/// The offer id
int32 offer_id = 2;
/// The peer id
int32 peer_id = 3;
/// The squeak hash
string squeak_hash = 4;
/// The preimage hash
string preimage_hash = 5;
/// The preimage
string preimage = 6;
/// The amount
int64 amount = 7;
/// The seller node pubkey
string node_pubkey = 8;
/// Valid preimage
bool preimage_is_valid = 9;
}

View file

@ -284,3 +284,7 @@ class SqueakAdminServerHandler(object):
def handle_pay_offer(self, offer_id):
logger.info("Handle pay offer for offer id: {}".format(offer_id))
return self.squeak_node.pay_offer(offer_id)
def handle_get_sent_payments(self):
logger.info("Handle get sent payments")
return self.squeak_node.get_sent_payments()

View file

@ -304,6 +304,19 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer):
sent_payment_id=sent_payment_id,
)
def GetSentPayments(self, request, context):
sent_payments = self.handler.handle_get_sent_payments()
sent_payment_msgs = [self._sent_payment_to_message(sent_payment) for sent_payment in sent_payments]
logger.info("Returning sent payments: {}".format(sent_payment_msgs))
return squeak_admin_pb2.GetSentPaymentsReply(
sent_payments=sent_payment_msgs,
)
# def GetSentPayment(self, request, context):
# return squeak_admin_pb2.GetSentPaymentReply(
# sent_payment=None,
# )
def _squeak_entry_to_message(self, squeak_entry_with_profile):
if squeak_entry_with_profile is None:
return None
@ -374,6 +387,22 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer):
invoice_expiry=offer.invoice_expiry,
)
def _sent_payment_to_message(self, sent_payment):
if sent_payment is None:
return None
logger.info("sent_payment: {}".format(sent_payment))
return squeak_admin_pb2.SentPayment(
sent_payment_id=sent_payment.sent_payment_id,
offer_id=sent_payment.offer_id,
peer_id=sent_payment.peer_id,
squeak_hash=sent_payment.squeak_hash,
preimage_hash=sent_payment.preimage_hash,
preimage=sent_payment.preimage,
amount=sent_payment.amount,
node_pubkey=sent_payment.node_pubkey,
preimage_is_valid=sent_payment.preimage_is_valid,
)
def serve(self):
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
squeak_admin_pb2_grpc.add_SqueakAdminServicer_to_server(self, server)

View file

@ -26,6 +26,7 @@ from squeakserver.core.squeak_entry import SqueakEntry
from squeakserver.core.squeak_entry_with_profile import SqueakEntryWithProfile
from squeakserver.server.squeak_peer import SqueakPeer
from squeakserver.server.squeak_profile import SqueakProfile
from squeakserver.server.sent_payment import SentPayment
from squeakserver.server.util import get_hash
logger = logging.getLogger(__name__)
@ -1003,6 +1004,15 @@ class SqueakDb:
sent_payment_id = res.inserted_primary_key[0]
return sent_payment_id
def get_sent_payments(self):
""" Get all sent payments. """
s = select([self.sent_payments])
with self.get_connection() as connection:
result = connection.execute(s)
rows = result.fetchall()
sent_payments = [self._parse_sent_payment(row) for row in rows]
return sent_payments
def _parse_squeak_entry(self, row):
if row is None:
return None
@ -1101,3 +1111,18 @@ class SqueakDb:
offer=offer,
peer=peer,
)
def _parse_sent_payment(self, row):
if row is None:
return None
return SentPayment(
sent_payment_id=row["sent_payment_id"],
offer_id=row["offer_id"],
peer_id=row["peer_id"],
squeak_hash=row["squeak_hash"],
preimage_hash=row["preimage_hash"],
preimage=row["preimage"],
amount=row["amount"],
node_pubkey=row["node_pubkey"],
preimage_is_valid=row["preimage_is_valid"],
)

View file

@ -285,7 +285,7 @@ class SqueakNode:
peer_id=offer.peer_id,
squeak_hash=offer.squeak_hash,
preimage_hash=offer.payment_hash,
preimage=preimage,
preimage=preimage.hex(),
amount=offer.price_msat,
node_pubkey=offer.destination,
preimage_is_valid=is_valid_preimage,
@ -322,6 +322,8 @@ class SqueakNode:
serialized_decryption_key,
)
def sync_squeaks(self):
self.squeak_peer_sync_worker.sync_peers()
def get_sent_payments(self):
return self.postgres_db.get_sent_payments()