MCPcopy
hub / github.com/FiloSottile/age / TestDecryptReaderAt

Function TestDecryptReaderAt

internal/stream/stream_test.go:202–412  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

200}
201
202func TestDecryptReaderAt(t *testing.T) {
203 key := make([]byte, chacha20poly1305.KeySize)
204 if _, err := rand.Read(key); err != nil {
205 t.Fatal(err)
206 }
207
208 // Create plaintext spanning exactly 3 chunks: 2 full chunks + partial third
209 // Chunk 0: [0, cs)
210 // Chunk 1: [cs, 2*cs)
211 // Chunk 2: [2*cs, 2*cs+500)
212 plaintextSize := 2*cs + 500
213 plaintext := make([]byte, plaintextSize)
214 if _, err := rand.Read(plaintext); err != nil {
215 t.Fatal(err)
216 }
217
218 // Encrypt
219 buf := &bytes.Buffer{}
220 w, err := stream.NewEncryptWriter(key, buf)
221 if err != nil {
222 t.Fatal(err)
223 }
224 if _, err := w.Write(plaintext); err != nil {
225 t.Fatal(err)
226 }
227 if err := w.Close(); err != nil {
228 t.Fatal(err)
229 }
230 ciphertext := buf.Bytes()
231
232 // Create tracking ReaderAt
233 tracker := &trackingReaderAt{r: bytes.NewReader(ciphertext)}
234
235 // Create DecryptReaderAt (this reads and caches the final chunk)
236 ra, err := stream.NewDecryptReaderAt(key, tracker, int64(len(ciphertext)))
237 if err != nil {
238 t.Fatal(err)
239 }
240 tracker.reset()
241
242 // Helper to check reads
243 checkRead := func(name string, off int64, size int, wantN int, wantEOF bool, wantSrcRead bool) {
244 t.Helper()
245 tracker.reset()
246 p := make([]byte, size)
247 n, err := ra.ReadAt(p, off)
248
249 if wantEOF {
250 if err != io.EOF {
251 t.Errorf("%s: got err=%v, want EOF", name, err)
252 }
253 } else {
254 if err != nil {
255 t.Errorf("%s: got err=%v, want nil", name, err)
256 }
257 }
258
259 if n != wantN {

Callers

nothing calls this directly

Calls 9

WriteMethod · 0.95
CloseMethod · 0.95
resetMethod · 0.95
ReadAtMethod · 0.95
NewEncryptWriterFunction · 0.92
NewDecryptReaderAtFunction · 0.92
BytesMethod · 0.80
ReadMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…