/modules/core/plugin-container/src/test/java/org/rhq/core/pc/configuration/UpdateResourceConfigurationRunnerTest.java
https://github.com/ccrouch/rhq · Java · 308 lines · 194 code · 92 blank · 22 comment · 0 complexity · 8beff6f42dbab6e82bb1bdc9e224e867 MD5 · raw file
- /*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
- package org.rhq.core.pc.configuration;
- import org.hamcrest.Description;
- import org.hamcrest.Matcher;
- import org.jmock.Expectations;
- import org.jmock.api.Action;
- import org.jmock.api.Invocation;
- import org.rhq.core.clientapi.agent.configuration.ConfigurationUpdateRequest;
- import org.rhq.core.clientapi.server.configuration.ConfigurationServerService;
- import org.rhq.core.clientapi.server.configuration.ConfigurationUpdateResponse;
- import org.rhq.core.domain.configuration.Configuration;
- import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
- import org.rhq.core.pluginapi.configuration.ConfigurationUpdateReport;
- import org.rhq.test.jmock.PropertyMatcher;
- import org.testng.annotations.BeforeMethod;
- import org.testng.annotations.Test;
- import static org.rhq.core.domain.configuration.ConfigurationUpdateStatus.FAILURE;
- import static org.rhq.core.domain.configuration.ConfigurationUpdateStatus.SUCCESS;
- public class UpdateResourceConfigurationRunnerTest extends ConfigManagementTest {
- ConfigManagement configMgmt;
- ConfigurationServerService configServerService;
- @BeforeMethod
- public void setup() throws Exception {
- configMgmt = context.mock(ConfigManagement.class);
- configServerService = context.mock(ConfigurationServerService.class);
- }
- @Test
- public void successfulUpdateShouldSendSuccessResponseToServer() throws Exception {
- final Configuration config = createStructuredConfig();
- int configUpdateId = -1;
- ConfigurationUpdateRequest updateRequest = new ConfigurationUpdateRequest(configUpdateId, config, resourceId);
- UpdateResourceConfigurationRunner updateRunner = new UpdateResourceConfigurationRunner(configServerService,
- resourceType, configMgmt, updateRequest);
- updateRunner.setConfigUtilService(configUtilityService);
- final ConfigurationUpdateResponse successResponse = new ConfigurationUpdateResponse(configUpdateId, null,
- SUCCESS, null);
- context.checking(new Expectations() {{
- oneOf(configMgmt).executeUpdate(resourceId, config);
- oneOf(configUtilityService).normalizeConfiguration(config, resourceType.getResourceConfigurationDefinition());
- oneOf(configUtilityService).validateConfiguration(config, resourceType.getResourceConfigurationDefinition());
- oneOf(configServerService).completeConfigurationUpdate(with(matchingResponse(successResponse)));
- }});
- ConfigurationUpdateResponse actualResponse = updateRunner.call();
- assertConfigurationUpdateResponseMatches(successResponse, actualResponse, "Expected a success response");
- }
- @Test
- public void successfulUpdateShouldReturnSuccessResponseInEmbeddedMode() throws Exception {
- final Configuration config = createStructuredConfig();
- int configUpdateId = -1;
- ConfigurationUpdateRequest updateRequest = new ConfigurationUpdateRequest(configUpdateId, config, resourceId);
- UpdateResourceConfigurationRunner updateRunner = new UpdateResourceConfigurationRunner(null, resourceType,
- configMgmt, updateRequest);
- updateRunner.setConfigUtilService(configUtilityService);
- final ConfigurationUpdateResponse successResponse = new ConfigurationUpdateResponse(configUpdateId, null,
- SUCCESS, null);
- context.checking(new Expectations() {{
- oneOf(configMgmt).executeUpdate(resourceId, config);
- oneOf(configUtilityService).normalizeConfiguration(config, resourceType.getResourceConfigurationDefinition());
- oneOf(configUtilityService).validateConfiguration(config, resourceType.getResourceConfigurationDefinition());
- }});
- ConfigurationUpdateResponse actualResponse = updateRunner.call();
- assertConfigurationUpdateResponseMatches(successResponse, actualResponse, "Expected a success response");
- }
- @Test
- public void inProgressUpdateShouldSendFailureResponseToServer() throws Exception {
- final Configuration config = createStructuredConfig();
- int configUpdateId = -1;
- ConfigurationUpdateRequest updateRequest = new ConfigurationUpdateRequest(configUpdateId, config, resourceId);
- UpdateResourceConfigurationRunner updateRunner = new UpdateResourceConfigurationRunner(configServerService,
- resourceType, configMgmt, updateRequest);
- updateRunner.setConfigUtilService(configUtilityService);
- String errorMsg = "Configuration facet did not indicate success or failure - assuming failure.";
- final ConfigurationUpdateResponse failureResponse = new ConfigurationUpdateResponse(configUpdateId, config,
- FAILURE, errorMsg);
- context.checking(new Expectations() {{
- oneOf(configMgmt).executeUpdate(resourceId, config); will(throwException(new UpdateInProgressException()));
- oneOf(configUtilityService).normalizeConfiguration(config, resourceType.getResourceConfigurationDefinition());
- oneOf(configUtilityService).validateConfiguration(config, resourceType.getResourceConfigurationDefinition());
- oneOf(configServerService).completeConfigurationUpdate(with(matchingResponse(failureResponse)));
- }});
- ConfigurationUpdateResponse actualResponse = updateRunner.call();
- assertConfigurationUpdateResponseMatches(failureResponse, actualResponse, "Expected a failure response");
- }
- @Test
- public void failedUpdateShouldSendFailureResponseToServer() throws Exception {
- final Configuration config = createStructuredConfig();
- final int configUpdateId = -1;
- ConfigurationUpdateRequest updateRequest = new ConfigurationUpdateRequest(configUpdateId, config, resourceId);
- UpdateResourceConfigurationRunner updateRunner = new UpdateResourceConfigurationRunner(configServerService,
- resourceType, configMgmt, updateRequest);
- updateRunner.setConfigUtilService(configUtilityService);
- 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(configUtilityService).normalizeConfiguration(config, resourceType.getResourceConfigurationDefinition());
- oneOf(configUtilityService).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;
- ConfigurationUpdateRequest updateRequest = new ConfigurationUpdateRequest(configUpdateId, config, resourceId);
- UpdateResourceConfigurationRunner updateRunner = new UpdateResourceConfigurationRunner(null, resourceType,
- configMgmt, updateRequest);
- updateRunner.setConfigUtilService(configUtilityService);
- 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(configUtilityService).normalizeConfiguration(config, resourceType.getResourceConfigurationDefinition());
- oneOf(configUtilityService).validateConfiguration(config, resourceType.getResourceConfigurationDefinition());
- }});
- ConfigurationUpdateResponse actualResponse = updateRunner.call();
- assertConfigurationUpdateResponseMatches(failureResponse, actualResponse, "Expected a failure response");
- }
- @Test
- public void failureResponseShouldBeSentToServerWhenUnexpectedExceptionThrown() throws Exception {
- final Configuration config = createStructuredConfig();
- int configUpdateId = -1;
- ConfigurationUpdateRequest updateRequest = new ConfigurationUpdateRequest(configUpdateId, config, resourceId);
- UpdateResourceConfigurationRunner updateRunner = new UpdateResourceConfigurationRunner(configServerService,
- resourceType, configMgmt, updateRequest);
- final NullPointerException exception = new NullPointerException("Unexpected error during update");
- final ConfigurationUpdateResponse failureResponse = new ConfigurationUpdateResponse(configUpdateId, config,
- exception);
- context.checking(new Expectations() {{
- oneOf(configMgmt).executeUpdate(resourceId, config); will(throwExceptionFromFacet(exception));
- oneOf(configServerService).completeConfigurationUpdate(with(matchingResponse(failureResponse)));
- }});
- ConfigurationUpdateResponse actualResponse = updateRunner.call();
- assertConfigurationUpdateResponseMatches(failureResponse, actualResponse, "Expected a failure response");
- }
- @Test
- public void failureResponseShouldBeReturnedWhenUnexpectedExceptionThrownInEmbeddedMode() throws Exception {
- final Configuration config = createStructuredConfig();
- int configUpdateId = -1;
- ConfigurationUpdateRequest updateRequest = new ConfigurationUpdateRequest(configUpdateId, config, resourceId);
- UpdateResourceConfigurationRunner updateRunner = new UpdateResourceConfigurationRunner(null, resourceType,
- configMgmt, updateRequest);
- final NullPointerException exception = new NullPointerException("Unexpected error during update");
- final ConfigurationUpdateResponse failureResponse = new ConfigurationUpdateResponse(configUpdateId, config,
- exception);
- context.checking(new Expectations() {{
- oneOf(configMgmt).executeUpdate(resourceId, config);
- will(throwExceptionFromFacet(exception));
- }});
- ConfigurationUpdateResponse actualResponse = updateRunner.call();
- assertConfigurationUpdateResponseMatches(failureResponse, actualResponse, "Expected a failure response");
- }
- public static Matcher<ConfigurationUpdateResponse> matchingResponse(ConfigurationUpdateResponse expected) {
- return new PropertyMatcher<ConfigurationUpdateResponse>(expected);
- }
- public static Action updateReportTo(ConfigurationUpdateStatus status) {
- return new UpdateResourceConfigurationAction(status);
- }
- public static Action throwExceptionFromFacet(Throwable t) {
- return new ThrowFacetExceptionAction(t);
- }
- static class UpdateResourceConfigurationAction implements Action {
- ConfigurationUpdateStatus status;
- public UpdateResourceConfigurationAction(ConfigurationUpdateStatus status) {
- this.status = status;
- }
- public void describeTo(Description description) {
- description.appendText("Updating status of " + ConfigurationUpdateReport.class.getSimpleName() + " to " +
- status);
- }
- public Object invoke(Invocation invocation) throws Throwable {
- ConfigurationUpdateReport report = (ConfigurationUpdateReport) invocation.getParameter(0);
- report.setStatus(status);
- return null;
- }
- }
- static class ThrowFacetExceptionAction implements Action {
- Throwable throwable;
- public ThrowFacetExceptionAction(Throwable t) {
- throwable = t;
- }
- public void describeTo(Description description) {
- description.appendText("throws <" + throwable.getClass().getName() + ">: " + throwable.getMessage());
- }
- public Object invoke(Invocation invocation) throws Throwable {
- throw throwable;
- }
- }
- }