Skip to content

Commit 8c8a56a

Browse files
committed
fix tests
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent 6b374a6 commit 8c8a56a

File tree

2 files changed

+36
-37
lines changed

2 files changed

+36
-37
lines changed

engine/schema/src/main/java/com/cloud/upgrade/SystemVmTemplateRegistration.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public class SystemVmTemplateRegistration {
9797
private static final String ABSOLUTE_TEMPLATE_PATH = "/usr/share/cloudstack-management/templates/systemvm/";
9898
private static final String TEMPLATES_PATH = fetchTemplatesPath();
9999
private static final String METADATA_FILE_NAME = "metadata.ini";
100-
protected static final String METADATA_FILE = TEMPLATES_PATH + METADATA_FILE_NAME;
100+
private static final String METADATA_FILE = TEMPLATES_PATH + METADATA_FILE_NAME;
101101
public static final String TEMPORARY_SECONDARY_STORE = "tmp";
102102
private static final String PARTIAL_TEMPLATE_FOLDER = String.format("/template/tmpl/%d/", Account.ACCOUNT_ID_SYSTEM);
103103
private static final String storageScriptsDir = "scripts/storage/secondary";
@@ -774,16 +774,21 @@ public void validateAndRegisterTemplateForNonExistingEntries(Hypervisor.Hypervis
774774
registerTemplateForNonExistingEntries(hypervisor, arch, name, storeUrlAndId, filePath);
775775
}
776776

777+
protected static String getMetadataFilePath() {
778+
return METADATA_FILE;
779+
}
780+
777781
/**
778782
* This method parses the metadata file consisting of the systemVM templates information
779783
* @return the version of the systemvm template that is to be used. This is done in order
780784
* to fallback on the latest available version of the systemVM template when there doesn't
781785
* exist a template corresponding to the current code version.
782786
*/
783787
public static String parseMetadataFile() {
784-
String errMsg = String.format("Failed to parse systemVM template metadata file: %s", METADATA_FILE);
788+
String metadataFilePath = getMetadataFilePath();
789+
String errMsg = String.format("Failed to parse systemVM template metadata file: %s", metadataFilePath);
785790
final Ini ini = new Ini();
786-
try (FileReader reader = new FileReader(METADATA_FILE)) {
791+
try (FileReader reader = new FileReader(metadataFilePath)) {
787792
ini.load(reader);
788793
} catch (IOException e) {
789794
LOGGER.error(errMsg, e);
@@ -798,7 +803,8 @@ public static String parseMetadataFile() {
798803
String key = getHypervisorArchKey(hypervisorType.first(), hypervisorType.second());
799804
Ini.Section section = ini.get(key);
800805
if (section == null) {
801-
LOGGER.error("Failed to find details for {} in template metadata file: {}", key, METADATA_FILE);
806+
LOGGER.error("Failed to find details for {} in template metadata file: {}",
807+
key, metadataFilePath);
802808
continue;
803809
}
804810
NewTemplateMap.put(key, new MetadataTemplateDetails(

engine/schema/src/test/java/com/cloud/upgrade/SystemVmTemplateRegistrationTest.java

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@
3434
import static org.mockito.Mockito.when;
3535

3636
import java.io.File;
37-
import java.io.IOException;
38-
import java.lang.reflect.Field;
39-
import java.lang.reflect.Modifier;
4037
import java.nio.file.Files;
4138
import java.nio.file.Path;
4239
import java.nio.file.Paths;
@@ -45,6 +42,7 @@
4542

4643
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
4744
import org.apache.cloudstack.utils.security.DigestHelper;
45+
import org.apache.commons.lang3.StringUtils;
4846
import org.junit.Test;
4947
import org.junit.runner.RunWith;
5048
import 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

Comments
 (0)