@@ -245,6 +245,71 @@ def test_validation_on_gpu_hypervisor_options():
245245 ) # Ignore "Value error, ..."
246246
247247
248+ def test_validation_on_payg_payment_options ():
249+ """Ensure that a node_hash option is required for stream payments."""
250+ path = Path (__file__ ).parent / "messages/instance_gpu_machine.json"
251+ message_dict = json .loads (path .read_text ())
252+ message_dict ["content" ]["requirements" ]["gpu" ] = None
253+ message = create_new_message (message_dict , factory = InstanceMessage )
254+
255+ assert isinstance (message , InstanceMessage )
256+ assert hash (message .content )
257+ assert message .content .payment
258+ assert message .content .payment .type == PaymentType .superfluid
259+ assert message .content .environment .hypervisor == HypervisorType .qemu
260+
261+ message_dict ["content" ]["requirements" ]["node" ] = None
262+ try :
263+ _ = create_new_message (message_dict , factory = InstanceMessage )
264+ raise AssertionError ("An exception should have been raised before this point." )
265+ except ValidationError as e :
266+ assert e .errors ()[0 ]["loc" ] in [("content" ,), ("content" , "__root__" )]
267+
268+ error_msg = e .errors ()[0 ]["msg" ]
269+ assert (
270+ "Node hash assignment is needed for PAYG or Credit payments" in error_msg
271+ ) # Ignore "Value error, ..."
272+
273+
274+ def test_validation_on_credits_payment_options ():
275+ """Ensure that a node_hash option is required for credit payments."""
276+ path = Path (__file__ ).parent / "messages/instance_gpu_machine.json"
277+ message_dict = json .loads (path .read_text ())
278+ # Patch the gpu field with some info
279+ message_dict ["content" ]["payment" ]["type" ] = "credit"
280+ message_dict ["content" ]["payment" ]["receiver" ] = None
281+ message = create_new_message (message_dict , factory = InstanceMessage )
282+
283+ assert isinstance (message , InstanceMessage )
284+ assert hash (message .content )
285+ assert message .content .payment
286+ assert message .content .payment .type == PaymentType .credit
287+ assert message .content .environment .hypervisor == HypervisorType .qemu
288+
289+ # Remove gpu field with some info
290+ message_dict ["content" ]["requirements" ]["gpu" ] = None
291+ message = create_new_message (message_dict , factory = InstanceMessage )
292+
293+ assert isinstance (message , InstanceMessage )
294+ assert hash (message .content )
295+ assert message .content .payment
296+ assert message .content .payment .type == PaymentType .credit
297+ assert message .content .environment .hypervisor == HypervisorType .qemu
298+ assert message .content .requirements .gpu is None
299+
300+ message_dict ["content" ]["requirements" ]["node" ] = None
301+ try :
302+ _ = create_new_message (message_dict , factory = InstanceMessage )
303+ raise AssertionError ("An exception should have been raised before this point." )
304+ except ValidationError as e :
305+ assert e .errors ()[0 ]["loc" ] in [("content" ,), ("content" , "__root__" )]
306+
307+ error_msg = e .errors ()[0 ]["msg" ]
308+ assert (
309+ "Node hash assignment is needed for PAYG or Credit payments" in error_msg
310+ ) # Ignore "Value error, ..."
311+
312+
248313def test_message_machine_port_mapping ():
249314 message_dict = {
250315 "chain" : "ETH" ,
0 commit comments