package org.infinispan.server.test.query;
import static org.infinispan.server.test.util.ITestUtils.SERVER1_MGMT_PORT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OUTCOME;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUCCESS;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.marshall.ProtoStreamMarshaller;
import org.infinispan.protostream.sampledomain.marshallers.MarshallerRegistration;
import org.infinispan.query.remote.client.ProtobufMetadataManagerConstants;
import org.infinispan.server.test.category.Queries;
import org.infinispan.server.test.util.RemoteCacheManagerFactory;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.as.clustering.infinispan.subsystem.InfinispanExtension;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.client.ModelControllerClient;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.dmr.ModelNode;
import org.junit.Before;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
/**
* Tests for remote queries over HotRod but registering the proto file via DMR plugin.
*
* @author William Burns
*/
@Category(Queries.class)
@RunWith(Arquillian.class)
public class RemoteQueryDMRRegisterIT extends RemoteQueryIT {
@Before
@Override
public void setUp() throws Exception {
rcmFactory = new RemoteCacheManagerFactory();
ConfigurationBuilder clientBuilder = new ConfigurationBuilder();
clientBuilder.addServer()
.host(getServer().getHotrodEndpoint().getInetAddress().getHostName())
.port(getServer().getHotrodEndpoint().getPort())
.marshaller(new ProtoStreamMarshaller());
remoteCacheManager = rcmFactory.createManager(clientBuilder);
remoteCache = remoteCacheManager.getCache(cacheName);
//initialize server-side serialization context via DMR
ModelNode nameList = new ModelNode()
.add("/sample_bank_account/bank.proto");
ModelNode urlList = new ModelNode()
.add(getClass().getResource("/sample_bank_account/bank.proto").toString());
ModelControllerClient client = ModelControllerClient.Factory.create(
getServer().getHotrodEndpoint().getInetAddress().getHostName(), SERVER1_MGMT_PORT);
ModelNode addProtobufFileOp = getOperation("clustered", "upload-proto-schemas", nameList, urlList);
ModelNode result = client.execute(addProtobufFileOp);
assertEquals(SUCCESS, result.get(OUTCOME).asString());
client.close();
RemoteCache<String, String> metadataCache = remoteCacheManager.getCache(ProtobufMetadataManagerConstants.PROTOBUF_METADATA_CACHE_NAME);
assertFalse(metadataCache.containsKey(ProtobufMetadataManagerConstants.ERRORS_KEY_SUFFIX));
//initialize client-side serialization context
MarshallerRegistration.registerMarshallers(ProtoStreamMarshaller.getSerializationContext(remoteCacheManager));
}
private ModelNode getOperation(String containerName, String operationName, ModelNode nameList, ModelNode urlList) {
PathAddress address = PathAddress.pathAddress(
PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, InfinispanExtension.SUBSYSTEM_NAME))
.append("cache-container", containerName);
ModelNode op = new ModelNode();
op.get(OP).set(operationName);
op.get(OP_ADDR).set(address.toModelNode());
op.get("file-names").set(nameList);
op.get("file-urls").set(urlList);
return op;
}
}