package org.jboss.as.clustering.infinispan.subsystem;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OUTCOME;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.RESULT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUCCESS;
import org.jboss.as.subsystem.test.KernelServices;
import org.jboss.dmr.ModelNode;
import org.junit.Assert;
import org.junit.Test;
/**
* Test case for testing individual management operations.
*
* These test cases are based on the XML config in subsystem-infinispan-test,
* a non-exhaustive subsystem configuration.
*
* @author Richard Achmatowicz (c) 2011 Red Hat Inc.
*/
public class OperationsTestCase extends OperationTestCaseBase {
// subsystem test operations
// TODO
// cache container test operations
static final ModelNode cacheContainerAddOp = getCacheContainerAddOperation("maximal2");
static final ModelNode cacheContainerRemovekOp = getCacheContainerRemoveOperation("maximal2");
static final ModelNode readCacheContainerDefaultCacheOp = getCacheContainerReadOperation("maximal", "default-cache");
static final ModelNode writeCacheContainerDefaultCacheOp = getCacheContainerWriteOperation("maximal", "default-cache", "new-default-cache");
// cache transport test operations
// TODO
// cache test operations
static final ModelNode localCacheAddOp = getCacheAddOperation("maximal2", ModelKeys.LOCAL_CACHE, "new-cache");
static final ModelNode localCacheRemovekOp = getCacheRemoveOperation("maximal2", ModelKeys.LOCAL_CACHE, "new-cache");
static final ModelNode readLocalCacheBatchingOp = getCacheConfigurationReadOperation("maximal", ModelKeys.LOCAL_CACHE_CONFIGURATION, "local", "batching");
static final ModelNode writeLocalCacheBatchingOp = getCacheConfigurationWriteOperation("maximal", ModelKeys.LOCAL_CACHE_CONFIGURATION, "local", "batching", "false");
// cache locking test operations
// TODO
// cache store test operations
static final ModelNode readDistCacheStringJDBCStoreDatastoreOp = getStringKeyedJDBCCacheStoreReadOperation("maximal", ModelKeys.DISTRIBUTED_CACHE_CONFIGURATION, "dist", "datasource");
static final ModelNode writeDistCacheStringJDBCStoreDatastoreOp = getStringKeyedJDBCCacheStoreWriteOperation("maximal", ModelKeys.DISTRIBUTED_CACHE_CONFIGURATION, "dist", "datasource", "new-datasource");
static final ModelNode readDistCacheStringJDBCStoreStringKeyedTableOp = getStringKeyedJDBCCacheStoreReadOperation("maximal", ModelKeys.DISTRIBUTED_CACHE_CONFIGURATION, "dist", "string-keyed-table");
/*
* Tests access to cache container attributes
*/
@Test
public void testCacheContainerReadWriteOperation() throws Exception {
// Parse and install the XML into the controller
String subsystemXml = getSubsystemXml() ;
KernelServices servicesA = createKernelServicesBuilder().setSubsystemXml(subsystemXml).build();
// read the cache container default cache attribute
ModelNode result = servicesA.executeOperation(readCacheContainerDefaultCacheOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
Assert.assertEquals("local", result.get(RESULT).asString());
// write the default cache attribute
result = servicesA.executeOperation(writeCacheContainerDefaultCacheOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
// re-read the default cache attribute
result = servicesA.executeOperation(readCacheContainerDefaultCacheOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
Assert.assertEquals("new-default-cache", result.get(RESULT).asString());
}
/*
* Tests access to local cache attributes
*/
@Test
public void testLocalCacheReadWriteOperation() throws Exception {
// Parse and install the XML into the controller
String subsystemXml = getSubsystemXml() ;
KernelServices servicesA = createKernelServicesBuilder().setSubsystemXml(subsystemXml).build();
// read the cache container batching attribute
ModelNode result = servicesA.executeOperation(readLocalCacheBatchingOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
Assert.assertEquals("false", result.get(RESULT).asString());
// write the batching attribute
result = servicesA.executeOperation(writeLocalCacheBatchingOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
// re-read the batching attribute
result = servicesA.executeOperation(readLocalCacheBatchingOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
Assert.assertEquals("false", result.get(RESULT).asString());
assertServerState(servicesA, "running");
}
/*
* Tests access to local cache attributes
*/
@Test
public void testDistributedCacheStringJDBCStoreReadWriteOperation() throws Exception {
ModelNode stringKeyedTable = createStringKeyedTable() ;
// Parse and install the XML into the controller
String subsystemXml = getSubsystemXml() ;
KernelServices servicesA = createKernelServicesBuilder().setSubsystemXml(subsystemXml).build();
// read the distributed cache string-keyed-jdbc-store datasource attribute
ModelNode result = servicesA.executeOperation(readDistCacheStringJDBCStoreDatastoreOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
Assert.assertEquals("java:jboss/datasources/JdbcDS", result.get(RESULT).asString());
// write the batching attribute
result = servicesA.executeOperation(writeDistCacheStringJDBCStoreDatastoreOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
// re-read the batching attribute
result = servicesA.executeOperation(readDistCacheStringJDBCStoreDatastoreOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
Assert.assertEquals("new-datasource", result.get(RESULT).asString());
// read the string-keyed-table attribute
result = servicesA.executeOperation(readDistCacheStringJDBCStoreStringKeyedTableOp);
Assert.assertEquals(SUCCESS, result.get(OUTCOME).asString());
Assert.assertEquals(stringKeyedTable.asString(), result.get(RESULT).asString());
assertServerState(servicesA, "running");
}
private ModelNode createStringKeyedTable() {
// create a string-keyed-table complex attribute
ModelNode stringKeyedTable = new ModelNode().setEmptyObject() ;
stringKeyedTable.get(ModelKeys.PREFIX).set("ISPN_MC_SK");
stringKeyedTable.get(ModelKeys.CREATE_ON_START).set(true);
stringKeyedTable.get(ModelKeys.DROP_ON_EXIT).set(true);
ModelNode idColumn = stringKeyedTable.get(ModelKeys.ID_COLUMN).setEmptyObject();
idColumn.get(ModelKeys.NAME).set("id") ;
idColumn.get(ModelKeys.TYPE).set("VARCHAR") ;
ModelNode dataColumn = stringKeyedTable.get(ModelKeys.DATA_COLUMN).setEmptyObject();
dataColumn.get(ModelKeys.NAME).set("datum") ;
dataColumn.get(ModelKeys.TYPE).set("BINARY") ;
ModelNode timestampColumn = stringKeyedTable.get(ModelKeys.TIMESTAMP_COLUMN).setEmptyObject();
timestampColumn.get(ModelKeys.NAME).set("version") ;
timestampColumn.get(ModelKeys.TYPE).set("BIGINT") ;
return stringKeyedTable;
}
}