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';
9 describe('NvmeofGatewayGroupComponent', () => {
10 let component: NvmeofGatewayGroupComponent;
11 let fixture: ComponentFixture<NvmeofGatewayGroupComponent>;
12 let nvmeofService: any;
14 beforeEach(async () => {
15 const nvmeofServiceSpy = {
16 listGatewayGroups: jest.fn().mockReturnValue(of([])),
17 listSubsystems: jest.fn().mockReturnValue(of([]))
20 await TestBed.configureTestingModule({
21 imports: [HttpClientModule, SharedModule, TabsModule, GridModule],
22 declarations: [NvmeofGatewayGroupComponent],
23 providers: [{ provide: NvmeofService, useValue: nvmeofServiceSpy }]
24 }).compileComponents();
26 fixture = TestBed.createComponent(NvmeofGatewayGroupComponent);
27 component = fixture.componentInstance;
28 nvmeofService = TestBed.inject(NvmeofService);
29 fixture.detectChanges();
32 it('should create the component', () => {
33 expect(component).toBeTruthy();
36 it('should call listGatewayGroups and getDaemons on initialization', () => {
37 expect(nvmeofService.listGatewayGroups).toHaveBeenCalled();
40 it('should populate gatewayGroup$ with the correct data', (done) => {
43 service_type: 'nvmeof',
44 service_id: 'rbd.default',
45 service_name: 'nvmeof.rbd.default',
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,
57 enable_monitor_client: true,
58 enable_prometheus_exporter: true,
60 log_directory: '/var/log/ceph/',
61 log_files_enabled: true,
62 log_files_rotation_enabled: true,
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,
72 max_namespaces_per_subsystem: 512,
73 max_namespaces_with_netmask: 1000,
74 max_ns_to_change_lb_grp: 8,
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,
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',
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
108 verbose_log_messages: true,
110 verify_listener_ip: true,
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'
124 created: '2025-10-16T16:35:59.879726Z',
125 subject: 'service:nvmeof.rbd.default',
127 message: 'service was created'
140 service_type: 'nvmeof',
141 service_id: 'rbd.foo',
142 service_name: 'nvmeof.rbd.foo',
144 hosts: ['ceph-node-01', 'ceph-node-02', 'ceph-node-03']
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,
153 discovery_port: 8009,
154 enable_monitor_client: true,
155 enable_prometheus_exporter: true,
157 log_directory: '/var/log/ceph/',
158 log_files_enabled: true,
159 log_files_rotation_enabled: true,
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,
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,
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',
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
205 verbose_log_messages: true,
207 verify_listener_ip: true,
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'
221 created: '2025-11-11T12:56:42.509108Z',
222 subject: 'service:nvmeof.rbd.foo',
224 message: 'service was created'
238 component.gatewayGroup$ = of(mockData as any);
240 component.gatewayGroup$.subscribe((data) => {
241 expect(data).toEqual(mockData);