@Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { PathAddress address = context.getCurrentAddress().append(BinaryTableResourceDefinition.PATH); ModelNode table = Operations.getAttributeValue(operation); for (Class<? extends org.jboss.as.clustering.controller.Attribute> attributeClass : Arrays.asList( BinaryTableResourceDefinition.Attribute.class, TableResourceDefinition.Attribute.class)) { for (org.jboss.as.clustering.controller.Attribute attribute : attributeClass.getEnumConstants()) { ModelNode writeAttributeOperation = Operations.createWriteAttributeOperation( address, attribute, table.get(attribute.getDefinition().getName())); context.addStep( writeAttributeOperation, context .getResourceRegistration() .getAttributeAccess( PathAddress.pathAddress(BinaryTableResourceDefinition.PATH), attribute.getDefinition().getName()) .getWriteHandler(), context.getCurrentStage()); } } }
@org.junit.Ignore("This fails for some mysterious reason - but this isn't a critical test") @Test @BMRule( name = "Test remove rollback operation", targetClass = "org.jboss.as.clustering.jgroups.subsystem.StackRemoveHandler", targetMethod = "performRuntime", targetLocation = "AT EXIT", action = "traceln(\"Injecting rollback fault via Byteman\");$1.setRollbackOnly()") public void testProtocolStackRemoveRollback() throws Exception { KernelServices services = buildKernelServices(); ModelNode operation = Operations.createCompositeOperation(addStackOp, addTransportOp, addProtocolOp); // add a protocol stack ModelNode result = services.executeOperation(operation); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); // remove the protocol stack // the remove has OperationContext.setRollbackOnly() injected // and so is expected to fail result = services.executeOperation(removeStackOp); Assert.assertEquals(FAILED, result.get(OUTCOME).asString()); // need to check that all services are correctly re-installed ServiceName channelFactoryServiceName = ProtocolStackServiceName.CHANNEL_FACTORY.getServiceName("maximal2"); Assert.assertNotNull( "channel factory service not installed", services.getContainer().getService(channelFactoryServiceName)); }
/** * Test for https://issues.jboss.org/browse/WFLY-5290 where server/test hangs when using legacy * TRANSPORT alias: * * <p>Create a simple stack, then remove, re-add a different transport, remove twice expecting the * 2nd remove to fail. Tests both situations when stack in inferred from :add operation and when * its inferred from the existing resource. */ @Test public void testLegacyTransportAliasSequence() throws Exception { KernelServices services = buildKernelServices(); String stackName = "legacyStack"; // add a sample stack to test legacy paths on ModelNode result = services.executeOperation(getProtocolStackAddOperationWithParameters(stackName)); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); // add a thread pool result = services.executeOperation(getLegacyThreadPoolAddOperation(stackName, "default")); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); ModelNode op = getLegacyThreadPoolAddOperation(stackName, "default"); op.get("operation").set("write-attribute"); op.get("name").set("keepalive-time"); op.get("value").set(999); result = services.executeOperation(op); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); op = Operations.createReadResourceOperation(getSubsystemAddress()); op.get(ModelDescriptionConstants.INCLUDE_ALIASES).set("true"); op.get(ModelDescriptionConstants.RECURSIVE).set("true"); result = services.executeOperation(op); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); op = Util.createOperation( ModelDescriptionConstants.READ_RESOURCE_DESCRIPTION_OPERATION, getSubsystemAddress()); op.get(ModelDescriptionConstants.INCLUDE_ALIASES).set("true"); op.get(ModelDescriptionConstants.RECURSIVE).set("true"); result = services.executeOperation(op); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); result = services.executeOperation(getLegacyTransportRemoveOperation(stackName)); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); result = services.executeOperation(getLegacyTransportAddOperation(stackName, "TCP")); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); result = services.executeOperation(getLegacyTransportRemoveOperation(stackName)); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); result = services.executeOperation(getLegacyTransportRemoveOperation(stackName)); Assert.assertEquals(FAILED, result.get(OUTCOME).asString()); }
@Test public void testProtocolStackRemoveRemoveSequence() throws Exception { KernelServices services = buildKernelServices(); ModelNode operation = Operations.createCompositeOperation(addStackOp, addTransportOp, addProtocolOp); // add a protocol stack ModelNode result = services.executeOperation(operation); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); // remove the protocol stack result = services.executeOperation(removeStackOp); Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString()); // remove the protocol stack again result = services.executeOperation(removeStackOp); Assert.assertEquals(FAILED, result.get(OUTCOME).asString()); }
@Override protected void executeRuntimeStep(OperationContext context, ModelNode operation) { // Address is of the form: /subsystem=infinispan/cache-container=*/*-cache=* PathAddress address = context.getCurrentAddress(); String containerName = address.getElement(address.size() - 2).getValue(); String cacheName = address.getElement(address.size() - 1).getValue(); String name = Operations.getAttributeName(operation); CacheMetric metric = CacheMetric.forName(name); if (metric == null) { context.getFailureDescription().set(InfinispanLogger.ROOT_LOGGER.unknownMetric(name)); } else { Cache<?, ?> cache = ServiceContainerHelper.findValue( context.getServiceRegistry(false), CacheServiceName.CACHE.getServiceName(containerName, cacheName)); if (cache != null) { context.getResult().set(metric.getValue(cache)); } } context.completeStep(OperationContext.ResultHandler.NOOP_RESULT_HANDLER); }
@Test public void testAliases() throws Exception { KernelServices services = this.createKernelServicesBuilder().setSubsystemXml(this.getSubsystemXml()).build(); PathAddress address = getCacheContainerAddress("minimal"); String alias = "alias0"; ModelNode operation = Operations.createListAddOperation( address, CacheContainerResourceDefinition.Attribute.ALIASES, alias); ModelNode result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createListGetOperation( address, CacheContainerResourceDefinition.Attribute.ALIASES, 0); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertEquals(new ModelNode(alias), result.get(RESULT)); operation = Operations.createListRemoveOperation( address, CacheContainerResourceDefinition.Attribute.ALIASES, 0); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createListGetOperation( address, CacheContainerResourceDefinition.Attribute.ALIASES, 0); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); // Validate that aliases can still be added/removed via legacy operations operation = Util.createOperation("add-alias", address); operation.get(ModelDescriptionConstants.NAME).set(alias); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createListGetOperation( address, CacheContainerResourceDefinition.Attribute.ALIASES, 0); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); /* This currently fails due to WFCORE-626, requires wildfly-core-1.0.0.Beta4 Assert.assertEquals(new ModelNode(alias), result.get(RESULT)); */ operation = Util.createOperation("remove-alias", address); operation.get(ModelDescriptionConstants.NAME).set(alias); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createListGetOperation( address, CacheContainerResourceDefinition.Attribute.ALIASES, 0); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); }
@SuppressWarnings("deprecation") @Test public void testStoreProperties() throws Exception { KernelServices services = this.createKernelServicesBuilder().setSubsystemXml(this.getSubsystemXml()).build(); PathAddress address = getRemoteCacheStoreAddress( "maximal", InvalidationCacheResourceDefinition.WILDCARD_PATH.getKey(), "invalid"); String key = "infinispan.client.hotrod.ping_on_startup"; String value = "true"; ModelNode operation = Operations.createMapPutOperation( address, StoreResourceDefinition.Attribute.PROPERTIES, key, value); ModelNode result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createMapGetOperation( address, StoreResourceDefinition.Attribute.PROPERTIES, key); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertEquals(value, result.get(RESULT).asString()); operation = Operations.createMapRemoveOperation( address, StoreResourceDefinition.Attribute.PROPERTIES, key); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createMapGetOperation( address, StoreResourceDefinition.Attribute.PROPERTIES, key); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); // Validate that properties can still be added/removed/updated via child property resources PathAddress propertyAddress = address.append(StorePropertyResourceDefinition.pathElement(key)); operation = Operations.createAddOperation( propertyAddress, Collections.<Attribute, ModelNode>singletonMap( new SimpleAttribute(StorePropertyResourceDefinition.VALUE), new ModelNode(value))); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createMapGetOperation( address, StoreResourceDefinition.Attribute.PROPERTIES, key); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertEquals(value, result.get(RESULT).asString()); value = "false"; operation = Operations.createWriteAttributeOperation( propertyAddress, new SimpleAttribute(StorePropertyResourceDefinition.VALUE), new ModelNode(value)); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createMapGetOperation( address, StoreResourceDefinition.Attribute.PROPERTIES, key); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertEquals(value, result.get(RESULT).asString()); operation = Operations.createReadAttributeOperation( propertyAddress, new SimpleAttribute(StorePropertyResourceDefinition.VALUE)); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertEquals(value, result.get(RESULT).asString()); operation = Util.createRemoveOperation(propertyAddress); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); operation = Operations.createMapGetOperation( address, StoreResourceDefinition.Attribute.PROPERTIES, key); result = services.executeOperation(operation); Assert.assertEquals(result.toString(), SUCCESS, result.get(OUTCOME).asString()); Assert.assertFalse(result.get(RESULT).isDefined()); }