1package auth
2
3import (
4 "bytes"
5 "testing"
6
7 "github.com/bnema/neferafk/internal/ports"
8)
9
10func TestBootstrapRoundTripAndRejects(t *testing.T) {
11 in := ports.AuthBootstrap{Generation: 7, PINSource: ports.PINSourceEnv, PINReference: "ref", EnvPIN: []byte("123456")}
12 var buf bytes.Buffer
13 if err := WriteBootstrap(&buf, in); err != nil {
14 t.Fatal(err)
15 }
16 valid := bytes.Clone(buf.Bytes())
17 out, err := ReadBootstrap(&buf)
18 if err != nil || out.Generation != 7 || out.PINSource != in.PINSource || out.PINReference != "ref" || string(out.EnvPIN) != "123456" {
19 t.Fatalf("%+v %v", out, err)
20 }
21 if err := WriteBootstrap(&buf, ports.AuthBootstrap{}); err == nil {
22 t.Fatal("zero generation encoded")
23 }
24 for _, mutate := range []func([]byte){
25 func(b []byte) { b[0] = 'X' },
26 func(b []byte) { b[7]++ },
27 func(b []byte) { b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15] = 0, 0, 0, 0, 0, 0, 0, 0 },
28 } {
29 bad := bytes.Clone(valid)
30 mutate(bad)
31 if _, err := ReadBootstrap(bytes.NewReader(bad)); err == nil {
32 t.Fatal("corrupt bootstrap accepted")
33 }
34 }
35 if _, err := ReadBootstrap(bytes.NewReader(valid[:len(valid)-1])); err == nil {
36 t.Fatal("truncated bootstrap accepted")
37 }
38}