]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/blob
6d25ac626aaaf2f056313d818a15c0269ce8de6f
[ceph-ci.git] /
1 import { ComponentFixture, TestBed } from '@angular/core/testing';
2 import { NvmeofGatewayGroupComponent } from './nvmeof-gateway-group.component';
3 import { GridModule, TabsModule } from 'carbon-components-angular';
4 import { NvmeofService } from '~/app/shared/api/nvmeof.service';
5 import { of } from 'rxjs';
6 import { HttpClientModule } from '@angular/common/http';
7 import { SharedModule } from '~/app/shared/shared.module';
8
9 describe('NvmeofGatewayGroupComponent', () => {
10   let component: NvmeofGatewayGroupComponent;
11   let fixture: ComponentFixture<NvmeofGatewayGroupComponent>;
12   let nvmeofService: any;
13
14   beforeEach(async () => {
15     const nvmeofServiceSpy = {
16       listGatewayGroups: jest.fn().mockReturnValue(of([])),
17       listSubsystems: jest.fn().mockReturnValue(of([]))
18     };
19
20     await TestBed.configureTestingModule({
21       imports: [HttpClientModule, SharedModule, TabsModule, GridModule],
22       declarations: [NvmeofGatewayGroupComponent],
23       providers: [{ provide: NvmeofService, useValue: nvmeofServiceSpy }]
24     }).compileComponents();
25
26     fixture = TestBed.createComponent(NvmeofGatewayGroupComponent);
27     component = fixture.componentInstance;
28     nvmeofService = TestBed.inject(NvmeofService);
29     fixture.detectChanges();
30   });
31
32   it('should create the component', () => {
33     expect(component).toBeTruthy();
34   });
35
36   it('should call listGatewayGroups and getDaemons on initialization', () => {
37     expect(nvmeofService.listGatewayGroups).toHaveBeenCalled();
38   });
39
40   it('should populate gatewayGroup$ with the correct data', (done) => {
41     const mockData = [
42       {
43         service_type: 'nvmeof',
44         service_id: 'rbd.default',
45         service_name: 'nvmeof.rbd.default',
46         placement: {
47           count: 1
48         },
49         spec: {
50           abort_discovery_on_errors: true,
51           abort_on_errors: true,
52           allowed_consecutive_spdk_ping_failures: 1,
53           break_update_interval_sec: 25,
54           cluster_connections: 32,
55           conn_retries: 10,
56           discovery_port: 8009,
57           enable_monitor_client: true,
58           enable_prometheus_exporter: true,
59           group: 'default',
60           log_directory: '/var/log/ceph/',
61           log_files_enabled: true,
62           log_files_rotation_enabled: true,
63           log_level: 'INFO',
64           max_gws_in_grp: 16,
65           max_hosts: 2048,
66           max_hosts_per_namespace: 16,
67           max_hosts_per_subsystem: 128,
68           max_log_directory_backups: 10,
69           max_log_file_size_in_mb: 10,
70           max_log_files_count: 20,
71           max_namespaces: 4096,
72           max_namespaces_per_subsystem: 512,
73           max_namespaces_with_netmask: 1000,
74           max_ns_to_change_lb_grp: 8,
75           max_subsystems: 128,
76           monitor_timeout: 1,
77           notifications_interval: 60,
78           omap_file_lock_duration: 20,
79           omap_file_lock_on_read: true,
80           omap_file_lock_retries: 30,
81           omap_file_lock_retry_sleep_interval: 1,
82           omap_file_update_attempts: 500,
83           omap_file_update_reloads: 10,
84           pool: 'rbd',
85           port: 5500,
86           prometheus_connection_list_cache_expiration: 60,
87           prometheus_cycles_to_adjust_speed: 3,
88           prometheus_frequency_slow_down_factor: 3,
89           prometheus_port: 10008,
90           prometheus_startup_delay: 240,
91           prometheus_stats_interval: 10,
92           rebalance_period_sec: 7,
93           rpc_socket_dir: '/var/tmp/',
94           rpc_socket_name: 'spdk.sock',
95           spdk_path: '/usr/local/bin/nvmf_tgt',
96           spdk_ping_interval_in_seconds: 2,
97           spdk_protocol_log_level: 'WARNING',
98           spdk_timeout: 60,
99           state_update_interval_sec: 5,
100           state_update_notify: true,
101           subsystem_cache_expiration: 5,
102           tgt_path: '/usr/local/bin/nvmf_tgt',
103           transport_tcp_options: {
104             in_capsule_data_size: 8192,
105             max_io_qpairs_per_ctrlr: 7
106           },
107           transports: 'tcp',
108           verbose_log_messages: true,
109           verify_keys: true,
110           verify_listener_ip: true,
111           verify_nqns: true
112         },
113         status: {
114           size: 1,
115           running: 1,
116           last_refresh: new Date('2025-12-01T16:50:21.122930Z'),
117           created: new Date('2025-10-16T16:35:09.623842Z'),
118           ports: [5500, 4420, 8009, 10008],
119           container_image_id: 'image_id_1',
120           container_image_name: 'image_name_1'
121         },
122         events: [
123           {
124             created: '2025-10-16T16:35:59.879726Z',
125             subject: 'service:nvmeof.rbd.default',
126             level: 'INFO',
127             message: 'service was created'
128           }
129         ],
130         name: 'default',
131         gatewayCount: {
132           running: 1,
133           error: 0
134         },
135         subSystemCount: 0,
136         nodeCount: 0,
137         unmanaged: true
138       },
139       {
140         service_type: 'nvmeof',
141         service_id: 'rbd.foo',
142         service_name: 'nvmeof.rbd.foo',
143         placement: {
144           hosts: ['ceph-node-01', 'ceph-node-02', 'ceph-node-03']
145         },
146         spec: {
147           abort_discovery_on_errors: true,
148           abort_on_errors: true,
149           allowed_consecutive_spdk_ping_failures: 1,
150           break_update_interval_sec: 25,
151           cluster_connections: 32,
152           conn_retries: 10,
153           discovery_port: 8009,
154           enable_monitor_client: true,
155           enable_prometheus_exporter: true,
156           group: 'foo',
157           log_directory: '/var/log/ceph/',
158           log_files_enabled: true,
159           log_files_rotation_enabled: true,
160           log_level: 'INFO',
161           max_gws_in_grp: 16,
162           max_hosts: 2048,
163           max_hosts_per_namespace: 16,
164           max_hosts_per_subsystem: 128,
165           max_log_directory_backups: 10,
166           max_log_file_size_in_mb: 10,
167           max_log_files_count: 20,
168           max_namespaces: 4096,
169           max_namespaces_per_subsystem: 512,
170           max_namespaces_with_netmask: 1000,
171           max_ns_to_change_lb_grp: 8,
172           max_subsystems: 128,
173           monitor_timeout: 1,
174           notifications_interval: 60,
175           omap_file_lock_duration: 20,
176           omap_file_lock_on_read: true,
177           omap_file_lock_retries: 30,
178           omap_file_lock_retry_sleep_interval: 1,
179           omap_file_update_attempts: 500,
180           omap_file_update_reloads: 10,
181           pool: 'rbd',
182           port: 5500,
183           prometheus_connection_list_cache_expiration: 60,
184           prometheus_cycles_to_adjust_speed: 3,
185           prometheus_frequency_slow_down_factor: 3,
186           prometheus_port: 10008,
187           prometheus_startup_delay: 240,
188           prometheus_stats_interval: 10,
189           rebalance_period_sec: 7,
190           rpc_socket_dir: '/var/tmp/',
191           rpc_socket_name: 'spdk.sock',
192           spdk_path: '/usr/local/bin/nvmf_tgt',
193           spdk_ping_interval_in_seconds: 2,
194           spdk_protocol_log_level: 'WARNING',
195           spdk_timeout: 60,
196           state_update_interval_sec: 5,
197           state_update_notify: true,
198           subsystem_cache_expiration: 5,
199           tgt_path: '/usr/local/bin/nvmf_tgt',
200           transport_tcp_options: {
201             in_capsule_data_size: 8192,
202             max_io_qpairs_per_ctrlr: 7
203           },
204           transports: 'tcp',
205           verbose_log_messages: true,
206           verify_keys: true,
207           verify_listener_ip: true,
208           verify_nqns: true
209         },
210         status: {
211           size: 3,
212           running: 2,
213           last_refresh: new Date('2025-12-01T16:44:42.361882Z'),
214           created: new Date('2025-11-11T12:55:32.770910Z'),
215           ports: [5500, 4420, 8009, 10008],
216           container_image_id: 'image_id_2',
217           container_image_name: 'image_name_2'
218         },
219         events: [
220           {
221             created: '2025-11-11T12:56:42.509108Z',
222             subject: 'service:nvmeof.rbd.foo',
223             level: 'INFO',
224             message: 'service was created'
225           }
226         ],
227         name: 'foo',
228         gatewayCount: {
229           running: 2,
230           error: 1
231         },
232         subSystemCount: 0,
233         nodeCount: 3,
234         unmanaged: true
235       }
236     ];
237
238     component.gatewayGroup$ = of(mockData as any);
239
240     component.gatewayGroup$.subscribe((data) => {
241       expect(data).toEqual(mockData);
242       done();
243     });
244   });
245 });