an atproto pds written in F# (.NET 9) 馃
pds fsharp giraffe dotnet atproto
at main 3.0 kB view raw
1module RepositoryTests 2 3open Xunit 4open PDSharp.Core 5open PDSharp.Core.Crypto 6open PDSharp.Core.Repository 7 8[<Fact>] 9let ``TID generation produces 13 character string`` () = 10 let tid = Tid.generate () 11 Assert.Equal(13, tid.Length) 12 13[<Fact>] 14let ``TID generation is sortable by time`` () = 15 let tid1 = Tid.generate () 16 System.Threading.Thread.Sleep(2) 17 let tid2 = Tid.generate () 18 Assert.True(tid2 > tid1, $"Expected {tid2} > {tid1}") 19 20[<Fact>] 21let ``Commit signing produces valid signature`` () = 22 let keyPair = generateKey P256 23 let mstRoot = Cid.FromHash(sha256Str "mst-root") 24 25 let unsigned = { 26 Did = "did:plc:test1234" 27 Version = 3 28 Data = mstRoot 29 Rev = Tid.generate () 30 Prev = None 31 } 32 33 let signed = signCommit keyPair unsigned 34 35 Assert.Equal(64, signed.Sig.Length) 36 Assert.Equal(unsigned.Did, signed.Did) 37 Assert.Equal(unsigned.Data, signed.Data) 38 39[<Fact>] 40let ``Commit verification succeeds for valid commit`` () = 41 let keyPair = generateKey P256 42 let mstRoot = Cid.FromHash(sha256Str "data") 43 44 let unsigned = { 45 Did = "did:plc:abc" 46 Version = 3 47 Data = mstRoot 48 Rev = Tid.generate () 49 Prev = None 50 } 51 52 let signed = signCommit keyPair unsigned 53 54 Assert.True(verifyCommit keyPair signed) 55 56[<Fact>] 57let ``Commit verification fails for tampered data`` () = 58 let keyPair = generateKey P256 59 let mstRoot = Cid.FromHash(sha256Str "original") 60 61 let unsigned = { 62 Did = "did:plc:abc" 63 Version = 3 64 Data = mstRoot 65 Rev = Tid.generate () 66 Prev = None 67 } 68 69 let signed = signCommit keyPair unsigned 70 let tampered = { signed with Did = "did:plc:different" } 71 72 Assert.False(verifyCommit keyPair tampered) 73 74[<Fact>] 75let ``Commit with prev CID`` () = 76 let keyPair = generateKey P256 77 let mstRoot = Cid.FromHash(sha256Str "new-data") 78 let prevCid = Cid.FromHash(sha256Str "prev-commit") 79 80 let unsigned = { 81 Did = "did:plc:abc" 82 Version = 3 83 Data = mstRoot 84 Rev = Tid.generate () 85 Prev = Some prevCid 86 } 87 88 let signed = signCommit keyPair unsigned 89 Assert.True(verifyCommit keyPair signed) 90 Assert.True(Option.isSome signed.Prev) 91 92[<Fact>] 93let ``Commit CID is deterministic`` () = 94 let keyPair = generateKey P256 95 let mstRoot = Cid.FromHash(sha256Str "data") 96 97 let unsigned = { 98 Did = "did:plc:abc" 99 Version = 3 100 Data = mstRoot 101 Rev = "abcdefghijklm" 102 Prev = None 103 } 104 105 let signed = signCommit keyPair unsigned 106 let cid1 = commitCid signed 107 let cid2 = commitCid signed 108 109 Assert.Equal<byte[]>(cid1.Bytes, cid2.Bytes) 110 111[<Fact>] 112let ``Commit serialization produces valid DAG-CBOR`` () = 113 let keyPair = generateKey P256 114 let mstRoot = Cid.FromHash(sha256Str "test") 115 116 let unsigned = { 117 Did = "did:plc:test" 118 Version = 3 119 Data = mstRoot 120 Rev = Tid.generate () 121 Prev = None 122 } 123 124 let signed = signCommit keyPair unsigned 125 let bytes = serializeCommit signed 126 127 Assert.True(bytes.Length > 0) 128 Assert.True(bytes.[0] >= 0xa0uy && bytes.[0] <= 0xbfuy)