import os from pathlib import Path from datetime import date from openvpncertupdate import build_ovpn def setup_pki(tmp_path, cn, inline_content="X"): pki = tmp_path / "pki" private_dir = pki / "inline" / "private" private_dir.mkdir(parents=True) (private_dir / f"{cn}.inline").write_text(inline_content) return str(pki) def test_creates_file_with_combined_content(tmp_path): pki = setup_pki(tmp_path, "alice", "CERT") tmpl = tmp_path / "t.ovpn" tmpl.write_text("client\ndev tun\n") result = build_ovpn("alice", pki, str(tmpl), str(tmp_path / "out"), "vpn.ovpn") content = Path(result).read_text() assert "client" in content assert "CERT" in content def test_output_path_has_cn_and_date(tmp_path): pki = setup_pki(tmp_path, "bob") tmpl = tmp_path / "t.ovpn"; tmpl.write_text("") today = date.today().strftime("%Y-%m-%d") result = build_ovpn("bob", pki, str(tmpl), str(tmp_path / "out"), "vpn.ovpn") assert f"bob_{today}" in result assert result.endswith("vpn.ovpn") def test_first_issuance_uses_counter_00(tmp_path): pki = setup_pki(tmp_path, "carol") tmpl = tmp_path / "t.ovpn"; tmpl.write_text("") today = date.today().strftime("%Y-%m-%d") result = build_ovpn("carol", pki, str(tmpl), str(tmp_path / "out"), "vpn.ovpn") assert f"carol_{today}_00" in result def test_second_issuance_same_day_uses_counter_01(tmp_path): pki = setup_pki(tmp_path, "dave") tmpl = tmp_path / "t.ovpn"; tmpl.write_text("") today = date.today().strftime("%Y-%m-%d") out = str(tmp_path / "out") build_ovpn("dave", pki, str(tmpl), out, "vpn.ovpn") result2 = build_ovpn("dave", pki, str(tmpl), out, "vpn.ovpn") assert f"dave_{today}_01" in result2 def test_counter_skips_to_max_plus_one(tmp_path): """If _00 and _02 already exist (gap), next counter is 03, not 01.""" pki = setup_pki(tmp_path, "eve") tmpl = tmp_path / "t.ovpn"; tmpl.write_text("") today = date.today().strftime("%Y-%m-%d") out = tmp_path / "out" (out / f"eve_{today}_00").mkdir(parents=True) (out / f"eve_{today}_02").mkdir(parents=True) result = build_ovpn("eve", pki, str(tmpl), str(out), "vpn.ovpn") assert f"eve_{today}_03" in result def test_different_cn_same_day_does_not_affect_counter(tmp_path): pki_a = setup_pki(tmp_path / "a", "alice") pki_b = setup_pki(tmp_path / "b", "bob") tmpl = tmp_path / "t.ovpn"; tmpl.write_text("") today = date.today().strftime("%Y-%m-%d") out = str(tmp_path / "out") build_ovpn("alice", str(tmp_path / "a" / "pki"), str(tmpl), out, "vpn.ovpn") result = build_ovpn("bob", str(tmp_path / "b" / "pki"), str(tmpl), out, "vpn.ovpn") assert f"bob_{today}_00" in result def test_next_day_counter_resets_to_00(tmp_path): """Directories from a different date don't affect today's counter.""" pki = setup_pki(tmp_path, "frank") tmpl = tmp_path / "t.ovpn"; tmpl.write_text("") today = date.today().strftime("%Y-%m-%d") out = tmp_path / "out" # Simulate yesterday's directories already present (out / "frank_2000-01-01_00").mkdir(parents=True) (out / "frank_2000-01-01_05").mkdir(parents=True) result = build_ovpn("frank", pki, str(tmpl), str(out), "vpn.ovpn") assert f"frank_{today}_00" in result