/** * Copyright 2013-2015 Seagate Technology LLC. * * This Source Code Form is subject to the terms of the Mozilla * Public License, v. 2.0. If a copy of the MPL was not * distributed with this file, You can obtain one at * https://mozilla.org/MP:/2.0/. * * This program is distributed in the hope that it will be useful, * but is provided AS-IS, WITHOUT ANY WARRANTY; including without * the implied warranty of MERCHANTABILITY, NON-INFRINGEMENT or * FITNESS FOR A PARTICULAR PURPOSE. See the Mozilla Public * License for more details. * * See www.openkinetic.org for more project information */ package com.seagate.kinetic.simulator.client.internal; import static org.testng.AssertJUnit.assertTrue; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import java.util.Arrays; import java.util.logging.Logger; import kinetic.client.ClientConfiguration; import kinetic.client.Entry; import kinetic.simulator.KineticSimulator; import kinetic.simulator.SimulatorConfiguration; import com.google.protobuf.ByteString; import com.seagate.kinetic.client.internal.MessageFactory; import com.seagate.kinetic.client.internal.p2p.DefaultKineticP2pClient; import com.seagate.kinetic.common.lib.KineticMessage; import com.seagate.kinetic.proto.Kinetic.Command; import com.seagate.kinetic.proto.Kinetic.Command.MessageType; import com.seagate.kinetic.proto.Kinetic.Command.P2POperation; import com.seagate.kinetic.proto.Kinetic.Command.P2POperation.Operation; import com.seagate.kinetic.proto.Kinetic.Command.P2POperation.Peer; /** * P2P raw/internal API test. * * @author Chiaming Yang * */ @Test(groups = {"simulator"}) public class PeerToPeerPushTest { Logger logger = Logger .getLogger(PeerToPeerPushTest.class.getName()); private final int max = 2; private final int portbase = 18123; private final int sslPortbase = 18443; private final SimulatorConfiguration[] sconfigs = new SimulatorConfiguration[max]; private final ClientConfiguration[] cconfigs = new ClientConfiguration[max]; private final KineticSimulator[] servers = new KineticSimulator[max]; @BeforeMethod public void setUp() throws Exception { // server configs for (int i = 0; i < max; i++) { int myport = portbase + i; // client configuratiomn cconfigs[i] = new ClientConfiguration(); cconfigs[i].setPort(myport); // server configuration sconfigs[i] = new SimulatorConfiguration(); sconfigs[i].setPort(myport); sconfigs[i].setSslPort(sslPortbase + i); sconfigs[i].put(SimulatorConfiguration.PERSIST_HOME, "instance_" + myport); servers[i] = new KineticSimulator(sconfigs[i]); logger.info("server started, port=" + myport + ", ssl port=" + sslPortbase + i); } } @Test public void p2pTest() throws Exception { ByteString key = ByteString.copyFromUtf8("p2p_key"); ByteString value = ByteString.copyFromUtf8("p2p_value"); Entry entry = new Entry(); entry.setKey(key.toByteArray()); entry.setValue(value.toByteArray()); // construct client from config 0 DefaultKineticP2pClient p2pClient = new DefaultKineticP2pClient( cconfigs[0]); // put entry to config 0 p2pClient.putForced(entry); // request message KineticMessage km = MessageFactory.createKineticMessageWithBuilder(); //Message.Builder request = (Message.Builder) km.getMessage(); Command.Builder commandBuilder = (Command.Builder) km.getCommand(); // set message type commandBuilder.getHeaderBuilder() .setMessageType(MessageType.PEER2PEERPUSH); P2POperation.Builder p2pOp = commandBuilder .getBodyBuilder().getP2POperationBuilder(); // set peer Peer.Builder peer = p2pOp.getPeerBuilder(); peer.setHostname("localhost"); peer.setPort(cconfigs[1].getPort()); peer.setTls(false); Operation.Builder operation = Operation.newBuilder(); operation.setForce(true); operation.setKey(key); p2pOp.addOperation(operation.build()); // p2p push -- config 0 p2pClient.PeerToPeerPush(km); logger.info("peer to peer pushed entry ..."); boolean deleted = p2pClient.deleteForced(key.toByteArray()); assertTrue(deleted); // close client -- config 0 p2pClient.close(); // construct client - config 1 DefaultKineticP2pClient validationClient = new DefaultKineticP2pClient(cconfigs[1]); // get entry from config 1 Entry pcEntry = validationClient.get(key.toByteArray()); deleted = validationClient.deleteForced(key.toByteArray()); assertTrue(deleted); validationClient.close(); assertTrue(Arrays.equals(pcEntry.getValue(), value.toByteArray())); logger.info("peer to peer test passed"); } @AfterMethod public void tearDown() throws Exception { for (int i = 0; i < max; i++) { servers[i].close(); logger.info("server close, myport=" + servers[i].getServerConfiguration().getPort()); } } }