def test_score_with_korean_comments(self): self.update_governance() # 1. install done value1 = 1 score_addr1, tx_hash1 = self._install_normal_score(value1) # 2. deploy update value2 = 2 raise_exception_start_tag("test_score_with_korean_comments") tx_results: List['TransactionResult'] = self._deploy_score( score_name="install/sample_score_with_korean_comments", value=value2, to_=score_addr1, expected_status=False) raise_exception_end_tag("test_score_with_korean_comments") self.assertEqual(tx_results[0].failure.code, ExceptionCode.SYSTEM_ERROR) # 3. assert get value: value1 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value1) # 4. set value: value3 value3 = 3 self.score_call(from_=self._accounts[0], to_=score_addr1, func_name="set_value", params={"value": hex(value3 * ICX_IN_LOOP)}) # 5. assert get value: value3 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value3)
def test_score_no_external_func(self): self.update_governance() # 1. install done value1 = 1 score_addr1, tx_hash1 = self._install_normal_score(value1) # 2. deploy update value2 = 2 raise_exception_start_tag("test_score_no_external_func") tx_results: List['TransactionResult'] = self._deploy_score(score_name="install/sample_score_no_external_func", value=value2, to_=score_addr1, expected_status=False) raise_exception_end_tag("test_score_no_external_func") self.assertEqual(tx_results[0].failure.code, ExceptionCode.ILLEGAL_FORMAT) self.assertEqual(tx_results[0].failure.message, "There is no external method in the SCORE") # 3. assert get value: value1 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value1) # 4. set value: value3 value3 = 3 self.score_call(from_=self._accounts[0], to_=score_addr1, func_name="set_value", params={"value": hex(value3 * ICX_IN_LOOP)}) # 5. assert get value: value3 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value3)
def test_score_tbears_mode(self): self.update_governance() # 1. install done value1 = 1 score_addr1, _ = self._install_normal_score(value1) # 2. deploy update value2 = 2 tx1 = self.create_deploy_score_tx("sample_deploy_scores", "install/sample_score", self._accounts[0], SYSTEM_SCORE_ADDRESS, deploy_params={'value': hex(value2)}, is_sys=True) raise_exception_start_tag("test_score_tbears_mode") prev_block, hash_list = self.make_and_req_block([tx1]) raise_exception_end_tag("test_score_tbears_mode") self._write_precommit_state(prev_block) tx_results: List['TransactionResult'] = self.get_tx_results(hash_list) self.assertEqual(tx_results[0].status, int(False)) self.assertEqual(tx_results[0].failure.code, ExceptionCode.INVALID_PARAMETER) self.assertIsInstance(tx_results[0].failure.message, str)
def test_score_no_zip(self): self.update_governance() # 1. install done value1 = 1 score_addr1, tx_hash1 = self._install_normal_score(value1) # 2. deploy update value2 = 2 raise_exception_start_tag("test_score_no_zip") tx_results: List['TransactionResult'] = self._deploy_score(score_name="install/update", value=value2, data=b'invalid', to_=score_addr1, expected_status=False) raise_exception_end_tag("test_score_no_zip") self.assertEqual(tx_results[0].failure.code, ExceptionCode.INVALID_PACKAGE) self.assertEqual(tx_results[0].failure.message, f'Bad zip file.') # 3. assert get value: value1 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value1) # 4. set value: value3 value3 = 3 self.score_call(from_=self._accounts[0], to_=score_addr1, func_name="set_value", params={"value": hex(value3 * ICX_IN_LOOP)}) # 5. assert get value: value3 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value3)
def test_apply_score_import_white_list(self): tx1: dict = self.create_deploy_score_tx( score_root="sample_scores", score_name="sample_score_using_import_os", from_=self._accounts[0], to_=ZERO_SCORE_ADDRESS) tx2: dict = self.create_score_call_tx( from_=self._admin, to_=GOVERNANCE_SCORE_ADDRESS, func_name="addImportWhiteList", params={"importStmt": "{'os': []}"}) tx3: dict = self.create_deploy_score_tx( score_root="sample_scores", score_name="sample_score_using_import_os", from_=self._accounts[0], to_=ZERO_SCORE_ADDRESS) raise_exception_start_tag("sample_apply_score_import_white_list") prev_block, hash_list = self.make_and_req_block([tx1, tx2, tx3]) raise_exception_end_tag("sample_apply_score_import_white_list") self._write_precommit_state(prev_block) tx_results: List['TransactionResult'] = self.get_tx_results(hash_list) self.assertEqual(tx_results[0].status, int(False)) self.assertEqual(tx_results[1].status, int(True)) self.assertEqual(tx_results[2].status, int(True))
def test_apply_score_import_white_list(self): self.import_white_list_enable() tx1 = self._make_deploy_tx("test_scores", "l_coin_0_5_0_using_import_os", self._addr_array[0], ZERO_SCORE_ADDRESS) # add import whitelist tx2 = self._make_score_call_tx(self._admin, GOVERNANCE_SCORE_ADDRESS, 'addImportWhiteList', {"importStmt": "{'os': []}"}) tx3 = self._make_deploy_tx("test_scores", "l_coin_0_5_0_using_import_os", self._addr_array[0], ZERO_SCORE_ADDRESS) raise_exception_start_tag("test_apply_score_import_white_list") prev_block, tx_results = self._make_and_req_block([tx1, tx2, tx3]) raise_exception_end_tag("test_apply_score_import_white_list") self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(False)) self.assertEqual(tx_results[1].status, int(True)) self.assertEqual(tx_results[2].status, int(True))
def test_invalid_owner(self): self.update_governance() # 1. install done value1 = 1 score_addr1, tx_hash1 = self._install_normal_score(value1) # 2. deploy update value2 = 2 raise_exception_start_tag("test_invalid_owner -1") tx_results: List['TransactionResult'] = self.deploy_score(score_root="sample_deploy_scores", score_name="update/sample_score", from_=self._accounts[1], deploy_params={'value': hex(value2 * ICX_IN_LOOP)}, to_=score_addr1, expected_status=False) raise_exception_end_tag("test_invalid_owner -1") self.assertEqual(tx_results[0].failure.code, ExceptionCode.ACCESS_DENIED) self.assertEqual(tx_results[0].failure.message, f'Invalid owner: {str(self._accounts[0].address)} ' f'!= {str(self._accounts[1].address)}') # 3. assert get value: value1 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value1) # 4. set value: value3 value3 = 3 self.score_call(from_=self._accounts[0], to_=score_addr1, func_name="set_value", params={"value": hex(value3 * ICX_IN_LOOP)}) # 5. assert get value: value3 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value3)
def test_default_value_fail_update(self): raise_exception_start_tag("sample_default_value_fail_update") self.deploy_score(score_root="sample_scores", score_name="sample_default_value_fail2", from_=self._accounts[0], expected_status=False) raise_exception_end_tag("sample_default_value_fail_update")
def test_governance_call_about_add_remove_auditor_score_addr_update_governance( self): self._update_governance() score_addr = create_address(1) raise_exception_start_tag("addAuditor") tx_result = self._external_call(self._admin, GOVERNANCE_SCORE_ADDRESS, 'addAuditor', {"address": str(score_addr)}) raise_exception_end_tag("addAuditor") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_result.failure.message, f"Invalid EOA Address: {str(score_addr)}") raise_exception_start_tag("removeAuditor") tx_result = self._external_call(self._admin, GOVERNANCE_SCORE_ADDRESS, 'removeAuditor', {"address": str(score_addr)}) raise_exception_end_tag("removeAuditor") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_result.failure.message, f"Invalid EOA Address: {str(score_addr)}")
def test_tx_failure(self): self._icon_service_engine._icon_score_deploy_engine.attach_mock( Mock(return_value=False), 'is_data_type_supported') self._icon_service_engine._icon_score_engine. \ attach_mock(Mock(side_effect=IconServiceBaseException("error")), "invoke") from_ = Mock(spec=Address) to_ = Mock(spec=Address) tx_index = Mock(spec=int) self._mock_context.tx.attach_mock(tx_index, "index") self._mock_context.tx_batch = TransactionBatch() raise_exception_start_tag("test_tx_failure") tx_result = self._icon_service_engine._handle_icx_send_transaction( self._mock_context, {'from': from_, 'to': to_}) raise_exception_end_tag("test_tx_failure") self._icon_service_engine._charge_transaction_fee.assert_called() self.assertEqual(0, tx_result.status) self.assertEqual(tx_index, tx_result.tx_index) self.assertIsNone(tx_result.score_address) camel_dict = tx_result.to_dict(to_camel_case) self.assertNotIn('scoreAddress', camel_dict)
def test_non_payable_fallback_send_0_and_1(self): tx = self._make_deploy_tx("test_fallback_call_scores", "test_non_payable_fallback", self._addr_array[0], ZERO_SCORE_ADDRESS) # update governance SCORE(revision4) self._update_governance('0_0_4') self._set_revision(3) prev_block, tx_results = self._make_and_req_block([tx]) self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(True)) score_addr = tx_results[0].score_address raise_exception_start_tag("test_non_payable_fallback_send_0_and_1") value = 0 * self._icx_factor tx = self._make_icx_send_tx(self._genesis, score_addr, value) prev_block, tx_results = self._make_and_req_block([tx]) self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(False)) self.assertEqual(tx_results[0].failure.code, ExceptionCode.METHOD_NOT_FOUND) self.assertTrue( tx_results[0].failure.message.startswith("Method not found")) value = 1 * self._icx_factor tx = self._make_icx_send_tx(self._genesis, score_addr, value) prev_block, tx_results = self._make_and_req_block([tx]) self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(False)) self.assertEqual(tx_results[0].failure.code, ExceptionCode.METHOD_NOT_FOUND) self.assertTrue( tx_results[0].failure.message.startswith("Method not found")) raise_exception_end_tag("test_non_payable_fallback_send_0_and_1")
def test_governance_call_about_add_remove_auditor_not_owner_update_governance( self): self._update_governance() eoa_addr = create_address() raise_exception_start_tag("addAuditor") tx_result = self._external_call(self._addr_array[0], GOVERNANCE_SCORE_ADDRESS, 'addAuditor', {"address": str(eoa_addr)}) raise_exception_end_tag("addAuditor") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_result.failure.message, f"Invalid sender: not owner") raise_exception_start_tag("removeAuditor") tx_result = self._external_call(self._addr_array[0], GOVERNANCE_SCORE_ADDRESS, 'removeAuditor', {"address": str(eoa_addr)}) raise_exception_end_tag("removeAuditor") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_result.failure.message, f"Invalid address: not in list")
def test_governance_call_about_blacklist_not_owner_update_governance(self): self._update_governance() score_addr = create_address(1) raise_exception_start_tag("addToScoreBlackList") tx_result = self._external_call(self._addr_array[0], GOVERNANCE_SCORE_ADDRESS, 'addToScoreBlackList', {"address": str(score_addr)}) raise_exception_end_tag("addToScoreBlackList") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_result.failure.message, f"Invalid sender: not owner") raise_exception_start_tag("removeFromScoreBlackList") tx_result = self._external_call(self._addr_array[0], GOVERNANCE_SCORE_ADDRESS, 'removeFromScoreBlackList', {"address": str(score_addr)}) raise_exception_end_tag("removeFromScoreBlackList") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_result.failure.message, f"Invalid sender: not owner")
def test_non_payable_fallback_send_0_and_1(self): # update governance SCORE(revision4) self.update_governance("0_0_4") self.set_revision(3) tx_results: List['TransactionResult'] = self.deploy_score( score_root="sample_fallback_call_scores", score_name="sample_non_payable_fallback", from_=self._accounts[0]) score_addr: 'Address' = tx_results[0].score_address raise_exception_start_tag("sample_non_payable_fallback_send_0_and_1") value = 0 * ICX_IN_LOOP tx: dict = self.create_transfer_icx_tx(from_=self._admin, to_=score_addr, value=value) tx_results: List['TransactionResult'] = self.process_confirm_block_tx( [tx], expected_status=False) self.assertEqual(tx_results[0].failure.code, ExceptionCode.METHOD_NOT_FOUND) self.assertTrue( tx_results[0].failure.message.startswith("Method not found")) value = 1 * ICX_IN_LOOP tx: dict = self.create_transfer_icx_tx(from_=self._admin, to_=score_addr, value=value) tx_results: List['TransactionResult'] = self.process_confirm_block_tx( [tx], expected_status=False) self.assertEqual(tx_results[0].failure.code, ExceptionCode.METHOD_NOT_FOUND) self.assertTrue( tx_results[0].failure.message.startswith("Method not found")) raise_exception_end_tag("sample_non_payable_fallback_send_0_and_1")
def test_invalid_owner(self): value1 = 1 * self._icx_factor tx1 = self._make_deploy_tx("test_deploy_scores", "install/test_score", self._addr_array[0], ZERO_SCORE_ADDRESS, deploy_params={'value': hex(value1)}) prev_block, tx_results = self._make_and_req_block([tx1]) self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(True)) score_addr1 = tx_results[0].score_address value2 = 2 * self._icx_factor tx2 = self._make_deploy_tx("test_deploy_scores", "update/test_score", self._addr_array[1], score_addr1, deploy_params={'value': hex(value2)}) raise_exception_start_tag("test_invalid_owner") prev_block, tx_results = self._make_and_req_block([tx2]) raise_exception_end_tag("test_invalid_owner") self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(False)) self.assertEqual(tx_results[0].failure.code, ExceptionCode.SERVER_ERROR) self.assertEqual(tx_results[0].failure.message, f'invalid owner: {str(self._addr_array[0])} != {str(self._addr_array[1])}') query_request = { "version": self._version, "from": self._admin, "to": score_addr1, "dataType": "call", "data": { "method": "get_value", "params": {} } } response = self._query(query_request) self.assertEqual(response, value1) value3 = 3 * self._icx_factor tx3 = self._make_score_call_tx(self._addr_array[0], score_addr1, 'set_value', {"value": hex(value3)}) prev_block, tx_results = self._make_and_req_block([tx3]) self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(True)) response = self._query(query_request) self.assertEqual(response, value3)
def test_tx_failure(self, score_invoke): score_invoke.side_effect = Mock( side_effect=InvalidParamsException("error")) from_ = Address.from_data(AddressPrefix.EOA, os.urandom(20)) to_ = Address.from_data(AddressPrefix.CONTRACT, os.urandom(20)) tx_index = randrange(0, 100) self._mock_context.tx = Transaction(os.urandom(32), tx_index, from_, to_, 0) self._mock_context.msg = Message(from_) self._mock_context.tx_batch = TransactionBatch() raise_exception_start_tag("test_tx_failure") tx_result = self._icon_service_engine._handle_icx_send_transaction( self._mock_context, { 'from': from_, 'to': to_ }) raise_exception_end_tag("test_tx_failure") self._icon_service_engine._charge_transaction_fee.assert_called() self.assertEqual(0, tx_result.status) self.assertEqual(tx_index, tx_result.tx_index) self.assertIsNone(tx_result.score_address) camel_dict = tx_result.to_dict(to_camel_case) self.assertNotIn('scoreAddress', camel_dict)
def test_governance_call_about_add_remove_auditor_invalid_address(self): self._update_governance_score() raise_exception_start_tag("addAuditor") tx_results: List['TransactionResult'] = self.score_call( from_=self._admin, to_=GOVERNANCE_SCORE_ADDRESS, func_name="addAuditor", params={"address": str("")}, expected_status=False) raise_exception_end_tag("addAuditor") self.assertEqual(tx_results[0].failure.code, ExceptionCode.INVALID_PARAMETER) self.assertEqual(tx_results[0].failure.message, "Invalid address") raise_exception_start_tag("removeAuditor") tx_results: List['TransactionResult'] = self.score_call( from_=self._admin, to_=GOVERNANCE_SCORE_ADDRESS, func_name="removeAuditor", params={"address": str("")}, expected_status=False) raise_exception_end_tag("removeAuditor") self.assertEqual(tx_results[0].failure.code, ExceptionCode.INVALID_PARAMETER) self.assertEqual(tx_results[0].failure.message, "Invalid address")
def test_score_no_python(self): value1 = 1 * self._icx_factor tx1 = self._make_deploy_tx("test_deploy_scores", "install/test_score_no_python", self._addr_array[0], ZERO_SCORE_ADDRESS, deploy_params={'value': hex(value1)}) prev_block, tx_results = self._make_and_req_block([tx1]) self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(True)) tx_hash1 = tx_results[0].tx_hash tx2 = self._make_score_call_tx(self._admin, GOVERNANCE_SCORE_ADDRESS, 'acceptScore', {"txHash": f'0x{bytes.hex(tx_hash1)}'}) raise_exception_start_tag("test_score_no_python") prev_block, tx_results = self._make_and_req_block([tx2]) raise_exception_end_tag("test_score_no_python") self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(False)) self.assertEqual(tx_results[0].failure.code, ExceptionCode.SERVER_ERROR)
def test_governance_call_about_add_remove_auditor_not_owner_update_governance( self): self._update_governance_score() eoa_addr = create_address() raise_exception_start_tag("addAuditor") tx_results: List['TransactionResult'] = self.score_call( from_=self._accounts[0], to_=GOVERNANCE_SCORE_ADDRESS, func_name="addAuditor", params={"address": str(eoa_addr)}, expected_status=False) raise_exception_end_tag("addAuditor") self.assertEqual(tx_results[0].failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_results[0].failure.message, f"Invalid sender: not owner") raise_exception_start_tag("removeAuditor") tx_results: List['TransactionResult'] = self.score_call( from_=self._accounts[0], to_=GOVERNANCE_SCORE_ADDRESS, func_name="removeAuditor", params={"address": str(eoa_addr)}, expected_status=False) raise_exception_end_tag("removeAuditor") self.assertEqual(tx_results[0].failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_results[0].failure.message, f"Invalid address: not in list")
def test_score_no_python(self): self._update_governance_score() # 1. install done value1 = 1 score_addr1, tx_hash1, tx_hash2 = self._install_normal_score(value1) # 2. deploy update (wait audit) value2 = 2 tx_results: List['TransactionResult'] = self._deploy_score( score_name="install/sample_score_no_python", value=value2, to_=score_addr1) tx_hash3 = tx_results[0].tx_hash # 3. accept SCORE : tx_hash3 raise_exception_start_tag("test_score_no_python") tx_results: List['TransactionResult'] = self.accept_score(tx_hash=tx_hash3, expected_status=False) raise_exception_end_tag("test_score_no_python") self.assertEqual(tx_results[0].failure.code, ExceptionCode.SYSTEM_ERROR) # 4. assert get value: value1 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value1) # 5. set value: value3 value3 = 3 self.score_call(from_=self._accounts[0], to_=score_addr1, func_name="set_value", params={"value": hex(value3 * ICX_IN_LOOP)}) # 6. assert get value: value3 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value3)
def test_invalid_kwargs_parameter_value_oninstall(self): self.update_governance() tx_results: List['TransactionResult'] = self.deploy_score( score_root="sample_deploy_scores", score_name=f"install/sample_legacy_kwargs_params", from_=self._accounts[0], to_=SYSTEM_SCORE_ADDRESS) score_address = tx_results[0].score_address query_request = { "from": self._admin, "to": score_address, "dataType": "call", "data": { "method": "hello", } } self.assertEqual(self._query(query_request), "Hello") self.set_revision(3) raise_exception_start_tag( "sample_invalid_kwargs_parameter_value_oninstall") self.deploy_score(score_root="sample_deploy_scores", score_name=f"install/sample_legacy_kwargs_params", from_=self._accounts[0], to_=SYSTEM_SCORE_ADDRESS, expected_status=False) raise_exception_end_tag( "sample_invalid_kwargs_parameter_value_oninstall")
def test_link_score_loop(self): tx1: dict = self.create_deploy_score_tx( score_root="sample_internal_call_scores", score_name="sample_link_loop", from_=self._accounts[0], to_=SYSTEM_SCORE_ADDRESS) tx2: dict = self.create_deploy_score_tx( score_root="sample_internal_call_scores", score_name="sample_link_loop", from_=self._accounts[0], to_=SYSTEM_SCORE_ADDRESS) tx_results: List['TransactionResult'] = self.process_confirm_block_tx( [tx1, tx2]) score_addr1: 'Address' = tx_results[0].score_address score_addr2: 'Address' = tx_results[1].score_address tx3: dict = self.create_score_call_tx( from_=self._accounts[0], to_=score_addr2, func_name="add_score_func", params={"score_addr": str(score_addr1)}) tx4: dict = self.create_score_call_tx( from_=self._accounts[0], to_=score_addr1, func_name="add_score_func", params={"score_addr": str(score_addr2)}) self.process_confirm_block_tx([tx3, tx4]) query_request = { "version": self._version, "from": self._admin, "to": score_addr2, "dataType": "call", "data": { "method": "get_value", "params": {} } } with self.assertRaises(StackOverflowException) as e: self._query(query_request) self.assertEqual(e.exception.message, 'Max call stack size exceeded') value2 = 2 * ICX_IN_LOOP raise_exception_start_tag("sample_link_score_loop") tx_results: List['TransactionResult'] = self.score_call( from_=self._accounts[0], to_=score_addr2, func_name="set_value", params={"value": hex(value2)}, expected_status=False) raise_exception_end_tag("sample_link_score_loop") self.assertEqual(tx_results[0].failure.message, 'Max call stack size exceeded')
def test_score_no_python(self): self._update_governance() # 1. deploy value1 = 1 * self._icx_factor raise_exception_start_tag("test_deploy_scores") tx_result = self._deploy_score("install/test_score_no_python", value1, self._addr_array[0]) raise_exception_end_tag("test_deploy_scores") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SYSTEM_ERROR)
def test_prev_deploy_accept(self): self._update_governance_score() # 1. install done value1 = 1 score_addr1, tx_hash1, tx_hash2 = self._install_normal_score(value1) # 2. deploy update (wait audit) """ def on_update(self, value: int) -> None: super().on_update() var = self._value.get() self._value.set(var + value) def set_value(self, value: int): self._value.set(value * 2) self.Changed(value) """ value2 = 2 tx_results: List['TransactionResult'] = self._deploy_score(score_name="update/sample_score", value=value2, to_=score_addr1) tx_hash3 = tx_results[0].tx_hash # new update deploy value3 = 3 tx_results: List['TransactionResult'] = self._deploy_score(score_name="update/sample_score", value=value3, to_=score_addr1) tx_hash4 = tx_results[0].tx_hash # 3. assert get value: value1 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value1) # 4. accept SCORE : tx_hash3 (Fail) raise_exception_start_tag("test_prev_deploy_accept") self.accept_score(tx_hash=tx_hash3, expected_status=False) raise_exception_end_tag("test_prev_deploy_accept") # 5. accept SCORE : tx_hash4 self.accept_score(tx_hash=tx_hash4) # 6. assert get value: value1 + value3 self._assert_get_value(self._accounts[0], score_addr1, "get_value", value1 + value3) # 7. set value: value3 self.score_call(from_=self._accounts[0], to_=score_addr1, func_name="set_value", params={"value": hex(value3 * ICX_IN_LOOP)}) # 8. assert get value: 2 * value3 self._assert_get_value(self._accounts[0], score_addr1, "get_value", 3 * value2)
def test_invalid_owner(self): raise_exception_start_tag("sample_invalid_owner") tx_results: List['TransactionResult'] = self.score_call(from_=self._accounts[0], to_=GOVERNANCE_SCORE_ADDRESS, func_name='updateServiceConfig', params={"serviceFlag": hex(IconServiceFlag.AUDIT)}, expected_status=False) raise_exception_end_tag("sample_invalid_owner") self.assertEqual(tx_results[0].failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_results[0].failure.message, f'Invalid sender: not owner')
def test_score_no_external_func(self): self._update_governance() # 1. deploy value1 = 1 * self._icx_factor raise_exception_start_tag("test_score_no_external_func") tx_result = self._deploy_score("install/test_score_no_external_func", value1, self._addr_array[0]) raise_exception_end_tag("test_score_no_external_func") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.ILLEGAL_FORMAT) self.assertEqual(tx_result.failure.message, "There is no external method in the SCORE")
def test_fake_system_score_wrong_owner(self): self._update_governance() # 1. deploy value1 = 1 * self._icx_factor raise_exception_start_tag("test_fake_system_score_wrong_owner") tx_result = self._deploy_score("install/fake_system_score", value1, self._addr_array[0]) raise_exception_end_tag("test_fake_system_score_wrong_owner") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.ACCESS_DENIED) self.assertIn(f'Not a system SCORE', tx_result.failure.message)
def test_score_on_install_error(self): self._update_governance() # 1. deploy value1 = 1 * self._icx_factor raise_exception_start_tag("test_score_on_install_error") tx_result = self._deploy_score("install/test_score_on_install_error", value1, self._addr_array[0]) raise_exception_end_tag("test_score_on_install_error") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SCORE_ERROR) self.assertEqual(tx_result.failure.message, "raise exception!")
def test_score_no_scorebase(self): self._update_governance() # 1. deploy value1 = 1 * self._icx_factor raise_exception_start_tag("test_score_no_scorebase") tx_result = self._deploy_score("install/test_score_no_scorebase", value1, self._addr_array[0]) raise_exception_end_tag("test_score_no_scorebase") self.assertEqual(tx_result.status, int(False)) self.assertEqual(tx_result.failure.code, ExceptionCode.SYSTEM_ERROR) self.assertEqual(tx_result.failure.message, "'TestScore' object has no attribute 'owner'")
def test_default_value_fail_external(self): tx1 = self._make_deploy_tx("test_scores", "test_default_value_fail3", self._addr_array[0], ZERO_SCORE_ADDRESS) raise_exception_start_tag("test_default_value_fail_external") prev_block, tx_results = self._make_and_req_block([tx1]) raise_exception_end_tag("test_default_value_fail_external") self._write_precommit_state(prev_block) self.assertEqual(tx_results[0].status, int(False)) score_addr1 = tx_results[0].score_address