]>
Commit | Line | Data |
---|---|---|
f67539c2 | 1 | import { HttpClientTestingModule } from '@angular/common/http/testing'; |
11fdf7f2 TL |
2 | import { TestBed } from '@angular/core/testing'; |
3 | ||
f67539c2 | 4 | import _ from 'lodash'; |
11fdf7f2 | 5 | |
f67539c2 | 6 | import { configureTestBed } from '~/testing/unit-test-helper'; |
9f95a23c | 7 | import { RbdService } from '../api/rbd.service'; |
11fdf7f2 TL |
8 | import { FinishedTask } from '../models/finished-task'; |
9 | import { TaskException } from '../models/task-exception'; | |
10 | import { TaskMessageOperation, TaskMessageService } from './task-message.service'; | |
11 | ||
12 | describe('TaskManagerMessageService', () => { | |
13 | let service: TaskMessageService; | |
14 | let finishedTask: FinishedTask; | |
15 | ||
16 | configureTestBed({ | |
f67539c2 | 17 | providers: [TaskMessageService, RbdService], |
9f95a23c | 18 | imports: [HttpClientTestingModule] |
11fdf7f2 TL |
19 | }); |
20 | ||
21 | beforeEach(() => { | |
f67539c2 | 22 | service = TestBed.inject(TaskMessageService); |
11fdf7f2 | 23 | finishedTask = new FinishedTask(); |
9f95a23c | 24 | finishedTask.duration = 30; |
11fdf7f2 TL |
25 | }); |
26 | ||
27 | it('should be created', () => { | |
28 | expect(service).toBeTruthy(); | |
29 | }); | |
30 | ||
31 | it('should get default description', () => { | |
32 | expect(service.getErrorTitle(finishedTask)).toBe('Failed to execute unknown task'); | |
33 | }); | |
34 | ||
35 | it('should get default running message', () => { | |
36 | expect(service.getRunningTitle(finishedTask)).toBe('Executing unknown task'); | |
37 | }); | |
38 | ||
39 | it('should get default running message with a set component', () => { | |
40 | finishedTask.metadata = { component: 'rbd' }; | |
41 | expect(service.getRunningTitle(finishedTask)).toBe('Executing RBD'); | |
42 | }); | |
43 | ||
44 | it('should getSuccessMessage', () => { | |
45 | expect(service.getSuccessTitle(finishedTask)).toBe('Executed unknown task'); | |
46 | }); | |
47 | ||
48 | describe('defined tasks messages', () => { | |
49 | let defaultMsg: string; | |
50 | const testMessages = (operation: TaskMessageOperation, involves: string) => { | |
51 | expect(service.getRunningTitle(finishedTask)).toBe(operation.running + ' ' + involves); | |
52 | expect(service.getErrorTitle(finishedTask)).toBe( | |
53 | 'Failed to ' + operation.failure + ' ' + involves | |
54 | ); | |
9f95a23c | 55 | expect(service.getSuccessTitle(finishedTask)).toBe(`${operation.success} ${involves}`); |
11fdf7f2 TL |
56 | }; |
57 | ||
58 | const testCreate = (involves: string) => { | |
59 | testMessages(new TaskMessageOperation('Creating', 'create', 'Created'), involves); | |
60 | }; | |
61 | ||
62 | const testUpdate = (involves: string) => { | |
63 | testMessages(new TaskMessageOperation('Updating', 'update', 'Updated'), involves); | |
64 | }; | |
65 | ||
66 | const testDelete = (involves: string) => { | |
67 | testMessages(new TaskMessageOperation('Deleting', 'delete', 'Deleted'), involves); | |
68 | }; | |
69 | ||
9f95a23c TL |
70 | const testImport = (involves: string) => { |
71 | testMessages(new TaskMessageOperation('Importing', 'import', 'Imported'), involves); | |
72 | }; | |
73 | ||
11fdf7f2 TL |
74 | const testErrorCode = (code: number, msg: string) => { |
75 | finishedTask.exception = _.assign(new TaskException(), { | |
76 | code: code | |
77 | }); | |
78 | expect(service.getErrorMessage(finishedTask)).toBe(msg); | |
79 | }; | |
80 | ||
81 | describe('pool tasks', () => { | |
82 | beforeEach(() => { | |
83 | const metadata = { | |
84 | pool_name: 'somePool' | |
85 | }; | |
86 | defaultMsg = `pool '${metadata.pool_name}'`; | |
87 | finishedTask.metadata = metadata; | |
88 | }); | |
89 | ||
90 | it('tests pool/create messages', () => { | |
91 | finishedTask.name = 'pool/create'; | |
92 | testCreate(defaultMsg); | |
93 | testErrorCode(17, `Name is already used by ${defaultMsg}.`); | |
94 | }); | |
95 | ||
96 | it('tests pool/edit messages', () => { | |
97 | finishedTask.name = 'pool/edit'; | |
98 | testUpdate(defaultMsg); | |
99 | testErrorCode(17, `Name is already used by ${defaultMsg}.`); | |
100 | }); | |
101 | ||
102 | it('tests pool/delete messages', () => { | |
103 | finishedTask.name = 'pool/delete'; | |
104 | testDelete(defaultMsg); | |
105 | }); | |
106 | }); | |
107 | ||
108 | describe('erasure code profile tasks', () => { | |
109 | beforeEach(() => { | |
110 | const metadata = { | |
111 | name: 'someEcpName' | |
112 | }; | |
113 | defaultMsg = `erasure code profile '${metadata.name}'`; | |
114 | finishedTask.metadata = metadata; | |
115 | }); | |
116 | ||
117 | it('tests ecp/create messages', () => { | |
118 | finishedTask.name = 'ecp/create'; | |
119 | testCreate(defaultMsg); | |
120 | testErrorCode(17, `Name is already used by ${defaultMsg}.`); | |
121 | }); | |
122 | ||
123 | it('tests ecp/delete messages', () => { | |
124 | finishedTask.name = 'ecp/delete'; | |
125 | testDelete(defaultMsg); | |
126 | }); | |
127 | }); | |
128 | ||
9f95a23c TL |
129 | describe('crush rule tasks', () => { |
130 | beforeEach(() => { | |
131 | const metadata = { | |
132 | name: 'someRuleName' | |
133 | }; | |
134 | defaultMsg = `crush rule '${metadata.name}'`; | |
135 | finishedTask.metadata = metadata; | |
136 | }); | |
137 | ||
138 | it('tests crushRule/create messages', () => { | |
139 | finishedTask.name = 'crushRule/create'; | |
140 | testCreate(defaultMsg); | |
141 | testErrorCode(17, `Name is already used by ${defaultMsg}.`); | |
142 | }); | |
143 | ||
144 | it('tests crushRule/delete messages', () => { | |
145 | finishedTask.name = 'crushRule/delete'; | |
146 | testDelete(defaultMsg); | |
147 | }); | |
148 | }); | |
149 | ||
11fdf7f2 | 150 | describe('rbd tasks', () => { |
9f95a23c | 151 | let metadata: Record<string, any>; |
11fdf7f2 TL |
152 | let childMsg: string; |
153 | let destinationMsg: string; | |
154 | let snapMsg: string; | |
155 | ||
156 | beforeEach(() => { | |
157 | metadata = { | |
158 | pool_name: 'somePool', | |
159 | image_name: 'someImage', | |
9f95a23c TL |
160 | image_id: '12345', |
161 | image_spec: 'somePool/someImage', | |
162 | image_id_spec: 'somePool/12345', | |
11fdf7f2 TL |
163 | snapshot_name: 'someSnapShot', |
164 | dest_pool_name: 'someDestinationPool', | |
165 | dest_image_name: 'someDestinationImage', | |
166 | child_pool_name: 'someChildPool', | |
167 | child_image_name: 'someChildImage', | |
9f95a23c | 168 | new_image_name: 'someImage2' |
11fdf7f2 TL |
169 | }; |
170 | defaultMsg = `RBD '${metadata.pool_name}/${metadata.image_name}'`; | |
171 | childMsg = `RBD '${metadata.child_pool_name}/${metadata.child_image_name}'`; | |
172 | destinationMsg = `RBD '${metadata.dest_pool_name}/${metadata.dest_image_name}'`; | |
9f95a23c | 173 | snapMsg = `RBD snapshot '${metadata.pool_name}/${metadata.image_name}@${metadata.snapshot_name}'`; |
11fdf7f2 TL |
174 | finishedTask.metadata = metadata; |
175 | }); | |
176 | ||
177 | it('tests rbd/create messages', () => { | |
178 | finishedTask.name = 'rbd/create'; | |
179 | testCreate(defaultMsg); | |
180 | testErrorCode(17, `Name is already used by ${defaultMsg}.`); | |
181 | }); | |
182 | ||
183 | it('tests rbd/edit messages', () => { | |
184 | finishedTask.name = 'rbd/edit'; | |
185 | testUpdate(defaultMsg); | |
186 | testErrorCode(17, `Name is already used by ${defaultMsg}.`); | |
187 | }); | |
188 | ||
189 | it('tests rbd/delete messages', () => { | |
190 | finishedTask.name = 'rbd/delete'; | |
191 | testDelete(defaultMsg); | |
9f95a23c | 192 | testErrorCode(16, `${defaultMsg} is busy.`); |
11fdf7f2 TL |
193 | testErrorCode(39, `${defaultMsg} contains snapshots.`); |
194 | }); | |
195 | ||
196 | it('tests rbd/clone messages', () => { | |
197 | finishedTask.name = 'rbd/clone'; | |
198 | testMessages(new TaskMessageOperation('Cloning', 'clone', 'Cloned'), childMsg); | |
199 | testErrorCode(17, `Name is already used by ${childMsg}.`); | |
200 | testErrorCode(22, `Snapshot of ${childMsg} must be protected.`); | |
201 | }); | |
202 | ||
203 | it('tests rbd/copy messages', () => { | |
204 | finishedTask.name = 'rbd/copy'; | |
205 | testMessages(new TaskMessageOperation('Copying', 'copy', 'Copied'), destinationMsg); | |
206 | testErrorCode(17, `Name is already used by ${destinationMsg}.`); | |
207 | }); | |
208 | ||
209 | it('tests rbd/flatten messages', () => { | |
210 | finishedTask.name = 'rbd/flatten'; | |
211 | testMessages(new TaskMessageOperation('Flattening', 'flatten', 'Flattened'), defaultMsg); | |
212 | }); | |
213 | ||
214 | it('tests rbd/snap/create messages', () => { | |
215 | finishedTask.name = 'rbd/snap/create'; | |
216 | testCreate(snapMsg); | |
217 | testErrorCode(17, `Name is already used by ${snapMsg}.`); | |
218 | }); | |
219 | ||
220 | it('tests rbd/snap/edit messages', () => { | |
221 | finishedTask.name = 'rbd/snap/edit'; | |
222 | testUpdate(snapMsg); | |
223 | testErrorCode(16, `Cannot unprotect ${snapMsg} because it contains child images.`); | |
224 | }); | |
225 | ||
226 | it('tests rbd/snap/delete messages', () => { | |
227 | finishedTask.name = 'rbd/snap/delete'; | |
228 | testDelete(snapMsg); | |
229 | testErrorCode(16, `Cannot delete ${snapMsg} because it's protected.`); | |
230 | }); | |
231 | ||
232 | it('tests rbd/snap/rollback messages', () => { | |
233 | finishedTask.name = 'rbd/snap/rollback'; | |
234 | testMessages(new TaskMessageOperation('Rolling back', 'rollback', 'Rolled back'), snapMsg); | |
235 | }); | |
236 | ||
237 | it('tests rbd/trash/move messages', () => { | |
238 | finishedTask.name = 'rbd/trash/move'; | |
239 | testMessages( | |
240 | new TaskMessageOperation('Moving', 'move', 'Moved'), | |
9f95a23c | 241 | `image '${metadata.image_spec}' to trash` |
11fdf7f2 TL |
242 | ); |
243 | testErrorCode(2, `Could not find image.`); | |
244 | }); | |
245 | ||
246 | it('tests rbd/trash/restore messages', () => { | |
247 | finishedTask.name = 'rbd/trash/restore'; | |
248 | testMessages( | |
249 | new TaskMessageOperation('Restoring', 'restore', 'Restored'), | |
f67539c2 | 250 | `image '${metadata.image_id_spec}' into '${metadata.new_image_name}'` |
11fdf7f2 | 251 | ); |
9f95a23c | 252 | testErrorCode(17, `Image name '${metadata.new_image_name}' is already in use.`); |
11fdf7f2 TL |
253 | }); |
254 | ||
255 | it('tests rbd/trash/remove messages', () => { | |
256 | finishedTask.name = 'rbd/trash/remove'; | |
9f95a23c | 257 | testDelete(`image '${metadata.image_id_spec}'`); |
11fdf7f2 TL |
258 | }); |
259 | ||
260 | it('tests rbd/trash/purge messages', () => { | |
261 | finishedTask.name = 'rbd/trash/purge'; | |
262 | testMessages( | |
263 | new TaskMessageOperation('Purging', 'purge', 'Purged'), | |
264 | `images from '${metadata.pool_name}'` | |
265 | ); | |
266 | }); | |
267 | }); | |
268 | describe('rbd tasks', () => { | |
269 | let metadata; | |
270 | let modeMsg: string; | |
271 | let peerMsg: string; | |
272 | ||
273 | beforeEach(() => { | |
274 | metadata = { | |
275 | pool_name: 'somePool' | |
276 | }; | |
277 | modeMsg = `mirror mode for pool '${metadata.pool_name}'`; | |
278 | peerMsg = `mirror peer for pool '${metadata.pool_name}'`; | |
279 | finishedTask.metadata = metadata; | |
280 | }); | |
9f95a23c TL |
281 | it('tests rbd/mirroring/site_name/edit messages', () => { |
282 | finishedTask.name = 'rbd/mirroring/site_name/edit'; | |
283 | testUpdate('mirroring site name'); | |
284 | }); | |
285 | it('tests rbd/mirroring/bootstrap/create messages', () => { | |
286 | finishedTask.name = 'rbd/mirroring/bootstrap/create'; | |
287 | testCreate('bootstrap token'); | |
288 | }); | |
289 | it('tests rbd/mirroring/bootstrap/import messages', () => { | |
290 | finishedTask.name = 'rbd/mirroring/bootstrap/import'; | |
291 | testImport('bootstrap token'); | |
292 | }); | |
11fdf7f2 TL |
293 | it('tests rbd/mirroring/pool/edit messages', () => { |
294 | finishedTask.name = 'rbd/mirroring/pool/edit'; | |
295 | testUpdate(modeMsg); | |
296 | testErrorCode(16, 'Cannot disable mirroring because it contains a peer.'); | |
297 | }); | |
298 | it('tests rbd/mirroring/peer/edit messages', () => { | |
299 | finishedTask.name = 'rbd/mirroring/peer/edit'; | |
300 | testUpdate(peerMsg); | |
301 | }); | |
302 | it('tests rbd/mirroring/peer/add messages', () => { | |
303 | finishedTask.name = 'rbd/mirroring/peer/add'; | |
304 | testCreate(peerMsg); | |
305 | }); | |
306 | it('tests rbd/mirroring/peer/delete messages', () => { | |
307 | finishedTask.name = 'rbd/mirroring/peer/delete'; | |
308 | testDelete(peerMsg); | |
309 | }); | |
310 | }); | |
311 | }); | |
312 | }); |