3434import static org .mockito .Mockito .when ;
3535
3636import java .io .File ;
37- import java .io .IOException ;
38- import java .lang .reflect .Field ;
39- import java .lang .reflect .Modifier ;
4037import java .nio .file .Files ;
4138import java .nio .file .Path ;
4239import java .nio .file .Paths ;
4542
4643import org .apache .cloudstack .storage .datastore .db .TemplateDataStoreVO ;
4744import org .apache .cloudstack .utils .security .DigestHelper ;
45+ import org .apache .commons .lang3 .StringUtils ;
4846import org .junit .Test ;
4947import org .junit .runner .RunWith ;
5048import org .mockito .InjectMocks ;
@@ -78,48 +76,41 @@ public class SystemVmTemplateRegistrationTest {
7876 @ InjectMocks
7977 SystemVmTemplateRegistration systemVmTemplateRegistration = new SystemVmTemplateRegistration ();
8078
81- private void setupMetadataFile (boolean create ) {
79+ private void setupMetadataFile (MockedStatic < SystemVmTemplateRegistration > mockedStatic , String content ) {
8280 try {
8381 String location = "metadata.ini" ;
84- if (create ) {
82+ if (StringUtils . isNotBlank ( content ) ) {
8583 File tempFile = File .createTempFile ("metadata" , ".ini" );
8684 location = tempFile .getAbsolutePath ();
85+ Files .write (Paths .get (location ), content .getBytes ());
86+ tempFile .deleteOnExit ();
8787 }
88- Field field = SystemVmTemplateRegistration .class .getDeclaredField ("METADATA_FILE" );
89- Field modifiersField = Field .class .getDeclaredField ("modifiers" );
90- modifiersField .setAccessible (true );
91- modifiersField .setInt (field , field .getModifiers () & ~Modifier .FINAL );
92- field .setAccessible (true );
93- field .set (null , location );
88+ mockedStatic .when (SystemVmTemplateRegistration ::getMetadataFilePath ).thenReturn (location );
9489 } catch (Exception e ) {
9590 fail (e .getMessage ());
9691 }
9792 }
9893
99- private void updateMetadataContent (String content ) {
100- try {
101- Files .write (Paths .get (SystemVmTemplateRegistration .METADATA_FILE ), content .getBytes ());
102- } catch (IOException e ) {
103- fail (e .getMessage ());
104- }
105- }
106-
10794 @ Test
10895 public void test_parseMetadataFile_noFile () {
109- setupMetadataFile (false );
110- CloudRuntimeException exception = assertThrows (CloudRuntimeException .class ,
111- SystemVmTemplateRegistration ::parseMetadataFile );
112- assertTrue (exception .getMessage ().contains ("Failed to parse systemVM template metadata file" ));
96+ try (MockedStatic <SystemVmTemplateRegistration > mockedStatic =
97+ Mockito .mockStatic (SystemVmTemplateRegistration .class , Mockito .CALLS_REAL_METHODS )) {
98+ setupMetadataFile (mockedStatic , null );
99+ CloudRuntimeException exception = assertThrows (CloudRuntimeException .class ,
100+ SystemVmTemplateRegistration ::parseMetadataFile );
101+ assertTrue (exception .getMessage ().contains ("Failed to parse systemVM template metadata file" ));
102+ }
113103 }
114104
115105 @ Test
116106 public void test_parseMetadataFile_invalidContent () {
117- setupMetadataFile (true );
118- String metadataFileContent = "abc" ;
119- updateMetadataContent (metadataFileContent );
120- CloudRuntimeException exception = assertThrows (CloudRuntimeException .class ,
121- SystemVmTemplateRegistration ::parseMetadataFile );
122- assertTrue (exception .getMessage ().contains ("Failed to parse systemVM template metadata file" ));
107+ try (MockedStatic <SystemVmTemplateRegistration > mockedStatic =
108+ Mockito .mockStatic (SystemVmTemplateRegistration .class , Mockito .CALLS_REAL_METHODS )) {
109+ setupMetadataFile (mockedStatic , "abc" );
110+ CloudRuntimeException exception = assertThrows (CloudRuntimeException .class ,
111+ SystemVmTemplateRegistration ::parseMetadataFile );
112+ assertTrue (exception .getMessage ().contains ("Failed to parse systemVM template metadata file" ));
113+ }
123114 }
124115
125116 @ Test
@@ -144,10 +135,12 @@ public void test_parseMetadataFile_success() {
144135 "checksum = abc3\n " +
145136 "downloadurl = https://download.cloudstack.org/systemvm/x.y/systemvmtemplate-x.y.z-vmware.ova\n " +
146137 "filename = systemvmtemplate-x.y.z-vmware.ova\n " ;
147- setupMetadataFile (true );
148- updateMetadataContent (metadataFileContent );
149- String version = SystemVmTemplateRegistration .parseMetadataFile ();
150- assertEquals ("x.y.z.0" , version );
138+ try (MockedStatic <SystemVmTemplateRegistration > mockedStatic =
139+ Mockito .mockStatic (SystemVmTemplateRegistration .class , Mockito .CALLS_REAL_METHODS )) {
140+ setupMetadataFile (mockedStatic , metadataFileContent );
141+ String version = SystemVmTemplateRegistration .parseMetadataFile ();
142+ assertEquals ("x.y.z.0" , version );
143+ }
151144 assertNull (SystemVmTemplateRegistration .NewTemplateMap .get ("xenserver" ));
152145 SystemVmTemplateRegistration .MetadataTemplateDetails templateDetails =
153146 SystemVmTemplateRegistration .NewTemplateMap .get ("kvm-x86_64" );
0 commit comments