diff --git a/scripts/irods/test/test_prep_genquery_iterator.py b/scripts/irods/test/test_prep_genquery_iterator.py index f2e6178aa9..e47c452f93 100644 --- a/scripts/irods/test/test_prep_genquery_iterator.py +++ b/scripts/irods/test/test_prep_genquery_iterator.py @@ -832,11 +832,10 @@ def tearDown(self): super(Test_Genquery_Iterator, self).tearDown() - # TODO Replace issue_NNNN with real issue number. @unittest.skipUnless(plugin_name == 'irods_rule_engine_plugin-python', 'Requires PREP.') - def test_genquery_constructor_raises_exception_on_invalid_parser_argument__issue_NNNN(self): + def test_genquery_constructor_raises_exception_on_invalid_parser_argument__issue_7909(self): with temporary_core_file() as core: - attr_name = 'issue_NNNN_genquery2_error' + attr_name = 'test_genquery_constructor_raises_exception_on_invalid_parser_argument__issue_7909_error' # The following rule triggers and attaches the exception message generated # by the invalid parser argument to the Query constructor. @@ -844,14 +843,14 @@ def test_genquery_constructor_raises_exception_on_invalid_parser_argument__issue def pep_api_touch_pre(rule_args, callback, rei): try: import genquery - gq = genquery.Query(callback, 'COLL_NAME', parser=None) + _ = genquery.Query(callback, 'COLL_NAME', parser=None) except ValueError as e: callback.msiModAVUMetadata('-C', '{self.admin.session_collection}', 'add', '{attr_name}', str(e), '') ''')) # Trigger the PEP. # This will cause the rule to add an AVU to the session collection. - self.admin.assert_icommand(['itouch', 'issue_NNNN'], 'STDERR') + self.admin.assert_icommand(['itouch', 'issue_7909'], 'STDERR') # Show the AVU containing the error exists on the session collection. expected_output = [ @@ -860,10 +859,9 @@ def pep_api_touch_pre(rule_args, callback, rei): ] self.admin.assert_icommand(['imeta', 'ls', '-C', self.admin.session_collection], 'STDOUT', expected_output) - # TODO Replace issue_NNNN with real issue number. @unittest.skipUnless(plugin_name == 'irods_rule_engine_plugin-python', 'Requires PREP.') - def test_genquery_iterator_supports_genquery2__issue_NNNN(self): - rule_file = f'{self.admin.local_session_dir}/issue_NNNN.r' + def test_genquery_iterator_supports_genquery2__issue_7909(self): + rule_file = f'{self.admin.local_session_dir}/test_genquery_iterator_supports_genquery2__issue_7909.r' with open(rule_file, 'w') as rf: rf.write(dedent(f''' @@ -880,16 +878,15 @@ def main(rule_args, callback, rei): expected_output = [f"row: ['{self.admin.session_collection}']"] self.admin.assert_icommand(['irule', '-r', rep_instance, '-F', rule_file], 'STDOUT', expected_output) - # TODO Replace issue_NNNN with real issue number. @unittest.skipUnless(plugin_name == 'irods_rule_engine_plugin-python', 'Requires PREP.') - def test_genquery_iterator_supports_genquery2_offset_and_limit__issue_NNNN(self): + def test_genquery_iterator_supports_genquery2_offset_and_limit__issue_7909(self): # Create some data objects. - data_name_prefix = 'issue_NNNN' + data_name_prefix = 'test_genquery_iterator_supports_genquery2_offset_and_limit__issue_7909' for i in range(10): self.admin.assert_icommand(['itouch', f'{data_name_prefix}.{i}']) # Test offset functionality. - rule_file = f'{self.admin.local_session_dir}/issue_NNNN.r' + rule_file = f'{self.admin.local_session_dir}/test_genquery_iterator_supports_genquery2_offset_and_limit__issue_7909.r' with open(rule_file, 'w') as rf: rf.write(dedent(f''' def main(rule_args, callback, rei): @@ -924,3 +921,28 @@ def main(rule_args, callback, rei): rep_instance = IrodsConfig().default_rule_engine_plugin + '-instance' expected_output = ['count: 2'] self.admin.assert_icommand(['irule', '-r', rep_instance, '-F', rule_file], 'STDOUT', expected_output) + + @unittest.skipUnless(plugin_name == 'irods_rule_engine_plugin-python', 'Requires PREP.') + def test_genquery_iterator_supports_reusing_genquery2_query_object__issue_7909(self): + rule_file = f'{self.admin.local_session_dir}/test_genquery_iterator_supports_reusing_genquery2_query_object__issue_7909.r' + + with open(rule_file, 'w') as rf: + rf.write(dedent(f''' + def main(rule_args, callback, rei): + from genquery import Query, Parser + query = Query(callback, 'COLL_NAME', "COLL_NAME = '{self.admin.session_collection}'", parser=Parser.GENQUERY2) + for i in range(3): + for r in query: + callback.writeLine('stdout', f'[iteration={{i}}] row: {{r}}') + INPUT null + OUTPUT ruleExecOut + ''')) + + # Execute the rule. + rep_instance = IrodsConfig().default_rule_engine_plugin + '-instance' + expected_output = [ + f"[iteration=0] row: ['{self.admin.session_collection}']", + f"[iteration=1] row: ['{self.admin.session_collection}']", + f"[iteration=2] row: ['{self.admin.session_collection}']" + ] + self.admin.assert_icommand(['irule', '-r', rep_instance, '-F', rule_file], 'STDOUT', expected_output)