Skip to content

Commit

Permalink
Add test cases for swarm memory pop
Browse files Browse the repository at this point in the history
  • Loading branch information
BramSrna committed Mar 14, 2023
1 parent 4a64a80 commit ba77dd9
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 7 deletions.
7 changes: 5 additions & 2 deletions swarm/swarm_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,13 @@ def read_from_swarm_memory(self, key_to_read):
return self.swarm_memory_interface.read_from_swarm_memory(key_to_read)

def write_to_swarm_memory(self, key_to_write, value_to_write, data_type):
self.swarm_memory_interface.write_to_swarm_memory(key_to_write, value_to_write, data_type)
return self.swarm_memory_interface.write_to_swarm_memory(key_to_write, value_to_write, data_type)

def update_swarm_memory(self, key_to_update, new_value):
self.swarm_memory_interface.update_swarm_memory(key_to_update, new_value)
return self.swarm_memory_interface.update_swarm_memory(key_to_update, new_value)

def pop_from_swarm_memory(self, key_to_pop):
return self.swarm_memory_interface.pop_from_swarm_memory(key_to_pop)

def get_task_execution_history(self):
return self.task_execution_history
Expand Down
10 changes: 5 additions & 5 deletions swarm/swarm_memory/swarm_memory_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def pop_from_swarm_memory(self, key_to_pop):
)
elif bot_with_obj is not None:
self.local_swarm_memory.delete(key_to_pop)
self.executor_interface.send_directed_message(
response = self.executor_interface.send_sync_directed_message(
bot_with_obj,
MessageTypes.POP_FROM_SWARM_MEMORY,
{"KEY_TO_POP": key_to_pop}
Expand All @@ -66,6 +66,7 @@ def pop_from_swarm_memory(self, key_to_pop):
MessageTypes.DELETE_FROM_SWARM_MEMORY,
{"KEY_TO_DELETE": key_to_pop}
)
value = response.get_message_payload()["OBJECT_VALUE"]
else:
# else in this case means that the there is no key with the given value in the swarm memory
pass
Expand Down Expand Up @@ -102,10 +103,9 @@ def handle_pop_from_swarm_memory_message(self, message):
if self.local_swarm_memory.has_data_key(key_to_pop):
object_info = self.local_swarm_memory.read(key_to_pop)

self.executor_interface.send_directed_message(
message.get_sender_id(),
MessageTypes.RESPOND_TO_READ,
{"OBJECT_VALUE": object_info["VALUE"]}
self.executor_interface.respond_to_message(
message,
{"OBJECT_VALUE": object_info}
)

self.local_swarm_memory.delete(key_to_pop)
Expand Down
68 changes: 68 additions & 0 deletions swarm_bot_test/test_swarm_bot_swarm_memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,74 @@ def test_can_update_swarm_memory_objects_when_info_stored_on_non_directly_connec
self.assertEqual(new_val, test_swarm_bot_1.read_from_swarm_memory(test_mem_id))
self.assertEqual(new_val, test_swarm_bot_2.read_from_swarm_memory(test_mem_id))

def test_can_delete_swarm_memory_objects_when_info_stored_on_local_swarm_bot(self):
test_swarm_bot_1 = self.create_network_node(SwarmBot)

test_swarm_bot_1.startup()

test_mem_id = "TEST_ID"
original_val = "TEST_VAL_1"

test_swarm_bot_1.write_to_swarm_memory(test_mem_id, original_val, "str")

self.assertEqual(original_val, test_swarm_bot_1.read_from_swarm_memory(test_mem_id))

self.assertEqual(original_val, test_swarm_bot_1.pop_from_swarm_memory(test_mem_id))

self.assertEqual(None, test_swarm_bot_1.read_from_swarm_memory(test_mem_id))

def test_can_delete_swarm_memory_objects_when_info_stored_on_directly_connected_swarm_bot(self):
test_swarm_bot_1 = self.create_network_node(SwarmBot)
test_swarm_bot_2 = self.create_network_node(SwarmBot)

test_swarm_bot_1.startup()
test_swarm_bot_2.startup()

test_swarm_bot_1.connect_to_network_node(test_swarm_bot_2)
self.wait_for_idle_network()

test_mem_id = "TEST_ID"
original_val = "TEST_VAL_1"

test_swarm_bot_1.write_to_swarm_memory(test_mem_id, original_val, "str")
self.wait_for_idle_network()

self.assertEqual(original_val, test_swarm_bot_2.read_from_swarm_memory(test_mem_id))

self.assertEqual(original_val, test_swarm_bot_2.pop_from_swarm_memory(test_mem_id))
self.wait_for_idle_network()

self.assertEqual(None, test_swarm_bot_2.read_from_swarm_memory(test_mem_id))
self.assertEqual(None, test_swarm_bot_1.read_from_swarm_memory(test_mem_id))

def test_can_delete_swarm_memory_objects_when_info_stored_on_non_directly_connected_swarm_bot(self):
test_swarm_bot_1 = self.create_network_node(SwarmBot)
test_swarm_bot_2 = self.create_network_node(SwarmBot)
test_swarm_bot_3 = self.create_network_node(SwarmBot)

test_swarm_bot_1.startup()
test_swarm_bot_2.startup()
test_swarm_bot_3.startup()

test_swarm_bot_1.connect_to_network_node(test_swarm_bot_2)
test_swarm_bot_2.connect_to_network_node(test_swarm_bot_3)
self.wait_for_idle_network()

test_mem_id = "TEST_ID"
original_val = "TEST_VAL_1"

test_swarm_bot_1.write_to_swarm_memory(test_mem_id, original_val, "str")
self.wait_for_idle_network()

self.assertEqual(original_val, test_swarm_bot_3.read_from_swarm_memory(test_mem_id))

self.assertEqual(original_val, test_swarm_bot_3.pop_from_swarm_memory(test_mem_id))
self.wait_for_idle_network()

self.assertEqual(None, test_swarm_bot_3.read_from_swarm_memory(test_mem_id))
self.assertEqual(None, test_swarm_bot_2.read_from_swarm_memory(test_mem_id))
self.assertEqual(None, test_swarm_bot_1.read_from_swarm_memory(test_mem_id))


if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG)
Expand Down

0 comments on commit ba77dd9

Please sign in to comment.