package org.infinispan.server.endpoint;
import static java.util.Arrays.stream;
import static org.infinispan.server.endpoint.subsystem.ModelKeys.CACHE_NAMES;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
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 static org.junit.Assert.assertEquals;
import java.io.IOException;
import org.infinispan.server.endpoint.subsystem.EndpointExtension;
import org.jboss.as.clustering.infinispan.subsystem.InfinispanSubsystemDependenciesInitialization;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.subsystem.test.AbstractSubsystemTest;
import org.jboss.as.subsystem.test.KernelServices;
import org.jboss.dmr.ModelNode;
import org.junit.Before;
import org.junit.Test;
/**
* @author gustavonalle
* @since 8.1
*/
public class EndpointSubsystemOperationsTestCase extends AbstractSubsystemTest {
private KernelServices services;
public EndpointSubsystemOperationsTestCase() {
super(Constants.SUBSYSTEM_NAME, new EndpointExtension());
}
protected String getSubsystemXml() throws IOException {
return readResource("endpoint-9.0.xml");
}
@Before
public void setUp() throws Exception {
services = createKernelServicesBuilder(new InfinispanSubsystemDependenciesInitialization())
.setSubsystemXml(getSubsystemXml()).build();
}
private ModelNode executeOp(String operationName, String... parameters) {
ModelNode op = new ModelNode();
op.get(OP).set(operationName);
op.get(ADDRESS).set(PathAddress.pathAddress(Constants.SUBSYSTEM_PATH).toModelNode());
ModelNode cacheNames = op.get(CACHE_NAMES);
stream(parameters).forEach(cacheNames::add);
ModelNode result = services.executeOperation(op);
assertEquals(SUCCESS, result.get(OUTCOME).asString());
return result.get(RESULT);
}
@Test
public void testIgnoreCaches() throws Exception {
assertCachesNotIgnored("cache1", "cache2", "cache3");
assertCachesNotIgnored("whatever");
executeOp("ignore-cache-all-endpoints", "cacheA", "cacheB", "cacheC");
assertCachesIgnored("cacheA", "cacheB", "cacheC");
executeOp("unignore-cache-all-endpoints", "cacheA");
assertCachesNotIgnored("cacheA");
assertCachesIgnored("cacheB", "cacheC");
executeOp("unignore-cache-all-endpoints", "cacheB");
assertCachesNotIgnored("cacheA", "cacheB");
assertCachesNotIgnored("cacheC");
executeOp("unignore-cache-all-endpoints", "cacheA", "cacheB", "cacheC");
assertCachesNotIgnored("cacheA", "cacheB", "cacheC");
}
private void assertCachesIgnored(String... caches) {
assertCacheStatus(true, caches);
}
private void assertCachesNotIgnored(String... caches) {
assertCacheStatus(false, caches);
}
private void assertCacheStatus(boolean ignored, String... caches) {
ModelNode summary = executeOp("is-ignored-all-endpoints", caches);
stream(caches).allMatch(cache -> summary.get(cache).asBoolean() == ignored);
}
}