1package s3crypto
2
3import (
4	"strings"
5	"testing"
6)
7
8func TestCryptoRegistry_Wrap(t *testing.T) {
9	cr := NewCryptoRegistry()
10
11	mockWrap := WrapEntry(func(envelope Envelope) (CipherDataDecrypter, error) {
12		return nil, nil
13	})
14
15	if _, ok := cr.GetWrap("foo"); ok {
16		t.Errorf("expected wrapper to not be present")
17	}
18
19	if _, ok := cr.RemoveWrap("foo"); ok {
20		t.Errorf("expected wrapped to not have been removed")
21	}
22
23	if err := cr.AddWrap("foo", nil); err == nil {
24		t.Errorf("expected error, got none")
25	}
26
27	if err := cr.AddWrap("foo", mockWrap); err != nil {
28		t.Errorf("expected no error, got %v", err)
29	}
30
31	if err := cr.AddWrap("foo", mockWrap); err == nil {
32		t.Error("expected error, got none")
33	}
34
35	if v, ok := cr.GetWrap("foo"); !ok || v == nil {
36		t.Error("expected wrapper to be present and not nil")
37	}
38
39	if v, ok := cr.RemoveWrap("foo"); !ok || v == nil {
40		t.Error("expected wrapper to have been removed and not nil")
41	}
42
43	if _, ok := cr.GetWrap("foo"); ok {
44		t.Error("expected wrapper to have been removed and not nil")
45	}
46}
47
48func TestCryptoRegistry_CEK(t *testing.T) {
49	cr := NewCryptoRegistry()
50
51	mockEntry := CEKEntry(func(data CipherData) (ContentCipher, error) {
52		return nil, nil
53	})
54
55	if _, ok := cr.GetCEK("foo"); ok {
56		t.Errorf("expected wrapper to not be present")
57	}
58
59	if _, ok := cr.RemoveCEK("foo"); ok {
60		t.Errorf("expected wrapped to not have been removed")
61	}
62
63	if err := cr.AddCEK("foo", nil); err == nil {
64		t.Errorf("expected error, got none")
65	}
66
67	if err := cr.AddCEK("foo", mockEntry); err != nil {
68		t.Errorf("expected no error, got %v", err)
69	}
70
71	if err := cr.AddCEK("foo", mockEntry); err == nil {
72		t.Error("expected error, got none")
73	}
74
75	if v, ok := cr.GetCEK("foo"); !ok || v == nil {
76		t.Error("expected wrapper to be present and not nil")
77	}
78
79	if v, ok := cr.RemoveCEK("foo"); !ok || v == nil {
80		t.Error("expected wrapper to have been removed and not nil")
81	}
82
83	if _, ok := cr.GetCEK("foo"); ok {
84		t.Error("expected wrapper to have been removed and not nil")
85	}
86}
87
88func TestCryptoRegistry_Padder(t *testing.T) {
89	cr := NewCryptoRegistry()
90
91	padder := &mockPadder{}
92
93	if _, ok := cr.GetPadder("foo"); ok {
94		t.Errorf("expected wrapper to not be present")
95	}
96
97	if _, ok := cr.RemovePadder("foo"); ok {
98		t.Errorf("expected wrapped to not have been removed")
99	}
100
101	if err := cr.AddPadder("foo", nil); err == nil {
102		t.Errorf("expected error, got none")
103	}
104
105	if err := cr.AddPadder("foo", padder); err != nil {
106		t.Errorf("expected no error, got %v", err)
107	}
108
109	if err := cr.AddPadder("foo", padder); err == nil {
110		t.Error("expected error, got none")
111	}
112
113	if v, ok := cr.GetPadder("foo"); !ok || v == nil {
114		t.Error("expected wrapper to be present and not nil")
115	}
116
117	if v, ok := cr.RemovePadder("foo"); !ok || v == nil {
118		t.Error("expected wrapper to have been removed and not nil")
119	}
120}
121
122func TestCryptoRegistry_valid(t *testing.T) {
123	cr := NewCryptoRegistry()
124
125	if err := cr.valid(); err == nil {
126		t.Errorf("expected error, got none")
127	} else if e, a := "at least one key wrapping algorithms must be provided", err.Error(); !strings.Contains(a, e) {
128		t.Errorf("expected %v, got %v", e, a)
129	}
130
131	if err := cr.AddWrap("foo", func(envelope Envelope) (CipherDataDecrypter, error) {
132		return nil, nil
133	}); err != nil {
134		t.Fatalf("expected no error, got %v", err)
135	}
136	if err := cr.valid(); err == nil {
137		t.Fatalf("expected error, got none")
138	} else if e, a := "least one content decryption algorithms must be provided", err.Error(); !strings.Contains(a, e) {
139		t.Errorf("expected %v, got %v", e, a)
140	}
141
142	if err := cr.AddCEK("foo", func(data CipherData) (ContentCipher, error) {
143		return nil, nil
144	}); err != nil {
145		t.Fatalf("expected no error, got %v", err)
146	}
147	if err := cr.valid(); err != nil {
148		t.Fatalf("expected no error, got %v", err)
149	}
150}
151