| /******************************************************************************* |
| * Copyright (c) 2011 VMware Inc. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * VMware Inc. - initial contribution |
| *******************************************************************************/ |
| |
| package org.eclipse.virgo.kernel.deployer.test; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.File; |
| import java.lang.management.ManagementFactory; |
| |
| import javax.management.MBeanServerConnection; |
| import javax.management.MalformedObjectNameException; |
| import javax.management.ObjectName; |
| import javax.management.openmbean.CompositeDataSupport; |
| import javax.management.openmbean.TabularDataSupport; |
| |
| import org.eclipse.virgo.nano.deployer.api.core.ApplicationDeployer; |
| import org.eclipse.virgo.nano.deployer.api.core.DeploymentIdentity; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.osgi.framework.ServiceReference; |
| import org.springframework.jmx.support.JmxUtils; |
| |
| /** |
| * Test deployed artifacts show up correctly in JMX, in both the older Model and the newer, region-aware ArtifactModel. |
| * |
| */ |
| public class JmxArtifactModelTests extends AbstractDeployerIntegrationTest { |
| |
| private static final String GLOBAL_USER_REGION = "global"; |
| |
| private static final String CONFIGURATION_TYPE = "configuration"; |
| |
| private static final String CONFIGURATION_NAME = "t"; |
| |
| private static final String CONFIGURATION_VERSION = "0.0.0"; |
| |
| private ServiceReference<ApplicationDeployer> appDeployerServiceReference; |
| |
| private ApplicationDeployer appDeployer; |
| |
| private MBeanServerConnection mBeanServerConnection; |
| |
| @Before |
| public void setUp() { |
| this.appDeployerServiceReference = this.context.getServiceReference(ApplicationDeployer.class); |
| this.appDeployer = this.context.getService(this.appDeployerServiceReference); |
| this.mBeanServerConnection = getMBeanServerConnection(); |
| } |
| |
| @After |
| public void tearDown() { |
| if (this.appDeployerServiceReference != null) { |
| this.context.ungetService(this.appDeployerServiceReference); |
| } |
| } |
| |
| @Test |
| public void testConfigArtifactModel() throws Exception { |
| File file = new File("src/test/resources/configuration.deployment/t.properties"); |
| |
| DeploymentIdentity deploymentIdentity = this.appDeployer.deploy(file.toURI()); |
| |
| assertDeploymentIdentityEquals(deploymentIdentity, "t.properties", CONFIGURATION_TYPE, CONFIGURATION_NAME, "0"); |
| |
| assertArtifactState(GLOBAL_USER_REGION, CONFIGURATION_TYPE, CONFIGURATION_NAME, CONFIGURATION_VERSION, "ACTIVE"); |
| |
| TabularDataSupport attribute = (TabularDataSupport) this.mBeanServerConnection.getAttribute( |
| getObjectName(GLOBAL_USER_REGION, CONFIGURATION_TYPE, CONFIGURATION_NAME, CONFIGURATION_VERSION), "Properties"); |
| assertEquals("b", getStringValue(attribute, "a")); |
| assertEquals("d", getStringValue(attribute, "c")); |
| |
| this.appDeployer.undeploy(deploymentIdentity); |
| } |
| |
| //TODO: test other artefact types |
| |
| private String getStringValue(TabularDataSupport attribute, String key) { |
| Object[] keys = { key }; |
| CompositeDataSupport cds = (CompositeDataSupport) attribute.get(keys); |
| return (String) cds.get("value"); |
| } |
| |
| private void assertArtifactState(String region, String type, String name, String version, String state) throws |
| Exception { |
| assertArtifactExists(region, type, name, version); |
| assertEquals(String.format("Artifact %s:%s:%s:%s is not in state %s", region, type, name, version, state), state, this.mBeanServerConnection.getAttribute(getObjectName(region, type, name, version), "State")); |
| } |
| |
| private void assertArtifactExists(String region, String type, String name, String version) throws Exception { |
| assertTrue(String.format("Artifact %s:%s:%s:%s does not exist", region, type, name, version), this.mBeanServerConnection.isRegistered(getObjectName(region, type, name, version))); |
| } |
| |
| private static ObjectName getObjectName(String region, String type, String name, String version) throws MalformedObjectNameException { |
| return new ObjectName(String.format("org.eclipse.virgo.kernel:type=ArtifactModel,artifact-type=%s,name=%s,version=%s,region=%s",type, name, version,region)); |
| } |
| |
| private static MBeanServerConnection getMBeanServerConnection() { |
| return ManagementFactory.getPlatformMBeanServer(); |
| } |
| |
| } |