]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-message.service.spec.ts
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / services / task-message.service.spec.ts
CommitLineData
f67539c2 1import { HttpClientTestingModule } from '@angular/common/http/testing';
11fdf7f2
TL
2import { TestBed } from '@angular/core/testing';
3
f67539c2 4import _ from 'lodash';
11fdf7f2 5
f67539c2 6import { configureTestBed } from '~/testing/unit-test-helper';
9f95a23c 7import { RbdService } from '../api/rbd.service';
11fdf7f2
TL
8import { FinishedTask } from '../models/finished-task';
9import { TaskException } from '../models/task-exception';
10import { TaskMessageOperation, TaskMessageService } from './task-message.service';
11
12describe('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});