e60947749ffbca9797ee804e0adbdf2fdbb66c0b
[icn.git] / cmd / bpa-restapi-agent / internal / app / image_test.go
1 package app\r
2 \r
3 import (\r
4   "fmt"\r
5   "io/ioutil"\r
6   "log"\r
7   "os"\r
8   "os/user"\r
9   "path"\r
10   "testing"\r
11 \r
12   "github.com/stretchr/testify/mock"\r
13   "github.com/pkg/errors"\r
14 \r
15 )\r
16 \r
17 type mockValues struct {\r
18   mock.Mock\r
19 }\r
20 \r
21 func (m *mockValues) GetCurrentUser() (*user.User, error) {\r
22   fmt.Println("Mocked Get User")\r
23   args := m.Called()\r
24 \r
25   return args.Get(0).(*user.User), args.Error(1)\r
26 }\r
27 \r
28 func TestGetDirPath(t *testing.T) {\r
29   fakeUser := user.User{}\r
30   u := &fakeUser\r
31 \r
32   myMocks := new(mockValues)\r
33 \r
34   myMocks.On("GetCurrentUser").Return(&fakeUser, nil)\r
35   myMocks.On("GetPath", u, "", "test_image").Return("", "")\r
36 \r
37   imageClient := ImageClient{myMocks, "test_image", "test_meta"}\r
38   _, dir, err := imageClient.GetDirPath("")\r
39   if err != nil {\r
40     t.Errorf("Path was incorrect, got: %q, want: %q.", dir, "some_path")\r
41   }\r
42 }\r
43 \r
44 func (m *mockValues) DBCreate(name string, key ImageKey, meta string, c Image) error{\r
45     fmt.Println("Mocked Create image in Mongo")\r
46     args := m.Called(name, key, meta, c)\r
47 \r
48     return args.Error(0)\r
49 }\r
50 \r
51 func (m *mockValues) DBRead(name string, key ImageKey, meta string) ([]byte, error) {\r
52     fmt.Println("Mocked Mongo DB Read Operations")\r
53     args := m.Called(name, key, meta)\r
54 \r
55     return args.Get(0).([]byte), args.Error(1)\r
56 }\r
57 \r
58 func (m *mockValues) DBUnmarshal(value []byte) (Image, error) {\r
59     fmt.Println("Mocked Mongo DB Unmarshal Operation")\r
60     args := m.Called(value)\r
61 \r
62     return args.Get(0).(Image), args.Error(1)\r
63 }\r
64 \r
65 func (m *mockValues) GetPath(u *user.User, imageName string, storeName string) (string, string) {\r
66     args := m.Called(u, "", "test_image")\r
67 \r
68     return args.String(0), args.String(1)\r
69 }\r
70 \r
71 func (m *mockValues) DBDelete(name string, key ImageKey, meta string) error {\r
72     fmt.Println("Mocked Mongo DB Delete")\r
73     args := m.Called(name, key, meta)\r
74 \r
75     return args.Error(0)\r
76 \r
77 }\r
78 \r
79 func (m *mockValues) DBUpdate(s string, k ImageKey, t string, c Image) error {\r
80     fmt.Println("Mocked Mongo DB Update")\r
81     args := m.Called(s, k, t, c)\r
82 \r
83     return args.Error(0)\r
84 }\r
85 \r
86 func TestCreate(t *testing.T) {\r
87     dir, err := ioutil.TempDir("", "test_images")\r
88     if err != nil {\r
89         log.Fatal(err)\r
90     }\r
91     defer os.RemoveAll(dir)\r
92 \r
93     image := Image{\r
94                     ImageName: "test_asdf",\r
95                 }\r
96     arr_data := []byte{}\r
97     key := ImageKey{ImageName:"test_asdf"}\r
98     myMocks := new(mockValues)\r
99     // just to get an error value\r
100     err1 := errors.New("math: square root of negative number")\r
101 \r
102     fakeUser := user.User{}\r
103     u := &fakeUser\r
104     file_path := path.Join(dir, "test_asdf")\r
105 \r
106     myMocks.On("DBCreate", "test_image", key, "test_meta", image).Return(nil)\r
107     myMocks.On("DBRead", "test_image", key, "test_meta").Return(arr_data, err1)\r
108     myMocks.On("DBUnmarshal", arr_data).Return(image, nil)\r
109     myMocks.On("GetCurrentUser").Return(&fakeUser, nil)\r
110     myMocks.On("GetPath", u, "", "test_image").Return(file_path, dir)\r
111 \r
112     imageClient := ImageClient{myMocks, "test_image", "test_meta"}\r
113     _, err = imageClient.Create(image)\r
114     if err != nil {\r
115         t.Errorf("Some error occured!")\r
116     }\r
117 }\r
118 \r
119 func TestDelete(t *testing.T) {\r
120     tmpfile, err := ioutil.TempFile("", "test_images")\r
121     if err != nil {\r
122         log.Fatal(err)\r
123     }\r
124     defer os.Remove(tmpfile.Name())\r
125 \r
126     key := ImageKey{ImageName: "test_asdf"}\r
127     fakeUser := user.User{}\r
128     u := &fakeUser\r
129     file_path := tmpfile.Name()\r
130 \r
131     myMocks := new(mockValues)\r
132 \r
133     myMocks.On("DBDelete", "test_image", key, "test_meta").Return(nil)\r
134     myMocks.On("GetCurrentUser").Return(&fakeUser, nil)\r
135     myMocks.On("GetPath", u, "", "test_image").Return(file_path, "")\r
136 \r
137     imageClient := ImageClient{myMocks, "test_image", "test_meta"}\r
138     err = imageClient.Delete("test_asdf")\r
139     if err != nil {\r
140         t.Errorf("Some error occured!")\r
141     }\r
142 \r
143 }\r
144 \r
145 func TestUpdate(t *testing.T) {\r
146     image := Image{}\r
147     key := ImageKey{}\r
148     arr_data := []byte{} \r
149 \r
150     myMocks := new(mockValues)\r
151 \r
152     myMocks.On("DBRead", "test_image", key, "test_meta").Return(arr_data, nil)\r
153     myMocks.On("DBUnmarshal", arr_data).Return(image, nil)\r
154     myMocks.On("DBUpdate", "test_image", key, "test_meta", image).Return(nil)\r
155     imageClient := ImageClient{myMocks, "test_image", "test_meta"}\r
156     _, err := imageClient.Update("", image)\r
157     if err != nil {\r
158         t.Errorf("Some error occured!")\r
159     }\r
160 }\r