blob: a9a6491209b4d9c75512925c02da4535d2d6f45e [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.qpid.management.wsdm.capabilities;
import java.lang.management.ManagementFactory;
import java.net.URI;
import javax.management.ObjectName;
import junit.framework.TestCase;
import org.apache.muse.ws.addressing.EndpointReference;
import org.apache.muse.ws.resource.WsResource;
import org.apache.muse.ws.resource.impl.SimpleWsResource;
import org.apache.qpid.management.domain.handler.impl.QpidDomainObject;
import org.apache.qpid.management.wsdm.common.EntityInstanceNotFoundFault;
import org.apache.qpid.management.wsdm.common.NoSuchAttributeFault;
import org.apache.qpid.management.wsdm.common.QManFault;
/**
* Test case for MBeanCapability supertype layer..
*
* @author Andrea Gazzarini
*/
public class MBeanCapabilityTest extends TestCase
{
private final String _typeAttributeName = "Type";
private final String _newTypeValue = "DomainObject";
private ObjectName _objectName;
private ObjectName _unknownObjectName;
private MBeanCapability _capability;
@Override
protected void setUp() throws Exception
{
_objectName = new ObjectName("Test:Name=aName");
_unknownObjectName = new ObjectName("Test:Type=unknown");
_capability = new MBeanCapability(){
@Override
public WsResource getWsResource()
{
return new SimpleWsResource(){
@Override
public EndpointReference getEndpointReference()
{
return new EndpointReference(URI.create("http://qpid.apache.org/qman"));
}
};
}
};
_capability.setResourceObjectName(_objectName);
ManagementFactory.getPlatformMBeanServer().registerMBean(new QpidDomainObject(), _objectName);
}
/**
* Tests the execution of the getAttribute() and setAttribute() method.
*
* <br>precondition : the mbean is registered and a _capability is associated with it.
* <br>postcondition : the set value of the requested attribute is correctly returned.
*/
public void testGetAndSetAttributeOK() throws Exception
{
Object name = _capability.getAttribute(_typeAttributeName);
assertNull("Name has an initial value of null so how is possibile that is not null?",name);
_capability.setAttribute(_typeAttributeName,_newTypeValue);
name = _capability.getAttribute(_typeAttributeName);
assertEquals("Now the name attribute must be set to \""+_newTypeValue+"\"",_newTypeValue,name);
}
/**
* Tests the execution of the getAttribute() and setAttribte() methods when an unknown attribute is given..
*
* <br>precondition : the mbean is registered, a _capability is associated with it and the requested attribute doesn't exist.
* <br>postcondition : an exception is thrown indicating the failure.
*/
public void testNoSuchAttributeFault() throws Exception
{
// I suppose that we shouldn't have an attribute with this name...
String unknownAttribute = String.valueOf(System.currentTimeMillis());
try
{
_capability.getAttribute(unknownAttribute);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(NoSuchAttributeFault expected)
{
}
try
{
_capability.setAttribute(unknownAttribute,null);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(NoSuchAttributeFault expected)
{
}
}
/**
* Tests the execution of the setAttribute,getAttribute and invoke methods when the target mbean
* doesn't exists.
*
* <br>precondition : the object name associated with the capability is not pointing to an existent MBean.
* <br>postcondition : an exception is thrown indicating the failure.
*/
public void testEntityInstanceNotFoundFault() throws Exception
{
_capability.setResourceObjectName(_unknownObjectName);
try
{
_capability.getAttribute(_typeAttributeName);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(EntityInstanceNotFoundFault expected)
{
}
try
{
_capability.setAttribute(_typeAttributeName,_newTypeValue);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(EntityInstanceNotFoundFault expected)
{
}
try
{
_capability.invoke("operationName", null,null);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(EntityInstanceNotFoundFault expected)
{
}
}
/**
* Tests the execution of the setAttribute,getAttribute and invoke methods when an unknown / unexpected
* exception is thrown.
*
* <br>precondition : the mbean is registered and a capability is associated with it. Something
* unexpected happens during method invocation.
* <br>postcondition : an exception is thrown indicating the failure.
*/
public void testQManFault() throws Exception
{
// Emulate a RuntimeException (which is the best example of uncaught exception... :) )
_capability.setResourceObjectName(null);
try
{
_capability.getAttribute(_typeAttributeName);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(QManFault expected)
{
}
try
{
_capability.setAttribute(_typeAttributeName,_newTypeValue);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(QManFault expected)
{
}
try
{
_capability.invoke("operationName", null,null);
fail("An exception must be thrown here in order to indicate that the attribute is unknown.");
} catch(QManFault expected)
{
}
}
/**
* Shutdown procedure for this test case.
*/
@Override
protected void tearDown() throws Exception
{
ManagementFactory.getPlatformMBeanServer().unregisterMBean(_objectName);
}
}