/**
* 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;
import static com.seagate.kinetic.KineticTestHelpers.toByteArray;
import kinetic.admin.AdminClientConfiguration;
import kinetic.admin.KineticAdminClient;
import kinetic.admin.KineticAdminClientFactory;
import kinetic.client.KineticClient;
import kinetic.client.KineticException;
import kinetic.client.p2p.KineticP2PClientFactory;
import kinetic.client.p2p.KineticP2pClient;
import kinetic.client.p2p.Peer;
public abstract class AbstractIntegrationTestTarget {
protected final String host;
protected final int port;
protected final int tlsPort;
protected AbstractIntegrationTestTarget(String host, int port, int tlsPort) {
this.host = host;
this.port = port;
this.tlsPort = tlsPort;
}
public abstract void shutdown() throws Exception;
public KineticP2pClient createKineticClient() throws KineticException {
return KineticP2PClientFactory.createP2pClient(getAdminClientConfig());
}
protected void waitForServerReady() throws InterruptedException {
final int pollingIntervalMS = 50;
final int maxWaitTimeSec = 10;
long waitStartTime = System.currentTimeMillis();
float elapsedTimeMS;
while (true) {
Thread.sleep(pollingIntervalMS);
elapsedTimeMS = System.currentTimeMillis() - waitStartTime;
if (elapsedTimeMS > maxWaitTimeSec * 1000) {
throw new RuntimeException("Server never became available");
}
try {
KineticClient kineticClient = createKineticClient();
kineticClient.noop();
kineticClient.close();
break;
} catch (KineticException e) {
// Since all exceptions get turned into KineticException we have
// to manually check the message
if (e.getMessage().contains("Kinetic Command Exception: ")) {
break;
}
// Ignore this exception because it probably means that the
// server isn't ready yet so
// we'll just take a brief nap and try again in a bit
}
}
}
public AdminClientConfiguration getAdminClientConfig() {
AdminClientConfiguration clientConfiguration = new AdminClientConfiguration();
clientConfiguration.setHost(host);
clientConfiguration.setPort(tlsPort);
clientConfiguration.setNioServiceThreads(1);
clientConfiguration.setRequestTimeoutMillis(180000);
return clientConfiguration;
}
// public ClientConfiguration getClientConfig() {
// ClientConfiguration clientConfiguration = new ClientConfiguration();
// clientConfiguration.setHost(host);
// clientConfiguration.setPort(port);
// clientConfiguration.setNioServiceThreads(1);
// return clientConfiguration;
// }
public Peer getPeer() {
Peer peer = new Peer();
peer.setHost(host);
peer.setPort(port);
return peer;
}
public Peer getTlsPeer() {
Peer peer = new Peer();
peer.setHost(host);
peer.setPort(tlsPort);
peer.setUseTls(true);
return peer;
}
protected void performISE() throws KineticException {
KineticAdminClient kineticAdminClient = KineticAdminClientFactory
.createInstance(getAdminClientConfig());
String oldErasePin = System.getProperty("OLD_PIN", "");
String newErasePin = System.getProperty("NEW_PIN", "123");
kineticAdminClient.setErasePin(toByteArray(oldErasePin), toByteArray(newErasePin));
kineticAdminClient.instantErase(toByteArray(newErasePin));
kineticAdminClient.close();
}
}