modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/ConfigurationManager.java
| 15 +
modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunner.java
| 29 ++-
modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/ConfigurationManagerTest.java
| 49 +++++
modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunnerTest.java
| 87 +++++-----
4 files changed, 129 insertions(+), 51 deletions(-)
New commits:
commit 5479efd69802818f80c0fd27ee52a6a6cd555906
Author: John Sanda <john(a)localhost.localdomain>
Date: Wed Nov 25 12:46:47 2009 -0500
[US 6] Refactoring ConfigurationManager.updateResourceConfiguration() to support raw
config.
Adding an initial unit test for updateResourceConfiguration(). With this commit
should be able to handle updates for resources that support structured only via
the legacy API or raw only.
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/ConfigurationManager.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/ConfigurationManager.java
index dd38c78..2bda0c3 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/ConfigurationManager.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/ConfigurationManager.java
@@ -115,11 +115,9 @@ public class ConfigurationManager extends AgentService implements
ContainerServi
public void updateResourceConfiguration(ConfigurationUpdateRequest request) {
ConfigurationServerService configurationServerService =
getConfigurationServerService();
- ConfigManagement configMgmt = new LegacyConfigManagement();
- configMgmt.setComponentService(componentService);
-
try {
- ResourceType resourceType = getResourceType(request.getResourceId());
+ ConfigManagement configMgmt =
configMgmtFactory.getStrategy(request.getResourceId());
+ ResourceType resourceType =
componentService.getResourceType(request.getResourceId());
Runnable runnable = new
UpdateResourceConfigurationRunner(configurationServerService, resourceType,
configMgmt, request);
@@ -311,6 +309,15 @@ public class ConfigurationManager extends AgentService implements
ContainerServi
}
/**
+ * This setter is here to provide a test hook
+ *
+ * @param threadPool A fake object such as a mock
+ */
+ void setThreadPool(ScheduledExecutorService threadPool) {
+ this.threadPool = threadPool;
+ }
+
+ /**
* Given a resource ID, this obtains that resource's ConfigurationFacet
interface. If it does not support the
* configuration facet, an exception is thrown.
*
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunner.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunner.java
index 44bd6cd..eb4897b 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunner.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunner.java
@@ -80,6 +80,26 @@ public class UpdateResourceConfigurationRunner implements Runnable,
Callable<Con
this.request = request;
}
+ ConfigurationUpdateRequest getRequest() {
+ return request;
+ }
+
+ ConfigManagement getConfigMgmt() {
+ return configMgmt;
+ }
+
+ ResourceType getResourceType() {
+ return resourceType;
+ }
+
+ ConfigurationServerService getConfigurationServerService() {
+ return configurationServerService;
+ }
+
+ ConfigurationUtilityService getConfigUtilService() {
+ return configUtilService;
+ }
+
void setConfigUtilService(ConfigurationUtilityService service) {
configUtilService = service;
}
@@ -95,13 +115,8 @@ public class UpdateResourceConfigurationRunner implements Runnable,
Callable<Con
public ConfigurationUpdateResponse call() throws Exception {
ConfigurationUpdateResponse response;
int requestId = request.getConfigurationUpdateId();
-// ConfigurationUpdateReport report = new
ConfigurationUpdateReport(request.getConfiguration());
- ConfigurationUpdateReport report = null;
try {
-// configurationFacet.updateResourceConfiguration(report);
-// report = configMgmt.executeUpdate(request.getResourceId(),
request.getConfiguration());
response = new ConfigurationUpdateResponse(requestId,
request.getConfiguration(), SUCCESS, null);
-
try {
configMgmt.executeUpdate(request.getResourceId(),
request.getConfiguration());
} catch (UpdateInProgressException e) {
@@ -112,10 +127,6 @@ public class UpdateResourceConfigurationRunner implements Runnable,
Callable<Con
response.setErrorMessage(e.getMessage());
}
-// if (response.getStatus() == ConfigurationUpdateStatus.INPROGRESS) {
-// response.setErrorMessage("Configuration facet did not indicate
success or failure - assuming failure.");
-// }
-
ConfigurationDefinition configurationDefinition =
resourceType.getResourceConfigurationDefinition();
// Normalize and validate the config.
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/ConfigurationManagerTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/ConfigurationManagerTest.java
index 200ed40..9b0b910 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/ConfigurationManagerTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/ConfigurationManagerTest.java
@@ -27,17 +27,26 @@ import static org.testng.Assert.*;
import org.jmock.Expectations;
import org.rhq.core.clientapi.agent.PluginContainerException;
+import org.rhq.core.clientapi.agent.configuration.ConfigurationUpdateRequest;
+import org.rhq.core.clientapi.server.configuration.ConfigurationUpdateResponse;
+import org.rhq.core.clientapi.server.configuration.ConfigurationServerService;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.pc.util.ComponentService;
import org.rhq.core.pc.util.FacetLockType;
+import org.rhq.core.pc.PluginContainerConfiguration;
+import org.rhq.core.pc.ServerServices;
import org.rhq.core.pluginapi.configuration.ResourceConfigurationFacet;
+import org.rhq.test.jmock.PropertyMatcher;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import org.hamcrest.Matcher;
import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.Callable;
public class ConfigurationManagerTest extends ConfigManagementTest {
@@ -317,4 +326,44 @@ public class ConfigurationManagerTest extends ConfigManagementTest {
);
}
+ @Test
+ public void updatingConfigShouldSubmitRunnerToThreadPool() throws Exception {
+ int configUpdateId = -1;
+
+ Configuration config = new Configuration();
+
+ ConfigurationUpdateRequest request = new
ConfigurationUpdateRequest(configUpdateId, config, resourceId);
+
+ final ScheduledExecutorService threadPool =
context.mock(ScheduledExecutorService.class, "threadPool");
+ configurationMgr.setThreadPool(threadPool);
+
+ final ConfigManagement configMgmt = context.mock(ConfigManagement.class);
+
+ final ConfigurationServerService configServerService =
context.mock(ConfigurationServerService.class);
+
+ PluginContainerConfiguration containerConfig = new
PluginContainerConfiguration();
+ ServerServices serverServices = new ServerServices();
+ serverServices.setConfigurationServerService(configServerService);
+
+ configurationMgr.setConfiguration(containerConfig);
+
+ final UpdateResourceConfigurationRunner updateRunner = new
UpdateResourceConfigurationRunner(configServerService,
+ resourceType, configMgmt, request);
+
+ context.checking(new Expectations() {{
+ allowing(componentService).getResourceType(resourceId);
will(returnValue(resourceType));
+
+ atLeast(1).of(configMgmtFactory).getStrategy(resourceId);
will(returnValue(configMgmt));
+
+
oneOf(threadPool).submit((Runnable)with(matchingUpdateRunner(updateRunner)));
+ }});
+
+ configurationMgr.updateResourceConfiguration(request);
+ }
+
+ public static Matcher<UpdateResourceConfigurationRunner> matchingUpdateRunner(
+ UpdateResourceConfigurationRunner expected) {
+ return new PropertyMatcher<UpdateResourceConfigurationRunner>(expected);
+ }
+
}
diff --git
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunnerTest.java
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunnerTest.java
index f746942..0877668 100644
---
a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunnerTest.java
+++
b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunnerTest.java
@@ -48,41 +48,23 @@ import org.testng.annotations.Test;
public class UpdateResourceConfigurationRunnerTest extends ConfigManagementTest {
- ComponentService componentService;
-
ConfigManagement configMgmt;
- ConfigurationFacet facet;
+ ConfigurationServerService configServerService;
+
+ ConfigurationUtilityService configUtilService;
@BeforeMethod
public void setup() throws Exception {
- componentService = context.mock(ComponentService.class);
- facet = context.mock(ConfigurationFacet.class);
-
configMgmt = context.mock(ConfigManagement.class);
-
- setDefaultExpectations();
- }
-
- void setDefaultExpectations() throws Exception {
- final boolean daemonThread = false;
- final boolean onlyIfStarted = true;
-
- context.checking(new Expectations() {{
- allowing(componentService).getComponent(resourceId, ConfigurationFacet.class,
WRITE, FACET_METHOD_TIMEOUT,
- daemonThread, onlyIfStarted);
- will(returnValue(facet));
- }});
+ configServerService = context.mock(ConfigurationServerService.class);
+ configUtilService = context.mock(ConfigurationUtilityService.class);
}
@Test
public void successfulUpdateShouldSendSuccessResponseToServer() throws Exception {
final Configuration config = createStructuredConfig();
- final ConfigurationServerService configServerService =
context.mock(ConfigurationServerService.class);
-
- final ConfigurationUtilityService configUtilService =
context.mock(ConfigurationUtilityService.class);
-
int configUpdateId = -1;
ConfigurationUpdateRequest updateRequest = new
ConfigurationUpdateRequest(configUpdateId, config, resourceId);
@@ -103,15 +85,15 @@ public class UpdateResourceConfigurationRunnerTest extends
ConfigManagementTest
oneOf(configServerService).completeConfigurationUpdate(with(matchingResponse(successResponse)));
}});
- updateRunner.call();
+ ConfigurationUpdateResponse actualResponse = updateRunner.call();
+
+ assertConfigurationUpdateResponseMatches(successResponse, actualResponse,
"Expected a success response");
}
@Test
public void successfulUpdateShouldReturnSuccessResponseInEmbeddedMode() throws
Exception {
final Configuration config = createStructuredConfig();
- final ConfigurationUtilityService configUtilService =
context.mock(ConfigurationUtilityService.class);
-
int configUpdateId = -1;
ConfigurationUpdateRequest updateRequest = new
ConfigurationUpdateRequest(configUpdateId, config, resourceId);
@@ -140,10 +122,6 @@ public class UpdateResourceConfigurationRunnerTest extends
ConfigManagementTest
public void inProgressUpdateShouldSendFailureResponseToServer() throws Exception {
final Configuration config = createStructuredConfig();
- final ConfigurationServerService configServerService =
context.mock(ConfigurationServerService.class);
-
- final ConfigurationUtilityService configUtilService =
context.mock(ConfigurationUtilityService.class);
-
int configUpdateId = -1;
ConfigurationUpdateRequest updateRequest = new
ConfigurationUpdateRequest(configUpdateId, config, resourceId);
@@ -166,14 +144,47 @@ public class UpdateResourceConfigurationRunnerTest extends
ConfigManagementTest
oneOf(configServerService).completeConfigurationUpdate(with(matchingResponse(failureResponse)));
}});
- updateRunner.call();
+ ConfigurationUpdateResponse actualResponse = updateRunner.call();
+
+ assertConfigurationUpdateResponseMatches(failureResponse, actualResponse,
"Expected a failure response");
}
@Test
- public void failedUpdateShouldReturnFailureResponseInEmbeddedMode() throws Exception
{
+ public void failedUpdateShouldSendFailureResponseToServer() throws Exception {
final Configuration config = createStructuredConfig();
- final ConfigurationUtilityService configUtilService =
context.mock(ConfigurationUtilityService.class);
+ final int configUpdateId = -1;
+
+ ConfigurationUpdateRequest updateRequest = new
ConfigurationUpdateRequest(configUpdateId, config, resourceId);
+
+ UpdateResourceConfigurationRunner updateRunner = new
UpdateResourceConfigurationRunner(configServerService,
+ resourceType, configMgmt, updateRequest);
+ updateRunner.setConfigUtilService(configUtilService);
+
+ String errorMsg = "Configuration update failed.";
+
+ final ConfigurationUpdateException exception = new
ConfigurationUpdateException(errorMsg);
+
+ final ConfigurationUpdateResponse failureResponse = new
ConfigurationUpdateResponse(configUpdateId, config,
+ FAILURE, errorMsg);
+
+ context.checking(new Expectations() {{
+ oneOf(configMgmt).executeUpdate(resourceId, config);
will(throwExceptionFromFacet(exception));
+
+ oneOf(configUtilService).normalizeConfiguration(config,
resourceType.getResourceConfigurationDefinition());
+ oneOf(configUtilService).validateConfiguration(config,
resourceType.getResourceConfigurationDefinition());
+
+
oneOf(configServerService).completeConfigurationUpdate(with(matchingResponse(failureResponse)));
+ }});
+
+ ConfigurationUpdateResponse actualResponse = updateRunner.call();
+
+ assertConfigurationUpdateResponseMatches(failureResponse, actualResponse,
"Expected a failure response");
+ }
+
+ @Test
+ public void failedUpdateShouldReturnFailureResponseInEmbeddedMode() throws Exception
{
+ final Configuration config = createStructuredConfig();
int configUpdateId = -1;
@@ -203,11 +214,9 @@ public class UpdateResourceConfigurationRunnerTest extends
ConfigManagementTest
}
@Test
- public void failureResponseShouldBeSentToServerWhenFacetThrowsAnException() throws
Exception {
+ public void failureResponseShouldBeSentToServerWhenUnexpectedExceptionThrown() throws
Exception {
final Configuration config = createStructuredConfig();
- final ConfigurationServerService configServerService =
context.mock(ConfigurationServerService.class);
-
int configUpdateId = -1;
ConfigurationUpdateRequest updateRequest = new
ConfigurationUpdateRequest(configUpdateId, config, resourceId);
@@ -226,11 +235,13 @@ public class UpdateResourceConfigurationRunnerTest extends
ConfigManagementTest
oneOf(configServerService).completeConfigurationUpdate(with(matchingResponse(failureResponse)));
}});
- updateRunner.call();
+ ConfigurationUpdateResponse actualResponse = updateRunner.call();
+
+ assertConfigurationUpdateResponseMatches(failureResponse, actualResponse,
"Expected a failure response");
}
@Test
- public void failureResponseShouldBeReturnedWhenFacetThrowsAnExceptionInEmbeddedMode()
throws Exception {
+ public void
failureResponseShouldBeReturnedWhenUnexpectedExceptionThrownInEmbeddedMode() throws
Exception {
final Configuration config = createStructuredConfig();
int configUpdateId = -1;