3e4bed0c892c20568990ae328993e81582b3b704
[icn/sdwan.git] /
1 // SPDX-License-Identifier: Apache-2.0
2 // Copyright (c) 2021 Intel Corporation
3
4 package contextdb
5
6 import (
7         "encoding/json"
8         "fmt"
9         "strings"
10 )
11
12 type MockConDb struct {
13         Items []map[string][]byte
14         Err   error
15 }
16
17 func (c *MockConDb) Put(key string, value interface{}) error {
18
19         var vg interface{}
20         err := c.Get(key, interface{}(&vg))
21         if vg != "" {
22                 c.Delete(key)
23         }
24         d := make(map[string][]byte)
25         v, err := json.Marshal(value)
26         if err != nil {
27                 fmt.Println("Error during json marshal")
28         }
29         d[key] = v
30         c.Items = append(c.Items, d)
31         return c.Err
32 }
33 func (c *MockConDb) HealthCheck() error {
34         return c.Err
35 }
36 func (c *MockConDb) Get(key string, value interface{}) error {
37         for _, item := range c.Items {
38                 for k, v := range item {
39                         if k == key {
40                                 err := json.Unmarshal([]byte(v), value)
41                                 if err != nil {
42                                         fmt.Println("Error during json unmarshal")
43                                 }
44                                 return c.Err
45                         }
46                 }
47         }
48         value = nil
49         return c.Err
50 }
51 func (c *MockConDb) GetAllKeys(path string) ([]string, error) {
52         n := 0
53         for _, item := range c.Items {
54                 for k, _ := range item {
55                         ok := strings.HasPrefix(k, path)
56                         if ok {
57                                 n++
58                         }
59                 }
60         }
61         if n == 0 {
62                 return nil, c.Err
63         }
64
65         retk := make([]string, n)
66
67         i := 0
68         for _, item := range c.Items {
69                 for k, _ := range item {
70                         ok := strings.HasPrefix(k, path)
71                         if ok {
72                                 retk[i] = k
73                                 i++
74                         }
75                 }
76         }
77         return retk, c.Err
78 }
79 func (c *MockConDb) Delete(key string) error {
80         for i, item := range c.Items {
81                 for k, _ := range item {
82                         if k == key {
83                                 c.Items[i] = c.Items[len(c.Items)-1]
84                                 c.Items = c.Items[:len(c.Items)-1]
85                                 return c.Err
86                         }
87                 }
88         }
89         return c.Err
90 }
91 func (c *MockConDb) DeleteAll(key string) error {
92         for i, item := range c.Items {
93                 for k, _ := range item {
94                         ok := strings.HasPrefix(k, key)
95                         if ok {
96                                 c.Items[i] = c.Items[len(c.Items)-1]
97                                 c.Items = c.Items[:len(c.Items)-1]
98                         }
99                 }
100         }
101         return c.Err
102 }