* 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)
 |