@@ -20,7 +20,7 @@ import { resolve } from 'node:path';
20
20
import * as macadamJSPackage from '@crc-org/macadam.js' ;
21
21
import * as extensionApi from '@podman-desktop/api' ;
22
22
import { vol } from 'memfs' ;
23
- import { assert , beforeEach , describe , expect , test , vi } from 'vitest' ;
23
+ import { afterEach , assert , beforeEach , describe , expect , test , vi } from 'vitest' ;
24
24
25
25
import * as authentication from './authentication' ;
26
26
import { ImageCache } from './cache' ;
@@ -48,6 +48,7 @@ vi.mock('@crc-org/macadam.js', async () => {
48
48
Macadam . prototype . startVm = vi . fn ( ) ;
49
49
Macadam . prototype . stopVm = vi . fn ( ) ;
50
50
Macadam . prototype . removeVm = vi . fn ( ) ;
51
+ Macadam . prototype . executeCommand = vi . fn ( ) ;
51
52
return { Macadam } ;
52
53
} ) ;
53
54
vi . mock ( './macadam-machine-stream.js' , async ( ) => {
@@ -137,6 +138,7 @@ describe('activate', () => {
137
138
) ;
138
139
await create ( {
139
140
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
141
+ 'rhel-vms.factory.machine.register' : false ,
140
142
} ) ;
141
143
expect ( utils . pullImageFromRedHatRegistry ) . toHaveBeenCalled ( ) ;
142
144
} ) ;
@@ -148,6 +150,7 @@ describe('activate', () => {
148
150
await create ( {
149
151
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
150
152
'rhel-vms.factory.machine.force-download' : true ,
153
+ 'rhel-vms.factory.machine.register' : false ,
151
154
} ) ;
152
155
vol . fromJSON ( {
153
156
'/path/to/storage/images/rhel10' : '' ,
@@ -165,6 +168,7 @@ describe('activate', () => {
165
168
} ) ;
166
169
await create ( {
167
170
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
171
+ 'rhel-vms.factory.machine.register' : false ,
168
172
} ) ;
169
173
expect ( utils . pullImageFromRedHatRegistry ) . not . toHaveBeenCalled ( ) ;
170
174
} ) ;
@@ -176,6 +180,7 @@ describe('activate', () => {
176
180
await create ( {
177
181
'rhel-vms.factory.machine.name' : 'name1' ,
178
182
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
183
+ 'rhel-vms.factory.machine.register' : false ,
179
184
} ) ;
180
185
expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
181
186
containerProvider : 'applehv' ,
@@ -191,6 +196,7 @@ describe('activate', () => {
191
196
'rhel-vms.factory.machine.image' : 'local image on disk' ,
192
197
'rhel-vms.factory.machine.name' : 'name1' ,
193
198
'rhel-vms.factory.machine.image-path' : resolve ( '/' , 'path' , 'to' , 'provided' , 'image' ) ,
199
+ 'rhel-vms.factory.machine.register' : false ,
194
200
} ) ;
195
201
expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
196
202
containerProvider : 'applehv' ,
@@ -221,6 +227,7 @@ describe('activate', () => {
221
227
) ;
222
228
await create ( {
223
229
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
230
+ 'rhel-vms.factory.machine.register' : false ,
224
231
} ) ;
225
232
expect ( utils . pullImageFromRedHatRegistry ) . toHaveBeenCalled ( ) ;
226
233
} ) ;
@@ -234,6 +241,7 @@ describe('activate', () => {
234
241
} ) ;
235
242
await create ( {
236
243
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
244
+ 'rhel-vms.factory.machine.register' : false ,
237
245
} ) ;
238
246
expect ( utils . pullImageFromRedHatRegistry ) . not . toHaveBeenCalled ( ) ;
239
247
} ) ;
@@ -245,6 +253,7 @@ describe('activate', () => {
245
253
await create ( {
246
254
'rhel-vms.factory.machine.name' : 'name1' ,
247
255
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
256
+ 'rhel-vms.factory.machine.register' : false ,
248
257
} ) ;
249
258
expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
250
259
containerProvider : 'wsl' ,
@@ -260,6 +269,7 @@ describe('activate', () => {
260
269
'rhel-vms.factory.machine.image' : 'local image on disk' ,
261
270
'rhel-vms.factory.machine.name' : 'name1' ,
262
271
'rhel-vms.factory.machine.image-path' : resolve ( '/' , 'path' , 'to' , 'provided' , 'image' ) ,
272
+ 'rhel-vms.factory.machine.register' : false ,
263
273
} ) ;
264
274
expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
265
275
containerProvider : 'wsl' ,
@@ -288,6 +298,7 @@ describe('activate', () => {
288
298
await expect (
289
299
create ( {
290
300
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
301
+ 'rhel-vms.factory.machine.register' : false ,
291
302
} ) ,
292
303
) . rejects . toThrowError ( 'provider hyperv is not supported' ) ;
293
304
} ) ;
@@ -304,6 +315,7 @@ describe('activate', () => {
304
315
await expect (
305
316
create ( {
306
317
'rhel-vms.factory.machine.image' : 'RHEL 10' ,
318
+ 'rhel-vms.factory.machine.register' : false ,
307
319
} ) ,
308
320
) . rejects . toThrowError ( 'an init error' ) ;
309
321
} ) ;
@@ -517,3 +529,104 @@ bla bla
517
529
} ) ;
518
530
} ) ;
519
531
} ) ;
532
+
533
+ describe ( 'register' , ( ) => {
534
+ let create : (
535
+ params : {
536
+ [ key : string ] : unknown ;
537
+ } ,
538
+ logger ?: extensionApi . Logger ,
539
+ token ?: extensionApi . CancellationToken ,
540
+ ) => Promise < void > ;
541
+
542
+ const extensionContext : extensionApi . ExtensionContext = {
543
+ subscriptions : {
544
+ push : vi . fn ( ) ,
545
+ } ,
546
+ storagePath : resolve ( '/' , 'path' , 'to' , 'storage' ) ,
547
+ } as unknown as extensionApi . ExtensionContext ;
548
+
549
+ const provider : extensionApi . Provider = {
550
+ setVmProviderConnectionFactory : vi . fn ( ) ,
551
+ registerVmProviderConnection : vi . fn ( ) ,
552
+ updateStatus : vi . fn ( ) ,
553
+ } as unknown as extensionApi . Provider ;
554
+
555
+ const authClient : SubscriptionManagerClientV1 = {
556
+ images : {
557
+ downloadImageUsingSha : vi . fn ( ) ,
558
+ } ,
559
+ } as unknown as SubscriptionManagerClientV1 ;
560
+
561
+ beforeEach ( async ( ) => {
562
+ vi . useFakeTimers ( ) ;
563
+ vi . mocked ( extensionApi . provider . createProvider ) . mockReturnValue ( provider ) ;
564
+
565
+ vi . mocked ( extensionApi . env ) . isMac = true ;
566
+ vi . mocked ( extensionApi . env ) . isWindows = false ;
567
+ vi . mocked ( authentication . initAuthentication ) . mockResolvedValue ( authClient ) ;
568
+
569
+ await activate ( extensionContext ) ;
570
+ expect ( provider . setVmProviderConnectionFactory ) . toHaveBeenCalledOnce ( ) ;
571
+ const call = vi . mocked ( provider . setVmProviderConnectionFactory ) . mock . calls [ 0 ] ;
572
+ assert ( ! ! call [ 0 ] . create ) ;
573
+ create = call [ 0 ] . create ;
574
+ } ) ;
575
+
576
+ afterEach ( ( ) => {
577
+ vi . useRealTimers ( ) ;
578
+ } ) ;
579
+
580
+ test ( 'register is true and machine is started and registered' , async ( ) => {
581
+ const authClient : SubscriptionManagerClientV1 = {
582
+ getOrganizationId : vi . fn ( ) . mockReturnValue ( '123456' ) ,
583
+ } as unknown as SubscriptionManagerClientV1 ;
584
+ vi . mocked ( authentication . initAuthentication ) . mockResolvedValue ( authClient ) ;
585
+ vi . mocked ( macadamJSPackage . Macadam . prototype . listVms ) . mockResolvedValue ( [
586
+ {
587
+ Name : 'name1' ,
588
+ Image : '/path/to/image1' ,
589
+ CPUs : 1 ,
590
+ Memory : '1GB' ,
591
+ DiskSize : '1GB' ,
592
+ Running : true ,
593
+ Starting : true ,
594
+ Port : 80 ,
595
+ RemoteUsername : 'user' ,
596
+ IdentityPath : '/path/to/id1' ,
597
+ VMType : 'applehv' ,
598
+ } ,
599
+ ] ) ;
600
+ vi . mocked ( macadamJSPackage . Macadam . prototype . executeCommand ) . mockResolvedValue ( {
601
+ stdout : 'done' ,
602
+ } as extensionApi . RunResult ) ;
603
+ const createPromise = create ( {
604
+ 'rhel-vms.factory.machine.name' : 'name1' ,
605
+ 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
606
+ 'rhel-vms.factory.machine.register' : true ,
607
+ } ) ;
608
+ vi . mocked ( macadamJSPackage . Macadam . prototype . listVms ) . mockResolvedValue ( [
609
+ {
610
+ Name : 'name1' ,
611
+ Image : '/path/to/image1' ,
612
+ CPUs : 1 ,
613
+ Memory : '1GB' ,
614
+ DiskSize : '1GB' ,
615
+ Running : true ,
616
+ Starting : false ,
617
+ Port : 80 ,
618
+ RemoteUsername : 'user' ,
619
+ IdentityPath : '/path/to/id1' ,
620
+ VMType : 'applehv' ,
621
+ } ,
622
+ ] ) ;
623
+ vi . advanceTimersToNextTimer ( ) ;
624
+ await createPromise ;
625
+ expect ( macadamJSPackage . Macadam . prototype . executeCommand ) . toHaveBeenCalledWith ( {
626
+ name : 'name1' ,
627
+ command : 'sudo' ,
628
+ args : [ 'subscription-manager' , 'register' , '--force' , '--activationkey' , 'podman-desktop' , '--org' , '123456' ] ,
629
+ runOptions : { } ,
630
+ } ) ;
631
+ } ) ;
632
+ } ) ;
0 commit comments