Complete private gateway and local website publishing UAT
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
|
||||
SCRIPT = Path(__file__).resolve().parents[2] / 'scripts/public-web-gateway/enroll.py'
|
||||
class EnrollmentTests(unittest.TestCase):
|
||||
def test_private_export_duplicate_domain_and_explicit_rotation(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
subprocess.run(['openssl', 'req', '-x509', '-newkey', 'rsa:2048', '-nodes', '-keyout', str(root/'key'), '-out', str(root/'ca'), '-days', '1', '-subj', '/CN=gateway.example'], check=True, capture_output=True)
|
||||
config = {'bindPort': 7400, 'auth': {'method': 'token', 'token': 't'*64}, 'transport': {'tls': {'force': True}}, 'httpPlugins': [{'ops': ['Login', 'NewProxy', 'Ping', 'NewWorkConn', 'NewUserConn']}]}
|
||||
path = root/'frps.json'; path.write_text(json.dumps(config)); path.chmod(0o600)
|
||||
base = [sys.executable, str(SCRIPT), '--frps-config', str(path), '--policy', str(root/'policy.json'), '--ca', str(root/'ca'), '--host', 'gateway.example', '--tls-server-name', 'gateway.example', '--domain', 'site.example']
|
||||
result = subprocess.run(base + ['--name', 'node-a', '--output', str(root/'node-a.json')], capture_output=True)
|
||||
self.assertEqual(result.returncode, 0, result.stderr.decode())
|
||||
private = json.loads((root/'node-a.json').read_text())
|
||||
self.assertNotIn(private['enrollment_token'].encode(), result.stdout + result.stderr)
|
||||
self.assertEqual((root/'node-a.json').stat().st_mode & 0o777, 0o600)
|
||||
first = (root/'policy.json').read_bytes()
|
||||
result = subprocess.run(base + ['--name', 'node-b', '--output', str(root/'node-b.json')], capture_output=True)
|
||||
self.assertNotEqual(result.returncode, 0)
|
||||
self.assertEqual(first, (root/'policy.json').read_bytes())
|
||||
self.assertFalse((root/'node-b.json').exists())
|
||||
result = subprocess.run(base + ['--name', 'node-a', '--rotate', '--output', str(root/'rotated.json')], capture_output=True)
|
||||
self.assertEqual(result.returncode, 0, result.stderr.decode())
|
||||
self.assertNotEqual(private['enrollment_token'], json.loads((root/'rotated.json').read_text())['enrollment_token'])
|
||||
self.assertNotEqual(first, (root/'policy.json').read_bytes())
|
||||
|
||||
if __name__ == '__main__': unittest.main()
|
||||
Reference in New Issue
Block a user