rel 0.1.0 의 9개의 reg test에 multi node test를 위해 수정을 완료함. test 함수들의 구현은 blockchain-sim/testlibs/test_modules.py 에서 구현했음. 대표적으로 기존의 단일노드를 위한 test의 wallet address test 와 수정된 wallet address test를 비교를 해보면,
Before:
def test_walletAddress(simulation_output_file):
the_wallet_address = ""
f = open(simulation_output_file[1], "r")
while True:
line = f.readline()
if not line: break
result = line.find("isvalid")
if result != -1:
the_wallet_validation = line.split(",")[0].split('"')[4].split(":")[1]
if the_wallet_validation == "true":
print("Success wallet validation test ... ")
break
else:
print("Fail wallet validation test ... ")
sys.exit(1)
After
def test_walletAddress(simulation_output_file, node_count):
condition_count = 0
for z in range(0,node_count):
f = open(simulation_output_file[z+node_count], "r")
while True:
line = f.readline()
if not line: break
result = line.find("isvalid")
if result != -1:
the_wallet_validation = line.split(",")[0].split('"')[4].split(":")[1]
if the_wallet_validation == "true":
condition_count += 1
continue
test_result(condition_count, node_count, "test_walletAddress ")
parameter로 노드 개수를 가져와서, 노드 개수만큼 테스트를 진행하는 식임. 즉 5개 노드가 시뮬레이션이 진행되면, 5개 노드 전부에 대해 wallet address test가 수행이 됨. 모든 test가 이런식으로 수정이 됨.
마지막에 test_result함수는 최종 결과를 보여주는 함수로서, test_modules.py에 구현이 됨.
이슈와 관련없는 기능이지만, shadow plugin error가 발생했을 시, user에게 print해주는 기능을 추가함.
기존의 test_file_existence 함수는 stdout 파일만 필터링을 하였는데, 이 함수에 stderr 파일 또한 필터링 하는 기능을 추가를 해줌.
def test_file_existence(node_id_list, plugin_list):
if len(node_id_list) != len(plugin_list):
sys.exit(1)
path = os.path.abspath(".")
target_folder_list = []
target_error_list = []
error_list = []
for i in range(0,len(node_id_list)):
target_path = path + "/shadow.data/hosts/" + node_id_list[i] + "/stdout-" + node_id_list[i] + "." + plugin_list[i] + ".1000.log"
target_folder_list.append(target_path)
target_path = path + "/shadow.data/hosts/" + node_id_list[i] + "/stderr-" + node_id_list[i] + "." + plugin_list[i] + ".1000.log"
target_error_list.append(target_path)
for i in range(0,len(target_folder_list)):
if os.path.isfile(target_folder_list[i]) == False:
print("Fail not existence shadow plugin output file - %s" %(target_folder_list[i]))
sys.exit(1)
if os.path.isfile(target_error_list[i]) == True:
error_list.append(target_error_list[i])
if len(error_list) != 0:
print("Fail shadow plugin running ...")
print("-------------- shadow plugin error contents --------------")
for i in range(0,len(error_list)):
f = open(error_list[i], "r")
while True:
line = f.readline().strip()
print(line)
if not line: break
f.close()
sys.exit(1)
print("Success blockchain test output file existence ...")
return target_folder_list
수정된 소스코드는 다음과 같고, 예를들어 4개의 노드를 셋팅하고 실행했을 시, 노드 개수만큼 4개의 data dir 가 셋팅이 되어야하는데, 그렇지 못할 경우 datadir의 부재 관련한 stderr 파일이 생길 것임.
위에 사진처럼 user에게 stderr 내용을 프린트하고 sys.exit(1) - 에러 종료가 됨.
rel 0.1.0 의 9개의 reg test에 multi node test를 위해 수정을 완료함. test 함수들의 구현은 blockchain-sim/testlibs/test_modules.py 에서 구현했음. 대표적으로 기존의 단일노드를 위한 test의 wallet address test 와 수정된 wallet address test를 비교를 해보면,
Before:
After
parameter로 노드 개수를 가져와서, 노드 개수만큼 테스트를 진행하는 식임. 즉 5개 노드가 시뮬레이션이 진행되면, 5개 노드 전부에 대해 wallet address test가 수행이 됨. 모든 test가 이런식으로 수정이 됨.
마지막에 test_result함수는 최종 결과를 보여주는 함수로서, test_modules.py에 구현이 됨.
이슈와 관련없는 기능이지만, shadow plugin error가 발생했을 시, user에게 print해주는 기능을 추가함. 기존의 test_file_existence 함수는 stdout 파일만 필터링을 하였는데, 이 함수에 stderr 파일 또한 필터링 하는 기능을 추가를 해줌.
수정된 소스코드는 다음과 같고, 예를들어 4개의 노드를 셋팅하고 실행했을 시, 노드 개수만큼 4개의 data dir 가 셋팅이 되어야하는데, 그렇지 못할 경우 datadir의 부재 관련한 stderr 파일이 생길 것임. 위에 사진처럼 user에게 stderr 내용을 프린트하고 sys.exit(1) - 에러 종료가 됨.