2 * Copyright 2018 Intel Corporation, Inc
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
25 smsbackend "sms/backend"
32 // Here we are using the anonymous variable feature of golang to
33 // override methods form an interface
34 type TestBackend struct {
35 smsbackend.SecretBackend
38 func (b *TestBackend) Init() error {
42 func (b *TestBackend) GetStatus() (bool, error) {
46 func (b *TestBackend) Unseal(shard string) error {
50 func (b *TestBackend) GetSecret(dom string, sec string) (smsbackend.Secret, error) {
51 return smsbackend.Secret{
53 Values: map[string]interface{}{
55 "profession": "engineer",
60 func (b *TestBackend) ListSecret(dom string) ([]string, error) {
61 return []string{"testsecret1", "testsecret2"}, nil
64 func (b *TestBackend) CreateSecretDomain(name string) (smsbackend.SecretDomain, error) {
65 return smsbackend.SecretDomain{UUID: "123e4567-e89b-12d3-a456-426655440000",
66 Name: "testdomain"}, nil
69 func (b *TestBackend) CreateSecret(dom string, sec smsbackend.Secret) error {
73 func (b *TestBackend) DeleteSecretDomain(name string) error {
77 func (b *TestBackend) DeleteSecret(dom string, name string) error {
82 testBackend := &TestBackend{}
83 h = handler{secretBackend: testBackend}
86 func TestCreateRouter(t *testing.T) {
87 router := CreateRouter(h.secretBackend)
89 t.Fatal("CreateRouter: Got error when none expected")
93 func TestStatusHandler(t *testing.T) {
94 req, err := http.NewRequest("GET", "/v1/sms/status", nil)
99 rr := httptest.NewRecorder()
100 hr := http.HandlerFunc(h.statusHandler)
102 hr.ServeHTTP(rr, req)
105 if ret != http.StatusOK {
106 t.Errorf("statusHandler returned wrong status code: %v vs %v",
110 expected := backendStatus{}
111 got := backendStatus{}
112 expectedStr := strings.NewReader(`{"sealstatus":true}`)
113 json.NewDecoder(expectedStr).Decode(&expected)
114 json.NewDecoder(rr.Body).Decode(&got)
116 if reflect.DeepEqual(expected, got) == false {
117 t.Errorf("statusHandler returned unexpected body: got %v vs %v",
118 rr.Body.String(), expectedStr)
122 func TestCreateSecretDomainHandler(t *testing.T) {
123 body := `{"uuid":"123e4567-e89b-12d3-a456-426655440000","name":"testdomain"}`
124 reader := strings.NewReader(body)
125 req, err := http.NewRequest("POST", "/v1/sms/domain", reader)
130 rr := httptest.NewRecorder()
131 hr := http.HandlerFunc(h.createSecretDomainHandler)
133 hr.ServeHTTP(rr, req)
134 if rr.Code != http.StatusCreated {
135 t.Errorf("Expected statusCreated return code. Got: %v", rr.Code)
138 expected := smsbackend.SecretDomain{
139 UUID: "123e4567-e89b-12d3-a456-426655440000",
143 got := smsbackend.SecretDomain{}
144 json.NewDecoder(rr.Body).Decode(&got)
146 if reflect.DeepEqual(expected, got) == false {
147 t.Errorf("CreateSecretDomainHandler returned unexpected body: got %v;"+
148 " expected %v", got, expected)
152 func TestCreateSecretHandler(t *testing.T) {
153 data := smsbackend.Secret{
155 Values: map[string]interface{}{
162 jdata, err := json.Marshal(data)
163 req, err := http.NewRequest("POST", "/v1/sms/domain/testdomain/secret", bytes.NewReader(jdata))
168 rr := httptest.NewRecorder()
169 hr := http.HandlerFunc(h.createSecretHandler)
171 hr.ServeHTTP(rr, req)
172 if rr.Code != http.StatusCreated {
173 t.Errorf("Expected statusCreated return code. Got: %v", rr.Code)
177 func TestDeleteSecretDomainHandler(t *testing.T) {
178 req, err := http.NewRequest("DELETE", "/v1/sms/domain/testdomain", nil)
183 rr := httptest.NewRecorder()
184 hr := http.HandlerFunc(h.deleteSecretDomainHandler)
186 hr.ServeHTTP(rr, req)
187 if rr.Code != http.StatusNoContent {
188 t.Errorf("Expected statusCreated return code. Got: %v", rr.Code)
192 func TestDeleteSecretHandler(t *testing.T) {
193 req, err := http.NewRequest("DELETE", "/v1/sms/domain/testdomain/secret/testsecret", nil)
198 rr := httptest.NewRecorder()
199 hr := http.HandlerFunc(h.deleteSecretHandler)
201 hr.ServeHTTP(rr, req)
202 if rr.Code != http.StatusOK {
203 t.Errorf("Expected statusCreated return code. Got: %v", rr.Code)
207 func TestGetSecretHandler(t *testing.T) {
208 req, err := http.NewRequest("DELETE", "/v1/sms/domain/testdomain/secret/testsecret", nil)
213 rr := httptest.NewRecorder()
214 hr := http.HandlerFunc(h.getSecretHandler)
216 hr.ServeHTTP(rr, req)
217 if rr.Code != http.StatusOK {
218 t.Errorf("Expected statusCreated return code. Got: %v", rr.Code)
221 expected := smsbackend.Secret{
223 Values: map[string]interface{}{
224 "profession": "engineer",
229 got := smsbackend.Secret{}
230 json.NewDecoder(rr.Body).Decode(&got)
232 if reflect.DeepEqual(expected, got) == false {
233 t.Errorf("CreateSecretDomainHandler returned unexpected body: got: %v"+
234 " expected: %v", got, expected)
238 func TestListSecretHandler(t *testing.T) {
239 req, err := http.NewRequest("DELETE", "/v1/sms/domain/testdomain/secret", nil)
244 rr := httptest.NewRecorder()
245 hr := http.HandlerFunc(h.listSecretHandler)
247 hr.ServeHTTP(rr, req)
248 if rr.Code != http.StatusOK {
249 t.Errorf("Expected statusCreated return code. Got: %v", rr.Code)
252 expected := []string{"testsecret1", "testsecret2"}
255 json.NewDecoder(rr.Body).Decode(&got)
257 if reflect.DeepEqual(expected, got) == false {
258 t.Errorf("CreateSecretDomainHandler returned unexpected body: got: %v"+
259 " expected: %v", got, expected)