* feat: use existing pre-commit framework * feat(ci): add github action for password_check * feat: add some simple tests to password_check.py * fix: set `backend_password_secret` in default values.yaml to an allowed password
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import pytest
 | |
| import yaml
 | |
| from os import listdir
 | |
| # Import hacking for script
 | |
| import sys
 | |
| sys.path.insert(0, '.')
 | |
| import check_passwords
 | |
| 
 | |
| @pytest.fixture
 | |
| def yaml_files(tmp_path):
 | |
|     with_password = """
 | |
|     nested: 
 | |
|       deep: 
 | |
|         in_the_land: 
 | |
|           is_a_password: thisislegit!
 | |
|     not_nested_password: uh_oh_i_commited_creds
 | |
|     """
 | |
|     with_allowed_password = """
 | |
|     nested:
 | |
|         deep:
 | |
|             in_the_land:
 | |
|                 is_a_password: PassW0rd!
 | |
|     not_nested_password: password
 | |
|     """
 | |
|     example_yaml = """
 | |
|     doe: "a deer, a female deer"
 | |
|     ray: "a drop of golden sun"
 | |
|     pi: 3.14159
 | |
|     xmas: true
 | |
|     french-hens: 3
 | |
|     calling-birds:
 | |
|       - huey
 | |
|       - dewey
 | |
|       - louie
 | |
|       - fred
 | |
|     xmas-fifth-day:
 | |
|       calling-birds: four
 | |
|       french-hens: 3
 | |
|       golden-rings: 5
 | |
|       partridges:
 | |
|         count: 1
 | |
|         location: "a pear tree"
 | |
|       turtle-doves: two
 | |
|     """
 | |
|     with open(tmp_path / "with_password.yaml", 'w') as fobj:
 | |
|         fobj.write(with_password)
 | |
| 
 | |
|     with open(tmp_path / "with_allowed_password.yaml", 'w') as fobj:
 | |
|         fobj.write(with_allowed_password)
 | |
| 
 | |
|     with open(tmp_path / "example.yaml", 'w') as fobj:
 | |
|         fobj.write(example_yaml)
 | |
|     return tmp_path
 | |
| 
 | |
| class TestCheckPasswords:
 | |
|     def test_find_passwords(self, yaml_files):
 | |
|         with open(yaml_files / "with_password.yaml", 'r') as fobj:
 | |
|             yml = yaml.safe_load(fobj)
 | |
|             gen = check_passwords.key_finder(yml)
 | |
|             assert ('nested', 'is_a_password', "thisislegit!") == next(gen)
 | |
|             assert ('not_nested_password', 'uh_oh_i_commited_creds') == next(gen)
 | |
| 
 | |
|     def test_dont_find_passwords(self, yaml_files):
 | |
|         with open(yaml_files / "with_allowed_password.yaml", 'r') as fobj:
 | |
|             yml = yaml.safe_load(fobj)
 | |
|             gen = check_passwords.key_finder(yml)
 | |
|             (_, _, password) = next(gen)
 | |
|             assert password in ["PassW0rd!", "password"]
 | |
|             (_, password) = next(gen)
 | |
|             assert password in ["PassW0rd!", "password"]
 | |
|             with pytest.raises(StopIteration):
 | |
|                 next(gen)
 | |
| 
 | |
|     def test_parsing_yaml(self, yaml_files):
 | |
|         with open(yaml_files / "example.yaml", 'r') as fobj:
 | |
|             yml = yaml.safe_load(fobj)
 | |
|             gen = check_passwords.key_finder(yml)
 | |
|             with pytest.raises(StopIteration):
 | |
|                 next(gen)
 |