fix(network): prevent null multiplayer peer crashes offline/teardown and fix Nakama RPC session validation
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
extends "res://base_test.gd"
|
||||
|
||||
const COLLECTION = "ACollection"
|
||||
const K1 = "Question"
|
||||
const K2 = "Answer"
|
||||
const V1 = {"question": "Ultimate question"}
|
||||
const V2 = {"answer": "42"}
|
||||
|
||||
func setup():
|
||||
var username = str(randi_range(1000, 100000))
|
||||
var client = Nakama.create_client(Config.SERVER_KEY, Config.HOST, Config.PORT, Config.SCHEME)
|
||||
|
||||
var session = await client.authenticate_custom_async("MyIdentifier")
|
||||
if assert_cond(session.is_valid()):
|
||||
return
|
||||
|
||||
var objs = [
|
||||
NakamaWriteStorageObject.new(COLLECTION, K1, 1, 1, to_json(V1), ""),
|
||||
NakamaWriteStorageObject.new(COLLECTION, K2, 1, 1, to_json(V2), "")
|
||||
]
|
||||
var write : NakamaAPI.ApiStorageObjectAcks = await client.write_storage_objects_async(session, objs)
|
||||
if assert_false(write.is_exception()):
|
||||
return
|
||||
|
||||
var objs_ids = []
|
||||
for a in write.acks:
|
||||
#var obj : NakamaAPI.ApiStorageObjectAck = a
|
||||
objs_ids.append(NakamaStorageObjectId.new(a.collection, a.key, a.user_id, a.version))
|
||||
|
||||
var read : NakamaAPI.ApiStorageObjects = await client.read_storage_objects_async(session, objs_ids)
|
||||
if assert_false(read.is_exception()):
|
||||
return
|
||||
if assert_equal(read.objects.size(), 2):
|
||||
return
|
||||
if assert_equal(read.objects[0].collection, COLLECTION):
|
||||
return
|
||||
if assert_cond(read.objects[0].key in [K1, K2]):
|
||||
return
|
||||
if assert_cond(to_json(parse_json(read.objects[0].value)) in [to_json(V1), to_json(V2)]):
|
||||
return
|
||||
|
||||
# Delete one
|
||||
var del = await client.delete_storage_objects_async(session, [objs_ids[0]])
|
||||
if assert_false(del.is_exception()):
|
||||
return
|
||||
|
||||
# Confirm that one was deleted
|
||||
var read2 : NakamaAPI.ApiStorageObjects = await client.read_storage_objects_async(session, objs_ids)
|
||||
if assert_false(read2.is_exception()):
|
||||
return
|
||||
if assert_equal(read2.objects.size(), 1):
|
||||
return
|
||||
if assert_equal(read2.objects[0].collection, COLLECTION):
|
||||
return
|
||||
if assert_equal(read2.objects[0].key, objs_ids[1].key):
|
||||
return
|
||||
if assert_cond(to_json(parse_json(read2.objects[0].value)) in [to_json(V1), to_json(V2)]):
|
||||
return
|
||||
done()
|
||||
return
|
||||
|
||||
func _process(_delta):
|
||||
assert_time(3)
|
||||
|
||||
func to_json(value) -> String:
|
||||
return JSON.stringify(value)
|
||||
|
||||
func parse_json(value):
|
||||
var json = JSON.new()
|
||||
if json.parse(value) != OK:
|
||||
return null
|
||||
return json.get_data()
|
||||
Reference in New Issue
Block a user