mirror of
				https://github.com/0glabs/0g-storage-node.git
				synced 2025-11-04 00:27:39 +00:00 
			
		
		
		
	
		
			
	
	
		
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/env python3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import random
							 | 
						||
| 
								 | 
							
								import threading
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from utility.submission import create_submission, submit_data
							 | 
						||
| 
								 | 
							
								from utility.utils import (
							 | 
						||
| 
								 | 
							
								    wait_until,
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								from test_framework.test_framework import TestFramework
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ParallelSubmissionTest(TestFramework):
							 | 
						||
| 
								 | 
							
								    def setup_params(self):
							 | 
						||
| 
								 | 
							
								        self.num_blockchain_nodes = 2
							 | 
						||
| 
								 | 
							
								        self.num_nodes = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def run_test(self):
							 | 
						||
| 
								 | 
							
								        size = 245759
							 | 
						||
| 
								 | 
							
								        thread_count = 16
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        chunks = self.generate_data(size, thread_count)
							 | 
						||
| 
								 | 
							
								        for submission, _, _ in chunks:
							 | 
						||
| 
								 | 
							
								            self.log.info("submission: %s", submission)
							 | 
						||
| 
								 | 
							
								            self.contract.submit(submission)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        wait_until(lambda: self.contract.num_submissions() == thread_count)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        client = self.nodes[0]
							 | 
						||
| 
								 | 
							
								        for _, data_root, _ in chunks:
							 | 
						||
| 
								 | 
							
								            wait_until(lambda: client.zgs_get_file_info(data_root) is not None)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        def submit(client, chunk_data):
							 | 
						||
| 
								 | 
							
								            submit_data(client, chunk_data)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        threads = []
							 | 
						||
| 
								 | 
							
								        for _, _, chunk_data in chunks:
							 | 
						||
| 
								 | 
							
								            t = threading.Thread(target=submit, args=(client, chunk_data))
							 | 
						||
| 
								 | 
							
								            threads.append(t)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for t in threads[::-1]:
							 | 
						||
| 
								 | 
							
								            t.start()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for t in threads:
							 | 
						||
| 
								 | 
							
								            t.join()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for _, data_root, _ in chunks:
							 | 
						||
| 
								 | 
							
								            wait_until(lambda: client.zgs_get_file_info(data_root)["finalized"])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def generate_data(self, size, num):
							 | 
						||
| 
								 | 
							
								        res = []
							 | 
						||
| 
								 | 
							
								        for _ in range(num):
							 | 
						||
| 
								 | 
							
								            chunk_data = random.randbytes(size)
							 | 
						||
| 
								 | 
							
								            submission = create_submission(chunk_data)
							 | 
						||
| 
								 | 
							
								            res.append((submission[0], submission[1], chunk_data))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return res
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == "__main__":
							 | 
						||
| 
								 | 
							
								    ParallelSubmissionTest().main()
							 |