Source file
src/crypto/x509/root_test.go
1
2
3
4
5 package x509
6
7 import (
8 "testing"
9 )
10
11 func TestFallbackPanic(t *testing.T) {
12 defer func() {
13 if recover() == nil {
14 t.Fatal("Multiple calls to SetFallbackRoots should panic")
15 }
16 }()
17 SetFallbackRoots(nil)
18 SetFallbackRoots(nil)
19 }
20
21 func TestFallback(t *testing.T) {
22
23
24 systemRootsPool()
25 if systemRoots != nil {
26 originalSystemRoots := *systemRoots
27 defer func() { systemRoots = &originalSystemRoots }()
28 }
29
30 tests := []struct {
31 name string
32 systemRoots *CertPool
33 systemPool bool
34 poolContent []*Certificate
35 forceFallback bool
36 returnsFallback bool
37 }{
38 {
39 name: "nil systemRoots",
40 returnsFallback: true,
41 },
42 {
43 name: "empty systemRoots",
44 systemRoots: NewCertPool(),
45 returnsFallback: true,
46 },
47 {
48 name: "empty systemRoots system pool",
49 systemRoots: NewCertPool(),
50 systemPool: true,
51 },
52 {
53 name: "filled systemRoots system pool",
54 systemRoots: NewCertPool(),
55 poolContent: []*Certificate{{}},
56 systemPool: true,
57 },
58 {
59 name: "filled systemRoots",
60 systemRoots: NewCertPool(),
61 poolContent: []*Certificate{{}},
62 },
63 {
64 name: "filled systemRoots, force fallback",
65 systemRoots: NewCertPool(),
66 poolContent: []*Certificate{{}},
67 forceFallback: true,
68 returnsFallback: true,
69 },
70 {
71 name: "filled systemRoot system pool, force fallback",
72 systemRoots: NewCertPool(),
73 poolContent: []*Certificate{{}},
74 systemPool: true,
75 forceFallback: true,
76 returnsFallback: true,
77 },
78 }
79
80 for _, tc := range tests {
81 t.Run(tc.name, func(t *testing.T) {
82 fallbacksSet = false
83 systemRoots = tc.systemRoots
84 if systemRoots != nil {
85 systemRoots.systemPool = tc.systemPool
86 }
87 for _, c := range tc.poolContent {
88 systemRoots.AddCert(c)
89 }
90 if tc.forceFallback {
91 t.Setenv("GODEBUG", "x509usefallbackroots=1")
92 } else {
93 t.Setenv("GODEBUG", "x509usefallbackroots=0")
94 }
95
96 fallbackPool := NewCertPool()
97 SetFallbackRoots(fallbackPool)
98
99 systemPoolIsFallback := systemRoots == fallbackPool
100
101 if tc.returnsFallback && !systemPoolIsFallback {
102 t.Error("systemRoots was not set to fallback pool")
103 } else if !tc.returnsFallback && systemPoolIsFallback {
104 t.Error("systemRoots was set to fallback pool when it shouldn't have been")
105 }
106 })
107 }
108 }
109
View as plain text