@@ -20,7 +20,7 @@ import { resolve } from 'node:path';
2020import * as macadamJSPackage from '@crc-org/macadam.js' ;
2121import * as extensionApi from '@podman-desktop/api' ;
2222import { vol } from 'memfs' ;
23- import { assert , beforeEach , describe , expect , test , vi } from 'vitest' ;
23+ import { afterEach , assert , beforeEach , describe , expect , test , vi } from 'vitest' ;
2424
2525import * as authentication from './authentication' ;
2626import { ImageCache } from './cache' ;
@@ -48,6 +48,7 @@ vi.mock('@crc-org/macadam.js', async () => {
4848 Macadam . prototype . startVm = vi . fn ( ) ;
4949 Macadam . prototype . stopVm = vi . fn ( ) ;
5050 Macadam . prototype . removeVm = vi . fn ( ) ;
51+ Macadam . prototype . executeCommand = vi . fn ( ) ;
5152 return { Macadam } ;
5253} ) ;
5354vi . mock ( './macadam-machine-stream.js' , async ( ) => {
@@ -137,6 +138,7 @@ describe('activate', () => {
137138 ) ;
138139 await create ( {
139140 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
141+ 'rhel-vms.factory.machine.register' : false ,
140142 } ) ;
141143 expect ( utils . pullImageFromRedHatRegistry ) . toHaveBeenCalled ( ) ;
142144 } ) ;
@@ -148,6 +150,7 @@ describe('activate', () => {
148150 await create ( {
149151 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
150152 'rhel-vms.factory.machine.force-download' : true ,
153+ 'rhel-vms.factory.machine.register' : false ,
151154 } ) ;
152155 vol . fromJSON ( {
153156 '/path/to/storage/images/rhel10' : '' ,
@@ -165,6 +168,7 @@ describe('activate', () => {
165168 } ) ;
166169 await create ( {
167170 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
171+ 'rhel-vms.factory.machine.register' : false ,
168172 } ) ;
169173 expect ( utils . pullImageFromRedHatRegistry ) . not . toHaveBeenCalled ( ) ;
170174 } ) ;
@@ -176,6 +180,7 @@ describe('activate', () => {
176180 await create ( {
177181 'rhel-vms.factory.machine.name' : 'name1' ,
178182 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
183+ 'rhel-vms.factory.machine.register' : false ,
179184 } ) ;
180185 expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
181186 containerProvider : 'applehv' ,
@@ -191,6 +196,7 @@ describe('activate', () => {
191196 'rhel-vms.factory.machine.image' : 'local image on disk' ,
192197 'rhel-vms.factory.machine.name' : 'name1' ,
193198 'rhel-vms.factory.machine.image-path' : resolve ( '/' , 'path' , 'to' , 'provided' , 'image' ) ,
199+ 'rhel-vms.factory.machine.register' : false ,
194200 } ) ;
195201 expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
196202 containerProvider : 'applehv' ,
@@ -221,6 +227,7 @@ describe('activate', () => {
221227 ) ;
222228 await create ( {
223229 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
230+ 'rhel-vms.factory.machine.register' : false ,
224231 } ) ;
225232 expect ( utils . pullImageFromRedHatRegistry ) . toHaveBeenCalled ( ) ;
226233 } ) ;
@@ -234,6 +241,7 @@ describe('activate', () => {
234241 } ) ;
235242 await create ( {
236243 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
244+ 'rhel-vms.factory.machine.register' : false ,
237245 } ) ;
238246 expect ( utils . pullImageFromRedHatRegistry ) . not . toHaveBeenCalled ( ) ;
239247 } ) ;
@@ -245,6 +253,7 @@ describe('activate', () => {
245253 await create ( {
246254 'rhel-vms.factory.machine.name' : 'name1' ,
247255 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
256+ 'rhel-vms.factory.machine.register' : false ,
248257 } ) ;
249258 expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
250259 containerProvider : 'wsl' ,
@@ -260,6 +269,7 @@ describe('activate', () => {
260269 'rhel-vms.factory.machine.image' : 'local image on disk' ,
261270 'rhel-vms.factory.machine.name' : 'name1' ,
262271 'rhel-vms.factory.machine.image-path' : resolve ( '/' , 'path' , 'to' , 'provided' , 'image' ) ,
272+ 'rhel-vms.factory.machine.register' : false ,
263273 } ) ;
264274 expect ( macadamJSPackage . Macadam . prototype . createVm ) . toHaveBeenCalledWith ( {
265275 containerProvider : 'wsl' ,
@@ -288,6 +298,7 @@ describe('activate', () => {
288298 await expect (
289299 create ( {
290300 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
301+ 'rhel-vms.factory.machine.register' : false ,
291302 } ) ,
292303 ) . rejects . toThrowError ( 'provider hyperv is not supported' ) ;
293304 } ) ;
@@ -304,6 +315,7 @@ describe('activate', () => {
304315 await expect (
305316 create ( {
306317 'rhel-vms.factory.machine.image' : 'RHEL 10' ,
318+ 'rhel-vms.factory.machine.register' : false ,
307319 } ) ,
308320 ) . rejects . toThrowError ( 'an init error' ) ;
309321 } ) ;
@@ -517,3 +529,104 @@ bla bla
517529 } ) ;
518530 } ) ;
519531} ) ;
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