123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- """Unit tests: parse_encrypt"""
- import pytest
- def test_not_called(runner, paths):
- """Test parse_encrypt (not called)"""
- run = run_parse_encrypt(runner, paths, skip_parse=True)
- assert run.success
- assert run.err == ''
- assert 'EIF:unparsed' in run.out, 'EIF should be unparsed'
- assert 'EIF_COUNT:1' in run.out, 'Only value of EIF should be unparsed'
- def test_short_circuit(runner, paths):
- """Test parse_encrypt (short-circuit)"""
- run = run_parse_encrypt(runner, paths, twice=True)
- assert run.success
- assert run.err == ''
- assert 'PARSE_ENCRYPT_SHORT=parse_encrypt() not reprocessed' in run.out, (
- 'parse_encrypt() should short-circuit')
- @pytest.mark.parametrize(
- 'encrypt', [
- ('missing'),
- ('empty'),
- ])
- def test_empty(runner, paths, encrypt):
- """Test parse_encrypt (file missing/empty)"""
- # write encrypt file
- if encrypt == 'missing':
- assert not paths.encrypt.exists(), 'Encrypt should be missing'
- else:
- paths.encrypt.write('')
- assert paths.encrypt.exists(), 'Encrypt should exist'
- assert paths.encrypt.size() == 0, 'Encrypt should be empty'
- # run parse_encrypt
- run = run_parse_encrypt(runner, paths)
- assert run.success
- assert run.err == ''
- # validate parsing result
- assert 'EIF_COUNT:0' in run.out, 'EIF should be empty'
- @pytest.mark.usefixtures('ds1_repo_copy')
- def test_file_parse_encrypt(runner, paths):
- """Test parse_encrypt
- Test an array of supported features of the encrypt configuration.
- """
- edata = ''
- expected = set()
- # empty line
- edata += '\n'
- # simple comments
- edata += '# a simple comment\n'
- edata += ' # a comment with leading space\n'
- # unreferenced directory
- paths.work.join('unreferenced').mkdir()
- # simple files
- edata += 'simple_file\n'
- edata += 'simple.file\n'
- paths.work.join('simple_file').write('')
- paths.work.join('simple.file').write('')
- paths.work.join('simple_file2').write('')
- paths.work.join('simple.file2').write('')
- expected.add('simple_file')
- expected.add('simple.file')
- # simple files in directories
- edata += 'simple_dir/simple_file\n'
- paths.work.join('simple_dir/simple_file').write('', ensure=True)
- paths.work.join('simple_dir/simple_file2').write('', ensure=True)
- expected.add('simple_dir/simple_file')
- # paths with spaces
- edata += 'with space/with space\n'
- paths.work.join('with space/with space').write('', ensure=True)
- paths.work.join('with space/with space2').write('', ensure=True)
- expected.add('with space/with space')
- # hidden files
- edata += '.hidden\n'
- paths.work.join('.hidden').write('')
- expected.add('.hidden')
- # hidden files in directories
- edata += '.hidden_dir/.hidden_file\n'
- paths.work.join('.hidden_dir/.hidden_file').write('', ensure=True)
- expected.add('.hidden_dir/.hidden_file')
- # wildcards
- edata += 'wild*\n'
- paths.work.join('wildcard1').write('', ensure=True)
- paths.work.join('wildcard2').write('', ensure=True)
- expected.add('wildcard1')
- expected.add('wildcard2')
- edata += 'dirwild*\n'
- paths.work.join('dirwildcard/file1').write('', ensure=True)
- paths.work.join('dirwildcard/file2').write('', ensure=True)
- expected.add('dirwildcard')
- # excludes
- edata += 'exclude*\n'
- edata += 'ex ex/*\n'
- paths.work.join('exclude_file1').write('')
- paths.work.join('exclude_file2.ex').write('')
- paths.work.join('exclude_file3.ex3').write('')
- expected.add('exclude_file1')
- expected.add('exclude_file3.ex3')
- edata += '!*.ex\n'
- edata += '!ex ex/*.txt\n'
- paths.work.join('ex ex/file4').write('', ensure=True)
- paths.work.join('ex ex/file5.txt').write('', ensure=True)
- paths.work.join('ex ex/file6.text').write('', ensure=True)
- expected.add('ex ex/file4')
- expected.add('ex ex/file6.text')
- # write encrypt file
- print(f'ENCRYPT:\n---\n{edata}---\n')
- paths.encrypt.write(edata)
- assert paths.encrypt.isfile()
- # run parse_encrypt
- run = run_parse_encrypt(runner, paths)
- assert run.success
- assert run.err == ''
- assert f'EIF_COUNT:{len(expected)}' in run.out, 'EIF count wrong'
- for expected_file in expected:
- assert f'EIF:{expected_file}\n' in run.out
- def run_parse_encrypt(
- runner, paths,
- skip_parse=False,
- twice=False):
- """Run parse_encrypt
- A count of ENCRYPT_INCLUDE_FILES will be reported as EIF_COUNT:X. All
- values of ENCRYPT_INCLUDE_FILES will be reported as individual EIF:value
- lines.
- """
- parse_cmd = 'parse_encrypt'
- if skip_parse:
- parse_cmd = ''
- if twice:
- parse_cmd = 'parse_encrypt; parse_encrypt'
- script = f"""
- YADM_TEST=1 source {paths.pgm}
- YADM_ENCRYPT={paths.encrypt}
- export YADM_ENCRYPT
- GIT_DIR={paths.repo}
- export GIT_DIR
- {parse_cmd}
- export ENCRYPT_INCLUDE_FILES
- export PARSE_ENCRYPT_SHORT
- env
- echo EIF_COUNT:${{#ENCRYPT_INCLUDE_FILES[@]}}
- for value in "${{ENCRYPT_INCLUDE_FILES[@]}}"; do
- echo "EIF:$value"
- done
- """
- run = runner(command=['bash'], inp=script)
- return run
|