1 import { HttpClientTestingModule } from '@angular/common/http/testing';
2 import { ComponentFixture, TestBed } from '@angular/core/testing';
3 import { ReactiveFormsModule } from '@angular/forms';
4 import { By } from '@angular/platform-browser';
5 import { RouterTestingModule } from '@angular/router/testing';
7 import { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
8 import _ from 'lodash';
9 import { ToastrModule } from 'ngx-toastr';
11 import { CephServiceService } from '~/app/shared/api/ceph-service.service';
12 import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
13 import { SharedModule } from '~/app/shared/shared.module';
14 import { configureTestBed, FormHelper } from '~/testing/unit-test-helper';
15 import { ServiceFormComponent } from './service-form.component';
17 describe('ServiceFormComponent', () => {
18 let component: ServiceFormComponent;
19 let fixture: ComponentFixture<ServiceFormComponent>;
20 let cephServiceService: CephServiceService;
21 let form: CdFormGroup;
22 let formHelper: FormHelper;
25 declarations: [ServiceFormComponent],
27 HttpClientTestingModule,
32 ToastrModule.forRoot()
37 fixture = TestBed.createComponent(ServiceFormComponent);
38 component = fixture.componentInstance;
39 form = component.serviceForm;
40 formHelper = new FormHelper(form);
41 fixture.detectChanges();
44 it('should create', () => {
45 expect(component).toBeTruthy();
48 describe('should test form', () => {
50 cephServiceService = TestBed.inject(CephServiceService);
51 spyOn(cephServiceService, 'create').and.stub();
54 it('should test placement (host)', () => {
55 formHelper.setValue('service_type', 'crash');
56 formHelper.setValue('placement', 'hosts');
57 formHelper.setValue('hosts', ['mgr0', 'mon0', 'osd0']);
58 formHelper.setValue('count', 2);
60 expect(cephServiceService.create).toHaveBeenCalledWith({
61 service_type: 'crash',
63 hosts: ['mgr0', 'mon0', 'osd0'],
70 it('should test placement (label)', () => {
71 formHelper.setValue('service_type', 'mgr');
72 formHelper.setValue('placement', 'label');
73 formHelper.setValue('label', 'foo');
75 expect(cephServiceService.create).toHaveBeenCalledWith({
84 it('should submit valid count', () => {
85 formHelper.setValue('count', 1);
87 formHelper.expectValid('count');
90 it('should submit invalid count (1)', () => {
91 formHelper.setValue('count', 0);
93 formHelper.expectError('count', 'min');
96 it('should submit invalid count (2)', () => {
97 formHelper.setValue('count', 'abc');
99 formHelper.expectError('count', 'pattern');
102 it('should test unmanaged', () => {
103 formHelper.setValue('service_type', 'rgw');
104 formHelper.setValue('placement', 'label');
105 formHelper.setValue('label', 'bar');
106 formHelper.setValue('rgw_frontend_port', 4567);
107 formHelper.setValue('unmanaged', true);
108 component.onSubmit();
109 expect(cephServiceService.create).toHaveBeenCalledWith({
116 it('should test various services', () => {
130 formHelper.setValue('service_type', serviceType);
131 component.onSubmit();
132 expect(cephServiceService.create).toHaveBeenCalledWith({
133 service_type: serviceType,
141 describe('should test service nfs', () => {
143 formHelper.setValue('service_type', 'nfs');
144 formHelper.setValue('pool', 'foo');
147 it('should submit nfs with namespace', () => {
148 formHelper.setValue('namespace', 'bar');
149 component.onSubmit();
150 expect(cephServiceService.create).toHaveBeenCalledWith({
159 it('should submit nfs w/o namespace', () => {
160 component.onSubmit();
161 expect(cephServiceService.create).toHaveBeenCalledWith({
170 describe('should test service rgw', () => {
172 formHelper.setValue('service_type', 'rgw');
175 it('should test rgw valid service id', () => {
176 formHelper.setValue('service_id', 'foo.bar');
177 formHelper.expectValid('service_id');
178 formHelper.setValue('service_id', 'foo.bar.bas');
179 formHelper.expectValid('service_id');
182 it('should test rgw invalid service id', () => {
183 formHelper.setValue('service_id', 'foo');
184 formHelper.expectError('service_id', 'rgwPattern');
185 formHelper.setValue('service_id', 'foo.');
186 formHelper.expectError('service_id', 'rgwPattern');
187 formHelper.setValue('service_id', 'foo.bar.');
188 formHelper.expectError('service_id', 'rgwPattern');
189 formHelper.setValue('service_id', 'foo.bar.bas.');
190 formHelper.expectError('service_id', 'rgwPattern');
193 it('should submit rgw with port', () => {
194 formHelper.setValue('rgw_frontend_port', 1234);
195 formHelper.setValue('ssl', true);
196 component.onSubmit();
197 expect(cephServiceService.create).toHaveBeenCalledWith({
201 rgw_frontend_port: 1234,
202 rgw_frontend_ssl_certificate: '',
207 it('should submit valid rgw port (1)', () => {
208 formHelper.setValue('rgw_frontend_port', 1);
209 component.onSubmit();
210 formHelper.expectValid('rgw_frontend_port');
213 it('should submit valid rgw port (2)', () => {
214 formHelper.setValue('rgw_frontend_port', 65535);
215 component.onSubmit();
216 formHelper.expectValid('rgw_frontend_port');
219 it('should submit invalid rgw port (1)', () => {
220 formHelper.setValue('rgw_frontend_port', 0);
221 component.onSubmit();
222 formHelper.expectError('rgw_frontend_port', 'min');
225 it('should submit invalid rgw port (2)', () => {
226 formHelper.setValue('rgw_frontend_port', 65536);
227 component.onSubmit();
228 formHelper.expectError('rgw_frontend_port', 'max');
231 it('should submit invalid rgw port (3)', () => {
232 formHelper.setValue('rgw_frontend_port', 'abc');
233 component.onSubmit();
234 formHelper.expectError('rgw_frontend_port', 'pattern');
237 it('should submit rgw w/o port', () => {
238 formHelper.setValue('ssl', false);
239 component.onSubmit();
240 expect(cephServiceService.create).toHaveBeenCalledWith({
248 it('should not show private key field', () => {
249 formHelper.setValue('ssl', true);
250 fixture.detectChanges();
251 const ssl_key = fixture.debugElement.query(By.css('#ssl_key'));
252 expect(ssl_key).toBeNull();
255 it('should test .pem file', () => {
257 -----BEGIN CERTIFICATE-----
258 iJ5IbgzlKPssdYwuAEI3yPZxX/g5vKBrgcyD3LttLL/DlElq/1xCnwVrv7WROSNu
259 -----END CERTIFICATE-----
260 -----BEGIN CERTIFICATE-----
261 mn/S7BNBEC7AGe5ajmN+8hBTGdACUXe8rwMNrtTy/MwBZ0VpJsAAjJh+aptZh5yB
262 -----END CERTIFICATE-----
263 -----BEGIN RSA PRIVATE KEY-----
264 x4Ea7kGVgx9kWh5XjWz9wjZvY49UKIT5ppIAWPMbLl3UpfckiuNhTA==
265 -----END RSA PRIVATE KEY-----`;
266 formHelper.setValue('ssl', true);
267 formHelper.setValue('ssl_cert', pemCert);
268 fixture.detectChanges();
269 formHelper.expectValid('ssl_cert');
273 describe('should test service iscsi', () => {
275 formHelper.setValue('service_type', 'iscsi');
276 formHelper.setValue('pool', 'xyz');
277 formHelper.setValue('api_user', 'user');
278 formHelper.setValue('api_password', 'password');
279 formHelper.setValue('ssl', false);
282 it('should submit iscsi', () => {
283 component.onSubmit();
284 expect(cephServiceService.create).toHaveBeenCalledWith({
285 service_type: 'iscsi',
290 api_password: 'password',
295 it('should submit iscsi with trusted ips', () => {
296 formHelper.setValue('ssl', true);
297 formHelper.setValue('trusted_ip_list', ' 172.16.0.5, 192.1.1.10 ');
298 component.onSubmit();
299 expect(cephServiceService.create).toHaveBeenCalledWith({
300 service_type: 'iscsi',
305 api_password: 'password',
309 trusted_ip_list: '172.16.0.5, 192.1.1.10'
313 it('should submit iscsi with port', () => {
314 formHelper.setValue('api_port', 456);
315 component.onSubmit();
316 expect(cephServiceService.create).toHaveBeenCalledWith({
317 service_type: 'iscsi',
322 api_password: 'password',
328 it('should submit valid iscsi port (1)', () => {
329 formHelper.setValue('api_port', 1);
330 component.onSubmit();
331 formHelper.expectValid('api_port');
334 it('should submit valid iscsi port (2)', () => {
335 formHelper.setValue('api_port', 65535);
336 component.onSubmit();
337 formHelper.expectValid('api_port');
340 it('should submit invalid iscsi port (1)', () => {
341 formHelper.setValue('api_port', 0);
342 component.onSubmit();
343 formHelper.expectError('api_port', 'min');
346 it('should submit invalid iscsi port (2)', () => {
347 formHelper.setValue('api_port', 65536);
348 component.onSubmit();
349 formHelper.expectError('api_port', 'max');
352 it('should submit invalid iscsi port (3)', () => {
353 formHelper.setValue('api_port', 'abc');
354 component.onSubmit();
355 formHelper.expectError('api_port', 'pattern');
359 describe('should test service ingress', () => {
361 formHelper.setValue('service_type', 'ingress');
362 formHelper.setValue('backend_service', 'rgw.foo');
363 formHelper.setValue('virtual_ip', '192.168.20.1/24');
364 formHelper.setValue('ssl', false);
367 it('should submit ingress', () => {
368 component.onSubmit();
369 expect(cephServiceService.create).toHaveBeenCalledWith({
370 service_type: 'ingress',
373 backend_service: 'rgw.foo',
374 service_id: 'rgw.foo',
375 virtual_ip: '192.168.20.1/24',
376 virtual_interface_networks: null,
381 it('should pre-populate the service id', () => {
382 component.prePopulateId();
383 const prePopulatedID = component.serviceForm.getValue('service_id');
384 expect(prePopulatedID).toBe('rgw.foo');
387 it('should submit valid frontend and monitor port', () => {
389 formHelper.setValue('frontend_port', 1);
390 formHelper.setValue('monitor_port', 1);
391 component.onSubmit();
392 formHelper.expectValid('frontend_port');
393 formHelper.expectValid('monitor_port');
396 formHelper.setValue('frontend_port', 65535);
397 formHelper.setValue('monitor_port', 65535);
398 component.onSubmit();
399 formHelper.expectValid('frontend_port');
400 formHelper.expectValid('monitor_port');
403 it('should submit invalid frontend and monitor port', () => {
405 formHelper.setValue('frontend_port', 0);
406 formHelper.setValue('monitor_port', 0);
407 component.onSubmit();
408 formHelper.expectError('frontend_port', 'min');
409 formHelper.expectError('monitor_port', 'min');
412 formHelper.setValue('frontend_port', 65536);
413 formHelper.setValue('monitor_port', 65536);
414 component.onSubmit();
415 formHelper.expectError('frontend_port', 'max');
416 formHelper.expectError('monitor_port', 'max');
419 formHelper.setValue('frontend_port', 'abc');
420 formHelper.setValue('monitor_port', 'abc');
421 component.onSubmit();
422 formHelper.expectError('frontend_port', 'pattern');
423 formHelper.expectError('monitor_port', 'pattern');