Source file
src/crypto/x509/parser_test.go
1
2
3
4 package x509
5
6 import (
7 "encoding/asn1"
8 "testing"
9
10 cryptobyte_asn1 "golang.org/x/crypto/cryptobyte/asn1"
11 )
12
13 func TestParseASN1String(t *testing.T) {
14 tests := []struct {
15 name string
16 tag cryptobyte_asn1.Tag
17 value []byte
18 expected string
19 expectedErr string
20 }{
21 {
22 name: "T61String",
23 tag: cryptobyte_asn1.T61String,
24 value: []byte{80, 81, 82},
25 expected: string("PQR"),
26 },
27 {
28 name: "PrintableString",
29 tag: cryptobyte_asn1.PrintableString,
30 value: []byte{80, 81, 82},
31 expected: string("PQR"),
32 },
33 {
34 name: "PrintableString (invalid)",
35 tag: cryptobyte_asn1.PrintableString,
36 value: []byte{1, 2, 3},
37 expectedErr: "invalid PrintableString",
38 },
39 {
40 name: "UTF8String",
41 tag: cryptobyte_asn1.UTF8String,
42 value: []byte{80, 81, 82},
43 expected: string("PQR"),
44 },
45 {
46 name: "UTF8String (invalid)",
47 tag: cryptobyte_asn1.UTF8String,
48 value: []byte{255},
49 expectedErr: "invalid UTF-8 string",
50 },
51 {
52 name: "BMPString",
53 tag: cryptobyte_asn1.Tag(asn1.TagBMPString),
54 value: []byte{80, 81},
55 expected: string("偑"),
56 },
57 {
58 name: "BMPString (invalid length)",
59 tag: cryptobyte_asn1.Tag(asn1.TagBMPString),
60 value: []byte{255},
61 expectedErr: "invalid BMPString",
62 },
63 {
64 name: "IA5String",
65 tag: cryptobyte_asn1.IA5String,
66 value: []byte{80, 81},
67 expected: string("PQ"),
68 },
69 {
70 name: "IA5String (invalid)",
71 tag: cryptobyte_asn1.IA5String,
72 value: []byte{255},
73 expectedErr: "invalid IA5String",
74 },
75 {
76 name: "NumericString",
77 tag: cryptobyte_asn1.Tag(asn1.TagNumericString),
78 value: []byte{49, 50},
79 expected: string("12"),
80 },
81 {
82 name: "NumericString (invalid)",
83 tag: cryptobyte_asn1.Tag(asn1.TagNumericString),
84 value: []byte{80},
85 expectedErr: "invalid NumericString",
86 },
87 }
88
89 for _, tc := range tests {
90 t.Run(tc.name, func(t *testing.T) {
91 out, err := parseASN1String(tc.tag, tc.value)
92 if err != nil && err.Error() != tc.expectedErr {
93 t.Fatalf("parseASN1String returned unexpected error: got %q, want %q", err, tc.expectedErr)
94 } else if err == nil && tc.expectedErr != "" {
95 t.Fatalf("parseASN1String didn't fail, expected: %s", tc.expectedErr)
96 }
97 if out != tc.expected {
98 t.Fatalf("parseASN1String returned unexpected value: got %q, want %q", out, tc.expected)
99 }
100 })
101 }
102 }
103
View as plain text