コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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))
コード例 #6
0
    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))
コード例 #7
0
    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)
コード例 #8
0
 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")
コード例 #9
0
    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)}")
コード例 #10
0
    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)
コード例 #11
0
    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")
コード例 #12
0
    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")
コード例 #13
0
    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")
コード例 #14
0
    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")
コード例 #15
0
    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)
コード例 #16
0
    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)
コード例 #17
0
    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")
コード例 #18
0
    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)
コード例 #19
0
    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")
コード例 #20
0
    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")
コード例 #22
0
    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')
コード例 #23
0
    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)
コード例 #24
0
    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)
コード例 #25
0
    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')
コード例 #26
0
    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")
コード例 #27
0
    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)
コード例 #28
0
    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!")
コード例 #29
0
    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'")
コード例 #30
0
    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