Add CI Tests
Resolves: rhbz#2055493 Signed-off-by: Sundeep Anand <suanand@redhat.com>
This commit is contained in:
		
							parent
							
								
									689772e0c9
								
							
						
					
					
						commit
						97bd0a8960
					
				| @ -3,4 +3,4 @@ product_versions: | ||||
|   - rhel-9 | ||||
| decision_context: osci_compose_gate | ||||
| rules: | ||||
|   - !PassingTestCaseRule {test_case_name: desktop-qe.desktop-ci.tier1-gating.functional} | ||||
|   - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} | ||||
|  | ||||
							
								
								
									
										17
									
								
								tests/cases/context.xml.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								tests/cases/context.xml.in
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| <test> | ||||
|     <entry> | ||||
| 	<_name>Foo</_name> | ||||
|     </entry> | ||||
|     <entry> | ||||
| 	<!-- This is the comment on the first Bar --> | ||||
| 	<_name msgctxt="1">Bar</_name> | ||||
|     </entry> | ||||
|     <entry> | ||||
| 	<!-- This is the comment on the second Bar --> | ||||
| 	<_name msgctxt="2">Bar</_name> | ||||
|     </entry> | ||||
|     <entry> | ||||
| 	<!-- This is the comment on Baz --> | ||||
| 	<_name>Baz</_name> | ||||
|     </entry> | ||||
| </test> | ||||
							
								
								
									
										109
									
								
								tests/intltool_tests.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								tests/intltool_tests.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,109 @@ | ||||
| #!/usr/bin/python3 | ||||
| 
 | ||||
| import logging | ||||
| import subprocess | ||||
| from difflib import Differ | ||||
| 
 | ||||
| logging.basicConfig(level=logging.INFO) | ||||
| 
 | ||||
| 
 | ||||
| COMMANDS = [ | ||||
|         "intltool-extract", | ||||
|         "intltool-merge" | ||||
|     ] | ||||
| INPUT_FILE = "cases/context.xml.in" | ||||
| 
 | ||||
| 
 | ||||
| def test_intltool_installation(cmd: str): | ||||
|     """ | ||||
|     Check if intltool is installed correctly | ||||
|     """ | ||||
|     try: | ||||
|         intltool_cmd = subprocess.Popen([cmd], stdout=subprocess.PIPE) | ||||
|         intltool_cmd_execution_response = intltool_cmd.communicate() | ||||
|         assert "Usage" in str(intltool_cmd_execution_response) | ||||
|     except FileNotFoundError: | ||||
|         logging.error(f"Either {cmd} is not installed or not accessible.") | ||||
|     except OSError: | ||||
|         logging.error(f"Some OSError occurred while executing {cmd}") | ||||
|     except AssertionError: | ||||
|         logging.error(f"[CMD] output does not include text: Usage.") | ||||
|     else: | ||||
|         logging.info(f"Execution of {cmd} succeed. Test Passed.") | ||||
| 
 | ||||
| 
 | ||||
| def test_intltool_extract(cmd, input_file): | ||||
|     """ | ||||
|     Check intltool extract behavior | ||||
|     """ | ||||
|     try: | ||||
|         intltool_extract = subprocess.Popen( | ||||
|             [cmd, "--type=gettext/xml", input_file, "--update"], | ||||
|             stdout=subprocess.PIPE) | ||||
|         intltool_extract_execution_response = intltool_extract.communicate() | ||||
|         assert "Wrote" in str(intltool_extract_execution_response) | ||||
|     except AssertionError: | ||||
|         logging.error(f"Writing output file for {input_file} file failed.") | ||||
|     except Exception as e: | ||||
|         logging.error(e) | ||||
|     else: | ||||
|         logging.info(f"Writing output file for {input_file} succeed.") | ||||
| 
 | ||||
|     comparison_test_pass = True | ||||
|     with open("{}.h".format(input_file)) as output_file, open("results/{}.h".format("context.xml.in")) as refer_file: | ||||
|         differ = Differ() | ||||
|         for line in differ.compare(output_file.readlines(), refer_file.readlines()): | ||||
|             if line.startswith("+") or line.startswith("-"): | ||||
|                 comparison_test_pass = False | ||||
| 
 | ||||
