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 "github.com/hashicorp/consul/api"
26 pkgerrors "github.com/pkg/errors"
29 //Creating an embedded interface via anonymous variable
30 //This allows us to make mockDB satisfy the DatabaseConnection
31 //interface even if we are not implementing all the methods in it
38 func (m *mockDB) CreateEntry(key string, value string) error {
42 func (m *mockDB) ReadEntry(key string) (string, bool, error) {
44 return "", false, m.Err
47 for _, kvpair := range m.Items {
48 if kvpair.Key == key {
49 return string(kvpair.Value), true, nil
56 func (m *mockDB) DeleteEntry(key string) error {
60 func (m *mockDB) ReadAll(prefix string) ([]string, error) {
62 return []string{}, m.Err
67 for _, keypair := range m.Items {
68 res = append(res, keypair.Key)
74 func TestCreate(t *testing.T) {
75 testCases := []struct {
80 expected VNFDefinition
83 label: "Create VNF Definition",
85 UUID: "123e4567-e89b-12d3-a456-426655440000",
87 Description: "testvnf",
88 ServiceType: "firewall",
90 expected: VNFDefinition{
91 UUID: "123e4567-e89b-12d3-a456-426655440000",
93 Description: "testvnf",
94 ServiceType: "firewall",
100 label: "Failed Create VNF Definition",
101 expectedError: "Error Creating Definition",
103 Err: pkgerrors.New("Error Creating Definition"),
108 for _, testCase := range testCases {
109 t.Run(testCase.label, func(t *testing.T) {
110 db.DBconn = testCase.mockdb
111 vimpl := GetVNFDClient()
112 got, err := vimpl.Create(testCase.inp)
114 if testCase.expectedError == "" {
115 t.Fatalf("Create returned an unexpected error %s", err)
117 if strings.Contains(err.Error(), testCase.expectedError) == false {
118 t.Fatalf("Create returned an unexpected error %s", err)
121 if reflect.DeepEqual(testCase.expected, got) == false {
122 t.Errorf("Create VNF returned unexpected body: got %v;"+
123 " expected %v", got, testCase.expected)
130 func TestList(t *testing.T) {
132 testCases := []struct {
136 expected []VNFDefinition
139 label: "List VNF Definition",
140 expected: []VNFDefinition{
142 UUID: "123e4567-e89b-12d3-a456-426655440000",
144 Description: "testvnf",
145 ServiceType: "firewall",
148 UUID: "123e4567-e89b-12d3-a456-426655441111",
150 Description: "testvnf2",
158 Key: "vnfd/123e4567-e89b-12d3-a456-426655440000",
159 Value: []byte("{\"name\":\"testvnf\"," +
160 "\"description\":\"testvnf\"," +
161 "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
162 "\"service-type\":\"firewall\"}"),
165 Key: "vnfd/123e4567-e89b-12d3-a456-426655441111",
166 Value: []byte("{\"name\":\"testvnf2\"," +
167 "\"description\":\"testvnf2\"," +
168 "\"uuid\":\"123e4567-e89b-12d3-a456-426655441111\"," +
169 "\"service-type\":\"dns\"}"),
176 expectedError: "DB Error",
178 Err: pkgerrors.New("DB Error"),
183 for _, testCase := range testCases {
184 t.Run(testCase.label, func(t *testing.T) {
185 db.DBconn = testCase.mockdb
186 vimpl := GetVNFDClient()
187 got, err := vimpl.List()
189 if testCase.expectedError == "" {
190 t.Fatalf("List returned an unexpected error %s", err)
192 if strings.Contains(err.Error(), testCase.expectedError) == false {
193 t.Fatalf("List returned an unexpected error %s", err)
196 if reflect.DeepEqual(testCase.expected, got) == false {
197 t.Errorf("List VNF returned unexpected body: got %v;"+
198 " expected %v", got, testCase.expected)
205 func TestGet(t *testing.T) {
207 testCases := []struct {
212 expected VNFDefinition
215 label: "Get VNF Definition",
216 inp: "123e4567-e89b-12d3-a456-426655440000",
217 expected: VNFDefinition{
218 UUID: "123e4567-e89b-12d3-a456-426655440000",
220 Description: "testvnf",
221 ServiceType: "firewall",
227 Key: "vnfd/123e4567-e89b-12d3-a456-426655440000",
228 Value: []byte("{\"name\":\"testvnf\"," +
229 "\"description\":\"testvnf\"," +
230 "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
231 "\"service-type\":\"firewall\"}"),
238 expectedError: "DB Error",
240 Err: pkgerrors.New("DB Error"),
245 for _, testCase := range testCases {
246 t.Run(testCase.label, func(t *testing.T) {
247 db.DBconn = testCase.mockdb
248 vimpl := GetVNFDClient()
249 got, err := vimpl.Get(testCase.inp)
251 if testCase.expectedError == "" {
252 t.Fatalf("Get returned an unexpected error %s", err)
254 if strings.Contains(err.Error(), testCase.expectedError) == false {
255 t.Fatalf("Get returned an unexpected error %s", err)
258 if reflect.DeepEqual(testCase.expected, got) == false {
259 t.Errorf("Get VNF returned unexpected body: got %v;"+
260 " expected %v", got, testCase.expected)
267 func TestDelete(t *testing.T) {
269 testCases := []struct {
274 expected []VNFDefinition
277 label: "Delete VNF Definition",
278 inp: "123e4567-e89b-12d3-a456-426655440000",
282 label: "Delete Error",
283 expectedError: "DB Error",
285 Err: pkgerrors.New("DB Error"),
290 for _, testCase := range testCases {
291 t.Run(testCase.label, func(t *testing.T) {
292 db.DBconn = testCase.mockdb
293 vimpl := GetVNFDClient()
294 err := vimpl.Delete(testCase.inp)
296 if testCase.expectedError == "" {
297 t.Fatalf("Delete returned an unexpected error %s", err)
299 if strings.Contains(err.Error(), testCase.expectedError) == false {
300 t.Fatalf("Delete returned an unexpected error %s", err)