Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0e6f0-a6f6-7b93-9124-55ef584930e2
29 lines
1.7 KiB
Python
29 lines
1.7 KiB
Python
import json
|
|
import os
|
|
import pytest
|
|
from cryptography.hazmat.primitives.asymmetric import ec
|
|
from cryptography.hazmat.primitives import serialization
|
|
from railiance_clock.core import Tick
|
|
from railiance_clock.protocol import sign
|
|
|
|
class Timer:
|
|
def __init__(self): self.n=0; self.boot=0; self.domain='boot1'
|
|
def read(self): return Tick(self.n, self.n+self.boot, self.domain)
|
|
|
|
@pytest.fixture
|
|
def setup(tmp_path):
|
|
key=ec.generate_private_key(ec.SECP256R1())
|
|
data={'status':'admitted','authority_id':'railiance01','environment':'test','epoch':'epoch1','policy_id':'test-v1','kid':'test-key',
|
|
'endpoint':'https://clock.invalid/v1/time-samples',
|
|
'public_key_pem':key.public_key().public_bytes(serialization.Encoding.PEM,serialization.PublicFormat.SubjectPublicKeyInfo).decode(),
|
|
'limits':{'max_age_ns':5_000_000_000,'max_rtt_ns':2_000_000_000,'max_width_ns':3_000_000_000,'max_server_error_ns':50_000_000,'timer_ppm':1000,'timer_resolution_ns':1000,'suspend_tolerance_ns':5_000_000,'trust_session_ns':60_000_000_000}}
|
|
tmp_path.chmod(0o700)
|
|
state=tmp_path/'state.json';state.write_text(json.dumps({'authority_id':'railiance01','epoch':'epoch1','lower_ns':0}));state.chmod(0o600)
|
|
data.update(client_boot_id='boot1',trust_not_after_boottime_ns=60_000_000_000,rollback_state_file=str(state))
|
|
path=tmp_path/'trust.json';path.write_text(json.dumps(data));path.chmod(0o600)
|
|
timer=Timer()
|
|
def transport(request):
|
|
timer.n+=10_000_000
|
|
return sign(dict(request,epoch='epoch1',policy_id='test-v1',quality='bounded',receive_unix_ns='100000000000',send_unix_ns='100001000000',error_ns='1000000',max_age_ns='5000000000'),key,'test-key')
|
|
return path,key,timer,transport
|
|
|