|     try: | ||||
|         assert comparison_test_pass | ||||
|     except AssertionError: | ||||
|         logging.error("Extracted file does NOT match with the result. Test failed.") | ||||
|     else: | ||||
|         logging.info("Extracted file does match with the result. Test passed.") | ||||
| 
 | ||||
| 
 | ||||
| def test_intltool_merge(cmd, input_file): | ||||
|     """ | ||||
|     Check intltool merge behavior | ||||
|     """ | ||||
|     merged_file = "context.xml" | ||||
|     try: | ||||
|         intltool_merge = subprocess.Popen( | ||||
|             [cmd, "-o", "cases", input_file, "cases/{}".format(merged_file)], | ||||
|             stdout=subprocess.PIPE) | ||||
|         intltool_merge_execution_response = intltool_merge.communicate() | ||||
|         assert "Merging" in str(intltool_merge_execution_response) | ||||
|     except AssertionError: | ||||
|         logging.error(f"Writing output file for {input_file} file failed.") | ||||
|     except Exception as e: | ||||
|         logging.error(e) | ||||
|     else: | ||||
|         logging.info(f"Writing output file for {input_file} succeed.") | ||||
| 
 | ||||
|     comparison_test_pass = True | ||||
|     with open("cases/{}".format(merged_file)) as output_file, open("results/{}".format(merged_file)) as refer_file: | ||||
|         differ = Differ() | ||||
|         for line in differ.compare(output_file.readlines(), refer_file.readlines()): | ||||
|             if line.startswith("+") or line.startswith("-"): | ||||
|                 comparison_test_pass = False | ||||
| 
 | ||||
|     try: | ||||
|         assert comparison_test_pass | ||||
|     except AssertionError: | ||||
|         logging.error("Merged file does NOT match with the result. Test failed.") | ||||
|     else: | ||||
|         logging.info("Merged file does match with the result. Test passed.") | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     """ | ||||
|     Executes test cases | ||||
|     """ | ||||
|     logging.info("Executing test cases for Intltool..") | ||||
|     for CMD in COMMANDS: | ||||
|         test_intltool_installation(CMD) | ||||
|     test_intltool_extract(COMMANDS[0], INPUT_FILE) | ||||
|     test_intltool_merge(COMMANDS[1], INPUT_FILE) | ||||
|     logging.info("Tests execution of Intltool completed!") | ||||
							
								
								
									
										19
									
								
								tests/results/context.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								tests/results/context.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| <test> | ||||
|     <entry> | ||||
| 	<_name>Foo</_name> | ||||
|     </entry> | ||||
|     <entry> | ||||
| 	<!-- This is the comment on the first Bar --> | ||||
| 	<_name msgctxt="1"> | ||||
| Bar</_name> | ||||
|     </entry> | ||||
|     <entry> | ||||
| 	<!-- This is the comment on the second Bar --> | ||||
| 	<_name msgctxt="2"> | ||||
| Bar</_name> | ||||
|     </entry> | ||||
|     <entry> | ||||
| 	<!-- This is the comment on Baz --> | ||||
| 	<_name>Baz</_name> | ||||
|     </entry> | ||||
| </test> | ||||
							
								
								
									
										7
									
								
								tests/results/context.xml.in.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tests/results/context.xml.in.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| char *s = N_("Foo"); | ||||
| /*  This is the comment on the first Bar  */ | ||||
| char *s = C_("1", "Bar"); | ||||
| /*  This is the comment on the second Bar  */ | ||||
| char *s = C_("2", "Bar"); | ||||
| /*  This is the comment on Baz  */ | ||||
| char *s = N_("Baz"); | ||||
							
								
								
									
										11
									
								
								tests/tests.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tests/tests.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
|  - hosts: localhost | ||||
|    tags: | ||||
|    - classic | ||||
|    roles: | ||||
|    - role: standard-test-basic | ||||
|      required_packages: | ||||
|      - intltool | ||||
|      tests: | ||||
|      - make-check: | ||||
|          dir: . | ||||
|          run: python3 intltool_tests.py | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user