diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 26167724f07..7fe648a39fd 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -22,6 +22,7 @@ This PR... - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] Enhancement (improves an existing feature and functionality) - [ ] Cleanup (Code refactoring and cleanup, that may add test cases) +- [ ] build/CI ### Feature/Enhancement Scale or Bug Severity diff --git a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java index 13c594f9367..192c556bd2a 100644 --- a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java +++ b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java @@ -149,7 +149,7 @@ public class ConfigKey { public ConfigKey(Class type, String name, String category, String defaultValue, String description, boolean isDynamic, Scope scope, T multiplier, String displayText, String parent, Ternary group, Pair subGroup) { - this(type, name, category, defaultValue, description, isDynamic, scope, multiplier, null, parent, null, null, null, null); + this(type, name, category, defaultValue, description, isDynamic, scope, multiplier, displayText, parent, group, subGroup, null, null); } public ConfigKey(Class type, String name, String category, String defaultValue, String description, boolean isDynamic, Scope scope, T multiplier, diff --git a/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java b/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java index 46490335bf5..54e30ebed95 100644 --- a/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java +++ b/framework/config/src/test/java/org/apache/cloudstack/framework/config/impl/ConfigDepotAdminTest.java @@ -98,6 +98,8 @@ public class ConfigDepotAdminTest extends TestCase { ConfigurationVO staticIntCV = new ConfigurationVO("UnitTestComponent", StaticIntCK); dynamicIntCV.setValue("200"); ConfigurationVO testCV = new ConfigurationVO("UnitTestComponent", TestCK); + ConfigurationGroupVO groupVO = new ConfigurationGroupVO(); + ConfigurationSubGroupVO subGroupVO = new ConfigurationSubGroupVO(); when(_configurable.getConfigComponentName()).thenReturn("UnitTestComponent"); when(_configurable.getConfigKeys()).thenReturn(new ConfigKey[] {DynamicIntCK, StaticIntCK, TestCK}); @@ -105,6 +107,8 @@ public class ConfigDepotAdminTest extends TestCase { when(_configDao.findById(DynamicIntCK.key())).thenReturn(dynamicIntCV); when(_configDao.findById(TestCK.key())).thenReturn(testCV); when(_configDao.persist(any(ConfigurationVO.class))).thenReturn(dynamicIntCV); + when(_configGroupDao.persist(any(ConfigurationGroupVO.class))).thenReturn(groupVO); + when(_configSubGroupDao.persist(any(ConfigurationSubGroupVO.class))).thenReturn(subGroupVO); _depotAdmin.populateConfigurations(); // This is once because DynamicIntCK is returned. diff --git a/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java b/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java index e738f1e99ef..beee1b608d0 100644 --- a/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java +++ b/framework/db/src/main/java/com/cloud/dao/EntityManagerImpl.java @@ -86,7 +86,7 @@ public class EntityManagerImpl extends ManagerBase implements EntityManager { public GenericSearchBuilder createGenericSearchBuilder(Class entityType, Class resultType) { GenericDao dao = (GenericDao)GenericDaoBase.getDao(entityType); - return dao.createSearchBuilder((Class)resultType.getClass()); + return dao.createSearchBuilder((Class)resultType); } @Override diff --git a/framework/db/src/main/java/com/cloud/utils/db/DbUtil.java b/framework/db/src/main/java/com/cloud/utils/db/DbUtil.java index 86a61bc69c5..68424bc5dd9 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/DbUtil.java +++ b/framework/db/src/main/java/com/cloud/utils/db/DbUtil.java @@ -124,7 +124,7 @@ public class DbUtil { public static Field findField(Class clazz, String columnName) { for (Field field : clazz.getDeclaredFields()) { if (field.getAnnotation(Embedded.class) != null || field.getAnnotation(EmbeddedId.class) != null) { - findField(field.getClass(), columnName); + findField(field.getType(), columnName); } else { if (columnName.equals(DbUtil.getColumnName(field))) { return field; @@ -170,7 +170,7 @@ public class DbUtil { } if (field.getAnnotation(EmbeddedId.class) != null) { - assert (field.getClass().getAnnotation(Embeddable.class) != null) : "Class " + field.getClass().getName() + " must be Embeddable to be used as Embedded Id"; + assert (field.getType().getAnnotation(Embeddable.class) != null) : "Class " + field.getType().getName() + " must be Embeddable to be used as Embedded Id"; return true; } diff --git a/framework/db/src/main/java/com/cloud/utils/db/DriverLoader.java b/framework/db/src/main/java/com/cloud/utils/db/DriverLoader.java index 14bd286aab2..34af85fbcbd 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/DriverLoader.java +++ b/framework/db/src/main/java/com/cloud/utils/db/DriverLoader.java @@ -16,6 +16,8 @@ // under the License. package com.cloud.utils.db; +import java.lang.reflect.InvocationTargetException; +import java.sql.Driver; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -56,12 +58,13 @@ public class DriverLoader { } try { - Class.forName(driverClass).newInstance(); + Class klazz = (Class) Class.forName(driverClass); + klazz.getDeclaredConstructor().newInstance(); LOADED_DRIVERS.add(dbDriver); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Successfully loaded DB driver " + driverClass); } - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { LOGGER.error("Failed to load DB driver " + driverClass); throw new CloudRuntimeException("Failed to load DB driver " + driverClass, e); } diff --git a/framework/db/src/main/java/com/cloud/utils/db/EcInfo.java b/framework/db/src/main/java/com/cloud/utils/db/EcInfo.java index 4e266f68e29..dcda5bc33d5 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/EcInfo.java +++ b/framework/db/src/main/java/com/cloud/utils/db/EcInfo.java @@ -57,10 +57,10 @@ public class EcInfo { rawClass = HashSet.class; } else if (List.class == rawClazz) { rawClass = ArrayList.class; - } else if (Collection.class == Collection.class) { + } else if (Collection.class == rawClazz) { rawClass = ArrayList.class; } else { - assert (false) : " We don't know how to create this calss " + rawType.toString() + " for " + attr.field.getName(); + assert (false) : " We don't know how to create this class " + rawType.toString() + " for " + attr.field.getName(); } } catch (NoSuchMethodException e) { throw new CloudRuntimeException("Write your own support for " + rawClazz + " defined by " + attr.field.getName()); diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java index 332ab0ef4b3..a5ed004c30e 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java +++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java @@ -874,7 +874,8 @@ public abstract class GenericDaoBase extends Compone if (_idField.getAnnotation(EmbeddedId.class) == null) { sql.append(_table).append(".").append(DbUtil.getColumnName(_idField, null)).append(" = ? "); } else { - final Class clazz = _idField.getClass(); + s_logger.debug(String.format("field type vs declarator : %s vs %s", _idField.getType(), _idField.getDeclaringClass())); + final Class clazz = _idField.getType(); final AttributeOverride[] overrides = DbUtil.getAttributeOverrides(_idField); for (final Field field : clazz.getDeclaredFields()) { sql.append(_table).append(".").append(DbUtil.getColumnName(field, overrides)).append(" = ? AND "); diff --git a/utils/src/main/java/com/cloud/utils/SerialVersionUID.java b/utils/src/main/java/com/cloud/utils/SerialVersionUID.java index 306a6781f22..30844953e1a 100644 --- a/utils/src/main/java/com/cloud/utils/SerialVersionUID.java +++ b/utils/src/main/java/com/cloud/utils/SerialVersionUID.java @@ -23,7 +23,7 @@ package com.cloud.utils; * purposes. This is purely on an honor system though. You should always **/ public interface SerialVersionUID { - public static final long Base = 0x564D4F70 << 32; // 100 brownie points if you guess what this is and tell me. + public static final long Base = 0x564D4F70L << 32; // 100 brownie points if you guess what this is and tell me. public static final long UUID = Base | 0x1; public static final long CloudRuntimeException = Base | 0x2; diff --git a/utils/src/main/java/com/cloud/utils/events/SubscriptionMgr.java b/utils/src/main/java/com/cloud/utils/events/SubscriptionMgr.java index 254c27d2129..ae129b229aa 100644 --- a/utils/src/main/java/com/cloud/utils/events/SubscriptionMgr.java +++ b/utils/src/main/java/com/cloud/utils/events/SubscriptionMgr.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import org.apache.log4j.Logger; @@ -160,5 +161,10 @@ public class SubscriptionMgr { } return false; } + + @Override + public int hashCode() { + return Objects.hash(this.clazz, this.subscriber, this.methodName, this.method); + } } } diff --git a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java index 4a6c5df4fd0..defb440c2a5 100644 --- a/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java +++ b/utils/src/test/java/com/cloud/utils/net/NetUtilsTest.java @@ -716,6 +716,7 @@ public class NetUtilsTest { NetUtils.isIpv4("2001:db8:300::/64"); } + @Test public void testAllIpsOfDefaultNic() { final String defaultHostIp = NetUtils.getDefaultHostIp(); if (defaultHostIp != null) { diff --git a/utils/src/test/java/org/apache/cloudstack/utils/redfish/RedfishClientTest.java b/utils/src/test/java/org/apache/cloudstack/utils/redfish/RedfishClientTest.java index 674700bd412..58dfbceb66a 100644 --- a/utils/src/test/java/org/apache/cloudstack/utils/redfish/RedfishClientTest.java +++ b/utils/src/test/java/org/apache/cloudstack/utils/redfish/RedfishClientTest.java @@ -87,7 +87,7 @@ public class RedfishClientTest { public void buildRequestUrlTestHttpsGetSystemId() { RedfishClient redfishclient = new RedfishClient(USERNAME, PASSWORD, true, false, REDFISHT_REQUEST_RETRIES); String result = redfishclient.buildRequestUrl(oobAddress, RedfishClient.RedfishCmdType.GetSystemId, systemId); - String expected = String.format("https://%s/redfish/v1/Systems/", oobAddress, systemId); + String expected = String.format("https://%s/redfish/v1/Systems/", oobAddress); Assert.assertEquals(expected, result); } @@ -95,7 +95,7 @@ public class RedfishClientTest { public void buildRequestUrlTestGetSystemId() { RedfishClient redfishclient = new RedfishClient(USERNAME, PASSWORD, false, false, REDFISHT_REQUEST_RETRIES); String result = redfishclient.buildRequestUrl(oobAddress, RedfishClient.RedfishCmdType.GetSystemId, systemId); - String expected = String.format("http://%s/redfish/v1/Systems/", oobAddress, systemId); + String expected = String.format("http://%s/redfish/v1/Systems/", oobAddress); Assert.assertEquals(expected, result); }